Browse Source

improve

pull/2676/head
Bernd Storath 3 weeks ago
parent
commit
9c1524b9b4
  1. 2
      src/server/database/migrations/0006_clear_leech.sql
  2. 1024
      src/server/database/migrations/meta/0006_snapshot.json
  3. 7
      src/server/database/migrations/meta/_journal.json
  4. 19
      src/server/database/repositories/client/schema.ts
  5. 2
      src/server/database/repositories/user/schema.ts
  6. 1
      src/server/database/sqlite.ts
  7. 9
      src/server/utils/Database.ts

2
src/server/database/migrations/0006_clear_leech.sql

@ -0,0 +1,2 @@
CREATE UNIQUE INDEX `public_key_interface_unique` ON `clients_table` (`public_key`,`interface_id`);--> statement-breakpoint
CREATE UNIQUE INDEX `users_table_email_unique` ON `users_table` (`email`);

1024
src/server/database/migrations/meta/0006_snapshot.json

File diff suppressed because it is too large

7
src/server/database/migrations/meta/_journal.json

@ -43,6 +43,13 @@
"when": 1780035570366, "when": 1780035570366,
"tag": "0005_clumsy_korg", "tag": "0005_clumsy_korg",
"breakpoints": true "breakpoints": true
},
{
"idx": 6,
"version": "6",
"when": 1782122902196,
"tag": "0006_clear_leech",
"breakpoints": true
} }
] ]
} }

19
src/server/database/repositories/client/schema.ts

@ -1,5 +1,5 @@
import { sql, relations } from 'drizzle-orm'; import { sql, relations } from 'drizzle-orm';
import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core'; import { int, sqliteTable, text, uniqueIndex } from 'drizzle-orm/sqlite-core';
import { wgInterface } from '#db/repositories/interface/schema'; import { wgInterface } from '#db/repositories/interface/schema';
import { oneTimeLink } from '#db/repositories/oneTimeLink/schema'; import { oneTimeLink } from '#db/repositories/oneTimeLink/schema';
@ -7,7 +7,9 @@ import { user } from '#db/repositories/user/schema';
/** null means use value from userConfig */ /** null means use value from userConfig */
export const client = sqliteTable('clients_table', { export const client = sqliteTable(
'clients_table',
{
id: int().primaryKey({ autoIncrement: true }), id: int().primaryKey({ autoIncrement: true }),
userId: int('user_id') userId: int('user_id')
.notNull() .notNull()
@ -37,7 +39,9 @@ export const client = sqliteTable('clients_table', {
.$type<string[]>() .$type<string[]>()
.notNull(), .notNull(),
// Firewall-enforced allowed IPs (null = use allowedIps) // Firewall-enforced allowed IPs (null = use allowedIps)
firewallIps: text('firewall_ips', { mode: 'json' }).$type<string[] | null>(), firewallIps: text('firewall_ips', { mode: 'json' }).$type<
string[] | null
>(),
persistentKeepalive: int('persistent_keepalive').notNull(), persistentKeepalive: int('persistent_keepalive').notNull(),
mtu: int().notNull(), mtu: int().notNull(),
jC: int('j_c'), jC: int('j_c'),
@ -58,7 +62,14 @@ export const client = sqliteTable('clients_table', {
.notNull() .notNull()
.default(sql`(CURRENT_TIMESTAMP)`) .default(sql`(CURRENT_TIMESTAMP)`)
.$onUpdate(() => sql`(CURRENT_TIMESTAMP)`), .$onUpdate(() => sql`(CURRENT_TIMESTAMP)`),
}); },
(table) => [
uniqueIndex('public_key_interface_unique').on(
table.publicKey,
table.interfaceId
),
]
);
export const clientsRelations = relations(client, ({ one }) => ({ export const clientsRelations = relations(client, ({ one }) => ({
oneTimeLink: one(oneTimeLink, { oneTimeLink: one(oneTimeLink, {

2
src/server/database/repositories/user/schema.ts

@ -12,7 +12,7 @@ export const user = sqliteTable(
username: text().notNull().unique(), username: text().notNull().unique(),
/** `password == null` means password login disabled */ /** `password == null` means password login disabled */
password: text(), password: text(),
email: text(), email: text().unique(),
name: text().notNull(), name: text().notNull(),
role: int().$type<Role>().notNull(), role: int().$type<Role>().notNull(),
totpKey: text('totp_key'), totpKey: text('totp_key'),

1
src/server/database/sqlite.ts

@ -69,6 +69,7 @@ async function migrate() {
if (e instanceof Error) { if (e instanceof Error) {
DB_DEBUG('Failed to migrate database:', e.message); DB_DEBUG('Failed to migrate database:', e.message);
} }
throw e;
} }
} }

9
src/server/utils/Database.ts

@ -17,9 +17,14 @@ const nullObject = new Proxy(
// eslint-disable-next-line import/no-mutable-exports // eslint-disable-next-line import/no-mutable-exports
let provider = nullObject as never as DBServiceType; let provider = nullObject as never as DBServiceType;
connect().then((db) => { connect()
.then((db) => {
provider = db; provider = db;
WireGuard.Startup(); WireGuard.Startup();
}); })
.catch((err) => {
console.log('Failed to connect to Database:', err);
process.exit(1);
});
export default provider; export default provider;

Loading…
Cancel
Save