Split types and typings
[oweals/peertube.git] / shared / models / plugins / register-server-auth.model.ts
1 import { UserRole } from '@shared/models'
2 import { MOAuthToken, MUser } from '@server/types/models'
3 import * as express from 'express'
4
5 export type RegisterServerAuthOptions = RegisterServerAuthPassOptions | RegisterServerAuthExternalOptions
6
7 export interface RegisterServerAuthenticatedResult {
8   username: string
9   email: string
10   role?: UserRole
11   displayName?: string
12 }
13
14 export interface RegisterServerExternalAuthenticatedResult extends RegisterServerAuthenticatedResult {
15   req: express.Request
16   res: express.Response
17 }
18
19 interface RegisterServerAuthBase {
20   // Authentication name (a plugin can register multiple auth strategies)
21   authName: string
22
23   // Called by PeerTube when a user from your plugin logged out
24   onLogout?(user: MUser): void
25
26   // Your plugin can hook PeerTube access/refresh token validity
27   // So you can control for your plugin the user session lifetime
28   hookTokenValidity?(options: { token: MOAuthToken, type: 'access' | 'refresh' }): Promise<{ valid: boolean }>
29 }
30
31 export interface RegisterServerAuthPassOptions extends RegisterServerAuthBase {
32   // Weight of this authentication so PeerTube tries the auth methods in DESC weight order
33   getWeight(): number
34
35   // Used by PeerTube to login a user
36   // Returns null if the login failed, or { username, email } on success
37   login(body: {
38     id: string
39     password: string
40   }): Promise<RegisterServerAuthenticatedResult | null>
41 }
42
43 export interface RegisterServerAuthExternalOptions extends RegisterServerAuthBase {
44   // Will be displayed in a block next to the login form
45   authDisplayName: () => string
46
47   onAuthRequest: (req: express.Request, res: express.Response) => void
48 }
49
50 export interface RegisterServerAuthExternalResult {
51   userAuthenticated (options: RegisterServerExternalAuthenticatedResult): void
52 }