@backstage/plugin-auth-backend 0.18.3-next.1 → 0.18.3-next.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # @backstage/plugin-auth-backend
2
2
 
3
+ ## 0.18.3-next.2
4
+
5
+ ### Patch Changes
6
+
7
+ - 3ffcdac7d07: Added a persistent session store through the database
8
+ - Updated dependencies
9
+ - @backstage/config@1.0.7
10
+
3
11
  ## 0.18.3-next.1
4
12
 
5
13
  ### Patch Changes
package/dist/index.cjs.js CHANGED
@@ -30,12 +30,14 @@ var catalogClient = require('@backstage/catalog-client');
30
30
  var catalogModel = require('@backstage/catalog-model');
31
31
  var luxon = require('luxon');
32
32
  var uuid = require('uuid');
33
- var backendCommon = require('@backstage/backend-common');
34
33
  var firestore = require('@google-cloud/firestore');
35
34
  var lodash = require('lodash');
36
35
  var session = require('express-session');
36
+ var connectSessionKnex = require('connect-session-knex');
37
37
  var passport = require('passport');
38
38
  var minimatch = require('minimatch');
39
+ var backendCommon = require('@backstage/backend-common');
40
+ var config = require('@backstage/config');
39
41
 
40
42
  function _interopDefaultLegacy (e) { return e && typeof e === 'object' && 'default' in e ? e : { 'default': e }; }
41
43
 
@@ -69,6 +71,7 @@ var Auth0InternalStrategy__default = /*#__PURE__*/_interopDefaultLegacy(Auth0Int
69
71
  var fetch__default = /*#__PURE__*/_interopDefaultLegacy(fetch);
70
72
  var NodeCache__default = /*#__PURE__*/_interopDefaultLegacy(NodeCache);
71
73
  var session__default = /*#__PURE__*/_interopDefaultLegacy(session);
74
+ var connectSessionKnex__default = /*#__PURE__*/_interopDefaultLegacy(connectSessionKnex);
72
75
  var passport__default = /*#__PURE__*/_interopDefaultLegacy(passport);
73
76
 
74
77
  const defaultScopes = ["offline_access", "read:me"];
@@ -3212,10 +3215,6 @@ class TokenFactory {
3212
3215
  }
3213
3216
  }
3214
3217
 
3215
- const migrationsDir = backendCommon.resolvePackagePath(
3216
- "@backstage/plugin-auth-backend",
3217
- "migrations"
3218
- );
3219
3218
  const TABLE = "signing_keys";
