wip
This commit is contained in:
@@ -0,0 +1,8 @@
|
||||
import type { AuthProviderDTO } from './AuthProviderDTO';
|
||||
|
||||
export interface AuthCallbackCommandDTO {
|
||||
provider: AuthProviderDTO;
|
||||
code: string;
|
||||
state: string;
|
||||
returnTo?: string;
|
||||
}
|
||||
1
packages/identity/application/dto/AuthProviderDTO.ts
Normal file
1
packages/identity/application/dto/AuthProviderDTO.ts
Normal file
@@ -0,0 +1 @@
|
||||
export type AuthProviderDTO = 'IRACING_DEMO';
|
||||
8
packages/identity/application/dto/AuthSessionDTO.ts
Normal file
8
packages/identity/application/dto/AuthSessionDTO.ts
Normal file
@@ -0,0 +1,8 @@
|
||||
import type { AuthenticatedUserDTO } from './AuthenticatedUserDTO';
|
||||
|
||||
export interface AuthSessionDTO {
|
||||
user: AuthenticatedUserDTO;
|
||||
issuedAt: number;
|
||||
expiresAt: number;
|
||||
token: string;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
export interface AuthenticatedUserDTO {
|
||||
id: string;
|
||||
displayName: string;
|
||||
email?: string;
|
||||
iracingCustomerId?: string;
|
||||
primaryDriverId?: string;
|
||||
avatarUrl?: string;
|
||||
}
|
||||
4
packages/identity/application/dto/IracingAuthStateDTO.ts
Normal file
4
packages/identity/application/dto/IracingAuthStateDTO.ts
Normal file
@@ -0,0 +1,4 @@
|
||||
export interface IracingAuthStateDTO {
|
||||
state: string;
|
||||
returnTo?: string;
|
||||
}
|
||||
6
packages/identity/application/dto/StartAuthCommandDTO.ts
Normal file
6
packages/identity/application/dto/StartAuthCommandDTO.ts
Normal file
@@ -0,0 +1,6 @@
|
||||
import type { AuthProviderDTO } from './AuthProviderDTO';
|
||||
|
||||
export interface StartAuthCommandDTO {
|
||||
provider: AuthProviderDTO;
|
||||
returnTo?: string;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
import type { AuthenticatedUserDTO } from '../dto/AuthenticatedUserDTO';
|
||||
import type { AuthCallbackCommandDTO } from '../dto/AuthCallbackCommandDTO';
|
||||
import type { StartAuthCommandDTO } from '../dto/StartAuthCommandDTO';
|
||||
|
||||
export interface IdentityProviderPort {
|
||||
startAuth(command: StartAuthCommandDTO): Promise<{ redirectUrl: string; state: string }>;
|
||||
completeAuth(command: AuthCallbackCommandDTO): Promise<AuthenticatedUserDTO>;
|
||||
}
|
||||
@@ -0,0 +1,8 @@
|
||||
import type { AuthenticatedUserDTO } from '../dto/AuthenticatedUserDTO';
|
||||
import type { AuthSessionDTO } from '../dto/AuthSessionDTO';
|
||||
|
||||
export interface IdentitySessionPort {
|
||||
getCurrentSession(): Promise<AuthSessionDTO | null>;
|
||||
createSession(user: AuthenticatedUserDTO): Promise<AuthSessionDTO>;
|
||||
clearSession(): Promise<void>;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
import type { AuthSessionDTO } from '../dto/AuthSessionDTO';
|
||||
import type { IdentitySessionPort } from '../ports/IdentitySessionPort';
|
||||
|
||||
export class GetCurrentUserSessionUseCase {
|
||||
private readonly sessionPort: IdentitySessionPort;
|
||||
|
||||
constructor(sessionPort: IdentitySessionPort) {
|
||||
this.sessionPort = sessionPort;
|
||||
}
|
||||
|
||||
async execute(): Promise<AuthSessionDTO | null> {
|
||||
return this.sessionPort.getCurrentSession();
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,21 @@
|
||||
import type { AuthCallbackCommandDTO } from '../dto/AuthCallbackCommandDTO';
|
||||
import type { AuthSessionDTO } from '../dto/AuthSessionDTO';
|
||||
import type { AuthenticatedUserDTO } from '../dto/AuthenticatedUserDTO';
|
||||
import type { IdentityProviderPort } from '../ports/IdentityProviderPort';
|
||||
import type { IdentitySessionPort } from '../ports/IdentitySessionPort';
|
||||
|
||||
export class HandleAuthCallbackUseCase {
|
||||
private readonly provider: IdentityProviderPort;
|
||||
private readonly sessionPort: IdentitySessionPort;
|
||||
|
||||
constructor(provider: IdentityProviderPort, sessionPort: IdentitySessionPort) {
|
||||
this.provider = provider;
|
||||
this.sessionPort = sessionPort;
|
||||
}
|
||||
|
||||
async execute(command: AuthCallbackCommandDTO): Promise<AuthSessionDTO> {
|
||||
const user: AuthenticatedUserDTO = await this.provider.completeAuth(command);
|
||||
const session = await this.sessionPort.createSession(user);
|
||||
return session;
|
||||
}
|
||||
}
|
||||
13
packages/identity/application/use-cases/LogoutUseCase.ts
Normal file
13
packages/identity/application/use-cases/LogoutUseCase.ts
Normal file
@@ -0,0 +1,13 @@
|
||||
import type { IdentitySessionPort } from '../ports/IdentitySessionPort';
|
||||
|
||||
export class LogoutUseCase {
|
||||
private readonly sessionPort: IdentitySessionPort;
|
||||
|
||||
constructor(sessionPort: IdentitySessionPort) {
|
||||
this.sessionPort = sessionPort;
|
||||
}
|
||||
|
||||
async execute(): Promise<void> {
|
||||
await this.sessionPort.clearSession();
|
||||
}
|
||||
}
|
||||
14
packages/identity/application/use-cases/StartAuthUseCase.ts
Normal file
14
packages/identity/application/use-cases/StartAuthUseCase.ts
Normal file
@@ -0,0 +1,14 @@
|
||||
import type { StartAuthCommandDTO } from '../dto/StartAuthCommandDTO';
|
||||
import type { IdentityProviderPort } from '../ports/IdentityProviderPort';
|
||||
|
||||
export class StartAuthUseCase {
|
||||
private readonly provider: IdentityProviderPort;
|
||||
|
||||
constructor(provider: IdentityProviderPort) {
|
||||
this.provider = provider;
|
||||
}
|
||||
|
||||
async execute(command: StartAuthCommandDTO): Promise<{ redirectUrl: string; state: string }> {
|
||||
return this.provider.startAuth(command);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user