]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blobdiff - shared/models/plugins/register-server-auth.model.ts
Add external login tests
[github/Chocobozzz/PeerTube.git] / shared / models / plugins / register-server-auth.model.ts
index 403a499946bf2c221d11b1c2d556ecac9645923d..6539dc88828cf1e2e21eef74372274a2a78f3324 100644 (file)
@@ -1,42 +1,52 @@
 import { UserRole } from '@shared/models'
-import { MOAuthToken } from '@server/typings/models'
+import { MOAuthToken, MUser } from '@server/typings/models'
+import * as express from 'express'
 
 export type RegisterServerAuthOptions = RegisterServerAuthPassOptions | RegisterServerAuthExternalOptions
 
-export interface RegisterServerAuthPassOptions {
+export interface RegisterServerAuthenticatedResult {
+  username: string
+  email: string
+  role?: UserRole
+  displayName?: string
+}
+
+export interface RegisterServerExternalAuthenticatedResult extends RegisterServerAuthenticatedResult {
+  req: express.Request
+  res: express.Response
+}
+
+interface RegisterServerAuthBase {
   // Authentication name (a plugin can register multiple auth strategies)
   authName: string
 
   // Called by PeerTube when a user from your plugin logged out
-  onLogout?(): void
-
-  // Weight of this authentication so PeerTube tries the auth methods in DESC weight order
-  getWeight(): number
+  onLogout?(user: MUser): void
 
   // Your plugin can hook PeerTube access/refresh token validity
   // So you can control for your plugin the user session lifetime
   hookTokenValidity?(options: { token: MOAuthToken, type: 'access' | 'refresh' }): Promise<{ valid: boolean }>
+}
+
+export interface RegisterServerAuthPassOptions extends RegisterServerAuthBase {
+  // Weight of this authentication so PeerTube tries the auth methods in DESC weight order
+  getWeight(): number
 
   // Used by PeerTube to login a user
   // Returns null if the login failed, or { username, email } on success
   login(body: {
     id: string
     password: string
-  }): Promise<{
-    username: string
-    email: string
-    role?: UserRole
-    displayName?: string
-  } | null>
+  }): Promise<RegisterServerAuthenticatedResult | null>
 }
 
-export interface RegisterServerAuthExternalOptions {
-  // Authentication name (a plugin can register multiple auth strategies)
-  authName: string
+export interface RegisterServerAuthExternalOptions extends RegisterServerAuthBase {
+  // Will be displayed in a block next to the login form
+  authDisplayName: string
 
-  onLogout?: Function
+  onAuthRequest: (req: express.Request, res: express.Response) => void
 }
 
 export interface RegisterServerAuthExternalResult {
-  onAuth (options: { username: string, email: string }): void
+  userAuthenticated (options: RegisterServerExternalAuthenticatedResult): void
 }