3220
3219
  const parseDate = (date) => {
3221
3220
  const parsedDate = typeof date === "string" ? luxon.DateTime.fromSQL(date, { zone: "UTC" }) : luxon.DateTime.fromJSDate(date);
@@ -3227,17 +3226,6 @@ const parseDate = (date) => {
3227
3226
  return parsedDate.toJSDate();
3228
3227
  };
3229
3228
  class DatabaseKeyStore {
3230
- static async create(options) {
3231
- var _a;
3232
- const { database } = options;
3233
- const client = await database.getClient();
3234
- if (!((_a = database.migrations) == null ? void 0 : _a.skip)) {
3235
- await client.migrate.latest({
3236
- directory: migrationsDir
3237
- });
3238
- }
3239
- return new DatabaseKeyStore(client);
3240
- }
3241
3229
  constructor(client) {
3242
3230
  this.client = client;
3243
3231
  }
@@ -3377,15 +3365,12 @@ class KeyStores {
3377
3365
  */
3378
3366
  static async fromConfig(config, options) {
3379
3367
  var _a;
3380
- const { logger, database } = options != null ? options : {};
3368
+ const { logger, database } = options;
3381
3369
  const ks = config.getOptionalConfig("auth.keyStore");
3382
3370
  const provider = (_a = ks == null ? void 0 : ks.getOptionalString("provider")) != null ? _a : "database";
3383
- logger == null ? void 0 : logger.info(`Configuring "${provider}" as KeyStore provider`);
3371
+ logger.info(`Configuring "${provider}" as KeyStore provider`);
3384
3372
  if (provider === "database") {
3385
- if (!database) {
3386
- throw new Error("This KeyStore provider requires a database");
3387
- }
3388
- return await DatabaseKeyStore.create({ database });
3373
+ return new DatabaseKeyStore(await database.get());
3389
3374
  }
3390
3375
  if (provider === "memory") {
3391
3376
  return new MemoryKeyStore();
@@ -3571,6 +3556,73 @@ class CatalogAuthResolverContext {
3571
3556
  }
3572
3557
  }
3573
3558
 
3559
+ var __accessCheck = (obj, member, msg) => {
3560
+ if (!member.has(obj))
3561
+ throw TypeError("Cannot " + msg);
3562
+ };
3563
+ var __privateGet = (obj, member, getter) => {
3564
+ __accessCheck(obj, member, "read from private field");
3565
+ return getter ? getter.call(obj) : member.get(obj);
3566
+ };
3567
+ var __privateAdd = (obj, member, value) => {
3568
+ if (member.has(obj))
3569
+ throw TypeError("Cannot add the same private member more than once");
3570
+ member instanceof WeakSet ? member.add(obj) : member.set(obj, value);
3571
+ };
3572
+ var __privateSet = (obj, member, value, setter) => {
3573
+ __accessCheck(obj, member, "write to private field");
3574
+ setter ? setter.call(obj, value) : member.set(obj, value);
3575
+ return value;
3576
+ };
3577
+ var _database, _promise;
3578
+ const migrationsDir = backendCommon.resolvePackagePath(
3579
+ "@backstage/plugin-auth-backend",
3580
+ "migrations"
3581
+ );
3582
+ const _AuthDatabase = class {
3583
+ constructor(database) {
3584
+ __privateAdd(this, _database, void 0);
3585
+ __privateAdd(this, _promise, void 0);
3586
+ __privateSet(this, _database, database);
3587
+ }
3588
+ static create(database) {
3589
+ return new _AuthDatabase(database);
3590
+ }
3591
+ /** @internal */
3592
+ static forTesting() {
3593
+ const config$1 = new config.ConfigReader({
3594
+ backend: {
3595
+ database: {
3596
+ client: "better-sqlite3",
3597
+ connection: ":memory:",
3598
+ useNullAsDefault: true
3599
+ }
3600
+ }
3601
+ });
3602
+ const database = backendCommon.DatabaseManager.fromConfig(config$1).forPlugin("auth");
3603
+ return new _AuthDatabase(database);
3604
+ }
3605
+ static async runMigrations(knex) {
3606
+ await knex.migrate.latest({
3607
+ directory: migrationsDir
3608
+ });
3609
+ }
3610
+ get() {
3611
+ var _a;
3612
+ (_a = __privateGet(this, _promise)) != null ? _a : __privateSet(this, _promise, __privateGet(this, _database).getClient().then(async (client) => {
3613
+ var _a2;
3614
+ if (!((_a2 = __privateGet(this, _database).migrations) == null ? void 0 : _a2.skip)) {
3615
+ await _AuthDatabase.runMigrations(client);
3616
+ }
3617
+ return client;
3618
+ }));
3619
+ return __privateGet(this, _promise);
3620
+ }
3621
+ };
3622
+ let AuthDatabase = _AuthDatabase;
3623
+ _database = new WeakMap();
3624
+ _promise = new WeakMap();
3625
+
3574
3626
  async function createRouter(options) {
3575
3627
  const {
3576
3628
  logger,
@@ -3585,7 +3637,11 @@ async function createRouter(options) {
3585
3637
  const router = Router__default["default"]();
3586
3638
  const appUrl = config.getString("app.baseUrl");
3587
3639
  const authUrl = await discovery.getExternalBaseUrl("auth");
3588
- const keyStore = await KeyStores.fromConfig(config, { logger, database });
3640
+ const authDb = AuthDatabase.create(database);
3641
+ const keyStore = await KeyStores.fromConfig(config, {
3642
+ logger,
3643
+ database: authDb
3644
+ });
3589
3645
  const keyDurationSeconds = 3600;
3590
3646
  const tokenIssuer = new TokenFactory({
3591
3647
  issuer: authUrl,
@@ -3598,12 +3654,17 @@ async function createRouter(options) {
3598
3654
  if (secret) {
3599
3655
  router.use(cookieParser__default["default"](secret));
3600
3656
  const enforceCookieSSL = authUrl.startsWith("https");
3657
+ const KnexSessionStore = connectSessionKnex__default["default"](session__default["default"]);
3601
3658
  router.use(
3602
3659
  session__default["default"]({
3603
3660
  secret,
3604
3661
  saveUninitialized: false,
3605
3662
  resave: false,
3606
- cookie: { secure: enforceCookieSSL ? "auto" : false }
3663
+ cookie: { secure: enforceCookieSSL ? "auto" : false },
3664
+ store: new KnexSessionStore({
3665
+ createtable: false,
3666
+ knex: await authDb.get()
3667
+ })
3607
3668
  })
3608
3669
  );
3609
3670
  router.use(passport__default["default"].initialize());