نظام الوحدات
يعتمد SirrChat بنية معيارية تتيح لك تخصيص وتوسيع الوظائف وفقًا لاحتياجاتك.
أنواع الوحدات
وحدات المصادقة
التعامل مع مصادقة المستخدم.
go
type AuthModule interface {
Name() string
Authenticate(username, credential string) (bool, error)
Supports(method string) bool
}وحدات التخزين
إدارة البريد الإلكتروني وتخزين البيانات.
go
type StorageModule interface {
Save(mailbox string, message *Message) error
Load(mailbox string, uid uint32) (*Message, error)
Delete(mailbox string, uid uint32) error
}وحدات التصفية
تصفية ومعالجة محتوى البريد الإلكتروني.
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 {
// تهيئة التكوين
return nil
}
func (f *MyFilter) Filter(ctx *module.Context, msg *module.Message) (module.Action, error) {
// تطبيق منطق التصفية
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الإخراج:
وحدات المصادقة:
- blockchain-auth (ممكّن)
- ldap-auth (معطل)
- pam-auth (ممكّن)
وحدات التصفية:
- spam-filter (ممكّن)
- virus-scanner (ممكّن)
وحدات التخزين:
- 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 {
// تنفيذ قبل استقبال البريد الإلكتروني
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)
}
// منطق الاختبار
}التعبئة والإصدار
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 = ["user@example.com"]
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الوثائق ذات الصلة: