strapi-plugin-oidc 1.8.5 → 1.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/{index-DDCcJt16.js → index-BbgFpvmz.js} +64 -44
- package/dist/admin/{index-C8nfr95D.js → index-BqKuUY5d.js} +31 -13
- package/dist/admin/{index-DRFXk_MQ.mjs → index-Dq99roxb.mjs} +63 -43
- package/dist/admin/{index-BlfNZYVU.mjs → index-LcYvW0bR.mjs} +31 -13
- package/dist/admin/index.js +1 -1
- package/dist/admin/index.mjs +1 -1
- package/dist/server/index.js +3424 -441
- package/dist/server/index.mjs +3424 -441
- package/package.json +10 -6
package/dist/server/index.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperties(exports, { __esModule: { value: true }, [Symbol.toStringTag]: { value: "Module" } });
|
|
3
|
+
const zod = require("zod");
|
|
3
4
|
const node_crypto = require("node:crypto");
|
|
4
5
|
const pkceChallenge = require("pkce-challenge");
|
|
5
6
|
const jose = require("jose");
|
|
@@ -21,7 +22,8 @@ const errorCodes = {
|
|
|
21
22
|
USER_CREATION_FAILED: "USER_CREATION_FAILED",
|
|
22
23
|
WHITELIST_CHECK_FAILED: "WHITELIST_CHECK_FAILED",
|
|
23
24
|
EMAIL_NOT_VERIFIED: "EMAIL_NOT_VERIFIED",
|
|
24
|
-
ID_TOKEN_INVALID: "ID_TOKEN_INVALID"
|
|
25
|
+
ID_TOKEN_INVALID: "ID_TOKEN_INVALID",
|
|
26
|
+
PROVIDER_RESPONSE_INVALID: "PROVIDER_RESPONSE_INVALID"
|
|
25
27
|
};
|
|
26
28
|
const ERROR_DETAIL_TEMPLATES = {
|
|
27
29
|
token_exchange_failed: "Token exchange failed with HTTP status {status}",
|
|
@@ -34,6 +36,7 @@ const ERROR_DETAIL_TEMPLATES = {
|
|
|
34
36
|
email_not_verified: "Email address has not been verified by the OIDC provider",
|
|
35
37
|
id_token_invalid: "ID token verification failed: {error}",
|
|
36
38
|
whitelist_not_present: "Email not present in whitelist",
|
|
39
|
+
provider_response_invalid: "Provider returned an unexpected response: {error}",
|
|
37
40
|
session_manager_unsupported: "sessionManager is not supported. Please upgrade to Strapi v5.24.1 or later."
|
|
38
41
|
};
|
|
39
42
|
function interpolate$1(template, params) {
|
|
@@ -54,6 +57,7 @@ const errorMessages = {
|
|
|
54
57
|
EMAIL_NOT_VERIFIED: "Email address has not been verified by the OIDC provider",
|
|
55
58
|
ID_TOKEN_INVALID: "ID token verification failed",
|
|
56
59
|
WHITELIST_NOT_PRESENT: "Not present in whitelist",
|
|
60
|
+
PROVIDER_RESPONSE_INVALID: "Unexpected response from OIDC provider",
|
|
57
61
|
SESSION_MANAGER_UNSUPPORTED: "sessionManager is not supported. Please upgrade to Strapi v5.24.1 or later.",
|
|
58
62
|
JWKS_URI_NOT_CONFIGURED: "[OIDC] OIDC_JWKS_URI is not configured — ID token signature verification is disabled. Set OIDC_JWKS_URI and OIDC_ISSUER from your provider's discovery document.",
|
|
59
63
|
ENFORCE_MIDDLEWARE_ERROR: "Error checking OIDC enforcement in middleware:",
|
|
@@ -62,7 +66,10 @@ const errorMessages = {
|
|
|
62
66
|
AUDIT_LOG_CLEANUP_ERROR: "[strapi-plugin-oidc] Audit log cleanup failed:",
|
|
63
67
|
AUDIT_LOG_EXPORT_ERROR: "NDJSON export stream failed",
|
|
64
68
|
DISCOVERY_FETCH_ERROR: (url, reason) => `[strapi-plugin-oidc] Failed to fetch OIDC discovery document from ${url}: ${reason}`,
|
|
65
|
-
MISSING_CONFIG: (keys) => `Missing required config keys: ${keys}
|
|
69
|
+
MISSING_CONFIG: (keys) => `Missing required config keys: ${keys}`,
|
|
70
|
+
WHITELIST_INVALID_EMAIL: "Please enter a valid email address",
|
|
71
|
+
WHITELIST_INVALID_REQUEST: "Invalid request body",
|
|
72
|
+
WHITELIST_IMPORT_INVALID: "Expected { users: [{email}] }"
|
|
66
73
|
};
|
|
67
74
|
function getEnforceOIDCConfig(strapi2) {
|
|
68
75
|
const config2 = strapi2.config.get("plugin::strapi-plugin-oidc");
|
|
@@ -78,10 +85,96 @@ function resolveEnforceOIDC(strapi2, dbValue) {
|
|
|
78
85
|
if (configValue !== null) return configValue;
|
|
79
86
|
return dbValue ?? false;
|
|
80
87
|
}
|
|
88
|
+
function toBoolCoerced(v) {
|
|
89
|
+
if (typeof v === "boolean") return v;
|
|
90
|
+
if (v === "true" || v === "1") return true;
|
|
91
|
+
if (v === "false" || v === "0") return false;
|
|
92
|
+
return v;
|
|
93
|
+
}
|
|
94
|
+
const coerceBool = (defaultVal) => zod.z.preprocess(toBoolCoerced, zod.z.boolean().default(defaultVal));
|
|
95
|
+
const coerceBoolNullable = zod.z.preprocess(
|
|
96
|
+
(v) => {
|
|
97
|
+
if (v === null || v === void 0 || v === "null") return null;
|
|
98
|
+
const coerced = toBoolCoerced(v);
|
|
99
|
+
return typeof coerced === "boolean" ? coerced : null;
|
|
100
|
+
},
|
|
101
|
+
zod.z.union([zod.z.boolean(), zod.z.null()]).default(null)
|
|
102
|
+
);
|
|
103
|
+
const pluginConfigSchema = zod.z.object({
|
|
104
|
+
REMEMBER_ME: coerceBool(false),
|
|
105
|
+
OIDC_DISCOVERY_URL: zod.z.string().default(""),
|
|
106
|
+
OIDC_REDIRECT_URI: zod.z.string().default(""),
|
|
107
|
+
OIDC_CLIENT_ID: zod.z.string().default(""),
|
|
108
|
+
OIDC_CLIENT_SECRET: zod.z.string().default(""),
|
|
109
|
+
OIDC_SCOPE: zod.z.string().default("openid profile email"),
|
|
110
|
+
OIDC_AUTHORIZATION_ENDPOINT: zod.z.string().default(""),
|
|
111
|
+
OIDC_TOKEN_ENDPOINT: zod.z.string().default(""),
|
|
112
|
+
OIDC_USERINFO_ENDPOINT: zod.z.string().default(""),
|
|
113
|
+
OIDC_FAMILY_NAME_FIELD: zod.z.string().default("family_name"),
|
|
114
|
+
OIDC_GIVEN_NAME_FIELD: zod.z.string().default("given_name"),
|
|
115
|
+
OIDC_END_SESSION_ENDPOINT: zod.z.string().default(""),
|
|
116
|
+
OIDC_SSO_BUTTON_TEXT: zod.z.string().default("Sign in with OIDC"),
|
|
117
|
+
OIDC_ENFORCE: coerceBoolNullable,
|
|
118
|
+
AUDIT_LOG_RETENTION_DAYS: zod.z.number().default(90),
|
|
119
|
+
OIDC_GROUP_FIELD: zod.z.string().default("groups"),
|
|
120
|
+
OIDC_GROUP_ROLE_MAP: zod.z.union([zod.z.string(), zod.z.record(zod.z.string(), zod.z.array(zod.z.string()))]).default("{}"),
|
|
121
|
+
OIDC_REQUIRE_EMAIL_VERIFIED: coerceBool(true),
|
|
122
|
+
OIDC_TRUSTED_IP_HEADER: zod.z.string().default(""),
|
|
123
|
+
OIDC_JWKS_URI: zod.z.string().default(""),
|
|
124
|
+
OIDC_ISSUER: zod.z.string().default(""),
|
|
125
|
+
OIDC_FORCE_SECURE_COOKIES: coerceBool(false)
|
|
126
|
+
});
|
|
127
|
+
function parseGroupRoleMap(raw) {
|
|
128
|
+
if (typeof raw !== "string") {
|
|
129
|
+
if (raw !== null && typeof raw === "object" && !Array.isArray(raw)) {
|
|
130
|
+
return raw;
|
|
131
|
+
}
|
|
132
|
+
return {};
|
|
133
|
+
}
|
|
134
|
+
try {
|
|
135
|
+
return JSON.parse(raw);
|
|
136
|
+
} catch {
|
|
137
|
+
return {};
|
|
138
|
+
}
|
|
139
|
+
}
|
|
81
140
|
const PLUGIN_UID = "plugin::strapi-plugin-oidc";
|
|
141
|
+
const CONTENT_TYPES = {
|
|
142
|
+
AUDIT_LOG: `${PLUGIN_UID}.audit-log`,
|
|
143
|
+
ROLES: `${PLUGIN_UID}.roles`,
|
|
144
|
+
WHITELIST: `${PLUGIN_UID}.whitelists`
|
|
145
|
+
};
|
|
146
|
+
const PERMISSIONS = {
|
|
147
|
+
WHITELIST_READ: `${PLUGIN_UID}.whitelist.read`,
|
|
148
|
+
WHITELIST_WRITE: `${PLUGIN_UID}.whitelist.write`,
|
|
149
|
+
WHITELIST_DELETE: `${PLUGIN_UID}.whitelist.delete`,
|
|
150
|
+
AUDIT_READ: `${PLUGIN_UID}.audit.read`,
|
|
151
|
+
AUDIT_DELETE: `${PLUGIN_UID}.audit.delete`
|
|
152
|
+
};
|
|
153
|
+
const COOKIE_MAX_AGE_MS = 3e5;
|
|
154
|
+
const PKCE_COOKIE_MAX_AGE_MS = 6e5;
|
|
155
|
+
const LOGOUT_USERINFO_TIMEOUT_MS = 1500;
|
|
156
|
+
const AUDIT_LOG_DEFAULTS = {
|
|
157
|
+
PAGE_SIZE: 25,
|
|
158
|
+
MAX_PAGE_SIZE: 100,
|
|
159
|
+
EXPORT_PAGE_SIZE: 500,
|
|
160
|
+
BATCH_DELETE_SIZE: 1e3
|
|
161
|
+
};
|
|
162
|
+
const RATE_LIMIT = {
|
|
163
|
+
WINDOW_MS: 6e4,
|
|
164
|
+
MAX_REQUESTS: 1e3,
|
|
165
|
+
MAX_MAP_SIZE: 1e4,
|
|
166
|
+
PRUNE_THRESHOLD: 1e3
|
|
167
|
+
};
|
|
168
|
+
const CACHE_TTL = {
|
|
169
|
+
SETTINGS_MS: 5 * 60 * 1e3
|
|
170
|
+
// 5 minutes
|
|
171
|
+
};
|
|
82
172
|
const DEFAULT_RETENTION_DAYS = 90;
|
|
173
|
+
const DAY_MS = 864e5;
|
|
174
|
+
const DISCOVERY_TIMEOUT_MS = 5e3;
|
|
175
|
+
const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
83
176
|
function getPluginConfig() {
|
|
84
|
-
return strapi.config.get(
|
|
177
|
+
return pluginConfigSchema.parse(strapi.config.get("plugin::strapi-plugin-oidc") ?? {});
|
|
85
178
|
}
|
|
86
179
|
function getRetentionDays() {
|
|
87
180
|
const config2 = getPluginConfig();
|
|
@@ -96,7 +189,14 @@ const getRoleService = () => strapi.plugin(PLUGIN_NAME).service("role");
|
|
|
96
189
|
const getWhitelistService = () => strapi.plugin(PLUGIN_NAME).service("whitelist");
|
|
97
190
|
const getAuditLogService = () => strapi.plugin(PLUGIN_NAME).service("auditLog");
|
|
98
191
|
const getAdminUserService = () => strapi.service("admin::user");
|
|
99
|
-
const
|
|
192
|
+
const discoveryDocumentSchema = zod.z.object({
|
|
193
|
+
issuer: zod.z.string().optional(),
|
|
194
|
+
authorization_endpoint: zod.z.string().optional(),
|
|
195
|
+
token_endpoint: zod.z.string().optional(),
|
|
196
|
+
userinfo_endpoint: zod.z.string().optional(),
|
|
197
|
+
end_session_endpoint: zod.z.string().optional(),
|
|
198
|
+
jwks_uri: zod.z.string().optional()
|
|
199
|
+
}).passthrough();
|
|
100
200
|
const FIELD_MAP = [
|
|
101
201
|
["issuer", "OIDC_ISSUER"],
|
|
102
202
|
["authorization_endpoint", "OIDC_AUTHORIZATION_ENDPOINT"],
|
|
@@ -113,7 +213,9 @@ async function applyDiscovery(strapi2) {
|
|
|
113
213
|
try {
|
|
114
214
|
const res = await fetch(discoveryUrl, { signal: AbortSignal.timeout(DISCOVERY_TIMEOUT_MS) });
|
|
115
215
|
if (!res.ok) throw new Error(`HTTP ${res.status}`);
|
|
116
|
-
|
|
216
|
+
const parseResult = discoveryDocumentSchema.safeParse(await res.json());
|
|
217
|
+
if (!parseResult.success) throw new Error("malformed discovery document");
|
|
218
|
+
doc = parseResult.data;
|
|
117
219
|
} catch (e) {
|
|
118
220
|
strapi2.log.error(
|
|
119
221
|
errorMessages.DISCOVERY_FETCH_ERROR(discoveryUrl, e instanceof Error ? e.message : String(e))
|
|
@@ -131,6 +233,44 @@ async function applyDiscovery(strapi2) {
|
|
|
131
233
|
strapi2.log.info(`[strapi-plugin-oidc] Discovery applied: ${Object.keys(updates).join(", ")}`);
|
|
132
234
|
}
|
|
133
235
|
}
|
|
236
|
+
const COOKIE_NAMES = {
|
|
237
|
+
state: "oidc_state",
|
|
238
|
+
codeVerifier: "oidc_code_verifier",
|
|
239
|
+
nonce: "oidc_nonce",
|
|
240
|
+
accessToken: "oidc_access_token",
|
|
241
|
+
userEmail: "oidc_user_email",
|
|
242
|
+
adminRefresh: "strapi_admin_refresh",
|
|
243
|
+
authenticated: "oidc_authenticated"
|
|
244
|
+
};
|
|
245
|
+
function shouldMarkSecure(strapi2, ctx) {
|
|
246
|
+
const isProduction = strapi2.config.get("environment") === "production";
|
|
247
|
+
if (!isProduction) return false;
|
|
248
|
+
const config2 = getPluginConfig();
|
|
249
|
+
if (config2.OIDC_FORCE_SECURE_COOKIES === true) return true;
|
|
250
|
+
if (ctx.request.secure) return true;
|
|
251
|
+
const proxyTrusted = ctx.app?.proxy === true;
|
|
252
|
+
if (proxyTrusted && ctx.get("x-forwarded-proto") === "https") return true;
|
|
253
|
+
return false;
|
|
254
|
+
}
|
|
255
|
+
function getExpiredCookieOptions(strapi2, ctx) {
|
|
256
|
+
return {
|
|
257
|
+
httpOnly: true,
|
|
258
|
+
secure: shouldMarkSecure(strapi2, ctx),
|
|
259
|
+
path: strapi2.config.get("admin.auth.cookie.path", "/admin"),
|
|
260
|
+
domain: strapi2.config.get("admin.auth.cookie.domain") || strapi2.config.get("admin.auth.domain"),
|
|
261
|
+
sameSite: strapi2.config.get("admin.auth.cookie.sameSite", "lax"),
|
|
262
|
+
maxAge: 0,
|
|
263
|
+
expires: /* @__PURE__ */ new Date(0)
|
|
264
|
+
};
|
|
265
|
+
}
|
|
266
|
+
function clearAuthCookies(strapi2, ctx) {
|
|
267
|
+
const options2 = getExpiredCookieOptions(strapi2, ctx);
|
|
268
|
+
ctx.cookies.set(COOKIE_NAMES.adminRefresh, "", options2);
|
|
269
|
+
const rootPathOptions = { ...options2, path: "/" };
|
|
270
|
+
ctx.cookies.set(COOKIE_NAMES.authenticated, "", rootPathOptions);
|
|
271
|
+
ctx.cookies.set(COOKIE_NAMES.accessToken, "", rootPathOptions);
|
|
272
|
+
ctx.cookies.set(COOKIE_NAMES.userEmail, "", rootPathOptions);
|
|
273
|
+
}
|
|
134
274
|
const AUTH_ROUTES = ["login", "register", "register-admin", "forgot-password", "reset-password"];
|
|
135
275
|
async function bootstrap({ strapi: strapi2 }) {
|
|
136
276
|
await applyDiscovery(strapi2);
|
|
@@ -159,7 +299,7 @@ async function bootstrap({ strapi: strapi2 }) {
|
|
|
159
299
|
};
|
|
160
300
|
return;
|
|
161
301
|
}
|
|
162
|
-
if (enforceOIDC && isTokenRefresh && !ctx.cookies.get(
|
|
302
|
+
if (enforceOIDC && isTokenRefresh && !ctx.cookies.get(COOKIE_NAMES.authenticated)) {
|
|
163
303
|
ctx.status = 401;
|
|
164
304
|
ctx.body = {
|
|
165
305
|
data: null,
|
|
@@ -189,11 +329,11 @@ async function bootstrap({ strapi: strapi2 }) {
|
|
|
189
329
|
];
|
|
190
330
|
await strapi2.admin.services.permission.actionProvider.registerMany(actions);
|
|
191
331
|
const contentApiScopeUids = [
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
332
|
+
PERMISSIONS.WHITELIST_READ,
|
|
333
|
+
PERMISSIONS.WHITELIST_WRITE,
|
|
334
|
+
PERMISSIONS.WHITELIST_DELETE,
|
|
335
|
+
PERMISSIONS.AUDIT_READ,
|
|
336
|
+
PERMISSIONS.AUDIT_DELETE
|
|
197
337
|
];
|
|
198
338
|
for (const uid of contentApiScopeUids) {
|
|
199
339
|
strapi2.contentAPI.permissions.providers.action.register(uid, { uid });
|
|
@@ -214,11 +354,11 @@ async function bootstrap({ strapi: strapi2 }) {
|
|
|
214
354
|
}
|
|
215
355
|
}
|
|
216
356
|
try {
|
|
217
|
-
const oidcRoleCount = await strapi2.query(
|
|
357
|
+
const oidcRoleCount = await strapi2.query(CONTENT_TYPES.ROLES).count({ where: { oauth_type: "4" } });
|
|
218
358
|
if (oidcRoleCount === 0) {
|
|
219
359
|
const defaultRole = await strapi2.query("admin::role").findOne({ where: { code: "strapi-editor" } }) ?? await strapi2.query("admin::role").findOne({});
|
|
220
360
|
if (defaultRole) {
|
|
221
|
-
await strapi2.query(
|
|
361
|
+
await strapi2.query(CONTENT_TYPES.ROLES).create({
|
|
222
362
|
data: { oauth_type: "4", roles: [String(defaultRole.id)] }
|
|
223
363
|
});
|
|
224
364
|
}
|
|
@@ -316,35 +456,6 @@ const contentTypes = {
|
|
|
316
456
|
whitelists,
|
|
317
457
|
"audit-log": auditLog$1
|
|
318
458
|
};
|
|
319
|
-
function shouldMarkSecure(strapi2, ctx) {
|
|
320
|
-
const isProduction = strapi2.config.get("environment") === "production";
|
|
321
|
-
if (!isProduction) return false;
|
|
322
|
-
const config2 = strapi2.config.get("plugin::strapi-plugin-oidc") ?? {};
|
|
323
|
-
if (config2.OIDC_FORCE_SECURE_COOKIES === true) return true;
|
|
324
|
-
if (ctx.request.secure) return true;
|
|
325
|
-
const proxyTrusted = ctx.app?.proxy === true;
|
|
326
|
-
if (proxyTrusted && ctx.get("x-forwarded-proto") === "https") return true;
|
|
327
|
-
return false;
|
|
328
|
-
}
|
|
329
|
-
function getExpiredCookieOptions(strapi2, ctx) {
|
|
330
|
-
return {
|
|
331
|
-
httpOnly: true,
|
|
332
|
-
secure: shouldMarkSecure(strapi2, ctx),
|
|
333
|
-
path: strapi2.config.get("admin.auth.cookie.path", "/admin"),
|
|
334
|
-
domain: strapi2.config.get("admin.auth.cookie.domain") || strapi2.config.get("admin.auth.domain"),
|
|
335
|
-
sameSite: strapi2.config.get("admin.auth.cookie.sameSite", "lax"),
|
|
336
|
-
maxAge: 0,
|
|
337
|
-
expires: /* @__PURE__ */ new Date(0)
|
|
338
|
-
};
|
|
339
|
-
}
|
|
340
|
-
function clearAuthCookies(strapi2, ctx) {
|
|
341
|
-
const options2 = getExpiredCookieOptions(strapi2, ctx);
|
|
342
|
-
ctx.cookies.set("strapi_admin_refresh", "", options2);
|
|
343
|
-
const rootPathOptions = { ...options2, path: "/" };
|
|
344
|
-
for (const name of ["oidc_authenticated", "oidc_access_token", "oidc_user_email"]) {
|
|
345
|
-
ctx.cookies.set(name, "", rootPathOptions);
|
|
346
|
-
}
|
|
347
|
-
}
|
|
348
459
|
class OidcError extends Error {
|
|
349
460
|
kind;
|
|
350
461
|
cause;
|
|
@@ -396,6 +507,11 @@ const OIDC_ERROR_DISPATCH = {
|
|
|
396
507
|
code: errorCodes.ID_TOKEN_INVALID,
|
|
397
508
|
key: "id_token_invalid"
|
|
398
509
|
},
|
|
510
|
+
provider_response_invalid: {
|
|
511
|
+
action: "login_failure",
|
|
512
|
+
code: errorCodes.PROVIDER_RESPONSE_INVALID,
|
|
513
|
+
key: "provider_response_invalid"
|
|
514
|
+
},
|
|
399
515
|
unknown: {
|
|
400
516
|
action: "login_failure",
|
|
401
517
|
code: errorCodes.TOKEN_EXCHANGE_FAILED,
|
|
@@ -461,34 +577,454 @@ function configValidation() {
|
|
|
461
577
|
}
|
|
462
578
|
throw new Error(errorMessages.MISSING_CONFIG(missing.join(", ")));
|
|
463
579
|
}
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
481
|
-
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
|
|
486
|
-
|
|
487
|
-
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
491
|
-
|
|
580
|
+
const ar = {
|
|
581
|
+
"global.plugins.strapi-plugin-oidc": "وحدة OIDC الإضافية",
|
|
582
|
+
"page.title": "تكوين الأدوار الافتراضية OIDC وإعدادات التحكم بالوصول.",
|
|
583
|
+
"roles.notes": "حدد الدور (الأدوار) الافتراضي المخصص للمستخدمين الجدد عند أول تسجيل دخول لهم. لا يؤثر هذا الإعداد على المستخدمين الحاليين.",
|
|
584
|
+
"page.save": "حفظ التغييرات",
|
|
585
|
+
"page.save.success": "تم تحديث الإعدادات",
|
|
586
|
+
"page.save.error": "فشل التحديث.",
|
|
587
|
+
"page.add": "إضافة",
|
|
588
|
+
"page.cancel": "إلغاء",
|
|
589
|
+
"common.remove": "إزالة {label}",
|
|
590
|
+
"page.ok": "موافق",
|
|
591
|
+
"roles.title": "الدور (الأدوار) الافتراضي",
|
|
592
|
+
"roles.placeholder": "اختر الدور (الأدوار) الافتراضي",
|
|
593
|
+
"whitelist.title": "القائمة البيضاء",
|
|
594
|
+
"whitelist.error.unique": "عنوان البريد الإلكتروني مسجل بالفعل.",
|
|
595
|
+
"whitelist.description": "تقييد المصادقة OIDC على عناوين بريد إلكتروني محددة. يتلقى المستخدمون الأدوار من تعيين دور OIDC الافتراضي أو مجموعتهم في OIDC.",
|
|
596
|
+
"alert.title.success": "نجاح",
|
|
597
|
+
"alert.title.error": "خطأ",
|
|
598
|
+
"alert.title.info": "معلومات",
|
|
599
|
+
"pagination.previous": "الانتقال إلى الصفحة السابقة",
|
|
600
|
+
"pagination.page": "الانتقال إلى صفحة {page}",
|
|
601
|
+
"pagination.next": "الانتقال إلى الصفحة التالية",
|
|
602
|
+
"whitelist.table.no": "الرقم",
|
|
603
|
+
"whitelist.table.email": "البريد الإلكتروني",
|
|
604
|
+
"whitelist.table.created": "تاريخ الإنشاء",
|
|
605
|
+
"whitelist.delete.title": "تأكيد",
|
|
606
|
+
"whitelist.delete.description": "هل أنت متأكد من أنك تريد الحذف:",
|
|
607
|
+
"whitelist.delete.note": "لن يؤدي هذا إلى حذف حساب المستخدم في Strapi.",
|
|
608
|
+
"whitelist.toggle.enabled": "مفعّل",
|
|
609
|
+
"whitelist.toggle.disabled": "معطّل",
|
|
610
|
+
"whitelist.email.placeholder": "عنوان البريد الإلكتروني",
|
|
611
|
+
"whitelist.table.empty": "لا توجد عناوين بريد إلكتروني",
|
|
612
|
+
"whitelist.delete.label": "حذف",
|
|
613
|
+
"page.title.oidc": "OIDC",
|
|
614
|
+
"enforce.title": "فرض تسجيل الدخول عبر OIDC",
|
|
615
|
+
"enforce.toggle.enabled": "مفعّل",
|
|
616
|
+
"enforce.toggle.disabled": "معطّل",
|
|
617
|
+
"enforce.warning": "تأكد من إعداد OIDC بشكل صحيح قبل حفظ التغييرات، لن تتمكن من تسجيل الدخول بشكل طبيعي.",
|
|
618
|
+
"enforce.config.info": "يتم التحكم في التنفيذ بواسطة متغير التكوين OIDC_ENFORCE ولا يمكن تغييره هنا.",
|
|
619
|
+
"login.settings.title": "إعدادات تسجيل الدخول",
|
|
620
|
+
"login.sso": "تسجيل الدخول عبر SSO",
|
|
621
|
+
"pagination.total": "{count, plural, one {# عنصر} other {# عناصر}}",
|
|
622
|
+
"whitelist.import": "استيراد",
|
|
623
|
+
"whitelist.export": "تصدير",
|
|
624
|
+
"whitelist.delete.all.label": "حذف الكل",
|
|
625
|
+
"whitelist.delete.all.title": "حذف جميع الإدخالات",
|
|
626
|
+
"whitelist.delete.all.description": "سيؤدي هذا إلى إزالة نهائيًا لجميع {count, plural, one {# عنصر} other {# عناصر}} من القائمة البيضاء. سيتم فقدان التغييرات غير المحفوظة.",
|
|
627
|
+
"whitelist.import.error": "ملف غير صالح — كان من المتوقع مصفوفة JSON من الكائنات مع حقل البريد الإلكتروني.",
|
|
628
|
+
"whitelist.import.success": "تم استيراد {count, plural, one {# عنصر جديد} other {# عناصر جديدة}}.",
|
|
629
|
+
"whitelist.import.none": "لا توجد إدخالات جديدة — جميع رسائل البريد الإلكتروني موجودة بالفعل في القائمة البيضاء.",
|
|
630
|
+
"unsaved.title": "تغييرات غير محفوظة",
|
|
631
|
+
"unsaved.description": "لديك تغييرات غير محفوظة سيتم فقدانها إذا غادرت. هل تريد المتابعة؟",
|
|
632
|
+
"unsaved.confirm": "مغادرة",
|
|
633
|
+
"unsaved.cancel": "البقاء",
|
|
634
|
+
"auditlog.title": "سجلات التدقيق",
|
|
635
|
+
"auditlog.export": "تنزيل",
|
|
636
|
+
"auditlog.table.timestamp": "الطابع الزمني",
|
|
637
|
+
"auditlog.table.action": "الإجراء",
|
|
638
|
+
"auditlog.table.email": "البريد الإلكتروني",
|
|
639
|
+
"auditlog.table.ip": "عنوان IP",
|
|
640
|
+
"auditlog.table.details": "التفاصيل",
|
|
641
|
+
"auditlog.table.empty": "لا توجد إدخالات في سجل التدقيق",
|
|
642
|
+
"auditlog.clear": "مسح السجلات",
|
|
643
|
+
"auditlog.clear.title": "مسح جميع السجلات",
|
|
644
|
+
"auditlog.clear.description": "سيؤدي هذا إلى حذف نهائيًا لجميع {count, plural, one {# إدخال} other {# إدخالات}} سجل التدقيق. لا يمكن التراجع عن هذا الإجراء.",
|
|
645
|
+
"auditlog.clear.success": "تم مسح سجلات التدقيق",
|
|
646
|
+
"auditlog.clear.error": "فشل مسح سجلات التدقيق",
|
|
647
|
+
"auditlog.export.error": "فشل تصدير سجلات التدقيق",
|
|
648
|
+
"auditlog.filters": "المرشحات",
|
|
649
|
+
"auditlog.filters.action": "الإجراء",
|
|
650
|
+
"auditlog.filters.email": "البريد الإلكتروني",
|
|
651
|
+
"auditlog.filters.ip": "عنوان IP",
|
|
652
|
+
"auditlog.filters.createdAt": "التاريخ",
|
|
653
|
+
"auditlog.filters.clear": "مسح المرشحات",
|
|
654
|
+
"auditlog.filters.empty": "لا توجد إدخالات تطابق المرشحات الحالية",
|
|
655
|
+
"auditlog.calendar.prevMonth": "الشهر السابق",
|
|
656
|
+
"auditlog.calendar.nextMonth": "الشهر التالي",
|
|
657
|
+
"auditlog.calendar.state.today": "اليوم",
|
|
658
|
+
"auditlog.calendar.state.selected": "محدد",
|
|
659
|
+
"auditlog.calendar.state.alreadyAdded": "تمت إضافته بالفعل",
|
|
660
|
+
"auditlog.calendar.state.future": "غير متوفر، تاريخ مستقبلي",
|
|
661
|
+
"auditlog.calendar.dayWithState": "{date}، {state}",
|
|
662
|
+
"auditlog.action.login_success": "تم مصادقة المستخدم بنجاح عبر OIDC ومنح الوصول.",
|
|
663
|
+
"auditlog.action.user_created": "تم إنشاء حساب مسؤول Strapi جديد لهذا المستخدم عند أول تسجيل دخول له عبر OIDC.",
|
|
664
|
+
"auditlog.action.logout": "تسجيل خروج المستخدم وإنهاء جلسة OIDC الخاصة به.",
|
|
665
|
+
"auditlog.action.session_expired": "انتهت صلاحية رمز وصول OIDC وقت تسجيل خروج المستخدم، لذلك لم يتمكن من إنهاء جلسة المزود عن بُعد.",
|
|
666
|
+
"auditlog.action.login_failure": "حدث خطأ غير متوقع أثناء تدفق تسجيل الدخول عبر OIDC.",
|
|
667
|
+
"auditlog.action.missing_code": "تم استلام رد اتصال OIDC بدون رمز التفويض. قد يشير هذا إلى مزود مكون بشكل خاطئ أو طلب تالف.",
|
|
668
|
+
"auditlog.action.state_mismatch": "لم يتطابق معامل الحالة في رد الاتصال مع quello المخزن في الجلسة. قد يشير هذا إلى محاولة CSRF أو جلسة تسجيل دخول منتهية الصلاحية.",
|
|
669
|
+
"auditlog.action.nonce_mismatch": "لم يتطابق الـ nonce في رمز الهوية مع الذي تم إنشاؤه عند تسجيل الدخول. قد يشير هذا إلى هجوم إعادة تشغيل الرمز.",
|
|
670
|
+
"auditlog.action.token_exchange_failed": "تعذر استبدال رمز التفويض برموز. رفض مزود OIDC الطلب.",
|
|
671
|
+
"auditlog.action.whitelist_rejected": "عنوان البريد الإلكتروني للمستخدم غير موجود في القائمة البيضاء. تم رفض الوصول.",
|
|
672
|
+
"auditlog.action.email_not_verified": "لم يؤكد مزود OIDC عنوان البريد الإلكتروني للمستخدم على أنه تم التحقق منه. تم رفض الوصول.",
|
|
673
|
+
"auditlog.action.id_token_invalid": "فشل رمز الهوية في التحقق من التوقيع أو المصدر أو الجمهور أو انتهاء الصلاحية. تم رفض الوصول.",
|
|
674
|
+
"auth.page.authenticating.title": "جارٍ المصادقة...",
|
|
675
|
+
"auth.page.authenticating.noscript.heading": "JavaScript مطلوب",
|
|
676
|
+
"auth.page.authenticating.noscript.body": "يجب تمكين JavaScript لإكمال المصادقة.",
|
|
677
|
+
"auth.page.error.title": "فشلت المصادقة",
|
|
678
|
+
"auth.page.error.returnToLogin": "العودة إلى تسجيل الدخول",
|
|
679
|
+
"user.missing_code": "لم يتم استلام رمز التفويض من مزود OIDC.",
|
|
680
|
+
"user.invalid_state": "عدم تطابق معامل الحالة. يرجى إعادة بدء تدفق تسجيل الدخول.",
|
|
681
|
+
"user.signInError": "فشلت المصادقة. يرجى المحاولة مرة أخرى.",
|
|
682
|
+
"settings.section": "OIDC",
|
|
683
|
+
"settings.configuration": "التكوين",
|
|
684
|
+
"audit.login_failure": "خطأ: {message}",
|
|
685
|
+
"audit.roles_updated": "تم تحديث الأدوار إلى: {roles}",
|
|
686
|
+
"audit.user_created": "تم تعيين الأدوار: {roles}"
|
|
687
|
+
};
|
|
688
|
+
const __vite_glob_0_0 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
689
|
+
__proto__: null,
|
|
690
|
+
default: ar
|
|
691
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
692
|
+
const cs = {
|
|
693
|
+
"global.plugins.strapi-plugin-oidc": "OIDC Plugin",
|
|
694
|
+
"page.title": "Konfigurace výchozí role OIDC a řízení přístupu.",
|
|
695
|
+
"roles.notes": "Vyberte výchozí roli (role) přiřazené novým uživatelům při jejich prvním přihlášení. Toto nastavení nemá vliv na stávající uživatele.",
|
|
696
|
+
"page.save": "Uložit změny",
|
|
697
|
+
"page.save.success": "Nastavení aktualizováno",
|
|
698
|
+
"page.save.error": "Aktualizace selhala.",
|
|
699
|
+
"page.add": "Přidat",
|
|
700
|
+
"page.cancel": "Zrušit",
|
|
701
|
+
"common.remove": "Odstranit {label}",
|
|
702
|
+
"page.ok": "OK",
|
|
703
|
+
"roles.title": "Výchozí role",
|
|
704
|
+
"roles.placeholder": "Vyberte výchozí roli (role)",
|
|
705
|
+
"whitelist.title": "Whitelist",
|
|
706
|
+
"whitelist.error.unique": "E-mailová adresa je již zaregistrována.",
|
|
707
|
+
"whitelist.description": "Omezte ověřování OIDC na konkrétní e-mailové adresy. Uživatelé obdrží role z výchozího mapování rolí OIDC nebo ze své skupiny OIDC.",
|
|
708
|
+
"alert.title.success": "Úspěch",
|
|
709
|
+
"alert.title.error": "Chyba",
|
|
710
|
+
"alert.title.info": "Info",
|
|
711
|
+
"pagination.previous": "Přejít na předchozí stránku",
|
|
712
|
+
"pagination.page": "Přejít na stránku {page}",
|
|
713
|
+
"pagination.next": "Přejít na další stránku",
|
|
714
|
+
"whitelist.table.no": "Č.",
|
|
715
|
+
"whitelist.table.email": "E-mail",
|
|
716
|
+
"whitelist.table.created": "Vytvořeno",
|
|
717
|
+
"whitelist.delete.title": "Potvrzení",
|
|
718
|
+
"whitelist.delete.description": "Opravdu chcete smazat:",
|
|
719
|
+
"whitelist.delete.note": "Tím se neodstraní uživatelský účet ve Strapi.",
|
|
720
|
+
"whitelist.toggle.enabled": "Povoleno",
|
|
721
|
+
"whitelist.toggle.disabled": "Zakázáno",
|
|
722
|
+
"whitelist.email.placeholder": "E-mailová adresa",
|
|
723
|
+
"whitelist.table.empty": "Žádné e-mailové adresy",
|
|
724
|
+
"whitelist.delete.label": "Smazat",
|
|
725
|
+
"page.title.oidc": "OIDC",
|
|
726
|
+
"enforce.title": "Vynutit přihlášení přes OIDC",
|
|
727
|
+
"enforce.toggle.enabled": "Povoleno",
|
|
728
|
+
"enforce.toggle.disabled": "Zakázáno",
|
|
729
|
+
"enforce.warning": "Před uložením změn se ujistěte, že je OIDC správně nastaven, jinak se nebudete moci normálně přihlásit.",
|
|
730
|
+
"enforce.config.info": "Vynucování je řízeno konfigurační proměnnou OIDC_ENFORCE a nelze jej zde změnit.",
|
|
731
|
+
"login.settings.title": "Nastavení přihlášení",
|
|
732
|
+
"login.sso": "Přihlášení přes SSO",
|
|
733
|
+
"pagination.total": "{count, plural, one {# položka} few {# položky} other {# položek}}",
|
|
734
|
+
"whitelist.import": "Importovat",
|
|
735
|
+
"whitelist.export": "Exportovat",
|
|
736
|
+
"whitelist.delete.all.label": "Smazat vše",
|
|
737
|
+
"whitelist.delete.all.title": "Smazat všechny položky",
|
|
738
|
+
"whitelist.delete.all.description": "Tímto se trvale odstraní všech {count, plural, one {# položka} few {# položky} other {# položek}} z whitelistu. Neuložené změny budou ztraceny.",
|
|
739
|
+
"whitelist.import.error": "Neplatný soubor — očekávána JSON pole objektů s polem e-mailu.",
|
|
740
|
+
"whitelist.import.success": "Importováno {count, plural, one {# nová položka} few {# nové položky} other {# nových položek}}.",
|
|
741
|
+
"whitelist.import.none": "Žádné nové položky — všechny e-maily jsou již na whitelistu.",
|
|
742
|
+
"unsaved.title": "Neuložené změny",
|
|
743
|
+
"unsaved.description": "Máte neuložené změny, které budou ztraceny, pokud odejdete. Chcete pokračovat?",
|
|
744
|
+
"unsaved.confirm": "Odejít",
|
|
745
|
+
"unsaved.cancel": "Zůstat",
|
|
746
|
+
"auditlog.title": "Auditní protokoly",
|
|
747
|
+
"auditlog.export": "Stáhnout",
|
|
748
|
+
"auditlog.table.timestamp": "Časové razítko",
|
|
749
|
+
"auditlog.table.action": "Akce",
|
|
750
|
+
"auditlog.table.email": "E-mail",
|
|
751
|
+
"auditlog.table.ip": "IP",
|
|
752
|
+
"auditlog.table.details": "Podrobnosti",
|
|
753
|
+
"auditlog.table.empty": "Žádné položky auditního protokolu",
|
|
754
|
+
"auditlog.clear": "Vymazat protokoly",
|
|
755
|
+
"auditlog.clear.title": "Vymazat všechny protokoly",
|
|
756
|
+
"auditlog.clear.description": "Tímto se trvale odstraní všech {count, plural, one {# položka auditního protokolu} few {# položky auditního protokolu} other {# položek auditního protokolu}}. Tuto akci nelze vrátit zpět.",
|
|
757
|
+
"auditlog.clear.success": "Auditní protokoly vymazány",
|
|
758
|
+
"auditlog.clear.error": "Nepodařilo se vymazat auditní protokoly",
|
|
759
|
+
"auditlog.export.error": "Nepodařilo se exportovat auditní protokoly",
|
|
760
|
+
"auditlog.filters": "Filtry",
|
|
761
|
+
"auditlog.filters.action": "Akce",
|
|
762
|
+
"auditlog.filters.email": "E-mail",
|
|
763
|
+
"auditlog.filters.ip": "IP adresa",
|
|
764
|
+
"auditlog.filters.createdAt": "Datum",
|
|
765
|
+
"auditlog.filters.clear": "Vymazat filtry",
|
|
766
|
+
"auditlog.filters.empty": "Žádné položky neodpovídají aktuálním filtrům",
|
|
767
|
+
"auditlog.calendar.prevMonth": "Předchozí měsíc",
|
|
768
|
+
"auditlog.calendar.nextMonth": "Další měsíc",
|
|
769
|
+
"auditlog.calendar.state.today": "dnes",
|
|
770
|
+
"auditlog.calendar.state.selected": "vybráno",
|
|
771
|
+
"auditlog.calendar.state.alreadyAdded": "již přidáno",
|
|
772
|
+
"auditlog.calendar.state.future": "nedostupné, budoucí datum",
|
|
773
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
774
|
+
"auditlog.action.login_success": "Uživatel byl úspěšně ověřen prostřednictvím OIDC a byl mu udělen přístup.",
|
|
775
|
+
"auditlog.action.user_created": "Při prvním OIDC přihlášení byl pro tohoto uživatele vytvořen nový účet správce Strapi.",
|
|
776
|
+
"auditlog.action.logout": "Uživatel se odhlásil a jeho relace OIDC byla ukončena.",
|
|
777
|
+
"auditlog.action.session_expired": "Platnost přístupového tokenu OIDC vypršela v době, kdy se uživatel odhlásil, takže relace poskytovatele nemohla být vzdáleně ukončena.",
|
|
778
|
+
"auditlog.action.login_failure": "Během toku přihlášení OIDC došlo k neočekávané chybě.",
|
|
779
|
+
"auditlog.action.missing_code": "OIDC callback byl přijat bez autorizačního kódu. To může naznačovat nesprávně nakonfigurovaného poskytovatele nebo poškozený požadavek.",
|
|
780
|
+
"auditlog.action.state_mismatch": "Parametr stavu v callbacku se neshodoval s tím uloženým v relaci. To může naznačovat pokus o CSRF nebo vypršelou relaci přihlášení.",
|
|
781
|
+
"auditlog.action.nonce_mismatch": "Nonce v ID tokenu se neshodovala s tou, která byla generována při přihlášení. To může naznačovat útok replay tokenu.",
|
|
782
|
+
"auditlog.action.token_exchange_failed": "Autorizační kód nemohl být vyměněn za tokeny. Poskytovatel OIDC požadavek odmítl.",
|
|
783
|
+
"auditlog.action.whitelist_rejected": "E-mailová adresa uživatele není na whitelistu. Přístup byl odepřen.",
|
|
784
|
+
"auditlog.action.email_not_verified": "Poskytovatel OIDC nepotvrdil e-mailovou adresu uživatele jako ověřenou. Přístup byl odepřen.",
|
|
785
|
+
"auditlog.action.id_token_invalid": "ID token selhal při ověření podpisu, vydavatele, publika nebo vypršení platnosti. Přístup byl odepřen.",
|
|
786
|
+
"auth.page.authenticating.title": "Ověřování...",
|
|
787
|
+
"auth.page.authenticating.noscript.heading": "Vyžadován JavaScript",
|
|
788
|
+
"auth.page.authenticating.noscript.body": "Pro dokončení ověřování musí být povolen JavaScript.",
|
|
789
|
+
"auth.page.error.title": "Ověření selhalo",
|
|
790
|
+
"auth.page.error.returnToLogin": "Zpět na přihlášení",
|
|
791
|
+
"user.missing_code": "Autorizační kód nebyl od poskytovatele OIDC přijat.",
|
|
792
|
+
"user.invalid_state": "Neshoda parametru stavu. Restartujte prosím tok přihlášení.",
|
|
793
|
+
"user.signInError": "Ověření selhalo. Zkuste to prosím znovu.",
|
|
794
|
+
"settings.section": "OIDC",
|
|
795
|
+
"settings.configuration": "Konfigurace",
|
|
796
|
+
"audit.login_failure": "Chyba: {message}",
|
|
797
|
+
"audit.roles_updated": "Role aktualizovány na: {roles}",
|
|
798
|
+
"audit.user_created": "Přiřazené role: {roles}"
|
|
799
|
+
};
|
|
800
|
+
const __vite_glob_0_1 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
801
|
+
__proto__: null,
|
|
802
|
+
default: cs
|
|
803
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
804
|
+
const de = {
|
|
805
|
+
"global.plugins.strapi-plugin-oidc": "OIDC-Plugin",
|
|
806
|
+
"page.title": "Konfigurieren Sie die Standardrolle(s) und Zugriffskontrollen für OIDC.",
|
|
807
|
+
"roles.notes": "Wählen Sie die Standardrolle(n), die neuen Benutzern bei ihrer ersten Anmeldung zugewiesen werden. Diese Einstellung betrifft keine bestehenden Benutzer.",
|
|
808
|
+
"page.save": "Änderungen speichern",
|
|
809
|
+
"page.save.success": "Einstellungen aktualisiert",
|
|
810
|
+
"page.save.error": "Aktualisierung fehlgeschlagen.",
|
|
811
|
+
"page.add": "Hinzufügen",
|
|
812
|
+
"page.cancel": "Abbrechen",
|
|
813
|
+
"common.remove": "{label} entfernen",
|
|
814
|
+
"page.ok": "OK",
|
|
815
|
+
"roles.title": "Standardrolle(n)",
|
|
816
|
+
"roles.placeholder": "Standardrolle(n) auswählen",
|
|
817
|
+
"whitelist.title": "Whitelist",
|
|
818
|
+
"whitelist.error.unique": "E-Mail-Adresse bereits registriert.",
|
|
819
|
+
"whitelist.description": "Beschränken Sie die OIDC-Authentifizierung auf bestimmte E-Mail-Adressen. Benutzer erhalten Rollen aus der Standard-OIDC-Rollenzuordnung oder ihrer OIDC-Gruppe.",
|
|
820
|
+
"alert.title.success": "Erfolg",
|
|
821
|
+
"alert.title.error": "Fehler",
|
|
822
|
+
"alert.title.info": "Info",
|
|
823
|
+
"pagination.previous": "Zur vorherigen Seite",
|
|
824
|
+
"pagination.page": "Zur Seite {page}",
|
|
825
|
+
"pagination.next": "Zur nächsten Seite",
|
|
826
|
+
"whitelist.table.no": "Nr.",
|
|
827
|
+
"whitelist.table.email": "E-Mail",
|
|
828
|
+
"whitelist.table.created": "Erstellt am",
|
|
829
|
+
"whitelist.delete.title": "Bestätigung",
|
|
830
|
+
"whitelist.delete.description": "Sind Sie sicher, dass Sie löschen möchten:",
|
|
831
|
+
"whitelist.delete.note": "Dies löscht nicht das Benutzerkonto in Strapi.",
|
|
832
|
+
"whitelist.toggle.enabled": "Aktiviert",
|
|
833
|
+
"whitelist.toggle.disabled": "Deaktiviert",
|
|
834
|
+
"whitelist.email.placeholder": "E-Mail-Adresse",
|
|
835
|
+
"whitelist.table.empty": "Keine E-Mail-Adressen",
|
|
836
|
+
"whitelist.delete.label": "Löschen",
|
|
837
|
+
"page.title.oidc": "OIDC",
|
|
838
|
+
"enforce.title": "OIDC-Anmeldung erzwingen",
|
|
839
|
+
"enforce.toggle.enabled": "Aktiviert",
|
|
840
|
+
"enforce.toggle.disabled": "Deaktiviert",
|
|
841
|
+
"enforce.warning": "Stellen Sie sicher, dass OIDC korrekt eingerichtet ist, bevor Sie Änderungen speichern. Sie können sich nicht normal anmelden.",
|
|
842
|
+
"enforce.config.info": "Die Durchsetzung wird durch die OIDC_ENFORCE-Konfigurationsvariable gesteuert und kann hier nicht geändert werden.",
|
|
843
|
+
"login.settings.title": "Anmeldeeinstellungen",
|
|
844
|
+
"login.sso": "Über SSO anmelden",
|
|
845
|
+
"pagination.total": "{count, plural, one {# Eintrag} other {# Einträge}}",
|
|
846
|
+
"whitelist.import": "Importieren",
|
|
847
|
+
"whitelist.export": "Exportieren",
|
|
848
|
+
"whitelist.delete.all.label": "Alle löschen",
|
|
849
|
+
"whitelist.delete.all.title": "Alle Einträge löschen",
|
|
850
|
+
"whitelist.delete.all.description": "Dies entfernt dauerhaft alle {count, plural, one {# Eintrag} other {# Einträge}} aus der Whitelist. Nicht gespeicherte Änderungen gehen verloren.",
|
|
851
|
+
"whitelist.import.error": "Ungültige Datei — erwartet wurde ein JSON-Array von Objekten mit einem E-Mail-Feld.",
|
|
852
|
+
"whitelist.import.success": "{count, plural, one {# neuer Eintrag} other {# neue Einträge}} importiert.",
|
|
853
|
+
"whitelist.import.none": "Keine neuen Einträge — alle E-Mails sind bereits in der Whitelist.",
|
|
854
|
+
"unsaved.title": "Ungespeicherte Änderungen",
|
|
855
|
+
"unsaved.description": "Sie haben ungespeicherte Änderungen, die verloren gehen, wenn Sie die Seite verlassen. Möchten Sie fortfahren?",
|
|
856
|
+
"unsaved.confirm": "Verlassen",
|
|
857
|
+
"unsaved.cancel": "Bleiben",
|
|
858
|
+
"auditlog.title": "Audit-Logs",
|
|
859
|
+
"auditlog.export": "Herunterladen",
|
|
860
|
+
"auditlog.table.timestamp": "Zeitstempel",
|
|
861
|
+
"auditlog.table.action": "Aktion",
|
|
862
|
+
"auditlog.table.email": "E-Mail",
|
|
863
|
+
"auditlog.table.ip": "IP",
|
|
864
|
+
"auditlog.table.details": "Details",
|
|
865
|
+
"auditlog.table.empty": "Keine Audit-Log-Einträge",
|
|
866
|
+
"auditlog.clear": "Logs löschen",
|
|
867
|
+
"auditlog.clear.title": "Alle Logs löschen",
|
|
868
|
+
"auditlog.clear.description": "Dies löscht dauerhaft alle {count, plural, one {# Audit-Log-Eintrag} other {# Audit-Log-Einträge}}. Diese Aktion kann nicht rückgängig gemacht werden.",
|
|
869
|
+
"auditlog.clear.success": "Audit-Logs gelöscht",
|
|
870
|
+
"auditlog.clear.error": "Audit-Logs konnten nicht gelöscht werden",
|
|
871
|
+
"auditlog.export.error": "Audit-Logs konnten nicht exportiert werden",
|
|
872
|
+
"auditlog.filters": "Filter",
|
|
873
|
+
"auditlog.filters.action": "Aktion",
|
|
874
|
+
"auditlog.filters.email": "E-Mail",
|
|
875
|
+
"auditlog.filters.ip": "IP-Adresse",
|
|
876
|
+
"auditlog.filters.createdAt": "Datum",
|
|
877
|
+
"auditlog.filters.clear": "Filter löschen",
|
|
878
|
+
"auditlog.filters.empty": "Keine Einträge entsprechen den aktuellen Filtern",
|
|
879
|
+
"auditlog.calendar.prevMonth": "Vorheriger Monat",
|
|
880
|
+
"auditlog.calendar.nextMonth": "Nächster Monat",
|
|
881
|
+
"auditlog.calendar.state.today": "heute",
|
|
882
|
+
"auditlog.calendar.state.selected": "ausgewählt",
|
|
883
|
+
"auditlog.calendar.state.alreadyAdded": "bereits hinzugefügt",
|
|
884
|
+
"auditlog.calendar.state.future": "nicht verfügbar, zukünftiges Datum",
|
|
885
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
886
|
+
"auditlog.action.login_success": "Benutzer wurde erfolgreich über OIDC authentifiziert und erhielt Zugang.",
|
|
887
|
+
"auditlog.action.user_created": "Bei seiner ersten OIDC-Anmeldung wurde ein neues Strapi-Admin-Konto für diesen Benutzer erstellt.",
|
|
888
|
+
"auditlog.action.logout": "Benutzer hat sich abgemeldet und seine OIDC-Sitzung wurde beendet.",
|
|
889
|
+
"auditlog.action.session_expired": "Das OIDC-Zugriffstoken war zum Zeitpunkt der Abmeldung des Benutzers abgelaufen, sodass die Provider-Sitzung nicht remote beendet werden konnte.",
|
|
890
|
+
"auditlog.action.login_failure": "Bei der OIDC-Anmeldung ist ein unerwarteter Fehler aufgetreten.",
|
|
891
|
+
"auditlog.action.missing_code": "Der OIDC-Callback wurde ohne Autorisierungscode empfangen. Dies kann auf einen falsch konfigurierten Anbieter oder eine manipulierte Anfrage hinweisen.",
|
|
892
|
+
"auditlog.action.state_mismatch": "Der Statusparameter im Callback stimmte nicht mit dem in der Sitzung gespeicherten überein. Dies kann auf einen CSRF-Versuch oder eine abgelaufene Anmeldesitzung hinweisen.",
|
|
893
|
+
"auditlog.action.nonce_mismatch": "Die Nonce in der ID-Token stimmte nicht mit der bei der Anmeldung generierten überein. Dies kann auf einen Token-Replay-Angriff hinweisen.",
|
|
894
|
+
"auditlog.action.token_exchange_failed": "Der Autorisierungscode konnte nicht gegen Tokens eingetauscht werden. Der OIDC-Anbieter lehnte die Anfrage ab.",
|
|
895
|
+
"auditlog.action.whitelist_rejected": "Die E-Mail-Adresse des Benutzers ist nicht auf der Whitelist. Zugriff wurde verweigert.",
|
|
896
|
+
"auditlog.action.email_not_verified": "Der OIDC-Anbieter hat die E-Mail-Adresse des Benutzers nicht als verifiziert bestätigt. Zugriff wurde verweigert.",
|
|
897
|
+
"auditlog.action.id_token_invalid": "Die ID-Token-Überprüfung von Signatur, Aussteller, Zielgruppe oder Ablauf ist fehlgeschlagen. Zugriff wurde verweigert.",
|
|
898
|
+
"auth.page.authenticating.title": "Authentifizierung...",
|
|
899
|
+
"auth.page.authenticating.noscript.heading": "JavaScript erforderlich",
|
|
900
|
+
"auth.page.authenticating.noscript.body": "JavaScript muss aktiviert sein, damit die Authentifizierung abgeschlossen werden kann.",
|
|
901
|
+
"auth.page.error.title": "Authentifizierung fehlgeschlagen",
|
|
902
|
+
"auth.page.error.returnToLogin": "Zurück zur Anmeldung",
|
|
903
|
+
"user.missing_code": "Autorisierungscode wurde nicht vom OIDC-Anbieter empfangen.",
|
|
904
|
+
"user.invalid_state": "Statusparameter stimmt nicht überein. Bitte starten Sie den Anmeldeablauf erneut.",
|
|
905
|
+
"user.signInError": "Authentifizierung fehlgeschlagen. Bitte versuchen Sie es erneut.",
|
|
906
|
+
"settings.section": "OIDC",
|
|
907
|
+
"settings.configuration": "Konfiguration",
|
|
908
|
+
"audit.login_failure": "Fehler: {message}",
|
|
909
|
+
"audit.roles_updated": "Rollen aktualisiert zu: {roles}",
|
|
910
|
+
"audit.user_created": "Zugewiesene Rollen: {roles}"
|
|
911
|
+
};
|
|
912
|
+
const __vite_glob_0_2 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
913
|
+
__proto__: null,
|
|
914
|
+
default: de
|
|
915
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
916
|
+
const dk = {
|
|
917
|
+
"global.plugins.strapi-plugin-oidc": "OIDC Plugin",
|
|
918
|
+
"page.title": "Konfigurer OIDC standardroller og adgangskontroller.",
|
|
919
|
+
"roles.notes": "Vælg den eller de standardroller, der tildeles nye brugere ved deres første login. Denne indstilling påvirker ikke eksisterende brugere.",
|
|
920
|
+
"page.save": "Gem ændringer",
|
|
921
|
+
"page.save.success": "Indstillinger opdateret",
|
|
922
|
+
"page.save.error": "Opdatering mislykkedes.",
|
|
923
|
+
"page.add": "Tilføj",
|
|
924
|
+
"page.cancel": "Annuller",
|
|
925
|
+
"common.remove": "Fjern {label}",
|
|
926
|
+
"page.ok": "OK",
|
|
927
|
+
"roles.title": "Standardrolle(r)",
|
|
928
|
+
"roles.placeholder": "Vælg standardrolle(r)",
|
|
929
|
+
"whitelist.title": "Whitelist",
|
|
930
|
+
"whitelist.error.unique": "E-mailadresse allerede registreret.",
|
|
931
|
+
"whitelist.description": "Begræns OIDC-godkendelse til specifikke e-mailadresser. Brugere modtager roller fra standard OIDC-rolletilknytning eller deres OIDC-gruppe.",
|
|
932
|
+
"alert.title.success": "Succes",
|
|
933
|
+
"alert.title.error": "Fejl",
|
|
934
|
+
"alert.title.info": "Info",
|
|
935
|
+
"pagination.previous": "Gå til forrige side",
|
|
936
|
+
"pagination.page": "Gå til side {page}",
|
|
937
|
+
"pagination.next": "Gå til næste side",
|
|
938
|
+
"whitelist.table.no": "Nr.",
|
|
939
|
+
"whitelist.table.email": "E-mail",
|
|
940
|
+
"whitelist.table.created": "Oprettet den",
|
|
941
|
+
"whitelist.delete.title": "Bekræftelse",
|
|
942
|
+
"whitelist.delete.description": "Er du sikker på, at du vil slette:",
|
|
943
|
+
"whitelist.delete.note": "Dette sletter ikke brugerkontoen i Strapi.",
|
|
944
|
+
"whitelist.toggle.enabled": "Aktiveret",
|
|
945
|
+
"whitelist.toggle.disabled": "Deaktiveret",
|
|
946
|
+
"whitelist.email.placeholder": "E-mailadresse",
|
|
947
|
+
"whitelist.table.empty": "Ingen e-mailadresser",
|
|
948
|
+
"whitelist.delete.label": "Slet",
|
|
949
|
+
"page.title.oidc": "OIDC",
|
|
950
|
+
"enforce.title": "Gennemtving OIDC-login",
|
|
951
|
+
"enforce.toggle.enabled": "Aktiveret",
|
|
952
|
+
"enforce.toggle.disabled": "Deaktiveret",
|
|
953
|
+
"enforce.warning": "Sørg for, at OIDC er konfigureret korrekt, før du gemmer ændringer. Du vil ikke kunne logge ind normalt.",
|
|
954
|
+
"enforce.config.info": "Gennemtvingelse styres af OIDC_ENFORCE-konfigurationsvariablen og kan ikke ændres her.",
|
|
955
|
+
"login.settings.title": "Login-indstillinger",
|
|
956
|
+
"login.sso": "Log ind via SSO",
|
|
957
|
+
"pagination.total": "{count, plural, one {# post} other {# poster}}",
|
|
958
|
+
"whitelist.import": "Importer",
|
|
959
|
+
"whitelist.export": "Eksporter",
|
|
960
|
+
"whitelist.delete.all.label": "Slet alle",
|
|
961
|
+
"whitelist.delete.all.title": "Slet alle poster",
|
|
962
|
+
"whitelist.delete.all.description": "Dette vil permanent fjerne alle {count, plural, one {# post} other {# poster}} fra whitelisten. Ikke-gemte ændringer vil gå tabt.",
|
|
963
|
+
"whitelist.import.error": "Ugyldig fil — forventede et JSON-array af objekter med et e-mail-felt.",
|
|
964
|
+
"whitelist.import.success": "Importeret {count, plural, one {# ny post} other {# nye poster}}.",
|
|
965
|
+
"whitelist.import.none": "Ingen nye poster — alle e-mails er allerede på whitelisten.",
|
|
966
|
+
"unsaved.title": "Ikke-gemte ændringer",
|
|
967
|
+
"unsaved.description": "Du har ikke-gemte ændringer, der vil gå tabt, hvis du forlader siden. Vil du fortsætte?",
|
|
968
|
+
"unsaved.confirm": "Forlad",
|
|
969
|
+
"unsaved.cancel": "Bliv",
|
|
970
|
+
"auditlog.title": "Audit Logs",
|
|
971
|
+
"auditlog.export": "Download",
|
|
972
|
+
"auditlog.table.timestamp": "Tidsstempel",
|
|
973
|
+
"auditlog.table.action": "Handling",
|
|
974
|
+
"auditlog.table.email": "E-mail",
|
|
975
|
+
"auditlog.table.ip": "IP",
|
|
976
|
+
"auditlog.table.details": "Detaljer",
|
|
977
|
+
"auditlog.table.empty": "Ingen audit log-poster",
|
|
978
|
+
"auditlog.clear": "Ryd logs",
|
|
979
|
+
"auditlog.clear.title": "Ryd alle logs",
|
|
980
|
+
"auditlog.clear.description": "Dette vil permanent slette alle {count, plural, one {# audit log-post} other {# audit log-poster}}. Denne handling kan ikke fortrydes.",
|
|
981
|
+
"auditlog.clear.success": "Audit logs ryddet",
|
|
982
|
+
"auditlog.clear.error": "Kunne ikke rydde audit logs",
|
|
983
|
+
"auditlog.export.error": "Kunne ikke eksportere audit logs",
|
|
984
|
+
"auditlog.filters": "Filtre",
|
|
985
|
+
"auditlog.filters.action": "Handling",
|
|
986
|
+
"auditlog.filters.email": "E-mail",
|
|
987
|
+
"auditlog.filters.ip": "IP-adresse",
|
|
988
|
+
"auditlog.filters.createdAt": "Dato",
|
|
989
|
+
"auditlog.filters.clear": "Ryd filtre",
|
|
990
|
+
"auditlog.filters.empty": "Ingen poster matcher de aktuelle filtre",
|
|
991
|
+
"auditlog.calendar.prevMonth": "Forrige måned",
|
|
992
|
+
"auditlog.calendar.nextMonth": "Næste måned",
|
|
993
|
+
"auditlog.calendar.state.today": "i dag",
|
|
994
|
+
"auditlog.calendar.state.selected": "valgt",
|
|
995
|
+
"auditlog.calendar.state.alreadyAdded": "allerede tilføjet",
|
|
996
|
+
"auditlog.calendar.state.future": "utilgængelig, fremtidig dato",
|
|
997
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
998
|
+
"auditlog.action.login_success": "Bruger blev succesfuldt autentificeret via OIDC og fik adgang.",
|
|
999
|
+
"auditlog.action.user_created": "Der blev oprettet en ny Strapi-admin-konto til denne bruger ved deres første OIDC-login.",
|
|
1000
|
+
"auditlog.action.logout": "Bruger loggede ud, og deres OIDC-session blev afsluttet.",
|
|
1001
|
+
"auditlog.action.session_expired": "OIDC-adgangstokenet var udløbet på det tidspunkt, hvor brugeren loggede ud, så providersessionen kunne ikke afsluttes eksternt.",
|
|
1002
|
+
"auditlog.action.login_failure": "Der opstod en uventet fejl under OIDC-login-flowet.",
|
|
1003
|
+
"auditlog.action.missing_code": "OIDC-callbacket blev modtaget uden en autorisationskode. Dette kan indikere en fejlkonfigureret udbyder eller en manipuleret anmodning.",
|
|
1004
|
+
"auditlog.action.state_mismatch": "State-parameteren i callbacket matched ikke den, der var gemt i sessionen. Dette kan indikere et CSRF-forsøg eller en udløbet login-session.",
|
|
1005
|
+
"auditlog.action.nonce_mismatch": "Nonce i ID-tokenet matched ikke den, der blev genereret ved login. Dette kan indikere et token-replay-angreb.",
|
|
1006
|
+
"auditlog.action.token_exchange_failed": "Autorisationskoden kunne ikke udveksles med tokens. OIDC-udbyderen afviste anmodningen.",
|
|
1007
|
+
"auditlog.action.whitelist_rejected": "Brugerens e-mailadresse er ikke på whitelisten. Adgang blev nægtet.",
|
|
1008
|
+
"auditlog.action.email_not_verified": "OIDC-udbyderen bekræftede ikke brugerens e-mailadresse som verificeret. Adgang blev nægtet.",
|
|
1009
|
+
"auditlog.action.id_token_invalid": "ID-tokenet bestod ikke signatur-, udsteder-, publikum- eller udløbsvalidering. Adgang blev nægtet.",
|
|
1010
|
+
"auth.page.authenticating.title": "Autentificerer...",
|
|
1011
|
+
"auth.page.authenticating.noscript.heading": "JavaScript påkrævet",
|
|
1012
|
+
"auth.page.authenticating.noscript.body": "JavaScript skal være aktiveret for at autentificeringen kan fuldføres.",
|
|
1013
|
+
"auth.page.error.title": "Autentificering mislykkedes",
|
|
1014
|
+
"auth.page.error.returnToLogin": "Tilbage til login",
|
|
1015
|
+
"user.missing_code": "Autorisationskode blev ikke modtaget fra OIDC-udbyderen.",
|
|
1016
|
+
"user.invalid_state": "State-parameter mismatch. Genstart venligst login-flowet.",
|
|
1017
|
+
"user.signInError": "Autentificering mislykkedes. Prøv venligst igen.",
|
|
1018
|
+
"settings.section": "OIDC",
|
|
1019
|
+
"settings.configuration": "Konfiguration",
|
|
1020
|
+
"audit.login_failure": "Fejl: {message}",
|
|
1021
|
+
"audit.roles_updated": "Roller opdateret til: {roles}",
|
|
1022
|
+
"audit.user_created": "Tildelte roller: {roles}"
|
|
1023
|
+
};
|
|
1024
|
+
const __vite_glob_0_3 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1025
|
+
__proto__: null,
|
|
1026
|
+
default: dk
|
|
1027
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
492
1028
|
const en = {
|
|
493
1029
|
"global.plugins.strapi-plugin-oidc": "OIDC Plugin",
|
|
494
1030
|
"page.title": "Configure OIDC default role(s) and access controls.",
|
|
@@ -592,13 +1128,2480 @@ const en = {
|
|
|
592
1128
|
"user.invalid_state": "State parameter mismatch. Please restart the login flow.",
|
|
593
1129
|
"user.signInError": "Authentication failed. Please try again.",
|
|
594
1130
|
"settings.section": "OIDC",
|
|
595
|
-
"settings.configuration": "Configuration"
|
|
1131
|
+
"settings.configuration": "Configuration",
|
|
1132
|
+
"audit.login_failure": "Error: {message}",
|
|
1133
|
+
"audit.roles_updated": "Roles updated to: {roles}",
|
|
1134
|
+
"audit.user_created": "Roles assigned: {roles}"
|
|
596
1135
|
};
|
|
597
|
-
const
|
|
1136
|
+
const __vite_glob_0_4 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
598
1137
|
__proto__: null,
|
|
599
1138
|
default: en
|
|
600
1139
|
}, Symbol.toStringTag, { value: "Module" }));
|
|
601
|
-
const
|
|
1140
|
+
const es = {
|
|
1141
|
+
"global.plugins.strapi-plugin-oidc": "Plugin OIDC",
|
|
1142
|
+
"page.title": "Configure los roles predeterminados de OIDC y los controles de acceso.",
|
|
1143
|
+
"roles.notes": "Seleccione el rol o roles predeterminados asignados a los nuevos usuarios en su primer inicio de sesión. Esta configuración no afecta a los usuarios existentes.",
|
|
1144
|
+
"page.save": "Guardar cambios",
|
|
1145
|
+
"page.save.success": "Configuración actualizada",
|
|
1146
|
+
"page.save.error": "Error al actualizar.",
|
|
1147
|
+
"page.add": "Añadir",
|
|
1148
|
+
"page.cancel": "Cancelar",
|
|
1149
|
+
"common.remove": "Eliminar {label}",
|
|
1150
|
+
"page.ok": "Aceptar",
|
|
1151
|
+
"roles.title": "Rol(es) predeterminado(s)",
|
|
1152
|
+
"roles.placeholder": "Seleccionar rol(es) predeterminado(s)",
|
|
1153
|
+
"whitelist.title": "Lista blanca",
|
|
1154
|
+
"whitelist.error.unique": "Dirección de correo electrónico ya registrada.",
|
|
1155
|
+
"whitelist.description": "Restrinja la autenticación OIDC a direcciones de correo electrónico específicas. Los usuarios reciben roles del mapeo de roles OIDC predeterminado o de su grupo OIDC.",
|
|
1156
|
+
"alert.title.success": "Éxito",
|
|
1157
|
+
"alert.title.error": "Error",
|
|
1158
|
+
"alert.title.info": "Info",
|
|
1159
|
+
"pagination.previous": "Ir a la página anterior",
|
|
1160
|
+
"pagination.page": "Ir a la página {page}",
|
|
1161
|
+
"pagination.next": "Ir a la página siguiente",
|
|
1162
|
+
"whitelist.table.no": "Nº",
|
|
1163
|
+
"whitelist.table.email": "Correo electrónico",
|
|
1164
|
+
"whitelist.table.created": "Creado el",
|
|
1165
|
+
"whitelist.delete.title": "Confirmación",
|
|
1166
|
+
"whitelist.delete.description": "¿Está seguro de que desea eliminar:",
|
|
1167
|
+
"whitelist.delete.note": "Esto no eliminará la cuenta de usuario en Strapi.",
|
|
1168
|
+
"whitelist.toggle.enabled": "Habilitado",
|
|
1169
|
+
"whitelist.toggle.disabled": "Deshabilitado",
|
|
1170
|
+
"whitelist.email.placeholder": "Dirección de correo electrónico",
|
|
1171
|
+
"whitelist.table.empty": "Sin direcciones de correo electrónico",
|
|
1172
|
+
"whitelist.delete.label": "Eliminar",
|
|
1173
|
+
"page.title.oidc": "OIDC",
|
|
1174
|
+
"enforce.title": "Forzar inicio de sesión OIDC",
|
|
1175
|
+
"enforce.toggle.enabled": "Habilitado",
|
|
1176
|
+
"enforce.toggle.disabled": "Deshabilitado",
|
|
1177
|
+
"enforce.warning": "Asegúrese de que OIDC esté configurado correctamente antes de guardar los cambios; no podrá iniciar sesión normalmente.",
|
|
1178
|
+
"enforce.config.info": "La aplicación se controla mediante la variable de configuración OIDC_ENFORCE y no se puede cambiar aquí.",
|
|
1179
|
+
"login.settings.title": "Configuración de inicio de sesión",
|
|
1180
|
+
"login.sso": "Iniciar sesión a través de SSO",
|
|
1181
|
+
"pagination.total": "{count, plural, one {# entrada} other {# entradas}}",
|
|
1182
|
+
"whitelist.import": "Importar",
|
|
1183
|
+
"whitelist.export": "Exportar",
|
|
1184
|
+
"whitelist.delete.all.label": "Eliminar todo",
|
|
1185
|
+
"whitelist.delete.all.title": "Eliminar todas las entradas",
|
|
1186
|
+
"whitelist.delete.all.description": "Esto eliminará permanentemente todas las {count, plural, one {# entrada} other {# entradas}} de la lista blanca. Se perderán los cambios sin guardar.",
|
|
1187
|
+
"whitelist.import.error": "Archivo no válido — se esperaba un array JSON de objetos con un campo de correo electrónico.",
|
|
1188
|
+
"whitelist.import.success": "Se importaron {count, plural, one {# nueva entrada} other {# nuevas entradas}}.",
|
|
1189
|
+
"whitelist.import.none": "Sin entradas nuevas — todos los correos electrónicos ya están en la lista blanca.",
|
|
1190
|
+
"unsaved.title": "Cambios sin guardar",
|
|
1191
|
+
"unsaved.description": "Tiene cambios sin guardar que se perderán si abandona la página. ¿Desea continuar?",
|
|
1192
|
+
"unsaved.confirm": "Abandonar",
|
|
1193
|
+
"unsaved.cancel": "Quedarse",
|
|
1194
|
+
"auditlog.title": "Registros de auditoría",
|
|
1195
|
+
"auditlog.export": "Descargar",
|
|
1196
|
+
"auditlog.table.timestamp": "Marca de tiempo",
|
|
1197
|
+
"auditlog.table.action": "Acción",
|
|
1198
|
+
"auditlog.table.email": "Correo electrónico",
|
|
1199
|
+
"auditlog.table.ip": "IP",
|
|
1200
|
+
"auditlog.table.details": "Detalles",
|
|
1201
|
+
"auditlog.table.empty": "Sin entradas de registro de auditoría",
|
|
1202
|
+
"auditlog.clear": "Borrar registros",
|
|
1203
|
+
"auditlog.clear.title": "Borrar todos los registros",
|
|
1204
|
+
"auditlog.clear.description": "Esto eliminará permanentemente todas las {count, plural, one {# entrada de registro de auditoría} other {# entradas de registro de auditoría}}. Esta acción no se puede deshacer.",
|
|
1205
|
+
"auditlog.clear.success": "Registros de auditoría borrados",
|
|
1206
|
+
"auditlog.clear.error": "Error al borrar los registros de auditoría",
|
|
1207
|
+
"auditlog.export.error": "Error al exportar los registros de auditoría",
|
|
1208
|
+
"auditlog.filters": "Filtros",
|
|
1209
|
+
"auditlog.filters.action": "Acción",
|
|
1210
|
+
"auditlog.filters.email": "Correo electrónico",
|
|
1211
|
+
"auditlog.filters.ip": "Dirección IP",
|
|
1212
|
+
"auditlog.filters.createdAt": "Fecha",
|
|
1213
|
+
"auditlog.filters.clear": "Borrar filtros",
|
|
1214
|
+
"auditlog.filters.empty": "Ninguna entrada coincide con los filtros actuales",
|
|
1215
|
+
"auditlog.calendar.prevMonth": "Mes anterior",
|
|
1216
|
+
"auditlog.calendar.nextMonth": "Mes siguiente",
|
|
1217
|
+
"auditlog.calendar.state.today": "hoy",
|
|
1218
|
+
"auditlog.calendar.state.selected": "seleccionado",
|
|
1219
|
+
"auditlog.calendar.state.alreadyAdded": "ya añadido",
|
|
1220
|
+
"auditlog.calendar.state.future": "no disponible, fecha futura",
|
|
1221
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
1222
|
+
"auditlog.action.login_success": "El usuario se autenticó correctamente a través de OIDC y se le concedió acceso.",
|
|
1223
|
+
"auditlog.action.user_created": "Se creó una nueva cuenta de administrador de Strapi para este usuario en su primer inicio de sesión OIDC.",
|
|
1224
|
+
"auditlog.action.logout": "El usuario cerró la sesión y su sesión OIDC terminó.",
|
|
1225
|
+
"auditlog.action.session_expired": "El token de acceso OIDC había expirado en el momento en que el usuario cerró la sesión, por lo que la sesión del proveedor no pudo terminatearse remotamente.",
|
|
1226
|
+
"auditlog.action.login_failure": "Se produjo un error inesperado durante el flujo de inicio de sesión OIDC.",
|
|
1227
|
+
"auditlog.action.missing_code": "El callback de OIDC se recibió sin un código de autorización. Esto puede indicar un proveedor mal configurado o una solicitud manipulada.",
|
|
1228
|
+
"auditlog.action.state_mismatch": "El parámetro de estado en el callback no coincided con el almacenado en la sesión. Esto puede indicar un intento de CSRF o una sesión de inicio de sesión expirada.",
|
|
1229
|
+
"auditlog.action.nonce_mismatch": "El nonce en el token de ID no coincidió con el generado en el inicio de sesión. Esto puede indicar un ataque de replay de token.",
|
|
1230
|
+
"auditlog.action.token_exchange_failed": "El código de autorización no pudo intercambiarse por tokens. El proveedor de OIDC rechazó la solicitud.",
|
|
1231
|
+
"auditlog.action.whitelist_rejected": "La dirección de correo electrónico del usuario no está en la lista blanca. Se denegó el acceso.",
|
|
1232
|
+
"auditlog.action.email_not_verified": "El proveedor de OIDC no confirmó la dirección de correo electrónico del usuario como verificada. Se denegó el acceso.",
|
|
1233
|
+
"auditlog.action.id_token_invalid": "El token de ID no pasó la validación de firma, emisor, audiencia o expiración. Se denegó el acceso.",
|
|
1234
|
+
"auth.page.authenticating.title": "Autenticando...",
|
|
1235
|
+
"auth.page.authenticating.noscript.heading": "Se requiere JavaScript",
|
|
1236
|
+
"auth.page.authenticating.noscript.body": "JavaScript debe estar habilitado para que la autenticación se complete.",
|
|
1237
|
+
"auth.page.error.title": "Error de autenticación",
|
|
1238
|
+
"auth.page.error.returnToLogin": "Volver al inicio de sesión",
|
|
1239
|
+
"user.missing_code": "No se recibió el código de autorización del proveedor de OIDC.",
|
|
1240
|
+
"user.invalid_state": "Discordancia del parámetro de estado. Reinicie el flujo de inicio de sesión.",
|
|
1241
|
+
"user.signInError": "Error de autenticación. Inténtelo de nuevo.",
|
|
1242
|
+
"settings.section": "OIDC",
|
|
1243
|
+
"settings.configuration": "Configuración",
|
|
1244
|
+
"audit.login_failure": "Error: {message}",
|
|
1245
|
+
"audit.roles_updated": "Roles actualizados a: {roles}",
|
|
1246
|
+
"audit.user_created": "Roles asignados: {roles}"
|
|
1247
|
+
};
|
|
1248
|
+
const __vite_glob_0_5 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1249
|
+
__proto__: null,
|
|
1250
|
+
default: es
|
|
1251
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
1252
|
+
const fr = {
|
|
1253
|
+
"global.plugins.strapi-plugin-oidc": "Plugin OIDC",
|
|
1254
|
+
"page.title": "Configurez les rôles par défaut OIDC et les contrôles d'accès.",
|
|
1255
|
+
"roles.notes": "Sélectionnez le(s) rôle(s) par défaut attribué(s) aux nouveaux utilisateurs lors de leur première connexion. Ce paramètre n'affecte pas les utilisateurs existants.",
|
|
1256
|
+
"page.save": "Enregistrer les modifications",
|
|
1257
|
+
"page.save.success": "Paramètres mis à jour",
|
|
1258
|
+
"page.save.error": "Échec de la mise à jour.",
|
|
1259
|
+
"page.add": "Ajouter",
|
|
1260
|
+
"page.cancel": "Annuler",
|
|
1261
|
+
"common.remove": "Supprimer {label}",
|
|
1262
|
+
"page.ok": "OK",
|
|
1263
|
+
"roles.title": "Rôle(s) par défaut",
|
|
1264
|
+
"roles.placeholder": "Sélectionner le(s) rôle(s) par défaut",
|
|
1265
|
+
"whitelist.title": "Liste blanche",
|
|
1266
|
+
"whitelist.error.unique": "Adresse e-mail déjà enregistrée.",
|
|
1267
|
+
"whitelist.description": "Restreindre l'authentification OIDC à des adresses e-mail spécifiques. Les utilisateurs reçoivent des rôles à partir de la mapping de rôles OIDC par défaut ou de leur groupe OIDC.",
|
|
1268
|
+
"alert.title.success": "Succès",
|
|
1269
|
+
"alert.title.error": "Erreur",
|
|
1270
|
+
"alert.title.info": "Info",
|
|
1271
|
+
"pagination.previous": "Aller à la page précédente",
|
|
1272
|
+
"pagination.page": "Aller à la page {page}",
|
|
1273
|
+
"pagination.next": "Aller à la page suivante",
|
|
1274
|
+
"whitelist.table.no": "Nº",
|
|
1275
|
+
"whitelist.table.email": "E-mail",
|
|
1276
|
+
"whitelist.table.created": "Créé le",
|
|
1277
|
+
"whitelist.delete.title": "Confirmation",
|
|
1278
|
+
"whitelist.delete.description": "Êtes-vous sûr de vouloir supprimer :",
|
|
1279
|
+
"whitelist.delete.note": "Cela ne supprimera pas le compte utilisateur dans Strapi.",
|
|
1280
|
+
"whitelist.toggle.enabled": "Activé",
|
|
1281
|
+
"whitelist.toggle.disabled": "Désactivé",
|
|
1282
|
+
"whitelist.email.placeholder": "Adresse e-mail",
|
|
1283
|
+
"whitelist.table.empty": "Aucune adresse e-mail",
|
|
1284
|
+
"whitelist.delete.label": "Supprimer",
|
|
1285
|
+
"page.title.oidc": "OIDC",
|
|
1286
|
+
"enforce.title": "Imposer la connexion OIDC",
|
|
1287
|
+
"enforce.toggle.enabled": "Activé",
|
|
1288
|
+
"enforce.toggle.disabled": "Désactivé",
|
|
1289
|
+
"enforce.warning": "Assurez-vous que OIDC est correctement configuré avant d'enregistrer les modifications. Vous ne pourrez pas vous connecter normalement.",
|
|
1290
|
+
"enforce.config.info": "L'application est contrôlée par la variable de configuration OIDC_ENFORCE et ne peut pas être modifiée ici.",
|
|
1291
|
+
"login.settings.title": "Paramètres de connexion",
|
|
1292
|
+
"login.sso": "Connexion via SSO",
|
|
1293
|
+
"pagination.total": "{count, plural, one {# entrée} other {# entrées}}",
|
|
1294
|
+
"whitelist.import": "Importer",
|
|
1295
|
+
"whitelist.export": "Exporter",
|
|
1296
|
+
"whitelist.delete.all.label": "Tout supprimer",
|
|
1297
|
+
"whitelist.delete.all.title": "Supprimer toutes les entrées",
|
|
1298
|
+
"whitelist.delete.all.description": "Cela supprimera définitivement toutes les {count, plural, one {# entrée} other {# entrées}} de la liste blanche. Les modifications non enregistrées seront perdues.",
|
|
1299
|
+
"whitelist.import.error": "Fichier invalide — attendu un tableau JSON d'objets avec un champ e-mail.",
|
|
1300
|
+
"whitelist.import.success": "{count, plural, one {# nouvelle entrée} other {# nouvelles entrées}} importée(s).",
|
|
1301
|
+
"whitelist.import.none": "Aucune nouvelle entrée — tous les e-mails sont déjà dans la liste blanche.",
|
|
1302
|
+
"unsaved.title": "Modifications non enregistrées",
|
|
1303
|
+
"unsaved.description": "Vous avez des modifications non enregistrées qui seront perdues si vous quittez. Voulez-vous continuer ?",
|
|
1304
|
+
"unsaved.confirm": "Quitter",
|
|
1305
|
+
"unsaved.cancel": "Rester",
|
|
1306
|
+
"auditlog.title": "Journaux d'audit",
|
|
1307
|
+
"auditlog.export": "Télécharger",
|
|
1308
|
+
"auditlog.table.timestamp": "Horodatage",
|
|
1309
|
+
"auditlog.table.action": "Action",
|
|
1310
|
+
"auditlog.table.email": "E-mail",
|
|
1311
|
+
"auditlog.table.ip": "IP",
|
|
1312
|
+
"auditlog.table.details": "Détails",
|
|
1313
|
+
"auditlog.table.empty": "Aucune entrée de journal d'audit",
|
|
1314
|
+
"auditlog.clear": "Effacer les journaux",
|
|
1315
|
+
"auditlog.clear.title": "Effacer tous les journaux",
|
|
1316
|
+
"auditlog.clear.description": "Cela supprimera définitivement toutes les {count, plural, one {# entrée de journal d'audit} other {# entrées de journal d'audit}}. Cette action ne peut pas être annulée.",
|
|
1317
|
+
"auditlog.clear.success": "Journaux d'audit effacés",
|
|
1318
|
+
"auditlog.clear.error": "Échec de l'effacement des journaux d'audit",
|
|
1319
|
+
"auditlog.export.error": "Échec de l'exportation des journaux d'audit",
|
|
1320
|
+
"auditlog.filters": "Filtres",
|
|
1321
|
+
"auditlog.filters.action": "Action",
|
|
1322
|
+
"auditlog.filters.email": "E-mail",
|
|
1323
|
+
"auditlog.filters.ip": "Adresse IP",
|
|
1324
|
+
"auditlog.filters.createdAt": "Date",
|
|
1325
|
+
"auditlog.filters.clear": "Effacer les filtres",
|
|
1326
|
+
"auditlog.filters.empty": "Aucune entrée ne correspond aux filtres actuels",
|
|
1327
|
+
"auditlog.calendar.prevMonth": "Mois précédent",
|
|
1328
|
+
"auditlog.calendar.nextMonth": "Mois suivant",
|
|
1329
|
+
"auditlog.calendar.state.today": "aujourd'hui",
|
|
1330
|
+
"auditlog.calendar.state.selected": "sélectionné",
|
|
1331
|
+
"auditlog.calendar.state.alreadyAdded": "déjà ajouté",
|
|
1332
|
+
"auditlog.calendar.state.future": "indisponible, date future",
|
|
1333
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
1334
|
+
"auditlog.action.login_success": "L'utilisateur a été authentifié avec succès via OIDC et s'est vu accorder l'accès.",
|
|
1335
|
+
"auditlog.action.user_created": "Un nouveau compte administrateur Strapi a été créé pour cet utilisateur lors de sa première connexion OIDC.",
|
|
1336
|
+
"auditlog.action.logout": "L'utilisateur s'est déconnecté et sa session OIDC a été terminée.",
|
|
1337
|
+
"auditlog.action.session_expired": "Le jeton d'accès OIDC avait expiré au moment où l'utilisateur s'est déconnecté. La session du fournisseur n'a donc pas pu être terminée à distance.",
|
|
1338
|
+
"auditlog.action.login_failure": "Une erreur inattendue s'est produite lors du flux de connexion OIDC.",
|
|
1339
|
+
"auditlog.action.missing_code": "Le callback OIDC a été reçu sans code d'autorisation. Cela peut indiquer un fournisseur mal configuré ou une demande falsifiée.",
|
|
1340
|
+
"auditlog.action.state_mismatch": "Le paramètre d'état dans le callback ne correspondait pas à celui stocké dans la session. Cela peut indiquer une tentative CSRF ou une session de connexion expirée.",
|
|
1341
|
+
"auditlog.action.nonce_mismatch": "Le nonce dans le jeton d'ID ne correspondait pas à celui généré lors de la connexion. Cela peut indiquer une attaque par rejeu de jeton.",
|
|
1342
|
+
"auditlog.action.token_exchange_failed": "Le code d'autorisation n'a pas pu être échangé contre des jetons. Le fournisseur OIDC a rejeté la demande.",
|
|
1343
|
+
"auditlog.action.whitelist_rejected": "L'adresse e-mail de l'utilisateur n'est pas sur la liste blanche. L'accès a été refusé.",
|
|
1344
|
+
"auditlog.action.email_not_verified": "Le fournisseur OIDC n'a pas confirmé l'adresse e-mail de l'utilisateur comme vérifiée. L'accès a été refusé.",
|
|
1345
|
+
"auditlog.action.id_token_invalid": "Le jeton d'ID n'a pas réussi la validation de la signature, de l'émetteur, du public ou de l'expiration. L'accès a été refusé.",
|
|
1346
|
+
"auth.page.authenticating.title": "Authentification...",
|
|
1347
|
+
"auth.page.authenticating.noscript.heading": "JavaScript requis",
|
|
1348
|
+
"auth.page.authenticating.noscript.body": "JavaScript doit être activé pour que l'authentification se termine.",
|
|
1349
|
+
"auth.page.error.title": "Échec de l'authentification",
|
|
1350
|
+
"auth.page.error.returnToLogin": "Retour à la connexion",
|
|
1351
|
+
"user.missing_code": "Le code d'autorisation n'a pas été reçu du fournisseur OIDC.",
|
|
1352
|
+
"user.invalid_state": "Incohérence du paramètre d'état. Veuillez redémarrer le flux de connexion.",
|
|
1353
|
+
"user.signInError": "Échec de l'authentification. Veuillez réessayer.",
|
|
1354
|
+
"settings.section": "OIDC",
|
|
1355
|
+
"settings.configuration": "Configuration",
|
|
1356
|
+
"audit.login_failure": "Erreur : {message}",
|
|
1357
|
+
"audit.roles_updated": "Rôles mis à jour vers : {roles}",
|
|
1358
|
+
"audit.user_created": "Rôles attribués : {roles}"
|
|
1359
|
+
};
|
|
1360
|
+
const __vite_glob_0_6 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1361
|
+
__proto__: null,
|
|
1362
|
+
default: fr
|
|
1363
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
1364
|
+
const he = {
|
|
1365
|
+
"global.plugins.strapi-plugin-oidc": "תוסף OIDC",
|
|
1366
|
+
"page.title": "קבע את תפקידי ברירת המחדל של OIDC ואת פקדי הגישה.",
|
|
1367
|
+
"roles.notes": "בחר את תפקיד (התפקידים) ברירת המחדל שיוקצו למשתמשים חדשים בהתחברותם הראשונה. הגדרה זו אינה משפיעה על משתמשים קיימים.",
|
|
1368
|
+
"page.save": "שמור שינויים",
|
|
1369
|
+
"page.save.success": "ההגדרות עודכנו",
|
|
1370
|
+
"page.save.error": "העדכון נכשל.",
|
|
1371
|
+
"page.add": "הוסף",
|
|
1372
|
+
"page.cancel": "ביטול",
|
|
1373
|
+
"common.remove": "הסר {label}",
|
|
1374
|
+
"page.ok": "אישור",
|
|
1375
|
+
"roles.title": "תפקיד (תפקידים) ברירת מחדל",
|
|
1376
|
+
"roles.placeholder": "בחר תפקיד (תפקידים) ברירת מחדל",
|
|
1377
|
+
"whitelist.title": "רשימה לבנה",
|
|
1378
|
+
"whitelist.error.unique": 'כתובת הדוא"ל כבר רשומה.',
|
|
1379
|
+
"whitelist.description": 'הגבל את האימות של OIDC לכתובות דוא"ל ספציפיות. משתמשים מקבלים תפקידים ממיפוי תפקידי ברירת המחדל של OIDC או מקבוצת ה-OIDC שלהם.',
|
|
1380
|
+
"alert.title.success": "הצלחה",
|
|
1381
|
+
"alert.title.error": "שגיאה",
|
|
1382
|
+
"alert.title.info": "מידע",
|
|
1383
|
+
"pagination.previous": "עבור לדף הקודם",
|
|
1384
|
+
"pagination.page": "עבור לדף {page}",
|
|
1385
|
+
"pagination.next": "עבור לדף הבא",
|
|
1386
|
+
"whitelist.table.no": "מס.",
|
|
1387
|
+
"whitelist.table.email": 'דוא"ל',
|
|
1388
|
+
"whitelist.table.created": "נוצר ב",
|
|
1389
|
+
"whitelist.delete.title": "אישור",
|
|
1390
|
+
"whitelist.delete.description": "האם אתה בטוח שברצונך למחוק:",
|
|
1391
|
+
"whitelist.delete.note": "פעולה זו לא תמחק את חשבון המשתמש ב-Strapi.",
|
|
1392
|
+
"whitelist.toggle.enabled": "מופעל",
|
|
1393
|
+
"whitelist.toggle.disabled": "מושבת",
|
|
1394
|
+
"whitelist.email.placeholder": 'כתובת דוא"ל',
|
|
1395
|
+
"whitelist.table.empty": 'אין כתובות דוא"ל',
|
|
1396
|
+
"whitelist.delete.label": "מחק",
|
|
1397
|
+
"page.title.oidc": "OIDC",
|
|
1398
|
+
"enforce.title": "אכוף התחברות OIDC",
|
|
1399
|
+
"enforce.toggle.enabled": "מופעל",
|
|
1400
|
+
"enforce.toggle.disabled": "מושבת",
|
|
1401
|
+
"enforce.warning": "ודא ש-OIDC הוגדר כהלכה לפני שמירת השינויים, לא תוכל להתחבר באופן רגיל.",
|
|
1402
|
+
"enforce.config.info": "האכיפה נשלטת על ידי משתנה התצורה OIDC_ENFORCE ולא ניתן לשנות אותה כאן.",
|
|
1403
|
+
"login.settings.title": "הגדרות התחברות",
|
|
1404
|
+
"login.sso": "התחבר דרך SSO",
|
|
1405
|
+
"pagination.total": "{count, plural, one {# פריט} other {# פריטים}}",
|
|
1406
|
+
"whitelist.import": "ייבוא",
|
|
1407
|
+
"whitelist.export": "ייצוא",
|
|
1408
|
+
"whitelist.delete.all.label": "מחק הכל",
|
|
1409
|
+
"whitelist.delete.all.title": "מחק את כל הרשומות",
|
|
1410
|
+
"whitelist.delete.all.description": "פעולה זו תסיר לצמיתות את כל {count, plural, one {# הפריט} other {# הפריטים}} מהרשימה הלבנה. שינויים שלא נשמרו יאבדו.",
|
|
1411
|
+
"whitelist.import.error": 'קובץ לא חוקי — צפוי מערך JSON של אובייקטים עם שדה דוא"ל.',
|
|
1412
|
+
"whitelist.import.success": "יובאו {count, plural, one {# פריט חדש} other {# פריטים חדשים}}.",
|
|
1413
|
+
"whitelist.import.none": 'אין פריטים חדשים — כל הדוא"לים כבר נמצאים ברשימה הלבנה.',
|
|
1414
|
+
"unsaved.title": "שינויים שלא נשמרו",
|
|
1415
|
+
"unsaved.description": "יש לך שינויים שלא נשמרו שיאבדו אם תעזוב. האם ברצונך להמשיך?",
|
|
1416
|
+
"unsaved.confirm": "צא",
|
|
1417
|
+
"unsaved.cancel": "השאר",
|
|
1418
|
+
"auditlog.title": "יומני ביקורת",
|
|
1419
|
+
"auditlog.export": "הורד",
|
|
1420
|
+
"auditlog.table.timestamp": "חותם זמן",
|
|
1421
|
+
"auditlog.table.action": "פעולה",
|
|
1422
|
+
"auditlog.table.email": 'דוא"ל',
|
|
1423
|
+
"auditlog.table.ip": "IP",
|
|
1424
|
+
"auditlog.table.details": "פרטים",
|
|
1425
|
+
"auditlog.table.empty": "אין רשומות ביומן הביקורת",
|
|
1426
|
+
"auditlog.clear": "נקה יומנים",
|
|
1427
|
+
"auditlog.clear.title": "נקה את כל היומנים",
|
|
1428
|
+
"auditlog.clear.description": "פעולה זו תמחק לצמיתות את כל {count, plural, one {# רשומת יומן ביקורת} other {# רשומות יומן ביקורת}}. לא ניתן לבטל פעולה זו.",
|
|
1429
|
+
"auditlog.clear.success": "יומני הביקורת נוקו",
|
|
1430
|
+
"auditlog.clear.error": "נכשל לנקות את יומני הביקורת",
|
|
1431
|
+
"auditlog.export.error": "נכשל לייצא את יומני הביקורת",
|
|
1432
|
+
"auditlog.filters": "מסננים",
|
|
1433
|
+
"auditlog.filters.action": "פעולה",
|
|
1434
|
+
"auditlog.filters.email": 'דוא"ל',
|
|
1435
|
+
"auditlog.filters.ip": "כתובת IP",
|
|
1436
|
+
"auditlog.filters.createdAt": "תאריך",
|
|
1437
|
+
"auditlog.filters.clear": "נקה מסננים",
|
|
1438
|
+
"auditlog.filters.empty": "אין רשומות התואמות למסננים הנוכחיים",
|
|
1439
|
+
"auditlog.calendar.prevMonth": "חודש קודם",
|
|
1440
|
+
"auditlog.calendar.nextMonth": "חודש הבא",
|
|
1441
|
+
"auditlog.calendar.state.today": "היום",
|
|
1442
|
+
"auditlog.calendar.state.selected": "נבחר",
|
|
1443
|
+
"auditlog.calendar.state.alreadyAdded": "כבר נוסף",
|
|
1444
|
+
"auditlog.calendar.state.future": "לא זמין, תאריך עתידי",
|
|
1445
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
1446
|
+
"auditlog.action.login_success": "המשתמש אומת בהצלחה דרך OIDC והוענק לו גישה.",
|
|
1447
|
+
"auditlog.action.user_created": "חשבון מנהל Strapi חדש נוצר עבור משתמש זה בהתחברותו הראשונה של OIDC.",
|
|
1448
|
+
"auditlog.action.logout": "המשתמש התנתק והשאפה של OIDC שלו הסתיימה.",
|
|
1449
|
+
"auditlog.action.session_expired": "אסימון הגישה של OIDC פג תוקף בזמן שהמשתמש התנתק, כך שלא ניתן היה לסיים את השאפה של הספק מרחוק.",
|
|
1450
|
+
"auditlog.action.login_failure": "אירעה שגיאה בלתי צפויה במהלך זרימת ההתחברות של OIDC.",
|
|
1451
|
+
"auditlog.action.missing_code": "קריאת החזרה של OIDC התקבלה ללא קוד הרשאה. הדבר עשוי להצביע על ספק שהוגדר באופן שגוי או על בקשה מזויפת.",
|
|
1452
|
+
"auditlog.action.state_mismatch": "פרמטר המדינה בקריאת החזרה לא התאים לזה שמור בהשאפה. הדבר עשוי להצביע על ניסיון CSRF או השאפת התחברות שפג תוקף.",
|
|
1453
|
+
"auditlog.action.nonce_mismatch": "ה-nonce באסימון ה-ID לא התאים לזה שנוצר בהתחברות. הדבר עשוי להצביע על התקפת replay של אסימון.",
|
|
1454
|
+
"auditlog.action.token_exchange_failed": "לא ניתן היה להחליף את קוד ההרשאה באסימונים. ספק OIDC דחה את הבקשה.",
|
|
1455
|
+
"auditlog.action.whitelist_rejected": 'כתובת הדוא"ל של המשתמש אינה ברשימה הלבנה. הגישה נדחית.',
|
|
1456
|
+
"auditlog.action.email_not_verified": 'ספק OIDC לא אישר את כתובת הדוא"ל של המשתמש כמאומתת. הגישה נדחית.',
|
|
1457
|
+
"auditlog.action.id_token_invalid": "אסימון ה-ID לא עבר את אימות החתימה, המנפיק, הקהל או תוקף התפוגה. הגישה נדחית.",
|
|
1458
|
+
"auth.page.authenticating.title": "מאמת...",
|
|
1459
|
+
"auth.page.authenticating.noscript.heading": "נדרש JavaScript",
|
|
1460
|
+
"auth.page.authenticating.noscript.body": "יש להפעיל JavaScript כדי שהאימות יושלם.",
|
|
1461
|
+
"auth.page.error.title": "האימות נכשל",
|
|
1462
|
+
"auth.page.error.returnToLogin": "חזרה להתחברות",
|
|
1463
|
+
"user.missing_code": "קוד הרשאה לא התקבל מספק OIDC.",
|
|
1464
|
+
"user.invalid_state": "חוסר התאמה של פרמטר המדינה. אנא הפעל מחדש את זרימת ההתחברות.",
|
|
1465
|
+
"user.signInError": "האימות נכשל. אנא נסה שוב.",
|
|
1466
|
+
"settings.section": "OIDC",
|
|
1467
|
+
"settings.configuration": "תצורה",
|
|
1468
|
+
"audit.login_failure": "שגיאה: {message}",
|
|
1469
|
+
"audit.roles_updated": "תפקידים עודכנו ל: {roles}",
|
|
1470
|
+
"audit.user_created": "תפקידים שהוקצו: {roles}"
|
|
1471
|
+
};
|
|
1472
|
+
const __vite_glob_0_7 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1473
|
+
__proto__: null,
|
|
1474
|
+
default: he
|
|
1475
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
1476
|
+
const id = {
|
|
1477
|
+
"global.plugins.strapi-plugin-oidc": "Plugin OIDC",
|
|
1478
|
+
"page.title": "Konfigurasikan peran default OIDC dan kontrol akses.",
|
|
1479
|
+
"roles.notes": "Pilih peran default yang ditetapkan kepada pengguna baru saat pertama kali login. Pengaturan ini tidak mempengaruhi pengguna yang sudah ada.",
|
|
1480
|
+
"page.save": "Simpan Perubahan",
|
|
1481
|
+
"page.save.success": "Pengaturan diperbarui",
|
|
1482
|
+
"page.save.error": "Pembaruan gagal.",
|
|
1483
|
+
"page.add": "Tambah",
|
|
1484
|
+
"page.cancel": "Batal",
|
|
1485
|
+
"common.remove": "Hapus {label}",
|
|
1486
|
+
"page.ok": "OK",
|
|
1487
|
+
"roles.title": "Peran Default",
|
|
1488
|
+
"roles.placeholder": "Pilih peran default",
|
|
1489
|
+
"whitelist.title": "Whitelist",
|
|
1490
|
+
"whitelist.error.unique": "Alamat email sudah terdaftar.",
|
|
1491
|
+
"whitelist.description": "Batasi autentikasi OIDC ke alamat email tertentu. Pengguna menerima peran dari pemetaan peran OIDC default atau grup OIDC mereka.",
|
|
1492
|
+
"alert.title.success": "Berhasil",
|
|
1493
|
+
"alert.title.error": "Kesalahan",
|
|
1494
|
+
"alert.title.info": "Info",
|
|
1495
|
+
"pagination.previous": "Ke halaman sebelumnya",
|
|
1496
|
+
"pagination.page": "Ke halaman {page}",
|
|
1497
|
+
"pagination.next": "Ke halaman berikutnya",
|
|
1498
|
+
"whitelist.table.no": "No.",
|
|
1499
|
+
"whitelist.table.email": "Email",
|
|
1500
|
+
"whitelist.table.created": "Dibuat pada",
|
|
1501
|
+
"whitelist.delete.title": "Konfirmasi",
|
|
1502
|
+
"whitelist.delete.description": "Apakah Anda yakin ingin menghapus:",
|
|
1503
|
+
"whitelist.delete.note": "Ini tidak akan menghapus akun pengguna di Strapi.",
|
|
1504
|
+
"whitelist.toggle.enabled": "Aktif",
|
|
1505
|
+
"whitelist.toggle.disabled": "Nonaktif",
|
|
1506
|
+
"whitelist.email.placeholder": "Alamat email",
|
|
1507
|
+
"whitelist.table.empty": "Tidak ada alamat email",
|
|
1508
|
+
"whitelist.delete.label": "Hapus",
|
|
1509
|
+
"page.title.oidc": "OIDC",
|
|
1510
|
+
"enforce.title": "Paksa Login OIDC",
|
|
1511
|
+
"enforce.toggle.enabled": "Aktif",
|
|
1512
|
+
"enforce.toggle.disabled": "Nonaktif",
|
|
1513
|
+
"enforce.warning": "Pastikan OIDC dikonfigurasi dengan benar sebelum menyimpan perubahan, Anda tidak akan dapat login secara normal.",
|
|
1514
|
+
"enforce.config.info": "Penegakan dikontrol oleh variabel konfigurasi OIDC_ENFORCE dan tidak dapat diubah di sini.",
|
|
1515
|
+
"login.settings.title": "Pengaturan Login",
|
|
1516
|
+
"login.sso": "Login melalui SSO",
|
|
1517
|
+
"pagination.total": "{count, plural, other {# entri}}",
|
|
1518
|
+
"whitelist.import": "Impor",
|
|
1519
|
+
"whitelist.export": "Ekspor",
|
|
1520
|
+
"whitelist.delete.all.label": "Hapus Semua",
|
|
1521
|
+
"whitelist.delete.all.title": "Hapus Semua Entri",
|
|
1522
|
+
"whitelist.delete.all.description": "Ini akan menghapus secara permanen semua {count, plural, other {# entri}} dari whitelist. Perubahan yang tidak disimpan akan hilang.",
|
|
1523
|
+
"whitelist.import.error": "File tidak valid — diharapkan array JSON dari objek dengan kolom email.",
|
|
1524
|
+
"whitelist.import.success": "{count, plural, other {# entri baru}} diimpor.",
|
|
1525
|
+
"whitelist.import.none": "Tidak ada entri baru — semua email sudah ada di whitelist.",
|
|
1526
|
+
"unsaved.title": "Perubahan Belum Tersimpan",
|
|
1527
|
+
"unsaved.description": "Anda memiliki perubahan yang belum tersimpan yang akan hilang jika Anda pergi. Apakah Anda ingin melanjutkan?",
|
|
1528
|
+
"unsaved.confirm": "Pergi",
|
|
1529
|
+
"unsaved.cancel": "Tetap",
|
|
1530
|
+
"auditlog.title": "Log Audit",
|
|
1531
|
+
"auditlog.export": "Unduh",
|
|
1532
|
+
"auditlog.table.timestamp": "Timestamp",
|
|
1533
|
+
"auditlog.table.action": "Aksi",
|
|
1534
|
+
"auditlog.table.email": "Email",
|
|
1535
|
+
"auditlog.table.ip": "IP",
|
|
1536
|
+
"auditlog.table.details": "Detail",
|
|
1537
|
+
"auditlog.table.empty": "Tidak ada entri log audit",
|
|
1538
|
+
"auditlog.clear": "Hapus Log",
|
|
1539
|
+
"auditlog.clear.title": "Hapus Semua Log",
|
|
1540
|
+
"auditlog.clear.description": "Ini akan menghapus secara permanen semua {count, plural, other {# entri log audit}}. Tindakan ini tidak dapat dibatalkan.",
|
|
1541
|
+
"auditlog.clear.success": "Log audit dihapus",
|
|
1542
|
+
"auditlog.clear.error": "Gagal menghapus log audit",
|
|
1543
|
+
"auditlog.export.error": "Gagal mengekspor log audit",
|
|
1544
|
+
"auditlog.filters": "Filter",
|
|
1545
|
+
"auditlog.filters.action": "Aksi",
|
|
1546
|
+
"auditlog.filters.email": "Email",
|
|
1547
|
+
"auditlog.filters.ip": "Alamat IP",
|
|
1548
|
+
"auditlog.filters.createdAt": "Tanggal",
|
|
1549
|
+
"auditlog.filters.clear": "Hapus filter",
|
|
1550
|
+
"auditlog.filters.empty": "Tidak ada entri yang cocok dengan filter saat ini",
|
|
1551
|
+
"auditlog.calendar.prevMonth": "Bulan sebelumnya",
|
|
1552
|
+
"auditlog.calendar.nextMonth": "Bulan berikutnya",
|
|
1553
|
+
"auditlog.calendar.state.today": "hari ini",
|
|
1554
|
+
"auditlog.calendar.state.selected": "dipilih",
|
|
1555
|
+
"auditlog.calendar.state.alreadyAdded": "sudah ditambahkan",
|
|
1556
|
+
"auditlog.calendar.state.future": "tidak tersedia, tanggal mendatang",
|
|
1557
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
1558
|
+
"auditlog.action.login_success": "Pengguna berhasil diautentikasi melalui OIDC dan diberi akses.",
|
|
1559
|
+
"auditlog.action.user_created": "Akun admin Strapi baru dibuat untuk pengguna ini pada login OIDC pertama mereka.",
|
|
1560
|
+
"auditlog.action.logout": "Pengguna keluar dan sesi OIDC mereka berakhir.",
|
|
1561
|
+
"auditlog.action.session_expired": "Token akses OIDC telah kedaluwarsa pada saat pengguna keluar, sehingga sesi provider tidak dapat diakhiri dari jauh.",
|
|
1562
|
+
"auditlog.action.login_failure": "Terjadi kesalahan tak terduga selama alur login OIDC.",
|
|
1563
|
+
"auditlog.action.missing_code": "Callback OIDC diterima tanpa kode otorisasi. Ini mungkin menunjukkan provider yang salah dikonfigurasi atau permintaan yang dirusak.",
|
|
1564
|
+
"auditlog.action.state_mismatch": "Parameter status dalam callback tidak cocok dengan yang tersimpan dalam sesi. Ini mungkin menunjukkan upaya CSRF atau sesi login yang kedaluwarsa.",
|
|
1565
|
+
"auditlog.action.nonce_mismatch": "Nonce dalam token ID tidak cocok dengan yang dibuat saat login. Ini mungkin menunjukkan serangan replay token.",
|
|
1566
|
+
"auditlog.action.token_exchange_failed": "Kode otorisasi tidak dapat ditukar dengan token. Provider OIDC menolak permintaan.",
|
|
1567
|
+
"auditlog.action.whitelist_rejected": "Alamat email pengguna tidak ada di whitelist. Akses ditolak.",
|
|
1568
|
+
"auditlog.action.email_not_verified": "Provider OIDC tidak mengonfirmasi alamat email pengguna sebagai terverifikasi. Akses ditolak.",
|
|
1569
|
+
"auditlog.action.id_token_invalid": "Token ID gagal dalam validasi tanda tangan, issuer, audience, atau kedaluwarsa. Akses ditolak.",
|
|
1570
|
+
"auth.page.authenticating.title": "Mengautentikasi...",
|
|
1571
|
+
"auth.page.authenticating.noscript.heading": "JavaScript Diperlukan",
|
|
1572
|
+
"auth.page.authenticating.noscript.body": "JavaScript harus diaktifkan agar autentikasi selesai.",
|
|
1573
|
+
"auth.page.error.title": "Autentikasi Gagal",
|
|
1574
|
+
"auth.page.error.returnToLogin": "Kembali ke Login",
|
|
1575
|
+
"user.missing_code": "Kode otorisasi tidak diterima dari provider OIDC.",
|
|
1576
|
+
"user.invalid_state": "Ketidakcocokan parameter status. Harap mulai ulang alur login.",
|
|
1577
|
+
"user.signInError": "Autentikasi gagal. Silakan coba lagi.",
|
|
1578
|
+
"settings.section": "OIDC",
|
|
1579
|
+
"settings.configuration": "Konfigurasi",
|
|
1580
|
+
"audit.login_failure": "Kesalahan: {message}",
|
|
1581
|
+
"audit.roles_updated": "Peran diperbarui ke: {roles}",
|
|
1582
|
+
"audit.user_created": "Peran ditugaskan: {roles}"
|
|
1583
|
+
};
|
|
1584
|
+
const __vite_glob_0_8 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1585
|
+
__proto__: null,
|
|
1586
|
+
default: id
|
|
1587
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
1588
|
+
const it = {
|
|
1589
|
+
"global.plugins.strapi-plugin-oidc": "Plugin OIDC",
|
|
1590
|
+
"page.title": "Configura i ruoli predefiniti OIDC e i controlli di accesso.",
|
|
1591
|
+
"roles.notes": "Seleziona il ruolo o i ruoli predefiniti assegnati ai nuovi utenti al primo accesso. Questa impostazione non influenza gli utenti esistenti.",
|
|
1592
|
+
"page.save": "Salva modifiche",
|
|
1593
|
+
"page.save.success": "Impostazioni aggiornate",
|
|
1594
|
+
"page.save.error": "Aggiornamento fallito.",
|
|
1595
|
+
"page.add": "Aggiungi",
|
|
1596
|
+
"page.cancel": "Annulla",
|
|
1597
|
+
"common.remove": "Rimuovi {label}",
|
|
1598
|
+
"page.ok": "OK",
|
|
1599
|
+
"roles.title": "Ruolo(i) predefinito(i)",
|
|
1600
|
+
"roles.placeholder": "Seleziona ruolo(i) predefinito(i)",
|
|
1601
|
+
"whitelist.title": "Whitelist",
|
|
1602
|
+
"whitelist.error.unique": "Indirizzo email già registrato.",
|
|
1603
|
+
"whitelist.description": "Limita l'autenticazione OIDC a indirizzi email specifici. Gli utenti ricevono i ruoli dalla mappatura dei ruoli OIDC predefinita o dal loro gruppo OIDC.",
|
|
1604
|
+
"alert.title.success": "Successo",
|
|
1605
|
+
"alert.title.error": "Errore",
|
|
1606
|
+
"alert.title.info": "Info",
|
|
1607
|
+
"pagination.previous": "Vai alla pagina precedente",
|
|
1608
|
+
"pagination.page": "Vai alla pagina {page}",
|
|
1609
|
+
"pagination.next": "Vai alla pagina successiva",
|
|
1610
|
+
"whitelist.table.no": "N.",
|
|
1611
|
+
"whitelist.table.email": "Email",
|
|
1612
|
+
"whitelist.table.created": "Creato il",
|
|
1613
|
+
"whitelist.delete.title": "Conferma",
|
|
1614
|
+
"whitelist.delete.description": "Sei sicuro di voler eliminare:",
|
|
1615
|
+
"whitelist.delete.note": "Questo non eliminerà l'account utente in Strapi.",
|
|
1616
|
+
"whitelist.toggle.enabled": "Abilitato",
|
|
1617
|
+
"whitelist.toggle.disabled": "Disabilitato",
|
|
1618
|
+
"whitelist.email.placeholder": "Indirizzo email",
|
|
1619
|
+
"whitelist.table.empty": "Nessun indirizzo email",
|
|
1620
|
+
"whitelist.delete.label": "Elimina",
|
|
1621
|
+
"page.title.oidc": "OIDC",
|
|
1622
|
+
"enforce.title": "Applica accesso OIDC",
|
|
1623
|
+
"enforce.toggle.enabled": "Abilitato",
|
|
1624
|
+
"enforce.toggle.disabled": "Disabilitato",
|
|
1625
|
+
"enforce.warning": "Assicurati che OIDC sia configurato correttamente prima di salvare le modifiche, non potrai accedere normalmente.",
|
|
1626
|
+
"enforce.config.info": "L'applicazione è controllata dalla variabile di configurazione OIDC_ENFORCE e non può essere modificata qui.",
|
|
1627
|
+
"login.settings.title": "Impostazioni di accesso",
|
|
1628
|
+
"login.sso": "Accedi tramite SSO",
|
|
1629
|
+
"pagination.total": "{count, plural, one {# voce} other {# voci}}",
|
|
1630
|
+
"whitelist.import": "Importa",
|
|
1631
|
+
"whitelist.export": "Esporta",
|
|
1632
|
+
"whitelist.delete.all.label": "Elimina tutto",
|
|
1633
|
+
"whitelist.delete.all.title": "Elimina tutte le voci",
|
|
1634
|
+
"whitelist.delete.all.description": "Questo rimuoverà permanentemente tutte le {count, plural, one {# voce} other {# voci}} dalla whitelist. Le modifiche non salvate andranno perse.",
|
|
1635
|
+
"whitelist.import.error": "File non valido — previsto un array JSON di oggetti con un campo email.",
|
|
1636
|
+
"whitelist.import.success": "{count, plural, one {# nuova voce} other {# nuove voci}} importate.",
|
|
1637
|
+
"whitelist.import.none": "Nessuna nuova voce — tutte le email sono già nella whitelist.",
|
|
1638
|
+
"unsaved.title": "Modifiche non salvate",
|
|
1639
|
+
"unsaved.description": "Hai modifiche non salvate che andranno perse se esci. Vuoi continuare?",
|
|
1640
|
+
"unsaved.confirm": "Esci",
|
|
1641
|
+
"unsaved.cancel": "Resta",
|
|
1642
|
+
"auditlog.title": "Log di audit",
|
|
1643
|
+
"auditlog.export": "Scarica",
|
|
1644
|
+
"auditlog.table.timestamp": "Timestamp",
|
|
1645
|
+
"auditlog.table.action": "Azione",
|
|
1646
|
+
"auditlog.table.email": "Email",
|
|
1647
|
+
"auditlog.table.ip": "IP",
|
|
1648
|
+
"auditlog.table.details": "Dettagli",
|
|
1649
|
+
"auditlog.table.empty": "Nessuna voce nel log di audit",
|
|
1650
|
+
"auditlog.clear": "Cancella log",
|
|
1651
|
+
"auditlog.clear.title": "Cancella tutti i log",
|
|
1652
|
+
"auditlog.clear.description": "Questo eliminerà permanentemente tutte le {count, plural, one {# voce di log di audit} other {# voci di log di audit}}. Questa azione non può essere annullata.",
|
|
1653
|
+
"auditlog.clear.success": "Log di audit cancellati",
|
|
1654
|
+
"auditlog.clear.error": "Impossibile cancellare i log di audit",
|
|
1655
|
+
"auditlog.export.error": "Impossibile esportare i log di audit",
|
|
1656
|
+
"auditlog.filters": "Filtri",
|
|
1657
|
+
"auditlog.filters.action": "Azione",
|
|
1658
|
+
"auditlog.filters.email": "Email",
|
|
1659
|
+
"auditlog.filters.ip": "Indirizzo IP",
|
|
1660
|
+
"auditlog.filters.createdAt": "Data",
|
|
1661
|
+
"auditlog.filters.clear": "Cancella filtri",
|
|
1662
|
+
"auditlog.filters.empty": "Nessuna voce corrisponde ai filtri correnti",
|
|
1663
|
+
"auditlog.calendar.prevMonth": "Mese precedente",
|
|
1664
|
+
"auditlog.calendar.nextMonth": "Mese successivo",
|
|
1665
|
+
"auditlog.calendar.state.today": "oggi",
|
|
1666
|
+
"auditlog.calendar.state.selected": "selezionato",
|
|
1667
|
+
"auditlog.calendar.state.alreadyAdded": "già aggiunto",
|
|
1668
|
+
"auditlog.calendar.state.future": "non disponibile, data futura",
|
|
1669
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
1670
|
+
"auditlog.action.login_success": "L'utente è stato autenticato con successo tramite OIDC e gli è stato concesso l'accesso.",
|
|
1671
|
+
"auditlog.action.user_created": "Un nuovo account admin Strapi è stato creato per questo utente al suo primo accesso OIDC.",
|
|
1672
|
+
"auditlog.action.logout": "L'utente si è disconnesso e la sua sessione OIDC è terminata.",
|
|
1673
|
+
"auditlog.action.session_expired": "Il token di accesso OIDC era scaduto al momento della disconnessione dell'utente, quindi la sessione del provider non può essere terminata da remoto.",
|
|
1674
|
+
"auditlog.action.login_failure": "Si è verificato un errore imprevisto durante il flusso di accesso OIDC.",
|
|
1675
|
+
"auditlog.action.missing_code": "Il callback OIDC è stato ricevuto senza un codice di autorizzazione. Questo può indicare un provider mal configurato o una richiesta manomessa.",
|
|
1676
|
+
"auditlog.action.state_mismatch": "Il parametro stato nel callback non corrispondeva a quello memorizzato nella sessione. Questo può indicare un tentativo CSRF o una sessione di accesso scaduta.",
|
|
1677
|
+
"auditlog.action.nonce_mismatch": "Il nonce nel token ID non corrispondeva a quello generato all'accesso. Questo può indicare un attacco replay del token.",
|
|
1678
|
+
"auditlog.action.token_exchange_failed": "Il codice di autorizzazione non può essere scambiato con i token. Il provider OIDC ha rifiutato la richiesta.",
|
|
1679
|
+
"auditlog.action.whitelist_rejected": "L'indirizzo email dell'utente non è nella whitelist. Accesso negato.",
|
|
1680
|
+
"auditlog.action.email_not_verified": "Il provider OIDC non ha confermato l'indirizzo email dell'utente come verificato. Accesso negato.",
|
|
1681
|
+
"auditlog.action.id_token_invalid": "Il token ID non ha superato la validazione della firma, dell'issuer, del pubblico o della scadenza. Accesso negato.",
|
|
1682
|
+
"auth.page.authenticating.title": "Autenticazione...",
|
|
1683
|
+
"auth.page.authenticating.noscript.heading": "JavaScript richiesto",
|
|
1684
|
+
"auth.page.authenticating.noscript.body": "JavaScript deve essere abilitato per completare l'autenticazione.",
|
|
1685
|
+
"auth.page.error.title": "Autenticazione fallita",
|
|
1686
|
+
"auth.page.error.returnToLogin": "Torna all'accesso",
|
|
1687
|
+
"user.missing_code": "Codice di autorizzazione non ricevuto dal provider OIDC.",
|
|
1688
|
+
"user.invalid_state": "Mancata corrispondenza del parametro stato. Riavvia il flusso di accesso.",
|
|
1689
|
+
"user.signInError": "Autenticazione fallita. Riprova.",
|
|
1690
|
+
"settings.section": "OIDC",
|
|
1691
|
+
"settings.configuration": "Configurazione",
|
|
1692
|
+
"audit.login_failure": "Errore: {message}",
|
|
1693
|
+
"audit.roles_updated": "Ruoli aggiornati a: {roles}",
|
|
1694
|
+
"audit.user_created": "Ruoli assegnati: {roles}"
|
|
1695
|
+
};
|
|
1696
|
+
const __vite_glob_0_9 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1697
|
+
__proto__: null,
|
|
1698
|
+
default: it
|
|
1699
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
1700
|
+
const ja = {
|
|
1701
|
+
"global.plugins.strapi-plugin-oidc": "OIDCプラグイン",
|
|
1702
|
+
"page.title": "OIDCのデフォルトロールとアクセス制御を設定します。",
|
|
1703
|
+
"roles.notes": "最初のログイン時に新しいユーザーに割り当てられるデフォルトのロールを選択してください。この設定は既存のユーザーには影響しません。",
|
|
1704
|
+
"page.save": "変更を保存",
|
|
1705
|
+
"page.save.success": "設定が更新されました",
|
|
1706
|
+
"page.save.error": "更新に失敗しました。",
|
|
1707
|
+
"page.add": "追加",
|
|
1708
|
+
"page.cancel": "キャンセル",
|
|
1709
|
+
"common.remove": "{label}を削除",
|
|
1710
|
+
"page.ok": "OK",
|
|
1711
|
+
"roles.title": "デフォルトロール",
|
|
1712
|
+
"roles.placeholder": "デフォルトロールを選択",
|
|
1713
|
+
"whitelist.title": "ホワイトリスト",
|
|
1714
|
+
"whitelist.error.unique": "メールアドレスは既に登録されています。",
|
|
1715
|
+
"whitelist.description": "OIDC認証を特定のメールアドレスに制限します。ユーザーはデフォルトのOIDCロールマッピングまたはOIDCグループからロールを受け取るか。",
|
|
1716
|
+
"alert.title.success": "成功",
|
|
1717
|
+
"alert.title.error": "エラー",
|
|
1718
|
+
"alert.title.info": "情報",
|
|
1719
|
+
"pagination.previous": "前のページへ",
|
|
1720
|
+
"pagination.page": "{page}ページへ",
|
|
1721
|
+
"pagination.next": "次のページへ",
|
|
1722
|
+
"whitelist.table.no": "番号",
|
|
1723
|
+
"whitelist.table.email": "メールアドレス",
|
|
1724
|
+
"whitelist.table.created": "作成日",
|
|
1725
|
+
"whitelist.delete.title": "確認",
|
|
1726
|
+
"whitelist.delete.description": "削除してもよろしいですか:",
|
|
1727
|
+
"whitelist.delete.note": "Strapiのユーザーアカウントは削除されません。",
|
|
1728
|
+
"whitelist.toggle.enabled": "有効",
|
|
1729
|
+
"whitelist.toggle.disabled": "無効",
|
|
1730
|
+
"whitelist.email.placeholder": "メールアドレス",
|
|
1731
|
+
"whitelist.table.empty": "メールアドレスがありません",
|
|
1732
|
+
"whitelist.delete.label": "削除",
|
|
1733
|
+
"page.title.oidc": "OIDC",
|
|
1734
|
+
"enforce.title": "OIDCログインを強制",
|
|
1735
|
+
"enforce.toggle.enabled": "有効",
|
|
1736
|
+
"enforce.toggle.disabled": "無効",
|
|
1737
|
+
"enforce.warning": "変更を保存する前にOIDCが正しく設定されていることを確認してください。通常ログインできなくなります。",
|
|
1738
|
+
"enforce.config.info": "強制はOIDC_ENFORCE設定変数によって制御されており、ここでは変更できません。",
|
|
1739
|
+
"login.settings.title": "ログイン設定",
|
|
1740
|
+
"login.sso": "SSOでログイン",
|
|
1741
|
+
"pagination.total": "{count, plural, other {#件}}",
|
|
1742
|
+
"whitelist.import": "インポート",
|
|
1743
|
+
"whitelist.export": "エクスポート",
|
|
1744
|
+
"whitelist.delete.all.label": "すべて削除",
|
|
1745
|
+
"whitelist.delete.all.title": "すべてのエントリを削除",
|
|
1746
|
+
"whitelist.delete.all.description": "これにより、ホワイトリストからすべての{count, plural, other {#件のエントリ}}が完全に削除されます。保存されていない変更は失われます。",
|
|
1747
|
+
"whitelist.import.error": "無効なファイル — メールフィールドを持つJSONオブジェクトの配列が期待されていました。",
|
|
1748
|
+
"whitelist.import.success": "{count, plural, other {#件の新しいエントリ}}をインポートしました。",
|
|
1749
|
+
"whitelist.import.none": "新しいエントリはありません — すべてのメールは既にホワイトリストにあります。",
|
|
1750
|
+
"unsaved.title": "未保存の変更",
|
|
1751
|
+
"unsaved.description": "未保存の変更があり、このまま退出すると失われます。続行しますか?",
|
|
1752
|
+
"unsaved.confirm": "退出",
|
|
1753
|
+
"unsaved.cancel": "留下",
|
|
1754
|
+
"auditlog.title": "監査ログ",
|
|
1755
|
+
"auditlog.export": "ダウンロード",
|
|
1756
|
+
"auditlog.table.timestamp": "タイムスタンプ",
|
|
1757
|
+
"auditlog.table.action": "アクション",
|
|
1758
|
+
"auditlog.table.email": "メールアドレス",
|
|
1759
|
+
"auditlog.table.ip": "IP",
|
|
1760
|
+
"auditlog.table.details": "詳細",
|
|
1761
|
+
"auditlog.table.empty": "監査ログエントリがありません",
|
|
1762
|
+
"auditlog.clear": "ログをクリア",
|
|
1763
|
+
"auditlog.clear.title": "すべてのログをクリア",
|
|
1764
|
+
"auditlog.clear.description": "これにより、すべての{count, plural, other {#件の監査ログエントリ}}が完全に削除されます。この操作は元に戻せません。",
|
|
1765
|
+
"auditlog.clear.success": "監査ログがクリアされました",
|
|
1766
|
+
"auditlog.clear.error": "監査ログのクリアに失敗しました",
|
|
1767
|
+
"auditlog.export.error": "監査ログのエクスポートに失敗しました",
|
|
1768
|
+
"auditlog.filters": "フィルター",
|
|
1769
|
+
"auditlog.filters.action": "アクション",
|
|
1770
|
+
"auditlog.filters.email": "メールアドレス",
|
|
1771
|
+
"auditlog.filters.ip": "IPアドレス",
|
|
1772
|
+
"auditlog.filters.createdAt": "日付",
|
|
1773
|
+
"auditlog.filters.clear": "フィルターをクリア",
|
|
1774
|
+
"auditlog.filters.empty": "現在のフィルターに一致するエントリがありません",
|
|
1775
|
+
"auditlog.calendar.prevMonth": "前月",
|
|
1776
|
+
"auditlog.calendar.nextMonth": "翌月",
|
|
1777
|
+
"auditlog.calendar.state.today": "今日",
|
|
1778
|
+
"auditlog.calendar.state.selected": "選択済み",
|
|
1779
|
+
"auditlog.calendar.state.alreadyAdded": "既に追加済み",
|
|
1780
|
+
"auditlog.calendar.state.future": "利用不可、未来の日付",
|
|
1781
|
+
"auditlog.calendar.dayWithState": "{date}、{state}",
|
|
1782
|
+
"auditlog.action.login_success": "ユーザーはOIDCを通じて正常に認証され、アクセスが許可されました。",
|
|
1783
|
+
"auditlog.action.user_created": "このユーザーの最初のOIDCログイン時に、新しいStrapi管理者アカウントが作成されました。",
|
|
1784
|
+
"auditlog.action.logout": "ユーザーがログアウトし、OIDCセッションが終了しました。",
|
|
1785
|
+
"auditlog.action.session_expired": "ユーザーがログアウトした時点でOIDCアクセストークンの有効期限が切れていたため、プロバイダーセッションをリモートで終了できませんでした。",
|
|
1786
|
+
"auditlog.action.login_failure": "OIDCログインフロ中に予期しないエラーが発生しました。",
|
|
1787
|
+
"auditlog.action.missing_code": "OIDCコールバックが認証コードなしで受信されました。これは、設定ミスのプロバイダーまたは改ざんされたリクエストを示している可能性があります。",
|
|
1788
|
+
"auditlog.action.state_mismatch": "コールバックの状態パラメータが、セッションに保存されているものと一致しませんでした。これはCSRF攻撃または期限切れのログインセッションを示している可能性があります。",
|
|
1789
|
+
"auditlog.action.nonce_mismatch": "IDトークンのノンスが、ログイン時に生成されたものと一致しませんでした。これはトークンリプレイ攻撃を示している可能性があります。",
|
|
1790
|
+
"auditlog.action.token_exchange_failed": "認証コードをトークンと交換できませんでした。OIDCプロバイダーがリクエストを拒否しました。",
|
|
1791
|
+
"auditlog.action.whitelist_rejected": "ユーザーのメールアドレスはホワイトリストにありません。アクセスは拒否されました。",
|
|
1792
|
+
"auditlog.action.email_not_verified": "OIDCプロバイダーはユーザーのメールアドレスが確認済みであることを確認しませんでした。アクセスは拒否されました。",
|
|
1793
|
+
"auditlog.action.id_token_invalid": "IDトークンが署名、发注者、対象者、または有効期限の検証に失敗しました。アクセスは拒否されました。",
|
|
1794
|
+
"auth.page.authenticating.title": "認証中...",
|
|
1795
|
+
"auth.page.authenticating.noscript.heading": "JavaScriptが必要",
|
|
1796
|
+
"auth.page.authenticating.noscript.body": "認証を完了するにはJavaScriptを有効にする必要があります。",
|
|
1797
|
+
"auth.page.error.title": "認証に失敗しました",
|
|
1798
|
+
"auth.page.error.returnToLogin": "ログインに戻る",
|
|
1799
|
+
"user.missing_code": "OIDCプロバイダーから認証コードを受信しませんでした。",
|
|
1800
|
+
"user.invalid_state": "状態パラメータが一致しません。ログインフローを再開してください。",
|
|
1801
|
+
"user.signInError": "認証に失敗しました。もう一度お試しください。",
|
|
1802
|
+
"settings.section": "OIDC",
|
|
1803
|
+
"settings.configuration": "設定",
|
|
1804
|
+
"audit.login_failure": "エラー: {message}",
|
|
1805
|
+
"audit.roles_updated": "ロールが更新されました: {roles}",
|
|
1806
|
+
"audit.user_created": "割り当てられたロール: {roles}"
|
|
1807
|
+
};
|
|
1808
|
+
const __vite_glob_0_10 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1809
|
+
__proto__: null,
|
|
1810
|
+
default: ja
|
|
1811
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
1812
|
+
const ko = {
|
|
1813
|
+
"global.plugins.strapi-plugin-oidc": "OIDC 플러그인",
|
|
1814
|
+
"page.title": "OIDC 기본 역할 및 접근 제어 구성.",
|
|
1815
|
+
"roles.notes": "첫 로그인 시 새 사용자에게 할당될 기본 역할을 선택하세요. 이 설정은 기존 사용자에게 영향을 주지 않습니다.",
|
|
1816
|
+
"page.save": "변경 사항 저장",
|
|
1817
|
+
"page.save.success": "설정이 업데이트되었습니다",
|
|
1818
|
+
"page.save.error": "업데이트 실패.",
|
|
1819
|
+
"page.add": "추가",
|
|
1820
|
+
"page.cancel": "취소",
|
|
1821
|
+
"common.remove": "{label} 제거",
|
|
1822
|
+
"page.ok": "확인",
|
|
1823
|
+
"roles.title": "기본 역할",
|
|
1824
|
+
"roles.placeholder": "기본 역할 선택",
|
|
1825
|
+
"whitelist.title": "화이트리스트",
|
|
1826
|
+
"whitelist.error.unique": "이미 등록된 이메일 주소입니다.",
|
|
1827
|
+
"whitelist.description": "OIDC 인증을 특정 이메일 주소로 제한합니다. 사용자는 기본 OIDC 역할 매핑 또는 OIDC 그룹에서 역할을 수신합니다.",
|
|
1828
|
+
"alert.title.success": "성공",
|
|
1829
|
+
"alert.title.error": "오류",
|
|
1830
|
+
"alert.title.info": "정보",
|
|
1831
|
+
"pagination.previous": "이전 페이지로",
|
|
1832
|
+
"pagination.page": "{page}페이지로",
|
|
1833
|
+
"pagination.next": "다음 페이지로",
|
|
1834
|
+
"whitelist.table.no": "번호",
|
|
1835
|
+
"whitelist.table.email": "이메일",
|
|
1836
|
+
"whitelist.table.created": "생성일",
|
|
1837
|
+
"whitelist.delete.title": "확인",
|
|
1838
|
+
"whitelist.delete.description": "정말 삭제하시겠습니까:",
|
|
1839
|
+
"whitelist.delete.note": "이렇게 해도 Strapi의 사용자 계정은 삭제되지 않습니다.",
|
|
1840
|
+
"whitelist.toggle.enabled": "활성화",
|
|
1841
|
+
"whitelist.toggle.disabled": "비활성화",
|
|
1842
|
+
"whitelist.email.placeholder": "이메일 주소",
|
|
1843
|
+
"whitelist.table.empty": "이메일 주소 없음",
|
|
1844
|
+
"whitelist.delete.label": "삭제",
|
|
1845
|
+
"page.title.oidc": "OIDC",
|
|
1846
|
+
"enforce.title": "OIDC 로그인 강제",
|
|
1847
|
+
"enforce.toggle.enabled": "활성화",
|
|
1848
|
+
"enforce.toggle.disabled": "비활성화",
|
|
1849
|
+
"enforce.warning": "변경 사항을 저장하기 전에 OIDC가 올바르게 설정되었는지 확인하세요. 정상적으로 로그인할 수 없게 됩니다.",
|
|
1850
|
+
"enforce.config.info": "적용은 OIDC_ENFORCE 구성 변수로 제어되며 여기서 변경할 수 없습니다.",
|
|
1851
|
+
"login.settings.title": "로그인 설정",
|
|
1852
|
+
"login.sso": "SSO로 로그인",
|
|
1853
|
+
"pagination.total": "{count, plural, other {#개 항목}}",
|
|
1854
|
+
"whitelist.import": "가져오기",
|
|
1855
|
+
"whitelist.export": "내보내기",
|
|
1856
|
+
"whitelist.delete.all.label": "모두 삭제",
|
|
1857
|
+
"whitelist.delete.all.title": "모든 항목 삭제",
|
|
1858
|
+
"whitelist.delete.all.description": "화이트리스트에서 모든 {count, plural, other {#개 항목}}을 영구히 제거합니다. 저장되지 않은 변경 사항은 손실됩니다.",
|
|
1859
|
+
"whitelist.import.error": "잘못된 파일 — 이메일 필드가 있는 JSON 객체 배열이 필요합니다.",
|
|
1860
|
+
"whitelist.import.success": "{count, plural, other {#개 새 항목}}을(를) 가져왔습니다.",
|
|
1861
|
+
"whitelist.import.none": "새 항목 없음 — 모든 이메일이 이미 화이트리스트에 있습니다.",
|
|
1862
|
+
"unsaved.title": "저장되지 않은 변경 사항",
|
|
1863
|
+
"unsaved.description": "저장되지 않은 변경 사항이 있으며 떠나면 손실됩니다. 계속하시겠습니까?",
|
|
1864
|
+
"unsaved.confirm": "떠나기",
|
|
1865
|
+
"unsaved.cancel": "留下来",
|
|
1866
|
+
"auditlog.title": "감사 로그",
|
|
1867
|
+
"auditlog.export": "다운로드",
|
|
1868
|
+
"auditlog.table.timestamp": "타임스탬프",
|
|
1869
|
+
"auditlog.table.action": "작업",
|
|
1870
|
+
"auditlog.table.email": "이메일",
|
|
1871
|
+
"auditlog.table.ip": "IP",
|
|
1872
|
+
"auditlog.table.details": "세부정보",
|
|
1873
|
+
"auditlog.table.empty": "감사 로그 항목 없음",
|
|
1874
|
+
"auditlog.clear": "로그 지우기",
|
|
1875
|
+
"auditlog.clear.title": "모든 로그 지우기",
|
|
1876
|
+
"auditlog.clear.description": "모든 {count, plural, other {#개의 감사 로그 항목}}을 영구히 삭제합니다. 이 작업은 취소할 수 없습니다.",
|
|
1877
|
+
"auditlog.clear.success": "감사 로그가 지워졌습니다",
|
|
1878
|
+
"auditlog.clear.error": "감사 로그 지우기 실패",
|
|
1879
|
+
"auditlog.export.error": "감사 로그 내보내기 실패",
|
|
1880
|
+
"auditlog.filters": "필터",
|
|
1881
|
+
"auditlog.filters.action": "작업",
|
|
1882
|
+
"auditlog.filters.email": "이메일",
|
|
1883
|
+
"auditlog.filters.ip": "IP 주소",
|
|
1884
|
+
"auditlog.filters.createdAt": "날짜",
|
|
1885
|
+
"auditlog.filters.clear": "필터 지우기",
|
|
1886
|
+
"auditlog.filters.empty": "현재 필터와 일치하는 항목 없음",
|
|
1887
|
+
"auditlog.calendar.prevMonth": "이전 달",
|
|
1888
|
+
"auditlog.calendar.nextMonth": "다음 달",
|
|
1889
|
+
"auditlog.calendar.state.today": "오늘",
|
|
1890
|
+
"auditlog.calendar.state.selected": "선택됨",
|
|
1891
|
+
"auditlog.calendar.state.alreadyAdded": "이미 추가됨",
|
|
1892
|
+
"auditlog.calendar.state.future": "사용 불가, 미래 날짜",
|
|
1893
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
1894
|
+
"auditlog.action.login_success": "사용자가 OIDC를 통해 성공적으로 인증되었으며 액세스가 허용되었습니다.",
|
|
1895
|
+
"auditlog.action.user_created": "이 사용자의 첫 OIDC 로그인 시 새로운 Strapi 관리자 계정이 생성되었습니다.",
|
|
1896
|
+
"auditlog.action.logout": "사용자가 로그아웃하고 OIDC 세션이 종료되었습니다.",
|
|
1897
|
+
"auditlog.action.session_expired": "사용자가 로그아웃할 때 OIDC 액세스 토큰이 만료되어 공급자 세션을 원격으로 종료할 수 없었습니다.",
|
|
1898
|
+
"auditlog.action.login_failure": "OIDC 로그인 흐름 중 예상치 못한 오류가 발생했습니다.",
|
|
1899
|
+
"auditlog.action.missing_code": "OIDC 콜백이 인증 코드 없이 수신되었습니다. 이는 잘못 구성된 공급자 또는 변조된 요청을 나타낼 수 있습니다.",
|
|
1900
|
+
"auditlog.action.state_mismatch": "콜백의 상태 매개변수가 세션에 저장된ものと 일치하지 않았습니다. 이는 CSRF 시도 또는 만료된 로그인 세션을 나타낼 수 있습니다.",
|
|
1901
|
+
"auditlog.action.nonce_mismatch": "ID 토큰의 nonce가 로그인 시 생성されたものと 일치하지 않았습니다. 이는 토큰 재생 공격을 나타낼 수 있습니다.",
|
|
1902
|
+
"auditlog.action.token_exchange_failed": "인증 코드를 토큰으로 교환할 수 없었습니다. OIDC 공급자가 요청을 거부했습니다.",
|
|
1903
|
+
"auditlog.action.whitelist_rejected": "사용자의 이메일 주소가 화이트리스트에 없습니다. 접근이 거부되었습니다.",
|
|
1904
|
+
"auditlog.action.email_not_verified": "OIDC 공급자가 사용자의 이메일 주소를 확인된 것으로 확인하지 않았습니다. 접근이 거부되었습니다.",
|
|
1905
|
+
"auditlog.action.id_token_invalid": "ID 토큰이 서명, 발급자, 대상자 또는 만료 검증에 실패했습니다. 접근이 거부되었습니다.",
|
|
1906
|
+
"auth.page.authenticating.title": "인증 중...",
|
|
1907
|
+
"auth.page.authenticating.noscript.heading": "JavaScript 필요",
|
|
1908
|
+
"auth.page.authenticating.noscript.body": "인증을 완료하려면 JavaScript를 활성화해야 합니다.",
|
|
1909
|
+
"auth.page.error.title": "인증 실패",
|
|
1910
|
+
"auth.page.error.returnToLogin": "로그인으로 돌아가기",
|
|
1911
|
+
"user.missing_code": "OIDC 공급자로부터 인증 코드를 받지 못했습니다.",
|
|
1912
|
+
"user.invalid_state": "상태 매개변수 불일치. 로그인 흐름을 다시 시작하세요.",
|
|
1913
|
+
"user.signInError": "인증에 실패했습니다. 다시 시도해 주세요.",
|
|
1914
|
+
"settings.section": "OIDC",
|
|
1915
|
+
"settings.configuration": "구성",
|
|
1916
|
+
"audit.login_failure": "오류: {message}",
|
|
1917
|
+
"audit.roles_updated": "역할이 다음으로 업데이트됨: {roles}",
|
|
1918
|
+
"audit.user_created": "할당된 역할: {roles}"
|
|
1919
|
+
};
|
|
1920
|
+
const __vite_glob_0_11 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
1921
|
+
__proto__: null,
|
|
1922
|
+
default: ko
|
|
1923
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
1924
|
+
const ms = {
|
|
1925
|
+
"global.plugins.strapi-plugin-oidc": "Plugin OIDC",
|
|
1926
|
+
"page.title": "Konfigurasiperanan dan kawalan akses lalai OIDC.",
|
|
1927
|
+
"roles.notes": "Pilihperanan lalai yang ditugaskan kepada pengguna baharu semasa log masuk pertama mereka. Tetapan ini tidak mempengaruhi pengguna sedia ada.",
|
|
1928
|
+
"page.save": "Simpan Perubahan",
|
|
1929
|
+
"page.save.success": "Tetapan dikemas kini",
|
|
1930
|
+
"page.save.error": "Kemaskini gagal.",
|
|
1931
|
+
"page.add": "Tambah",
|
|
1932
|
+
"page.cancel": "Batal",
|
|
1933
|
+
"common.remove": "Alih keluar {label}",
|
|
1934
|
+
"page.ok": "OK",
|
|
1935
|
+
"roles.title": "Peranan Lalai",
|
|
1936
|
+
"roles.placeholder": "Pilih peranan lalai",
|
|
1937
|
+
"whitelist.title": "Senarai Putih",
|
|
1938
|
+
"whitelist.error.unique": "Alamat e-mel sudah berdaftar.",
|
|
1939
|
+
"whitelist.description": "Hadkan pengesahan OIDC kepada alamat e-mel tertentu. Pengguna menerima peranan daripada pemetaan peranan OIDC lalai atau kumpulan OIDC mereka.",
|
|
1940
|
+
"alert.title.success": "Berjaya",
|
|
1941
|
+
"alert.title.error": "Ralat",
|
|
1942
|
+
"alert.title.info": "Maklumat",
|
|
1943
|
+
"pagination.previous": "Pergi ke halaman sebelumnya",
|
|
1944
|
+
"pagination.page": "Pergi ke halaman {page}",
|
|
1945
|
+
"pagination.next": "Pergi ke halaman seterusnya",
|
|
1946
|
+
"whitelist.table.no": "Bil.",
|
|
1947
|
+
"whitelist.table.email": "E-mel",
|
|
1948
|
+
"whitelist.table.created": "Dicipta pada",
|
|
1949
|
+
"whitelist.delete.title": "Pengesahan",
|
|
1950
|
+
"whitelist.delete.description": "Adakah anda pasti ingin memadamkan:",
|
|
1951
|
+
"whitelist.delete.note": "Ini tidak akan memadamkan akaun pengguna dalam Strapi.",
|
|
1952
|
+
"whitelist.toggle.enabled": "Dihidupkan",
|
|
1953
|
+
"whitelist.toggle.disabled": "Dimatikan",
|
|
1954
|
+
"whitelist.email.placeholder": "Alamat e-mel",
|
|
1955
|
+
"whitelist.table.empty": "Tiada alamat e-mel",
|
|
1956
|
+
"whitelist.delete.label": "Padam",
|
|
1957
|
+
"page.title.oidc": "OIDC",
|
|
1958
|
+
"enforce.title": "Paksa Log Masuk OIDC",
|
|
1959
|
+
"enforce.toggle.enabled": "Dihidupkan",
|
|
1960
|
+
"enforce.toggle.disabled": "Dimatikan",
|
|
1961
|
+
"enforce.warning": "Pastikan OIDC dikonfigurasi dengan betul sebelum menyimpan perubahan, anda tidak akan dapat log masuk secara normal.",
|
|
1962
|
+
"enforce.config.info": "Penguatkuasaan dikawal oleh pembolehubah konfigurasi OIDC_ENFORCE dan tidak boleh ditukar di sini.",
|
|
1963
|
+
"login.settings.title": "Tetapan Log Masuk",
|
|
1964
|
+
"login.sso": "Log Masuk melalui SSO",
|
|
1965
|
+
"pagination.total": "{count, plural, other {# entri}}",
|
|
1966
|
+
"whitelist.import": "Import",
|
|
1967
|
+
"whitelist.export": "Export",
|
|
1968
|
+
"whitelist.delete.all.label": "Padam Semua",
|
|
1969
|
+
"whitelist.delete.all.title": "Padam Semua Entri",
|
|
1970
|
+
"whitelist.delete.all.description": "Ini akan mengalih keluar secara kekal semua {count, plural, other {# entri}} daripada senarai putih. Perubahan yang tidak disimpan akan hilang.",
|
|
1971
|
+
"whitelist.import.error": "Fail tidak sah — dijangkakan tatasusunan JSON bagi objek dengan medan e-mel.",
|
|
1972
|
+
"whitelist.import.success": "{count, plural, other {# entri baharu}} diimport.",
|
|
1973
|
+
"whitelist.import.none": "Tiada entri baharu — semua e-mel sudah berada dalam senarai putih.",
|
|
1974
|
+
"unsaved.title": "Perubahan Belum Disimpan",
|
|
1975
|
+
"unsaved.description": "Anda mempunyai perubahan yang belum disimpan yang akan hilang jika anda keluar. Adakah anda ingin teruskan?",
|
|
1976
|
+
"unsaved.confirm": "Keluar",
|
|
1977
|
+
"unsaved.cancel": "Tinggal",
|
|
1978
|
+
"auditlog.title": "Log Audit",
|
|
1979
|
+
"auditlog.export": "Muat Turun",
|
|
1980
|
+
"auditlog.table.timestamp": "Cap Masa",
|
|
1981
|
+
"auditlog.table.action": "Tindakan",
|
|
1982
|
+
"auditlog.table.email": "E-mel",
|
|
1983
|
+
"auditlog.table.ip": "IP",
|
|
1984
|
+
"auditlog.table.details": "Butiran",
|
|
1985
|
+
"auditlog.table.empty": "Tiada entri log audit",
|
|
1986
|
+
"auditlog.clear": "Padam Log",
|
|
1987
|
+
"auditlog.clear.title": "Padam Semua Log",
|
|
1988
|
+
"auditlog.clear.description": "Ini akan memadamkan secara kekal semua {count, plural, other {# entri log audit}}. Tindakan ini tidak boleh dibatalkan.",
|
|
1989
|
+
"auditlog.clear.success": "Log audit dipadamkan",
|
|
1990
|
+
"auditlog.clear.error": "Gagal memadamkan log audit",
|
|
1991
|
+
"auditlog.export.error": "Gagal mengeksport log audit",
|
|
1992
|
+
"auditlog.filters": "Penapis",
|
|
1993
|
+
"auditlog.filters.action": "Tindakan",
|
|
1994
|
+
"auditlog.filters.email": "E-mel",
|
|
1995
|
+
"auditlog.filters.ip": "Alamat IP",
|
|
1996
|
+
"auditlog.filters.createdAt": "Tarikh",
|
|
1997
|
+
"auditlog.filters.clear": "Padam penapis",
|
|
1998
|
+
"auditlog.filters.empty": "Tiada entri yang sepadan dengan penapis semasa",
|
|
1999
|
+
"auditlog.calendar.prevMonth": "Bulan sebelumnya",
|
|
2000
|
+
"auditlog.calendar.nextMonth": "Bulan hadapan",
|
|
2001
|
+
"auditlog.calendar.state.today": "hari ini",
|
|
2002
|
+
"auditlog.calendar.state.selected": "dipilih",
|
|
2003
|
+
"auditlog.calendar.state.alreadyAdded": "sudah ditambah",
|
|
2004
|
+
"auditlog.calendar.state.future": "tidak tersedia, tarikh hadapan",
|
|
2005
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
2006
|
+
"auditlog.action.login_success": "Pengguna berjaya disahkan melalui OIDC dan diberikan akses.",
|
|
2007
|
+
"auditlog.action.user_created": "Akaun admin Strapi baharu dicipta untuk pengguna ini pada log masuk OIDC pertama mereka.",
|
|
2008
|
+
"auditlog.action.logout": "Pengguna log keluar dan sesi OIDC mereka ditamatkan.",
|
|
2009
|
+
"auditlog.action.session_expired": "Token akses OIDC telah tamat tempoh pada masa pengguna log keluar, jadi sesi pembekal tidak boleh ditamatkan dari jauh.",
|
|
2010
|
+
"auditlog.action.login_failure": "Ralat yang tidak dijangka berlaku semasa aliran log masuk OIDC.",
|
|
2011
|
+
"auditlog.action.missing_code": "Panggilan balik OIDC diterima tanpa kod kebenaran. Ini mungkin menunjukkan pembekal yang salah konfigurasi atau permintaan yang rosak.",
|
|
2012
|
+
"auditlog.action.state_mismatch": "Parameter keadaan dalam panggilan balik tidak sepadan dengan yang disimpan dalam sesi. Ini mungkin menunjukkan percubaan CSRF atau sesi log masuk yang tamat tempoh.",
|
|
2013
|
+
"auditlog.action.nonce_mismatch": "Nonce dalam token ID tidak sepadan dengan yang dijana semasa log masuk. Ini mungkin menunjukkan serangan replay token.",
|
|
2014
|
+
"auditlog.action.token_exchange_failed": "Kod kebenaran tidak boleh ditukar dengan token. Pembekal OIDC menolak permintaan.",
|
|
2015
|
+
"auditlog.action.whitelist_rejected": "Alamat e-mel pengguna tidak terdapat dalam senarai putih. Akses ditolak.",
|
|
2016
|
+
"auditlog.action.email_not_verified": "Pembekal OIDC tidak mengesahkan alamat e-mel pengguna sebagai disahkan. Akses ditolak.",
|
|
2017
|
+
"auditlog.action.id_token_invalid": "Token ID gagal dalam pengesahan tandatangan, penerbit, audiens, atau tamat tempoh. Akses ditolak.",
|
|
2018
|
+
"auth.page.authenticating.title": "Mengesahkan...",
|
|
2019
|
+
"auth.page.authenticating.noscript.heading": "JavaScript Diperlukan",
|
|
2020
|
+
"auth.page.authenticating.noscript.body": "JavaScript mestilah diaktifkan untuk pengesahan selesai.",
|
|
2021
|
+
"auth.page.error.title": "Pengesahan Gagal",
|
|
2022
|
+
"auth.page.error.returnToLogin": "Kembali ke Log Masuk",
|
|
2023
|
+
"user.missing_code": "Kod kebenaran tidak diterima daripada pembekal OIDC.",
|
|
2024
|
+
"user.invalid_state": "Ketidakpadanan parameter keadaan. Sila mulakan semula aliran log masuk.",
|
|
2025
|
+
"user.signInError": "Pengesahan gagal. Sila cuba lagi.",
|
|
2026
|
+
"settings.section": "OIDC",
|
|
2027
|
+
"settings.configuration": "Konfigurasi",
|
|
2028
|
+
"audit.login_failure": "Ralat: {message}",
|
|
2029
|
+
"audit.roles_updated": "Peranan dikemas kini kepada: {roles}",
|
|
2030
|
+
"audit.user_created": "Peranan yang ditugaskan: {roles}"
|
|
2031
|
+
};
|
|
2032
|
+
const __vite_glob_0_12 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
2033
|
+
__proto__: null,
|
|
2034
|
+
default: ms
|
|
2035
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
2036
|
+
const nl = {
|
|
2037
|
+
"global.plugins.strapi-plugin-oidc": "OIDC-plugin",
|
|
2038
|
+
"page.title": "Configureer de standaard OIDC-rollen en toegangscontroles.",
|
|
2039
|
+
"roles.notes": "Selecteer de standaardrol(len) die aan nieuwe gebruikers worden toegewezen bij hun eerste login. Deze instelling heeft geen invloed op bestaande gebruikers.",
|
|
2040
|
+
"page.save": "Wijzigingen opslaan",
|
|
2041
|
+
"page.save.success": "Instellingen bijgewerkt",
|
|
2042
|
+
"page.save.error": "Bijwerken mislukt.",
|
|
2043
|
+
"page.add": "Toevoegen",
|
|
2044
|
+
"page.cancel": "Annuleren",
|
|
2045
|
+
"common.remove": "{label} verwijderen",
|
|
2046
|
+
"page.ok": "OK",
|
|
2047
|
+
"roles.title": "Standaardrol(len)",
|
|
2048
|
+
"roles.placeholder": "Selecteer standaardrol(len)",
|
|
2049
|
+
"whitelist.title": "Whitelist",
|
|
2050
|
+
"whitelist.error.unique": "E-mailadres is al geregistreerd.",
|
|
2051
|
+
"whitelist.description": "Beperk OIDC-authenticatie tot specifieke e-mailadressen. Gebruikers ontvangen rollen van de standaard OIDC-roltoewijzing of hun OIDC-groep.",
|
|
2052
|
+
"alert.title.success": "Succes",
|
|
2053
|
+
"alert.title.error": "Fout",
|
|
2054
|
+
"alert.title.info": "Info",
|
|
2055
|
+
"pagination.previous": "Ga naar vorige pagina",
|
|
2056
|
+
"pagination.page": "Ga naar pagina {page}",
|
|
2057
|
+
"pagination.next": "Ga naar volgende pagina",
|
|
2058
|
+
"whitelist.table.no": "Nr.",
|
|
2059
|
+
"whitelist.table.email": "E-mail",
|
|
2060
|
+
"whitelist.table.created": "Gemaakt op",
|
|
2061
|
+
"whitelist.delete.title": "Bevestiging",
|
|
2062
|
+
"whitelist.delete.description": "Weet u zeker dat u wilt verwijderen:",
|
|
2063
|
+
"whitelist.delete.note": "Dit verwijdert het gebruikersaccount niet in Strapi.",
|
|
2064
|
+
"whitelist.toggle.enabled": "Ingeschakeld",
|
|
2065
|
+
"whitelist.toggle.disabled": "Uitgeschakeld",
|
|
2066
|
+
"whitelist.email.placeholder": "E-mailadres",
|
|
2067
|
+
"whitelist.table.empty": "Geen e-mailadressen",
|
|
2068
|
+
"whitelist.delete.label": "Verwijderen",
|
|
2069
|
+
"page.title.oidc": "OIDC",
|
|
2070
|
+
"enforce.title": "OIDC-login afdwingen",
|
|
2071
|
+
"enforce.toggle.enabled": "Ingeschakeld",
|
|
2072
|
+
"enforce.toggle.disabled": "Uitgeschakeld",
|
|
2073
|
+
"enforce.warning": "Zorg ervoor dat OIDC correct is ingesteld voordat u de wijzigingen opslaat, u kunt niet normaal inloggen.",
|
|
2074
|
+
"enforce.config.info": "Afdwinging wordt beheerd door de OIDC_ENFORCE-configuratievariabele en kan hier niet worden gewijzigd.",
|
|
2075
|
+
"login.settings.title": "Login-instellingen",
|
|
2076
|
+
"login.sso": "Inloggen via SSO",
|
|
2077
|
+
"pagination.total": "{count, plural, one {# item} other {# items}}",
|
|
2078
|
+
"whitelist.import": "Importeren",
|
|
2079
|
+
"whitelist.export": "Exporteren",
|
|
2080
|
+
"whitelist.delete.all.label": "Alles verwijderen",
|
|
2081
|
+
"whitelist.delete.all.title": "Alle items verwijderen",
|
|
2082
|
+
"whitelist.delete.all.description": "Hiermee worden alle {count, plural, one {# item} other {# items}} permanent van de whitelist verwijderd. Niet-opgeslagen wijzigingen gaan verloren.",
|
|
2083
|
+
"whitelist.import.error": "Ongeldig bestand — verwacht werd een JSON-array van objecten met een e-mailveld.",
|
|
2084
|
+
"whitelist.import.success": "{count, plural, one {# nieuw item} other {# nieuwe items}} geïmporteerd.",
|
|
2085
|
+
"whitelist.import.none": "Geen nieuwe items — alle e-mails staan al op de whitelist.",
|
|
2086
|
+
"unsaved.title": "Niet-opgeslagen wijzigingen",
|
|
2087
|
+
"unsaved.description": "U hebt niet-opgeslagen wijzigingen die verloren gaan als u weggaat. Wilt u doorgaan?",
|
|
2088
|
+
"unsaved.confirm": "Vertrekken",
|
|
2089
|
+
"unsaved.cancel": "Blijven",
|
|
2090
|
+
"auditlog.title": "Auditlogboeken",
|
|
2091
|
+
"auditlog.export": "Downloaden",
|
|
2092
|
+
"auditlog.table.timestamp": "Tijdstempel",
|
|
2093
|
+
"auditlog.table.action": "Actie",
|
|
2094
|
+
"auditlog.table.email": "E-mail",
|
|
2095
|
+
"auditlog.table.ip": "IP",
|
|
2096
|
+
"auditlog.table.details": "Details",
|
|
2097
|
+
"auditlog.table.empty": "Geen auditlogboekitems",
|
|
2098
|
+
"auditlog.clear": "Logboeken wissen",
|
|
2099
|
+
"auditlog.clear.title": "Alle logboeken wissen",
|
|
2100
|
+
"auditlog.clear.description": "Hiermee worden alle {count, plural, one {# auditlogboekitem} other {# auditlogboekitems}} permanent verwijderd. Deze actie kan niet ongedaan worden gemaakt.",
|
|
2101
|
+
"auditlog.clear.success": "Auditlogboeken gewist",
|
|
2102
|
+
"auditlog.clear.error": "Kan auditlogboeken niet wissen",
|
|
2103
|
+
"auditlog.export.error": "Kan auditlogboeken niet exporteren",
|
|
2104
|
+
"auditlog.filters": "Filters",
|
|
2105
|
+
"auditlog.filters.action": "Actie",
|
|
2106
|
+
"auditlog.filters.email": "E-mail",
|
|
2107
|
+
"auditlog.filters.ip": "IP-adres",
|
|
2108
|
+
"auditlog.filters.createdAt": "Datum",
|
|
2109
|
+
"auditlog.filters.clear": "Filters wissen",
|
|
2110
|
+
"auditlog.filters.empty": "Geen items komen overeen met de huidige filters",
|
|
2111
|
+
"auditlog.calendar.prevMonth": "Vorige maand",
|
|
2112
|
+
"auditlog.calendar.nextMonth": "Volgende maand",
|
|
2113
|
+
"auditlog.calendar.state.today": "vandaag",
|
|
2114
|
+
"auditlog.calendar.state.selected": "geselecteerd",
|
|
2115
|
+
"auditlog.calendar.state.alreadyAdded": "reeds toegevoegd",
|
|
2116
|
+
"auditlog.calendar.state.future": "niet beschikbaar, toekomstige datum",
|
|
2117
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
2118
|
+
"auditlog.action.login_success": "Gebruiker is succesvol geverifieerd via OIDC en heeft toegang gekregen.",
|
|
2119
|
+
"auditlog.action.user_created": "Er is een nieuw Strapi-adminaccount aangemaakt voor deze gebruiker bij hun eerste OIDC-login.",
|
|
2120
|
+
"auditlog.action.logout": "Gebruiker is uitgelogd en hun OIDC-sessie is beëindigd.",
|
|
2121
|
+
"auditlog.action.session_expired": "Het OIDC-toegangstoken was verlopen op het moment dat de gebruiker uitlogde, dus de providersessie kon niet op afstand worden beëindigd.",
|
|
2122
|
+
"auditlog.action.login_failure": "Er is een onverwachte fout opgetreden tijdens de OIDC-loginstroom.",
|
|
2123
|
+
"auditlog.action.missing_code": "De OIDC-callback is ontvangen zonder autorisatiecode. Dit kan wijzen op een verkeerd geconfigureerde provider of een gemanipuleerd verzoek.",
|
|
2124
|
+
"auditlog.action.state_mismatch": "De statusparameter in de callback kwam niet overeen met de in de sessie opgeslagen. Dit kan wijzen op een CSRF-poging of een verlopen loginsessie.",
|
|
2125
|
+
"auditlog.action.nonce_mismatch": "De nonce in het ID-token kwam niet overeen met de bij het inloggen gegenereerde. Dit kan wijzen op een token-replay-aanval.",
|
|
2126
|
+
"auditlog.action.token_exchange_failed": "De autorisatiecode kon niet worden uitgewisseld voor tokens. De OIDC-provider wees het verzoek af.",
|
|
2127
|
+
"auditlog.action.whitelist_rejected": "Het e-mailadres van de gebruiker staat niet op de whitelist. Toegang geweigerd.",
|
|
2128
|
+
"auditlog.action.email_not_verified": "De OIDC-provider heeft het e-mailadres van de gebruiker niet bevestigd als geverifieerd. Toegang geweigerd.",
|
|
2129
|
+
"auditlog.action.id_token_invalid": "Het ID-token is niet geslaagd voor handtekening-, issuer-, audience- of verlooptijdvalidatie. Toegang geweigerd.",
|
|
2130
|
+
"auth.page.authenticating.title": "Verifiëren...",
|
|
2131
|
+
"auth.page.authenticating.noscript.heading": "JavaScript vereist",
|
|
2132
|
+
"auth.page.authenticating.noscript.body": "JavaScript moet zijn ingeschakeld om de verificatie te voltooien.",
|
|
2133
|
+
"auth.page.error.title": "Verificatie mislukt",
|
|
2134
|
+
"auth.page.error.returnToLogin": "Terug naar inloggen",
|
|
2135
|
+
"user.missing_code": "Autorisatiecode is niet ontvangen van de OIDC-provider.",
|
|
2136
|
+
"user.invalid_state": "Statusparameter niet overeen. Start de inlogstroom opnieuw.",
|
|
2137
|
+
"user.signInError": "Verificatie mislukt. Probeer het opnieuw.",
|
|
2138
|
+
"settings.section": "OIDC",
|
|
2139
|
+
"settings.configuration": "Configuratie",
|
|
2140
|
+
"audit.login_failure": "Fout: {message}",
|
|
2141
|
+
"audit.roles_updated": "Rollen bijgewerkt naar: {roles}",
|
|
2142
|
+
"audit.user_created": "Toegewezen rollen: {roles}"
|
|
2143
|
+
};
|
|
2144
|
+
const __vite_glob_0_13 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
2145
|
+
__proto__: null,
|
|
2146
|
+
default: nl
|
|
2147
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
2148
|
+
const no = {
|
|
2149
|
+
"global.plugins.strapi-plugin-oidc": "OIDC-plugin",
|
|
2150
|
+
"page.title": "Konfigurer standard OIDC-roller og tilgangskontroller.",
|
|
2151
|
+
"roles.notes": "Velg standardrollen(e) som tildeles nye brukere ved første pålogging. Denne innstillingen påvirker ikke eksisterende brukere.",
|
|
2152
|
+
"page.save": "Lagre endringer",
|
|
2153
|
+
"page.save.success": "Innstillinger oppdatert",
|
|
2154
|
+
"page.save.error": "Oppdatering mislyktes.",
|
|
2155
|
+
"page.add": "Legg til",
|
|
2156
|
+
"page.cancel": "Avbryt",
|
|
2157
|
+
"common.remove": "Fjern {label}",
|
|
2158
|
+
"page.ok": "OK",
|
|
2159
|
+
"roles.title": "Standardrolle(r)",
|
|
2160
|
+
"roles.placeholder": "Velg standardrolle(r)",
|
|
2161
|
+
"whitelist.title": "Whitelist",
|
|
2162
|
+
"whitelist.error.unique": "E-postadressen er allerede registrert.",
|
|
2163
|
+
"whitelist.description": "Begrens OIDC-autentisering til bestemte e-postadresser. Brukere mottar roller fra standard OIDC-roltilordning eller sin OIDC-gruppe.",
|
|
2164
|
+
"alert.title.success": "Suksess",
|
|
2165
|
+
"alert.title.error": "Feil",
|
|
2166
|
+
"alert.title.info": "Info",
|
|
2167
|
+
"pagination.previous": "Gå til forrige side",
|
|
2168
|
+
"pagination.page": "Gå til side {page}",
|
|
2169
|
+
"pagination.next": "Gå til neste side",
|
|
2170
|
+
"whitelist.table.no": "Nr.",
|
|
2171
|
+
"whitelist.table.email": "E-post",
|
|
2172
|
+
"whitelist.table.created": "Opprettet",
|
|
2173
|
+
"whitelist.delete.title": "Bekreftelse",
|
|
2174
|
+
"whitelist.delete.description": "Er du sikker på at du vil slette:",
|
|
2175
|
+
"whitelist.delete.note": "Dette vil ikke slette brukerkontoen i Strapi.",
|
|
2176
|
+
"whitelist.toggle.enabled": "Aktivert",
|
|
2177
|
+
"whitelist.toggle.disabled": "Deaktivert",
|
|
2178
|
+
"whitelist.email.placeholder": "E-postadresse",
|
|
2179
|
+
"whitelist.table.empty": "Ingen e-postadresser",
|
|
2180
|
+
"whitelist.delete.label": "Slett",
|
|
2181
|
+
"page.title.oidc": "OIDC",
|
|
2182
|
+
"enforce.title": "Håndhev OIDC-pålogging",
|
|
2183
|
+
"enforce.toggle.enabled": "Aktivert",
|
|
2184
|
+
"enforce.toggle.disabled": "Deaktivert",
|
|
2185
|
+
"enforce.warning": "Sørg for at OIDC er konfigurert riktig før du lagrer endringer, du vil ikke kunne logge på normalt.",
|
|
2186
|
+
"enforce.config.info": "Håndheving kontrolleres av OIDC_ENFORCE-konfigurasjonsvariabelen og kan ikke endres her.",
|
|
2187
|
+
"login.settings.title": "Påloggingsinnstillinger",
|
|
2188
|
+
"login.sso": "Logg inn via SSO",
|
|
2189
|
+
"pagination.total": "{count, plural, one {# oppføring} other {# oppføringer}}",
|
|
2190
|
+
"whitelist.import": "Importer",
|
|
2191
|
+
"whitelist.export": "Eksporter",
|
|
2192
|
+
"whitelist.delete.all.label": "Slett alle",
|
|
2193
|
+
"whitelist.delete.all.title": "Slett alle oppføringer",
|
|
2194
|
+
"whitelist.delete.all.description": "Dette vil permanent fjerne alle {count, plural, one {# oppføring} other {# oppføringer}} fra whitelist. Ikke-lagrede endringer vil gå tapt.",
|
|
2195
|
+
"whitelist.import.error": "Ugyldig fil — forventet en JSON-matrise av objekter med et e-postfelt.",
|
|
2196
|
+
"whitelist.import.success": "{count, plural, one {# ny oppføring} other {# nye oppføringer}} importert.",
|
|
2197
|
+
"whitelist.import.none": "Ingen nye oppføringer — alle e-postadresser er allerede på whitelist.",
|
|
2198
|
+
"unsaved.title": "Ikke-lagrede endringer",
|
|
2199
|
+
"unsaved.description": "Du har ikke-lagrede endringer som vil gå tapt hvis du forlater. Vil du fortsette?",
|
|
2200
|
+
"unsaved.confirm": "Forlat",
|
|
2201
|
+
"unsaved.cancel": "Bli",
|
|
2202
|
+
"auditlog.title": "Revisjonslogger",
|
|
2203
|
+
"auditlog.export": "Last ned",
|
|
2204
|
+
"auditlog.table.timestamp": "Tidsstempel",
|
|
2205
|
+
"auditlog.table.action": "Handling",
|
|
2206
|
+
"auditlog.table.email": "E-post",
|
|
2207
|
+
"auditlog.table.ip": "IP",
|
|
2208
|
+
"auditlog.table.details": "Detaljer",
|
|
2209
|
+
"auditlog.table.empty": "Ingen revisjonsloggoppføringer",
|
|
2210
|
+
"auditlog.clear": "Slett logger",
|
|
2211
|
+
"auditlog.clear.title": "Slett alle logger",
|
|
2212
|
+
"auditlog.clear.description": "Dette vil slette alle {count, plural, one {# revisjonsloggoppføring} other {# revisjonsloggoppføringer}} permanent. Denne handlingen kan ikke angres.",
|
|
2213
|
+
"auditlog.clear.success": "Revisjonslogger slettet",
|
|
2214
|
+
"auditlog.clear.error": "Kunne ikke slette revisjonslogger",
|
|
2215
|
+
"auditlog.export.error": "Kunne ikke eksportere revisjonslogger",
|
|
2216
|
+
"auditlog.filters": "Filtre",
|
|
2217
|
+
"auditlog.filters.action": "Handling",
|
|
2218
|
+
"auditlog.filters.email": "E-post",
|
|
2219
|
+
"auditlog.filters.ip": "IP-adresse",
|
|
2220
|
+
"auditlog.filters.createdAt": "Dato",
|
|
2221
|
+
"auditlog.filters.clear": "Slett filtre",
|
|
2222
|
+
"auditlog.filters.empty": "Ingen oppføringer matcher de nåværende filtrene",
|
|
2223
|
+
"auditlog.calendar.prevMonth": "Forrige måned",
|
|
2224
|
+
"auditlog.calendar.nextMonth": "Neste måned",
|
|
2225
|
+
"auditlog.calendar.state.today": "i dag",
|
|
2226
|
+
"auditlog.calendar.state.selected": "valgt",
|
|
2227
|
+
"auditlog.calendar.state.alreadyAdded": "allerede lagt til",
|
|
2228
|
+
"auditlog.calendar.state.future": "utilgjengelig, fremtidig dato",
|
|
2229
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
2230
|
+
"auditlog.action.login_success": "Brukeren ble vellykket autentisert via OIDC og ble innvilget tilgang.",
|
|
2231
|
+
"auditlog.action.user_created": "En ny Strapi-admin-konto ble opprettet for denne brukeren ved deres første OIDC-pålogging.",
|
|
2232
|
+
"auditlog.action.logout": "Brukeren logget ut og deres OIDC-økt ble avsluttet.",
|
|
2233
|
+
"auditlog.action.session_expired": "OIDC-aksessokenet hadde utløpt på tidspunktet brukeren logget ut, så leverandørøkten kunne ikke avsluttes eksternt.",
|
|
2234
|
+
"auditlog.action.login_failure": "Det oppstod en uventet feil under OIDC-påloggingsflyten.",
|
|
2235
|
+
"auditlog.action.missing_code": "OIDC-callbacken ble mottatt uten en autorisasjonskode. Dette kan indikere en feilkonfigurert leverandør eller en manipulert forespørsel.",
|
|
2236
|
+
"auditlog.action.state_mismatch": "Tilstandsparameteren i callbacken samsvarte ikke med den som er lagret i økten. Dette kan indikere et CSRF-forsøk eller en utløpt påloggingsøkt.",
|
|
2237
|
+
"auditlog.action.nonce_mismatch": "Nonce i ID-tokenet samsvarte ikke med den som ble generert ved pålogging. Dette kan indikere et token-replay-angrep.",
|
|
2238
|
+
"auditlog.action.token_exchange_failed": "Autorisasjonskoden kunne ikke byttes mot tokens. OIDC-leverandøren avviste forespørselen.",
|
|
2239
|
+
"auditlog.action.whitelist_rejected": "Brukerens e-postadresse er ikke på whitelist. Tilgang ble nektet.",
|
|
2240
|
+
"auditlog.action.email_not_verified": "OIDC-leverandøren bekreftet ikke brukerens e-postadresse som verifisert. Tilgang ble nektet.",
|
|
2241
|
+
"auditlog.action.id_token_invalid": "ID-tokenet klarte ikke signatur-, utsteder-, målgruppe- eller utløpsvalidering. Tilgang ble nektet.",
|
|
2242
|
+
"auth.page.authenticating.title": "Autentiserer...",
|
|
2243
|
+
"auth.page.authenticating.noscript.heading": "JavaScript påkrevd",
|
|
2244
|
+
"auth.page.authenticating.noscript.body": "JavaScript må være aktivert for at autentiseringen skal fullføres.",
|
|
2245
|
+
"auth.page.error.title": "Autentisering mislyktes",
|
|
2246
|
+
"auth.page.error.returnToLogin": "Tilbake til pålogging",
|
|
2247
|
+
"user.missing_code": "Autorisasjonskode ble ikke mottatt fra OIDC-leverandøren.",
|
|
2248
|
+
"user.invalid_state": "TilstandsparameterMismatch. Start påloggingsflyten på nytt.",
|
|
2249
|
+
"user.signInError": "Autentisering mislyktes. Prøv igjen.",
|
|
2250
|
+
"settings.section": "OIDC",
|
|
2251
|
+
"settings.configuration": "Konfigurasjon",
|
|
2252
|
+
"audit.login_failure": "Feil: {message}",
|
|
2253
|
+
"audit.roles_updated": "Roller oppdatert til: {roles}",
|
|
2254
|
+
"audit.user_created": "Tildelte roller: {roles}"
|
|
2255
|
+
};
|
|
2256
|
+
const __vite_glob_0_14 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
2257
|
+
__proto__: null,
|
|
2258
|
+
default: no
|
|
2259
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
2260
|
+
const pl = {
|
|
2261
|
+
"global.plugins.strapi-plugin-oidc": "Wtyczka OIDC",
|
|
2262
|
+
"page.title": "Konfiguruj domyślne role OIDC i kontrolki dostępu.",
|
|
2263
|
+
"roles.notes": "Wybierz domyślną(e) rolę(e) przypisane nowym użytkownikom przy pierwszym logowaniu. To ustawienie nie ma wpływu na istniejących użytkowników.",
|
|
2264
|
+
"page.save": "Zapisz zmiany",
|
|
2265
|
+
"page.save.success": "Ustawienia zaktualizowane",
|
|
2266
|
+
"page.save.error": "Aktualizacja nieudana.",
|
|
2267
|
+
"page.add": "Dodaj",
|
|
2268
|
+
"page.cancel": "Anuluj",
|
|
2269
|
+
"common.remove": "Usuń {label}",
|
|
2270
|
+
"page.ok": "OK",
|
|
2271
|
+
"roles.title": "Domyślna(e) rola(e)",
|
|
2272
|
+
"roles.placeholder": "Wybierz domyślną(e) rolę(e)",
|
|
2273
|
+
"whitelist.title": "Biała lista",
|
|
2274
|
+
"whitelist.error.unique": "Adres e-mail jest już zarejestrowany.",
|
|
2275
|
+
"whitelist.description": "Ogranicz uwierzytelnianie OIDC do określonych adresów e-mail. Użytkownicy otrzymują role z domyślnego mapowania ról OIDC lub swojej grupy OIDC.",
|
|
2276
|
+
"alert.title.success": "Sukces",
|
|
2277
|
+
"alert.title.error": "Błąd",
|
|
2278
|
+
"alert.title.info": "Informacja",
|
|
2279
|
+
"pagination.previous": "Przejdź do poprzedniej strony",
|
|
2280
|
+
"pagination.page": "Przejdź do strony {page}",
|
|
2281
|
+
"pagination.next": "Przejdź do następnej strony",
|
|
2282
|
+
"whitelist.table.no": "Nr",
|
|
2283
|
+
"whitelist.table.email": "E-mail",
|
|
2284
|
+
"whitelist.table.created": "Utworzono",
|
|
2285
|
+
"whitelist.delete.title": "Potwierdzenie",
|
|
2286
|
+
"whitelist.delete.description": "Czy na pewno chcesz usunąć:",
|
|
2287
|
+
"whitelist.delete.note": "Nie spowoduje to usunięcia konta użytkownika w Strapi.",
|
|
2288
|
+
"whitelist.toggle.enabled": "Włączone",
|
|
2289
|
+
"whitelist.toggle.disabled": "Wyłączone",
|
|
2290
|
+
"whitelist.email.placeholder": "Adres e-mail",
|
|
2291
|
+
"whitelist.table.empty": "Brak adresów e-mail",
|
|
2292
|
+
"whitelist.delete.label": "Usuń",
|
|
2293
|
+
"page.title.oidc": "OIDC",
|
|
2294
|
+
"enforce.title": "Wymuszaj logowanie OIDC",
|
|
2295
|
+
"enforce.toggle.enabled": "Włączone",
|
|
2296
|
+
"enforce.toggle.disabled": "Wyłączone",
|
|
2297
|
+
"enforce.warning": "Upewnij się, że OIDC jest poprawnie skonfigurowany przed zapisaniem zmian, nie będziesz mógł normalnie się zalogować.",
|
|
2298
|
+
"enforce.config.info": "Wymuszanie jest kontrolowane przez zmienną konfiguracyjną OIDC_ENFORCE i nie można tego tutaj zmienić.",
|
|
2299
|
+
"login.settings.title": "Ustawienia logowania",
|
|
2300
|
+
"login.sso": "Zaloguj się przez SSO",
|
|
2301
|
+
"pagination.total": "{count, plural, one {# wpis} few {# wpisy} many {# wpisów} other {# wpisów}}",
|
|
2302
|
+
"whitelist.import": "Importuj",
|
|
2303
|
+
"whitelist.export": "Eksportuj",
|
|
2304
|
+
"whitelist.delete.all.label": "Usuń wszystko",
|
|
2305
|
+
"whitelist.delete.all.title": "Usuń wszystkie wpisy",
|
|
2306
|
+
"whitelist.delete.all.description": "To trwale usunie wszystkie {count, plural, one {# wpis} few {# wpisy} many {# wpisów} other {# wpisów}} z białej listy. Niezapisane zmiany zostaną utracone.",
|
|
2307
|
+
"whitelist.import.error": "Nieprawidłowy plik — oczekiwano tablicy JSON obiektów z polem e-mail.",
|
|
2308
|
+
"whitelist.import.success": "Zaimportowano {count, plural, one {# nowy wpis} few {# nowe wpisy} many {# nowych wpisów} other {# nowych wpisów}}.",
|
|
2309
|
+
"whitelist.import.none": "Brak nowych wpisów — wszystkie e-maile są już na białej liście.",
|
|
2310
|
+
"unsaved.title": "Niezapisane zmiany",
|
|
2311
|
+
"unsaved.description": "Masz niezapisane zmiany, które zostaną utracone, jeśli opuścisz stronę. Czy chcesz kontynuować?",
|
|
2312
|
+
"unsaved.confirm": "Opuść",
|
|
2313
|
+
"unsaved.cancel": "Zostań",
|
|
2314
|
+
"auditlog.title": "Dzienniki audytu",
|
|
2315
|
+
"auditlog.export": "Pobierz",
|
|
2316
|
+
"auditlog.table.timestamp": "Znacznik czasu",
|
|
2317
|
+
"auditlog.table.action": "Akcja",
|
|
2318
|
+
"auditlog.table.email": "E-mail",
|
|
2319
|
+
"auditlog.table.ip": "IP",
|
|
2320
|
+
"auditlog.table.details": "Szczegóły",
|
|
2321
|
+
"auditlog.table.empty": "Brak wpisów dziennika audytu",
|
|
2322
|
+
"auditlog.clear": "Wyczyść dzienniki",
|
|
2323
|
+
"auditlog.clear.title": "Wyczyść wszystkie dzienniki",
|
|
2324
|
+
"auditlog.clear.description": "To trwale usunie wszystkie {count, plural, one {# wpis dziennika audytu} few {# wpisy dziennika audytu} many {# wpisów dziennika audytu} other {# wpisów dziennika audytu}}. Ta akcja nie może być cofnięta.",
|
|
2325
|
+
"auditlog.clear.success": "Dzienniki audytu wyczyszczone",
|
|
2326
|
+
"auditlog.clear.error": "Nie udało się wyczyścić dzienników audytu",
|
|
2327
|
+
"auditlog.export.error": "Nie udało się wyeksportować dzienników audytu",
|
|
2328
|
+
"auditlog.filters": "Filtry",
|
|
2329
|
+
"auditlog.filters.action": "Akcja",
|
|
2330
|
+
"auditlog.filters.email": "E-mail",
|
|
2331
|
+
"auditlog.filters.ip": "Adres IP",
|
|
2332
|
+
"auditlog.filters.createdAt": "Data",
|
|
2333
|
+
"auditlog.filters.clear": "Wyczyść filtry",
|
|
2334
|
+
"auditlog.filters.empty": "Żadne wpisy nie odpowiadają bieżącym filtrom",
|
|
2335
|
+
"auditlog.calendar.prevMonth": "Poprzedni miesiąc",
|
|
2336
|
+
"auditlog.calendar.nextMonth": "Następny miesiąc",
|
|
2337
|
+
"auditlog.calendar.state.today": "dzisiaj",
|
|
2338
|
+
"auditlog.calendar.state.selected": "wybrano",
|
|
2339
|
+
"auditlog.calendar.state.alreadyAdded": "już dodano",
|
|
2340
|
+
"auditlog.calendar.state.future": "niedostępna, przyszła data",
|
|
2341
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
2342
|
+
"auditlog.action.login_success": "Użytkownik został pomyślnie uwierzytelniony przez OIDC i otrzymał dostęp.",
|
|
2343
|
+
"auditlog.action.user_created": "Nowe konto administratora Strapi zostało utworzone dla tego użytkownika podczas jego pierwszego logowania OIDC.",
|
|
2344
|
+
"auditlog.action.logout": "Użytkownik wylogował się, a jego sesja OIDC została zakończona.",
|
|
2345
|
+
"auditlog.action.session_expired": "Token dostępu OIDC wygasł w momencie wylogowania użytkownika, więc sesja dostawcy nie mogła zostać zakończona zdalnie.",
|
|
2346
|
+
"auditlog.action.login_failure": "Wystąpił nieoczekiwany błąd podczas przepływu logowania OIDC.",
|
|
2347
|
+
"auditlog.action.missing_code": "Wywołanie zwrotne OIDC zostało odebrane bez kodu autoryzacji. Może to wskazywać na błędnie skonfigurowanego dostawcę lub zmodyfikowane żądanie.",
|
|
2348
|
+
"auditlog.action.state_mismatch": "Parametr stanu w wywołaniu zwrotnym nie odpowiadał temu przechowywanemu w sesji. Może to wskazywać na próbę CSRF lub wygasłą sesję logowania.",
|
|
2349
|
+
"auditlog.action.nonce_mismatch": "Nonce w tokenie ID nie odpowiadało temu wygenerowanemu podczas logowania. Może to wskazywać na atak typu replay tokena.",
|
|
2350
|
+
"auditlog.action.token_exchange_failed": "Kod autoryzacji nie mógł zostać wymieniony na tokeny. Dostawca OIDC odrzucił żądanie.",
|
|
2351
|
+
"auditlog.action.whitelist_rejected": "Adres e-mail użytkownika nie znajduje się na białej liście. Odmówiono dostępu.",
|
|
2352
|
+
"auditlog.action.email_not_verified": "Dostawca OIDC nie potwierdził adresu e-mail użytkownika jako zweryfikowanego. Odmówiono dostępu.",
|
|
2353
|
+
"auditlog.action.id_token_invalid": "Token ID nie przeszedł weryfikacji podpisu, wystawcy, odbiorcy lub wygaśnięcia. Odmówiono dostępu.",
|
|
2354
|
+
"auth.page.authenticating.title": "Uwierzytelnianie...",
|
|
2355
|
+
"auth.page.authenticating.noscript.heading": "Wymagany JavaScript",
|
|
2356
|
+
"auth.page.authenticating.noscript.body": "JavaScript musi być włączony, aby uwierzytelnianie zostało zakończone.",
|
|
2357
|
+
"auth.page.error.title": "Uwierzytelnianie nie powiodło się",
|
|
2358
|
+
"auth.page.error.returnToLogin": "Powrót do logowania",
|
|
2359
|
+
"user.missing_code": "Nie otrzymano kodu autoryzacji od dostawcy OIDC.",
|
|
2360
|
+
"user.invalid_state": "Niezgodność parametru stanu. Uruchom ponownie przepływ logowania.",
|
|
2361
|
+
"user.signInError": "Uwierzytelnianie nie powiodło się. Spróbuj ponownie.",
|
|
2362
|
+
"settings.section": "OIDC",
|
|
2363
|
+
"settings.configuration": "Konfiguracja",
|
|
2364
|
+
"audit.login_failure": "Błąd: {message}",
|
|
2365
|
+
"audit.roles_updated": "Role zaktualizowane do: {roles}",
|
|
2366
|
+
"audit.user_created": "Przypisane role: {roles}"
|
|
2367
|
+
};
|
|
2368
|
+
const __vite_glob_0_15 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
2369
|
+
__proto__: null,
|
|
2370
|
+
default: pl
|
|
2371
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
2372
|
+
const ptBR = {
|
|
2373
|
+
"global.plugins.strapi-plugin-oidc": "Plugin OIDC",
|
|
2374
|
+
"page.title": "Configure as funções padrão do OIDC e os controles de acesso.",
|
|
2375
|
+
"roles.notes": "Selecione a(s) função(ões) padrão atribuída(s) aos novos usuários em seu primeiro login. Esta configuração não afeta os usuários existentes.",
|
|
2376
|
+
"page.save": "Salvar alterações",
|
|
2377
|
+
"page.save.success": "Configurações atualizadas",
|
|
2378
|
+
"page.save.error": "Falha na atualização.",
|
|
2379
|
+
"page.add": "Adicionar",
|
|
2380
|
+
"page.cancel": "Cancelar",
|
|
2381
|
+
"common.remove": "Remover {label}",
|
|
2382
|
+
"page.ok": "OK",
|
|
2383
|
+
"roles.title": "Função(ões) padrão",
|
|
2384
|
+
"roles.placeholder": "Selecione a(s) função(ões) padrão",
|
|
2385
|
+
"whitelist.title": "Lista de permissões",
|
|
2386
|
+
"whitelist.error.unique": "Endereço de e-mail já registrado.",
|
|
2387
|
+
"whitelist.description": "Restrinja a autenticação OIDC a endereços de e-mail específicos. Os usuários recebem funções do mapeamento de funções OIDC padrão ou do grupo OIDC deles.",
|
|
2388
|
+
"alert.title.success": "Sucesso",
|
|
2389
|
+
"alert.title.error": "Erro",
|
|
2390
|
+
"alert.title.info": "Info",
|
|
2391
|
+
"pagination.previous": "Ir para a página anterior",
|
|
2392
|
+
"pagination.page": "Ir para a página {page}",
|
|
2393
|
+
"pagination.next": "Ir para a próxima página",
|
|
2394
|
+
"whitelist.table.no": "Nº",
|
|
2395
|
+
"whitelist.table.email": "E-mail",
|
|
2396
|
+
"whitelist.table.created": "Criado em",
|
|
2397
|
+
"whitelist.delete.title": "Confirmação",
|
|
2398
|
+
"whitelist.delete.description": "Tem certeza de que deseja excluir:",
|
|
2399
|
+
"whitelist.delete.note": "Isso não excluirá a conta do usuário no Strapi.",
|
|
2400
|
+
"whitelist.toggle.enabled": "Habilitado",
|
|
2401
|
+
"whitelist.toggle.disabled": "Desabilitado",
|
|
2402
|
+
"whitelist.email.placeholder": "Endereço de e-mail",
|
|
2403
|
+
"whitelist.table.empty": "Nenhum endereço de e-mail",
|
|
2404
|
+
"whitelist.delete.label": "Excluir",
|
|
2405
|
+
"page.title.oidc": "OIDC",
|
|
2406
|
+
"enforce.title": "Impor login OIDC",
|
|
2407
|
+
"enforce.toggle.enabled": "Habilitado",
|
|
2408
|
+
"enforce.toggle.disabled": "Desabilitado",
|
|
2409
|
+
"enforce.warning": "Certifique-se de que o OIDC esteja configurado corretamente antes de salvar as alterações; você não poderá fazer login normalmente.",
|
|
2410
|
+
"enforce.config.info": "A imposição é controlada pela variável de configuração OIDC_ENFORCE e não pode ser alterada aqui.",
|
|
2411
|
+
"login.settings.title": "Configurações de login",
|
|
2412
|
+
"login.sso": "Login via SSO",
|
|
2413
|
+
"pagination.total": "{count, plural, one {# entrada} other {# entradas}}",
|
|
2414
|
+
"whitelist.import": "Importar",
|
|
2415
|
+
"whitelist.export": "Exportar",
|
|
2416
|
+
"whitelist.delete.all.label": "Excluir tudo",
|
|
2417
|
+
"whitelist.delete.all.title": "Excluir todas as entradas",
|
|
2418
|
+
"whitelist.delete.all.description": "Isso removerá permanentemente todas as {count, plural, one {# entrada} other {# entradas}} da lista de permissões. As alterações não salvas serão perdidas.",
|
|
2419
|
+
"whitelist.import.error": "Arquivo inválido — esperava um array JSON de objetos com um campo de e-mail.",
|
|
2420
|
+
"whitelist.import.success": "{count, plural, one {# nova entrada} other {# novas entradas}} importada(s).",
|
|
2421
|
+
"whitelist.import.none": "Nenhuma nova entrada — todos os e-mails já estão na lista de permissões.",
|
|
2422
|
+
"unsaved.title": "Alterações não salvas",
|
|
2423
|
+
"unsaved.description": "Você tem alterações não salvas que serão perdidas se sair. Deseja continuar?",
|
|
2424
|
+
"unsaved.confirm": "Sair",
|
|
2425
|
+
"unsaved.cancel": "Ficar",
|
|
2426
|
+
"auditlog.title": "Logs de auditoria",
|
|
2427
|
+
"auditlog.export": "Baixar",
|
|
2428
|
+
"auditlog.table.timestamp": "Carimbo de data/hora",
|
|
2429
|
+
"auditlog.table.action": "Ação",
|
|
2430
|
+
"auditlog.table.email": "E-mail",
|
|
2431
|
+
"auditlog.table.ip": "IP",
|
|
2432
|
+
"auditlog.table.details": "Detalhes",
|
|
2433
|
+
"auditlog.table.empty": "Nenhuma entrada de log de auditoria",
|
|
2434
|
+
"auditlog.clear": "Limpar logs",
|
|
2435
|
+
"auditlog.clear.title": "Limpar todos os logs",
|
|
2436
|
+
"auditlog.clear.description": "Isso excluirá permanentemente todas as {count, plural, one {# entrada de log de auditoria} other {# entradas de log de auditoria}}. Esta ação não pode ser desfeita.",
|
|
2437
|
+
"auditlog.clear.success": "Logs de auditoria limpos",
|
|
2438
|
+
"auditlog.clear.error": "Falha ao limpar os logs de auditoria",
|
|
2439
|
+
"auditlog.export.error": "Falha ao exportar os logs de auditoria",
|
|
2440
|
+
"auditlog.filters": "Filtros",
|
|
2441
|
+
"auditlog.filters.action": "Ação",
|
|
2442
|
+
"auditlog.filters.email": "E-mail",
|
|
2443
|
+
"auditlog.filters.ip": "Endereço IP",
|
|
2444
|
+
"auditlog.filters.createdAt": "Data",
|
|
2445
|
+
"auditlog.filters.clear": "Limpar filtros",
|
|
2446
|
+
"auditlog.filters.empty": "Nenhuma entrada corresponde aos filtros atuais",
|
|
2447
|
+
"auditlog.calendar.prevMonth": "Mês anterior",
|
|
2448
|
+
"auditlog.calendar.nextMonth": "Próximo mês",
|
|
2449
|
+
"auditlog.calendar.state.today": "hoje",
|
|
2450
|
+
"auditlog.calendar.state.selected": "selecionado",
|
|
2451
|
+
"auditlog.calendar.state.alreadyAdded": "já adicionado",
|
|
2452
|
+
"auditlog.calendar.state.future": "indisponível, data futura",
|
|
2453
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
2454
|
+
"auditlog.action.login_success": "O usuário foi autenticado com sucesso via OIDC e recebeu acesso.",
|
|
2455
|
+
"auditlog.action.user_created": "Uma nova conta de administrador Strapi foi criada para este usuário em seu primeiro login OIDC.",
|
|
2456
|
+
"auditlog.action.logout": "O usuário fez logout e sua sessão OIDC foi encerrada.",
|
|
2457
|
+
"auditlog.action.session_expired": "O token de acesso OIDC havia expirado no momento em que o usuário fez logout, então a sessão do provedor não pôde ser encerrada remotamente.",
|
|
2458
|
+
"auditlog.action.login_failure": "Ocorreu um erro inesperado durante o fluxo de login OIDC.",
|
|
2459
|
+
"auditlog.action.missing_code": "O callback OIDC foi recebido sem um código de autorização. Isso pode indicar um provedor mal configurado ou uma solicitação adulterada.",
|
|
2460
|
+
"auditlog.action.state_mismatch": "O parâmetro de estado no callback não correspondeu ao armazenado na sessão. Isso pode indicar uma tentativa de CSRF ou uma sessão de login expirada.",
|
|
2461
|
+
"auditlog.action.nonce_mismatch": "O nonce no token de ID não correspondeu ao gerado no login. Isso pode indicar um ataque de replay de token.",
|
|
2462
|
+
"auditlog.action.token_exchange_failed": "O código de autorização não pôde ser trocado por tokens. O provedor OIDC rejeitou a solicitação.",
|
|
2463
|
+
"auditlog.action.whitelist_rejected": "O endereço de e-mail do usuário não está na lista de permissões. Acesso negado.",
|
|
2464
|
+
"auditlog.action.email_not_verified": "O provedor OIDC não confirmou o endereço de e-mail do usuário como verificado. Acesso negado.",
|
|
2465
|
+
"auditlog.action.id_token_invalid": "O token de ID falhou na validação de assinatura, emissor, audiência ou expiração. Acesso negado.",
|
|
2466
|
+
"auth.page.authenticating.title": "Autenticando...",
|
|
2467
|
+
"auth.page.authenticating.noscript.heading": "JavaScript necessário",
|
|
2468
|
+
"auth.page.authenticating.noscript.body": "JavaScript deve estar habilitado para a autenticação ser concluída.",
|
|
2469
|
+
"auth.page.error.title": "Falha na autenticação",
|
|
2470
|
+
"auth.page.error.returnToLogin": "Voltar para login",
|
|
2471
|
+
"user.missing_code": "Código de autorização não foi recebido do provedor OIDC.",
|
|
2472
|
+
"user.invalid_state": "Parâmetro de estado inválido. Reinicie o fluxo de login.",
|
|
2473
|
+
"user.signInError": "Falha na autenticação. Tente novamente.",
|
|
2474
|
+
"settings.section": "OIDC",
|
|
2475
|
+
"settings.configuration": "Configuração",
|
|
2476
|
+
"audit.login_failure": "Erro: {message}",
|
|
2477
|
+
"audit.roles_updated": "Funções atualizadas para: {roles}",
|
|
2478
|
+
"audit.user_created": "Funções atribuídas: {roles}"
|
|
2479
|
+
};
|
|
2480
|
+
const __vite_glob_0_16 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
2481
|
+
__proto__: null,
|
|
2482
|
+
default: ptBR
|
|
2483
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
2484
|
+
const pt = {
|
|
2485
|
+
"global.plugins.strapi-plugin-oidc": "Plugin OIDC",
|
|
2486
|
+
"page.title": "Configure as funções predefinidas do OIDC e os controlos de acesso.",
|
|
2487
|
+
"roles.notes": "Selecione a(s) função(ões) predefinida(s) atribuída(s) aos novos utilizadores no primeiro início de sessão. Esta definição não afeta os utilizadores existentes.",
|
|
2488
|
+
"page.save": "Guardar alterações",
|
|
2489
|
+
"page.save.success": "Definições atualizadas",
|
|
2490
|
+
"page.save.error": "Falha na atualização.",
|
|
2491
|
+
"page.add": "Adicionar",
|
|
2492
|
+
"page.cancel": "Cancelar",
|
|
2493
|
+
"common.remove": "Remover {label}",
|
|
2494
|
+
"page.ok": "OK",
|
|
2495
|
+
"roles.title": "Função(ões) predefinida(s)",
|
|
2496
|
+
"roles.placeholder": "Selecionar função(ões) predefinida(s)",
|
|
2497
|
+
"whitelist.title": "Lista branca",
|
|
2498
|
+
"whitelist.error.unique": "Endereço de e-mail já registado.",
|
|
2499
|
+
"whitelist.description": "Restrinja a autenticação OIDC a endereços de e-mail específicos. Os utilizadores recebem funções do mapeamento de funções OIDC predefinido ou do grupo OIDC deles.",
|
|
2500
|
+
"alert.title.success": "Sucesso",
|
|
2501
|
+
"alert.title.error": "Erro",
|
|
2502
|
+
"alert.title.info": "Info",
|
|
2503
|
+
"pagination.previous": "Ir para a página anterior",
|
|
2504
|
+
"pagination.page": "Ir para a página {page}",
|
|
2505
|
+
"pagination.next": "Ir para a página seguinte",
|
|
2506
|
+
"whitelist.table.no": "N.º",
|
|
2507
|
+
"whitelist.table.email": "E-mail",
|
|
2508
|
+
"whitelist.table.created": "Criado em",
|
|
2509
|
+
"whitelist.delete.title": "Confirmação",
|
|
2510
|
+
"whitelist.delete.description": "Tem a certeza de que deseja eliminar:",
|
|
2511
|
+
"whitelist.delete.note": "Isto não eliminará a conta de utilizador no Strapi.",
|
|
2512
|
+
"whitelist.toggle.enabled": "Ativado",
|
|
2513
|
+
"whitelist.toggle.disabled": "Desativado",
|
|
2514
|
+
"whitelist.email.placeholder": "Endereço de e-mail",
|
|
2515
|
+
"whitelist.table.empty": "Nenhum endereço de e-mail",
|
|
2516
|
+
"whitelist.delete.label": "Eliminar",
|
|
2517
|
+
"page.title.oidc": "OIDC",
|
|
2518
|
+
"enforce.title": "Impor início de sessão OIDC",
|
|
2519
|
+
"enforce.toggle.enabled": "Ativado",
|
|
2520
|
+
"enforce.toggle.disabled": "Desativado",
|
|
2521
|
+
"enforce.warning": "Certifique-se de que o OIDC está configurado corretamente antes de guardar as alterações; não poderá iniciar sessão normalmente.",
|
|
2522
|
+
"enforce.config.info": "A imposição é controlada pela variável de configuração OIDC_ENFORCE e não pode ser alterada aqui.",
|
|
2523
|
+
"login.settings.title": "Definições de início de sessão",
|
|
2524
|
+
"login.sso": "Iniciar sessão via SSO",
|
|
2525
|
+
"pagination.total": "{count, plural, one {# entrada} other {# entradas}}",
|
|
2526
|
+
"whitelist.import": "Importar",
|
|
2527
|
+
"whitelist.export": "Exportar",
|
|
2528
|
+
"whitelist.delete.all.label": "Eliminar tudo",
|
|
2529
|
+
"whitelist.delete.all.title": "Eliminar todas as entradas",
|
|
2530
|
+
"whitelist.delete.all.description": "Isto removerá permanentemente todas as {count, plural, one {# entrada} other {# entradas}} da lista branca. As alterações não guardadas serão perdidas.",
|
|
2531
|
+
"whitelist.import.error": "Ficheiro inválido — esperava uma matriz JSON de objetos com um campo de e-mail.",
|
|
2532
|
+
"whitelist.import.success": "{count, plural, one {# nova entrada} other {# novas entradas}} importada(s).",
|
|
2533
|
+
"whitelist.import.none": "Nenhuma nova entrada — todos os e-mails já estão na lista branca.",
|
|
2534
|
+
"unsaved.title": "Alterações não guardadas",
|
|
2535
|
+
"unsaved.description": "Tem alterações não guardadas que serão perdidas se sair. Deseja continuar?",
|
|
2536
|
+
"unsaved.confirm": "Sair",
|
|
2537
|
+
"unsaved.cancel": "Ficar",
|
|
2538
|
+
"auditlog.title": "Registos de auditoria",
|
|
2539
|
+
"auditlog.export": "Descarregar",
|
|
2540
|
+
"auditlog.table.timestamp": "Carimbo de data/hora",
|
|
2541
|
+
"auditlog.table.action": "Ação",
|
|
2542
|
+
"auditlog.table.email": "E-mail",
|
|
2543
|
+
"auditlog.table.ip": "IP",
|
|
2544
|
+
"auditlog.table.details": "Detalhes",
|
|
2545
|
+
"auditlog.table.empty": "Nenhuma entrada de registo de auditoria",
|
|
2546
|
+
"auditlog.clear": "Limpar registos",
|
|
2547
|
+
"auditlog.clear.title": "Limpar todos os registos",
|
|
2548
|
+
"auditlog.clear.description": "Isto eliminará permanentemente todas as {count, plural, one {# entrada de registo de auditoria} other {# entradas de registo de auditoria}}. Esta ação não pode ser desfeita.",
|
|
2549
|
+
"auditlog.clear.success": "Registos de auditoria limpos",
|
|
2550
|
+
"auditlog.clear.error": "Falha ao limpar os registos de auditoria",
|
|
2551
|
+
"auditlog.export.error": "Falha ao exportar os registos de auditoria",
|
|
2552
|
+
"auditlog.filters": "Filtros",
|
|
2553
|
+
"auditlog.filters.action": "Ação",
|
|
2554
|
+
"auditlog.filters.email": "E-mail",
|
|
2555
|
+
"auditlog.filters.ip": "Endereço IP",
|
|
2556
|
+
"auditlog.filters.createdAt": "Data",
|
|
2557
|
+
"auditlog.filters.clear": "Limpar filtros",
|
|
2558
|
+
"auditlog.filters.empty": "Nenhuma entrada corresponde aos filtros atuais",
|
|
2559
|
+
"auditlog.calendar.prevMonth": "Mês anterior",
|
|
2560
|
+
"auditlog.calendar.nextMonth": "Mês seguinte",
|
|
2561
|
+
"auditlog.calendar.state.today": "hoje",
|
|
2562
|
+
"auditlog.calendar.state.selected": "selecionado",
|
|
2563
|
+
"auditlog.calendar.state.alreadyAdded": "já adicionado",
|
|
2564
|
+
"auditlog.calendar.state.future": "indisponível, data futura",
|
|
2565
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
2566
|
+
"auditlog.action.login_success": "O utilizador foi autenticado com sucesso via OIDC e recebeu acesso.",
|
|
2567
|
+
"auditlog.action.user_created": "Uma nova conta de administrador Strapi foi criada para este utilizador no primeiro início de sessão OIDC.",
|
|
2568
|
+
"auditlog.action.logout": "O utilizador terminou a sessão e a sessão OIDC foi encerrada.",
|
|
2569
|
+
"auditlog.action.session_expired": "O token de acesso OIDC tinha expirado no momento em que o utilizador terminou a sessão, pelo que a sessão do fornecedor não pôde ser encerrada remotamente.",
|
|
2570
|
+
"auditlog.action.login_failure": "Ocorreu um erro inesperado durante o fluxo de início de sessão OIDC.",
|
|
2571
|
+
"auditlog.action.missing_code": "O callback OIDC foi recebido sem um código de autorização. Isto pode indicar um fornecedor mal configurado ou um pedido adulterado.",
|
|
2572
|
+
"auditlog.action.state_mismatch": "O parâmetro de estado no callback não correspondeu ao armazenado na sessão. Isto pode indicar uma tentativa de CSRF ou uma sessão de início de sessão expirada.",
|
|
2573
|
+
"auditlog.action.nonce_mismatch": "O nonce no token de ID não correspondeu ao gerado no início de sessão. Isto pode indicar um ataque de replay de token.",
|
|
2574
|
+
"auditlog.action.token_exchange_failed": "O código de autorização não pôde ser trocado por tokens. O fornecedor OIDC rejeitou o pedido.",
|
|
2575
|
+
"auditlog.action.whitelist_rejected": "O endereço de e-mail do utilizador não está na lista branca. Acesso negado.",
|
|
2576
|
+
"auditlog.action.email_not_verified": "O fornecedor OIDC não confirmou o endereço de e-mail do utilizador como verificado. Acesso negado.",
|
|
2577
|
+
"auditlog.action.id_token_invalid": "O token de ID falhou na validação de assinatura, emissor, audiência ou expiração. Acesso negado.",
|
|
2578
|
+
"auth.page.authenticating.title": "A autenticar...",
|
|
2579
|
+
"auth.page.authenticating.noscript.heading": "JavaScript necessário",
|
|
2580
|
+
"auth.page.authenticating.noscript.body": "JavaScript deve estar ativado para a autenticação ser concluída.",
|
|
2581
|
+
"auth.page.error.title": "Falha na autenticação",
|
|
2582
|
+
"auth.page.error.returnToLogin": "Voltar ao início de sessão",
|
|
2583
|
+
"user.missing_code": "Código de autorização não foi recebido do fornecedor OIDC.",
|
|
2584
|
+
"user.invalid_state": "Parâmetro de estado inválido. Reinicie o fluxo de início de sessão.",
|
|
2585
|
+
"user.signInError": "Falha na autenticação. Tente novamente.",
|
|
2586
|
+
"settings.section": "OIDC",
|
|
2587
|
+
"settings.configuration": "Configuração",
|
|
2588
|
+
"audit.login_failure": "Erro: {message}",
|
|
2589
|
+
"audit.roles_updated": "Funções atualizadas para: {roles}",
|
|
2590
|
+
"audit.user_created": "Funções atribuídas: {roles}"
|
|
2591
|
+
};
|
|
2592
|
+
const __vite_glob_0_17 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
2593
|
+
__proto__: null,
|
|
2594
|
+
default: pt
|
|
2595
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
2596
|
+
const ru = {
|
|
2597
|
+
"global.plugins.strapi-plugin-oidc": "Плагин OIDC",
|
|
2598
|
+
"page.title": "Настройте роли OIDC по умолчанию и элементы управления доступом.",
|
|
2599
|
+
"roles.notes": "Выберите роль (роли) по умолчанию, назначаемую новым пользователям при первом входе. Этот параметр не влияет на существующих пользователей.",
|
|
2600
|
+
"page.save": "Сохранить изменения",
|
|
2601
|
+
"page.save.success": "Настройки обновлены",
|
|
2602
|
+
"page.save.error": "Ошибка обновления.",
|
|
2603
|
+
"page.add": "Добавить",
|
|
2604
|
+
"page.cancel": "Отмена",
|
|
2605
|
+
"common.remove": "Удалить {label}",
|
|
2606
|
+
"page.ok": "ОК",
|
|
2607
|
+
"roles.title": "Роль(и) по умолчанию",
|
|
2608
|
+
"roles.placeholder": "Выберите роль(и) по умолчанию",
|
|
2609
|
+
"whitelist.title": "Белый список",
|
|
2610
|
+
"whitelist.error.unique": "Адрес электронной почты уже зарегистрирован.",
|
|
2611
|
+
"whitelist.description": "Ограничьте аутентификацию OIDC конкретными адресами электронной почты. Пользователи получают роли из сопоставления ролей OIDC по умолчанию или из своей группы OIDC.",
|
|
2612
|
+
"alert.title.success": "Успех",
|
|
2613
|
+
"alert.title.error": "Ошибка",
|
|
2614
|
+
"alert.title.info": "Информация",
|
|
2615
|
+
"pagination.previous": "Перейти на предыдущую страницу",
|
|
2616
|
+
"pagination.page": "Перейти на страницу {page}",
|
|
2617
|
+
"pagination.next": "Перейти на следующую страницу",
|
|
2618
|
+
"whitelist.table.no": "№",
|
|
2619
|
+
"whitelist.table.email": "Электронная почта",
|
|
2620
|
+
"whitelist.table.created": "Создано",
|
|
2621
|
+
"whitelist.delete.title": "Подтверждение",
|
|
2622
|
+
"whitelist.delete.description": "Вы уверены, что хотите удалить:",
|
|
2623
|
+
"whitelist.delete.note": "Это не приведет к удалению учетной записи пользователя в Strapi.",
|
|
2624
|
+
"whitelist.toggle.enabled": "Включено",
|
|
2625
|
+
"whitelist.toggle.disabled": "Отключено",
|
|
2626
|
+
"whitelist.email.placeholder": "Адрес электронной почты",
|
|
2627
|
+
"whitelist.table.empty": "Нет адресов электронной почты",
|
|
2628
|
+
"whitelist.delete.label": "Удалить",
|
|
2629
|
+
"page.title.oidc": "OIDC",
|
|
2630
|
+
"enforce.title": "Обязательный вход через OIDC",
|
|
2631
|
+
"enforce.toggle.enabled": "Включено",
|
|
2632
|
+
"enforce.toggle.disabled": "Отключено",
|
|
2633
|
+
"enforce.warning": "Убедитесь, что OIDC настроен правильно, перед сохранением изменений, иначе вы не сможете войти обычным способом.",
|
|
2634
|
+
"enforce.config.info": "Принудительное применение контролируется переменной конфигурации OIDC_ENFORCE и не может быть изменено здесь.",
|
|
2635
|
+
"login.settings.title": "Настройки входа",
|
|
2636
|
+
"login.sso": "Вход через SSO",
|
|
2637
|
+
"pagination.total": "{count, plural, one {# запись} few {# записи} many {# записей} other {# записей}}",
|
|
2638
|
+
"whitelist.import": "Импорт",
|
|
2639
|
+
"whitelist.export": "Экспорт",
|
|
2640
|
+
"whitelist.delete.all.label": "Удалить все",
|
|
2641
|
+
"whitelist.delete.all.title": "Удалить все записи",
|
|
2642
|
+
"whitelist.delete.all.description": "Это навсегда удалит все {count, plural, one {# запись} few {# записи} many {# записей} other {# записей}} из белого списка. Несохраненные изменения будут потеряны.",
|
|
2643
|
+
"whitelist.import.error": "Неверный файл — ожидался массив JSON объектов с полем электронной почты.",
|
|
2644
|
+
"whitelist.import.success": "Импортировано {count, plural, one {# новая запись} few {# новые записи} many {# новых записей} other {# новых записей}}.",
|
|
2645
|
+
"whitelist.import.none": "Нет новых записей — все электронные письма уже есть в белом списке.",
|
|
2646
|
+
"unsaved.title": "Несохраненные изменения",
|
|
2647
|
+
"unsaved.description": "У вас есть несохраненные изменения, которые будут потеряны при выходе. Хотите продолжить?",
|
|
2648
|
+
"unsaved.confirm": "Выйти",
|
|
2649
|
+
"unsaved.cancel": "Остаться",
|
|
2650
|
+
"auditlog.title": "Журналы аудита",
|
|
2651
|
+
"auditlog.export": "Скачать",
|
|
2652
|
+
"auditlog.table.timestamp": "Временная метка",
|
|
2653
|
+
"auditlog.table.action": "Действие",
|
|
2654
|
+
"auditlog.table.email": "Электронная почта",
|
|
2655
|
+
"auditlog.table.ip": "IP",
|
|
2656
|
+
"auditlog.table.details": "Подробности",
|
|
2657
|
+
"auditlog.table.empty": "Нет записей в журнале аудита",
|
|
2658
|
+
"auditlog.clear": "Очистить журналы",
|
|
2659
|
+
"auditlog.clear.title": "Очистить все журналы",
|
|
2660
|
+
"auditlog.clear.description": "Это навсегда удалит все {count, plural, one {# запись журнала аудита} few {# записи журнала аудита} many {# записей журнала аудита} other {# записей журнала аудита}}. Это действие нельзя отменить.",
|
|
2661
|
+
"auditlog.clear.success": "Журналы аудита очищены",
|
|
2662
|
+
"auditlog.clear.error": "Не удалось очистить журналы аудита",
|
|
2663
|
+
"auditlog.export.error": "Не удалось экспортировать журналы аудита",
|
|
2664
|
+
"auditlog.filters": "Фильтры",
|
|
2665
|
+
"auditlog.filters.action": "Действие",
|
|
2666
|
+
"auditlog.filters.email": "Электронная почта",
|
|
2667
|
+
"auditlog.filters.ip": "IP-адрес",
|
|
2668
|
+
"auditlog.filters.createdAt": "Дата",
|
|
2669
|
+
"auditlog.filters.clear": "Очистить фильтры",
|
|
2670
|
+
"auditlog.filters.empty": "Нет записей, соответствующих текущим фильтрам",
|
|
2671
|
+
"auditlog.calendar.prevMonth": "Предыдущий месяц",
|
|
2672
|
+
"auditlog.calendar.nextMonth": "Следующий месяц",
|
|
2673
|
+
"auditlog.calendar.state.today": "сегодня",
|
|
2674
|
+
"auditlog.calendar.state.selected": "выбрано",
|
|
2675
|
+
"auditlog.calendar.state.alreadyAdded": "уже добавлено",
|
|
2676
|
+
"auditlog.calendar.state.future": "недоступно, будущая дата",
|
|
2677
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
2678
|
+
"auditlog.action.login_success": "Пользователь успешно прошел аутентификацию через OIDC и получил доступ.",
|
|
2679
|
+
"auditlog.action.user_created": "Новая учетная запись администратора Strapi была создана для этого пользователя при его первом входе через OIDC.",
|
|
2680
|
+
"auditlog.action.logout": "Пользователь вышел из системы, и его сеанс OIDC был завершен.",
|
|
2681
|
+
"auditlog.action.session_expired": "Срок действия токена доступа OIDC истек на момент выхода пользователя из системы, поэтому сеанс провайдера не мог быть завершен удаленно.",
|
|
2682
|
+
"auditlog.action.login_failure": "Во время потока входа в OIDC произошла непредвиденная ошибка.",
|
|
2683
|
+
"auditlog.action.missing_code": "Обратный вызов OIDC был получен без кода авторизации. Это может указывать на неправильно настроенного провайдера или поддельный запрос.",
|
|
2684
|
+
"auditlog.action.state_mismatch": "Параметр состояния в обратном вызове не соответствовал сохраненному в сеансе. Это может указывать на попытку CSRF или истекший сеанс входа.",
|
|
2685
|
+
"auditlog.action.nonce_mismatch": "Nonce в токене ID не соответствовал созданному при входе. Это может указывать на атаку воспроизведения токена.",
|
|
2686
|
+
"auditlog.action.token_exchange_failed": "Код авторизации не удалось обменять на токены. Провайдер OIDC отклонил запрос.",
|
|
2687
|
+
"auditlog.action.whitelist_rejected": "Адрес электронной почты пользователя отсутствует в белом списке. Доступ запрещен.",
|
|
2688
|
+
"auditlog.action.email_not_verified": "Провайдер OIDC не подтвердил адрес электронной почты пользователя как проверенный. Доступ запрещен.",
|
|
2689
|
+
"auditlog.action.id_token_invalid": "Токен ID не прошел проверку подписи, издателя, аудитории или срока действия. Доступ запрещен.",
|
|
2690
|
+
"auth.page.authenticating.title": "Аутентификация...",
|
|
2691
|
+
"auth.page.authenticating.noscript.heading": "Требуется JavaScript",
|
|
2692
|
+
"auth.page.authenticating.noscript.body": "Для завершения аутентификации должен быть включен JavaScript.",
|
|
2693
|
+
"auth.page.error.title": "Ошибка аутентификации",
|
|
2694
|
+
"auth.page.error.returnToLogin": "Вернуться ко входу",
|
|
2695
|
+
"user.missing_code": "Код авторизации не был получен от провайдера OIDC.",
|
|
2696
|
+
"user.invalid_state": "Несоответствие параметра состояния. Пожалуйста, перезапустите поток входа.",
|
|
2697
|
+
"user.signInError": "Ошибка аутентификации. Пожалуйста, попробуйте еще раз.",
|
|
2698
|
+
"settings.section": "OIDC",
|
|
2699
|
+
"settings.configuration": "Конфигурация",
|
|
2700
|
+
"audit.login_failure": "Ошибка: {message}",
|
|
2701
|
+
"audit.roles_updated": "Роли обновлены до: {roles}",
|
|
2702
|
+
"audit.user_created": "Назначенные роли: {roles}"
|
|
2703
|
+
};
|
|
2704
|
+
const __vite_glob_0_18 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
2705
|
+
__proto__: null,
|
|
2706
|
+
default: ru
|
|
2707
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
2708
|
+
const sk = {
|
|
2709
|
+
"global.plugins.strapi-plugin-oidc": "OIDC plugin",
|
|
2710
|
+
"page.title": "Konfigurujte predvolené roly OIDC a ovládacie prvky prístupu.",
|
|
2711
|
+
"roles.notes": "Vyberte predvolenú/é rolú/roli priradenú/é novým používateľom pri ich prvom prihlásení. Toto nastavenie neovplyvňuje existujúcich používateľov.",
|
|
2712
|
+
"page.save": "Uložiť zmeny",
|
|
2713
|
+
"page.save.success": "Nastavenia aktualizované",
|
|
2714
|
+
"page.save.error": "Aktualizácia zlyhala.",
|
|
2715
|
+
"page.add": "Pridať",
|
|
2716
|
+
"page.cancel": "Zrušiť",
|
|
2717
|
+
"common.remove": "Odstrániť {label}",
|
|
2718
|
+
"page.ok": "OK",
|
|
2719
|
+
"roles.title": "Predvolená/é rola/roly",
|
|
2720
|
+
"roles.placeholder": "Vyberte predvolenú/é rolú/roly",
|
|
2721
|
+
"whitelist.title": "Whitelist",
|
|
2722
|
+
"whitelist.error.unique": "E-mailová adresa je už zaregistrovaná.",
|
|
2723
|
+
"whitelist.description": "Obmedzte overovanie OIDC na konkrétne e-mailové adresy. Používatelia dostanú roly z predvoleného mapovania rolí OIDC alebo zo svojej skupiny OIDC.",
|
|
2724
|
+
"alert.title.success": "Úspech",
|
|
2725
|
+
"alert.title.error": "Chyba",
|
|
2726
|
+
"alert.title.info": "Info",
|
|
2727
|
+
"pagination.previous": "Prejsť na predchádzajúcu stránku",
|
|
2728
|
+
"pagination.page": "Prejsť na stránku {page}",
|
|
2729
|
+
"pagination.next": "Prejsť na ďalšiu stránku",
|
|
2730
|
+
"whitelist.table.no": "Č.",
|
|
2731
|
+
"whitelist.table.email": "E-mail",
|
|
2732
|
+
"whitelist.table.created": "Vytvorené",
|
|
2733
|
+
"whitelist.delete.title": "Potvrdenie",
|
|
2734
|
+
"whitelist.delete.description": "Ste si istí, že chcete vymazať:",
|
|
2735
|
+
"whitelist.delete.note": "Tým sa neodstráni používateľský účet v Strapi.",
|
|
2736
|
+
"whitelist.toggle.enabled": "Povolené",
|
|
2737
|
+
"whitelist.toggle.disabled": "Zakázané",
|
|
2738
|
+
"whitelist.email.placeholder": "E-mailová adresa",
|
|
2739
|
+
"whitelist.table.empty": "Žiadne e-mailové adresy",
|
|
2740
|
+
"whitelist.delete.label": "Vymazať",
|
|
2741
|
+
"page.title.oidc": "OIDC",
|
|
2742
|
+
"enforce.title": "Vynútiť prihlásenie OIDC",
|
|
2743
|
+
"enforce.toggle.enabled": "Povolené",
|
|
2744
|
+
"enforce.toggle.disabled": "Zakázané",
|
|
2745
|
+
"enforce.warning": "Pred uložením zmien sa uistite, že OIDC je správne nakonfigurovaný, nebudete sa môcť normálne prihlásiť.",
|
|
2746
|
+
"enforce.config.info": "Vynucovanie je riadené konfiguračnou premennou OIDC_ENFORCE a nemožno ho tu zmeniť.",
|
|
2747
|
+
"login.settings.title": "Nastavenia prihlásenia",
|
|
2748
|
+
"login.sso": "Prihlásiť sa cez SSO",
|
|
2749
|
+
"pagination.total": "{count, plural, one {# položka} few {# položky} other {# položiek}}",
|
|
2750
|
+
"whitelist.import": "Importovať",
|
|
2751
|
+
"whitelist.export": "Exportovať",
|
|
2752
|
+
"whitelist.delete.all.label": "Vymazať všetko",
|
|
2753
|
+
"whitelist.delete.all.title": "Vymazať všetky položky",
|
|
2754
|
+
"whitelist.delete.all.description": "Tým sa trvalo odstránia všetky {count, plural, one {# položka} few {# položky} other {# položiek}} z whitelistu. Neuložené zmeny sa stratia.",
|
|
2755
|
+
"whitelist.import.error": "Neplatný súbor — očakávané pole JSON objektov s poľom e-mailu.",
|
|
2756
|
+
"whitelist.import.success": "Importované {count, plural, one {# nová položka} few {# nové položky} other {# nových položiek}}.",
|
|
2757
|
+
"whitelist.import.none": "Žiadne nové položky — všetky e-maily sú už na whitelistu.",
|
|
2758
|
+
"unsaved.title": "Neuložené zmeny",
|
|
2759
|
+
"unsaved.description": "Máte neuložené zmeny, ktoré sa stratia, ak odídete. Chcete pokračovať?",
|
|
2760
|
+
"unsaved.confirm": "Odísť",
|
|
2761
|
+
"unsaved.cancel": "Zostať",
|
|
2762
|
+
"auditlog.title": "Auditné protokoly",
|
|
2763
|
+
"auditlog.export": "Stiahnuť",
|
|
2764
|
+
"auditlog.table.timestamp": "Časová pečiatka",
|
|
2765
|
+
"auditlog.table.action": "Akcia",
|
|
2766
|
+
"auditlog.table.email": "E-mail",
|
|
2767
|
+
"auditlog.table.ip": "IP",
|
|
2768
|
+
"auditlog.table.details": "Podrobnosti",
|
|
2769
|
+
"auditlog.table.empty": "Žiadne položky auditného protokolu",
|
|
2770
|
+
"auditlog.clear": "Vymazať protokoly",
|
|
2771
|
+
"auditlog.clear.title": "Vymazať všetky protokoly",
|
|
2772
|
+
"auditlog.clear.description": "Tým sa trvalo vymažú všetky {count, plural, one {# položka auditného protokolu} few {# položky auditného protokolu} other {# položiek auditného protokolu}}. Túto akciu nemožno vrátiť späť.",
|
|
2773
|
+
"auditlog.clear.success": "Auditné protokoly vymazané",
|
|
2774
|
+
"auditlog.clear.error": "Nepodarilo sa vymazať auditné protokoly",
|
|
2775
|
+
"auditlog.export.error": "Nepodarilo sa exportovať auditné protokoly",
|
|
2776
|
+
"auditlog.filters": "Filtre",
|
|
2777
|
+
"auditlog.filters.action": "Akcia",
|
|
2778
|
+
"auditlog.filters.email": "E-mail",
|
|
2779
|
+
"auditlog.filters.ip": "IP adresa",
|
|
2780
|
+
"auditlog.filters.createdAt": "Dátum",
|
|
2781
|
+
"auditlog.filters.clear": "Vymazať filtre",
|
|
2782
|
+
"auditlog.filters.empty": "Žiadne položky nezodpovedajú aktuálnym filtrom",
|
|
2783
|
+
"auditlog.calendar.prevMonth": "Predchádzajúci mesiac",
|
|
2784
|
+
"auditlog.calendar.nextMonth": "Ďalší mesiac",
|
|
2785
|
+
"auditlog.calendar.state.today": "dnes",
|
|
2786
|
+
"auditlog.calendar.state.selected": "vybrané",
|
|
2787
|
+
"auditlog.calendar.state.alreadyAdded": "už pridané",
|
|
2788
|
+
"auditlog.calendar.state.future": "nedostupné, budúci dátum",
|
|
2789
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
2790
|
+
"auditlog.action.login_success": "Používateľ bol úspešne overený prostredníctvom OIDC a bol mu udelený prístup.",
|
|
2791
|
+
"auditlog.action.user_created": "Pri prvom prihlásení OIDC bol pre tohto používateľa vytvorený nový účet správcu Strapi.",
|
|
2792
|
+
"auditlog.action.logout": "Používateľ sa odhlásil a jeho relácia OIDC bola ukončená.",
|
|
2793
|
+
"auditlog.action.session_expired": "Platnosť prístupového tokenu OIDC vypršala v čase, keď sa používateľ odhlásil, takže relácia poskytovateľa nemohla byť ukončená na diaľku.",
|
|
2794
|
+
"auditlog.action.login_failure": "Počas toku prihlásenia OIDC došlo k neočakávanej chybe.",
|
|
2795
|
+
"auditlog.action.missing_code": "OIDC callback bol prijatý bez autorizačného kódu. To môže naznačovať nesprávne nakonfigurovaného poskytovateľa alebo poškodenú požiadavku.",
|
|
2796
|
+
"auditlog.action.state_mismatch": "Parameter stavu v callbacku nezodpovedal tomu uloženému v relácii. To môže naznačovať pokus o CSRF alebo vypršanú reláciu prihlásenia.",
|
|
2797
|
+
"auditlog.action.nonce_mismatch": "Nonce v ID tokene nezodpovedala tej, ktorá bola generovaná pri prihlásení. To môže naznačovať útok replay tokenu.",
|
|
2798
|
+
"auditlog.action.token_exchange_failed": "Autorizačný kód sa nedal vymeniť za tokeny. Poskytovateľ OIDC odmietol požiadavku.",
|
|
2799
|
+
"auditlog.action.whitelist_rejected": "E-mailová adresa používateľa nie je na whitelistu. Prístup bol zamietnutý.",
|
|
2800
|
+
"auditlog.action.email_not_verified": "Poskytovateľ OIDC nepotvrdil e-mailovú adresu používateľa ako overenú. Prístup bol zamietnutý.",
|
|
2801
|
+
"auditlog.action.id_token_invalid": "ID token zlyhal pri overovaní podpisu, vydavateľa, publika alebo exspirácie. Prístup bol zamietnutý.",
|
|
2802
|
+
"auth.page.authenticating.title": "Overovanie...",
|
|
2803
|
+
"auth.page.authenticating.noscript.heading": "Vyžadovaný JavaScript",
|
|
2804
|
+
"auth.page.authenticating.noscript.body": "Na dokončenie overovania musí byť povolený JavaScript.",
|
|
2805
|
+
"auth.page.error.title": "Overenie zlyhalo",
|
|
2806
|
+
"auth.page.error.returnToLogin": "Späť na prihlásenie",
|
|
2807
|
+
"user.missing_code": "Autorizačný kód nebol prijatý od poskytovateľa OIDC.",
|
|
2808
|
+
"user.invalid_state": "Nezhoda parametra stavu. Reštartujte prosím tok prihlásenia.",
|
|
2809
|
+
"user.signInError": "Overenie zlyhalo. Skúste to prosím znova.",
|
|
2810
|
+
"settings.section": "OIDC",
|
|
2811
|
+
"settings.configuration": "Konfigurácia",
|
|
2812
|
+
"audit.login_failure": "Chyba: {message}",
|
|
2813
|
+
"audit.roles_updated": "Role aktualizované na: {roles}",
|
|
2814
|
+
"audit.user_created": "Priradené role: {roles}"
|
|
2815
|
+
};
|
|
2816
|
+
const __vite_glob_0_19 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
2817
|
+
__proto__: null,
|
|
2818
|
+
default: sk
|
|
2819
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
2820
|
+
const sv = {
|
|
2821
|
+
"global.plugins.strapi-plugin-oidc": "OIDC-plugin",
|
|
2822
|
+
"page.title": "Konfigurera standard OIDC-roller och åtkomstkontroller.",
|
|
2823
|
+
"roles.notes": "Välj standardrollen/rollerna som tilldelas nya användare vid deras första inloggning. Denna inställning påverkar inte befintliga användare.",
|
|
2824
|
+
"page.save": "Spara ändringar",
|
|
2825
|
+
"page.save.success": "Inställningar uppdaterade",
|
|
2826
|
+
"page.save.error": "Uppdatering misslyckades.",
|
|
2827
|
+
"page.add": "Lägg till",
|
|
2828
|
+
"page.cancel": "Avbryt",
|
|
2829
|
+
"common.remove": "Ta bort {label}",
|
|
2830
|
+
"page.ok": "OK",
|
|
2831
|
+
"roles.title": "Standardroll(er)",
|
|
2832
|
+
"roles.placeholder": "Välj standardroll(er)",
|
|
2833
|
+
"whitelist.title": "Vitlista",
|
|
2834
|
+
"whitelist.error.unique": "E-postadressen är redan registrerad.",
|
|
2835
|
+
"whitelist.description": "Begränsa OIDC-autentisering till specifika e-postadresser. Användare får roller från standard OIDC-rolsmappning eller sin OIDC-grupp.",
|
|
2836
|
+
"alert.title.success": "Framgång",
|
|
2837
|
+
"alert.title.error": "Fel",
|
|
2838
|
+
"alert.title.info": "Info",
|
|
2839
|
+
"pagination.previous": "Gå till föregående sida",
|
|
2840
|
+
"pagination.page": "Gå till sida {page}",
|
|
2841
|
+
"pagination.next": "Gå till nästa sida",
|
|
2842
|
+
"whitelist.table.no": "Nr.",
|
|
2843
|
+
"whitelist.table.email": "E-post",
|
|
2844
|
+
"whitelist.table.created": "Skapad",
|
|
2845
|
+
"whitelist.delete.title": "Bekräftelse",
|
|
2846
|
+
"whitelist.delete.description": "Är du säker på att du vill ta bort:",
|
|
2847
|
+
"whitelist.delete.note": "Detta tar inte bort användarkontot i Strapi.",
|
|
2848
|
+
"whitelist.toggle.enabled": "Aktiverad",
|
|
2849
|
+
"whitelist.toggle.disabled": "Inaktiverad",
|
|
2850
|
+
"whitelist.email.placeholder": "E-postadress",
|
|
2851
|
+
"whitelist.table.empty": "Inga e-postadresser",
|
|
2852
|
+
"whitelist.delete.label": "Ta bort",
|
|
2853
|
+
"page.title.oidc": "OIDC",
|
|
2854
|
+
"enforce.title": "Framtvinga OIDC-inloggning",
|
|
2855
|
+
"enforce.toggle.enabled": "Aktiverad",
|
|
2856
|
+
"enforce.toggle.disabled": "Inaktiverad",
|
|
2857
|
+
"enforce.warning": "Se till att OIDC är korrekt konfigurerat innan du sparar ändringar, du kommer inte att kunna logga in normalt.",
|
|
2858
|
+
"enforce.config.info": "Framtvingande styrs av OIDC_ENFORCE-konfigurationsvariabeln och kan inte ändras här.",
|
|
2859
|
+
"login.settings.title": "Inloggningsinställningar",
|
|
2860
|
+
"login.sso": "Logga in via SSO",
|
|
2861
|
+
"pagination.total": "{count, plural, one {# post} other {# poster}}",
|
|
2862
|
+
"whitelist.import": "Importera",
|
|
2863
|
+
"whitelist.export": "Exportera",
|
|
2864
|
+
"whitelist.delete.all.label": "Ta bort alla",
|
|
2865
|
+
"whitelist.delete.all.title": "Ta bort alla poster",
|
|
2866
|
+
"whitelist.delete.all.description": "Detta tar permanent bort alla {count, plural, one {# post} other {# poster}} från vitlistan. Osparade ändringar går förlorade.",
|
|
2867
|
+
"whitelist.import.error": "Ogiltig fil — förväntade en JSON-matris av objekt med ett e-postfält.",
|
|
2868
|
+
"whitelist.import.success": "{count, plural, one {# ny post} other {# nya poster}} importerade.",
|
|
2869
|
+
"whitelist.import.none": "Inga nya poster — alla e-postmeddelanden finns redan i vitlistan.",
|
|
2870
|
+
"unsaved.title": "Osparade ändringar",
|
|
2871
|
+
"unsaved.description": "Du har osparade ändringar som går förlorade om du lämnar. Vill du fortsätta?",
|
|
2872
|
+
"unsaved.confirm": "Lämna",
|
|
2873
|
+
"unsaved.cancel": "Stanna",
|
|
2874
|
+
"auditlog.title": "Granskningsloggar",
|
|
2875
|
+
"auditlog.export": "Ladda ner",
|
|
2876
|
+
"auditlog.table.timestamp": "Tidsstämpel",
|
|
2877
|
+
"auditlog.table.action": "Åtgärd",
|
|
2878
|
+
"auditlog.table.email": "E-post",
|
|
2879
|
+
"auditlog.table.ip": "IP",
|
|
2880
|
+
"auditlog.table.details": "Detaljer",
|
|
2881
|
+
"auditlog.table.empty": "Inga granskningsloggposter",
|
|
2882
|
+
"auditlog.clear": "Rensa loggar",
|
|
2883
|
+
"auditlog.clear.title": "Rensa alla loggar",
|
|
2884
|
+
"auditlog.clear.description": "Detta tar permanent bort alla {count, plural, one {# granskningsloggpost} other {# granskningsloggposter}}. Åtgärden kan inte ångras.",
|
|
2885
|
+
"auditlog.clear.success": "Granskningsloggar rensade",
|
|
2886
|
+
"auditlog.clear.error": "Det gick inte att rensa granskningsloggar",
|
|
2887
|
+
"auditlog.export.error": "Det gick inte att exportera granskningsloggar",
|
|
2888
|
+
"auditlog.filters": "Filter",
|
|
2889
|
+
"auditlog.filters.action": "Åtgärd",
|
|
2890
|
+
"auditlog.filters.email": "E-post",
|
|
2891
|
+
"auditlog.filters.ip": "IP-adress",
|
|
2892
|
+
"auditlog.filters.createdAt": "Datum",
|
|
2893
|
+
"auditlog.filters.clear": "Rensa filter",
|
|
2894
|
+
"auditlog.filters.empty": "Inga poster matchar aktuella filter",
|
|
2895
|
+
"auditlog.calendar.prevMonth": "Föregående månad",
|
|
2896
|
+
"auditlog.calendar.nextMonth": "Nästa månad",
|
|
2897
|
+
"auditlog.calendar.state.today": "idag",
|
|
2898
|
+
"auditlog.calendar.state.selected": "vald",
|
|
2899
|
+
"auditlog.calendar.state.alreadyAdded": "redan tillagd",
|
|
2900
|
+
"auditlog.calendar.state.future": "inte tillgänglig, framtida datum",
|
|
2901
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
2902
|
+
"auditlog.action.login_success": "Användaren autentiserades framgångsrikt via OIDC och beviljades åtkomst.",
|
|
2903
|
+
"auditlog.action.user_created": "Ett nytt Strapi-administratörskonto skapades för denna användare vid deras första OIDC-inloggning.",
|
|
2904
|
+
"auditlog.action.logout": "Användaren loggade ut och deras OIDC-session avslutades.",
|
|
2905
|
+
"auditlog.action.session_expired": "OIDC-åtkomsttokenet hade gått ut vid den tidpunkt användaren loggade ut, så leverantörssessionen kunde inte avslutas på distans.",
|
|
2906
|
+
"auditlog.action.login_failure": "Ett oväntat fel uppstod under OIDC-inloggningsflödet.",
|
|
2907
|
+
"auditlog.action.missing_code": "OIDC-callbacken mottogs utan en auktoriseringskod. Detta kan indikera en felkonfigurerad leverantör eller en manipuleras förfrågan.",
|
|
2908
|
+
"auditlog.action.state_mismatch": "Tillståndsparametern i callbacken matchade inte den som lagrades i sessionen. Detta kan indikera ett CSRF-försök eller en utgången inloggningssession.",
|
|
2909
|
+
"auditlog.action.nonce_mismatch": "Nonce i ID-tokenet matchade inte den som genererades vid inloggningen. Detta kan indikera ett token-replay-attack.",
|
|
2910
|
+
"auditlog.action.token_exchange_failed": "Auktoriseringskoden kunde inte exchangas mot token. OIDC-leverantören avslog förfrågan.",
|
|
2911
|
+
"auditlog.action.whitelist_rejected": "Användarens e-postadress finns inte på vitlistan. Åtkomst nekades.",
|
|
2912
|
+
"auditlog.action.email_not_verified": "OIDC-leverantören bekräftade inte användarens e-postadress som verifierad. Åtkomst nekades.",
|
|
2913
|
+
"auditlog.action.id_token_invalid": "ID-tokenet misslyckades med signatur-, issuer-, publik- eller utgångsvalidering. Åtkomst nekades.",
|
|
2914
|
+
"auth.page.authenticating.title": "Autentiserar...",
|
|
2915
|
+
"auth.page.authenticating.noscript.heading": "JavaScript krävs",
|
|
2916
|
+
"auth.page.authenticating.noscript.body": "JavaScript måste vara aktiverat för att autentiseringen ska slutföras.",
|
|
2917
|
+
"auth.page.error.title": "Autentisering misslyckades",
|
|
2918
|
+
"auth.page.error.returnToLogin": "Tillbaka till inloggning",
|
|
2919
|
+
"user.missing_code": "Auktoriseringskod mottogs inte från OIDC-leverantören.",
|
|
2920
|
+
"user.invalid_state": "Tillståndsparameter mismatch. Starta om inloggningsflödet.",
|
|
2921
|
+
"user.signInError": "Autentisering misslyckades. Försök igen.",
|
|
2922
|
+
"settings.section": "OIDC",
|
|
2923
|
+
"settings.configuration": "Konfiguration",
|
|
2924
|
+
"audit.login_failure": "Fel: {message}",
|
|
2925
|
+
"audit.roles_updated": "Roller uppdaterade till: {roles}",
|
|
2926
|
+
"audit.user_created": "Tilldelade roller: {roles}"
|
|
2927
|
+
};
|
|
2928
|
+
const __vite_glob_0_20 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
2929
|
+
__proto__: null,
|
|
2930
|
+
default: sv
|
|
2931
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
2932
|
+
const th = {
|
|
2933
|
+
"global.plugins.strapi-plugin-oidc": "ปลั๊กอิน OIDC",
|
|
2934
|
+
"page.title": "กำหนดค่าบทบาทเริ่มต้นของ OIDC และการควบคุมการเข้าถึง",
|
|
2935
|
+
"roles.notes": "เลือกบทบาทเริ่มต้นที่กำหนดให้ผู้ใช้ใหม่เมื่อเข้าสู่ระบบครั้งแรก การตั้งค่านี้ไม่ส่งผลกระทบต่อผู้ใช้ที่มีอยู่แล้ว",
|
|
2936
|
+
"page.save": "บันทึกการเปลี่ยนแปลง",
|
|
2937
|
+
"page.save.success": "อัปเดตการตั้งค่าแล้ว",
|
|
2938
|
+
"page.save.error": "การอัปเดตล้มเหลว",
|
|
2939
|
+
"page.add": "เพิ่ม",
|
|
2940
|
+
"page.cancel": "ยกเลิก",
|
|
2941
|
+
"common.remove": "ลบ {label}",
|
|
2942
|
+
"page.ok": "ตกลง",
|
|
2943
|
+
"roles.title": "บทบาทเริ่มต้น",
|
|
2944
|
+
"roles.placeholder": "เลือกบทบาทเริ่มต้น",
|
|
2945
|
+
"whitelist.title": "Whitelist",
|
|
2946
|
+
"whitelist.error.unique": "ที่อยู่อีเมลลงทะเบียนแล้ว",
|
|
2947
|
+
"whitelist.description": "จำกัดการตรวจสอบ OIDC ไปยังที่อยู่อีเมลเฉพาะ ผู้ใช้ได้รับบทบาทจากการแมปบทบาท OIDC เริ่มต้นหรือกลุ่ม OIDC ของตน",
|
|
2948
|
+
"alert.title.success": "สำเร็จ",
|
|
2949
|
+
"alert.title.error": "ข้อผิดพลาด",
|
|
2950
|
+
"alert.title.info": "ข้อมูล",
|
|
2951
|
+
"pagination.previous": "ไปหน้าก่อนหน้า",
|
|
2952
|
+
"pagination.page": "ไปหน้า {page}",
|
|
2953
|
+
"pagination.next": "ไปหน้าถัดไป",
|
|
2954
|
+
"whitelist.table.no": "ลำดับ",
|
|
2955
|
+
"whitelist.table.email": "อีเมล",
|
|
2956
|
+
"whitelist.table.created": "สร้างเมื่อ",
|
|
2957
|
+
"whitelist.delete.title": "ยืนยัน",
|
|
2958
|
+
"whitelist.delete.description": "คุณแน่ใจหรือไม่ที่จะลบ:",
|
|
2959
|
+
"whitelist.delete.note": "สิ่งนี้จะไม่ลบบัญชีผู้ใช้ใน Strapi",
|
|
2960
|
+
"whitelist.toggle.enabled": "เปิดใช้งาน",
|
|
2961
|
+
"whitelist.toggle.disabled": "ปิดใช้งาน",
|
|
2962
|
+
"whitelist.email.placeholder": "ที่อยู่อีเมล",
|
|
2963
|
+
"whitelist.table.empty": "ไม่มีที่อยู่อีเมล",
|
|
2964
|
+
"whitelist.delete.label": "ลบ",
|
|
2965
|
+
"page.title.oidc": "OIDC",
|
|
2966
|
+
"enforce.title": "บังคับเข้าสู่ระบบ OIDC",
|
|
2967
|
+
"enforce.toggle.enabled": "เปิดใช้งาน",
|
|
2968
|
+
"enforce.toggle.disabled": "ปิดใช้งาน",
|
|
2969
|
+
"enforce.warning": "ตรวจสอบให้แน่ใจว่า OIDC ถูกตั้งค่าอย่างถูกต้องก่อนบันทึกการเปลี่ยนแปลง คุณจะไม่สามารถเข้าสู่ระบบตามปกติได้",
|
|
2970
|
+
"enforce.config.info": "การบังคับใช้ถูกควบคุมโดยตัวแปรการกำหนดค่า OIDC_ENFORCE และไม่สามารถเปลี่ยนแปลงได้ที่นี่",
|
|
2971
|
+
"login.settings.title": "การตั้งค่าการเข้าสู่ระบบ",
|
|
2972
|
+
"login.sso": "เข้าสู่ระบบผ่าน SSO",
|
|
2973
|
+
"pagination.total": "{count, plural, other {# รายการ}}",
|
|
2974
|
+
"whitelist.import": "นำเข้า",
|
|
2975
|
+
"whitelist.export": "ส่งออก",
|
|
2976
|
+
"whitelist.delete.all.label": "ลบทั้งหมด",
|
|
2977
|
+
"whitelist.delete.all.title": "ลบรายการทั้งหมด",
|
|
2978
|
+
"whitelist.delete.all.description": "สิ่งนี้จะลบ {count, plural, other {# รายการ}} ออกจาก whitelist อย่างถาวร การเปลี่ยนแปลงที่ยังไม่ได้บันทึกจะสูญหาย",
|
|
2979
|
+
"whitelist.import.error": "ไฟล์ไม่ถูกต้อง — คาดว่าจะเป็นอาร์เรย์ JSON ของออบเจ็กต์ที่มีฟิลด์อีเมล",
|
|
2980
|
+
"whitelist.import.success": "นำเข้า {count, plural, other {# รายการใหม่}}",
|
|
2981
|
+
"whitelist.import.none": "ไม่มีรายการใหม่ — อีเมลทั้งหมดอยู่ใน whitelist แล้ว",
|
|
2982
|
+
"unsaved.title": "การเปลี่ยนแปลงที่ยังไม่ได้บันทึก",
|
|
2983
|
+
"unsaved.description": "คุณมีการเปลี่ยนแปลงที่ยังไม่ได้บันทึกซึ่งจะสูญหายหากคุณออก คุณต้องการดำเนินการต่อหรือไม่",
|
|
2984
|
+
"unsaved.confirm": "ออก",
|
|
2985
|
+
"unsaved.cancel": "อยู่",
|
|
2986
|
+
"auditlog.title": "บันทึกการตรวจสอบ",
|
|
2987
|
+
"auditlog.export": "ดาวน์โหลด",
|
|
2988
|
+
"auditlog.table.timestamp": "การประทับเวลา",
|
|
2989
|
+
"auditlog.table.action": "การดำเนินการ",
|
|
2990
|
+
"auditlog.table.email": "อีเมล",
|
|
2991
|
+
"auditlog.table.ip": "IP",
|
|
2992
|
+
"auditlog.table.details": "รายละเอียด",
|
|
2993
|
+
"auditlog.table.empty": "ไม่มีรายการบันทึกการตรวจสอบ",
|
|
2994
|
+
"auditlog.clear": "ล้างบันทึก",
|
|
2995
|
+
"auditlog.clear.title": "ล้างบันทึกทั้งหมด",
|
|
2996
|
+
"auditlog.clear.description": "สิ่งนี้จะลบ {count, plural, other {# รายการบันทึกการตรวจสอบ}} อย่างถาวร การดำเนินการนี้ไม่สามารถเลิกทำได้",
|
|
2997
|
+
"auditlog.clear.success": "ล้างบันทึกการตรวจสอบแล้ว",
|
|
2998
|
+
"auditlog.clear.error": "ไม่สามารถล้างบันทึกการตรวจสอบ",
|
|
2999
|
+
"auditlog.export.error": "ไม่สามารถส่งออกบันทึกการตรวจสอบ",
|
|
3000
|
+
"auditlog.filters": "ตัวกรอง",
|
|
3001
|
+
"auditlog.filters.action": "การดำเนินการ",
|
|
3002
|
+
"auditlog.filters.email": "อีเมล",
|
|
3003
|
+
"auditlog.filters.ip": "ที่อยู่ IP",
|
|
3004
|
+
"auditlog.filters.createdAt": "วันที่",
|
|
3005
|
+
"auditlog.filters.clear": "ล้างตัวกรอง",
|
|
3006
|
+
"auditlog.filters.empty": "ไม่มีรายการที่ตรงกับตัวกรองปัจจุบัน",
|
|
3007
|
+
"auditlog.calendar.prevMonth": "เดือนก่อนหน้า",
|
|
3008
|
+
"auditlog.calendar.nextMonth": "เดือนถัดไป",
|
|
3009
|
+
"auditlog.calendar.state.today": "วันนี้",
|
|
3010
|
+
"auditlog.calendar.state.selected": "เลือกแล้ว",
|
|
3011
|
+
"auditlog.calendar.state.alreadyAdded": "เพิ่มแล้ว",
|
|
3012
|
+
"auditlog.calendar.state.future": "ไม่พร้อมใช้งาน วันที่ในอนาคต",
|
|
3013
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
3014
|
+
"auditlog.action.login_success": "ผู้ใช้ได้รับการตรวจสอบสิทธิ์ผ่าน OIDC สำเร็จและได้รับอนุญาตให้เข้าถึง",
|
|
3015
|
+
"auditlog.action.user_created": "บัญชีผู้ดูแลระบบ Strapi ใหม่ถูกสร้างขึ้นสำหรับผู้ใช้รายนี้ในการเข้าสู่ระบบ OIDC ครั้งแรก",
|
|
3016
|
+
"auditlog.action.logout": "ผู้ใช้ออกจากระบบและเซสชัน OIDC ถูกยุติลง",
|
|
3017
|
+
"auditlog.action.session_expired": "โทเค็นการเข้าถึง OIDC หมดอายุแล้วในเวลาที่ผู้ใช้ออกจากระบบ ดังนั้นเซสชันของผู้ให้บริการไม่สามารถยุติจากระยะไกลได้",
|
|
3018
|
+
"auditlog.action.login_failure": "เกิดข้อผิดพลาดที่ไม่คาดคิดระหว่างการเข้าสู่ระบบ OIDC",
|
|
3019
|
+
"auditlog.action.missing_code": "การโทรกลับ OIDC ได้รับโดยไม่มีรหัสการอนุญาต สิ่งนี้อาจบ่งชี้ถึงผู้ให้บริการที่กำหนดค่าผิดหรือคำขอที่ถูกดัดแปลง",
|
|
3020
|
+
"auditlog.action.state_mismatch": "พารามิเตอร์สถานะในการโทรกลับไม่ตรงกับสิ่งที่จัดเก็บในเซสชัน สิ่งนี้อาจบ่งชี้ถึงความพยายาม CSRF หรือเซสชันการเข้าสู่ระบบที่หมดอายุ",
|
|
3021
|
+
"auditlog.action.nonce_mismatch": "Nonce ในโทเค็น ID ไม่ตรงกับที่สร้างไว้เมื่อเข้าสู่ระบบ สิ่งนี้อาจบ่งชี้ถึงการโจมตีแบบ replay โทเค็น",
|
|
3022
|
+
"auditlog.action.token_exchange_failed": "ไม่สามารถแลกเปลี่ยนรหัสการอนุญาตเป็นโทเค็นได้ ผู้ให้บริการ OIDC ปฏิเสธคำขอ",
|
|
3023
|
+
"auditlog.action.whitelist_rejected": "ที่อยู่อีเมลของผู้ใช้ไม่อยู่ใน whitelist การเข้าถึงถูกปฏิเสธ",
|
|
3024
|
+
"auditlog.action.email_not_verified": "ผู้ให้บริการ OIDC ไม่ได้ยืนยันที่อยู่อีเมลของผู้ใช้ว่าได้รับการตรวจสอบแล้ว การเข้าถึงถูกปฏิเสธ",
|
|
3025
|
+
"auditlog.action.id_token_invalid": "โทเค็น ID ไม่ผ่านการตรวจสอบลายเซ็น ผู้ออก ผู้ชม หรือการหมดอายุ การเข้าถึงถูกปฏิเสธ",
|
|
3026
|
+
"auth.page.authenticating.title": "กำลังตรวจสอบสิทธิ์...",
|
|
3027
|
+
"auth.page.authenticating.noscript.heading": "ต้องใช้ JavaScript",
|
|
3028
|
+
"auth.page.authenticating.noscript.body": "ต้องเปิดใช้งาน JavaScript เพื่อให้การตรวจสอบสิทธิ์เสร็จสมบูรณ์",
|
|
3029
|
+
"auth.page.error.title": "การตรวจสอบสิทธิ์ล้มเหลว",
|
|
3030
|
+
"auth.page.error.returnToLogin": "กลับไปที่การเข้าสู่ระบบ",
|
|
3031
|
+
"user.missing_code": "ไม่ได้รับรหัสการอนุญาตจากผู้ให้บริการ OIDC",
|
|
3032
|
+
"user.invalid_state": "พารามิเตอร์สถานะไม่ตรงกัน โปรดเริ่มต้นการเข้าสู่ระบบใหม่",
|
|
3033
|
+
"user.signInError": "การตรวจสอบสิทธิ์ล้มเหลว โปรดลองอีกครั้ง",
|
|
3034
|
+
"settings.section": "OIDC",
|
|
3035
|
+
"settings.configuration": "การกำหนดค่า",
|
|
3036
|
+
"audit.login_failure": "ข้อผิดพลาด: {message}",
|
|
3037
|
+
"audit.roles_updated": "บทบาทอัปเดตเป็น: {roles}",
|
|
3038
|
+
"audit.user_created": "บทบาทที่กำหนด: {roles}"
|
|
3039
|
+
};
|
|
3040
|
+
const __vite_glob_0_21 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
3041
|
+
__proto__: null,
|
|
3042
|
+
default: th
|
|
3043
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
3044
|
+
const tr = {
|
|
3045
|
+
"global.plugins.strapi-plugin-oidc": "OIDC Eklentisi",
|
|
3046
|
+
"page.title": "Varsayılan OIDC rollerini ve erişim kontrollerini yapılandırın.",
|
|
3047
|
+
"roles.notes": "Yeni kullanıcılara ilk girişlerinde atanan varsayılan rol(leri) seçin. Bu ayar mevcut kullanıcları etkilemez.",
|
|
3048
|
+
"page.save": "Değişiklikleri Kaydet",
|
|
3049
|
+
"page.save.success": "Ayarlar güncellendi",
|
|
3050
|
+
"page.save.error": "Güncelleme başarısız.",
|
|
3051
|
+
"page.add": "Ekle",
|
|
3052
|
+
"page.cancel": "İptal",
|
|
3053
|
+
"common.remove": "{label} Kaldır",
|
|
3054
|
+
"page.ok": "Tamam",
|
|
3055
|
+
"roles.title": "Varsayılan Rol(ler)",
|
|
3056
|
+
"roles.placeholder": "Varsayılan rol(ler) seçin",
|
|
3057
|
+
"whitelist.title": "İzin Listesi",
|
|
3058
|
+
"whitelist.error.unique": "E-posta adresi zaten kayıtlı.",
|
|
3059
|
+
"whitelist.description": "OIDC kimlik doğrulamasını belirli e-posta adresleriyle sınırlayın. Kullanıcılar, varsayılan OIDC rol eşlemesinden veya OIDC gruplarından roller alır.",
|
|
3060
|
+
"alert.title.success": "Başarılı",
|
|
3061
|
+
"alert.title.error": "Hata",
|
|
3062
|
+
"alert.title.info": "Bilgi",
|
|
3063
|
+
"pagination.previous": "Önceki sayfaya git",
|
|
3064
|
+
"pagination.page": "Sayfa {page}'e git",
|
|
3065
|
+
"pagination.next": "Sonraki sayfaya git",
|
|
3066
|
+
"whitelist.table.no": "No",
|
|
3067
|
+
"whitelist.table.email": "E-posta",
|
|
3068
|
+
"whitelist.table.created": "Oluşturuldu",
|
|
3069
|
+
"whitelist.delete.title": "Onay",
|
|
3070
|
+
"whitelist.delete.description": "Silmek istediğinizden emin misiniz:",
|
|
3071
|
+
"whitelist.delete.note": "Bu, Strapi'deki kullanıcı hesabını silmez.",
|
|
3072
|
+
"whitelist.toggle.enabled": "Etkin",
|
|
3073
|
+
"whitelist.toggle.disabled": "Devre Dışı",
|
|
3074
|
+
"whitelist.email.placeholder": "E-posta adresi",
|
|
3075
|
+
"whitelist.table.empty": "E-posta adresi yok",
|
|
3076
|
+
"whitelist.delete.label": "Sil",
|
|
3077
|
+
"page.title.oidc": "OIDC",
|
|
3078
|
+
"enforce.title": "OIDC Girişini Zorla",
|
|
3079
|
+
"enforce.toggle.enabled": "Etkin",
|
|
3080
|
+
"enforce.toggle.disabled": "Devre Dışı",
|
|
3081
|
+
"enforce.warning": "Değişiklikleri kaydetmeden önce OIDC'nin doğru yapılandırıldığından emin olun, normal olarak giriş yapamayacaksınız.",
|
|
3082
|
+
"enforce.config.info": "Zorlama, OIDC_ENFORCE yapılandırma değişkeni tarafından kontrol edilir ve burada değiştirilemez.",
|
|
3083
|
+
"login.settings.title": "Giriş Ayarları",
|
|
3084
|
+
"login.sso": "SSO ile Giriş Yap",
|
|
3085
|
+
"pagination.total": "{count, plural, other {# kayıt}}",
|
|
3086
|
+
"whitelist.import": "İçe Aktar",
|
|
3087
|
+
"whitelist.export": "Dışa Aktar",
|
|
3088
|
+
"whitelist.delete.all.label": "Tümünü Sil",
|
|
3089
|
+
"whitelist.delete.all.title": "Tüm Kayıtları Sil",
|
|
3090
|
+
"whitelist.delete.all.description": "Bu, izin listesindeki tüm {count, plural, other {# kayıtı}} kalıcı olarak kaldıracaktır. Kaydedilmemiş değişiklikler kaybolacaktır.",
|
|
3091
|
+
"whitelist.import.error": "Geçersiz dosya — e-posta alanına sahip JSON nesne dizisi bekleniyordu.",
|
|
3092
|
+
"whitelist.import.success": "{count, plural, other {# yeni kayıt}} içe aktarıldı.",
|
|
3093
|
+
"whitelist.import.none": "Yeni kayıt yok — tüm e-postalar zaten izin listesinde.",
|
|
3094
|
+
"unsaved.title": "Kaydedilmemiş Değişiklikler",
|
|
3095
|
+
"unsaved.description": "Ayrılırsanız kaybolacak kaydedilmemiş değişiklikleriniz var. Devam etmek istiyor musunuz?",
|
|
3096
|
+
"unsaved.confirm": "Ayrıl",
|
|
3097
|
+
"unsaved.cancel": "Kal",
|
|
3098
|
+
"auditlog.title": "Denetim Günlükleri",
|
|
3099
|
+
"auditlog.export": "İndir",
|
|
3100
|
+
"auditlog.table.timestamp": "Zaman Damgası",
|
|
3101
|
+
"auditlog.table.action": "Eylem",
|
|
3102
|
+
"auditlog.table.email": "E-posta",
|
|
3103
|
+
"auditlog.table.ip": "IP",
|
|
3104
|
+
"auditlog.table.details": "Detaylar",
|
|
3105
|
+
"auditlog.table.empty": "Denetim günlüğü kaydı yok",
|
|
3106
|
+
"auditlog.clear": "Günlükleri Temizle",
|
|
3107
|
+
"auditlog.clear.title": "Tüm Günlükleri Temizle",
|
|
3108
|
+
"auditlog.clear.description": "Bu, tüm {count, plural, other {# denetim günlüğü kaydını}} kalıcı olarak silecektir. Bu eylem geri alınamaz.",
|
|
3109
|
+
"auditlog.clear.success": "Denetim günlükleri temizlendi",
|
|
3110
|
+
"auditlog.clear.error": "Denetim günlükleri temizlenemedi",
|
|
3111
|
+
"auditlog.export.error": "Denetim günlükleri dışa aktarılamadı",
|
|
3112
|
+
"auditlog.filters": "Filtreler",
|
|
3113
|
+
"auditlog.filters.action": "Eylem",
|
|
3114
|
+
"auditlog.filters.email": "E-posta",
|
|
3115
|
+
"auditlog.filters.ip": "IP adresi",
|
|
3116
|
+
"auditlog.filters.createdAt": "Tarih",
|
|
3117
|
+
"auditlog.filters.clear": "Filtreleri Temizle",
|
|
3118
|
+
"auditlog.filters.empty": "Mevcut filtrelere uyan kayıt yok",
|
|
3119
|
+
"auditlog.calendar.prevMonth": "Önceki ay",
|
|
3120
|
+
"auditlog.calendar.nextMonth": "Sonraki ay",
|
|
3121
|
+
"auditlog.calendar.state.today": "bugün",
|
|
3122
|
+
"auditlog.calendar.state.selected": "seçildi",
|
|
3123
|
+
"auditlog.calendar.state.alreadyAdded": "zaten eklendi",
|
|
3124
|
+
"auditlog.calendar.state.future": "kullanılamaz, gelecek tarih",
|
|
3125
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
3126
|
+
"auditlog.action.login_success": "Kullanıcı OIDC aracılığıyla başarıyla kimlik doğruladı ve erişim yetkisi aldı.",
|
|
3127
|
+
"auditlog.action.user_created": "Bu kullanıcı için ilk OIDC girişinde yeni bir Strapi yönetici hesabı oluşturuldu.",
|
|
3128
|
+
"auditlog.action.logout": "Kullanıcı çıkış yaptı ve OIDC oturumu sonlandırıldı.",
|
|
3129
|
+
"auditlog.action.session_expired": "Kullanıcı çıkış yaptığında OIDC erişim belirtecinin süresi dolmuştu, bu nedenle sağlayıcı oturumu uzaktan sonlandırılamadı.",
|
|
3130
|
+
"auditlog.action.login_failure": "OIDC giriş akışı sırasında beklenmeyen bir hata oluştu.",
|
|
3131
|
+
"auditlog.action.missing_code": "OIDC geri araması, yetkilendirme kodu olmadan alındı. Bu, yanlış yapılandırılmış bir sağlayıcıyı veya kurcalanmış bir isteği gösterebilir.",
|
|
3132
|
+
"auditlog.action.state_mismatch": "Geri aramadaki durum parametresi, oturumda depolananla eşleşmedi. Bu, bir CSRF girişimi veya süresi dolmuş bir giriş oturumunu gösterebilir.",
|
|
3133
|
+
"auditlog.action.nonce_mismatch": "Kimlik belirtecindeki nonce, giriş sırasında oluşturulanla eşleşmedi. Bu, bir belirteç yeniden yürütme saldırısını gösterebilir.",
|
|
3134
|
+
"auditlog.action.token_exchange_failed": "Yetkilendirme kodu belirteçlerle değiştirilemedi. OIDC sağlayıcısı isteği reddetti.",
|
|
3135
|
+
"auditlog.action.whitelist_rejected": "Kullanıcının e-posta adresi izin listesinde değil. Erişim reddedildi.",
|
|
3136
|
+
"auditlog.action.email_not_verified": "OIDC sağlayıcısı, kullanıcının e-posta adresini doğrulanmış olarak onaylamadı. Erişim reddedildi.",
|
|
3137
|
+
"auditlog.action.id_token_invalid": "Kimlik belirteci, imza, ihraççı, hedef kitle veya sona erme doğrulamasını geçemedi. Erişim reddedildi.",
|
|
3138
|
+
"auth.page.authenticating.title": "Kimlik Doğrulama...",
|
|
3139
|
+
"auth.page.authenticating.noscript.heading": "JavaScript Gerekli",
|
|
3140
|
+
"auth.page.authenticating.noscript.body": "Kimlik doğrulamanın tamamlanması için JavaScript'in etkinleştirilmesi gerekir.",
|
|
3141
|
+
"auth.page.error.title": "Kimlik Doğrulama Başarısız",
|
|
3142
|
+
"auth.page.error.returnToLogin": "Girişe Dön",
|
|
3143
|
+
"user.missing_code": "OIDC sağlayıcısından yetkilendirme kodu alınmadı.",
|
|
3144
|
+
"user.invalid_state": "Durum parametresi uyuşmazlığı. Lütfen giriş akışını yeniden başlatın.",
|
|
3145
|
+
"user.signInError": "Kimlik doğrulama başarısız. Lütfen tekrar deneyin.",
|
|
3146
|
+
"settings.section": "OIDC",
|
|
3147
|
+
"settings.configuration": "Yapılandırma",
|
|
3148
|
+
"audit.login_failure": "Hata: {message}",
|
|
3149
|
+
"audit.roles_updated": "Roller şu şekilde güncellendi: {roles}",
|
|
3150
|
+
"audit.user_created": "Atanan roller: {roles}"
|
|
3151
|
+
};
|
|
3152
|
+
const __vite_glob_0_22 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
3153
|
+
__proto__: null,
|
|
3154
|
+
default: tr
|
|
3155
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
3156
|
+
const uk = {
|
|
3157
|
+
"global.plugins.strapi-plugin-oidc": "Плагін OIDC",
|
|
3158
|
+
"page.title": "Налаштуйте ролі OIDC за замовчуванням та елементи керування доступом.",
|
|
3159
|
+
"roles.notes": "Виберіть роль(і) за замовчуванням, яка буде призначена новим користувачам під час їх першого входу. Це налаштування не впливає на існуючих користувачів.",
|
|
3160
|
+
"page.save": "Зберегти зміни",
|
|
3161
|
+
"page.save.success": "Налаштування оновлено",
|
|
3162
|
+
"page.save.error": "Оновлення не вдалося.",
|
|
3163
|
+
"page.add": "Додати",
|
|
3164
|
+
"page.cancel": "Скасувати",
|
|
3165
|
+
"common.remove": "Видалити {label}",
|
|
3166
|
+
"page.ok": "OK",
|
|
3167
|
+
"roles.title": "Роль(і) за замовчуванням",
|
|
3168
|
+
"roles.placeholder": "Виберіть роль(і) за замовчуванням",
|
|
3169
|
+
"whitelist.title": "Білий список",
|
|
3170
|
+
"whitelist.error.unique": "Адреса електронної пошти вже зареєстрована.",
|
|
3171
|
+
"whitelist.description": "Обмежте автентифікацію OIDC до конкретних адрес електронної пошти. Користувачі отримують ролі зі стандартного зіставлення ролей OIDC або своєї групи OIDC.",
|
|
3172
|
+
"alert.title.success": "Успіх",
|
|
3173
|
+
"alert.title.error": "Помилка",
|
|
3174
|
+
"alert.title.info": "Інформація",
|
|
3175
|
+
"pagination.previous": "Перейти на попередню сторінку",
|
|
3176
|
+
"pagination.page": "Перейти на сторінку {page}",
|
|
3177
|
+
"pagination.next": "Перейти на наступну сторінку",
|
|
3178
|
+
"whitelist.table.no": "№",
|
|
3179
|
+
"whitelist.table.email": "Електронна пошта",
|
|
3180
|
+
"whitelist.table.created": "Створено",
|
|
3181
|
+
"whitelist.delete.title": "Підтвердження",
|
|
3182
|
+
"whitelist.delete.description": "Ви впевнені, що хочете видалити:",
|
|
3183
|
+
"whitelist.delete.note": "Це не призведе до видалення облікового запису користувача в Strapi.",
|
|
3184
|
+
"whitelist.toggle.enabled": "Увімкнено",
|
|
3185
|
+
"whitelist.toggle.disabled": "Вимкнено",
|
|
3186
|
+
"whitelist.email.placeholder": "Адреса електронної пошти",
|
|
3187
|
+
"whitelist.table.empty": "Немає адрес електронної пошти",
|
|
3188
|
+
"whitelist.delete.label": "Видалити",
|
|
3189
|
+
"page.title.oidc": "OIDC",
|
|
3190
|
+
"enforce.title": "Примусовий вхід через OIDC",
|
|
3191
|
+
"enforce.toggle.enabled": "Увімкнено",
|
|
3192
|
+
"enforce.toggle.disabled": "Вимкнено",
|
|
3193
|
+
"enforce.warning": "Переконайтеся, що OIDC налаштовано правильно, перш ніж зберігати зміни, інакше ви не зможете увійти звичайним способом.",
|
|
3194
|
+
"enforce.config.info": "Примусове застосування контролюється змінною конфігурації OIDC_ENFORCE і не може бути змінено тут.",
|
|
3195
|
+
"login.settings.title": "Налаштування входу",
|
|
3196
|
+
"login.sso": "Вхід через SSO",
|
|
3197
|
+
"pagination.total": "{count, plural, one {# запис} few {# записи} many {# записів} other {# записів}}",
|
|
3198
|
+
"whitelist.import": "Імпорт",
|
|
3199
|
+
"whitelist.export": "Експорт",
|
|
3200
|
+
"whitelist.delete.all.label": "Видалити все",
|
|
3201
|
+
"whitelist.delete.all.title": "Видалити всі записи",
|
|
3202
|
+
"whitelist.delete.all.description": "Це назавжди видалить всі {count, plural, one {# запис} few {# записи} many {# записів} other {# записів}} з білого списку. Не保存тені зміни будуть втрачені.",
|
|
3203
|
+
"whitelist.import.error": "Неправильний файл — очікувався масив JSON об'єктів з полем електронної пошти.",
|
|
3204
|
+
"whitelist.import.success": "Імпортовано {count, plural, one {# новий запис} few {# нові записи} many {# нових записів} other {# нових записів}}.",
|
|
3205
|
+
"whitelist.import.none": "Немає нових записів — всі електронні листи вже є в білому списку.",
|
|
3206
|
+
"unsaved.title": "Не збережені зміни",
|
|
3207
|
+
"unsaved.description": "У вас є не збережені зміни, які будуть втрачені, якщо ви вийдете. Бажаєте продовжити?",
|
|
3208
|
+
"unsaved.confirm": "Вийти",
|
|
3209
|
+
"unsaved.cancel": "Залишитись",
|
|
3210
|
+
"auditlog.title": "Журнали аудиту",
|
|
3211
|
+
"auditlog.export": "Завантажити",
|
|
3212
|
+
"auditlog.table.timestamp": "Часова мітка",
|
|
3213
|
+
"auditlog.table.action": "Дія",
|
|
3214
|
+
"auditlog.table.email": "Електронна пошта",
|
|
3215
|
+
"auditlog.table.ip": "IP",
|
|
3216
|
+
"auditlog.table.details": "Деталі",
|
|
3217
|
+
"auditlog.table.empty": "Немає записів журналу аудиту",
|
|
3218
|
+
"auditlog.clear": "Очистити журнали",
|
|
3219
|
+
"auditlog.clear.title": "Очистити всі журнали",
|
|
3220
|
+
"auditlog.clear.description": "Це назавжди видалить всі {count, plural, one {# запис журналу аудиту} few {# записи журналу аудиту} many {# записів журналу аудиту} other {# записів журналу аудиту}}. Цю дію не можна скасувати.",
|
|
3221
|
+
"auditlog.clear.success": "Журнали аудиту очищено",
|
|
3222
|
+
"auditlog.clear.error": "Не вдалося очистити журнали аудиту",
|
|
3223
|
+
"auditlog.export.error": "Не вдалося експортувати журнали аудиту",
|
|
3224
|
+
"auditlog.filters": "Фільтри",
|
|
3225
|
+
"auditlog.filters.action": "Дія",
|
|
3226
|
+
"auditlog.filters.email": "Електронна пошта",
|
|
3227
|
+
"auditlog.filters.ip": "IP-адреса",
|
|
3228
|
+
"auditlog.filters.createdAt": "Дата",
|
|
3229
|
+
"auditlog.filters.clear": "Очистити фільтри",
|
|
3230
|
+
"auditlog.filters.empty": "Немає записів, що відповідають поточним фільтрам",
|
|
3231
|
+
"auditlog.calendar.prevMonth": "Попередній місяць",
|
|
3232
|
+
"auditlog.calendar.nextMonth": "Наступний місяць",
|
|
3233
|
+
"auditlog.calendar.state.today": "сьогодні",
|
|
3234
|
+
"auditlog.calendar.state.selected": "вибрано",
|
|
3235
|
+
"auditlog.calendar.state.alreadyAdded": "вже додано",
|
|
3236
|
+
"auditlog.calendar.state.future": "недоступно, майбутня дата",
|
|
3237
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
3238
|
+
"auditlog.action.login_success": "Користувач успішно пройшов автентифікацію через OIDC і отримав доступ.",
|
|
3239
|
+
"auditlog.action.user_created": "Новий обліковий запис адміністратора Strapi був створений для цього користувача під час його першого входу через OIDC.",
|
|
3240
|
+
"auditlog.action.logout": "Користувач вийшов із системи, і його сеанс OIDC був завершений.",
|
|
3241
|
+
"auditlog.action.session_expired": "Токен доступу OIDC стік на момент виходу користувача із системи, тому сеанс провайдера не міг бути завершений віддалено.",
|
|
3242
|
+
"auditlog.action.login_failure": "Під час потоку входу в OIDC сталася несподівана помилка.",
|
|
3243
|
+
"auditlog.action.missing_code": "Зворотний виклик OIDC був отриманий без коду авторизації. Це може вказувати на неправильно налаштованого провайдера або підроблений запит.",
|
|
3244
|
+
"auditlog.action.state_mismatch": "Параметр стану у зворотному виклику не відповідав тому, що зберігався в сеансі. Це може вказувати на спробу CSRF або сеанс входу, що стік.",
|
|
3245
|
+
"auditlog.action.nonce_mismatch": "Nonce в токені ідентифікатора не відповідав тому, що був згенерований під час входу. Це може вказувати на атаку відтворення токена.",
|
|
3246
|
+
"auditlog.action.token_exchange_failed": "Код авторизації не можна обміняти на токени. Провайдер OIDC відхилив запит.",
|
|
3247
|
+
"auditlog.action.whitelist_rejected": "Адреса електронної пошти користувача відсутня в білому списку. У доступі відмовлено.",
|
|
3248
|
+
"auditlog.action.email_not_verified": "Провайдер OIDC не підтвердив адресу електронної пошти користувача як перевірену. У доступі відмовлено.",
|
|
3249
|
+
"auditlog.action.id_token_invalid": "Токен ідентифікатора не пройшов перевірку підпису, видавця, аудиторії або закінчення терміну дії. У доступі відмовлено.",
|
|
3250
|
+
"auth.page.authenticating.title": "Автентифікація...",
|
|
3251
|
+
"auth.page.authenticating.noscript.heading": "Потрібен JavaScript",
|
|
3252
|
+
"auth.page.authenticating.noscript.body": "JavaScript має бути увімкнений для завершення автентифікації.",
|
|
3253
|
+
"auth.page.error.title": "Помилка автентифікації",
|
|
3254
|
+
"auth.page.error.returnToLogin": "Повернутися до входу",
|
|
3255
|
+
"user.missing_code": "Код авторизації не був отриманий від провайдера OIDC.",
|
|
3256
|
+
"user.invalid_state": "Невідповідність параметра стану. Будь ласка, перезапустіть потік входу.",
|
|
3257
|
+
"user.signInError": "Автентифікація не вдалася. Будь ласка, спробуйте ще раз.",
|
|
3258
|
+
"settings.section": "OIDC",
|
|
3259
|
+
"settings.configuration": "Конфігурація",
|
|
3260
|
+
"audit.login_failure": "Помилка: {message}",
|
|
3261
|
+
"audit.roles_updated": "Ролі оновлено до: {roles}",
|
|
3262
|
+
"audit.user_created": "Призначені ролі: {roles}"
|
|
3263
|
+
};
|
|
3264
|
+
const __vite_glob_0_23 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
3265
|
+
__proto__: null,
|
|
3266
|
+
default: uk
|
|
3267
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
3268
|
+
const vi = {
|
|
3269
|
+
"global.plugins.strapi-plugin-oidc": "Plugin OIDC",
|
|
3270
|
+
"page.title": "Định cấu hình các vai trò OIDC mặc định và kiểm soát truy cập.",
|
|
3271
|
+
"roles.notes": "Chọn vai trò mặc định được chỉ định cho người dùng mới khi đăng nhập lần đầu. Cài đặt này không ảnh hưởng đến người dùng hiện có.",
|
|
3272
|
+
"page.save": "Lưu thay đổi",
|
|
3273
|
+
"page.save.success": "Cài đặt đã được cập nhật",
|
|
3274
|
+
"page.save.error": "Cập nhật thất bại.",
|
|
3275
|
+
"page.add": "Thêm",
|
|
3276
|
+
"page.cancel": "Hủy",
|
|
3277
|
+
"common.remove": "Xóa {label}",
|
|
3278
|
+
"page.ok": "OK",
|
|
3279
|
+
"roles.title": "Vai trò mặc định",
|
|
3280
|
+
"roles.placeholder": "Chọn vai trò mặc định",
|
|
3281
|
+
"whitelist.title": "Danh sách trắng",
|
|
3282
|
+
"whitelist.error.unique": "Địa chỉ email đã được đăng ký.",
|
|
3283
|
+
"whitelist.description": "Giới hạn xác thực OIDC cho các địa chỉ email cụ thể. Người dùng nhận vai trò từ ánh xạ vai trò OIDC mặc định hoặc nhóm OIDC của họ.",
|
|
3284
|
+
"alert.title.success": "Thành công",
|
|
3285
|
+
"alert.title.error": "Lỗi",
|
|
3286
|
+
"alert.title.info": "Thông tin",
|
|
3287
|
+
"pagination.previous": "Đi đến trang trước",
|
|
3288
|
+
"pagination.page": "Đi đến trang {page}",
|
|
3289
|
+
"pagination.next": "Đi đến trang tiếp theo",
|
|
3290
|
+
"whitelist.table.no": "Số",
|
|
3291
|
+
"whitelist.table.email": "Email",
|
|
3292
|
+
"whitelist.table.created": "Đã tạo",
|
|
3293
|
+
"whitelist.delete.title": "Xác nhận",
|
|
3294
|
+
"whitelist.delete.description": "Bạn có chắc chắn muốn xóa:",
|
|
3295
|
+
"whitelist.delete.note": "Điều này sẽ không xóa tài khoản người dùng trong Strapi.",
|
|
3296
|
+
"whitelist.toggle.enabled": "Đã bật",
|
|
3297
|
+
"whitelist.toggle.disabled": "Đã tắt",
|
|
3298
|
+
"whitelist.email.placeholder": "Địa chỉ email",
|
|
3299
|
+
"whitelist.table.empty": "Không có địa chỉ email",
|
|
3300
|
+
"whitelist.delete.label": "Xóa",
|
|
3301
|
+
"page.title.oidc": "OIDC",
|
|
3302
|
+
"enforce.title": "Bắt buộc đăng nhập OIDC",
|
|
3303
|
+
"enforce.toggle.enabled": "Đã bật",
|
|
3304
|
+
"enforce.toggle.disabled": "Đã tắt",
|
|
3305
|
+
"enforce.warning": "Đảm bảo OIDC được thiết lập đúng trước khi lưu thay đổi, bạn sẽ không thể đăng nhập bình thường.",
|
|
3306
|
+
"enforce.config.info": "Việc thực thi được kiểm soát bởi biến cấu hình OIDC_ENFORCE và không thể thay đổi tại đây.",
|
|
3307
|
+
"login.settings.title": "Cài đặt đăng nhập",
|
|
3308
|
+
"login.sso": "Đăng nhập qua SSO",
|
|
3309
|
+
"pagination.total": "{count, plural, other {# mục}}",
|
|
3310
|
+
"whitelist.import": "Nhập",
|
|
3311
|
+
"whitelist.export": "Xuất",
|
|
3312
|
+
"whitelist.delete.all.label": "Xóa tất cả",
|
|
3313
|
+
"whitelist.delete.all.title": "Xóa tất cả các mục",
|
|
3314
|
+
"whitelist.delete.all.description": "Điều này sẽ xóa vĩnh viễn tất cả {count, plural, other {# mục}} khỏi danh sách trắng. Các thay đổi chưa lưu sẽ bị mất.",
|
|
3315
|
+
"whitelist.import.error": "Tệp không hợp lệ — mong đợi một mảng JSON của các đối tượng có trường email.",
|
|
3316
|
+
"whitelist.import.success": "Đã nhập {count, plural, other {# mục mới}}.",
|
|
3317
|
+
"whitelist.import.none": "Không có mục mới — tất cả email đã có trong danh sách trắng.",
|
|
3318
|
+
"unsaved.title": "Thay đổi chưa lưu",
|
|
3319
|
+
"unsaved.description": "Bạn có những thay đổi chưa lưu sẽ bị mất nếu bạn rời đi. Bạn có muốn tiếp tục không?",
|
|
3320
|
+
"unsaved.confirm": "Rời đi",
|
|
3321
|
+
"unsaved.cancel": "Ở lại",
|
|
3322
|
+
"auditlog.title": "Nhật ký kiểm toán",
|
|
3323
|
+
"auditlog.export": "Tải xuống",
|
|
3324
|
+
"auditlog.table.timestamp": "Dấu thời gian",
|
|
3325
|
+
"auditlog.table.action": "Hành động",
|
|
3326
|
+
"auditlog.table.email": "Email",
|
|
3327
|
+
"auditlog.table.ip": "IP",
|
|
3328
|
+
"auditlog.table.details": "Chi tiết",
|
|
3329
|
+
"auditlog.table.empty": "Không có mục nhật ký kiểm toán",
|
|
3330
|
+
"auditlog.clear": "Xóa nhật ký",
|
|
3331
|
+
"auditlog.clear.title": "Xóa tất cả nhật ký",
|
|
3332
|
+
"auditlog.clear.description": "Điều này sẽ xóa vĩnh viễn tất cả {count, plural, other {# mục nhật ký kiểm toán}}. Hành động này không thể hoàn tác.",
|
|
3333
|
+
"auditlog.clear.success": "Đã xóa nhật ký kiểm toán",
|
|
3334
|
+
"auditlog.clear.error": "Không thể xóa nhật ký kiểm toán",
|
|
3335
|
+
"auditlog.export.error": "Không thể xuất nhật ký kiểm toán",
|
|
3336
|
+
"auditlog.filters": "Bộ lọc",
|
|
3337
|
+
"auditlog.filters.action": "Hành động",
|
|
3338
|
+
"auditlog.filters.email": "Email",
|
|
3339
|
+
"auditlog.filters.ip": "Địa chỉ IP",
|
|
3340
|
+
"auditlog.filters.createdAt": "Ngày",
|
|
3341
|
+
"auditlog.filters.clear": "Xóa bộ lọc",
|
|
3342
|
+
"auditlog.filters.empty": "Không có mục nào khớp với bộ lọc hiện tại",
|
|
3343
|
+
"auditlog.calendar.prevMonth": "Tháng trước",
|
|
3344
|
+
"auditlog.calendar.nextMonth": "Tháng sau",
|
|
3345
|
+
"auditlog.calendar.state.today": "hôm nay",
|
|
3346
|
+
"auditlog.calendar.state.selected": "đã chọn",
|
|
3347
|
+
"auditlog.calendar.state.alreadyAdded": "đã thêm rồi",
|
|
3348
|
+
"auditlog.calendar.state.future": "không khả dụng, ngày trong tương lai",
|
|
3349
|
+
"auditlog.calendar.dayWithState": "{date}, {state}",
|
|
3350
|
+
"auditlog.action.login_success": "Người dùng đã được xác thực thành công qua OIDC và được cấp quyền truy cập.",
|
|
3351
|
+
"auditlog.action.user_created": "Một tài khoản quản trị Strapi mới đã được tạo cho người dùng này khi đăng nhập OIDC lần đầu tiên.",
|
|
3352
|
+
"auditlog.action.logout": "Người dùng đã đăng xuất và phiên OIDC của họ đã kết thúc.",
|
|
3353
|
+
"auditlog.action.session_expired": "Mã thông báo truy cập OIDC đã hết hạn vào thời điểm người dùng đăng xuất, vì vậy phiên của nhà cung cấp không thể chấm dứt từ xa.",
|
|
3354
|
+
"auditlog.action.login_failure": "Đã xảy ra lỗi không mong đợi trong luồng đăng nhập OIDC.",
|
|
3355
|
+
"auditlog.action.missing_code": "Đã nhận được callback OIDC mà không có mã ủy quyền. Điều này có thể cho thấy nhà cung cấp được định cấu hình sai hoặc yêu cầu bị giả mạo.",
|
|
3356
|
+
"auditlog.action.state_mismatch": "Tham số trạng thái trong callback không khớp với tham số được lưu trữ trong phiên. Điều này có thể cho thấy nỗ lực CSRF hoặc phiên đăng nhập đã hết hạn.",
|
|
3357
|
+
"auditlog.action.nonce_mismatch": "Nonce trong mã thông báo ID không khớp với nonce được tạo tại thời điểm đăng nhập. Điều này có thể cho thấy một cuộc tấn công phát lại mã thông báo.",
|
|
3358
|
+
"auditlog.action.token_exchange_failed": "Mã ủy quyền không thể được trao đổi lấy mã thông báo. Nhà cung cấp OIDC đã từ chối yêu cầu.",
|
|
3359
|
+
"auditlog.action.whitelist_rejected": "Địa chỉ email của người dùng không có trong danh sách trắng. Quyền truy cập đã bị từ chối.",
|
|
3360
|
+
"auditlog.action.email_not_verified": "Nhà cung cấp OIDC đã không xác nhận địa chỉ email của người dùng là đã được xác minh. Quyền truy cập đã bị từ chối.",
|
|
3361
|
+
"auditlog.action.id_token_invalid": "Mã thông báo ID không đạt được xác minh chữ ký, người phát hành, đối tượng hoặc hết hạn. Quyền truy cập đã bị từ chối.",
|
|
3362
|
+
"auth.page.authenticating.title": "Đang xác thực...",
|
|
3363
|
+
"auth.page.authenticating.noscript.heading": "Yêu cầu JavaScript",
|
|
3364
|
+
"auth.page.authenticating.noscript.body": "JavaScript phải được bật để hoàn tất xác thực.",
|
|
3365
|
+
"auth.page.error.title": "Xác thực thất bại",
|
|
3366
|
+
"auth.page.error.returnToLogin": "Quay lại đăng nhập",
|
|
3367
|
+
"user.missing_code": "Không nhận được mã ủy quyền từ nhà cung cấp OIDC.",
|
|
3368
|
+
"user.invalid_state": "Không khớp tham số trạng thái. Vui lòng khởi động lại luồng đăng nhập.",
|
|
3369
|
+
"user.signInError": "Xác thực thất bại. Vui lòng thử lại.",
|
|
3370
|
+
"settings.section": "OIDC",
|
|
3371
|
+
"settings.configuration": "Cấu hình",
|
|
3372
|
+
"audit.login_failure": "Lỗi: {message}",
|
|
3373
|
+
"audit.roles_updated": "Vai trò đã được cập nhật thành: {roles}",
|
|
3374
|
+
"audit.user_created": "Vai trò được chỉ định: {roles}"
|
|
3375
|
+
};
|
|
3376
|
+
const __vite_glob_0_24 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
3377
|
+
__proto__: null,
|
|
3378
|
+
default: vi
|
|
3379
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
3380
|
+
const zhHans = {
|
|
3381
|
+
"global.plugins.strapi-plugin-oidc": "OIDC插件",
|
|
3382
|
+
"page.title": "配置OIDC默认角色和访问控制。",
|
|
3383
|
+
"roles.notes": "选择在新用户首次登录时分配的默认角色。此设置不影响现有用户。",
|
|
3384
|
+
"page.save": "保存更改",
|
|
3385
|
+
"page.save.success": "设置已更新",
|
|
3386
|
+
"page.save.error": "更新失败。",
|
|
3387
|
+
"page.add": "添加",
|
|
3388
|
+
"page.cancel": "取消",
|
|
3389
|
+
"common.remove": "删除 {label}",
|
|
3390
|
+
"page.ok": "确定",
|
|
3391
|
+
"roles.title": "默认角色",
|
|
3392
|
+
"roles.placeholder": "选择默认角色",
|
|
3393
|
+
"whitelist.title": "白名单",
|
|
3394
|
+
"whitelist.error.unique": "电子邮件地址已注册。",
|
|
3395
|
+
"whitelist.description": "将OIDC身份验证限制为特定电子邮件地址。用户从默认OIDC角色映射或其OIDC组接收角色。",
|
|
3396
|
+
"alert.title.success": "成功",
|
|
3397
|
+
"alert.title.error": "错误",
|
|
3398
|
+
"alert.title.info": "信息",
|
|
3399
|
+
"pagination.previous": "转到上一页",
|
|
3400
|
+
"pagination.page": "转到第 {page} 页",
|
|
3401
|
+
"pagination.next": "转到下一页",
|
|
3402
|
+
"whitelist.table.no": "编号",
|
|
3403
|
+
"whitelist.table.email": "电子邮件",
|
|
3404
|
+
"whitelist.table.created": "创建于",
|
|
3405
|
+
"whitelist.delete.title": "确认",
|
|
3406
|
+
"whitelist.delete.description": "您确定要删除:",
|
|
3407
|
+
"whitelist.delete.note": "这不会删除Strapi中的用户账户。",
|
|
3408
|
+
"whitelist.toggle.enabled": "已启用",
|
|
3409
|
+
"whitelist.toggle.disabled": "已禁用",
|
|
3410
|
+
"whitelist.email.placeholder": "电子邮件地址",
|
|
3411
|
+
"whitelist.table.empty": "无电子邮件地址",
|
|
3412
|
+
"whitelist.delete.label": "删除",
|
|
3413
|
+
"page.title.oidc": "OIDC",
|
|
3414
|
+
"enforce.title": "强制OIDC登录",
|
|
3415
|
+
"enforce.toggle.enabled": "已启用",
|
|
3416
|
+
"enforce.toggle.disabled": "已禁用",
|
|
3417
|
+
"enforce.warning": "在保存更改之前请确保OIDC正确配置,否则您将无法正常登录。",
|
|
3418
|
+
"enforce.config.info": "强制由OIDC_ENFORCE配置变量控制,无法在此处更改。",
|
|
3419
|
+
"login.settings.title": "登录设置",
|
|
3420
|
+
"login.sso": "通过SSO登录",
|
|
3421
|
+
"pagination.total": "{count, plural, other {# 条目}}",
|
|
3422
|
+
"whitelist.import": "导入",
|
|
3423
|
+
"whitelist.export": "导出",
|
|
3424
|
+
"whitelist.delete.all.label": "删除全部",
|
|
3425
|
+
"whitelist.delete.all.title": "删除所有条目",
|
|
3426
|
+
"whitelist.delete.all.description": "这将永久从白名单中删除所有 {count, plural, other {# 条目}}。未保存的更改将丢失。",
|
|
3427
|
+
"whitelist.import.error": "文件无效 — 期望的是具有电子邮件字段的JSON对象数组。",
|
|
3428
|
+
"whitelist.import.success": "已导入 {count, plural, other {# 条新条目}}。",
|
|
3429
|
+
"whitelist.import.none": "无新条目 — 所有电子邮件都已在白名单中。",
|
|
3430
|
+
"unsaved.title": "未保存的更改",
|
|
3431
|
+
"unsaved.description": "您有未保存的更改,如果离开将会丢失。您要继续吗?",
|
|
3432
|
+
"unsaved.confirm": "离开",
|
|
3433
|
+
"unsaved.cancel": "留下",
|
|
3434
|
+
"auditlog.title": "审计日志",
|
|
3435
|
+
"auditlog.export": "下载",
|
|
3436
|
+
"auditlog.table.timestamp": "时间戳",
|
|
3437
|
+
"auditlog.table.action": "操作",
|
|
3438
|
+
"auditlog.table.email": "电子邮件",
|
|
3439
|
+
"auditlog.table.ip": "IP",
|
|
3440
|
+
"auditlog.table.details": "详情",
|
|
3441
|
+
"auditlog.table.empty": "无审计日志条目",
|
|
3442
|
+
"auditlog.clear": "清除日志",
|
|
3443
|
+
"auditlog.clear.title": "清除所有日志",
|
|
3444
|
+
"auditlog.clear.description": "这将永久删除所有 {count, plural, other {# 条审计日志条目}}。此操作无法撤销。",
|
|
3445
|
+
"auditlog.clear.success": "审计日志已清除",
|
|
3446
|
+
"auditlog.clear.error": "清除审计日志失败",
|
|
3447
|
+
"auditlog.export.error": "导出审计日志失败",
|
|
3448
|
+
"auditlog.filters": "筛选器",
|
|
3449
|
+
"auditlog.filters.action": "操作",
|
|
3450
|
+
"auditlog.filters.email": "电子邮件",
|
|
3451
|
+
"auditlog.filters.ip": "IP地址",
|
|
3452
|
+
"auditlog.filters.createdAt": "日期",
|
|
3453
|
+
"auditlog.filters.clear": "清除筛选器",
|
|
3454
|
+
"auditlog.filters.empty": "没有条目符合当前筛选器",
|
|
3455
|
+
"auditlog.calendar.prevMonth": "上个月",
|
|
3456
|
+
"auditlog.calendar.nextMonth": "下个月",
|
|
3457
|
+
"auditlog.calendar.state.today": "今天",
|
|
3458
|
+
"auditlog.calendar.state.selected": "已选择",
|
|
3459
|
+
"auditlog.calendar.state.alreadyAdded": "已添加",
|
|
3460
|
+
"auditlog.calendar.state.future": "不可用,未来的日期",
|
|
3461
|
+
"auditlog.calendar.dayWithState": "{date},{state}",
|
|
3462
|
+
"auditlog.action.login_success": "用户已通过OIDC成功认证并被授予访问权限。",
|
|
3463
|
+
"auditlog.action.user_created": "在用户首次OIDC登录时,为该用户创建了新的Strapi管理员账户。",
|
|
3464
|
+
"auditlog.action.logout": "用户已登出,其OIDC会话已结束。",
|
|
3465
|
+
"auditlog.action.session_expired": "在用户登出时,OIDC访问令牌已过期,因此无法远程终止提供商会话。",
|
|
3466
|
+
"auditlog.action.login_failure": "在OIDC登录流程中发生意外错误。",
|
|
3467
|
+
"auditlog.action.missing_code": "收到OIDC回调但没有授权码。这可能表示提供者配置错误或请求被篡改。",
|
|
3468
|
+
"auditlog.action.state_mismatch": "回调中的状态参数与存储在会话中的不匹配。这可能表示CSRF尝试或登录会话已过期。",
|
|
3469
|
+
"auditlog.action.nonce_mismatch": "ID令牌中的nonce与登录时生成的不匹配。这可能表示令牌重放攻击。",
|
|
3470
|
+
"auditlog.action.token_exchange_failed": "无法将授权码交换为令牌。OIDC提供者拒绝了请求。",
|
|
3471
|
+
"auditlog.action.whitelist_rejected": "用户的电子邮件地址不在白名单上。访问被拒绝。",
|
|
3472
|
+
"auditlog.action.email_not_verified": "OIDC提供者未确认用户的电子邮件地址已验证。访问被拒绝。",
|
|
3473
|
+
"auditlog.action.id_token_invalid": "ID令牌未通过签名、发行者、受众或过期验证。访问被拒绝。",
|
|
3474
|
+
"auth.page.authenticating.title": "正在认证...",
|
|
3475
|
+
"auth.page.authenticating.noscript.heading": "需要JavaScript",
|
|
3476
|
+
"auth.page.authenticating.noscript.body": "必须启用JavaScript才能完成认证。",
|
|
3477
|
+
"auth.page.error.title": "认证失败",
|
|
3478
|
+
"auth.page.error.returnToLogin": "返回登录",
|
|
3479
|
+
"user.missing_code": "未从OIDC提供者收到授权码。",
|
|
3480
|
+
"user.invalid_state": "状态参数不匹配。请重新启动登录流程。",
|
|
3481
|
+
"user.signInError": "认证失败。请重试。",
|
|
3482
|
+
"settings.section": "OIDC",
|
|
3483
|
+
"settings.configuration": "配置",
|
|
3484
|
+
"audit.login_failure": "错误:{message}",
|
|
3485
|
+
"audit.roles_updated": "角色已更新为:{roles}",
|
|
3486
|
+
"audit.user_created": "分配的角色:{roles}"
|
|
3487
|
+
};
|
|
3488
|
+
const __vite_glob_0_25 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
3489
|
+
__proto__: null,
|
|
3490
|
+
default: zhHans
|
|
3491
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
3492
|
+
const zh = {
|
|
3493
|
+
"global.plugins.strapi-plugin-oidc": "OIDC 插件",
|
|
3494
|
+
"page.title": "設定OIDC預設角色和存取控制。",
|
|
3495
|
+
"roles.notes": "選擇首次登入時分配給新使用者的預設角色。此設定不影響現有使用者。",
|
|
3496
|
+
"page.save": "儲存變更",
|
|
3497
|
+
"page.save.success": "設定已更新",
|
|
3498
|
+
"page.save.error": "更新失敗。",
|
|
3499
|
+
"page.add": "新增",
|
|
3500
|
+
"page.cancel": "取消",
|
|
3501
|
+
"common.remove": "移除 {label}",
|
|
3502
|
+
"page.ok": "確定",
|
|
3503
|
+
"roles.title": "預設角色",
|
|
3504
|
+
"roles.placeholder": "選擇預設角色",
|
|
3505
|
+
"whitelist.title": "白名單",
|
|
3506
|
+
"whitelist.error.unique": "電子郵件地址已註冊。",
|
|
3507
|
+
"whitelist.description": "將OIDC驗證限制為特定電子郵件地址。使用者從預設OIDC角色對應或其OIDC群組接收角色。",
|
|
3508
|
+
"alert.title.success": "成功",
|
|
3509
|
+
"alert.title.error": "錯誤",
|
|
3510
|
+
"alert.title.info": "資訊",
|
|
3511
|
+
"pagination.previous": "前往上一頁",
|
|
3512
|
+
"pagination.page": "前往第 {page} 頁",
|
|
3513
|
+
"pagination.next": "前往下一頁",
|
|
3514
|
+
"whitelist.table.no": "編號",
|
|
3515
|
+
"whitelist.table.email": "電子郵件",
|
|
3516
|
+
"whitelist.table.created": "建立於",
|
|
3517
|
+
"whitelist.delete.title": "確認",
|
|
3518
|
+
"whitelist.delete.description": "您確定要刪除:",
|
|
3519
|
+
"whitelist.delete.note": "這不會刪除Strapi中的使用者帳戶。",
|
|
3520
|
+
"whitelist.toggle.enabled": "已啟用",
|
|
3521
|
+
"whitelist.toggle.disabled": "已停用",
|
|
3522
|
+
"whitelist.email.placeholder": "電子郵件地址",
|
|
3523
|
+
"whitelist.table.empty": "無電子郵件地址",
|
|
3524
|
+
"whitelist.delete.label": "刪除",
|
|
3525
|
+
"page.title.oidc": "OIDC",
|
|
3526
|
+
"enforce.title": "強制OIDC登入",
|
|
3527
|
+
"enforce.toggle.enabled": "已啟用",
|
|
3528
|
+
"enforce.toggle.disabled": "已停用",
|
|
3529
|
+
"enforce.warning": "在儲存變更之前請確保OIDC正確設定,否則您將無法正常登入。",
|
|
3530
|
+
"enforce.config.info": "強制由OIDC_ENFORCE設定變數控制,無法在此處變更。",
|
|
3531
|
+
"login.settings.title": "登入設定",
|
|
3532
|
+
"login.sso": "透過SSO登入",
|
|
3533
|
+
"pagination.total": "{count, plural, other {# 項目}}",
|
|
3534
|
+
"whitelist.import": "匯入",
|
|
3535
|
+
"whitelist.export": "匯出",
|
|
3536
|
+
"whitelist.delete.all.label": "刪除全部",
|
|
3537
|
+
"whitelist.delete.all.title": "刪除所有項目",
|
|
3538
|
+
"whitelist.delete.all.description": "這將永久從白名單中移除所有 {count, plural, other {# 項目}}。未儲存的變更將遺失。",
|
|
3539
|
+
"whitelist.import.error": "檔案無效 — 預期的是具有電子郵件欄位的JSON物件陣列。",
|
|
3540
|
+
"whitelist.import.success": "已匯入 {count, plural, other {# 個新項目}}。",
|
|
3541
|
+
"whitelist.import.none": "無新項目 — 所有電子郵件都已在白名單中。",
|
|
3542
|
+
"unsaved.title": "未儲存的變更",
|
|
3543
|
+
"unsaved.description": "您有未儲存的變更,如果離開將會遺失。您要繼續嗎?",
|
|
3544
|
+
"unsaved.confirm": "離開",
|
|
3545
|
+
"unsaved.cancel": "留下",
|
|
3546
|
+
"auditlog.title": "稽核日誌",
|
|
3547
|
+
"auditlog.export": "下載",
|
|
3548
|
+
"auditlog.table.timestamp": "時間戳記",
|
|
3549
|
+
"auditlog.table.action": "操作",
|
|
3550
|
+
"auditlog.table.email": "電子郵件",
|
|
3551
|
+
"auditlog.table.ip": "IP",
|
|
3552
|
+
"auditlog.table.details": "詳情",
|
|
3553
|
+
"auditlog.table.empty": "無稽核日誌項目",
|
|
3554
|
+
"auditlog.clear": "清除日誌",
|
|
3555
|
+
"auditlog.clear.title": "清除所有日誌",
|
|
3556
|
+
"auditlog.clear.description": "這將永久刪除所有 {count, plural, other {# 個稽核日誌項目}}。此動作無法復原。",
|
|
3557
|
+
"auditlog.clear.success": "稽核日誌已清除",
|
|
3558
|
+
"auditlog.clear.error": "清除稽核日誌失敗",
|
|
3559
|
+
"auditlog.export.error": "匯出稽核日誌失敗",
|
|
3560
|
+
"auditlog.filters": "篩選器",
|
|
3561
|
+
"auditlog.filters.action": "操作",
|
|
3562
|
+
"auditlog.filters.email": "電子郵件",
|
|
3563
|
+
"auditlog.filters.ip": "IP 位址",
|
|
3564
|
+
"auditlog.filters.createdAt": "日期",
|
|
3565
|
+
"auditlog.filters.clear": "清除篩選器",
|
|
3566
|
+
"auditlog.filters.empty": "沒有項目符合目前篩選器",
|
|
3567
|
+
"auditlog.calendar.prevMonth": "上個月",
|
|
3568
|
+
"auditlog.calendar.nextMonth": "下個月",
|
|
3569
|
+
"auditlog.calendar.state.today": "今天",
|
|
3570
|
+
"auditlog.calendar.state.selected": "已選擇",
|
|
3571
|
+
"auditlog.calendar.state.alreadyAdded": "已新增",
|
|
3572
|
+
"auditlog.calendar.state.future": "不可用,未來的日期",
|
|
3573
|
+
"auditlog.calendar.dayWithState": "{date},{state}",
|
|
3574
|
+
"auditlog.action.login_success": "使用者已透過OIDC成功驗證並被授予存取權限。",
|
|
3575
|
+
"auditlog.action.user_created": "在使用者首次OIDC登入時,為該使用者建立了新的Strapi管理員帳戶。",
|
|
3576
|
+
"auditlog.action.logout": "使用者已登出,其OIDC工作階段已結束。",
|
|
3577
|
+
"auditlog.action.session_expired": "在使用者登出時,OIDC存取權杖已過期,因此無法遠端終止供應商工作階段。",
|
|
3578
|
+
"auditlog.action.login_failure": "在OIDC登入流程中發生意外錯誤。",
|
|
3579
|
+
"auditlog.action.missing_code": "收到OIDC回呼但沒有授權碼。這可能表示供應商設定錯誤或請求被竄改。",
|
|
3580
|
+
"auditlog.action.state_mismatch": "回呼中的狀態參數與儲存在工作階段中的不相符。這可能表示CSRF嘗試或登入工作階段已過期。",
|
|
3581
|
+
"auditlog.action.nonce_mismatch": "ID權杖中的nonce與登入時產生的不相符。這可能表示權杖重放攻擊。",
|
|
3582
|
+
"auditlog.action.token_exchange_failed": "無法將授權碼交換為權杖。OIDC供應商拒絕了請求。",
|
|
3583
|
+
"auditlog.action.whitelist_rejected": "使用者的電子郵件地址不在白名單上。存取被拒絕。",
|
|
3584
|
+
"auditlog.action.email_not_verified": "OIDC供應商未確認使用者的電子郵件地址已驗證。存取被拒絕。",
|
|
3585
|
+
"auditlog.action.id_token_invalid": "ID權杖未通過簽章、發行者、對象或過期驗證。存取被拒絕。",
|
|
3586
|
+
"auth.page.authenticating.title": "正在驗證...",
|
|
3587
|
+
"auth.page.authenticating.noscript.heading": "需要JavaScript",
|
|
3588
|
+
"auth.page.authenticating.noscript.body": "必須啟用JavaScript才能完成驗證。",
|
|
3589
|
+
"auth.page.error.title": "驗證失敗",
|
|
3590
|
+
"auth.page.error.returnToLogin": "返回登入",
|
|
3591
|
+
"user.missing_code": "未從OIDC供應商收到授權碼。",
|
|
3592
|
+
"user.invalid_state": "狀態參數不相符。請重新啟動登入流程。",
|
|
3593
|
+
"user.signInError": "驗證失敗。請重試。",
|
|
3594
|
+
"settings.section": "OIDC",
|
|
3595
|
+
"settings.configuration": "設定",
|
|
3596
|
+
"audit.login_failure": "錯誤:{message}",
|
|
3597
|
+
"audit.roles_updated": "角色已更新為:{roles}",
|
|
3598
|
+
"audit.user_created": "指派的角色:{roles}"
|
|
3599
|
+
};
|
|
3600
|
+
const __vite_glob_0_26 = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
|
|
3601
|
+
__proto__: null,
|
|
3602
|
+
default: zh
|
|
3603
|
+
}, Symbol.toStringTag, { value: "Module" }));
|
|
3604
|
+
const modules = /* @__PURE__ */ Object.assign({ "../translations/locales/ar.json": __vite_glob_0_0, "../translations/locales/cs.json": __vite_glob_0_1, "../translations/locales/de.json": __vite_glob_0_2, "../translations/locales/dk.json": __vite_glob_0_3, "../translations/locales/en.json": __vite_glob_0_4, "../translations/locales/es.json": __vite_glob_0_5, "../translations/locales/fr.json": __vite_glob_0_6, "../translations/locales/he.json": __vite_glob_0_7, "../translations/locales/id.json": __vite_glob_0_8, "../translations/locales/it.json": __vite_glob_0_9, "../translations/locales/ja.json": __vite_glob_0_10, "../translations/locales/ko.json": __vite_glob_0_11, "../translations/locales/ms.json": __vite_glob_0_12, "../translations/locales/nl.json": __vite_glob_0_13, "../translations/locales/no.json": __vite_glob_0_14, "../translations/locales/pl.json": __vite_glob_0_15, "../translations/locales/pt-BR.json": __vite_glob_0_16, "../translations/locales/pt.json": __vite_glob_0_17, "../translations/locales/ru.json": __vite_glob_0_18, "../translations/locales/sk.json": __vite_glob_0_19, "../translations/locales/sv.json": __vite_glob_0_20, "../translations/locales/th.json": __vite_glob_0_21, "../translations/locales/tr.json": __vite_glob_0_22, "../translations/locales/uk.json": __vite_glob_0_23, "../translations/locales/vi.json": __vite_glob_0_24, "../translations/locales/zh-Hans.json": __vite_glob_0_25, "../translations/locales/zh.json": __vite_glob_0_26 });
|
|
602
3605
|
const locales = Object.fromEntries(
|
|
603
3606
|
Object.entries(modules).map(([path, mod]) => {
|
|
604
3607
|
const code = path.match(/\/([^/]+)\.json$/)?.[1];
|
|
@@ -626,30 +3629,40 @@ function negotiateLocale(acceptLanguage) {
|
|
|
626
3629
|
function t(locale, key, fallback) {
|
|
627
3630
|
return locales[locale]?.[key] ?? locales[DEFAULT_LOCALE]?.[key] ?? fallback ?? key;
|
|
628
3631
|
}
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
3632
|
+
async function oidcSignIn(ctx) {
|
|
3633
|
+
try {
|
|
3634
|
+
const { OIDC_CLIENT_ID, OIDC_REDIRECT_URI, OIDC_SCOPE, OIDC_AUTHORIZATION_ENDPOINT } = configValidation();
|
|
3635
|
+
const { code_verifier: codeVerifier, code_challenge: codeChallenge } = await pkceChallenge__default.default();
|
|
3636
|
+
const state = node_crypto.randomBytes(32).toString("base64url");
|
|
3637
|
+
const nonce = node_crypto.randomBytes(32).toString("base64url");
|
|
3638
|
+
const cookieOptions = {
|
|
3639
|
+
httpOnly: true,
|
|
3640
|
+
maxAge: PKCE_COOKIE_MAX_AGE_MS,
|
|
3641
|
+
secure: shouldMarkSecure(strapi, ctx),
|
|
3642
|
+
sameSite: "lax"
|
|
3643
|
+
};
|
|
3644
|
+
ctx.cookies.set(COOKIE_NAMES.codeVerifier, codeVerifier, cookieOptions);
|
|
3645
|
+
ctx.cookies.set(COOKIE_NAMES.state, state, cookieOptions);
|
|
3646
|
+
ctx.cookies.set(COOKIE_NAMES.nonce, nonce, cookieOptions);
|
|
3647
|
+
const params = new URLSearchParams({
|
|
3648
|
+
response_type: "code",
|
|
3649
|
+
client_id: OIDC_CLIENT_ID,
|
|
3650
|
+
redirect_uri: OIDC_REDIRECT_URI,
|
|
3651
|
+
scope: OIDC_SCOPE,
|
|
3652
|
+
code_challenge: codeChallenge,
|
|
3653
|
+
code_challenge_method: "S256",
|
|
3654
|
+
state,
|
|
3655
|
+
nonce
|
|
3656
|
+
});
|
|
3657
|
+
const authorizationUrl = `${OIDC_AUTHORIZATION_ENDPOINT}?${params.toString()}`;
|
|
3658
|
+
ctx.set("Location", authorizationUrl);
|
|
3659
|
+
return ctx.send({}, 302);
|
|
3660
|
+
} catch (e) {
|
|
3661
|
+
strapi.log.error({ phase: "oidc_sign_in", message: toMessage(e) });
|
|
3662
|
+
const locale = negotiateLocale(ctx.request.headers["accept-language"]);
|
|
3663
|
+
return ctx.send(getOauthService().renderSignUpError(t(locale, "user.signInError"), locale));
|
|
3664
|
+
}
|
|
3665
|
+
}
|
|
653
3666
|
const TRUSTED_IP_HEADERS = /* @__PURE__ */ new Set([
|
|
654
3667
|
"cf-connecting-ip",
|
|
655
3668
|
"true-client-ip",
|
|
@@ -680,7 +3693,6 @@ function getClientIp(ctx) {
|
|
|
680
3693
|
}
|
|
681
3694
|
return ctx.ip;
|
|
682
3695
|
}
|
|
683
|
-
const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
|
|
684
3696
|
function isValidEmail(email) {
|
|
685
3697
|
return EMAIL_REGEX.test(email);
|
|
686
3698
|
}
|
|
@@ -688,13 +3700,7 @@ function collectGroupMapRoleNames(userInfo, config2) {
|
|
|
688
3700
|
const rawGroups = userInfo[config2.OIDC_GROUP_FIELD];
|
|
689
3701
|
if (!Array.isArray(rawGroups) || rawGroups.length === 0) return [];
|
|
690
3702
|
const groups = rawGroups.filter((g) => typeof g === "string");
|
|
691
|
-
const
|
|
692
|
-
let groupRoleMap;
|
|
693
|
-
try {
|
|
694
|
-
groupRoleMap = typeof raw === "string" ? JSON.parse(raw) : raw;
|
|
695
|
-
} catch {
|
|
696
|
-
return [];
|
|
697
|
-
}
|
|
3703
|
+
const groupRoleMap = parseGroupRoleMap(config2.OIDC_GROUP_ROLE_MAP);
|
|
698
3704
|
const roleNameSet = /* @__PURE__ */ new Set();
|
|
699
3705
|
for (const group of groups) {
|
|
700
3706
|
const roleNames = groupRoleMap[group];
|
|
@@ -721,7 +3727,7 @@ async function registerNewUser(oauthService2, email, userResponseData, config2,
|
|
|
721
3727
|
}
|
|
722
3728
|
function rolesChanged(current, next) {
|
|
723
3729
|
if (current.size !== next.size) return true;
|
|
724
|
-
return [...next].some((
|
|
3730
|
+
return [...next].some((id2) => !current.has(id2));
|
|
725
3731
|
}
|
|
726
3732
|
async function updateUserRoles(user, currentRoleIds, newRoleIds) {
|
|
727
3733
|
try {
|
|
@@ -738,7 +3744,7 @@ async function updateUserRoles(user, currentRoleIds, newRoleIds) {
|
|
|
738
3744
|
userId: user.id,
|
|
739
3745
|
detail: getErrorDetail("role_update_failed", {
|
|
740
3746
|
userId: user.id,
|
|
741
|
-
error: updateErr
|
|
3747
|
+
error: toMessage(updateErr)
|
|
742
3748
|
})
|
|
743
3749
|
});
|
|
744
3750
|
throw updateErr;
|
|
@@ -752,8 +3758,8 @@ async function resolveRolesFromGroups(candidateNames) {
|
|
|
752
3758
|
const nameToId = new Map(matchedRoles.map((r) => [r.name, String(r.id)]));
|
|
753
3759
|
const roles2 = [];
|
|
754
3760
|
for (const name of candidateNames) {
|
|
755
|
-
const
|
|
756
|
-
if (
|
|
3761
|
+
const id2 = nameToId.get(name);
|
|
3762
|
+
if (id2) roles2.push(id2);
|
|
757
3763
|
}
|
|
758
3764
|
return {
|
|
759
3765
|
roles: roles2,
|
|
@@ -850,7 +3856,7 @@ function classifyOidcError(e, userInfo) {
|
|
|
850
3856
|
const dispatch = OIDC_ERROR_DISPATCH[kind];
|
|
851
3857
|
const msg = toMessage(e);
|
|
852
3858
|
let params;
|
|
853
|
-
if (kind === "id_token_parse_failed" || kind === "id_token_invalid" || kind === "unknown") {
|
|
3859
|
+
if (kind === "id_token_parse_failed" || kind === "id_token_invalid" || kind === "provider_response_invalid" || kind === "unknown") {
|
|
854
3860
|
params = { error: msg };
|
|
855
3861
|
} else if (kind === "user_creation_failed" && userInfo?.email) {
|
|
856
3862
|
params = { email: userInfo.email, error: msg };
|
|
@@ -880,8 +3886,10 @@ async function handleCallbackError(e, userInfo, auditLog2, oauthService2, ctx) {
|
|
|
880
3886
|
email: userInfo?.email
|
|
881
3887
|
});
|
|
882
3888
|
const locale = negotiateLocale(ctx.request.headers["accept-language"]);
|
|
883
|
-
ctx.send(oauthService2.renderSignUpError(
|
|
3889
|
+
ctx.send(oauthService2.renderSignUpError(t(locale, "user.signInError"), locale));
|
|
884
3890
|
}
|
|
3891
|
+
const tokenResponseSchema = zod.z.object({ access_token: zod.z.string(), id_token: zod.z.string().optional() }).passthrough();
|
|
3892
|
+
const oidcUserInfoSchema = zod.z.object({ email: zod.z.string().optional() }).passthrough();
|
|
885
3893
|
async function exchangeTokenAndFetchUserInfo(config2, params, expectedNonce) {
|
|
886
3894
|
const response = await fetch(config2.OIDC_TOKEN_ENDPOINT, {
|
|
887
3895
|
method: "POST",
|
|
@@ -893,7 +3901,15 @@ async function exchangeTokenAndFetchUserInfo(config2, params, expectedNonce) {
|
|
|
893
3901
|
if (!response.ok) {
|
|
894
3902
|
throw new OidcError("token_exchange_failed", errorMessages.TOKEN_EXCHANGE_FAILED);
|
|
895
3903
|
}
|
|
896
|
-
const
|
|
3904
|
+
const tokenParseResult = tokenResponseSchema.safeParse(await response.json());
|
|
3905
|
+
if (!tokenParseResult.success) {
|
|
3906
|
+
throw new OidcError(
|
|
3907
|
+
"provider_response_invalid",
|
|
3908
|
+
errorMessages.PROVIDER_RESPONSE_INVALID,
|
|
3909
|
+
tokenParseResult.error
|
|
3910
|
+
);
|
|
3911
|
+
}
|
|
3912
|
+
const tokenData = tokenParseResult.data;
|
|
897
3913
|
if (tokenData.id_token) {
|
|
898
3914
|
const verifiedPayload = await verifyIdToken(tokenData.id_token, config2);
|
|
899
3915
|
try {
|
|
@@ -914,16 +3930,24 @@ async function exchangeTokenAndFetchUserInfo(config2, params, expectedNonce) {
|
|
|
914
3930
|
if (!userResponse.ok) {
|
|
915
3931
|
throw new OidcError("userinfo_fetch_failed", errorMessages.USERINFO_FETCH_FAILED);
|
|
916
3932
|
}
|
|
917
|
-
const
|
|
3933
|
+
const userInfoParseResult = oidcUserInfoSchema.safeParse(await userResponse.json());
|
|
3934
|
+
if (!userInfoParseResult.success) {
|
|
3935
|
+
throw new OidcError(
|
|
3936
|
+
"provider_response_invalid",
|
|
3937
|
+
errorMessages.PROVIDER_RESPONSE_INVALID,
|
|
3938
|
+
userInfoParseResult.error
|
|
3939
|
+
);
|
|
3940
|
+
}
|
|
3941
|
+
const userInfo = userInfoParseResult.data;
|
|
918
3942
|
return { userInfo, accessToken: tokenData.access_token };
|
|
919
3943
|
}
|
|
920
3944
|
function readAndClearPkceCookies(ctx) {
|
|
921
|
-
const oidcState = ctx.cookies.get(
|
|
922
|
-
const codeVerifier = ctx.cookies.get(
|
|
923
|
-
const oidcNonce = ctx.cookies.get(
|
|
924
|
-
ctx.cookies.set(
|
|
925
|
-
ctx.cookies.set(
|
|
926
|
-
ctx.cookies.set(
|
|
3945
|
+
const oidcState = ctx.cookies.get(COOKIE_NAMES.state);
|
|
3946
|
+
const codeVerifier = ctx.cookies.get(COOKIE_NAMES.codeVerifier);
|
|
3947
|
+
const oidcNonce = ctx.cookies.get(COOKIE_NAMES.nonce);
|
|
3948
|
+
ctx.cookies.set(COOKIE_NAMES.state, null);
|
|
3949
|
+
ctx.cookies.set(COOKIE_NAMES.codeVerifier, null);
|
|
3950
|
+
ctx.cookies.set(COOKIE_NAMES.nonce, null);
|
|
927
3951
|
return { oidcState, codeVerifier, oidcNonce };
|
|
928
3952
|
}
|
|
929
3953
|
async function logSuccessfulAuth(auditLog2, ctx, user, userCreated, rolesUpdated, resolvedRoleNames) {
|
|
@@ -957,19 +3981,15 @@ async function oidcSignInCallback(ctx) {
|
|
|
957
3981
|
const locale = negotiateLocale(ctx.request.headers["accept-language"]);
|
|
958
3982
|
if (!ctx.query.code) {
|
|
959
3983
|
await auditLog2.log({ action: "missing_code", ip: getClientIp(ctx) });
|
|
960
|
-
return ctx.send(
|
|
961
|
-
oauthService2.renderSignUpError(userFacingMessages(locale).missing_code, locale)
|
|
962
|
-
);
|
|
3984
|
+
return ctx.send(oauthService2.renderSignUpError(t(locale, "user.missing_code"), locale));
|
|
963
3985
|
}
|
|
964
3986
|
const { oidcState, codeVerifier, oidcNonce } = readAndClearPkceCookies(ctx);
|
|
965
3987
|
if (!ctx.query.state || ctx.query.state !== oidcState) {
|
|
966
3988
|
await auditLog2.log({ action: "state_mismatch", ip: getClientIp(ctx) });
|
|
967
|
-
return ctx.send(
|
|
968
|
-
oauthService2.renderSignUpError(userFacingMessages(locale).invalid_state, locale)
|
|
969
|
-
);
|
|
3989
|
+
return ctx.send(oauthService2.renderSignUpError(t(locale, "user.invalid_state"), locale));
|
|
970
3990
|
}
|
|
971
3991
|
const params = new URLSearchParams({
|
|
972
|
-
code: ctx.query.code,
|
|
3992
|
+
code: String(ctx.query.code),
|
|
973
3993
|
client_id: config2.OIDC_CLIENT_ID,
|
|
974
3994
|
client_secret: config2.OIDC_CLIENT_SECRET,
|
|
975
3995
|
redirect_uri: config2.OIDC_REDIRECT_URI,
|
|
@@ -981,9 +4001,9 @@ async function oidcSignInCallback(ctx) {
|
|
|
981
4001
|
const exchangeResult = await exchangeTokenAndFetchUserInfo(config2, params, oidcNonce ?? "");
|
|
982
4002
|
userInfo = exchangeResult.userInfo;
|
|
983
4003
|
const secureFlag = shouldMarkSecure(strapi, ctx);
|
|
984
|
-
ctx.cookies.set(
|
|
4004
|
+
ctx.cookies.set(COOKIE_NAMES.accessToken, exchangeResult.accessToken, {
|
|
985
4005
|
httpOnly: true,
|
|
986
|
-
maxAge:
|
|
4006
|
+
maxAge: COOKIE_MAX_AGE_MS,
|
|
987
4007
|
secure: secureFlag,
|
|
988
4008
|
sameSite: "lax"
|
|
989
4009
|
});
|
|
@@ -996,7 +4016,7 @@ async function oidcSignInCallback(ctx) {
|
|
|
996
4016
|
config2,
|
|
997
4017
|
ctx
|
|
998
4018
|
);
|
|
999
|
-
ctx.cookies.set(
|
|
4019
|
+
ctx.cookies.set(COOKIE_NAMES.userEmail, activateUser.email, {
|
|
1000
4020
|
httpOnly: true,
|
|
1001
4021
|
path: "/",
|
|
1002
4022
|
secure: secureFlag,
|
|
@@ -1017,7 +4037,6 @@ async function oidcSignInCallback(ctx) {
|
|
|
1017
4037
|
await handleCallbackError(e, userInfo, auditLog2, oauthService2, ctx);
|
|
1018
4038
|
}
|
|
1019
4039
|
}
|
|
1020
|
-
const LOGOUT_USERINFO_TIMEOUT_MS = 1500;
|
|
1021
4040
|
async function isProviderSessionExpired(userinfoEndpoint, accessToken) {
|
|
1022
4041
|
try {
|
|
1023
4042
|
const response = await fetch(userinfoEndpoint, {
|
|
@@ -1030,14 +4049,14 @@ async function isProviderSessionExpired(userinfoEndpoint, accessToken) {
|
|
|
1030
4049
|
}
|
|
1031
4050
|
}
|
|
1032
4051
|
async function logout(ctx) {
|
|
1033
|
-
const config2 =
|
|
4052
|
+
const config2 = getPluginConfig();
|
|
1034
4053
|
const auditLog2 = getAuditLogService();
|
|
1035
4054
|
const logoutUrl = config2.OIDC_END_SESSION_ENDPOINT;
|
|
1036
4055
|
const adminPanelUrl = strapi.config.get("admin.url", "/admin");
|
|
1037
4056
|
const loginUrl = `${adminPanelUrl}/auth/login`;
|
|
1038
|
-
const isOidcSession = !!ctx.cookies.get(
|
|
1039
|
-
const accessToken = ctx.cookies.get(
|
|
1040
|
-
const userEmail = ctx.cookies.get(
|
|
4057
|
+
const isOidcSession = !!ctx.cookies.get(COOKIE_NAMES.authenticated);
|
|
4058
|
+
const accessToken = ctx.cookies.get(COOKIE_NAMES.accessToken);
|
|
4059
|
+
const userEmail = ctx.cookies.get(COOKIE_NAMES.userEmail) ?? void 0;
|
|
1041
4060
|
clearAuthCookies(strapi, ctx);
|
|
1042
4061
|
if (!isOidcSession) {
|
|
1043
4062
|
return ctx.redirect(loginUrl);
|
|
@@ -1046,14 +4065,19 @@ async function logout(ctx) {
|
|
|
1046
4065
|
if (logoutUrl && accessToken) {
|
|
1047
4066
|
const expired = await isProviderSessionExpired(config2.OIDC_USERINFO_ENDPOINT, accessToken);
|
|
1048
4067
|
if (expired) {
|
|
1049
|
-
await logAudit("session_expired")
|
|
4068
|
+
await logAudit("session_expired").catch((err) => {
|
|
4069
|
+
strapi.log.error("[strapi-plugin-oidc] Audit log failed on session expiry:", err);
|
|
4070
|
+
});
|
|
1050
4071
|
return ctx.redirect(loginUrl);
|
|
1051
4072
|
}
|
|
1052
|
-
logAudit("logout").catch(() => {
|
|
4073
|
+
logAudit("logout").catch((err) => {
|
|
4074
|
+
strapi.log.error("[strapi-plugin-oidc] Audit log failed on logout:", err);
|
|
1053
4075
|
});
|
|
1054
4076
|
return ctx.redirect(logoutUrl);
|
|
1055
4077
|
}
|
|
1056
|
-
await logAudit("logout")
|
|
4078
|
+
await logAudit("logout").catch((err) => {
|
|
4079
|
+
strapi.log.error("[strapi-plugin-oidc] Audit log failed on logout:", err);
|
|
4080
|
+
});
|
|
1057
4081
|
ctx.redirect(logoutUrl || loginUrl);
|
|
1058
4082
|
}
|
|
1059
4083
|
const oidc = {
|
|
@@ -1061,6 +4085,30 @@ const oidc = {
|
|
|
1061
4085
|
oidcSignInCallback,
|
|
1062
4086
|
logout
|
|
1063
4087
|
};
|
|
4088
|
+
const updateSettingsSchema = zod.z.object({
|
|
4089
|
+
useWhitelist: zod.z.boolean(),
|
|
4090
|
+
enforceOIDC: zod.z.boolean()
|
|
4091
|
+
});
|
|
4092
|
+
const registerSchema = zod.z.object({
|
|
4093
|
+
email: zod.z.union([zod.z.string(), zod.z.array(zod.z.string())])
|
|
4094
|
+
});
|
|
4095
|
+
const EmailUserSchema = zod.z.object({
|
|
4096
|
+
email: zod.z.string().email()
|
|
4097
|
+
});
|
|
4098
|
+
const importUsersSchema = zod.z.object({
|
|
4099
|
+
users: zod.z.array(zod.z.object({ email: zod.z.string().nullable().optional() }))
|
|
4100
|
+
});
|
|
4101
|
+
const syncUsersSchema = zod.z.object({
|
|
4102
|
+
users: zod.z.array(EmailUserSchema)
|
|
4103
|
+
});
|
|
4104
|
+
const roleUpdateSchema = zod.z.object({
|
|
4105
|
+
roles: zod.z.array(
|
|
4106
|
+
zod.z.object({
|
|
4107
|
+
oauth_type: zod.z.string(),
|
|
4108
|
+
role: zod.z.array(zod.z.number())
|
|
4109
|
+
})
|
|
4110
|
+
)
|
|
4111
|
+
});
|
|
1064
4112
|
async function find$1(ctx) {
|
|
1065
4113
|
const roleService2 = getRoleService();
|
|
1066
4114
|
const roles2 = await roleService2.find();
|
|
@@ -1074,13 +4122,19 @@ async function find$1(ctx) {
|
|
|
1074
4122
|
ctx.send(oidcConstants);
|
|
1075
4123
|
}
|
|
1076
4124
|
async function update(ctx) {
|
|
4125
|
+
const parsed = roleUpdateSchema.safeParse(ctx.request.body);
|
|
4126
|
+
if (!parsed.success) {
|
|
4127
|
+
ctx.status = 400;
|
|
4128
|
+
ctx.body = {};
|
|
4129
|
+
return;
|
|
4130
|
+
}
|
|
1077
4131
|
try {
|
|
1078
|
-
const { roles: roles2 } =
|
|
4132
|
+
const { roles: roles2 } = parsed.data;
|
|
1079
4133
|
const roleService2 = getRoleService();
|
|
1080
4134
|
await roleService2.update(roles2);
|
|
1081
4135
|
ctx.send({}, 204);
|
|
1082
4136
|
} catch (e) {
|
|
1083
|
-
strapi.log.error(e);
|
|
4137
|
+
strapi.log.error({ phase: "role_update", message: toMessage(e) });
|
|
1084
4138
|
ctx.send({}, 400);
|
|
1085
4139
|
}
|
|
1086
4140
|
}
|
|
@@ -1122,34 +4176,41 @@ async function info(ctx) {
|
|
|
1122
4176
|
};
|
|
1123
4177
|
}
|
|
1124
4178
|
async function updateSettings(ctx) {
|
|
1125
|
-
const
|
|
1126
|
-
|
|
1127
|
-
|
|
4179
|
+
const parsed = updateSettingsSchema.safeParse(ctx.request.body);
|
|
4180
|
+
if (!parsed.success) {
|
|
4181
|
+
ctx.status = 400;
|
|
4182
|
+
ctx.body = { error: errorMessages.WHITELIST_INVALID_REQUEST };
|
|
4183
|
+
return;
|
|
4184
|
+
}
|
|
4185
|
+
const { useWhitelist, enforceOIDC } = parsed.data;
|
|
4186
|
+
let enforceOIDCParsed = enforceOIDC;
|
|
1128
4187
|
const whitelistService2 = getWhitelistService();
|
|
1129
|
-
if (useWhitelist &&
|
|
4188
|
+
if (useWhitelist && enforceOIDCParsed) {
|
|
1130
4189
|
const users = await whitelistService2.getUsers();
|
|
1131
4190
|
if (users.length === 0) {
|
|
1132
|
-
|
|
4191
|
+
enforceOIDCParsed = false;
|
|
1133
4192
|
}
|
|
1134
4193
|
}
|
|
1135
|
-
await whitelistService2.setSettings({ useWhitelist, enforceOIDC });
|
|
1136
|
-
ctx.body = { useWhitelist, enforceOIDC };
|
|
4194
|
+
await whitelistService2.setSettings({ useWhitelist, enforceOIDC: enforceOIDCParsed });
|
|
4195
|
+
ctx.body = { useWhitelist, enforceOIDC: enforceOIDCParsed };
|
|
1137
4196
|
}
|
|
1138
4197
|
async function publicSettings(ctx) {
|
|
1139
4198
|
const whitelistService2 = getWhitelistService();
|
|
1140
4199
|
const settings = await whitelistService2.getSettings();
|
|
1141
|
-
const config2 =
|
|
4200
|
+
const config2 = getPluginConfig();
|
|
1142
4201
|
ctx.body = {
|
|
1143
4202
|
enforceOIDC: resolveEnforceOIDC(strapi, settings.enforceOIDC),
|
|
1144
4203
|
ssoButtonText: config2.OIDC_SSO_BUTTON_TEXT
|
|
1145
4204
|
};
|
|
1146
4205
|
}
|
|
1147
4206
|
async function register(ctx) {
|
|
1148
|
-
const
|
|
1149
|
-
if (!
|
|
1150
|
-
ctx.
|
|
4207
|
+
const parsed = registerSchema.safeParse(ctx.request.body);
|
|
4208
|
+
if (!parsed.success) {
|
|
4209
|
+
ctx.status = 400;
|
|
4210
|
+
ctx.body = { message: errorMessages.WHITELIST_INVALID_EMAIL };
|
|
1151
4211
|
return;
|
|
1152
4212
|
}
|
|
4213
|
+
const { email } = parsed.data;
|
|
1153
4214
|
const rawEmails = Array.isArray(email) ? email : email.split(",");
|
|
1154
4215
|
const normalized = rawEmails.map((e) => String(e).trim().toLowerCase()).filter(Boolean);
|
|
1155
4216
|
const rejectedEmails = [];
|
|
@@ -1163,7 +4224,7 @@ async function register(ctx) {
|
|
|
1163
4224
|
}
|
|
1164
4225
|
if (validEmails.length === 0) {
|
|
1165
4226
|
ctx.status = 400;
|
|
1166
|
-
ctx.body = {
|
|
4227
|
+
ctx.body = { message: errorMessages.WHITELIST_INVALID_EMAIL };
|
|
1167
4228
|
return;
|
|
1168
4229
|
}
|
|
1169
4230
|
const whitelistService2 = getWhitelistService();
|
|
@@ -1198,13 +4259,14 @@ async function exportWhitelist(ctx) {
|
|
|
1198
4259
|
ctx.body = users.map((u) => ({ email: u.email }));
|
|
1199
4260
|
}
|
|
1200
4261
|
async function importUsers(ctx) {
|
|
1201
|
-
const
|
|
1202
|
-
if (!
|
|
4262
|
+
const parsed = importUsersSchema.safeParse(ctx.request.body);
|
|
4263
|
+
if (!parsed.success) {
|
|
1203
4264
|
ctx.status = 400;
|
|
1204
|
-
ctx.body = { error:
|
|
4265
|
+
ctx.body = { error: errorMessages.WHITELIST_IMPORT_INVALID };
|
|
1205
4266
|
return;
|
|
1206
4267
|
}
|
|
1207
|
-
const
|
|
4268
|
+
const { users } = parsed.data;
|
|
4269
|
+
const normalized = users.map((u) => (u.email ?? "").trim().toLowerCase()).filter(isValidEmail);
|
|
1208
4270
|
const deduped = [...new Set(normalized)];
|
|
1209
4271
|
const whitelistService2 = getWhitelistService();
|
|
1210
4272
|
const existing = await whitelistService2.getUsers();
|
|
@@ -1214,8 +4276,14 @@ async function importUsers(ctx) {
|
|
|
1214
4276
|
ctx.body = { importedCount: toImport.length };
|
|
1215
4277
|
}
|
|
1216
4278
|
async function syncUsers(ctx) {
|
|
1217
|
-
const
|
|
1218
|
-
|
|
4279
|
+
const parsed = syncUsersSchema.safeParse(ctx.request.body);
|
|
4280
|
+
if (!parsed.success) {
|
|
4281
|
+
ctx.status = 400;
|
|
4282
|
+
ctx.body = { error: errorMessages.WHITELIST_INVALID_REQUEST };
|
|
4283
|
+
return;
|
|
4284
|
+
}
|
|
4285
|
+
const { users } = parsed.data;
|
|
4286
|
+
const emails = users.map((u) => u.email.toLowerCase()).filter(isValidEmail);
|
|
1219
4287
|
const whitelistService2 = getWhitelistService();
|
|
1220
4288
|
const currentUsers = await whitelistService2.getUsers();
|
|
1221
4289
|
const syncEmailSet = new Set(emails);
|
|
@@ -1237,6 +4305,15 @@ const whitelist = {
|
|
|
1237
4305
|
importUsers,
|
|
1238
4306
|
exportWhitelist
|
|
1239
4307
|
};
|
|
4308
|
+
function interpolate(str, params) {
|
|
4309
|
+
if (!params) return str;
|
|
4310
|
+
return str.replace(/\{(\w+)\}/g, (_, key) => String(params[key] ?? `{${key}}`));
|
|
4311
|
+
}
|
|
4312
|
+
function translateDetails(key, params) {
|
|
4313
|
+
const translation = en[`audit.${key}`];
|
|
4314
|
+
if (!translation) return null;
|
|
4315
|
+
return interpolate(translation, params);
|
|
4316
|
+
}
|
|
1240
4317
|
const AUDIT_ACTIONS = [
|
|
1241
4318
|
"login_success",
|
|
1242
4319
|
"login_failure",
|
|
@@ -1251,137 +4328,59 @@ const AUDIT_ACTIONS = [
|
|
|
1251
4328
|
"session_expired",
|
|
1252
4329
|
"user_created"
|
|
1253
4330
|
];
|
|
1254
|
-
const ISO_UTC_DATETIME = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/;
|
|
1255
|
-
function isIsoUtcDatetime(value) {
|
|
1256
|
-
return typeof value === "string" && ISO_UTC_DATETIME.test(value);
|
|
1257
|
-
}
|
|
1258
|
-
const ALLOWED_FIELDS = /* @__PURE__ */ new Set(["action", "email", "ip", "createdAt"]);
|
|
1259
|
-
const STRING_OPERATORS = /* @__PURE__ */ new Set([
|
|
1260
|
-
"$eq",
|
|
1261
|
-
"$contains",
|
|
1262
|
-
"$endsWith",
|
|
1263
|
-
"$null",
|
|
1264
|
-
"$notNull"
|
|
1265
|
-
]);
|
|
1266
|
-
const DATE_OPERATORS = /* @__PURE__ */ new Set(["$gte", "$lt", "$lte", "$between", "$in"]);
|
|
1267
|
-
const ENUM_OPERATORS = /* @__PURE__ */ new Set(["$eq", "$in"]);
|
|
1268
|
-
function isPlainObject(value) {
|
|
1269
|
-
if (typeof value !== "object" || value === null || Array.isArray(value)) return false;
|
|
1270
|
-
const proto = Object.getPrototypeOf(value);
|
|
1271
|
-
return proto === Object.prototype || proto === null;
|
|
1272
|
-
}
|
|
1273
|
-
function isStringOperator(op) {
|
|
1274
|
-
return STRING_OPERATORS.has(op);
|
|
1275
|
-
}
|
|
1276
|
-
function isDateOperator(op) {
|
|
1277
|
-
return DATE_OPERATORS.has(op);
|
|
1278
|
-
}
|
|
1279
|
-
function isEnumOperator(op) {
|
|
1280
|
-
return ENUM_OPERATORS.has(op);
|
|
1281
|
-
}
|
|
1282
|
-
function isAuditAction(value) {
|
|
1283
|
-
return AUDIT_ACTIONS.includes(value);
|
|
1284
|
-
}
|
|
1285
4331
|
class ValidationError extends Error {
|
|
1286
4332
|
constructor(message) {
|
|
1287
4333
|
super(message);
|
|
1288
4334
|
this.name = "ValidationError";
|
|
1289
4335
|
}
|
|
1290
4336
|
}
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1297
|
-
|
|
1298
|
-
|
|
1299
|
-
|
|
1300
|
-
|
|
1301
|
-
|
|
1302
|
-
|
|
1303
|
-
|
|
1304
|
-
|
|
1305
|
-
|
|
1306
|
-
|
|
1307
|
-
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
)
|
|
1316
|
-
|
|
1317
|
-
|
|
1318
|
-
|
|
1319
|
-
|
|
1320
|
-
|
|
1321
|
-
throw new ValidationError(`Unknown operator "${op}" for field "createdAt"`);
|
|
1322
|
-
}
|
|
1323
|
-
const expected = 'an ISO-8601 UTC datetime string (e.g. "2024-01-15T00:00:00.000Z")';
|
|
1324
|
-
if (op === "$between") {
|
|
1325
|
-
const isTuple = Array.isArray(opValue) && opValue.length === 2;
|
|
1326
|
-
requireType("createdAt", op, opValue, isTuple, "a tuple [start, end]");
|
|
1327
|
-
const [a, b] = opValue;
|
|
1328
|
-
requireType("createdAt", op, opValue, isIsoUtcDatetime(a) && isIsoUtcDatetime(b), expected);
|
|
1329
|
-
return opValue;
|
|
1330
|
-
}
|
|
1331
|
-
if (op === "$in") {
|
|
1332
|
-
requireType("createdAt", op, opValue, Array.isArray(opValue), "an array value");
|
|
1333
|
-
for (const v of opValue) {
|
|
1334
|
-
requireType("createdAt", op, v, isIsoUtcDatetime(v), expected);
|
|
1335
|
-
}
|
|
1336
|
-
return opValue;
|
|
1337
|
-
}
|
|
1338
|
-
return requireType("createdAt", op, opValue, isIsoUtcDatetime(opValue), expected);
|
|
1339
|
-
}
|
|
1340
|
-
function parseStringFieldOperator(field, op, opValue) {
|
|
1341
|
-
if (!isStringOperator(op)) {
|
|
1342
|
-
throw new ValidationError(`Unknown operator "${op}" for field "${field}"`);
|
|
1343
|
-
}
|
|
1344
|
-
if (op === "$null" || op === "$notNull") {
|
|
1345
|
-
return requireType(field, op, opValue, typeof opValue === "boolean", "a boolean value");
|
|
1346
|
-
}
|
|
1347
|
-
return requireType(field, op, opValue, typeof opValue === "string", "a string value");
|
|
1348
|
-
}
|
|
1349
|
-
function parseFieldOperators(field, fieldValue) {
|
|
1350
|
-
if (!isPlainObject(fieldValue)) {
|
|
1351
|
-
throw new ValidationError(
|
|
1352
|
-
`Filter field "${field}" must be an object of operators, got ${typeof fieldValue}`
|
|
1353
|
-
);
|
|
1354
|
-
}
|
|
1355
|
-
const parsed = {};
|
|
1356
|
-
for (const [op, opValue] of Object.entries(fieldValue)) {
|
|
1357
|
-
if (field === "action") parsed[op] = parseActionOperator(op, opValue);
|
|
1358
|
-
else if (field === "createdAt") parsed[op] = parseCreatedAtOperator(op, opValue);
|
|
1359
|
-
else parsed[op] = parseStringFieldOperator(field, op, opValue);
|
|
1360
|
-
}
|
|
1361
|
-
return Object.keys(parsed).length > 0 ? parsed : null;
|
|
1362
|
-
}
|
|
4337
|
+
const isoUtcDatetime = zod.z.string().regex(
|
|
4338
|
+
/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/,
|
|
4339
|
+
'must be an ISO-8601 UTC datetime (e.g. "2024-01-15T00:00:00.000Z")'
|
|
4340
|
+
);
|
|
4341
|
+
const actionFilterSchema = zod.z.object({
|
|
4342
|
+
$eq: zod.z.enum(AUDIT_ACTIONS).optional(),
|
|
4343
|
+
$in: zod.z.array(zod.z.enum(AUDIT_ACTIONS)).optional()
|
|
4344
|
+
}).strict();
|
|
4345
|
+
const stringFilterSchema = zod.z.object({
|
|
4346
|
+
$eq: zod.z.string().optional(),
|
|
4347
|
+
$contains: zod.z.string().optional(),
|
|
4348
|
+
$endsWith: zod.z.string().optional(),
|
|
4349
|
+
$null: zod.z.boolean().optional(),
|
|
4350
|
+
$notNull: zod.z.boolean().optional()
|
|
4351
|
+
}).strict();
|
|
4352
|
+
const createdAtFilterSchema = zod.z.object({
|
|
4353
|
+
$gte: isoUtcDatetime.optional(),
|
|
4354
|
+
$lt: isoUtcDatetime.optional(),
|
|
4355
|
+
$lte: isoUtcDatetime.optional(),
|
|
4356
|
+
$between: zod.z.tuple([isoUtcDatetime, isoUtcDatetime]).optional(),
|
|
4357
|
+
$in: zod.z.array(isoUtcDatetime).optional()
|
|
4358
|
+
}).strict();
|
|
4359
|
+
const auditLogQuerySchema = zod.z.object({
|
|
4360
|
+
filters: zod.z.object({
|
|
4361
|
+
action: actionFilterSchema.optional(),
|
|
4362
|
+
email: stringFilterSchema.optional(),
|
|
4363
|
+
ip: stringFilterSchema.optional(),
|
|
4364
|
+
createdAt: createdAtFilterSchema.optional()
|
|
4365
|
+
}).strict().optional()
|
|
4366
|
+
}).passthrough();
|
|
1363
4367
|
function parseAuditLogFilters(query) {
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
throw new ValidationError(`"filters" must be an object, got ${typeof filters}`);
|
|
1370
|
-
}
|
|
1371
|
-
for (const [field, fieldValue] of Object.entries(filters)) {
|
|
1372
|
-
if (!ALLOWED_FIELDS.has(field)) {
|
|
1373
|
-
throw new ValidationError(`Unknown filter field: "${field}"`);
|
|
1374
|
-
}
|
|
1375
|
-
const parsed = parseFieldOperators(field, fieldValue);
|
|
1376
|
-
if (parsed) result[field] = parsed;
|
|
4368
|
+
const result = auditLogQuerySchema.safeParse(query);
|
|
4369
|
+
if (!result.success) {
|
|
4370
|
+
const issue = result.error.issues[0];
|
|
4371
|
+
const path = issue.path.length ? ` at "${issue.path.join(".")}"` : "";
|
|
4372
|
+
throw new ValidationError(`${issue.message}${path}`);
|
|
1377
4373
|
}
|
|
1378
|
-
return result;
|
|
4374
|
+
return result.data.filters ?? {};
|
|
1379
4375
|
}
|
|
1380
|
-
const EXPORT_PAGE_SIZE = 500;
|
|
1381
4376
|
async function* ndjsonRowStream(service, filters) {
|
|
1382
4377
|
let page = 1;
|
|
1383
4378
|
while (true) {
|
|
1384
|
-
const { results } = await service.find({
|
|
4379
|
+
const { results } = await service.find({
|
|
4380
|
+
page,
|
|
4381
|
+
pageSize: AUDIT_LOG_DEFAULTS.EXPORT_PAGE_SIZE,
|
|
4382
|
+
filters
|
|
4383
|
+
});
|
|
1385
4384
|
if (results.length === 0) return;
|
|
1386
4385
|
let chunk = "";
|
|
1387
4386
|
for (const row of results) {
|
|
@@ -1390,11 +4389,11 @@ async function* ndjsonRowStream(service, filters) {
|
|
|
1390
4389
|
action: row.action,
|
|
1391
4390
|
email: row.email ?? null,
|
|
1392
4391
|
ip: row.ip ?? null,
|
|
1393
|
-
details: row.
|
|
4392
|
+
details: row.detailsKey ? translateDetails(row.detailsKey, row.detailsParams) : null
|
|
1394
4393
|
}) + "\n";
|
|
1395
4394
|
}
|
|
1396
4395
|
yield Buffer.from(chunk, "utf8");
|
|
1397
|
-
if (results.length < EXPORT_PAGE_SIZE) return;
|
|
4396
|
+
if (results.length < AUDIT_LOG_DEFAULTS.EXPORT_PAGE_SIZE) return;
|
|
1398
4397
|
page++;
|
|
1399
4398
|
}
|
|
1400
4399
|
}
|
|
@@ -1419,7 +4418,10 @@ async function find(ctx) {
|
|
|
1419
4418
|
const filters = parseFiltersOr400(ctx);
|
|
1420
4419
|
if (!filters) return;
|
|
1421
4420
|
const page = Math.max(1, Number(ctx.query.page) || 1);
|
|
1422
|
-
const pageSize = Math.min(
|
|
4421
|
+
const pageSize = Math.min(
|
|
4422
|
+
AUDIT_LOG_DEFAULTS.MAX_PAGE_SIZE,
|
|
4423
|
+
Math.max(1, Number(ctx.query.pageSize) || AUDIT_LOG_DEFAULTS.PAGE_SIZE)
|
|
4424
|
+
);
|
|
1423
4425
|
ctx.body = await getAuditLogService().find({ page, pageSize, filters });
|
|
1424
4426
|
}
|
|
1425
4427
|
async function exportLogs(ctx) {
|
|
@@ -1444,12 +4446,8 @@ const controllers = {
|
|
|
1444
4446
|
auditLog
|
|
1445
4447
|
};
|
|
1446
4448
|
const rateLimitMap = /* @__PURE__ */ new Map();
|
|
1447
|
-
const RATE_LIMIT_WINDOW = 6e4;
|
|
1448
|
-
const MAX_REQUESTS = 1e3;
|
|
1449
|
-
const MAX_MAP_SIZE = 1e4;
|
|
1450
|
-
const PRUNE_THRESHOLD = 1e3;
|
|
1451
4449
|
function pruneExpiredEntries(now) {
|
|
1452
|
-
const windowStart = now -
|
|
4450
|
+
const windowStart = now - RATE_LIMIT.WINDOW_MS;
|
|
1453
4451
|
for (const [key, stamps] of rateLimitMap) {
|
|
1454
4452
|
if (stamps.length === 0 || stamps[stamps.length - 1] <= windowStart) {
|
|
1455
4453
|
rateLimitMap.delete(key);
|
|
@@ -1471,18 +4469,18 @@ function getRateLimitKey(ctx) {
|
|
|
1471
4469
|
function rateLimitMiddleware(ctx, next) {
|
|
1472
4470
|
const key = getRateLimitKey(ctx);
|
|
1473
4471
|
const now = Date.now();
|
|
1474
|
-
const windowStart = now -
|
|
1475
|
-
if (rateLimitMap.size > PRUNE_THRESHOLD) {
|
|
4472
|
+
const windowStart = now - RATE_LIMIT.WINDOW_MS;
|
|
4473
|
+
if (rateLimitMap.size > RATE_LIMIT.PRUNE_THRESHOLD) {
|
|
1476
4474
|
pruneExpiredEntries(now);
|
|
1477
4475
|
}
|
|
1478
4476
|
const requestStamps = (rateLimitMap.get(key) ?? []).filter((ts) => ts > windowStart);
|
|
1479
|
-
if (requestStamps.length >= MAX_REQUESTS) {
|
|
4477
|
+
if (requestStamps.length >= RATE_LIMIT.MAX_REQUESTS) {
|
|
1480
4478
|
ctx.status = 429;
|
|
1481
4479
|
ctx.body = "Too Many Requests";
|
|
1482
4480
|
return;
|
|
1483
4481
|
}
|
|
1484
4482
|
requestStamps.push(now);
|
|
1485
|
-
if (!rateLimitMap.has(key) && rateLimitMap.size >= MAX_MAP_SIZE) {
|
|
4483
|
+
if (!rateLimitMap.has(key) && rateLimitMap.size >= RATE_LIMIT.MAX_MAP_SIZE) {
|
|
1486
4484
|
evictOldestEntry();
|
|
1487
4485
|
}
|
|
1488
4486
|
rateLimitMap.set(key, requestStamps);
|
|
@@ -1624,171 +4622,171 @@ const routes = {
|
|
|
1624
4622
|
method: "GET",
|
|
1625
4623
|
path: "/whitelist",
|
|
1626
4624
|
handler: "whitelist.info",
|
|
1627
|
-
config: { auth: { scope: [
|
|
4625
|
+
config: { auth: { scope: [PERMISSIONS.WHITELIST_READ] } }
|
|
1628
4626
|
},
|
|
1629
4627
|
{
|
|
1630
4628
|
method: "POST",
|
|
1631
4629
|
path: "/whitelist",
|
|
1632
4630
|
handler: "whitelist.register",
|
|
1633
|
-
config: { auth: { scope: [
|
|
4631
|
+
config: { auth: { scope: [PERMISSIONS.WHITELIST_WRITE] } }
|
|
1634
4632
|
},
|
|
1635
4633
|
{
|
|
1636
4634
|
method: "POST",
|
|
1637
4635
|
path: "/whitelist/import",
|
|
1638
4636
|
handler: "whitelist.importUsers",
|
|
1639
|
-
config: { auth: { scope: [
|
|
4637
|
+
config: { auth: { scope: [PERMISSIONS.WHITELIST_WRITE] } }
|
|
1640
4638
|
},
|
|
1641
4639
|
{
|
|
1642
4640
|
method: "DELETE",
|
|
1643
4641
|
path: "/whitelist/:email",
|
|
1644
4642
|
handler: "whitelist.removeEmail",
|
|
1645
|
-
config: { auth: { scope: [
|
|
4643
|
+
config: { auth: { scope: [PERMISSIONS.WHITELIST_DELETE] } }
|
|
1646
4644
|
},
|
|
1647
4645
|
{
|
|
1648
4646
|
method: "DELETE",
|
|
1649
4647
|
path: "/whitelist",
|
|
1650
4648
|
handler: "whitelist.deleteAll",
|
|
1651
|
-
config: { auth: { scope: [
|
|
4649
|
+
config: { auth: { scope: [PERMISSIONS.WHITELIST_DELETE] } }
|
|
1652
4650
|
},
|
|
1653
4651
|
{
|
|
1654
4652
|
method: "GET",
|
|
1655
4653
|
path: "/whitelist/export",
|
|
1656
4654
|
handler: "whitelist.exportWhitelist",
|
|
1657
|
-
config: { auth: { scope: [
|
|
4655
|
+
config: { auth: { scope: [PERMISSIONS.WHITELIST_READ] } }
|
|
1658
4656
|
},
|
|
1659
4657
|
{
|
|
1660
4658
|
method: "GET",
|
|
1661
4659
|
path: "/audit-logs",
|
|
1662
4660
|
handler: "auditLog.find",
|
|
1663
|
-
config: { auth: { scope: [
|
|
4661
|
+
config: { auth: { scope: [PERMISSIONS.AUDIT_READ] } }
|
|
1664
4662
|
},
|
|
1665
4663
|
{
|
|
1666
4664
|
method: "GET",
|
|
1667
4665
|
path: "/audit-logs/export",
|
|
1668
4666
|
handler: "auditLog.export",
|
|
1669
|
-
config: { auth: { scope: [
|
|
4667
|
+
config: { auth: { scope: [PERMISSIONS.AUDIT_READ] } }
|
|
1670
4668
|
},
|
|
1671
4669
|
{
|
|
1672
4670
|
method: "DELETE",
|
|
1673
4671
|
path: "/audit-logs",
|
|
1674
4672
|
handler: "auditLog.clearAll",
|
|
1675
|
-
config: { auth: { scope: [
|
|
4673
|
+
config: { auth: { scope: [PERMISSIONS.AUDIT_DELETE] } }
|
|
1676
4674
|
}
|
|
1677
4675
|
]
|
|
1678
4676
|
}
|
|
1679
4677
|
};
|
|
1680
4678
|
const policies = {};
|
|
4679
|
+
const AUTH_PAGE_CSS = `
|
|
4680
|
+
:root {
|
|
4681
|
+
--bg-color: #f6f6f9;
|
|
4682
|
+
--card-bg: #ffffff;
|
|
4683
|
+
--text-color: #32324d;
|
|
4684
|
+
--text-muted: #666687;
|
|
4685
|
+
--btn-bg: #4945ff;
|
|
4686
|
+
--btn-hover: #271fe0;
|
|
4687
|
+
--btn-text: #ffffff;
|
|
4688
|
+
--icon-bg: #fcecea;
|
|
4689
|
+
--icon-color: #d02b20;
|
|
4690
|
+
--success-bg: #eafbe7;
|
|
4691
|
+
--success-color: #328048;
|
|
4692
|
+
--shadow: 0 1px 4 rgba(33, 33, 52, 0.1);
|
|
4693
|
+
}
|
|
4694
|
+
@media (prefers-color-scheme: dark) {
|
|
4695
|
+
:root {
|
|
4696
|
+
--bg-color: #181826;
|
|
4697
|
+
--card-bg: #212134;
|
|
4698
|
+
--text-color: #ffffff;
|
|
4699
|
+
--text-muted: #a5a5ba;
|
|
4700
|
+
--btn-bg: #4945ff;
|
|
4701
|
+
--btn-hover: #7b79ff;
|
|
4702
|
+
--btn-text: #ffffff;
|
|
4703
|
+
--icon-bg: #4a2123;
|
|
4704
|
+
--icon-color: #f23628;
|
|
4705
|
+
--success-bg: #1c3523;
|
|
4706
|
+
--success-color: #55ca76;
|
|
4707
|
+
--shadow: 0 1px 4 rgba(0, 0, 0, 0.5);
|
|
4708
|
+
}
|
|
4709
|
+
}
|
|
4710
|
+
body {
|
|
4711
|
+
margin: 0;
|
|
4712
|
+
padding: 0;
|
|
4713
|
+
display: flex;
|
|
4714
|
+
justify-content: center;
|
|
4715
|
+
align-items: center;
|
|
4716
|
+
height: 100vh;
|
|
4717
|
+
background-color: var(--bg-color);
|
|
4718
|
+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
4719
|
+
color: var(--text-color);
|
|
4720
|
+
}
|
|
4721
|
+
.card {
|
|
4722
|
+
background: var(--card-bg);
|
|
4723
|
+
padding: 32px 40px;
|
|
4724
|
+
border-radius: 8px;
|
|
4725
|
+
box-shadow: var(--shadow);
|
|
4726
|
+
max-width: 400px;
|
|
4727
|
+
width: 100%;
|
|
4728
|
+
text-align: center;
|
|
4729
|
+
box-sizing: border-box;
|
|
4730
|
+
}
|
|
4731
|
+
.icon {
|
|
4732
|
+
width: 48px;
|
|
4733
|
+
height: 48px;
|
|
4734
|
+
background-color: var(--icon-bg);
|
|
4735
|
+
color: var(--icon-color);
|
|
4736
|
+
border-radius: 50%;
|
|
4737
|
+
display: inline-flex;
|
|
4738
|
+
justify-content: center;
|
|
4739
|
+
align-items: center;
|
|
4740
|
+
margin-bottom: 24px;
|
|
4741
|
+
}
|
|
4742
|
+
.icon.success {
|
|
4743
|
+
background-color: var(--success-bg);
|
|
4744
|
+
color: var(--success-color);
|
|
4745
|
+
}
|
|
4746
|
+
.icon svg {
|
|
4747
|
+
width: 24px;
|
|
4748
|
+
height: 24px;
|
|
4749
|
+
stroke: currentColor;
|
|
4750
|
+
stroke-width: 2;
|
|
4751
|
+
stroke-linecap: round;
|
|
4752
|
+
stroke-linejoin: round;
|
|
4753
|
+
fill: none;
|
|
4754
|
+
}
|
|
4755
|
+
h1 {
|
|
4756
|
+
margin: 0 0 12px 0;
|
|
4757
|
+
font-size: 20px;
|
|
4758
|
+
font-weight: 600;
|
|
4759
|
+
color: var(--text-color);
|
|
4760
|
+
}
|
|
4761
|
+
p {
|
|
4762
|
+
margin: 0 0 32px 0;
|
|
4763
|
+
font-size: 14px;
|
|
4764
|
+
line-height: 1.5;
|
|
4765
|
+
color: var(--text-muted);
|
|
4766
|
+
}
|
|
4767
|
+
.btn {
|
|
4768
|
+
display: inline-block;
|
|
4769
|
+
background-color: var(--btn-bg);
|
|
4770
|
+
color: var(--btn-text);
|
|
4771
|
+
padding: 10px 16px;
|
|
4772
|
+
border-radius: 4px;
|
|
4773
|
+
text-decoration: none;
|
|
4774
|
+
font-size: 14px;
|
|
4775
|
+
font-weight: 500;
|
|
4776
|
+
transition: background-color 0.2s;
|
|
4777
|
+
}
|
|
4778
|
+
.btn:hover {
|
|
4779
|
+
background-color: var(--btn-hover);
|
|
4780
|
+
}
|
|
4781
|
+
`;
|
|
1681
4782
|
function renderHtmlTemplate(title, content, locale = "en") {
|
|
1682
|
-
return
|
|
1683
|
-
<!doctype html>
|
|
4783
|
+
return `<!doctype html>
|
|
1684
4784
|
<html lang="${locale}">
|
|
1685
4785
|
<head>
|
|
1686
4786
|
<meta charset="utf-8">
|
|
1687
4787
|
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
1688
4788
|
<title>${title}</title>
|
|
1689
|
-
<style>
|
|
1690
|
-
:root {
|
|
1691
|
-
--bg-color: #f6f6f9;
|
|
1692
|
-
--card-bg: #ffffff;
|
|
1693
|
-
--text-color: #32324d;
|
|
1694
|
-
--text-muted: #666687;
|
|
1695
|
-
--btn-bg: #4945ff;
|
|
1696
|
-
--btn-hover: #271fe0;
|
|
1697
|
-
--btn-text: #ffffff;
|
|
1698
|
-
--icon-bg: #fcecea;
|
|
1699
|
-
--icon-color: #d02b20;
|
|
1700
|
-
--success-bg: #eafbe7;
|
|
1701
|
-
--success-color: #328048;
|
|
1702
|
-
--shadow: 0 1px 4 rgba(33, 33, 52, 0.1);
|
|
1703
|
-
}
|
|
1704
|
-
@media (prefers-color-scheme: dark) {
|
|
1705
|
-
:root {
|
|
1706
|
-
--bg-color: #181826;
|
|
1707
|
-
--card-bg: #212134;
|
|
1708
|
-
--text-color: #ffffff;
|
|
1709
|
-
--text-muted: #a5a5ba;
|
|
1710
|
-
--btn-bg: #4945ff;
|
|
1711
|
-
--btn-hover: #7b79ff;
|
|
1712
|
-
--btn-text: #ffffff;
|
|
1713
|
-
--icon-bg: #4a2123;
|
|
1714
|
-
--icon-color: #f23628;
|
|
1715
|
-
--success-bg: #1c3523;
|
|
1716
|
-
--success-color: #55ca76;
|
|
1717
|
-
--shadow: 0 1px 4 rgba(0, 0, 0, 0.5);
|
|
1718
|
-
}
|
|
1719
|
-
}
|
|
1720
|
-
body {
|
|
1721
|
-
margin: 0;
|
|
1722
|
-
padding: 0;
|
|
1723
|
-
display: flex;
|
|
1724
|
-
justify-content: center;
|
|
1725
|
-
align-items: center;
|
|
1726
|
-
height: 100vh;
|
|
1727
|
-
background-color: var(--bg-color);
|
|
1728
|
-
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif;
|
|
1729
|
-
color: var(--text-color);
|
|
1730
|
-
}
|
|
1731
|
-
.card {
|
|
1732
|
-
background: var(--card-bg);
|
|
1733
|
-
padding: 32px 40px;
|
|
1734
|
-
border-radius: 8px;
|
|
1735
|
-
box-shadow: var(--shadow);
|
|
1736
|
-
max-width: 400px;
|
|
1737
|
-
width: 100%;
|
|
1738
|
-
text-align: center;
|
|
1739
|
-
box-sizing: border-box;
|
|
1740
|
-
}
|
|
1741
|
-
.icon {
|
|
1742
|
-
width: 48px;
|
|
1743
|
-
height: 48px;
|
|
1744
|
-
background-color: var(--icon-bg);
|
|
1745
|
-
color: var(--icon-color);
|
|
1746
|
-
border-radius: 50%;
|
|
1747
|
-
display: inline-flex;
|
|
1748
|
-
justify-content: center;
|
|
1749
|
-
align-items: center;
|
|
1750
|
-
margin-bottom: 24px;
|
|
1751
|
-
}
|
|
1752
|
-
.icon.success {
|
|
1753
|
-
background-color: var(--success-bg);
|
|
1754
|
-
color: var(--success-color);
|
|
1755
|
-
}
|
|
1756
|
-
.icon svg {
|
|
1757
|
-
width: 24px;
|
|
1758
|
-
height: 24px;
|
|
1759
|
-
stroke: currentColor;
|
|
1760
|
-
stroke-width: 2;
|
|
1761
|
-
stroke-linecap: round;
|
|
1762
|
-
stroke-linejoin: round;
|
|
1763
|
-
fill: none;
|
|
1764
|
-
}
|
|
1765
|
-
h1 {
|
|
1766
|
-
margin: 0 0 12px 0;
|
|
1767
|
-
font-size: 20px;
|
|
1768
|
-
font-weight: 600;
|
|
1769
|
-
color: var(--text-color);
|
|
1770
|
-
}
|
|
1771
|
-
p {
|
|
1772
|
-
margin: 0 0 32px 0;
|
|
1773
|
-
font-size: 14px;
|
|
1774
|
-
line-height: 1.5;
|
|
1775
|
-
color: var(--text-muted);
|
|
1776
|
-
}
|
|
1777
|
-
.btn {
|
|
1778
|
-
display: inline-block;
|
|
1779
|
-
background-color: var(--btn-bg);
|
|
1780
|
-
color: var(--btn-text);
|
|
1781
|
-
padding: 10px 16px;
|
|
1782
|
-
border-radius: 4px;
|
|
1783
|
-
text-decoration: none;
|
|
1784
|
-
font-size: 14px;
|
|
1785
|
-
font-weight: 500;
|
|
1786
|
-
transition: background-color 0.2s;
|
|
1787
|
-
}
|
|
1788
|
-
.btn:hover {
|
|
1789
|
-
background-color: var(--btn-hover);
|
|
1790
|
-
}
|
|
1791
|
-
</style>
|
|
4789
|
+
<style>${AUTH_PAGE_CSS}</style>
|
|
1792
4790
|
</head>
|
|
1793
4791
|
<body>
|
|
1794
4792
|
${content}
|
|
@@ -1864,7 +4862,6 @@ function oauthService({ strapi: strapi2 }) {
|
|
|
1864
4862
|
renderSignUpSuccess(jwtToken, user, nonce, locale = "en") {
|
|
1865
4863
|
const config2 = strapi2.config.get("plugin::strapi-plugin-oidc");
|
|
1866
4864
|
const isRememberMe = !!config2?.REMEMBER_ME;
|
|
1867
|
-
const messages = authPageMessages(locale);
|
|
1868
4865
|
const content = `
|
|
1869
4866
|
<noscript>
|
|
1870
4867
|
<div class="card">
|
|
@@ -1873,8 +4870,8 @@ function oauthService({ strapi: strapi2 }) {
|
|
|
1873
4870
|
<path d="M20 6 9 17l-5-5"/>
|
|
1874
4871
|
</svg>
|
|
1875
4872
|
</div>
|
|
1876
|
-
<h1>${
|
|
1877
|
-
<p>${
|
|
4873
|
+
<h1>${t(locale, "auth.page.authenticating.noscript.heading")}</h1>
|
|
4874
|
+
<p>${t(locale, "auth.page.authenticating.noscript.body")}</p>
|
|
1878
4875
|
</div>
|
|
1879
4876
|
</noscript>
|
|
1880
4877
|
<script nonce="${nonce}">
|
|
@@ -1888,10 +4885,10 @@ function oauthService({ strapi: strapi2 }) {
|
|
|
1888
4885
|
location.href = '${strapi2.config.admin.url}'
|
|
1889
4886
|
})
|
|
1890
4887
|
<\/script>`;
|
|
1891
|
-
return renderHtmlTemplate(
|
|
4888
|
+
return renderHtmlTemplate(t(locale, "auth.page.authenticating.title"), content, locale);
|
|
1892
4889
|
},
|
|
1893
4890
|
renderSignUpError(message, locale = "en") {
|
|
1894
|
-
const
|
|
4891
|
+
const errorTitle = t(locale, "auth.page.error.title");
|
|
1895
4892
|
const safeMessage = String(message).replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">").replace(/"/g, """).replace(/'/g, "'");
|
|
1896
4893
|
const content = `
|
|
1897
4894
|
<div class="card">
|
|
@@ -1902,11 +4899,11 @@ function oauthService({ strapi: strapi2 }) {
|
|
|
1902
4899
|
<path d="M12 17h.01"/>
|
|
1903
4900
|
</svg>
|
|
1904
4901
|
</div>
|
|
1905
|
-
<h1>${
|
|
4902
|
+
<h1>${errorTitle}</h1>
|
|
1906
4903
|
<p>${safeMessage}</p>
|
|
1907
|
-
<a href="${strapi2.config.admin.url}" class="btn">${
|
|
4904
|
+
<a href="${strapi2.config.admin.url}" class="btn">${t(locale, "auth.page.error.returnToLogin")}</a>
|
|
1908
4905
|
</div>`;
|
|
1909
|
-
return renderHtmlTemplate(
|
|
4906
|
+
return renderHtmlTemplate(errorTitle, content, locale);
|
|
1910
4907
|
},
|
|
1911
4908
|
async generateToken(user, ctx) {
|
|
1912
4909
|
const sessionManager = strapi2.sessionManager;
|
|
@@ -1943,12 +4940,12 @@ function oauthService({ strapi: strapi2 }) {
|
|
|
1943
4940
|
);
|
|
1944
4941
|
const idleMs = idleLifespanSec * 1e3;
|
|
1945
4942
|
const absoluteMs = new Date(absoluteExpiresAt).getTime() - Date.now();
|
|
1946
|
-
const
|
|
1947
|
-
cookieOptions.maxAge =
|
|
1948
|
-
cookieOptions.expires = new Date(Date.now() +
|
|
4943
|
+
const ms2 = Math.min(idleMs, absoluteMs);
|
|
4944
|
+
cookieOptions.maxAge = ms2;
|
|
4945
|
+
cookieOptions.expires = new Date(Date.now() + ms2);
|
|
1949
4946
|
}
|
|
1950
|
-
ctx.cookies.set(
|
|
1951
|
-
ctx.cookies.set(
|
|
4947
|
+
ctx.cookies.set(COOKIE_NAMES.adminRefresh, refreshToken, cookieOptions);
|
|
4948
|
+
ctx.cookies.set(COOKIE_NAMES.authenticated, "1", { ...cookieOptions, path: "/" });
|
|
1952
4949
|
const accessResult = await smAdmin.generateAccessToken(refreshToken);
|
|
1953
4950
|
if ("error" in accessResult) {
|
|
1954
4951
|
throw new Error(accessResult.error);
|
|
@@ -1970,17 +4967,17 @@ function roleService({ strapi: strapi2 }) {
|
|
|
1970
4967
|
];
|
|
1971
4968
|
},
|
|
1972
4969
|
async oidcRoles() {
|
|
1973
|
-
return strapi2.query(
|
|
4970
|
+
return strapi2.query(CONTENT_TYPES.ROLES).findOne({
|
|
1974
4971
|
where: {
|
|
1975
4972
|
oauth_type: this.OIDC_TYPE
|
|
1976
4973
|
}
|
|
1977
4974
|
});
|
|
1978
4975
|
},
|
|
1979
4976
|
async find() {
|
|
1980
|
-
return strapi2.query(
|
|
4977
|
+
return strapi2.query(CONTENT_TYPES.ROLES).findMany();
|
|
1981
4978
|
},
|
|
1982
4979
|
async update(roles2) {
|
|
1983
|
-
const query = strapi2.query(
|
|
4980
|
+
const query = strapi2.query(CONTENT_TYPES.ROLES);
|
|
1984
4981
|
await Promise.all(
|
|
1985
4982
|
roles2.map(async (role2) => {
|
|
1986
4983
|
const oidcRole = await query.findOne({ where: { oauth_type: role2.oauth_type } });
|
|
@@ -2002,15 +4999,14 @@ function roleService({ strapi: strapi2 }) {
|
|
|
2002
4999
|
}
|
|
2003
5000
|
};
|
|
2004
5001
|
}
|
|
2005
|
-
const SETTINGS_CACHE_TTL_MS = 5 * 60 * 1e3;
|
|
2006
5002
|
function whitelistService({ strapi: strapi2 }) {
|
|
2007
5003
|
let settingsCache = null;
|
|
2008
5004
|
const getPluginStore = () => strapi2.store({ environment: "", type: "plugin", name: "strapi-plugin-oidc" });
|
|
2009
|
-
const getWhitelistQuery = () => strapi2.query(
|
|
5005
|
+
const getWhitelistQuery = () => strapi2.query(CONTENT_TYPES.WHITELIST);
|
|
2010
5006
|
return {
|
|
2011
5007
|
async getSettings() {
|
|
2012
5008
|
const now = Date.now();
|
|
2013
|
-
if (settingsCache && now - settingsCache.ts <
|
|
5009
|
+
if (settingsCache && now - settingsCache.ts < CACHE_TTL.SETTINGS_MS) {
|
|
2014
5010
|
return settingsCache.value;
|
|
2015
5011
|
}
|
|
2016
5012
|
let settings = await getPluginStore().get({ key: "settings" });
|
|
@@ -2052,16 +5048,6 @@ function whitelistService({ strapi: strapi2 }) {
|
|
|
2052
5048
|
}
|
|
2053
5049
|
};
|
|
2054
5050
|
}
|
|
2055
|
-
function interpolate(str, params) {
|
|
2056
|
-
if (!params) return str;
|
|
2057
|
-
return str.replace(/\{(\w+)\}/g, (_, key) => String(params[key] ?? `{${key}}`));
|
|
2058
|
-
}
|
|
2059
|
-
function translateDetails(key, params) {
|
|
2060
|
-
const translation = en[`audit.${key}`];
|
|
2061
|
-
if (!translation) return null;
|
|
2062
|
-
return interpolate(translation, params);
|
|
2063
|
-
}
|
|
2064
|
-
const DAY_MS = 864e5;
|
|
2065
5051
|
const STRING_OP_MAP = {
|
|
2066
5052
|
$eq: (v) => v,
|
|
2067
5053
|
$contains: (v) => ({ $containsi: v }),
|
|
@@ -2118,11 +5104,12 @@ function buildWhereClause(filters) {
|
|
|
2118
5104
|
if (conditions.length === 1) return conditions[0];
|
|
2119
5105
|
return { $and: conditions };
|
|
2120
5106
|
}
|
|
5107
|
+
const BATCH_SIZE = AUDIT_LOG_DEFAULTS.BATCH_DELETE_SIZE;
|
|
2121
5108
|
function auditLogService({ strapi: strapi2 }) {
|
|
2122
5109
|
return {
|
|
2123
5110
|
async log({ action, email, ip, detailsKey, detailsParams }) {
|
|
2124
5111
|
if (!isAuditLogEnabled()) return;
|
|
2125
|
-
await strapi2.db.query(
|
|
5112
|
+
await strapi2.db.query(CONTENT_TYPES.AUDIT_LOG).create({
|
|
2126
5113
|
data: {
|
|
2127
5114
|
action,
|
|
2128
5115
|
email: email ?? null,
|
|
@@ -2142,11 +5129,11 @@ function auditLogService({ strapi: strapi2 }) {
|
|
|
2142
5129
|
},
|
|
2143
5130
|
async find({
|
|
2144
5131
|
page = 1,
|
|
2145
|
-
pageSize =
|
|
5132
|
+
pageSize = AUDIT_LOG_DEFAULTS.PAGE_SIZE,
|
|
2146
5133
|
filters
|
|
2147
5134
|
} = {}) {
|
|
2148
5135
|
const where = filters ? buildWhereClause(filters) : {};
|
|
2149
|
-
const dbQuery = strapi2.db.query(
|
|
5136
|
+
const dbQuery = strapi2.db.query(CONTENT_TYPES.AUDIT_LOG);
|
|
2150
5137
|
const [rows, total] = await Promise.all([
|
|
2151
5138
|
dbQuery.findMany({
|
|
2152
5139
|
where,
|
|
@@ -2157,10 +5144,7 @@ function auditLogService({ strapi: strapi2 }) {
|
|
|
2157
5144
|
dbQuery.count({ where })
|
|
2158
5145
|
]);
|
|
2159
5146
|
return {
|
|
2160
|
-
results: rows
|
|
2161
|
-
...row,
|
|
2162
|
-
details: row.detailsKey ? translateDetails(row.detailsKey, row.detailsParams) : null
|
|
2163
|
-
})),
|
|
5147
|
+
results: rows,
|
|
2164
5148
|
pagination: {
|
|
2165
5149
|
page,
|
|
2166
5150
|
pageSize,
|
|
@@ -2170,16 +5154,15 @@ function auditLogService({ strapi: strapi2 }) {
|
|
|
2170
5154
|
};
|
|
2171
5155
|
},
|
|
2172
5156
|
async clearAll() {
|
|
2173
|
-
const BATCH_SIZE = 1e3;
|
|
2174
5157
|
let deletedCount;
|
|
2175
5158
|
do {
|
|
2176
|
-
const result = await strapi2.db.query(
|
|
5159
|
+
const result = await strapi2.db.query(CONTENT_TYPES.AUDIT_LOG).deleteMany({ limit: BATCH_SIZE });
|
|
2177
5160
|
deletedCount = result.count;
|
|
2178
5161
|
} while (deletedCount === BATCH_SIZE);
|
|
2179
5162
|
},
|
|
2180
5163
|
async cleanup(retentionDays) {
|
|
2181
5164
|
const cutoff = new Date(Date.now() - retentionDays * DAY_MS);
|
|
2182
|
-
await strapi2.db.query(
|
|
5165
|
+
await strapi2.db.query(CONTENT_TYPES.AUDIT_LOG).deleteMany({ where: { createdAt: { $lt: cutoff } } });
|
|
2183
5166
|
}
|
|
2184
5167
|
};
|
|
2185
5168
|
}
|