@oslokommune/auth-bff 1.6.0-beta1 → 1.6.0-beta3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/middleware/oidc.mjs +1 -1
- package/dist/middleware/proxy-routes.mjs +1 -1
- package/dist/middleware/sessions/dynamoDbSessionStore.d.mts +2 -0
- package/dist/middleware/sessions/dynamoDbSessionStore.d.mts.map +1 -0
- package/dist/middleware/sessions/dynamoDbSessionStore.mjs +46 -0
- package/dist/middleware/sessions/memorySessionStore.d.mts +2 -0
- package/dist/middleware/sessions/memorySessionStore.d.mts.map +1 -0
- package/dist/middleware/sessions/memorySessionStore.mjs +11 -0
- package/dist/middleware/sessions/sessions.d.mts +2 -0
- package/dist/middleware/sessions/sessions.d.mts.map +1 -0
- package/dist/middleware/sessions/sessions.mjs +40 -0
- package/dist/server.mjs +3 -2
- package/dist/vite-plugin.d.mts.map +1 -1
- package/dist/vite-plugin.mjs +1 -1
- package/package.json +3 -3
package/dist/middleware/oidc.mjs
CHANGED
|
@@ -158,7 +158,7 @@ export class OidcMiddleware {
|
|
|
158
158
|
console.log(`Front channel logout: params iss=${iss}, sid=${redact(sid)}`);
|
|
159
159
|
if (sid) {
|
|
160
160
|
try {
|
|
161
|
-
yield ((_a = req.
|
|
161
|
+
yield ((_a = req.destroySessionByIdpSid) === null || _a === void 0 ? void 0 : _a.call(req, sid));
|
|
162
162
|
}
|
|
163
163
|
catch (e) {
|
|
164
164
|
console.error("Failed to destroy session", e);
|
|
@@ -18,7 +18,7 @@ export function proxyRoutes(config, oidcMiddleware) {
|
|
|
18
18
|
proxyReq.removeHeader("Cookie");
|
|
19
19
|
},
|
|
20
20
|
proxyRes: (proxyRes, req, res) => {
|
|
21
|
-
console.log(`
|
|
21
|
+
console.log(`Proxied ${req.originalUrl}: ${proxyRes.statusCode}`);
|
|
22
22
|
}
|
|
23
23
|
}
|
|
24
24
|
}));
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"dynamoDbSessionStore.d.mts","sourceRoot":"","sources":["../../../src/middleware/sessions/dynamoDbSessionStore.mjs"],"names":[],"mappings":"AA6BA,uDAcC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
2
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
import { DeleteItemCommand, DynamoDBClient, QueryCommand } from "@aws-sdk/client-dynamodb";
|
|
11
|
+
import dynamoDbStore from "connect-dynamodb";
|
|
12
|
+
import session from "express-session";
|
|
13
|
+
import { redact } from "../../utils.js";
|
|
14
|
+
const destroyByIdpSid = (config, client) => {
|
|
15
|
+
return (idpSid) => __awaiter(void 0, void 0, void 0, function* () {
|
|
16
|
+
console.log(`Front channel logout: deleting session(s) with idp-sid=${redact(idpSid)}`);
|
|
17
|
+
const query = new QueryCommand({
|
|
18
|
+
TableName: config.table,
|
|
19
|
+
IndexName: "idp-sid-index",
|
|
20
|
+
ExpressionAttributeValues: { ":sid": { S: idpSid } },
|
|
21
|
+
ExpressionAttributeNames: { "#k": "idp-sid" },
|
|
22
|
+
KeyConditionExpression: "#k = :sid",
|
|
23
|
+
ProjectionExpression: "id"
|
|
24
|
+
});
|
|
25
|
+
const res = yield client.send(query);
|
|
26
|
+
yield Promise.all(res.Items.map((item) => {
|
|
27
|
+
var _a;
|
|
28
|
+
console.log(`Front channel logout: deleting session ${redact((_a = item.id) === null || _a === void 0 ? void 0 : _a.S, 10)}`);
|
|
29
|
+
return client.send(new DeleteItemCommand({
|
|
30
|
+
TableName: config.table,
|
|
31
|
+
Key: { id: item.id }
|
|
32
|
+
}));
|
|
33
|
+
}));
|
|
34
|
+
console.log(`Front channel logout: completed. ${res.Count} session(s) deleted`);
|
|
35
|
+
});
|
|
36
|
+
};
|
|
37
|
+
export function dynamoDbSessionStore(config = {}) {
|
|
38
|
+
const client = new DynamoDBClient({});
|
|
39
|
+
const DynamoDbStore = dynamoDbStore({ session });
|
|
40
|
+
const sessionStoreConfig = Object.assign(Object.assign({}, config), { client, specialKeys: [
|
|
41
|
+
{ name: "idp-sid", type: "S" }
|
|
42
|
+
], skipThrowMissingSpecialKeys: true });
|
|
43
|
+
const sessionStore = new DynamoDbStore(sessionStoreConfig);
|
|
44
|
+
sessionStore.destroyByIdpSid = destroyByIdpSid(config, client);
|
|
45
|
+
return sessionStore;
|
|
46
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"memorySessionStore.d.mts","sourceRoot":"","sources":["../../../src/middleware/sessions/memorySessionStore.mjs"],"names":[],"mappings":"AAQA,qDAIC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import session from "express-session";
|
|
2
|
+
import { redact } from "../../utils.js";
|
|
3
|
+
const destroyByIdpSid = (idpSid) => {
|
|
4
|
+
// This is not supposed to be used outside localhost, so it is not implemented
|
|
5
|
+
console.log(`Pretending to destroyByIdpSid. idp-sid=${redact(idpSid)}`);
|
|
6
|
+
};
|
|
7
|
+
export function memorySessionStore(config = {}) {
|
|
8
|
+
const sessionStore = new session.MemoryStore(config);
|
|
9
|
+
sessionStore.destroyByIdpSid = destroyByIdpSid;
|
|
10
|
+
return sessionStore;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sessions.d.mts","sourceRoot":"","sources":["../../../src/middleware/sessions/sessions.mjs"],"names":[],"mappings":"AAIA,6CAiCC"}
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import session from "express-session";
|
|
2
|
+
import { dynamoDbSessionStore } from "./dynamoDbSessionStore.mjs";
|
|
3
|
+
import { memorySessionStore } from "./memorySessionStore.mjs";
|
|
4
|
+
export function sessions(config) {
|
|
5
|
+
var _a, _b;
|
|
6
|
+
let sessionStore;
|
|
7
|
+
if (config.sessionStoreType === 'memory') {
|
|
8
|
+
const sessionStoreOptions = (_a = config.sessionStoreOptions) !== null && _a !== void 0 ? _a : {};
|
|
9
|
+
sessionStore = memorySessionStore(sessionStoreOptions);
|
|
10
|
+
}
|
|
11
|
+
else if (config.sessionStoreType === 'dynamodb') {
|
|
12
|
+
const sessionStoreOptions = (_b = config.sessionStoreOptions) !== null && _b !== void 0 ? _b : {};
|
|
13
|
+
sessionStore = dynamoDbSessionStore(sessionStoreOptions);
|
|
14
|
+
}
|
|
15
|
+
else if (config.sessionStoreType) {
|
|
16
|
+
throw Error(`unknown sessionStoreType ${config.sessionStoreType}`);
|
|
17
|
+
}
|
|
18
|
+
else {
|
|
19
|
+
throw Error('missing sessionStoreType');
|
|
20
|
+
}
|
|
21
|
+
return [
|
|
22
|
+
session({
|
|
23
|
+
secret: config.sessionSecret,
|
|
24
|
+
store: sessionStore,
|
|
25
|
+
resave: false,
|
|
26
|
+
saveUninitialized: false,
|
|
27
|
+
cookie: config.cookie || {
|
|
28
|
+
httpOnly: true,
|
|
29
|
+
path: config.cookiePath,
|
|
30
|
+
secure: config.cookieSecure,
|
|
31
|
+
sameSite: config.cookieSameSite
|
|
32
|
+
},
|
|
33
|
+
}),
|
|
34
|
+
(req, _, next) => {
|
|
35
|
+
// make this function available to request handlers
|
|
36
|
+
req.destroySessionByIdpSid = sessionStore === null || sessionStore === void 0 ? void 0 : sessionStore.destroyByIdpSid;
|
|
37
|
+
next();
|
|
38
|
+
}
|
|
39
|
+
];
|
|
40
|
+
}
|
package/dist/server.mjs
CHANGED
|
@@ -5,10 +5,11 @@ import { loadConfig } from './config.mjs';
|
|
|
5
5
|
import { proxyRoutes } from "./middleware/proxy-routes.mjs";
|
|
6
6
|
import { staticRoutes } from "./middleware/static-routes.mjs";
|
|
7
7
|
import { securityHeaders } from "./middleware/security-headers.mjs";
|
|
8
|
-
import { sessions } from "./middleware/sessions.mjs";
|
|
8
|
+
import { sessions } from "./middleware/sessions/sessions.mjs";
|
|
9
9
|
import { oidcRoutes } from "./middleware/oidc-routes.mjs";
|
|
10
10
|
import { OidcMiddleware } from "./middleware/oidc.mjs";
|
|
11
11
|
import commandLineArgs from "command-line-args";
|
|
12
|
+
import packageJson from "../package.json" with { type: 'json' };
|
|
12
13
|
const options = commandLineArgs({ name: 'configFile' });
|
|
13
14
|
const config = await loadConfig(options.configFile);
|
|
14
15
|
const port = process.env.port || config.port || 8080;
|
|
@@ -32,7 +33,7 @@ app.use(requestLogger); //NB, må stå her for å ikke logge auth-requestene ove
|
|
|
32
33
|
app.use(basePath, proxyRoutes(config, oidcMiddleware));
|
|
33
34
|
app.use(basePath, staticRoutes(config));
|
|
34
35
|
const server = app.listen(port, () => {
|
|
35
|
-
console.log(`
|
|
36
|
+
console.log(`auth-bff ${packageJson.version} started on port ${port}`);
|
|
36
37
|
});
|
|
37
38
|
process.on('SIGTERM', () => {
|
|
38
39
|
console.log('SIGTERM received. Closing...');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"vite-plugin.d.mts","sourceRoot":"","sources":["../src/vite-plugin.mjs"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"vite-plugin.d.mts","sourceRoot":"","sources":["../src/vite-plugin.mjs"],"names":[],"mappings":"AAwBA;;;;;;;;GAQG;AACH,kDAPa;IACT,IAAI,EAAE,KAAK,CAAC;IACZ,KAAK,EAAE,OAAO,CAAC;IACf,eAAe,EAAE,CAAC,CAAC,CAAS,IAAgB,EAAhB;QAAC,WAAW,EAAE,GAAC,CAAA;KAAC,KAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAC,GAAC,CAAC,CAAC;IACjE,sBAAsB,EAAE,CAAC,CAAC,CAAS,IAAgB,EAAhB;QAAC,WAAW,EAAE,GAAC,CAAA;KAAC,KAAG,OAAO,CAAC,IAAI,CAAC,CAAC,GAAC,GAAC,CAAC,CAAA;CACvE,CASH"}
|
package/dist/vite-plugin.mjs
CHANGED
|
@@ -14,7 +14,7 @@ function configureServer(configFile) {
|
|
|
14
14
|
return (_a) => __awaiter(this, [_a], void 0, function* ({ middlewares }) {
|
|
15
15
|
const { oidcRoutes } = yield import("./middleware/oidc-routes.mjs");
|
|
16
16
|
const { proxyRoutes } = yield import("./middleware/proxy-routes.mjs");
|
|
17
|
-
const { sessions } = yield import("./middleware/sessions.mjs");
|
|
17
|
+
const { sessions } = yield import("./middleware/sessions/sessions.mjs");
|
|
18
18
|
const config = yield loadConfig(configFile);
|
|
19
19
|
const oidcMiddleware = yield OidcMiddleware.create(config);
|
|
20
20
|
const basePath = config.basePath || "/";
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@oslokommune/auth-bff",
|
|
3
|
-
"version": "1.6.0-
|
|
3
|
+
"version": "1.6.0-beta3",
|
|
4
4
|
"repository": "https://github.com/oslokommune/auth-bff.git",
|
|
5
5
|
"publishConfig": {
|
|
6
6
|
"access": "public"
|
|
@@ -37,8 +37,8 @@
|
|
|
37
37
|
"command-line-args": "^6.0.1",
|
|
38
38
|
"compression": "^1.8.0",
|
|
39
39
|
"connect-dynamodb": "^3.0.5",
|
|
40
|
-
"express": "
|
|
41
|
-
"express-session": "
|
|
40
|
+
"express": "4.21.2",
|
|
41
|
+
"express-session": "1.18.2",
|
|
42
42
|
"find-up": "^7.0.0",
|
|
43
43
|
"helmet": "^8.1.0",
|
|
44
44
|
"http-proxy-middleware": "^3.0.5",
|