@@ -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`);
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -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
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -1,13 +1,15 @@
|
|||||||
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 '../interface/schema';
|
||||||
import { oneTimeLink } from '#db/repositories/oneTimeLink/schema';
|
import { oneTimeLink } from '../oneTimeLink/schema';
|
||||||
import { user } from '#db/repositories/user/schema';
|
import { user } from '../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, {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import { sql } from 'drizzle-orm';
|
import { sql } from 'drizzle-orm';
|
||||||
import { sqliteTable, text } from 'drizzle-orm/sqlite-core';
|
import { sqliteTable, text } from 'drizzle-orm/sqlite-core';
|
||||||
|
|
||||||
import { wgInterface } from '#db/repositories/interface/schema';
|
import { wgInterface } from '../interface/schema';
|
||||||
|
|
||||||
export const hooks = sqliteTable('hooks_table', {
|
export const hooks = sqliteTable('hooks_table', {
|
||||||
/** same as `wgInterface.name` */
|
/** same as `wgInterface.name` */
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
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 } from 'drizzle-orm/sqlite-core';
|
||||||
|
|
||||||
import { hooks } from '#db/repositories/hooks/schema';
|
import { hooks } from '../hooks/schema';
|
||||||
import { userConfig } from '#db/repositories/userConfig/schema';
|
import { userConfig } from '../userConfig/schema';
|
||||||
|
|
||||||
// maybe support multiple interfaces in the future
|
// maybe support multiple interfaces in the future
|
||||||
export const wgInterface = sqliteTable('interfaces_table', {
|
export const wgInterface = sqliteTable('interfaces_table', {
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
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 } from 'drizzle-orm/sqlite-core';
|
||||||
|
|
||||||
import { client } from '#db/repositories/client/schema';
|
import { client } from '../client/schema';
|
||||||
|
|
||||||
export const oneTimeLink = sqliteTable('one_time_links_table', {
|
export const oneTimeLink = sqliteTable('one_time_links_table', {
|
||||||
/** same as `client.id` */
|
/** same as `client.id` */
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
import { sql, relations } from 'drizzle-orm';
|
import { sql, relations } from 'drizzle-orm';
|
||||||
import { int, sqliteTable, text, uniqueIndex } from 'drizzle-orm/sqlite-core';
|
import { int, sqliteTable, text, uniqueIndex } from 'drizzle-orm/sqlite-core';
|
||||||
|
|
||||||
import { client } from '#db/repositories/client/schema';
|
import { client } from '../client/schema';
|
||||||
|
|
||||||
import type { Role } from '#shared/utils/permissions';
|
import type { Role } from '#shared/utils/permissions';
|
||||||
import type { OAUTH_PROVIDER } from '#server/utils/oauth';
|
import type { OAUTH_PROVIDER } from '#server/utils/oauth';
|
||||||
|
|
||||||
@@ -12,7 +13,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,7 +1,7 @@
|
|||||||
import { sql } from 'drizzle-orm';
|
import { sql } from 'drizzle-orm';
|
||||||
import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core';
|
import { int, sqliteTable, text } from 'drizzle-orm/sqlite-core';
|
||||||
|
|
||||||
import { wgInterface } from '#db/repositories/interface/schema';
|
import { wgInterface } from '../interface/schema';
|
||||||
|
|
||||||
// default* means clients store it themselves
|
// default* means clients store it themselves
|
||||||
export const userConfig = sqliteTable('user_configs_table', {
|
export const userConfig = sqliteTable('user_configs_table', {
|
||||||
|
|||||||
@@ -1,7 +1,8 @@
|
|||||||
export * from '#db/repositories/client/schema';
|
// ! Do not use Path Aliases in this or any of these files
|
||||||
export * from '#db/repositories/general/schema';
|
export * from './repositories/client/schema';
|
||||||
export * from '#db/repositories/hooks/schema';
|
export * from './repositories/general/schema';
|
||||||
export * from '#db/repositories/interface/schema';
|
export * from './repositories/hooks/schema';
|
||||||
export * from '#db/repositories/oneTimeLink/schema';
|
export * from './repositories/interface/schema';
|
||||||
export * from '#db/repositories/user/schema';
|
export * from './repositories/oneTimeLink/schema';
|
||||||
export * from '#db/repositories/userConfig/schema';
|
export * from './repositories/user/schema';
|
||||||
|
export * from './repositories/userConfig/schema';
|
||||||
|
|||||||
@@ -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;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user