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 بت).
|
يتم وضع العنوان العام في رأس (Header) الطلب (Request) بأسم `X-OTMP-PUBLIC` ويجب ان يكون نص [base58] صحيح مكون من 33 بايت (264 بت).
|
||||||
|
|
||||||
## أسم الخادم
|
## أسم الخادم
|
||||||
أسم الخادم هو نطاق إلكتروني طبيعي، على سبيل المثال `example.com` ويتم جلب عنوان
|
يكون أسم الخادم عنوان إلكتروني مثل `example.com` ولا يجب أن يكون الخادم نفسه، هو
|
||||||
الخادم و المنفذ (port) من خلال المسار التالي
|
أسم فقط يشير إلى الخادم، على سبيل المثال، أسم الخادم `example.com` ولكن الخادم
|
||||||
`https://example.com/.well-known/oxidetalis/server` وهو نص بتنسيق json بالشكل
|
هو `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">
|
<div dir="ltr">
|
||||||
|
|
||||||
|
@ -54,15 +75,6 @@ add_toc = true
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
حيث يتم وضع نقطتان رأسيتان `:` بين عنوان الخادم والمنفذ الذي يستمع إليه. سيسهل
|
|
||||||
هذا من جعل أسماء الخوادم سهلة التذكر والكتابة.
|
|
||||||
|
|
||||||
يتم وضع اسم خادم المرسل في رأس الطلب بأسم `X-OTMP-SERVER` ويجب ان يكون اسم
|
|
||||||
الخادم فقط، على سبيل المثال `example.com`.
|
|
||||||
|
|
||||||
> سيتم إرسال الطلب كـ "http" وليس "https"، ويمكنك إعادة توجيه الطلب إلى "https"
|
|
||||||
> إذا كنت تريد ذلك.
|
|
||||||
|
|
||||||
> يجب على الخوادم عدم تخزين اسماء خوادم المرسلين الخارجيين، ويتم تحديده في الطلب
|
> يجب على الخوادم عدم تخزين اسماء خوادم المرسلين الخارجيين، ويتم تحديده في الطلب
|
||||||
> المرسل من قبلهم فقط، حيث يعتبر المفتاح العام هو المعرف المشترك بين جميع
|
> المرسل من قبلهم فقط، حيث يعتبر المفتاح العام هو المعرف المشترك بين جميع
|
||||||
> الخوادم. سوف يوفر هذا سهولة إنتقال الافراد من خادم إلى أخر مع بقاء تعرف
|
> الخوادم. سوف يوفر هذا سهولة إنتقال الافراد من خادم إلى أخر مع بقاء تعرف
|
||||||
|
@ -81,18 +93,21 @@ CBC]، بعد تشفير الرسالة يتم وضع قيمة التهيئة (i
|
||||||
بايت (128 بت) هي قيمة التهيئة (iv) التي سوف يستخدمها المستقبِل لفك تشفير
|
بايت (128 بت) هي قيمة التهيئة (iv) التي سوف يستخدمها المستقبِل لفك تشفير
|
||||||
الرسالة.
|
الرسالة.
|
||||||
|
|
||||||
مثال لمفتاح تشفير مشترك بترميز [base58]\
|
مثال لمفتاح تشفير مشترك بترميز [base58] <span
|
||||||
`LKGKeuV3SRu1n3fez4SdboM3FT48vbBxHai9MbuWxb3`
|
dir="ltr"><code>LKGKeuV3SRu1n3fez4SdboM3FT48vbBxHai9MbuWxb3</code></span>
|
||||||
|
|
||||||
## عنوان الخادم
|
## مفتاح الخادم العام
|
||||||
عنوان الخادم مثل العنواين العامة الخاصة بالمستخدمين، ولكنه خاص بالخادم، حيث ان
|
مفتاح الخادم العام هو مثل العنواين العامة الخاصة بالمستخدمين، ولكنه خاص بالخادم،
|
||||||
الخادم سوف يقوم بأنشاء مفتاح مشترك بينه وبين مرسل الطلب (Request) ليتأكد من أن
|
حيث ان الخادم سوف يقوم بأنشاء مفتاح مشترك بينه وبين مرسل الطلب (Request) ليتأكد
|
||||||
المرسل (صاحب العنوان العام) هو مالك هذا العنوان. يتم التأكد عبر مطابقة التوقيع
|
من أن المرسل (صاحب العنوان العام) هو مالك هذا العنوان. يتم التأكد عبر مطابقة
|
||||||
الموجود في الطلب (Request).
|
التوقيع الموجود في الطلب (Request).
|
||||||
|
|
||||||
يتم توفير المفتاح العام الخاص بالخادم في المسار التالي، ويكون رد الخادم نص
|
يتم جلب مفتاح الخادم العام من المسار <span
|
||||||
base58 فقط:\
|
dir='ltr'><code>/api/info</code></span> سوف يتم إرسال طلب GET إلى هذا المسار و
|
||||||
`https://example.com/.well-known/oxidetalis/public`
|
يجب أن يُرجع هذا المسار نص بتنسيق `application/json` يحتوي على المفتاح
|
||||||
|
`public_key` ولذي قيمته نص المفتاح العام الخاص بالخادم بترميز [base58]، سوف يتم
|
||||||
|
إرسال الطلب ببروتوكول https و يجب أن يدعم الخادم https و يجب ان تكون الشهادة
|
||||||
|
موقعة من جهة موثوقة وليست موقعة ذاتياً[^1]
|
||||||
|
|
||||||
> تم توضيح المفتاح العام هنا ([العناوين العامة](#l-nwyn-l-m))
|
> تم توضيح المفتاح العام هنا ([العناوين العامة](#l-nwyn-l-m))
|
||||||
|
|
||||||
|
@ -122,9 +137,15 @@ base58 فقط:\
|
||||||
بعد ذلك يتم أخذ نتيجة دالة [HMAC-SHA256] و إضافة الوقت المستخدم في الأعلى و
|
بعد ذلك يتم أخذ نتيجة دالة [HMAC-SHA256] و إضافة الوقت المستخدم في الأعلى و
|
||||||
الـ16 بايت المستخدمة في الأعلى و جميعهم بترميز [Hex]، مثال
|
الـ16 بايت المستخدمة في الأعلى و جميعهم بترميز [Hex]، مثال
|
||||||
|
|
||||||
|
|
||||||
|
<div dir="ltr">
|
||||||
|
|
||||||
```
|
```
|
||||||
bad035084e11bfd266c7b7dfa473d6603be551b3aa215f869776b75bf42ef31900000000665e1a696e6d776f65726e6664757265686a66
|
bad035084e11bfd266c7b7dfa473d6603be551b3aa215f869776b75bf42ef31900000000665e1a696e6d776f65726e6664757265686a66
|
||||||
```
|
```
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
بعد تحويله إلى بايتات سوف يكون المجموع 56 بايت، وسوف يكون التقسيم كالتالي
|
بعد تحويله إلى بايتات سوف يكون المجموع 56 بايت، وسوف يكون التقسيم كالتالي
|
||||||
- مخرج دالة [HMAC-SHA256]: من بايت 0 إلى بايت31. (التوقيع الذي سوف يتحقق منه
|
- مخرج دالة [HMAC-SHA256]: من بايت 0 إلى بايت31. (التوقيع الذي سوف يتحقق منه
|
||||||
الخادم)
|
الخادم)
|
||||||
|
@ -191,7 +212,7 @@ bad035084e11bfd266c7b7dfa473d6603be551b3aa215f869776b75bf42ef31900000000665e1a69
|
||||||
> نسبياً
|
> نسبياً
|
||||||
|
|
||||||
### التواصل الداخلي
|
### التواصل الداخلي
|
||||||
اولاً **يجب**[^1] عند فتحك لعميل التواصل أن تقوم بإنشاء تواصل [Websocket] بينك
|
اولاً **يجب**[^2] عند فتحك لعميل التواصل أن تقوم بإنشاء تواصل [Websocket] بينك
|
||||||
وبين الخادم الخاص بك، عبر هذا الإتصال سوف تستقبل الرسائل الجديدة من الخادم الخاص
|
وبين الخادم الخاص بك، عبر هذا الإتصال سوف تستقبل الرسائل الجديدة من الخادم الخاص
|
||||||
بك، وسوف تقوم بالتواصل من خلاله لإرسال الرسائل إلى افراد الخادم.
|
بك، وسوف تقوم بالتواصل من خلاله لإرسال الرسائل إلى افراد الخادم.
|
||||||
|
|
||||||
|
@ -227,7 +248,7 @@ alice بأن bob وافق او رفض التواصل معه (عبر إتصال
|
||||||
يقوم alice بإرسال طلب Get إلى `example2.com` يطلب فيه الدردشة مع bob، سوف يرد
|
يقوم alice بإرسال طلب Get إلى `example2.com` يطلب فيه الدردشة مع bob، سوف يرد
|
||||||
الخادم بأحد الردود التالية
|
الخادم بأحد الردود التالية
|
||||||
|
|
||||||
#### إذا لم يكن هناك مستخدم بأسم bob في الخادم
|
#### إذا لم ي3كن هناك مستخدم بأسم bob في الخادم
|
||||||
سوف يرجع الخادم 404 و يُعلم alice بأنه ليس لديه مستخدم بهذا الأسم.
|
سوف يرجع الخادم 404 و يُعلم alice بأنه ليس لديه مستخدم بهذا الأسم.
|
||||||
|
|
||||||
#### إذا لم يكن alice في قائمة bob البيضاء ولا السوداء
|
#### إذا لم يكن alice في قائمة bob البيضاء ولا السوداء
|
||||||
|
@ -236,11 +257,11 @@ alice بأن bob وافق او رفض التواصل معه (عبر إتصال
|
||||||
من إضافة bob إلى قائمته البيضاء ليستقبل منه الرسائل مستقبلاً بدون حاجة bob إرسال
|
من إضافة bob إلى قائمته البيضاء ليستقبل منه الرسائل مستقبلاً بدون حاجة bob إرسال
|
||||||
طلب دردشة وإنتظار قبولها، سوف يقوم alice ايضاً بطلب الخادم من إضافة bob إلى جدول
|
طلب دردشة وإنتظار قبولها، سوف يقوم alice ايضاً بطلب الخادم من إضافة bob إلى جدول
|
||||||
طلبات الدردشة **المُرسلة** ويتم تضمين خادم bob الحالي الذي تم إرسال طلب الدردشة
|
طلبات الدردشة **المُرسلة** ويتم تضمين خادم bob الحالي الذي تم إرسال طلب الدردشة
|
||||||
إليه[^2]
|
إليه[^3]
|
||||||
|
|
||||||
إذا قبل/رفض bob الدردشة سوف يُعلم خادم bob خادم alice أن bob قام بقبول/رفض
|
إذا قبل/رفض bob الدردشة سوف يُعلم خادم bob خادم alice أن bob قام بقبول/رفض
|
||||||
الدردشة، سوف يضع الخادم التوقيع الخاص به في `X-OTMP-SIGNATURE` وسوف يتم جلب
|
الدردشة، سوف يضع الخادم التوقيع الخاص به في `X-OTMP-SIGNATURE` وسوف يتم جلب
|
||||||
المفتاح العام الخاص به من مسار الخادم[^3] (لقد قام alice بإضافة bob والخادم
|
المفتاح العام الخاص به من مسار الخادم[^4] (لقد قام alice بإضافة bob والخادم
|
||||||
الخاص به في جدول طلبات الدردشة **المُرسلة** لذالك خادم alice يعلم ماهو خادم
|
الخاص به في جدول طلبات الدردشة **المُرسلة** لذالك خادم alice يعلم ماهو خادم
|
||||||
bob).
|
bob).
|
||||||
|
|
||||||
|
@ -271,11 +292,13 @@ bob).
|
||||||
|
|
||||||
{{ hr(data_content="وصلات") }}
|
{{ 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
|
[Websocket]: https://en.wikipedia.org/wiki/WebSocket
|
||||||
[HMAC-SHA256]: https://en.wikipedia.org/wiki/HMAC
|
[HMAC-SHA256]: https://en.wikipedia.org/wiki/HMAC
|
||||||
|
|
Loading…
Reference in a new issue