UNPKG

@toruslabs/customauth

Version:

CustomAuth login with torus to get user private key

108 lines (105 loc) 3.13 kB
import { get } from '@toruslabs/http-helpers'; import deepmerge from 'deepmerge'; import log from 'loglevel'; import { UX_MODE } from '../utils/enums.js'; import { constructURL, decodeToken, getUserId, padUrlString } from '../utils/helpers.js'; import { PopupHandler } from '../utils/PopupHandler.js'; import AbstractLoginHandler from './AbstractLoginHandler.js'; class MockLoginHandler extends AbstractLoginHandler { constructor(params) { super(params); this.setFinalUrl(); } setFinalUrl() { const clonedParams = JSON.parse(JSON.stringify(this.params.jwtParams)); delete clonedParams.domain; const finalJwtParams = deepmerge({ state: this.state, client_id: this.params.clientId, nonce: this.nonce }, clonedParams); this.finalURL = new URL(constructURL({ baseURL: this.params.redirect_uri, query: null, hash: finalJwtParams })); } async getUserInfo(params) { const { idToken, accessToken } = params; const { domain, userIdField, isUserIdCaseSensitive, user_info_route = "userinfo" } = this.params.jwtParams; if (idToken) { const decodedToken = decodeToken(idToken).payload; const { name, email, picture } = decodedToken; return { profileImage: picture, name, email, userId: getUserId(decodedToken, this.params.authConnection, userIdField, isUserIdCaseSensitive), authConnectionId: this.params.authConnectionId, authConnection: this.params.authConnection, groupedAuthConnectionId: this.params.groupedAuthConnectionId }; } if (accessToken) { try { const domainUrl = new URL(domain); const userInfo = await get(`${padUrlString(domainUrl)}${user_info_route}`, { headers: { Authorization: `Bearer ${accessToken}` } }); const { picture, name, email } = userInfo; return { email, name, profileImage: picture, userId: getUserId(userInfo, this.params.authConnection, userIdField, isUserIdCaseSensitive), authConnectionId: this.params.authConnectionId, authConnection: this.params.authConnection, groupedAuthConnectionId: this.params.groupedAuthConnectionId }; } catch (error) { // ignore log.warn(error, "Unable to get userinfo from endpoint"); } } throw new Error("Access/id token not available"); } handleLoginWindow(params) { const { id_token: idToken, access_token: accessToken } = this.params.jwtParams; const authConnectionWindow = new PopupHandler({ url: this.finalURL, features: params.popupFeatures }); if (this.params.uxMode === UX_MODE.REDIRECT) { authConnectionWindow.redirect(params.locationReplaceOnRedirect); } else { return Promise.resolve({ state: {}, idToken, accessToken }); } return null; } } export { MockLoginHandler as default };