mirror of
https://github.com/immich-app/immich.git
synced 2025-12-25 01:11:43 +03:00
26 lines
753 B
TypeScript
26 lines
753 B
TypeScript
import { SignJWT } from 'jose';
|
|
import { randomBytes } from 'node:crypto';
|
|
import { MaintenanceAuthDto } from 'src/dtos/maintenance.dto';
|
|
|
|
export async function createMaintenanceLoginUrl(
|
|
baseUrl: string,
|
|
auth: MaintenanceAuthDto,
|
|
secret: string,
|
|
): Promise<string> {
|
|
return `${baseUrl}/maintenance?token=${await signMaintenanceJwt(secret, auth)}`;
|
|
}
|
|
|
|
export async function signMaintenanceJwt(secret: string, data: MaintenanceAuthDto): Promise<string> {
|
|
const alg = 'HS256';
|
|
|
|
return await new SignJWT({ ...data })
|
|
.setProtectedHeader({ alg })
|
|
.setIssuedAt()
|
|
.setExpirationTime('4h')
|
|
.sign(new TextEncoder().encode(secret));
|
|
}
|
|
|
|
export function generateMaintenanceSecret(): string {
|
|
return randomBytes(64).toString('hex');
|
|
}
|