diff --git a/packages/server/src/db/migrate.ts b/packages/server/src/db/migrate.ts index c6819839..a32858b7 100644 --- a/packages/server/src/db/migrate.ts +++ b/packages/server/src/db/migrate.ts @@ -215,6 +215,12 @@ export function runMigrations(db: Database.Database): void { { name: 'federation_relay_ttl_days', type: 'INTEGER NOT NULL DEFAULT 30' }, ] }, + { + name: 'instance_settings', + columns: [ + { name: 'default_auto_rotate_interval_days', type: 'INTEGER NOT NULL DEFAULT 90' }, + ] + }, { name: 'federation_peers', columns: [ diff --git a/packages/server/src/db/schema.ts b/packages/server/src/db/schema.ts index 315bf70c..92d1f414 100644 --- a/packages/server/src/db/schema.ts +++ b/packages/server/src/db/schema.ts @@ -274,6 +274,7 @@ export const instanceSettings = sqliteTable('instance_settings', { maxUploadSizeBytes: integer('max_upload_size_bytes'), federationRelayEnabled: integer('federation_relay_enabled').notNull().default(1), federationRelayTtlDays: integer('federation_relay_ttl_days').notNull().default(30), + defaultAutoRotateIntervalDays: integer('default_auto_rotate_interval_days').notNull().default(90), updatedAt: integer('updated_at').notNull(), }); diff --git a/packages/server/src/routes/settings.ts b/packages/server/src/routes/settings.ts index bb31f916..4be819b7 100644 --- a/packages/server/src/routes/settings.ts +++ b/packages/server/src/routes/settings.ts @@ -191,6 +191,7 @@ export async function settingsRoutes(app: FastifyInstance): Promise { maxUploadSizeMb: Math.round(maxUploadBytes / (1024 * 1024)), federationRelayEnabled: row.federationRelayEnabled === 1, federationRelayTtlDays: row.federationRelayTtlDays, + defaultAutoRotateIntervalDays: row.defaultAutoRotateIntervalDays, }; return reply.code(200).send(response); @@ -249,6 +250,14 @@ export async function settingsRoutes(app: FastifyInstance): Promise { updateData.federationRelayTtlDays = ttl; } + if (body.defaultAutoRotateIntervalDays !== undefined) { + const interval = Number(body.defaultAutoRotateIntervalDays); + if (isNaN(interval) || !Number.isInteger(interval) || interval < 1 || interval > 365) { + return reply.code(400).send({ error: 'defaultAutoRotateIntervalDays must be an integer between 1 and 365', statusCode: 400 }); + } + updateData.defaultAutoRotateIntervalDays = interval; + } + db.update(schema.instanceSettings).set(updateData).where(eq(schema.instanceSettings.id, 1)).run(); const updatedRow = db.select().from(schema.instanceSettings).where(eq(schema.instanceSettings.id, 1)).get(); @@ -267,6 +276,7 @@ export async function settingsRoutes(app: FastifyInstance): Promise { maxUploadSizeMb: Math.round(updatedMaxUploadBytes / (1024 * 1024)), federationRelayEnabled: updatedRow.federationRelayEnabled === 1, federationRelayTtlDays: updatedRow.federationRelayTtlDays, + defaultAutoRotateIntervalDays: updatedRow.defaultAutoRotateIntervalDays, }; return reply.code(200).send(response);