feat: Improve server name and server host
All checks were successful
Build site / Rust CI (push) Successful in 24s
All checks were successful
Build site / Rust CI (push) Successful in 24s
Signed-off-by: Awiteb <a@4rs.nl>
This commit is contained in:
parent
73f2e2cbc6
commit
0eef795fe1
1 changed files with 53 additions and 30 deletions
|
@ -41,10 +41,31 @@ add_toc = true
|
|||
يتم وضع العنوان العام في رأس (Header) الطلب (Request) بأسم `X-OTMP-PUBLIC` ويجب ان يكون نص [base58] صحيح مكون من 33 بايت (264 بت).
|
||||
|
||||
## أسم الخادم
|
||||
أسم الخادم هو نطاق إلكتروني طبيعي، على سبيل المثال `example.com` ويتم جلب عنوان
|
||||
الخادم و المنفذ (port) من خلال المسار التالي
|
||||
`https://example.com/.well-known/oxidetalis/server` وهو نص بتنسيق json بالشكل
|
||||
الآتي
|
||||
يكون أسم الخادم عنوان إلكتروني مثل `example.com` ولا يجب أن يكون الخادم نفسه، هو
|
||||
أسم فقط يشير إلى الخادم، على سبيل المثال، أسم الخادم `example.com` ولكن الخادم
|
||||
هو `otmp.example.com:443`، هكذا سوف يتم الإشارة لى مستخدمين هذا الخادم <snap
|
||||
dir='ltr'><code>@becZJsZZqGR7qBG8t1Pm4uy62jDTzJsabxnkARhr2syo/example.com</code></snap>
|
||||
ويمكن إختصاره بالواجهات الرسومية بأخذ أول ثلاث أحرف و أخر ثلاث أحرف ووضع `..`
|
||||
بينهم، ليصبح بهذا الشكل <snap
|
||||
dir='ltr'><code>@bec..syo/example.com</code></snap>.
|
||||
|
||||
### كيفية الإشارة
|
||||
يشير أسم الخادم إلى الخادم عبر المسار التالي <span
|
||||
dir='ltr'><code>/.well-known/oxidetalis/server</code></span>
|
||||
|
||||
سوف يتم إرسال طلب GET إلى هذا المسار و يجب أن يُرجع هذا المسار نص بتنسيق
|
||||
`application/json` يحتوي على المفتاح `otmp_server` ولذي يحتوي على مكان إستضافة
|
||||
الخادم والمنفذ الذي يستمع إليه، سوف يتم إرسال الطلب ببروتوكول https و يجب أن
|
||||
يدعم الخادم https و يجب ان تكون الشهادة موقعة من جهة موثوقة وليست موقعة
|
||||
ذاتياً[^1]
|
||||
|
||||
### مفتاح `otmp_server`
|
||||
محتوى هذا المفتاح يجب أن يكون نص، يتكون هذا النص من جزئين يفصل بينهم نقطتان
|
||||
رأسيتان، الجزء الأول هو مكان الإستضافة و الجزء الثاني هو المنفذ على سبيل المثال
|
||||
`"example.com:443"` و `"otmp.example.com:7294"` و `"93.184.215.14:7294"` و <snap
|
||||
dir='ltr'><code>"[2606:2800:021f:cb07:6820:80da:af6b:8b2c]:7294"</code></snap>.
|
||||
|
||||
### مثال
|
||||
|
||||
<div dir="ltr">
|
||||
|
||||
|
@ -54,15 +75,6 @@ add_toc = true
|
|||
|
||||
</div>
|
||||
|
||||
حيث يتم وضع نقطتان رأسيتان `:` بين عنوان الخادم والمنفذ الذي يستمع إليه. سيسهل
|
||||
هذا من جعل أسماء الخوادم سهلة التذكر والكتابة.
|
||||
|
||||
يتم وضع اسم خادم المرسل في رأس الطلب بأسم `X-OTMP-SERVER` ويجب ان يكون اسم
|
||||
الخادم فقط، على سبيل المثال `example.com`.
|
||||
|
||||
> سيتم إرسال الطلب كـ "http" وليس "https"، ويمكنك إعادة توجيه الطلب إلى "https"
|
||||
> إذا كنت تريد ذلك.
|
||||
|
||||
> يجب على الخوادم عدم تخزين اسماء خوادم المرسلين الخارجيين، ويتم تحديده في الطلب
|
||||
> المرسل من قبلهم فقط، حيث يعتبر المفتاح العام هو المعرف المشترك بين جميع
|
||||
> الخوادم. سوف يوفر هذا سهولة إنتقال الافراد من خادم إلى أخر مع بقاء تعرف
|
||||
|
@ -81,18 +93,21 @@ CBC]، بعد تشفير الرسالة يتم وضع قيمة التهيئة (i
|
|||
بايت (128 بت) هي قيمة التهيئة (iv) التي سوف يستخدمها المستقبِل لفك تشفير
|
||||
الرسالة.
|
||||
|
||||
مثال لمفتاح تشفير مشترك بترميز [base58]\
|
||||
`LKGKeuV3SRu1n3fez4SdboM3FT48vbBxHai9MbuWxb3`
|
||||
مثال لمفتاح تشفير مشترك بترميز [base58] <span
|
||||
dir="ltr"><code>LKGKeuV3SRu1n3fez4SdboM3FT48vbBxHai9MbuWxb3</code></span>
|
||||
|
||||
## عنوان الخادم
|
||||
عنوان الخادم مثل العنواين العامة الخاصة بالمستخدمين، ولكنه خاص بالخادم، حيث ان
|
||||
الخادم سوف يقوم بأنشاء مفتاح مشترك بينه وبين مرسل الطلب (Request) ليتأكد من أن
|
||||
المرسل (صاحب العنوان العام) هو مالك هذا العنوان. يتم التأكد عبر مطابقة التوقيع
|
||||
الموجود في الطلب (Request).
|
||||
## مفتاح الخادم العام
|
||||
مفتاح الخادم العام هو مثل العنواين العامة الخاصة بالمستخدمين، ولكنه خاص بالخادم،
|
||||
حيث ان الخادم سوف يقوم بأنشاء مفتاح مشترك بينه وبين مرسل الطلب (Request) ليتأكد
|
||||
من أن المرسل (صاحب العنوان العام) هو مالك هذا العنوان. يتم التأكد عبر مطابقة
|
||||
التوقيع الموجود في الطلب (Request).
|
||||
|
||||
يتم توفير المفتاح العام الخاص بالخادم في المسار التالي، ويكون رد الخادم نص
|
||||
base58 فقط:\
|
||||
`https://example.com/.well-known/oxidetalis/public`
|
||||
يتم جلب مفتاح الخادم العام من المسار <span
|
||||
dir='ltr'><code>/api/info</code></span> سوف يتم إرسال طلب GET إلى هذا المسار و
|
||||
يجب أن يُرجع هذا المسار نص بتنسيق `application/json` يحتوي على المفتاح
|
||||
`public_key` ولذي قيمته نص المفتاح العام الخاص بالخادم بترميز [base58]، سوف يتم
|
||||
إرسال الطلب ببروتوكول https و يجب أن يدعم الخادم https و يجب ان تكون الشهادة
|
||||
موقعة من جهة موثوقة وليست موقعة ذاتياً[^1]
|
||||
|
||||
> تم توضيح المفتاح العام هنا ([العناوين العامة](#l-nwyn-l-m))
|
||||
|
||||
|
@ -122,9 +137,15 @@ base58 فقط:\
|
|||
بعد ذلك يتم أخذ نتيجة دالة [HMAC-SHA256] و إضافة الوقت المستخدم في الأعلى و
|
||||
الـ16 بايت المستخدمة في الأعلى و جميعهم بترميز [Hex]، مثال
|
||||
|
||||
|
||||
<div dir="ltr">
|
||||
|
||||
```
|
||||
bad035084e11bfd266c7b7dfa473d6603be551b3aa215f869776b75bf42ef31900000000665e1a696e6d776f65726e6664757265686a66
|
||||
```
|
||||
|
||||
</div>
|
||||
|
||||
بعد تحويله إلى بايتات سوف يكون المجموع 56 بايت، وسوف يكون التقسيم كالتالي
|
||||
- مخرج دالة [HMAC-SHA256]: من بايت 0 إلى بايت31. (التوقيع الذي سوف يتحقق منه
|
||||
الخادم)
|
||||
|
@ -191,7 +212,7 @@ bad035084e11bfd266c7b7dfa473d6603be551b3aa215f869776b75bf42ef31900000000665e1a69
|
|||
> نسبياً
|
||||
|
||||
### التواصل الداخلي
|
||||
اولاً **يجب**[^1] عند فتحك لعميل التواصل أن تقوم بإنشاء تواصل [Websocket] بينك
|
||||
اولاً **يجب**[^2] عند فتحك لعميل التواصل أن تقوم بإنشاء تواصل [Websocket] بينك
|
||||
وبين الخادم الخاص بك، عبر هذا الإتصال سوف تستقبل الرسائل الجديدة من الخادم الخاص
|
||||
بك، وسوف تقوم بالتواصل من خلاله لإرسال الرسائل إلى افراد الخادم.
|
||||
|
||||
|
@ -227,7 +248,7 @@ alice بأن bob وافق او رفض التواصل معه (عبر إتصال
|
|||
يقوم alice بإرسال طلب Get إلى `example2.com` يطلب فيه الدردشة مع bob، سوف يرد
|
||||
الخادم بأحد الردود التالية
|
||||
|
||||
#### إذا لم يكن هناك مستخدم بأسم bob في الخادم
|
||||
#### إذا لم ي3كن هناك مستخدم بأسم bob في الخادم
|
||||
سوف يرجع الخادم 404 و يُعلم alice بأنه ليس لديه مستخدم بهذا الأسم.
|
||||
|
||||
#### إذا لم يكن alice في قائمة bob البيضاء ولا السوداء
|
||||
|
@ -236,11 +257,11 @@ alice بأن bob وافق او رفض التواصل معه (عبر إتصال
|
|||
من إضافة bob إلى قائمته البيضاء ليستقبل منه الرسائل مستقبلاً بدون حاجة bob إرسال
|
||||
طلب دردشة وإنتظار قبولها، سوف يقوم alice ايضاً بطلب الخادم من إضافة bob إلى جدول
|
||||
طلبات الدردشة **المُرسلة** ويتم تضمين خادم bob الحالي الذي تم إرسال طلب الدردشة
|
||||
إليه[^2]
|
||||
إليه[^3]
|
||||
|
||||
إذا قبل/رفض bob الدردشة سوف يُعلم خادم bob خادم alice أن bob قام بقبول/رفض
|
||||
الدردشة، سوف يضع الخادم التوقيع الخاص به في `X-OTMP-SIGNATURE` وسوف يتم جلب
|
||||
المفتاح العام الخاص به من مسار الخادم[^3] (لقد قام alice بإضافة bob والخادم
|
||||
المفتاح العام الخاص به من مسار الخادم[^4] (لقد قام alice بإضافة bob والخادم
|
||||
الخاص به في جدول طلبات الدردشة **المُرسلة** لذالك خادم alice يعلم ماهو خادم
|
||||
bob).
|
||||
|
||||
|
@ -271,11 +292,13 @@ bob).
|
|||
|
||||
{{ hr(data_content="وصلات") }}
|
||||
|
||||
[^1]: طالما انك عضو في الخادم، سوف يعتقد الخادم دائماً انك في إتصال [Websocket] معه، ولن يقوم بترقية أي إتصال إلى [Websocket]
|
||||
[^1]: لضمان عدم وجود شخص في المنتصف، يقوم بإرسال خادم مختلف عن الخادم الفعلي.
|
||||
[^2]: طالما انك عضو في الخادم، سوف يعتقد الخادم دائماً انك في إتصال [Websocket] معه، ولن يقوم بترقية أي إتصال إلى [Websocket]
|
||||
|
||||
[^2]: يتم إضافة العنوان الخاص بـbob و الخادم الخاص به في جدول طلبات الدردشة للتاكد من عدم إستقبال إشعارات قبول/رفض من خوادم مزيفة هدفها الإزعاج.
|
||||
[^3]: يتم إضافة العنوان الخاص بـbob و الخادم الخاص به في جدول طلبات الدردشة للتاكد من عدم إستقبال إشعارات قبول/رفض من خوادم مزيفة هدفها الإزعاج.
|
||||
|
||||
[^3]: للتاكد من انه الخادم فعلاً، لن يتم طلب منه المفتاح العام بشكل مباشر، بل سوف يتم جلبه من مسار الخاص به، وهو `/.well-known/oxidetalis/public`
|
||||
[^4]: للتاكد من انه الخادم فعلاً، لن يتم طلب منه المفتاح العام بشكل مباشر، بل سوف يتم جلبه من مسار الخاص به، وهو <span
|
||||
dir='ltr'><code>/api/info</code></span>
|
||||
|
||||
[Websocket]: https://en.wikipedia.org/wiki/WebSocket
|
||||
[HMAC-SHA256]: https://en.wikipedia.org/wiki/HMAC
|
||||
|
|
Loading…
Reference in a new issue