feat: implement Phase 1 server-side federation groundwork
Add multi-instance support foundation: shared federation types (ReplicatedInstance, InstanceInfoResponse, VerifyPasswordRequest), database schema changes (home_instance, replicated_instances on users, instance_name on settings), public instance info endpoint, auth registration with homeInstance and username@domain collision fallback, password verification endpoint, and replicatedInstances sync on user profile. Extract duplicated sanitizeUser into shared utility across 8 server files.
This commit is contained in:
@@ -23,6 +23,8 @@ function createTables(db: Database.Database): void {
|
||||
avatar TEXT,
|
||||
status TEXT DEFAULT 'offline',
|
||||
custom_status TEXT,
|
||||
home_instance TEXT,
|
||||
replicated_instances TEXT DEFAULT '[]',
|
||||
created_at INTEGER NOT NULL
|
||||
);
|
||||
|
||||
@@ -177,6 +179,7 @@ function createTables(db: Database.Database): void {
|
||||
|
||||
CREATE TABLE IF NOT EXISTS instance_settings (
|
||||
id INTEGER PRIMARY KEY DEFAULT 1 CHECK (id = 1),
|
||||
instance_name TEXT DEFAULT 'Backspace',
|
||||
max_bitrate_kbps INTEGER NOT NULL DEFAULT 20000,
|
||||
min_bitrate_kbps INTEGER NOT NULL DEFAULT 500,
|
||||
bitrate_step_kbps INTEGER NOT NULL DEFAULT 500,
|
||||
|
||||
@@ -54,6 +54,19 @@ export function runMigrations(db: Database.Database): void {
|
||||
columns: [
|
||||
{ name: 'is_admin', type: 'INTEGER DEFAULT 0' }
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'users',
|
||||
columns: [
|
||||
{ name: 'home_instance', type: 'TEXT' },
|
||||
{ name: 'replicated_instances', type: "TEXT DEFAULT '[]'" }
|
||||
]
|
||||
},
|
||||
{
|
||||
name: 'instance_settings',
|
||||
columns: [
|
||||
{ name: 'instance_name', type: "TEXT DEFAULT 'Backspace'" }
|
||||
]
|
||||
}
|
||||
];
|
||||
|
||||
|
||||
@@ -9,6 +9,8 @@ export const users = sqliteTable('users', {
|
||||
status: text('status').default('offline'),
|
||||
customStatus: text('custom_status'),
|
||||
isAdmin: integer('is_admin').default(0),
|
||||
homeInstance: text('home_instance'),
|
||||
replicatedInstances: text('replicated_instances').default('[]'),
|
||||
createdAt: integer('created_at').notNull(),
|
||||
});
|
||||
|
||||
@@ -177,6 +179,7 @@ export const serverFolderMembers = sqliteTable('server_folder_members', {
|
||||
|
||||
export const instanceSettings = sqliteTable('instance_settings', {
|
||||
id: integer('id').primaryKey().default(1),
|
||||
instanceName: text('instance_name').default('Backspace'),
|
||||
maxBitrateKbps: integer('max_bitrate_kbps').notNull().default(20000),
|
||||
minBitrateKbps: integer('min_bitrate_kbps').notNull().default(500),
|
||||
bitrateStepKbps: integer('bitrate_step_kbps').notNull().default(500),
|
||||
|
||||
Reference in New Issue
Block a user