UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

2 lines 3.14 kB
import{copy as e}from"../../i18n/copy.mjs";import t from"../../../constants/constants.mjs";import n from"../../logger/index.mjs";import r from"../helpers/default-user-info-mapper.mjs";const i=i=>({config:i,getAuthUrl:async r=>{try{let e=i.scopes?i.scopes.join(` `):`openid profile email`,a=new URL(i.authorizationEndpoint);if(a.searchParams.set(`client_id`,i.clientId),a.searchParams.set(`response_type`,`code`),a.searchParams.set(`redirect_uri`,r.redirectUri),a.searchParams.set(`state`,r.state),a.searchParams.set(`scope`,e),i.additionalAuthParams)for(let[e,t]of Object.entries(i.additionalAuthParams))a.searchParams.set(e,t);return n.debug({scope:t.logScopes.oidcAuth,event:`oidc.authorization-url.generated`,message:`Generating OIDC auth URL for ${i.clientId}`,data:{authEndpoint:i.authorizationEndpoint,scopes:e,redirectUri:r.redirectUri}}),{error:void 0,data:a.toString()}}catch(a){return n.error({error:a,event:`oidc.authorization-url.failed`,scope:t.logScopes.oidcAuth,message:`Failed to generate OIDC auth URL for ${i.clientId}`,data:{redirectUri:r.redirectUri}}),{error:{type:`basic`,status:500,name:e(`server:core.auth.oidc.failed.to.generate.auth.url.name`),message:e(`server:core.auth.oidc.failed.to.generate.auth.url.message`,a instanceof Error?{defaultMessage:a.message}:void 0)},data:void 0}}},handleCallback:async t=>{try{let n=i.tokenEndpoint||`${i.issuer}/oauth2/token`,a=await fetch(n,{method:`POST`,headers:{"Content-Type":`application/x-www-form-urlencoded`,Accept:`application/json`},body:new URLSearchParams({client_id:i.clientId,client_secret:i.clientSecret,code:t.code,grant_type:`authorization_code`,redirect_uri:t.redirectUri})});if(!a.ok){let t=await a.text();return{error:{type:`basic`,status:a.status,name:e(`server:core.auth.oidc.token.exchange.failed.name`),message:e(`server:core.auth.oidc.token.exchange.failed.message`,{data:{message:t}})},data:void 0}}let o=(await a.json()).access_token;if(!o)return{error:{type:`basic`,status:500,name:e(`server:core.auth.oidc.access.token.missing.name`),message:e(`server:core.auth.oidc.access.token.missing.message`)},data:void 0};let s=i.userinfoEndpoint||`${i.issuer}/oauth2/userinfo`,c=await fetch(s,{headers:{Authorization:`Bearer ${o}`,Accept:`application/json`}});if(!c.ok){let t=await c.text();return{error:{type:`basic`,status:c.status,name:e(`server:core.auth.oidc.user.info.fetch.failed.name`),message:e(`server:core.auth.oidc.user.info.fetch.failed.message`,{data:{message:t}})},data:void 0}}let l=await c.json(),u=await(i.mappers?.userInfo?i.mappers.userInfo(l):r(l));return u.error?u:u.data.userId?{error:void 0,data:{userId:String(u.data.userId),firstName:u.data.firstName,lastName:u.data.lastName}}:{error:{status:500,name:e(`server:core.auth.oidc.user.info.incomplete.name`),message:e(`server:core.auth.oidc.user.info.incomplete.message`)},data:void 0}}catch(t){return{error:{type:`basic`,status:500,name:e(`server:core.auth.oidc.callback.failed.name`),message:e(`server:core.auth.oidc.callback.failed.message`,t instanceof Error?{defaultMessage:t.message}:void 0)},data:void 0}}}});export{i as default}; //# sourceMappingURL=oidc-adapter.mjs.map