UNPKG

@backstage/backend-defaults

Version:

Backend defaults used by Backstage backend apps

55 lines (51 loc) 1.82 kB
'use strict'; var errors = require('@backstage/errors'); var jose = require('jose'); var helpers = require('../auth/helpers.cjs.js'); class DefaultUserInfoService { discovery; constructor(options) { this.discovery = options.discovery; } async getUserInfo(credentials) { const internalCredentials = helpers.toInternalBackstageCredentials(credentials); if (internalCredentials.principal.type !== "user") { throw new Error("Only user credentials are supported"); } if (!internalCredentials.token) { throw new Error("User credentials is unexpectedly missing token"); } const { sub: userEntityRef, ent: tokenEnt } = jose.decodeJwt( internalCredentials.token ); if (typeof userEntityRef !== "string") { throw new Error("User entity ref must be a string"); } let ownershipEntityRefs = tokenEnt; if (!ownershipEntityRefs) { const userInfoResp = await fetch( `${await this.discovery.getBaseUrl("auth")}/v1/userinfo`, { headers: { Authorization: `Bearer ${internalCredentials.token}` } } ); if (!userInfoResp.ok) { throw await errors.ResponseError.fromResponse(userInfoResp); } const { claims: { ent } } = await userInfoResp.json(); ownershipEntityRefs = ent; } if (!ownershipEntityRefs) { throw new Error("Ownership entity refs can not be determined"); } else if (!Array.isArray(ownershipEntityRefs) || ownershipEntityRefs.some((ref) => typeof ref !== "string")) { throw new Error("Ownership entity refs must be an array of strings"); } return { userEntityRef, ownershipEntityRefs }; } } exports.DefaultUserInfoService = DefaultUserInfoService; //# sourceMappingURL=DefaultUserInfoService.cjs.js.map