모듈 시스템
SirrChat은 필요에 따라 기능을 사용자 정의하고 확장할 수 있는 모듈식 아키텍처를 채택합니다.
모듈 유형
Auth 모듈
사용자 인증을 처리합니다.
go
type AuthModule interface {
Name() string
Authenticate(username, credential string) (bool, error)
Supports(method string) bool
}Storage 모듈
이메일 및 데이터 스토리지를 관리합니다.
go
type StorageModule interface {
Save(mailbox string, message *Message) error
Load(mailbox string, uid uint32) (*Message, error)
Delete(mailbox string, uid uint32) error
}Filter 모듈
이메일 콘텐츠 필터링 및 처리.
go
type FilterModule interface {
Filter(ctx *Context, msg *Message) (Action, error)
}내장 모듈
blockchain-auth
블록체인 지갑 인증 모듈.
구성:
toml
[[modules.auth]]
name = "blockchain-auth"
enabled = true
[modules.auth.config]
networks = ["ethereum", "bsc"]ldap-auth
LDAP 디렉토리 서비스 인증.
구성:
toml
[[modules.auth]]
name = "ldap-auth"
enabled = true
[modules.auth.config]
server = "ldap://ldap.example.com"spam-filter
스팸 필터링 모듈.
구성:
toml
[[modules.filter]]
name = "spam-filter"
enabled = true
[modules.filter.config]
threshold = 5.0
quarantine = truedkim-signer
DKIM 이메일 서명 모듈.
구성:
toml
[[modules.modify]]
name = "dkim-signer"
enabled = true
[modules.modify.config]
selector = "default"
private_key = "/etc/sirrchatd/dkim/private.key"커스텀 모듈
모듈 생성
go
package mymodule
import "github.com/mail-chat-chain/mailchatd/module"
type MyFilter struct {
config Config
}
func (f *MyFilter) Name() string {
return "my-filter"
}
func (f *MyFilter) Init(cfg map[string]interface{}) error {
// Initialize configuration
return nil
}
func (f *MyFilter) Filter(ctx *module.Context, msg *module.Message) (module.Action, error) {
// Implement filtering logic
if someCondition(msg) {
return module.ActionReject, nil
}
return module.ActionAccept, nil
}모듈 등록
go
func init() {
module.Register("my-filter", &MyFilter{})
}모듈 구성
toml
[[modules.filter]]
name = "my-filter"
enabled = true
[modules.filter.config]
custom_option = "value"모듈 관리
모듈 나열
bash
sirrchatd module list출력:
Auth 모듈:
- blockchain-auth (활성화)
- ldap-auth (비활성화)
- pam-auth (활성화)
Filter 모듈:
- spam-filter (활성화)
- virus-scanner (활성화)
Storage 모듈:
- maildir (활성화)
- s3 (비활성화)모듈 활성화/비활성화
bash
# 모듈 활성화
sirrchatd module enable spam-filter
# 모듈 비활성화
sirrchatd module disable spam-filter모듈 다시 로드
bash
sirrchatd module reload --name spam-filter모듈 구성
전역 구성
toml
[modules]
# 모듈 로딩 경로
load_path = "/usr/lib/sirrchatd/modules"
# 자동 로드
auto_load = true
# 모듈 타임아웃
timeout = "30s"모듈 우선순위
toml
[[modules.filter]]
name = "spam-filter"
priority = 100 # 낮은 숫자 = 높은 우선순위
[[modules.filter]]
name = "virus-scanner"
priority = 50모듈 후크
사용 가능한 후크
pre_auth: 인증 전post_auth: 인증 후pre_receive: 이메일 수신 전post_receive: 이메일 수신 후pre_send: 이메일 전송 전post_send: 이메일 전송 후
후크 예제
go
func (m *MyModule) PreReceive(ctx *Context, msg *Message) error {
// Execute before receiving email
log.Printf("Receiving email from %s", msg.From)
return nil
}모듈 개발
개발 환경 설정
bash
# 모듈 템플릿 복제
git clone https://github.com/mail-chat-chain/module-template.git my-module
cd my-module
# 의존성 설치
go mod download
# 모듈 빌드
go build -buildmode=plugin -o my-module.so모듈 테스트
go
package mymodule_test
import (
"testing"
"github.com/mail-chat-chain/mailchatd/module"
)
func TestMyModule(t *testing.T) {
m := &MyModule{}
err := m.Init(map[string]interface{}{})
if err != nil {
t.Fatal(err)
}
// Test logic
}패키징 및 릴리스
bash
# 릴리스 버전 빌드
go build -ldflags="-s -w" -buildmode=plugin
# 시스템에 설치
sudo cp my-module.so /usr/lib/sirrchatd/modules/일반 모듈
rate-limiter
속도 제한 모듈.
toml
[[modules.filter]]
name = "rate-limiter"
[modules.filter.config]
max_per_hour = 100
max_per_minute = 10auto-reply
자동 응답 모듈.
toml
[[modules.modify]]
name = "auto-reply"
[modules.modify.config]
enabled_users = ["[email protected]"]
message = "I'm out of office"archive
이메일 아카이빙 모듈.
toml
[[modules.storage]]
name = "archive"
[modules.storage.config]
retention_days = 365
compress = true모듈 성능
성능 모니터링
bash
sirrchatd module stats출력:
모듈 호출 평균 시간 최대 시간
spam-filter 1,234 45ms 250ms
dkim-signer 1,234 12ms 45ms
virus-scanner 1,234 123ms 890ms성능 최적화
toml
[modules.performance]
# 동시 처리
parallel = true
max_goroutines = 10
# 캐싱
enable_cache = true
cache_size_mb = 64문제 해결
디버그 모드
toml
[modules.debug]
enabled = true
log_level = "debug"
trace_calls = true모듈 로그
bash
# 모듈 로그 보기
sirrchatd module logs --name spam-filter
# 실시간 로그
sirrchatd module logs --name spam-filter --follow관련 문서: