mirror of
https://github.com/immich-app/immich
synced 2025-11-14 17:36:12 +00:00
137 lines
2.7 KiB
TypeScript
137 lines
2.7 KiB
TypeScript
import { ApiProperty } from '@nestjs/swagger';
|
|
import { Transform } from 'class-transformer';
|
|
import { IsEmail, IsNotEmpty, IsString, MinLength } from 'class-validator';
|
|
import { AuthApiKey, AuthSession, AuthSharedLink, AuthUser } from 'src/database';
|
|
import { ImmichCookie, Permission } from 'src/enum';
|
|
import { Optional, PinCode, toEmail, ValidateEnum } from 'src/validation';
|
|
|
|
export type CookieResponse = {
|
|
isSecure: boolean;
|
|
values: Array<{ key: ImmichCookie; value: string | null }>;
|
|
};
|
|
|
|
export class AuthDto {
|
|
user!: AuthUser;
|
|
|
|
apiKey?: AuthApiKey;
|
|
sharedLink?: AuthSharedLink;
|
|
session?: AuthSession;
|
|
}
|
|
|
|
export class LoginCredentialDto {
|
|
@IsEmail({ require_tld: false })
|
|
@Transform(toEmail)
|
|
@IsNotEmpty()
|
|
@ApiProperty({ example: 'testuser@email.com' })
|
|
email!: string;
|
|
|
|
@IsString()
|
|
@IsNotEmpty()
|
|
@ApiProperty({ example: 'password' })
|
|
password!: string;
|
|
}
|
|
|
|
export class LoginResponseDto {
|
|
accessToken!: string;
|
|
userId!: string;
|
|
userEmail!: string;
|
|
name!: string;
|
|
profileImagePath!: string;
|
|
isAdmin!: boolean;
|
|
shouldChangePassword!: boolean;
|
|
isOnboarded!: boolean;
|
|
@ValidateEnum({ enum: Permission, name: 'Permission', each: true })
|
|
permissions!: Permission[];
|
|
}
|
|
|
|
export class LogoutResponseDto {
|
|
successful!: boolean;
|
|
redirectUri!: string;
|
|
}
|
|
|
|
export class SignUpDto extends LoginCredentialDto {
|
|
@IsString()
|
|
@IsNotEmpty()
|
|
@ApiProperty({ example: 'Admin' })
|
|
name!: string;
|
|
}
|
|
|
|
export class ChangePasswordDto {
|
|
@IsString()
|
|
@IsNotEmpty()
|
|
@ApiProperty({ example: 'password' })
|
|
password!: string;
|
|
|
|
@IsString()
|
|
@IsNotEmpty()
|
|
@MinLength(8)
|
|
@ApiProperty({ example: 'password' })
|
|
newPassword!: string;
|
|
}
|
|
|
|
export class PinCodeSetupDto {
|
|
@PinCode()
|
|
pinCode!: string;
|
|
}
|
|
|
|
export class PinCodeResetDto {
|
|
@PinCode({ optional: true })
|
|
pinCode?: string;
|
|
|
|
@Optional()
|
|
@IsString()
|
|
@IsNotEmpty()
|
|
password?: string;
|
|
}
|
|
|
|
export class SessionUnlockDto extends PinCodeResetDto {}
|
|
|
|
export class PinCodeChangeDto extends PinCodeResetDto {
|
|
@PinCode()
|
|
newPinCode!: string;
|
|
}
|
|
|
|
export class ValidateAccessTokenResponseDto {
|
|
authStatus!: boolean;
|
|
}
|
|
|
|
export class OAuthCallbackDto {
|
|
@IsNotEmpty()
|
|
@IsString()
|
|
@ApiProperty()
|
|
url!: string;
|
|
|
|
@Optional()
|
|
@IsString()
|
|
state?: string;
|
|
|
|
@Optional()
|
|
@IsString()
|
|
codeVerifier?: string;
|
|
}
|
|
|
|
export class OAuthConfigDto {
|
|
@IsNotEmpty()
|
|
@IsString()
|
|
redirectUri!: string;
|
|
|
|
@Optional()
|
|
@IsString()
|
|
state?: string;
|
|
|
|
@Optional()
|
|
@IsString()
|
|
codeChallenge?: string;
|
|
}
|
|
|
|
export class OAuthAuthorizeResponseDto {
|
|
url!: string;
|
|
}
|
|
|
|
export class AuthStatusResponseDto {
|
|
pinCode!: boolean;
|
|
password!: boolean;
|
|
isElevated!: boolean;
|
|
expiresAt?: string;
|
|
pinExpiresAt?: string;
|
|
}
|