Skip to content

نظام الوحدات

يعتمد 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 = true

dkim-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 = 10

auto-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

الوثائق ذات الصلة:

Released under the GPL 3.0 License.