@nrk/innlogging-dev
Advanced tools
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAGA,OAAO,OAAO,MAAM,SAAS,CAAC;AAe9B,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAiBlD,eAAO,MAAM,eAAe,GAAI,YAAY,gBAAgB,mBAiS3D,CAAC"} | ||
| {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAGA,OAAO,OAAO,MAAM,SAAS,CAAC;AAgB9B,OAAO,KAAK,EAAE,gBAAgB,EAAY,MAAM,WAAW,CAAC;AAiF5D,eAAO,MAAM,eAAe,GAAI,YAAY,gBAAgB,mBA6S3D,CAAC"} |
+100
-27
@@ -5,21 +5,84 @@ import { SESSION_VERSION } from '@nrk/innlogging-shared/constants'; | ||
| import cookieParser from 'cookie-parser'; | ||
| import { initAuthority } from "./utils/authority.js"; | ||
| import { addNoCacheHeaders, getSearchParams, handleHTTPMethod, } from "./utils/connect.js"; | ||
| import { IdentitySwapRejectedError, initAuthority } from "./utils/authority.js"; | ||
| import { addNoCacheHeaders, extractSubFromUrl, getSearchParams, handleHTTPMethod, } from "./utils/connect.js"; | ||
| import { consentsCookie, hCookie, newsRegionCookie, refreshTokenCookie, } from "./utils/cookie.js"; | ||
| import { initHtmlTemplates } from "./utils/template.js"; | ||
| const TEST_USERS = [ | ||
| { name: 'armand', username: 'armand.oppad.strekk@test.neon.nrk.no' }, | ||
| { name: 'harald', username: 'harald.verdens.tid@test.neon.nrk.no' }, | ||
| { name: 'emba', username: 'emba.larsen@test.neon.nrk.no' }, | ||
| { name: 'trond', username: 'trond.bone@test.neon.nrk.no' }, | ||
| { name: 'tarjei', username: 'tarjei.sammen.jr@test.neon.nrk.no' }, | ||
| { name: 'solvi', username: 'solvi.normalbakken@test.neon.nrk.no' }, | ||
| { name: 'tor', username: 'tor.peder.ringen@test.neon.nrk.no' }, | ||
| { name: 'karl', username: 'karl.esjen@test.neon.nrk.no' }, | ||
| { name: 'trude', username: 'trude.rude.rantan@test.neon.nrk.no' }, | ||
| { name: 'lan', username: 'lan.borghini@test.neon.nrk.no' }, | ||
| const TEST_PASSWORD = 'TestPassword123'; | ||
| const DEFAULT_TEST_USERS = [ | ||
| { | ||
| name: 'armand', | ||
| username: 'armand.oppad.strekk@test.neon.nrk.no', | ||
| password: TEST_PASSWORD, | ||
| }, | ||
| { | ||
| name: 'harald', | ||
| username: 'harald.verdens.tid@test.neon.nrk.no', | ||
| password: TEST_PASSWORD, | ||
| }, | ||
| { | ||
| name: 'emba', | ||
| username: 'emba.larsen@test.neon.nrk.no', | ||
| password: TEST_PASSWORD, | ||
| }, | ||
| { | ||
| name: 'trond', | ||
| username: 'trond.bone@test.neon.nrk.no', | ||
| password: TEST_PASSWORD, | ||
| }, | ||
| { | ||
| name: 'tarjei', | ||
| username: 'tarjei.sammen.jr@test.neon.nrk.no', | ||
| password: TEST_PASSWORD, | ||
| }, | ||
| { | ||
| name: 'solvi', | ||
| username: 'solvi.normalbakken@test.neon.nrk.no', | ||
| password: TEST_PASSWORD, | ||
| }, | ||
| { | ||
| name: 'tor', | ||
| username: 'tor.peder.ringen@test.neon.nrk.no', | ||
| password: TEST_PASSWORD, | ||
| }, | ||
| { | ||
| name: 'karl', | ||
| username: 'karl.esjen@test.neon.nrk.no', | ||
| password: TEST_PASSWORD, | ||
| }, | ||
| { | ||
| name: 'trude', | ||
| username: 'trude.rude.rantan@test.neon.nrk.no', | ||
| password: TEST_PASSWORD, | ||
| }, | ||
| { | ||
| name: 'lan', | ||
| username: 'lan.borghini@test.neon.nrk.no', | ||
| password: TEST_PASSWORD, | ||
| }, | ||
| ]; | ||
| const TEST_PASSWORD = 'TestPassword123'; | ||
| const DEFAULT_SCOPE = ['openid', 'profile', 'email', 'psapi-userdata']; | ||
| const DEFAULT_SCOPE = ['openid', 'profile', 'email']; | ||
| const validateTestUsers = (users) => { | ||
| const errors = []; | ||
| users.forEach((user, index) => { | ||
| if (!user.name) | ||
| errors.push(`testUsers[${index}]: 'name' must be a non-empty string`); | ||
| if (!user.username) | ||
| errors.push(`testUsers[${index}]: 'username' must be a non-empty string`); | ||
| if (!user.password) | ||
| errors.push(`testUsers[${index}]: 'password' must be a non-empty string`); | ||
| }); | ||
| const names = users.map((u) => u.name).filter(Boolean); | ||
| const duplicates = names.filter((name, i) => names.indexOf(name) !== i); | ||
| if (duplicates.length > 0) { | ||
| errors.push(`testUsers: duplicate name(s) found: ${[...new Set(duplicates)].join(', ')}`); | ||
| } | ||
| if (errors.length > 0) { | ||
| throw new Error(`innlogging-dev: invalid testUsers configuration:\n${errors.join('\n')}`); | ||
| } | ||
| }; | ||
| export const loginDevConnect = (pluginOpts) => { | ||
| if (pluginOpts.testUsers != null) { | ||
| validateTestUsers(pluginOpts.testUsers); | ||
| } | ||
| const testUsers = pluginOpts.testUsers ?? DEFAULT_TEST_USERS; | ||
| const htmlTemplates = initHtmlTemplates(); | ||
@@ -41,3 +104,3 @@ const authority = initAuthority({ | ||
| try { | ||
| refreshResult = await handleSessionRefresh(req.cookies); | ||
| refreshResult = await handleSessionRefresh(req.cookies, null); | ||
| } | ||
@@ -60,3 +123,3 @@ catch { | ||
| returnToEditProfileUrl, | ||
| users: TEST_USERS, | ||
| users: testUsers, | ||
| session: refreshResult?.session, | ||
@@ -69,3 +132,3 @@ })); | ||
| const returnUrl = searchParams.get('returnUrl') ?? '/'; | ||
| const user = TEST_USERS.find(({ name }) => name === req.body.user); | ||
| const user = testUsers.find(({ name }) => name === req.body.user); | ||
| if (user == null) { | ||
@@ -78,3 +141,3 @@ return res | ||
| username: user.username, | ||
| password: TEST_PASSWORD, | ||
| password: user.password, | ||
| scope: [...DEFAULT_SCOPE, ...(pluginOpts.scopes ?? [])], | ||
@@ -92,3 +155,3 @@ }); | ||
| })); | ||
| app.use('/session/tokenforsub', handleHTTPMethod('POST', async (req, res) => { | ||
| const sessionRefreshHandler = handleHTTPMethod('POST', async (req, res) => { | ||
| addNoCacheHeaders(res); | ||
@@ -100,4 +163,5 @@ if (req.headers['x-auth-csrf'] !== '1') { | ||
| } | ||
| const sub = extractSubFromUrl(req.url); | ||
| try { | ||
| const { session, cookies } = await handleSessionRefresh(req.cookies); | ||
| const { session, cookies } = await handleSessionRefresh(req.cookies, sub); | ||
| return res | ||
@@ -111,2 +175,7 @@ .writeHead(200, { | ||
| catch (e) { | ||
| if (e instanceof IdentitySwapRejectedError) { | ||
| return res | ||
| .writeHead(409, { 'Content-Type': 'text/plain' }) | ||
| .end(`Identity swap rejected for ${e.sub}`); | ||
| } | ||
| const message = e instanceof Error ? e.message : String(e); | ||
@@ -117,4 +186,8 @@ return res | ||
| } | ||
| })); | ||
| const handleSessionRefresh = async (cookies) => { | ||
| }); | ||
| // New path used by the client since the token_for_sub → swap_sub migration. | ||
| app.use('/session/token/refresh', sessionRefreshHandler); | ||
| // Legacy alias kept so older builds of innlogging-client still work locally. | ||
| app.use('/session/tokenforsub', sessionRefreshHandler); | ||
| const handleSessionRefresh = async (cookies, sub) => { | ||
| const refreshToken = refreshTokenCookie.read(cookies); | ||
@@ -133,6 +206,6 @@ if (refreshToken == null) { | ||
| } | ||
| const { refreshToken: newRefreshToken, ...session } = await authority.tokenForSubGrant({ | ||
| refreshToken: refreshToken, | ||
| scope: [...DEFAULT_SCOPE, ...(pluginOpts.scopes ?? [])], | ||
| }); | ||
| const scope = [...DEFAULT_SCOPE, ...(pluginOpts.scopes ?? [])]; | ||
| const { refreshToken: newRefreshToken, ...session } = sub == null | ||
| ? await authority.refreshTokenGrant({ refreshToken, scope }) | ||
| : await authority.swapSubGrant({ refreshToken, sub, scope }); | ||
| return { | ||
@@ -139,0 +212,0 @@ session: { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"connect.js","sourceRoot":"","sources":["../src/connect.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAEnE,OAAO,UAAU,MAAM,aAAa,CAAC;AACrC,OAAO,OAAO,MAAM,SAAS,CAAC;AAC9B,OAAO,YAAY,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,yBAAyB,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAChF,OAAO,EACL,iBAAiB,EACjB,iBAAiB,EACjB,eAAe,EACf,gBAAgB,GACjB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,cAAc,EACd,OAAO,EACP,gBAAgB,EAChB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAGxD,MAAM,aAAa,GAAG,iBAAiB,CAAC;AACxC,MAAM,kBAAkB,GAAe;IACrC;QACE,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,sCAAsC;QAChD,QAAQ,EAAE,aAAa;KACxB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,qCAAqC;QAC/C,QAAQ,EAAE,aAAa;KACxB;IACD;QACE,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,8BAA8B;QACxC,QAAQ,EAAE,aAAa;KACxB;IACD;QACE,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,6BAA6B;QACvC,QAAQ,EAAE,aAAa;KACxB;IACD;QACE,IAAI,EAAE,QAAQ;QACd,QAAQ,EAAE,mCAAmC;QAC7C,QAAQ,EAAE,aAAa;KACxB;IACD;QACE,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,qCAAqC;QAC/C,QAAQ,EAAE,aAAa;KACxB;IACD;QACE,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,mCAAmC;QAC7C,QAAQ,EAAE,aAAa;KACxB;IACD;QACE,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE,6BAA6B;QACvC,QAAQ,EAAE,aAAa;KACxB;IACD;QACE,IAAI,EAAE,OAAO;QACb,QAAQ,EAAE,oCAAoC;QAC9C,QAAQ,EAAE,aAAa;KACxB;IACD;QACE,IAAI,EAAE,KAAK;QACX,QAAQ,EAAE,+BAA+B;QACzC,QAAQ,EAAE,aAAa;KACxB;CACF,CAAC;AACF,MAAM,aAAa,GAAG,CAAC,QAAQ,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;AAErD,MAAM,iBAAiB,GAAG,CAAC,KAAiB,EAAQ,EAAE;IACpD,MAAM,MAAM,GAAa,EAAE,CAAC;IAC5B,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE;QAC5B,IAAI,CAAC,IAAI,CAAC,IAAI;YACZ,MAAM,CAAC,IAAI,CAAC,aAAa,KAAK,sCAAsC,CAAC,CAAC;QACxE,IAAI,CAAC,IAAI,CAAC,QAAQ;YAChB,MAAM,CAAC,IAAI,CAAC,aAAa,KAAK,0CAA0C,CAAC,CAAC;QAC5E,IAAI,CAAC,IAAI,CAAC,QAAQ;YAChB,MAAM,CAAC,IAAI,CAAC,aAAa,KAAK,0CAA0C,CAAC,CAAC;IAC9E,CAAC,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvD,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACxE,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,CAAC,IAAI,CACT,uCAAuC,CAAC,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC7E,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CACb,qDAAqD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CACzE,CAAC;IACJ,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,UAA4B,EAAE,EAAE;IAC9D,IAAI,UAAU,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QACjC,iBAAiB,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,SAAS,GAAG,UAAU,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAC7D,MAAM,aAAa,GAAG,iBAAiB,EAAE,CAAC;IAC1C,MAAM,SAAS,GAAG,aAAa,CAAC;QAC9B,MAAM,EAAE,UAAU,CAAC,MAAM;QACzB,QAAQ,EAAE,UAAU,CAAC,QAAQ;QAC7B,YAAY,EAAE,UAAU,CAAC,YAAY;KACtC,CAAC,CAAC;IACH,MAAM,GAAG,GAAG,OAAO,EAAE,CAAC;IACtB,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAEpD,GAAG,CAAC,GAAG,CACL,QAAQ,EACR,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACzC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC;QACvD,MAAM,sBAAsB,GAAG,kBAAkB,CAC/C,oBAAoB,YAAY,CAAC,QAAQ,EAAE,EAAE,CAC9C,CAAC;QACF,IAAI,aAAa,CAAC;QAClB,IAAI,CAAC;YACH,aAAa,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QAChE,CAAC;QAAC,MAAM,CAAC;YACP,aAAa,GAAG,IAAI,CAAC;QACvB,CAAC;QACD,IAAI,aAAa,IAAI,IAAI,EAAE,CAAC;YAC1B,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE;gBAC1B,aAAa,CAAC,OAAO,CAAC,YAAY;gBAClC,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC;aACpC,CAAC,CAAC;QACL,CAAC;QACD,OAAO,GAAG;aACP,SAAS,CAAC,GAAG,EAAE;YACd,cAAc,EAAE,WAAW;SAC5B,CAAC;aACD,GAAG,CACF,aAAa,CAAC,QAAQ,CAAC;YACrB,SAAS;YACT,sBAAsB;YACtB,KAAK,EAAE,SAAS;YAChB,OAAO,EAAE,aAAa,EAAE,OAAO;SAChC,CAAC,CACH,CAAC;IACN,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,QAAQ,EACR,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QAC1C,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC;QACvD,MAAM,IAAI,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,IAAI,KAAK,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClE,IAAI,IAAI,IAAI,IAAI,EAAE,CAAC;YACjB,OAAO,GAAG;iBACP,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC;iBAChD,GAAG,CAAC,uBAAuB,CAAC,CAAC;QAClC,CAAC;QACD,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,SAAS,CAAC,aAAa,CAAC;YACrD,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,CAAC,GAAG,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;SACxD,CAAC,CAAC;QACH,OAAO,GAAG;aACP,SAAS,CAAC,GAAG,EAAE;YACd,YAAY,EAAE;gBACZ,kBAAkB,CAAC,SAAS,CAAC,YAAY,CAAC;gBAC1C,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC;aACpC;YACD,QAAQ,EAAE,SAAS;SACpB,CAAC;aACD,GAAG,EAAE,CAAC;IACX,CAAC,CAAC,CACH,CAAC;IAEF,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;QACxE,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,GAAG,CAAC,OAAO,CAAC,aAAa,CAAC,KAAK,GAAG,EAAE,CAAC;YACvC,OAAO,GAAG;iBACP,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC;iBAChD,GAAG,CAAC,iBAAiB,CAAC,CAAC;QAC5B,CAAC;QACD,MAAM,GAAG,GAAG,iBAAiB,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACvC,IAAI,CAAC;YACH,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,MAAM,oBAAoB,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;YAC1E,OAAO,GAAG;iBACP,SAAS,CAAC,GAAG,EAAE;gBACd,cAAc,EAAE,kBAAkB;gBAClC,YAAY,EAAE,CAAC,OAAO,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC,CAAC;aAChD,CAAC;iBACD,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC;YACX,IAAI,CAAC,YAAY,yBAAyB,EAAE,CAAC;gBAC3C,OAAO,GAAG;qBACP,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC;qBAChD,GAAG,CAAC,8BAA8B,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,MAAM,OAAO,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC3D,OAAO,GAAG;iBACP,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,CAAC;iBAChD,GAAG,CAAC,4BAA4B,OAAO,EAAE,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IACH,4EAA4E;IAC5E,GAAG,CAAC,GAAG,CAAC,wBAAwB,EAAE,qBAAqB,CAAC,CAAC;IACzD,6EAA6E;IAC7E,GAAG,CAAC,GAAG,CAAC,sBAAsB,EAAE,qBAAqB,CAAC,CAAC;IAEvD,MAAM,oBAAoB,GAAG,KAAK,EAChC,OAA4B,EAC5B,GAAkB,EAOjB,EAAE;QACH,MAAM,YAAY,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtD,IAAI,YAAY,IAAI,IAAI,EAAE,CAAC;YACzB,OAAO;gBACL,OAAO,EAAE;oBACP,SAAS,EAAE,WAAW;oBACtB,OAAO,EAAE,eAAe;iBACzB;gBACD,OAAO,EAAE;oBACP,YAAY,EAAE,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC;oBAChD,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;iBAC3B;aACF,CAAC;QACJ,CAAC;QACD,MAAM,KAAK,GAAG,CAAC,GAAG,aAAa,EAAE,GAAG,CAAC,UAAU,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;QAC/D,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,OAAO,EAAE,GACjD,GAAG,IAAI,IAAI;YACT,CAAC,CAAC,MAAM,SAAS,CAAC,iBAAiB,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,CAAC;YAC5D,CAAC,CAAC,MAAM,SAAS,CAAC,YAAY,CAAC,EAAE,YAAY,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,OAAO;YACL,OAAO,EAAE;gBACP,GAAG,OAAO;gBACV,QAAQ,EAAE;oBACR,GAAG,OAAO,CAAC,QAAQ;oBACnB,GAAG,YAAY,CAAC,OAAO,CAAC;iBACzB;aACF;YACD,OAAO,EAAE;gBACP,YAAY,EAAE,kBAAkB,CAAC,SAAS,CAAC,eAAe,CAAC;gBAC3D,CAAC,EAAE,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;aAChC;SACF,CAAC;IACJ,CAAC,CAAC;IACF,MAAM,YAAY,GAAG,CAAC,OAA4B,EAAE,EAAE;QACpD,MAAM,UAAU,GAAG,gBAAgB,CAAC,IAAI,CAAiB,OAAO,CAAC,CAAC;QAClE,MAAM,QAAQ,GAAG,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9C,OAAO;YACL,iBAAiB,EAAE,UAAU;YAC7B,GAAG,QAAQ;gBACT,EAAE,KAAK,CAAC,GAAG,CAAC;iBACX,MAAM,CAA0C,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE;gBAChE,MAAM,CAAC,GAAG,EAAE,OAAO,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAChD,GAAG,CAAC,eAAe,GAAG,EAAE,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC5C,OAAO,GAAG,CAAC;YACb,CAAC,EAAE,EAAE,CAAC;SACT,CAAC;IACJ,CAAC,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,mBAAmB,EACnB,gBAAgB,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC;QACvD,OAAO,GAAG;aACP,SAAS,CAAC,GAAG,EAAE;YACd,cAAc,EAAE,WAAW;SAC5B,CAAC;aACD,GAAG,CACF,aAAa,CAAC,eAAe,CAAC;YAC5B,SAAS;YACT,SAAS,EAAE,6BAA6B,YAAY,CAAC,QAAQ,EAAE,EAAE;SAClE,CAAC,CACH,CAAC;IACN,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,iBAAiB,EACjB,gBAAgB,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC;QAC/D,OAAO,GAAG;aACP,SAAS,CAAC,GAAG,EAAE;YACd,YAAY,EAAE;gBACZ,kBAAkB,CAAC,SAAS,CAAC,IAAI,CAAC;gBAClC,OAAO,CAAC,SAAS,CAAC,IAAI,CAAC;gBACvB,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC;gBAChC,cAAc,CAAC,SAAS,CAAC,IAAI,CAAC;aAC/B;YACD,QAAQ,EAAE,SAAS;SACpB,CAAC;aACD,GAAG,EAAE,CAAC;IACX,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,eAAe,EACf,gBAAgB,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1C,OAAO,GAAG;aACP,SAAS,CAAC,GAAG,EAAE;YACd,QAAQ,EAAE,6BAA6B,YAAY,CAAC,QAAQ,EAAE,EAAE;SACjE,CAAC;aACD,GAAG,EAAE,CAAC;IACX,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,OAAO,EACP,gBAAgB,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC;QAC/D,OAAO,GAAG;aACP,SAAS,CAAC,GAAG,EAAE;YACd,cAAc,EAAE,WAAW;SAC5B,CAAC;aACD,GAAG,CACF,aAAa,CAAC,gBAAgB,CAAC;YAC7B,SAAS;YACT,UAAU,EAAE,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;YAC9C,QAAQ,EAAE,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;SAC3C,CAAC,CACH,CAAC;IACN,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,OAAO,EACP,gBAAgB,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACpC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC;QAC/D,MAAM,EAAE,QAAQ,EAAE,UAAU,EAAE,GAAG,GAAG,CAAC,IAAI,CAAC;QAC1C,OAAO,GAAG;aACP,SAAS,CAAC,GAAG,EAAE;YACd,YAAY,EAAE;gBACZ,OAAO,CAAC,SAAS,CAAC,gBAAgB,CAAC;gBACnC,gBAAgB,CAAC,SAAS,CACxB,UAAU,KAAK,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CACpD;gBACD,cAAc,CAAC,SAAS,CACtB,QAAQ,KAAK,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAChD;aACF;YACD,QAAQ,EAAE,SAAS;SACpB,CAAC;aACD,GAAG,EAAE,CAAC;IACX,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,OAAO,EACP,gBAAgB,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;QACnC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvB,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;QAC1C,MAAM,IAAI,GAAG,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QACtC,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,GAAG,CAAC;QACvD,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,SAAS,CAAC,CAAC,CAAC;gBACf,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;oBACjB,QAAQ,EAAE,oBAAoB,YAAY,CAAC,QAAQ,EAAE,EAAE;iBACxD,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;YACD,OAAO,CAAC,CAAC,CAAC;gBACR,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE;oBACjB,QAAQ,EAAE,SAAS;iBACpB,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;QACH,CAAC;QACD,OAAO,GAAG,CAAC,GAAG,EAAE,CAAC;IACnB,CAAC,CAAC,CACH,CAAC;IAEF,GAAG,CAAC,GAAG,CACL,kBAAkB,EAClB,gBAAgB,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,EAAE;QACpC,iBAAiB,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO,GAAG;aACP,SAAS,CAAC,GAAG,EAAE;YACd,cAAc,EAAE,WAAW;SAC5B,CAAC;aACD,GAAG,CAAC,aAAa,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IACxC,CAAC,CAAC,CACH,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"} |
@@ -15,15 +15,25 @@ import type { LoggedInSession } from '@nrk/innlogging-shared/types'; | ||
| }; | ||
| type TokenForSubGrantParams = { | ||
| type RefreshTokenGrantParams = { | ||
| refreshToken: string; | ||
| sub?: string; | ||
| scope: string[]; | ||
| }; | ||
| type TokenForSubGrantResponse = LoggedInSession & { | ||
| type SwapSubGrantParams = { | ||
| refreshToken: string; | ||
| sub: string; | ||
| scope: string[]; | ||
| }; | ||
| type SessionGrantResponse = LoggedInSession & { | ||
| refreshToken: string; | ||
| }; | ||
| export declare class IdentitySwapRejectedError extends Error { | ||
| readonly sub: string; | ||
| readonly detail: string; | ||
| constructor(sub: string, detail: string); | ||
| } | ||
| export declare const initAuthority: (config: InitAuthorityConfig) => { | ||
| passwordGrant: ({ username, password, scope, }: PasswordGrantParams) => Promise<PasswordGrantResponse>; | ||
| tokenForSubGrant: ({ refreshToken, sub, scope, }: TokenForSubGrantParams) => Promise<TokenForSubGrantResponse>; | ||
| refreshTokenGrant: ({ refreshToken, scope, }: RefreshTokenGrantParams) => Promise<SessionGrantResponse>; | ||
| swapSubGrant: ({ refreshToken, sub, scope, }: SwapSubGrantParams) => Promise<SessionGrantResponse>; | ||
| }; | ||
| export {}; | ||
| //# sourceMappingURL=authority.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"authority.d.ts","sourceRoot":"","sources":["../../src/utils/authority.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,KAAK,mBAAmB,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,sBAAsB,GAAG;IAC5B,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,KAAK,wBAAwB,GAAG,eAAe,GAAG;IAChD,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,QAAQ,mBAAmB;oDA0BpD,mBAAmB,KAAG,OAAO,CAAC,qBAAqB,CAAC;sDA8BpD,sBAAsB,KAAG,OAAO,CAAC,wBAAwB,CAAC;CAwC9D,CAAC"} | ||
| {"version":3,"file":"authority.d.ts","sourceRoot":"","sources":["../../src/utils/authority.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAGpE,KAAK,mBAAmB,GAAG;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,mBAAmB,GAAG;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,KAAK,qBAAqB,GAAG;IAC3B,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,KAAK,uBAAuB,GAAG;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,KAAK,kBAAkB,GAAG;IACxB,YAAY,EAAE,MAAM,CAAC;IACrB,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,KAAK,oBAAoB,GAAG,eAAe,GAAG;IAC5C,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,qBAAa,yBAA0B,SAAQ,KAAK;IAClD,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;gBACZ,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM;CAMxC;AAED,eAAO,MAAM,aAAa,GAAI,QAAQ,mBAAmB;oDA0BpD,mBAAmB,KAAG,OAAO,CAAC,qBAAqB,CAAC;kDAmDpD,uBAAuB,KAAG,OAAO,CAAC,oBAAoB,CAAC;kDAwBvD,kBAAkB,KAAG,OAAO,CAAC,oBAAoB,CAAC;CAkCtD,CAAC"} |
+62
-16
| import { SESSION_VERSION } from '@nrk/innlogging-shared/constants'; | ||
| import { createHash } from 'crypto'; | ||
| export class IdentitySwapRejectedError extends Error { | ||
| sub; | ||
| detail; | ||
| constructor(sub, detail) { | ||
| super(`swap_sub rejected for ${sub}: ${detail}`); | ||
| this.name = 'IdentitySwapRejectedError'; | ||
| this.sub = sub; | ||
| this.detail = detail; | ||
| } | ||
| } | ||
| export const initAuthority = (config) => { | ||
@@ -44,9 +54,42 @@ let oidcDiscoveryPromise = null; | ||
| }; | ||
| const tokenForSubGrant = async ({ refreshToken, sub = '_', scope, }) => { | ||
| const buildSession = (json) => { | ||
| const { id_token, access_token, refresh_token, expires_in, user_info, ...sessionRest } = json; | ||
| return { | ||
| authState: 'loggedIn', | ||
| version: SESSION_VERSION, | ||
| idToken: id_token, | ||
| accessToken: access_token, | ||
| refreshToken: refresh_token, | ||
| expiresIn: expires_in, | ||
| userInfo: user_info, | ||
| h: createHash('sha256').update(user_info.sub).digest('base64url'), | ||
| ...sessionRest, | ||
| }; | ||
| }; | ||
| const refreshTokenGrant = async ({ refreshToken, scope, }) => { | ||
| const tokenEndpoint = await discoverTokenEndpoint(); | ||
| const body = new URLSearchParams({ | ||
| grant_type: 'token_for_sub', | ||
| grant_type: 'refresh_token', | ||
| client_id: config.clientId, | ||
| client_secret: config.clientSecret, | ||
| refresh_token: refreshToken, | ||
| scope: scope.join(' '), | ||
| }); | ||
| const res = await fetch(tokenEndpoint, { | ||
| method: 'POST', | ||
| headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, | ||
| body, | ||
| }); | ||
| if (!res.ok) { | ||
| throw new Error(`Refresh token grant failed: ${await res.text()}`); | ||
| } | ||
| return buildSession(await res.json()); | ||
| }; | ||
| const swapSubGrant = async ({ refreshToken, sub, scope, }) => { | ||
| const tokenEndpoint = await discoverTokenEndpoint(); | ||
| const body = new URLSearchParams({ | ||
| grant_type: 'swap_sub', | ||
| client_id: config.clientId, | ||
| client_secret: config.clientSecret, | ||
| refresh_token: refreshToken, | ||
| sub, | ||
@@ -61,19 +104,22 @@ scope: scope.join(' '), | ||
| if (!res.ok) { | ||
| throw new Error(`Token for sub grant failed: ${await res.text()}`); | ||
| const detail = await res.text(); | ||
| // Mirrors Tomba: the authority signals "this user can't swap to that sub" | ||
| // with invalid_request. Surface it distinctly so the dev server can | ||
| // return 409 without touching the existing session. | ||
| try { | ||
| const parsed = JSON.parse(detail); | ||
| if (parsed?.error === 'invalid_request') { | ||
| throw new IdentitySwapRejectedError(sub, detail); | ||
| } | ||
| } | ||
| catch (e) { | ||
| if (e instanceof IdentitySwapRejectedError) | ||
| throw e; | ||
| } | ||
| throw new Error(`Swap sub grant failed: ${detail}`); | ||
| } | ||
| const { id_token, access_token, refresh_token, expires_in, user_info, ...sessionRest } = await res.json(); | ||
| return { | ||
| authState: 'loggedIn', | ||
| version: SESSION_VERSION, | ||
| idToken: id_token, | ||
| accessToken: access_token, | ||
| refreshToken: refresh_token, | ||
| expiresIn: expires_in, | ||
| userInfo: user_info, | ||
| h: createHash('sha256').update(user_info.sub).digest('base64url'), | ||
| ...sessionRest, | ||
| }; | ||
| return buildSession(await res.json()); | ||
| }; | ||
| return { passwordGrant, tokenForSubGrant }; | ||
| return { passwordGrant, refreshTokenGrant, swapSubGrant }; | ||
| }; | ||
| //# sourceMappingURL=authority.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"authority.js","sourceRoot":"","sources":["../../src/utils/authority.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"authority.js","sourceRoot":"","sources":["../../src/utils/authority.ts"],"names":[],"mappings":"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"} |
@@ -8,3 +8,4 @@ import type { IncomingMessage, NextFunction, NextHandleFunction } from 'connect'; | ||
| export declare const getSearchParams: (req: IncomingMessage) => URLSearchParams; | ||
| export declare const extractSubFromUrl: (url: string | undefined) => string | null; | ||
| export {}; | ||
| //# sourceMappingURL=connect.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/utils/connect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,kBAAkB,EACnB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE3C,KAAK,uBAAuB,GAAG,CAC7B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,IAAI,EAAE,YAAY,KACf,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,eAAO,MAAM,gBAAgB,GAEzB,QAAQ,KAAK,GAAG,MAAM,EACtB,IAAI,kBAAkB,GAAG,uBAAuB,KAC/C,kBAAkB,GAAG,uBAUvB,CAAC;AAEJ,eAAO,MAAM,iBAAiB,GAAI,KAAK,cAAc,CAAC,eAAe,CAAC,SAOlE,CAAC;AAEL,eAAO,MAAM,eAAe,GAAI,KAAK,eAAe,oBACU,CAAC"} | ||
| {"version":3,"file":"connect.d.ts","sourceRoot":"","sources":["../../src/utils/connect.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,eAAe,EACf,YAAY,EACZ,kBAAkB,EACnB,MAAM,SAAS,CAAC;AACjB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,MAAM,CAAC;AAE3C,KAAK,uBAAuB,GAAG,CAC7B,GAAG,EAAE,eAAe,EACpB,GAAG,EAAE,IAAI,CAAC,cAAc,EACxB,IAAI,EAAE,YAAY,KACf,OAAO,CAAC,IAAI,CAAC,CAAC;AAEnB,eAAO,MAAM,gBAAgB,GAEzB,QAAQ,KAAK,GAAG,MAAM,EACtB,IAAI,kBAAkB,GAAG,uBAAuB,KAC/C,kBAAkB,GAAG,uBAUvB,CAAC;AAEJ,eAAO,MAAM,iBAAiB,GAAI,KAAK,cAAc,CAAC,eAAe,CAAC,SAOlE,CAAC;AAEL,eAAO,MAAM,eAAe,GAAI,KAAK,eAAe,oBACU,CAAC;AAI/D,eAAO,MAAM,iBAAiB,GAAI,KAAK,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,IAYpE,CAAC"} |
@@ -20,2 +20,18 @@ export const handleHTTPMethod = (method, fn) => async (req, res, next) => { | ||
| export const getSearchParams = (req) => new URL(req.originalUrl ?? '/', 'http://dummy').searchParams; | ||
| // For a handler mounted at `/session/token/refresh`, req.url after prefix | ||
| // stripping is `/`, `''`, or `/<sub>` (possibly with a query string). | ||
| export const extractSubFromUrl = (url) => { | ||
| const [path = ''] = (url ?? '/').split('?', 1); | ||
| const trimmed = path.replace(/^\/+|\/+$/g, ''); | ||
| if (trimmed === '') { | ||
| return null; | ||
| } | ||
| try { | ||
| return decodeURIComponent(trimmed); | ||
| } | ||
| catch { | ||
| // Malformed percent-encoding in URL | ||
| return null; | ||
| } | ||
| }; | ||
| //# sourceMappingURL=connect.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/utils/connect.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,gBAAgB,GAC3B,CACE,MAAsB,EACtB,EAAgD,EACF,EAAE,CAClD,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACvB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAoC,EAAE,EAAE,CACxE,MAAM,CAAC,OAAO,CAAC;IACb,eAAe,EAAE,oBAAoB;IACrC,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,+BAA+B;CACzC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;IAC3B,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAoB,EAAE,EAAE,CACtD,IAAI,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,EAAE,cAAc,CAAC,CAAC,YAAY,CAAC"} | ||
| {"version":3,"file":"connect.js","sourceRoot":"","sources":["../../src/utils/connect.ts"],"names":[],"mappings":"AAcA,MAAM,CAAC,MAAM,gBAAgB,GAC3B,CACE,MAAsB,EACtB,EAAgD,EACF,EAAE,CAClD,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,IAAI,EAAE,EAAE;IACvB,IAAI,GAAG,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,IAAI,EAAE,CAAC;IAChB,CAAC;IACD,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,GAAG,CAAC,CAAC;IACZ,CAAC;AACH,CAAC,CAAC;AAEJ,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAoC,EAAE,EAAE,CACxE,MAAM,CAAC,OAAO,CAAC;IACb,eAAe,EAAE,oBAAoB;IACrC,MAAM,EAAE,UAAU;IAClB,OAAO,EAAE,+BAA+B;CACzC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE,EAAE;IAC3B,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AAC7B,CAAC,CAAC,CAAC;AAEL,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAoB,EAAE,EAAE,CACtD,IAAI,GAAG,CAAC,GAAG,CAAC,WAAW,IAAI,GAAG,EAAE,cAAc,CAAC,CAAC,YAAY,CAAC;AAE/D,0EAA0E;AAC1E,sEAAsE;AACtE,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,GAAuB,EAAiB,EAAE;IAC1E,MAAM,CAAC,IAAI,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;IAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC;IAC/C,IAAI,OAAO,KAAK,EAAE,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IACD,IAAI,CAAC;QACH,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,oCAAoC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC,CAAC"} |
+7
-1
| import type { Plugin } from 'vite'; | ||
| export type TestUser = { | ||
| name: string; | ||
| username: string; | ||
| password: string; | ||
| }; | ||
| export type DevPluginOptions = { | ||
@@ -6,5 +11,6 @@ issuer: string; | ||
| clientSecret: string; | ||
| scopes?: string; | ||
| scopes?: string[]; | ||
| testUsers?: TestUser[]; | ||
| }; | ||
| export declare const loginDev: (devPluginOpts: DevPluginOptions) => Plugin; | ||
| //# sourceMappingURL=vite.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,eAAe,gBAAgB,KAAG,MAKzD,CAAC"} | ||
| {"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAGnC,MAAM,MAAM,QAAQ,GAAG;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,MAAM,MAAM,gBAAgB,GAAG;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;CACxB,CAAC;AAEF,eAAO,MAAM,QAAQ,GAAI,eAAe,gBAAgB,KAAG,MAKzD,CAAC"} |
+1
-1
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"vite.js","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAS/C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,aAA+B,EAAU,EAAE,CAAC,CAAC;IACpE,IAAI,EAAE,uBAAuB;IAC7B,eAAe,CAAC,MAAM;QACpB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;IACvE,CAAC;CACF,CAAC,CAAC"} | ||
| {"version":3,"file":"vite.js","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAgB/C,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,aAA+B,EAAU,EAAE,CAAC,CAAC;IACpE,IAAI,EAAE,uBAAuB;IAC7B,eAAe,CAAC,MAAM;QACpB,MAAM,CAAC,WAAW,CAAC,GAAG,CAAC,YAAY,EAAE,eAAe,CAAC,aAAa,CAAC,CAAC,CAAC;IACvE,CAAC;CACF,CAAC,CAAC"} |
+7
-7
| { | ||
| "name": "@nrk/innlogging-dev", | ||
| "version": "0.0.7", | ||
| "version": "0.1.0", | ||
| "type": "module", | ||
@@ -32,4 +32,4 @@ "main": "dist/vite.js", | ||
| "cookies": "0.9.1", | ||
| "handlebars": "4.7.8", | ||
| "@nrk/innlogging-shared": "0.0.7" | ||
| "handlebars": "4.7.9", | ||
| "@nrk/innlogging-shared": "0.1.0" | ||
| }, | ||
@@ -39,8 +39,8 @@ "devDependencies": { | ||
| "@types/connect": "3.4.38", | ||
| "eslint": "10.0.1", | ||
| "eslint": "10.4.0", | ||
| "rimraf": "6.1.3", | ||
| "tsc-watch": "7.2.0", | ||
| "typescript": "5.9.3", | ||
| "vite": "7.3.1", | ||
| "@nrk/eslint-config": "0.0.7" | ||
| "typescript": "6.0.3", | ||
| "vite": "8.0.13", | ||
| "@nrk/eslint-config": "0.1.0" | ||
| }, | ||
@@ -47,0 +47,0 @@ "scripts": { |
+22
-0
@@ -47,1 +47,23 @@ # innlogging-dev | ||
| ``` | ||
| ## Optional config | ||
| Both `loginDev` and `loginDevConnect` accept these additional options: | ||
| - `scopes` — `string[]` of additional OAuth scopes to request alongside the defaults (`openid`, `profile`, `email`). | ||
| - `testUsers` — override the built-in list of selectable test users. Each entry needs `{ name, username, password }`. When omitted, a set of NRK test accounts is used. | ||
| ```ts | ||
| loginDev({ | ||
| clientId: '<CLIENT_ID>', | ||
| clientSecret: '<CLIENT_SECRET>', | ||
| issuer: '<ISSUER>', | ||
| testUsers: [ | ||
| { | ||
| name: 'alice', | ||
| username: 'alice@example.test', | ||
| password: 'hunter2', | ||
| }, | ||
| ], | ||
| }); | ||
| ``` |
+101
-0
@@ -71,2 +71,46 @@ <!DOCTYPE html> | ||
| } | ||
| .identities { | ||
| display: grid; | ||
| grid-template-columns: repeat(auto-fill, minmax(10rem, 1fr)); | ||
| gap: 0.5rem; | ||
| } | ||
| .identity-button { | ||
| display: flex; | ||
| flex-direction: column; | ||
| align-items: center; | ||
| gap: 0.4rem; | ||
| padding: 0.75rem; | ||
| user-select: none; | ||
| } | ||
| .identity-avatar { | ||
| display: flex; | ||
| align-items: center; | ||
| justify-content: center; | ||
| width: 2.25rem; | ||
| height: 2.25rem; | ||
| border-radius: 50%; | ||
| background-color: var(--color-zinc-600); | ||
| font-size: 1rem; | ||
| font-weight: 700; | ||
| } | ||
| .identity-name { | ||
| font-size: 0.9rem; | ||
| } | ||
| .identity-type { | ||
| font-size: 0.7rem; | ||
| opacity: 0.7; | ||
| text-transform: uppercase; | ||
| letter-spacing: 0.05em; | ||
| } | ||
| .identity-message { | ||
| margin-top: 0.5rem; | ||
| font-size: 0.9rem; | ||
| color: var(--color-amber-300); | ||
| } | ||
| </style> | ||
@@ -104,3 +148,26 @@ </head> | ||
| {{#if session.identities.length}} | ||
| <section> | ||
| <h1>Identities</h1> | ||
| <div class="identities" data-return-url="{{returnUrl}}"> | ||
| {{#each session.identities}} | ||
| <button | ||
| type="button" | ||
| class="button identity-button {{#if (eq sub @root.session.userInfo.sub)}}active{{/if}}" | ||
| data-sub="{{sub}}" | ||
| data-name="{{name}}" | ||
| aria-pressed="{{#if (eq sub @root.session.userInfo.sub)}}true{{else}}false{{/if}}" | ||
| onclick="selectIdentity(this)" | ||
| > | ||
| <span class="identity-avatar">{{shortName}}</span> | ||
| <span class="identity-name">{{name}}</span> | ||
| <span class="identity-type">{{profileType}}</span> | ||
| </button> | ||
| {{/each}} | ||
| </div> | ||
| <p id="identity-message" class="identity-message" role="status"></p> | ||
| </section> | ||
| {{/if}} | ||
| <section> | ||
| <h1>Navigation</h1> | ||
@@ -176,2 +243,36 @@ <div class="navigation-container"> | ||
| <script> | ||
| const selectIdentity = async (btn) => { | ||
| if (btn.classList.contains('active') || btn.disabled) return; | ||
| const sub = btn.dataset.sub; | ||
| const name = btn.dataset.name; | ||
| const message = document.getElementById('identity-message'); | ||
| const buttons = document.querySelectorAll('.identity-button'); | ||
| buttons.forEach((b) => (b.disabled = true)); | ||
| message.textContent = ''; | ||
| try { | ||
| const res = await fetch( | ||
| `/_auth/web/session/token/refresh/${encodeURIComponent(sub)}`, | ||
| { | ||
| method: 'POST', | ||
| headers: { 'x-auth-csrf': '1' }, | ||
| } | ||
| ); | ||
| if (res.ok) { | ||
| const returnUrl = | ||
| btn.closest('.identities')?.dataset.returnUrl || '/'; | ||
| window.location.href = returnUrl; | ||
| return; | ||
| } | ||
| if (res.status === 409) { | ||
| message.textContent = `Could not switch to "${name}" — it may have been removed.`; | ||
| } else { | ||
| message.textContent = `Failed to switch identity (${res.status}).`; | ||
| } | ||
| } catch (err) { | ||
| message.textContent = `Failed to switch identity: ${err}`; | ||
| } finally { | ||
| buttons.forEach((b) => (b.disabled = false)); | ||
| } | ||
| }; | ||
| const copyToClipboard = (btn, text) => { | ||
@@ -178,0 +279,0 @@ navigator.clipboard |
Unpublished package
Supply chain riskPackage version was not found on the registry. It may exist on a different registry and need to be configured to pull from that registry.
Found 1 instance in 1 package
Unpublished package
Supply chain riskPackage version was not found on the registry. It may exist on a different registry and need to be configured to pull from that registry.
Found 1 instance in 1 package
64370
23.84%643
30.96%69
46.81%5
25%+ Added
- Removed
Updated
Updated