From 4a8d113b9b57d97ff13ad1608798eabca99643e4 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Tue, 28 Apr 2020 14:49:03 +0200 Subject: Begin support for external auths --- .../models/plugins/register-server-auth.model.ts | 40 ++++++++++++++-------- 1 file changed, 25 insertions(+), 15 deletions(-) (limited to 'shared/models/plugins/register-server-auth.model.ts') diff --git a/shared/models/plugins/register-server-auth.model.ts b/shared/models/plugins/register-server-auth.model.ts index 403a49994..08053f017 100644 --- a/shared/models/plugins/register-server-auth.model.ts +++ b/shared/models/plugins/register-server-auth.model.ts @@ -1,42 +1,52 @@ import { UserRole } from '@shared/models' import { MOAuthToken } 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 - // 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 } -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 } -- cgit v1.2.3