diff --git a/backend/db.js b/backend/db.js index bd74e518..bf540f8a 100644 --- a/backend/db.js +++ b/backend/db.js @@ -1,6 +1,8 @@ import knex from "knex"; import {configGet, configHas} from "./lib/config.js"; +let instance = null; + const generateDbConfig = () => { if (!configHas("database")) { throw new Error( @@ -30,4 +32,11 @@ const generateDbConfig = () => { }; }; -export default knex(generateDbConfig()); +const getInstance = () => { + if (!instance) { + instance = knex(generateDbConfig()); + } + return instance; +} + +export default getInstance; diff --git a/backend/migrate.js b/backend/migrate.js index dd3f1b61..4c99cab6 100644 --- a/backend/migrate.js +++ b/backend/migrate.js @@ -2,9 +2,9 @@ import db from "./db.js"; import { migrate as logger } from "./logger.js"; const migrateUp = async () => { - const version = await db.migrate.currentVersion(); + const version = await db().migrate.currentVersion(); logger.info("Current database version:", version); - return await db.migrate.latest({ + return await db().migrate.latest({ tableName: "migrations", directory: "migrations", }); diff --git a/backend/models/access_list.js b/backend/models/access_list.js index 98016a17..427d447d 100644 --- a/backend/models/access_list.js +++ b/backend/models/access_list.js @@ -10,7 +10,7 @@ import now from "./now_helper.js"; import ProxyHostModel from "./proxy_host.js"; import User from "./user.js"; -Model.knex(db); +Model.knex(db()); const boolFields = ["is_deleted", "satisfy_any", "pass_auth"]; diff --git a/backend/models/access_list_auth.js b/backend/models/access_list_auth.js index a4fd85a5..75bf4352 100644 --- a/backend/models/access_list_auth.js +++ b/backend/models/access_list_auth.js @@ -6,7 +6,7 @@ import db from "../db.js"; import accessListModel from "./access_list.js"; import now from "./now_helper.js"; -Model.knex(db); +Model.knex(db()); class AccessListAuth extends Model { $beforeInsert() { diff --git a/backend/models/access_list_client.js b/backend/models/access_list_client.js index 4b63aec9..91165fe1 100644 --- a/backend/models/access_list_client.js +++ b/backend/models/access_list_client.js @@ -6,7 +6,7 @@ import db from "../db.js"; import accessListModel from "./access_list.js"; import now from "./now_helper.js"; -Model.knex(db); +Model.knex(db()); class AccessListClient extends Model { $beforeInsert() { diff --git a/backend/models/audit-log.js b/backend/models/audit-log.js index a9b2d563..6e2d398f 100644 --- a/backend/models/audit-log.js +++ b/backend/models/audit-log.js @@ -6,7 +6,7 @@ import db from "../db.js"; import now from "./now_helper.js"; import User from "./user.js"; -Model.knex(db); +Model.knex(db()); class AuditLog extends Model { $beforeInsert() { diff --git a/backend/models/auth.js b/backend/models/auth.js index 4ba50b41..e8af582d 100644 --- a/backend/models/auth.js +++ b/backend/models/auth.js @@ -8,7 +8,7 @@ import { convertBoolFieldsToInt, convertIntFieldsToBool } from "../lib/helpers.j import now from "./now_helper.js"; import User from "./user.js"; -Model.knex(db); +Model.knex(db()); const boolFields = ["is_deleted"]; diff --git a/backend/models/certificate.js b/backend/models/certificate.js index 9ad03c89..ad6e0a65 100644 --- a/backend/models/certificate.js +++ b/backend/models/certificate.js @@ -11,7 +11,7 @@ import redirectionHostModel from "./redirection_host.js"; import streamModel from "./stream.js"; import userModel from "./user.js"; -Model.knex(db); +Model.knex(db()); const boolFields = ["is_deleted"]; diff --git a/backend/models/dead_host.js b/backend/models/dead_host.js index 56807012..0acf7ca7 100644 --- a/backend/models/dead_host.js +++ b/backend/models/dead_host.js @@ -8,7 +8,7 @@ import Certificate from "./certificate.js"; import now from "./now_helper.js"; import User from "./user.js"; -Model.knex(db); +Model.knex(db()); const boolFields = ["is_deleted", "ssl_forced", "http2_support", "enabled", "hsts_enabled", "hsts_subdomains"]; diff --git a/backend/models/now_helper.js b/backend/models/now_helper.js index 4dc71cea..293dcc72 100644 --- a/backend/models/now_helper.js +++ b/backend/models/now_helper.js @@ -2,7 +2,7 @@ import { Model } from "objection"; import db from "../db.js"; import { isSqlite } from "../lib/config.js"; -Model.knex(db); +Model.knex(db()); export default () => { if (isSqlite()) { diff --git a/backend/models/proxy_host.js b/backend/models/proxy_host.js index 119fe2b7..b6ce6361 100644 --- a/backend/models/proxy_host.js +++ b/backend/models/proxy_host.js @@ -9,7 +9,7 @@ import Certificate from "./certificate.js"; import now from "./now_helper.js"; import User from "./user.js"; -Model.knex(db); +Model.knex(db()); const boolFields = [ "is_deleted", diff --git a/backend/models/redirection_host.js b/backend/models/redirection_host.js index bb397baa..46c73017 100644 --- a/backend/models/redirection_host.js +++ b/backend/models/redirection_host.js @@ -8,7 +8,7 @@ import Certificate from "./certificate.js"; import now from "./now_helper.js"; import User from "./user.js"; -Model.knex(db); +Model.knex(db()); const boolFields = [ "is_deleted", diff --git a/backend/models/setting.js b/backend/models/setting.js index 0e0d6f4f..56f7dc5a 100644 --- a/backend/models/setting.js +++ b/backend/models/setting.js @@ -4,7 +4,7 @@ import { Model } from "objection"; import db from "../db.js"; -Model.knex(db); +Model.knex(db()); class Setting extends Model { $beforeInsert () { diff --git a/backend/models/stream.js b/backend/models/stream.js index 92d335ff..5f61945a 100644 --- a/backend/models/stream.js +++ b/backend/models/stream.js @@ -5,7 +5,7 @@ import Certificate from "./certificate.js"; import now from "./now_helper.js"; import User from "./user.js"; -Model.knex(db); +Model.knex(db()); const boolFields = ["is_deleted", "enabled", "tcp_forwarding", "udp_forwarding"]; diff --git a/backend/models/user.js b/backend/models/user.js index 64aed05d..68a31446 100644 --- a/backend/models/user.js +++ b/backend/models/user.js @@ -7,7 +7,7 @@ import { convertBoolFieldsToInt, convertIntFieldsToBool } from "../lib/helpers.j import now from "./now_helper.js"; import UserPermission from "./user_permission.js"; -Model.knex(db); +Model.knex(db()); const boolFields = ["is_deleted", "is_disabled"]; diff --git a/backend/models/user_permission.js b/backend/models/user_permission.js index 49ea2d90..d8784717 100644 --- a/backend/models/user_permission.js +++ b/backend/models/user_permission.js @@ -5,7 +5,7 @@ import { Model } from "objection"; import db from "../db.js"; import now from "./now_helper.js"; -Model.knex(db); +Model.knex(db()); class UserPermission extends Model { $beforeInsert () {