@sigiljs-community/auth-plugin
Version:
Plugin for SigilJS framework that provides authentication with JWT-like tokens
2 lines (1 loc) • 2.44 kB
JavaScript
"use strict";Object.defineProperties(exports,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}});const s=require("@sigiljs/sigil"),r=require("crypto"),u=require("./web-tokens-controller.js");function l(n){if(n&&n.__esModule)return n;const e=Object.create(null,{[Symbol.toStringTag]:{value:"Module"}});if(n){for(const t in n)if(t!=="default"){const i=Object.getOwnPropertyDescriptor(n,t);Object.defineProperty(e,t,i.get?i:{enumerable:!0,get:()=>n[t]})}}return e.default=n,Object.freeze(e)}const c=l(r);class a extends s.SigilPlugin{static name="AuthPlugin";#e;constructor(){super(),this.$pluginConfig.secretKey?this.logger({level:"info",message:"Successfully configured authentication plugin",json:{milestone:"secret",ok:!0}}):(this.logger({level:"warning",message:"No secret key found for web tokens generation, temporary key will be generated",json:{milestone:"secret",ok:!1}}),this.logger({level:"warning",message:"It is strongly recommended to avoid starting application without secret key in production environments"}));const e=this.$pluginConfig.secretKey||c.randomBytes(32);this.#e=new u.default(e),this.$pluginConfig.secretKey=Buffer.from("")}onInitialize(){if(!this.$pluginConfig.protectedRoutes||this.$pluginConfig.protectedRoutes.length===0){this.logger({level:"warning",message:"Authentication middleware not configured, you'll need to manually set up modifiers for each protected route",condition:!this.$pluginConfig.secretKey,json:{milestone:"middleware",ok:!1}});return}else this.logger({level:"info",message:`Successfully configured authentication middleware for ${this.$pluginConfig.protectedRoutes.length} protected route(s)`,condition:!this.$pluginConfig.secretKey,json:{milestone:"middleware",ok:!0}});this.sigil.addMiddleware(async(e,t)=>{if(!this.$pluginConfig.protectedRoutes?.some(o=>e.path.startsWith(o)))return;const i=e.headers.get("authorization");if(!i||!this.verifyAccessToken(i))return t.forbidden()})}issueAccessToken(e,t){return this.#e.issueWebToken(e,t)}issueRefreshToken(){return this.#e.issueRefreshToken()}verifyAccessToken(e,t){return this.#e.verifyWebToken(e,t)}verifyRefreshToken(e,t){return this.#e.verifyRefreshToken(e,t)}decodeWebToken(e){return this.#e.decodeWebToken(e)}__$getAuthHeaders(){return{refreshTokenHeader:this.$pluginConfig.authHeaders?.refreshToken||"X-Sigil-Refresh-Token",accessTokenHeader:this.$pluginConfig.authHeaders?.accessToken||"Authorization"}}}exports.default=a;