عن المشروع

Redacted هي مكتبة Scala وإضافة مترجم مصممة لمنع التسرب غير المقصود للحقول الحساسة (مثل بيانات الاعتماد والبيانات الشخصية وغيرها من المعلومات السرية) المعرّفة داخل `case classes`. وهي تعمل عبر إعادة كتابة طريقة `toString` الافتراضية في وقت الترجمة، مع استبدال الحقول المعلَّمة بعنصر نائب (مثل `***`) مع ترك الوصول المباشر إلى الحقول دون تأثر. **الميزات الرئيسية:** - **قائمة على التعليقات التوضيحية**: ما عليك سوى تعليم الحقول الحساسة بـ `@redacted` لاستبعادها من مخرجات `toString`. - **تحويل في وقت الترجمة**: تعيد إضافة المترجم كتابة `toString` أثناء الترجمة، مما يضمن عدم وجود عبء إضافي في وقت التشغيل وعدم وجود اعتماد على الإضافة في الملف التنفيذي النهائي. - **متعددة المنصات**: تدعم JVM وScala.js وScala Native. - **تكامل سهل**: توفر إضافة sbt باسم `sbt-redacted` لإعداد سلس. **مثال على الاستخدام:** ```scala import io.github.polentino.redacted.redacted case class HttpHeaders(userId: UUID, @redacted apiKey: String, languages: Seq[Locale], correlationId: String) case class User(id: UUID, nickname: String, @redacted email: String) ``` بعد الإعداد، سيؤدي تفريغ الكائن أو استدعاء `toString` إلى طباعة `***` للحقول المعلَّمة، بينما لا يزال الوصول المباشر (مثل `headers.apiKey`) يعيد القيمة الفعلية. **إصدارات Scala المدعومة:** - Scala 3 (من 3.1.3 إلى 3.9.0، بما في ذلك إصدارات LTS) - Scala 2.13 و2.12 **المنصات:** - JVM - Scala.js (1.x) - Scala Native (0.5) **كيفية العمل:** تفحص إضافة المترجم كل تعريف نوع، وتتحقق مما إذا كان `case class` يحتوي على حقل واحد على الأقل معلَّم بـ `@redacted`، ثم تعيد كتابة تنفيذ `toString` الافتراضي لإخراج `***` بشكل انتقائي لتلك الحقول. **المتطلبات:** - Java 17+ (جميع المكونات مترجمة على Java 17) **موارد إضافية:** - موقع المشروع: https://polentino.github.io/redacted/ - مستودع إضافة sbt: https://github.com/polentino/sbt-redacted **المتبنّون:** - InvestSuite (B2B، Scalable & AI-Driven WealthTech) Redacted مثالية للمطورين الذين يعملون بـ Scala ويحتاجون إلى ضمان عدم تعرض البيانات الحساسة عن طريق الخطأ في السجلات أو مخرجات وحدة التحكم، لا سيما في التطبيقات التي تتعامل مع بيانات اعتماد المستخدمين أو مفاتيح API أو البيانات المتعلقة بـ PII/GDPR.