UNPKG

@adonisjs/auth

Version:

Official authentication provider for Adonis framework

131 lines (130 loc) 3.85 kB
import "node:module"; import { Exception } from "@adonisjs/core/exceptions"; var __defProp = Object.defineProperty; var __exportAll = (all, no_symbols) => { let target = {}; for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); if (!no_symbols) __defProp(target, Symbol.toStringTag, { value: "Module" }); return target; }; var errors_exports = /* @__PURE__ */ __exportAll({ E_INVALID_CREDENTIALS: () => E_INVALID_CREDENTIALS, E_UNAUTHORIZED_ACCESS: () => E_UNAUTHORIZED_ACCESS }); const E_UNAUTHORIZED_ACCESS = class extends Exception { static status = 401; static code = "E_UNAUTHORIZED_ACCESS"; redirectTo; identifier = "errors.E_UNAUTHORIZED_ACCESS"; guardDriverName; renderers = { session: (message, error, ctx) => { switch (ctx.request.accepts([ "html", "application/vnd.api+json", "json" ])) { case "html": case null: ctx.session.flashExcept(["_csrf"]); ctx.session.flash("error", message); ctx.session.flashErrors({ [error.code]: message }); ctx.response.redirect(error.redirectTo || "/", true); break; case "json": ctx.response.status(error.status).send({ errors: [{ message }] }); break; case "application/vnd.api+json": ctx.response.status(error.status).send({ errors: [{ code: error.code, title: message }] }); break; } }, basic_auth: (message, _, ctx) => { ctx.response.status(this.status).header("WWW-Authenticate", `Basic realm="Authenticate", charset="UTF-8"`).send(message); }, access_tokens: (message, error, ctx) => { switch (ctx.request.accepts([ "html", "application/vnd.api+json", "json" ])) { case "html": case null: ctx.response.status(error.status).send(message); break; case "json": ctx.response.status(error.status).send({ errors: [{ message }] }); break; case "application/vnd.api+json": ctx.response.status(error.status).send({ errors: [{ code: error.code, title: message }] }); break; } } }; getResponseMessage(error, ctx) { if ("i18n" in ctx) return ctx.i18n.t(error.identifier, {}, error.message); return error.message; } constructor(message, options) { super(message, {}); this.guardDriverName = options.guardDriverName; this.redirectTo = options.redirectTo; } async handle(error, ctx) { const renderer = this.renderers[this.guardDriverName]; const message = error.getResponseMessage(error, ctx); if (!renderer) return ctx.response.status(error.status).send(message); return renderer(message, error, ctx); } }; const E_INVALID_CREDENTIALS = class extends Exception { static status = 400; static code = "E_INVALID_CREDENTIALS"; identifier = "errors.E_INVALID_CREDENTIALS"; getResponseMessage(error, ctx) { if ("i18n" in ctx) return ctx.i18n.t(error.identifier, {}, error.message); return error.message; } async handle(error, ctx) { const message = this.getResponseMessage(error, ctx); switch (ctx.request.accepts([ "html", "application/vnd.api+json", "json" ])) { case "html": case null: if (ctx.session) { ctx.session.flashExcept([ "_csrf", "_method", "password", "password_confirmation" ]); ctx.session.flash("error", message); ctx.session.flashErrors({ [error.code]: message }); ctx.response.redirect("back", true); } else ctx.response.status(error.status).send(message); break; case "json": ctx.response.status(error.status).send({ errors: [{ message }] }); break; case "application/vnd.api+json": ctx.response.status(error.status).send({ errors: [{ code: error.code, title: message }] }); break; } } }; export { __exportAll as i, E_UNAUTHORIZED_ACCESS as n, errors_exports as r, E_INVALID_CREDENTIALS as t };