147 lines
5.1 KiB
TypeScript
147 lines
5.1 KiB
TypeScript
export type Lang = "fa" | "en";
|
||
|
||
export interface Product {
|
||
key: string;
|
||
name: string;
|
||
tagline: Record<Lang, string>;
|
||
category: Record<Lang, string>;
|
||
status: "connected" | "future";
|
||
icon: "bermooda" | "hamsoo" | "spark";
|
||
}
|
||
|
||
export const PRODUCTS: Product[] = [
|
||
{
|
||
key: "bermooda",
|
||
name: "Bermooda",
|
||
tagline: {
|
||
fa: "پلتفرم مدیریت کسبوکار و ERP",
|
||
en: "ERP / Business Management Platform",
|
||
},
|
||
category: { fa: "ERP", en: "ERP" },
|
||
status: "connected",
|
||
icon: "bermooda",
|
||
},
|
||
{
|
||
key: "hamsoo",
|
||
name: "Hamsoo",
|
||
tagline: {
|
||
fa: "شبکه کسبوکار و استعدادها",
|
||
en: "Business & Talent Network",
|
||
},
|
||
category: { fa: "شبکه", en: "Network" },
|
||
status: "connected",
|
||
icon: "hamsoo",
|
||
},
|
||
{
|
||
key: "future",
|
||
name: "Future Apps",
|
||
tagline: {
|
||
fa: "محصول بعدی شما، متصل به یک هویت",
|
||
en: "Your next product, on one identity",
|
||
},
|
||
category: { fa: "اکوسیستم", en: "Ecosystem" },
|
||
status: "future",
|
||
icon: "spark",
|
||
},
|
||
];
|
||
|
||
export interface Feature {
|
||
icon: "shield" | "key" | "users" | "building" | "activity" | "lock";
|
||
title: Record<Lang, string>;
|
||
description: Record<Lang, string>;
|
||
}
|
||
|
||
export const FEATURES: Feature[] = [
|
||
{
|
||
icon: "key",
|
||
title: { fa: "احراز هویت OAuth 2.0 و OpenID Connect", en: "OAuth 2.0 & OpenID Connect" },
|
||
description: {
|
||
fa: "جریانهای استاندارد authorize، token و refresh با پشتیبانی از PKCE برای وب و موبایل.",
|
||
en: "Standard authorize, token and refresh flows with PKCE support for web and mobile.",
|
||
},
|
||
},
|
||
{
|
||
icon: "shield",
|
||
title: { fa: "نشستها و دستگاهها", en: "Sessions & Devices" },
|
||
description: {
|
||
fa: "ردیابی نشستهای فعال، لغو از راه دور و تشخیص دستگاه با چرخش توکن ایمن.",
|
||
en: "Track active sessions, revoke remotely, detect devices, and rotate tokens safely.",
|
||
},
|
||
},
|
||
{
|
||
icon: "building",
|
||
title: { fa: "سازمانها و عضویتها", en: "Organizations & Memberships" },
|
||
description: {
|
||
fa: "مدل سازمانی یکپارچه که هر محصول میتواند از آن به عنوان شرکت یا تیم استفاده کند.",
|
||
en: "A unified org model every product can reuse as company, team or workspace.",
|
||
},
|
||
},
|
||
{
|
||
icon: "users",
|
||
title: { fa: "اپلیکیشنها و اعتبار سرویس", en: "Applications & Service Credentials" },
|
||
description: {
|
||
fa: "هر محصول client_id و client_secret اختصاصی دارد؛ توکنها با مالکیت مشخص صادر میشوند.",
|
||
en: "Each product gets its own client_id and secret; tokens carry explicit ownership.",
|
||
},
|
||
},
|
||
{
|
||
icon: "activity",
|
||
title: { fa: "رویدادهای امنیتی و لاگ حسابرسی", en: "Security Events & Audit Log" },
|
||
description: {
|
||
fa: "هر ورود، خروج و لغو نشست به عنوان رویداد قابلپیگیری ثبت میشود.",
|
||
en: "Every login, logout and revocation is recorded as a traceable security event.",
|
||
},
|
||
},
|
||
{
|
||
icon: "lock",
|
||
title: { fa: "محدودیت نرخ و محافظت بروتهکنش", en: "Rate Limiting & Brute-force Protection" },
|
||
description: {
|
||
fa: "قفل خودکار پس از تلاشهای ناموفق و محدودیت نرخ در سطح کاربر و آدرس IP.",
|
||
en: "Automatic lockout after failed attempts and per-user, per-IP rate limits.",
|
||
},
|
||
},
|
||
];
|
||
|
||
export const PROTOCOLS: string[] = [
|
||
"OAuth 2.0",
|
||
"OpenID Connect",
|
||
"PKCE",
|
||
"JWT (RS256)",
|
||
"MFA-Ready",
|
||
];
|
||
|
||
export const STEPS = [
|
||
{
|
||
icon: "compass",
|
||
title: { fa: "کشف", en: "Discover" },
|
||
description: {
|
||
fa: "محصول از طریق .well-known/openid-configuration تنظیمات و endpointها را میخواند.",
|
||
en: "A product reads configuration and endpoints via .well-known/openid-configuration.",
|
||
},
|
||
},
|
||
{
|
||
icon: "fingerprint",
|
||
title: { fa: "مجوزدهی", en: "Authorize" },
|
||
description: {
|
||
fa: "کاربر در صفحه ورود یکپارچه احراز میشود و دسترسی را تأیید میکند.",
|
||
en: "The user authenticates on the unified login and consents to scopes.",
|
||
},
|
||
},
|
||
{
|
||
icon: "ticket",
|
||
title: { fa: "دریافت توکن", en: "Receive Tokens" },
|
||
description: {
|
||
fa: "پلتفرم توکن دسترسی JWT امضا‑شده با کلید خصوصی و یک refresh token صادر میکند.",
|
||
en: "The platform issues a JWT access token signed with the private key plus a refresh token.",
|
||
},
|
||
},
|
||
{
|
||
icon: "badgeCheck",
|
||
title: { fa: "تأیید", en: "Verify" },
|
||
description: {
|
||
fa: "محصول فقط با کلید عمومی توکن را تأیید میکند؛ بدون دسترسی به کلید خصوصی.",
|
||
en: "The product verifies the token using only the public key — never the private key.",
|
||
},
|
||
},
|
||
];
|