feat: Improve server name and server host
All checks were successful
Build site / Rust CI (push) Successful in 24s

Signed-off-by: Awiteb <a@4rs.nl>
This commit is contained in:
Awiteb 2024-08-05 14:13:10 +00:00
parent 73f2e2cbc6
commit 0eef795fe1
Signed by: awiteb
GPG key ID: 3F6B55640AA6682F

View file

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