diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..2e19aeb --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "cSpell.words": [ + "Nekonymous" + ] +} \ No newline at end of file diff --git a/package.json b/package.json index 5def74d..e279d7f 100644 --- a/package.json +++ b/package.json @@ -29,8 +29,7 @@ "@cloudflare/workers-types": "^4.20240821.1", "@noble/curves": "1.5.0", "@noble/hashes": "^1.4.0", - "@worker-tools/html": "2.0.0-pre.13", "grammy": "^1.29.0", "web-uuid": "0.1.0-pre.1" } -} +} \ No newline at end of file diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e3145b9..35534de 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -17,9 +17,6 @@ importers: '@noble/hashes': specifier: ^1.4.0 version: 1.4.0 - '@worker-tools/html': - specifier: 2.0.0-pre.13 - version: 2.0.0-pre.13 grammy: specifier: ^1.29.0 version: 1.29.0 @@ -399,12 +396,6 @@ packages: resolution: {integrity: sha512-RmZwrTbQ9QveF15m/Cl28n0LXD6ea2CjkhH5rQ55ewz3H24w+AMCJHPVYaZ8/0HoG8Z3cLLFFycRXxeO2tz9FA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@worker-tools/html@2.0.0-pre.13': - resolution: {integrity: sha512-MkmUNNX6fE/2tRM8iWpoSZ6hbZ4srMxzecPdyNvT4cydfYs6YEmFFv0w27839ALQxwtpsDCOKlDLEkhhzbMs9Q==} - - '@worker-tools/stream-response@0.1.0-pre.4': - resolution: {integrity: sha512-PHMaXNbaavvtPWuPTjslNMmbFX0Wv4iKsa9ZiL+KkcTuXwSh5okMShYxt0st0bx4C137kIK/bBQqw/JBEKlP9Q==} - abort-controller@3.0.0: resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} engines: {node: '>=6.5'} @@ -1349,9 +1340,6 @@ packages: typed-array-utils@0.2.4: resolution: {integrity: sha512-tttiItskXSSYIkbPfnYmSfL4nkcIxjUKyD4pZJCiwstGjpU4UwDBQfE6UR67xxikVFFcGduo3JCds4yKiA0RVQ==} - typed-array-utils@0.3.0-pre.0: - resolution: {integrity: sha512-hzkk8/bpvqCayQnQAno11R8qOWHrkTHR9k+JYVEBpHAQMF2YfPqBMKKkSmeSw2Qd4ri+QugFmj7ca4ckSr4Z4Q==} - typescript-eslint@8.3.0: resolution: {integrity: sha512-EvWjwWLwwKDIJuBjk2I6UkV8KEQcwZ0VM10nR1rIunRDIP67QJTZAHBXTX0HW/oI1H10YESF8yWie8fRQxjvFA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -1394,9 +1382,6 @@ packages: webidl-conversions@3.0.1: resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==} - whatwg-stream-to-async-iter@0.6.2: - resolution: {integrity: sha512-ocSOY/Qe/Y5rLC3Xnz6gi8+A9niy+dUQSjnox/nRryKkV/NahxyspB/joyhYLBbQp1JAFrTBOVd/RUo0NrZ96g==} - whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -1722,15 +1707,6 @@ snapshots: '@typescript-eslint/types': 8.3.0 eslint-visitor-keys: 3.4.3 - '@worker-tools/html@2.0.0-pre.13': - dependencies: - '@worker-tools/stream-response': 0.1.0-pre.4 - - '@worker-tools/stream-response@0.1.0-pre.4': - dependencies: - typed-array-utils: 0.3.0-pre.0 - whatwg-stream-to-async-iter: 0.6.2 - abort-controller@3.0.0: dependencies: event-target-shim: 5.0.1 @@ -2798,8 +2774,6 @@ snapshots: typed-array-utils@0.2.4: {} - typed-array-utils@0.3.0-pre.0: {} - typescript-eslint@8.3.0(eslint@9.9.1)(typescript@5.5.4): dependencies: '@typescript-eslint/eslint-plugin': 8.3.0(@typescript-eslint/parser@8.3.0(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1)(typescript@5.5.4) @@ -2852,10 +2826,6 @@ snapshots: webidl-conversions@3.0.1: {} - whatwg-stream-to-async-iter@0.6.2: - dependencies: - tslib: 2.7.0 - whatwg-url@5.0.0: dependencies: tr46: 0.0.3 diff --git a/src/front/about.ts b/src/front/about.ts index 3967fbd..c040b1b 100644 --- a/src/front/about.ts +++ b/src/front/about.ts @@ -1,103 +1,61 @@ -import { html } from "@worker-tools/html"; - -const AboutPageContent = html` +export const AboutPageContent =() => `

- نِکونیموس یک ربات قدرتمند و خصوصی برای ارسال پیام‌های ناشناس است. با این - ربات می‌توانید بدون افشای هویت خود، به صورت کاملاً امن با دیگر کاربران - ارتباط برقرار کنید. نِکونیموس با بهره‌گیری از تکنولوژی‌های پیشرفته و - الگوریتم‌های رمزنگاری مدرن، امنیت کامل مکالمات شما را تضمین می‌کند. + نِکونیموس یک ربات امن و ناشناس برای ارسال پیام‌های رمزنگاری شده است که به شما امکان می‌دهد بدون افشای هویت خود، به صورت کاملاً خصوصی با دیگر کاربران ارتباط برقرار کنید. این ربات با استفاده از تکنولوژی‌های پیشرفته و الگوریتم‌های رمزنگاری مدرن، امنیت کامل مکالمات شما را تضمین می‌کند.

-

چگونگی کارکرد ربات

+

نحوه کارکرد ربات

- نِکونیموس به شما این امکان را می‌دهد که به صورت ناشناس پیام‌های خود را به - دیگران ارسال کنید. هنگامی که شما از این ربات استفاده می‌کنید، یک لینک یکتا - برای شما تولید می‌شود. این لینک را می‌توانید با دیگران به اشتراک بگذارید - تا آن‌ها بتوانند به صورت ناشناس به شما پیام ارسال کنند. + نِکونیموس به شما این امکان را می‌دهد که به صورت ناشناس پیام‌های خود را به دیگران ارسال کنید. هر بار که از این ربات استفاده می‌کنید، یک شناسه یکتا (UUID) به شما اختصاص داده می‌شود. این شناسه‌ها به صورت تصادفی تولید می‌شوند و هیچ ارتباطی با هویت واقعی شما ندارند.

- در هر بار استفاده از ربات، یک شناسه یکتا (UUID) به شما اختصاص داده می‌شود. - این شناسه‌ها به صورت تصادفی تولید می‌شوند و به هیچ وجه به هویت واقعی شما - متصل نیستند. زمانی که کاربری از طریق لینک شما پیام ارسال می‌کند، پیام‌ها - به صورت رمزنگاری شده برای شما ارسال می‌شوند. تنها شما قادر به خواندن این - پیام‌ها هستید، چرا که کلیدهای رمزنگاری به صورت کاملاً امن و منحصر به فرد - برای هر مکالمه تولید می‌شوند. + پیام‌ها به صورت رمزنگاری شده ارسال می‌شوند و تنها شما می‌توانید آن‌ها را بخوانید. نِکونیموس از کلیدهای رمزنگاری منحصربه‌فرد برای هر مکالمه استفاده می‌کند، بنابراین حتی اگر کسی به داده‌های ذخیره‌شده دسترسی پیدا کند، نمی‌تواند پیام‌ها را بدون کلید صحیح بخواند.

-

سیستم امنیتی ربات

+

امنیت و حریم خصوصی

- نِکونیموس از تکنیک‌های پیشرفته رمزنگاری برای حفظ امنیت داده‌ها استفاده - می‌کند. هر مکالمه با یک کلید خصوصی منحصربه‌فرد رمزگذاری می‌شود که در - سرورهای ما ذخیره نمی‌شود و تنها برای مدت زمان لازم جهت ارسال و دریافت - پیام‌ها استفاده می‌شود. حتی اگر فردی به سرورهای ما دسترسی پیدا کند، - نمی‌تواند پیام‌های شما را بخواند. + نِکونیموس از تکنیک‌های پیشرفته رمزنگاری برای حفظ امنیت داده‌ها استفاده می‌کند. هر مکالمه با یک کلید خصوصی منحصربه‌فرد رمزگذاری می‌شود که تنها شما و گیرنده قادر به دسترسی به آن هستید. کلید APP_SECURE_KEY به طور ایمن در محیط Cloudflare ذخیره می‌شود و حتی اگر کسی به داده‌های ذخیره‌شده دسترسی پیدا کند، بدون این کلید نمی‌تواند آن‌ها را رمزگشایی کند.

- همچنین، یک مکانیسم امنیتی اضافه با استفاده از کلید APP_SECURE_KEY به منظور - ترکیب با کلید خصوصی تولید شده در ربات، پیاده‌سازی شده است. این مکانیسم - باعث می‌شود که حتی در صورت دسترسی به داده‌های ذخیره‌شده، هیچ‌گونه اطلاعات - قابل استفاده‌ای بدون داشتن کلید APP_SECURE_KEY استخراج نشود. + علاوه بر این، نِکونیموس اطلاعات حساس شما را در سرورها ذخیره نمی‌کند و تمامی داده‌ها تنها برای مدت زمان لازم جهت پردازش پیام‌ها نگهداری می‌شوند و سپس به صورت ایمن حذف می‌گردند. ربات تضمین می‌کند که تمامی مکالمات شما به صورت کاملاً امن و خصوصی باقی خواهند ماند.

زیرساخت فنی

- نِکونیموس بر روی پلتفرم Cloudflare Workers اجرا می‌شود، که یکی از - سریع‌ترین و امن‌ترین پلتفرم‌های ابری موجود است. این پلتفرم به ما امکان - می‌دهد تا ربات را با سرعت بالا و با دسترسی گسترده ارائه دهیم. Cloudflare - Workers درخواست‌ها را در نزدیک‌ترین دیتاسنتر به کاربر پردازش می‌کند، که - این امر منجر به بهبود عملکرد و کاهش تأخیر در پاسخگویی می‌شود. + نِکونیموس بر روی پلتفرم Cloudflare Workers اجرا می‌شود، که یکی از سریع‌ترین و امن‌ترین پلتفرم‌های ابری موجود است. این پلتفرم امکان ارائه ربات با سرعت بالا و دسترسی گسترده را فراهم می‌کند. داده‌های کاربر در Cloudflare R2 و KV Storage به صورت توزیع شده و رمزنگاری شده ذخیره می‌شوند.

- داده‌های کاربر در Cloudflare R2 و KV Storage به صورت توزیع شده و رمزنگاری - شده ذخیره می‌شوند. این سیستم به ما امکان می‌دهد تا داده‌ها را به صورت امن - و با دسترسی بالا در سراسر جهان مدیریت کنیم، به طوری که دسترسی به آن‌ها - تنها با استفاده از کلیدهای امنیتی ممکن است. + این سیستم به ما امکان می‌دهد تا داده‌ها را به صورت امن و با دسترسی بالا در سراسر جهان مدیریت کنیم، به طوری که دسترسی به آن‌ها تنها با استفاده از کلیدهای امنیتی ممکن است.

سیستم گزارش‌گیری (Logs)

- نِکونیموس از یک سیستم گزارش‌گیری پیشرفته برای پیگیری و ثبت فعالیت‌های - مختلف ربات استفاده می‌کند. تمامی رویدادها مانند ایجاد کاربر جدید، ارسال - پیام، آغاز مکالمه جدید، و خطاهای احتمالی به صورت لاگ در Cloudflare R2 - ذخیره می‌شوند. این گزارش‌ها می‌توانند برای تحلیل عملکرد ربات، بهبود - سیستم‌ها، و تضمین امنیت مورد استفاده قرار گیرند. + نِکونیموس از یک سیستم گزارش‌گیری پیشرفته برای پیگیری و ثبت فعالیت‌های مختلف ربات استفاده می‌کند. تمامی رویدادها مانند ایجاد کاربر جدید، ارسال پیام، آغاز مکالمه جدید، و خطاهای احتمالی به صورت امن در Cloudflare R2 ذخیره می‌شوند. این گزارش‌ها تنها برای تحلیل عملکرد ربات و بهبود سیستم‌ها استفاده می‌شوند.

- با استفاده از این سیستم، می‌توانیم اطلاعات ارزشمندی از کاربران آنلاین، - تعداد مکالمات فعال، و میزان استفاده از ربات در بازه‌های زمانی مختلف - جمع‌آوری کنیم. این اطلاعات به صورت ناشناس و فقط برای بهبود سرویس‌ها مورد - استفاده قرار می‌گیرند. + این سیستم گزارش‌دهی اطلاعات ارزشمندی درباره کاربران آنلاین، تعداد مکالمات فعال، و میزان استفاده از ربات در بازه‌های زمانی مختلف جمع‌آوری می‌کند. این اطلاعات به صورت ناشناس نگهداری شده و تنها برای بهبود خدمات ربات استفاده می‌شوند.

-

مکانیزم‌های امنیتی پیشرفته

+

امنیت پیشرفته

- نِکونیموس از الگوریتم‌های رمزنگاری متقارن و نامتقارن استفاده می‌کند که یکی - از امن‌ترین روش‌ها برای حفاظت از اطلاعات است. در هر مکالمه، یک کلید خصوصی - برای رمزنگاری و رمزگشایی پیام‌ها تولید می‌شود. این کلیدها به هیچ وجه در - سرورها ذخیره نمی‌شوند و فقط به صورت موقت برای پردازش پیام‌ها مورد استفاده - قرار می‌گیرند. + نِکونیموس از الگوریتم‌های رمزنگاری متقارن و نامتقارن استفاده می‌کند که از امن‌ترین روش‌ها برای حفاظت از اطلاعات شما هستند. در هر مکالمه، یک کلید خصوصی برای رمزنگاری و رمزگشایی پیام‌ها تولید می‌شود که این کلیدها به هیچ وجه در سرورها ذخیره نمی‌شوند.

- همچنین، برای اطمینان از عدم دسترسی افراد غیرمجاز به پیام‌ها، از - مکانیزم‌های احراز هویت چند مرحله‌ای استفاده می‌کنیم. این مکانیزم‌ها تضمین - می‌کنند که تنها افراد مجاز قادر به ارسال و دریافت پیام‌ها باشند. + همچنین، برای اطمینان از عدم دسترسی افراد غیرمجاز به پیام‌ها، از مکانیزم‌های احراز هویت چند مرحله‌ای استفاده می‌شود. این مکانیزم‌ها تضمین می‌کنند که تنها افراد مجاز قادر به ارسال و دریافت پیام‌ها هستند.

نحوه استفاده از ربات

- برای استفاده از نِکونیموس، کافی است لینک ناشناس خود را از طریق دستور - "دریافت لینک" دریافت کرده و آن را با دیگران به اشتراک بگذارید. هنگامی که - فردی از طریق این لینک به شما پیام ارسال می‌کند، شما یک اعلان دریافت خواهید - کرد و می‌توانید به آن پاسخ دهید. + برای استفاده از نِکونیموس، کافی است لینک ناشناس خود را از طریق دستور "دریافت لینک" دریافت کرده و آن را با دیگران به اشتراک بگذارید. هنگامی که فردی از طریق این لینک به شما پیام ارسال می‌کند، شما یک اعلان دریافت خواهید کرد و می‌توانید به آن پاسخ دهید. +

+

+ اگر می‌خواهید حریم خصوصی بیشتری داشته باشید، می‌توانید از دستور "حذف حساب" برای حذف کامل حساب کاربری خود و تمامی پیام‌های مرتبط استفاده کنید. نِکونیموس به شما این اطمینان را می‌دهد که تمامی مکالمات شما به صورت کاملاً امن و خصوصی باقی خواهند ماند.

+ +

نِکونیموس یک پروژه متن‌باز

- اگر می‌خواهید حریم خصوصی بیشتری داشته باشید، می‌توانید از دستور "حذف حساب" - برای حذف کامل حساب کاربری خود و تمامی پیام‌های مرتبط استفاده کنید. - نِکونیموس به شما این اطمینان را می‌دهد که تمامی مکالمات شما به صورت کاملاً - امن و خصوصی باقی خواهند ماند. + نِکونیموس یک پروژه متن‌باز است که به شما این امکان را می‌دهد که به صورت کامل بر نحوه عملکرد ربات نظارت داشته باشید. شما می‌توانید کدهای منبع این ربات را در گیت‌هاب بررسی کنید و اطمینان حاصل کنید که تمامی فرآیندها به درستی پیاده‌سازی شده‌اند.

`; -export default AboutPageContent; diff --git a/src/front/index.ts b/src/front/home.ts similarity index 98% rename from src/front/index.ts rename to src/front/home.ts index 3a3efc2..8c1e50d 100644 --- a/src/front/index.ts +++ b/src/front/home.ts @@ -1,8 +1,7 @@ -import { html } from "@worker-tools/html"; import { Environment } from "../types"; export const HomePageContent = async (env: Environment) => { - return html` + return `

به ${env.BOT_NAME} خوش آمدید @@ -21,12 +20,9 @@ export const HomePageContent = async (env: Environment) => { در حال بارگذاری...

- -
-

کاربران فعال

diff --git a/src/front/layout.ts b/src/front/layout.ts index cb09943..7719142 100644 --- a/src/front/layout.ts +++ b/src/front/layout.ts @@ -1,65 +1,111 @@ -import { html, HTMLContent } from "@worker-tools/html"; -import navMenu from "./nav"; -import style from "./styles"; -const pageLayout = (title: string, BOT_NAME: string, content: HTMLContent) => - html` - - - - - - - ${style} - ${title} - - - - - - - - - - - - - - - - - - - - - - -

- ${navMenu(BOT_NAME)} -
${content}
-
- - `; + } + + + + + +
+ +
+ ${content} +
+
+ + +`; export default pageLayout; diff --git a/src/front/nav.ts b/src/front/nav.ts deleted file mode 100644 index 8c52390..0000000 --- a/src/front/nav.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { html } from "@worker-tools/html"; - -// Function to generate navigation menu -const navMenu = (title: string) => html` - -`; -export default navMenu; diff --git a/src/front/styles.ts b/src/front/styles.ts deleted file mode 100644 index a05656c..0000000 --- a/src/front/styles.ts +++ /dev/null @@ -1,35 +0,0 @@ -import { html } from "@worker-tools/html"; - -const style = html` - -`; - -export default style; diff --git a/src/index.ts b/src/index.ts index 4a9a0eb..3b20319 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,8 +1,7 @@ -import { HTMLResponse } from "@worker-tools/html"; import { webhookCallback } from "grammy"; import { createBot } from "./bot/bot"; -import HomePageContent from "./front"; -import AboutPageContent from "./front/about"; +import { AboutPageContent } from "./front/about"; +import { HomePageContent } from "./front/Home"; import pageLayout from "./front/layout"; import Logger from "./utils/logs"; import { Router } from "./utils/router"; @@ -27,12 +26,17 @@ const router = new Router(); router.get( "/", async (request: Request, env: Environment, ctx: ExecutionContext) => { - return new HTMLResponse( - pageLayout(env.BOT_NAME, env.BOT_NAME, await HomePageContent(env)) - ); + const content = await HomePageContent(env); + const html = pageLayout("ارسال پیام تلگرام ناشناس", env.BOT_NAME, content); + return new Response(html, { + headers: { + "content-type": "text/html;charset=UTF-8", + }, + }); } ); + /** * Define the route for the about page. * This will serve a page with information about the application or service. @@ -40,9 +44,18 @@ router.get( router.get( "/about", async (request: Request, env: Environment, ctx: ExecutionContext) => { - return new HTMLResponse( - pageLayout("درباره", env.BOT_NAME, AboutPageContent) - ); + + const content = AboutPageContent(); + const html = pageLayout("درباره", env.BOT_NAME, content); + return new Response(html, { + headers: { + "content-type": "text/html;charset=UTF-8", + }, + }); + + // return new HTMLResponse( + // pageLayout("درباره", env.BOT_NAME, AboutPageContent) + // ); } ); diff --git a/wrangler.toml b/wrangler.toml index 356774a..bbe107d 100644 --- a/wrangler.toml +++ b/wrangler.toml @@ -5,12 +5,10 @@ compatibility_date = "2024-08-19" workers_dev = true kv_namespaces = [ - { binding = "NekonymousKV", id = "de26a1b398614383a2b9702fafaa8824" }, + { binding = "NekonymousKV", id = "de26a1b398614383a2b9702fafaa8824" }, ] -r2_buckets = [ - { binding = "nekonymousr2", bucket_name = "nekonymousr2"} -] +r2_buckets = [{ binding = "nekonymousr2", bucket_name = "nekonymousr2" }] [placement] mode = "smart"