UNPKG

@ownid/azure-b2c

Version:

Server-side library for integrating OwnID passwordless authentication with Azure Active Directory B2C

114 lines (113 loc) 4.43 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.createOwnIdAzureB2CRouter = createOwnIdAzureB2CRouter; const express_1 = __importDefault(require("express")); const auth_1 = require("../core/auth"); const user_service_1 = require("../core/user-service"); /** * Creates an Express Router with endpoints for OwnID-Azure B2C integration * * @param config - OwnID Azure B2C configuration * @returns Express Router with OwnID endpoints */ function createOwnIdAzureB2CRouter(config) { const router = express_1.default.Router(); const auth = new auth_1.OwnIDB2CAuth(config); const userService = new user_service_1.OwnIDB2CUserService(auth); // Set OwnID data for a user router.post('/setOwnIDDataByLoginId', async (req, res) => { try { // Verify the OwnID request signature try { auth.verifyOwnIdRequest(req.body, req.headers); } catch (verificationError) { return res.status(401).json({ error: verificationError.message }); } const { loginId: email, ownIdData } = req.body; const user = await userService.findUserByEmail(email); if (!user) { return res.status(404).json({ error: 'User not found' }); } await userService.setOwnIdData(user.id, ownIdData); return res.sendStatus(204); } catch (error) { return res.status(500).json({ error: 'Internal server error', details: error.message }); } }); // Get OwnID data for a user router.post('/getOwnIDDataByLoginId', async (req, res) => { try { // Verify the OwnID request signature try { auth.verifyOwnIdRequest(req.body, req.headers); } catch (verificationError) { return res.status(401).json({ error: verificationError.message }); } const { loginId: email } = req.body; const user = await userService.findUserByEmail(email); if (!user) { return res.json({ errorCode: 404 }); } const userData = await userService.getOwnIdData(user.id); return res.json({ ownIdData: userData.ownIdData || null }); } catch (error) { return res.status(500).json({ error: 'Internal server error', details: error.message }); } }); // Generate session tokens for a user router.post('/getSessionByLoginId', async (req, res) => { try { // Verify the OwnID request signature try { auth.verifyOwnIdRequest(req.body, req.headers); } catch (verificationError) { return res.status(401).json({ error: verificationError.message }); } const { loginId: email } = req.body; const user = await userService.findUserByEmail(email); if (!user) { return res.status(404).json({ error: 'User not found' }); } try { // If a custom session generator is provided, use it if (config.customSessionGenerator) { const userData = await userService.getOwnIdData(user.id); const customToken = await config.customSessionGenerator(user.id, email, userData); return res.json(customToken); } else { // Otherwise, use the default token generator const tokenResponse = await userService.getTokens(user.id, email); return res.json(tokenResponse); } } catch (tokenError) { return res.status(500).json({ error: 'Error acquiring authentication tokens', details: tokenError.message }); } } catch (error) { return res.status(500).json({ error: 'Internal server error', details: error.message }); } }); return router; }