كود واحد يُعطى لجهاز الزبون فيسحب به كل أكواد تفعيلاته (بكب/تطبيق هاتف/دنكل/منيو…). هنا كل نقاط اتصال جهاز الزبون + إدارة البوابات والاشتراكات.
/api/gw
الإدارة: /api/alraed/gateways
البكب: /api/alraed/backup
كود البوابة: ALR-XXXX-XXXX
بدل كود لكل خدمة، الزبون يأخذ كوداً واحداً ALR-XXXX-XXXX لجهازه، والجهاز يسحب به كل خدماته وأكوادها. للزبون أكثر من بوابة (واحدة لكل جهاز/فرع)، ولكل بوابة اشتراك بكب مستقل بحصّته وملفاته.
يوجد جمهوران لهذه الـAPIs:
| الجمهور | الأساس | المصادقة |
|---|---|---|
| جهاز الزبون (العقد الجديد) | /api/gw | ترويسة X-Gateway-Code |
| جهاز الزبون (العقد القديم — توافق) | /customer | حقل Guid_Customer بالجسم |
| إدارة الويب (بوابات/اشتراكات) | /api/alraed/gateways · /api/alraed/backup | Bearer Token |
{ success, message, data }. العقد القديم /customer يرجّع صيغة النظام القديم (success:1 + حقول بأسماء legacy) للتوافق مع الأجهزة المنصّبة./api/gwكل نقطة تتطلّب ترويسة X-Gateway-Code: ALR-XXXX-XXXX (الكود بالترويسة لا بالجسم كي لا يُسجَّل بالروابط). ترويسات اختيارية: X-Machine (بصمة الجهاز — لكشف مشاركة الكود) وX-App-Version. حماية: خانق 20 محاولة فاشلة/10 دقائق لكل IP.
/api/gw/resolveX-Gateway-Code: ALR-7K3M-92QX
X-Machine: DESKTOP-ABC (اختياري) X-App-Version: 2.1 (اختياري)
{ "appVersion": "2.1", "machine": "DESKTOP-ABC" }
{
"code": "ALR-7K3M-92QX",
"customerName": "شركة النور",
"customerPhone": "07701234567",
"isActive": true,
"serverTimeUtc": "2026-07-24T09:00:00Z",
"services": [
{
"key": "backup", "name": "الباك أب أونلاين",
"isActive": true, "isExpired": false,
"code": "12", "endDate": "2027-01-01", "daysRemaining": 160,
"extra": { "quotaMb":"1024", "usedBytes":"...", "remainingBytes":"..." }
},
{ "key": "phoneapp", "name": "تطبيق الهاتف — ...", "code": "user01", ... }
]
}
/api/gw/backup/info{ "quotaMb":1024, "quotaBytes":1073741824, "usedBytes":52428800,
"remainingBytes":1021313024, "fileCount":3, "lastUploadAt":"...",
"isActive":true, "isExpired":false, "endDate":"2027-01-01" }
/api/gw/backup/files{ id, originalName, sizeBytes, contentType, createdAt }./api/gw/backup/filesfile). يفحص التفعيل والانتهاء والامتداد (bak/zip/sql/gz) والحجم والحصّة.{ "id": 45, "originalName": "backup_2026.zip", "sizeBytes": 2195727 }
uploads/backups/ALR-7K3M-92QX/./api/gw/backup/files/{id}/download/api/gw/backup/files/{id}/customer (توافق)طبقة توافق مع الأجهزة المنصّبة بالنظام القديم — تشتغل بمجرّد تغيير BaseUrl إلى alraed.space بلا تحديث للتطبيق. المصادقة عبر Guid_Customer (معرّف البوابة) في جسم الطلب.
| الأسلوب | المسار | الوظيفة | الطلب |
|---|---|---|---|
| POST | /customer/get | سرد الملفات (+ رابط تنزيل) | { Guid_Customer } |
| POST | /customer/info | معلومات الزبون والمساحة والانتهاء | { Guid_Customer } |
| POST | /customer/post | رفع نسخة | multipart: Guid_Customer + Name_Fileupload |
| GET | /customer/download/{guid}/{fileId} | تنزيل مباشر | — |
| POST | /customer/delete | حذف ملف | { Guid_Customer, ID_Fileupload } |
| POST | /customer/multidelete | حذف عدة ملفات | { Guid_Customer, ids[] } |
{ success:1, ... } وبحقول legacy (مثل ID_Fileupload / remaining_space / Active_Customer). تشديد أمني: الحذف صار يتطلّب Guid_Customer (كان يحذف بمعرّف الملف وحده — ثغرة أُغلقت)./api/alraed/gatewaysتحتاج Bearer Token. صلاحيات gateway.view للعرض وgateway.manage للتعديل.
| الأسلوب | المسار | الوظيفة | صلاحية |
|---|---|---|---|
| GET | /gateways | قائمة البوابات (بحث/تصفية) | view |
| GET | /gateways/{id} | تفاصيل بوابة (+ حواسيبها) | view |
| GET | /gateways/by-customer/{customerId} | بوابات عميل | view |
| GET | /gateways/dongle-options/{customerId} | دناكل العميل للربط | view |
| POST | /gateways | إنشاء بوابة (يولّد الكود) | manage |
| PUT | /gateways/{id} | تعديل (اسم/تفعيل/ربط دنكل) | manage |
| POST | /gateways/{id}/regenerate | توليد كود جديد للبوابة | manage |
| DEL | /gateways/{id} | حذف بوابة | manage |
| PUT | /gateways/{id}/backup | إضافة/تعديل اشتراك بكب للبوابة | manage |
| DEL | /gateways/{id}/backup | إزالة اشتراك البكب | manage |
| PUT | /gateways/{id}/services/{key} | إضافة/تعديل خدمة عامة للبوابة | manage |
| DEL | /gateways/{id}/services/{key} | إزالة خدمة | manage |
| POST | /gateways/cleanup-empty-dongle-gateways | حذف بوابات الدناكل بلا اشتراك | manage |
| POST | /gateways/backfill-dongles | فتح بوابات لدناكل قديمة | manage |
/gateways{ "customerId": 31908, "name": "جهاز المحاسبة", "isActive": true,
"note": null, "dongleActivationId": null }
الاشتراكات العامة (منيو/دومين/أي خدمة تُضاف) — نقطة التوسّع بلا migration.
| الأسلوب | المسار | الوظيفة | صلاحية |
|---|---|---|---|
| GET | /gateways/service-keys | مفاتيح الخدمات المتاحة وحالتها | view |
| PUT | /gateways/service-keys | تفعيل/تعطيل خدمات (المطفأة تختفي) | manage |
| GET | /gateways/services | قائمة الاشتراكات العامة | view |
| POST | /gateways/services | إضافة اشتراك خدمة لعميل | manage |
| PUT | /gateways/services/{id} | تعديل اشتراك | manage |
| DEL | /gateways/services/{id} | حذف اشتراك | manage |
/gateways/renew/{serviceKey}/{targetId}serviceKey = نوع الخدمة (backup/domain/menu…)، targetId = معرّف الاشتراك. التمديد يبدأ من الأبعد بين اليوم والانتهاء الحالي (التجديد المبكر لا يُهدر المتبقّي). يُسجَّل بسجل التجديدات.gateway.renew{ "months": 12, "note": "تجديد سنوي" } // months: 1–120
/gateways/renewals?serviceKey=&targetId=gateway.view/gateways/summarygateway.view/gateways/subscriptions-reportgateway.view/api/alraed/backupإدارة اشتراكات البكب من الويب (الموظف). صلاحيات backup.view / backup.manage.
| الأسلوب | المسار | الوظيفة | صلاحية |
|---|---|---|---|
| GET | /backup/subscriptions?q=&status= | قائمة الاشتراكات + عدّادات | view |
| GET | /backup/subscriptions/{id} | تفاصيل اشتراك | view |
| GET | /backup/subscriptions/{id}/info | معلومات المساحة | view |
| POST | /backup/subscriptions | إنشاء اشتراك | manage |
| PUT | /backup/subscriptions/{id} | تعديل (حصّة/انتهاء/تفعيل) | manage |
| DEL | /backup/subscriptions/{id} | حذف اشتراك وكل ملفاته | manage |
| GET | /backup/subscriptions/{id}/files | ملفات الاشتراك | view |
| POST | /backup/subscriptions/{id}/files | رفع نسخة (multipart file) | manage |
| GET | /backup/files/{id}/download | تنزيل نسخة | view |
| DEL | /backup/files/{id} | حذف نسخة | manage |
/backup/subscriptions{ "customerId":31908, "quotaMb":1024, "endDate":"2027-01-01",
"isActive":true, "note":null, "gatewayId":1 } // gatewayId فارغ = اشتراك عام على مستوى العميل
| المفتاح | يسمح بـ |
|---|---|
gateway.view | عرض البوابات والاشتراكات والملخّص والتقرير وسجل التجديد. |
gateway.manage | إنشاء/تعديل/حذف البوابات والاشتراكات، توليد كود، تفعيل/تعطيل الخدمات. |
gateway.renew | تجديد الاشتراكات. |
backup.view / backup.manage | عرض / إدارة اشتراكات البكب وملفاته من الويب. |
/api/gw و/customer) لا تحتاج صلاحيات نظام — تُصادَق بكود البوابة نفسه، لأن جهاز الزبون ليس مستخدماً بالنظام.# 1) سحب كل خدمات الزبون بكود البوابة
curl -s -X POST https://alraed.space/api/gw/resolve \
-H "X-Gateway-Code: ALR-7K3M-92QX" \
-H "Content-Type: application/json" -d '{"machine":"DESKTOP-ABC"}'
# 2) معلومات مساحة البكب
curl -s -H "X-Gateway-Code: ALR-7K3M-92QX" \
https://alraed.space/api/gw/backup/info
# 3) رفع نسخة (multipart)
curl -s -X POST https://alraed.space/api/gw/backup/files \
-H "X-Gateway-Code: ALR-7K3M-92QX" \
-F "file=@backup_2026.zip"
TOKEN="eyJhbGciOi..." # من auth/login
# إنشاء بوابة لعميل
curl -s -X POST https://alraed.space/api/alraed/gateways \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"customerId":31908,"name":"جهاز المحاسبة","isActive":true}'
# تجديد اشتراك بكب (id=12) سنة
curl -s -X POST https://alraed.space/api/alraed/gateways/renew/backup/12 \
-H "Authorization: Bearer $TOKEN" -H "Content-Type: application/json" \
-d '{"months":12,"note":"تجديد سنوي"}'
X-Gateway-Code أو Guid_Customer القديم) بلا حساب نظام. الموظف يدير البوابات والاشتراكات بالتوكن (Bearer). كود بوابة واحد يجمع كل خدمات الزبون عبر /resolve.