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 ++++++++++++++-------- .../plugins/register-server-setting.model.ts | 2 +- shared/models/server/server-config.model.ts | 16 +++++++++ 3 files changed, 42 insertions(+), 16 deletions(-) (limited to 'shared') 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 } diff --git a/shared/models/plugins/register-server-setting.model.ts b/shared/models/plugins/register-server-setting.model.ts index ec175e9ef..920c3480f 100644 --- a/shared/models/plugins/register-server-setting.model.ts +++ b/shared/models/plugins/register-server-setting.model.ts @@ -9,7 +9,7 @@ export interface RegisterServerSettingOptions { private: boolean // Default setting value - default?: string + default?: string | boolean } export interface RegisteredServerSettings { diff --git a/shared/models/server/server-config.model.ts b/shared/models/server/server-config.model.ts index c3976a346..0ff079216 100644 --- a/shared/models/server/server-config.model.ts +++ b/shared/models/server/server-config.model.ts @@ -12,6 +12,18 @@ export interface ServerConfigTheme extends ServerConfigPlugin { css: string[] } +export interface RegisteredExternalAuthConfig { + npmName: string + authName: string + authDisplayName: string +} + +export interface RegisteredIdAndPassAuthConfig { + npmName: string + authName: string + weight: number +} + export interface ServerConfig { serverVersion: string serverCommit?: string @@ -37,6 +49,10 @@ export interface ServerConfig { plugin: { registered: ServerConfigPlugin[] + + registeredExternalAuths: RegisteredExternalAuthConfig[] + + registeredIdAndPassAuths: RegisteredIdAndPassAuthConfig[] } theme: { -- cgit v1.2.3