authhero 5.8.0 → 5.8.1
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/authhero.cjs +3 -3
- package/dist/authhero.d.ts +9 -2
- package/dist/authhero.mjs +33 -29
- package/dist/stats.html +1 -1
- package/package.json +3 -3
package/dist/authhero.d.ts
CHANGED
|
@@ -56868,12 +56868,19 @@ export declare function seed(adapters: DataAdapters, options: SeedOptions): Prom
|
|
|
56868
56868
|
export declare const MANAGEMENT_API_AUDIENCE = "urn:authhero:management";
|
|
56869
56869
|
/**
|
|
56870
56870
|
* This registeres the authentication middleware. As it needs to read the OpenAPI definition, it needs to have a reference to the app.
|
|
56871
|
-
*
|
|
56871
|
+
*
|
|
56872
|
+
* `requireManagementAudience` enables the defense-in-depth check that the
|
|
56873
|
+
* token's `aud` includes the management API audience. It must be enabled
|
|
56874
|
+
* for the management API and left off for everything else (the `/userinfo`
|
|
56875
|
+
* endpoint, for example, takes any access token issued by this tenant).
|
|
56872
56876
|
*/
|
|
56877
|
+
export interface AuthMiddlewareOptions {
|
|
56878
|
+
requireManagementAudience?: boolean;
|
|
56879
|
+
}
|
|
56873
56880
|
export declare function createAuthMiddleware(app: OpenAPIHono<{
|
|
56874
56881
|
Bindings: Bindings;
|
|
56875
56882
|
Variables: Variables;
|
|
56876
|
-
}
|
|
56883
|
+
}>, options?: AuthMiddlewareOptions): (ctx: Context<{
|
|
56877
56884
|
Bindings: Bindings;
|
|
56878
56885
|
Variables: any;
|
|
56879
56886
|
}>, next: Next) => Promise<void>;
|
package/dist/authhero.mjs
CHANGED
|
@@ -6659,7 +6659,7 @@ var d9 = (e, t) => {
|
|
|
6659
6659
|
const r = m9(t, n, i);
|
|
6660
6660
|
e.header("Set-Cookie", r, { append: !0 });
|
|
6661
6661
|
};
|
|
6662
|
-
const Yl = "
|
|
6662
|
+
const Yl = "mpkxkgol", tT = { common: { alertListTitle: "Upozornění", backText: "Vrátit se zpět", cancelText: "Zrušit", closeText: "Zavřít", contactSupportText: "Potřebujete pomoc?", continueText: "Pokračovat", copyrightText: "© ${currentYear} ${companyName}", errorText: "Něco se pokazilo. Zkuste to prosím znovu.", hidePasswordText: "Skrýt heslo", loadingText: "Načítání...", orText: "nebo", privacyPolicyText: "Zásady ochrany osobních údajů", showPasswordText: "Zobrazit heslo", termsOfServiceText: "Podmínky služby", termsShortText: "Podmínky", tryAgainText: "Zkusit znovu" } }, nT = { consent: { buttonText: "Přijmout", cancelButtonText: "Zamítnout", description: "${clientName} žádá o přístup k vašemu účtu", pageTitle: "Autorizace | ${clientName}", scopesTitle: "Tímto povolíte ${clientName}:", title: "Autorizovat ${clientName}" } }, iT = { invitation: { acceptButtonText: "Přijmout pozvánku", description: "${inviterName} vás pozval(a), abyste se připojili k ${organizationName} na ${clientName}", pageTitle: "Pozvánka | ${clientName}", title: "Byli jste pozváni" } }, rT = { login: { alertListTitle: "Upozornění", buttonText: "Pokračovat", description: "Přihlaste se k ${clientName}.", editEmailText: "Upravit", emailPlaceholder: "E-mailová adresa", enterACodeBtn: "Přihlásit se kódem", federatedConnectionButtonText: "Pokračovat s ${connectionName}", footerLinkText: "Zaregistrujte se", footerText: "Nemáte účet?", forgotPasswordText: "Zapomněli jste heslo?", hidePasswordText: "Skrýt heslo", invalidEmail: "Neplatný e-mail", invalidIdentifier: "Neplatný e-mail nebo uživatelské jméno", invitationDescription: "Přihlaste se pro přijetí pozvánky od ${inviterName} k připojení k ${companyName} na ${clientName}.", invitationTitle: "Byli jste pozváni!", logoAltText: "${companyName}", "no-email": "Zadejte prosím e-mailovou adresu", "no-password": "Heslo je povinné", pageTitle: "Přihlášení | ${clientName}", passwordLoginNotAvailable: "Přihlášení heslem není k dispozici", passwordPlaceholder: "Heslo", phonePlaceholder: "Telefonní číslo", separatorText: "nebo", sessionExpired: "Platnost vaší relace vypršela. Zkuste to prosím znovu.", showPasswordText: "Zobrazit heslo", signupActionLinkText: "${footerLinkText}", signupActionText: "${footerText}", title: "Vítejte", tooManyFailedLogins: "Příliš mnoho neúspěšných pokusů o přihlášení. Zkuste to prosím později.", unverifiedEmail: "Před přihlášením prosím ověřte svou e-mailovou adresu", userAccountDoesNotExist: "Uživatelský účet neexistuje", usernamePlaceholder: "Uživatelské jméno nebo e-mailová adresa", usernameTooLong: "Uživatelské jméno musí mít nejvýše ${max} znaků", usernameTooShort: "Uživatelské jméno musí mít alespoň ${min} znaků", wrongCredentials: "Nesprávné uživatelské jméno nebo heslo", passkeyButtonText: "Přihlásit se pomocí passkey" } }, oT = { mfa: { backupCodeText: "Použít záložní kód", description: "Zvolte metodu ověření", pageTitle: "Vícefaktorové ověření | ${clientName}", title: "Ověřte svou identitu" } }, sT = { "passkey-enrollment-nudge": { title: "Zabezpečte svůj účet pomocí passkey", description: "Passkey používají biometrii nebo PIN vašeho zařízení k rychlejšímu a bezpečnějšímu přihlášení.", enrollButtonText: "Nastavit passkey", snoozeButtonText: "Možná později", optOutLinkText: "Nezobrazovat znovu", pageTitle: "Nastavení Passkey | ${clientName}" }, "passkey-enrollment": { title: "Vytvořte svůj passkey", description: "Postupujte podle pokynů prohlížeče a vytvořte passkey pro tento účet.", errorMessage: "Vytvoření passkey se nezdařilo. Zkuste to prosím znovu.", cancelLinkText: "Prozatím přeskočit", retryButtonText: "Zkusit znovu", enrollmentComplete: "Váš passkey byl úspěšně nastaven. Tuto stránku můžete zavřít.", pageTitle: "Vytvoření Passkey | ${clientName}" }, "passkey-challenge": { title: "Přihlásit se pomocí passkey", description: "Postupujte podle pokynů prohlížeče k ověření vaší identity.", errorMessage: "Ověření pomocí passkey selhalo. Zkuste to prosím znovu.", cancelLinkText: "Zpět na přihlášení", retryButtonText: "Zkusit znovu", pageTitle: "Přihlášení pomocí passkey | ${clientName}" } }, aT = { organizations: { description: "Vyberte, ke které organizaci se chcete přihlásit", pageTitle: "Výběr organizace | ${clientName}", searchPlaceholder: "Hledat organizace", title: "Vyberte svou organizaci" } }, cT = { signup: { buttonText: "Pokračovat", confirmPasswordPlaceholder: "Potvrzení hesla", description: "Zaregistrujte se a pokračujte", "email-already-exists": "Tento e-mail je již zaregistrován", emailPlaceholder: "E-mailová adresa", federatedConnectionButtonText: "Pokračovat s ${connectionName}", hidePasswordText: "Skrýt heslo", "invalid-email-format": "Neplatný e-mail", loginActionLinkText: "Přihlásit se", loginActionText: "Už máte účet?", "no-email": "Zadejte prosím e-mailovou adresu", "no-password": "Heslo je povinné", "no-username": "Uživatelské jméno je povinné", pageTitle: "Registrace | ${clientName}", passwordPlaceholder: "Heslo", passwordsDidntMatch: "Hesla se neshodují", phonePlaceholder: "Telefonní číslo", privacyPolicyLinkText: "Zásady ochrany osobních údajů", separatorText: "nebo", sessionExpired: "Platnost vaší relace vypršela. Zkuste to prosím znovu.", showPasswordText: "Zobrazit heslo", termsOfServiceLinkText: "Podmínky služby", termsText: "Registrací souhlasíte s našimi", title: "Vytvořte svůj účet", "username-already-exists": "Toto uživatelské jméno je již obsazeno", usernamePlaceholder: "Uživatelské jméno", verifyEmailText: "Zkontrolujte prosím svůj e-mail pro ověření účtu" } }, lT = { status: { continueButtonText: "Pokračovat", errorTitle: "Chyba", pageTitle: "Stav | ${clientName}", successTitle: "Hotovo", title: "Stav" } }, y9 = {
|
|
6663
6663
|
common: tT,
|
|
6664
6664
|
consent: nT,
|
|
6665
6665
|
"device-flow": { "device-flow": { buttonText: "Pokračovat", codePlaceholder: "Zadejte kód", description: "Zadejte kód zobrazený na vašem zařízení", "expired-code": "Platnost kódu vypršela", "invalid-code": "Zadaný kód je neplatný", pageTitle: "Aktivace zařízení | ${clientName}", title: "Aktivujte své zařízení" } },
|
|
@@ -39814,43 +39814,47 @@ const Y6 = "urn:authhero:management";
|
|
|
39814
39814
|
function AJ(e) {
|
|
39815
39815
|
return e.replace(/:([a-zA-Z_][a-zA-Z0-9_]*)/g, "{$1}");
|
|
39816
39816
|
}
|
|
39817
|
-
function Wb(e) {
|
|
39818
|
-
|
|
39819
|
-
|
|
39820
|
-
|
|
39817
|
+
function Wb(e, t = {}) {
|
|
39818
|
+
const n = t.requireManagementAudience ?? !1;
|
|
39819
|
+
return async (i, r) => {
|
|
39820
|
+
const o = i.req.matchedRoutes.find(
|
|
39821
|
+
(u) => u.method.toUpperCase() === i.req.method && u.path !== "/*"
|
|
39821
39822
|
);
|
|
39822
|
-
if (!
|
|
39823
|
-
return await
|
|
39824
|
-
const
|
|
39825
|
-
(
|
|
39823
|
+
if (!o)
|
|
39824
|
+
return await r();
|
|
39825
|
+
const a = AJ(o.path), c = "/api/v2", l = a.startsWith(c) ? a.slice(c.length) || "/" : a, d = e.openAPIRegistry.definitions.find(
|
|
39826
|
+
(u) => "route" in u && u.route.path === l && u.route.method.toUpperCase() === i.req.method.toUpperCase()
|
|
39826
39827
|
);
|
|
39827
|
-
if (
|
|
39828
|
-
const
|
|
39829
|
-
if (
|
|
39830
|
-
return await
|
|
39831
|
-
const
|
|
39832
|
-
if (!
|
|
39828
|
+
if (d && "route" in d) {
|
|
39829
|
+
const u = d.route.security?.[0]?.Bearer;
|
|
39830
|
+
if (u === void 0)
|
|
39831
|
+
return await r();
|
|
39832
|
+
const p = Gb(i.req.header("authorization"));
|
|
39833
|
+
if (!p)
|
|
39833
39834
|
throw new V(401, {
|
|
39834
39835
|
message: "Missing bearer token"
|
|
39835
39836
|
});
|
|
39836
39837
|
try {
|
|
39837
|
-
const
|
|
39838
|
-
if (
|
|
39839
|
-
|
|
39840
|
-
|
|
39841
|
-
|
|
39842
|
-
|
|
39843
|
-
|
|
39844
|
-
|
|
39845
|
-
(
|
|
39838
|
+
const f = await Kf(i, p);
|
|
39839
|
+
if (n) {
|
|
39840
|
+
const m = f.aud;
|
|
39841
|
+
if (!(Array.isArray(m) ? m : m ? [m] : []).includes(Y6))
|
|
39842
|
+
throw new V(403, {
|
|
39843
|
+
message: "Invalid audience"
|
|
39844
|
+
});
|
|
39845
|
+
}
|
|
39846
|
+
i.set("user_id", f.sub), i.set("user", f), f.org_name && i.set("org_name", f.org_name), f.org_id && i.set("organization_id", f.org_id), !i.var.tenant_id && f.tenant_id && i.set("tenant_id", f.tenant_id);
|
|
39847
|
+
const h = Array.isArray(f.permissions) ? f.permissions : [], g = typeof f.scope == "string" ? f.scope.split(" ") : Array.isArray(f.scope) ? f.scope : [];
|
|
39848
|
+
if (u.length && !// Should we check both?
|
|
39849
|
+
(u.some(
|
|
39846
39850
|
(m) => h.includes(m)
|
|
39847
|
-
) ||
|
|
39851
|
+
) || u.some((m) => g.includes(m))))
|
|
39848
39852
|
throw new V(403, { message: "Unauthorized" });
|
|
39849
|
-
} catch (
|
|
39850
|
-
throw
|
|
39853
|
+
} catch (f) {
|
|
39854
|
+
throw f instanceof P ? f : new V(403, { message: "Invalid token" });
|
|
39851
39855
|
}
|
|
39852
39856
|
}
|
|
39853
|
-
return await
|
|
39857
|
+
return await r();
|
|
39854
39858
|
};
|
|
39855
39859
|
}
|
|
39856
39860
|
const jS = new le().openapi(
|
|
@@ -46317,7 +46321,7 @@ function JY(e) {
|
|
|
46317
46321
|
})
|
|
46318
46322
|
), t.use(async (c, l) => {
|
|
46319
46323
|
c.env.data = r(c, n), c.env.entityHooks = e.entityHooks, await l();
|
|
46320
|
-
}), t.use(uu).use(du).use(Wb(t)).use(async (c, l) => (e.entityHooks && c.var.tenant_id && (c.env.data = DJ(c.env.data, {
|
|
46324
|
+
}), t.use(uu).use(du).use(Wb(t, { requireManagementAudience: !0 })).use(async (c, l) => (e.entityHooks && c.var.tenant_id && (c.env.data = DJ(c.env.data, {
|
|
46321
46325
|
tenantId: c.var.tenant_id,
|
|
46322
46326
|
entityHooks: e.entityHooks
|
|
46323
46327
|
})), l()));
|