import { PluginTranslation } from '../../../shared/models/plugins/plugin-translation.model'
import { RegisterHelpersStore } from './register-helpers-store'
import { RegisterServerHookOptions } from '@shared/models/plugins/register-server-hook.model'
+import { MOAuthTokenUser, MUser } from '@server/typings/models'
+import { RegisterServerAuthPassOptions, RegisterServerAuthExternalOptions } from '@shared/models/plugins/register-server-auth.model'
export interface RegisteredPlugin {
npmName: string
getIdAndPassAuths () {
return this.getRegisteredPlugins()
- .map(p => ({ npmName: p.npmName, idAndPassAuths: p.registerHelpersStore.getIdAndPassAuths() }))
+ .map(p => ({
+ npmName: p.npmName,
+ name: p.name,
+ version: p.version,
+ idAndPassAuths: p.registerHelpersStore.getIdAndPassAuths()
+ }))
.filter(v => v.idAndPassAuths.length !== 0)
}
getExternalAuths () {
return this.getRegisteredPlugins()
- .map(p => ({ npmName: p.npmName, externalAuths: p.registerHelpersStore.getExternalAuths() }))
- .filter(v => v.externalAuths.length !== 0)
+ .map(p => ({
+ npmName: p.npmName,
+ name: p.name,
+ version: p.version,
+ externalAuths: p.registerHelpersStore.getExternalAuths()
+ }))
+ .filter(v => v.externalAuths.length !== 0)
}
getRegisteredSettings (npmName: string) {
return this.translations[locale] || {}
}
- onLogout (npmName: string, authName: string) {
- const plugin = this.getRegisteredPluginOrTheme(npmName)
- if (!plugin || plugin.type !== PluginType.PLUGIN) return
+ onLogout (npmName: string, authName: string, user: MUser) {
+ const auth = this.getAuth(npmName, authName)
- const auth = plugin.registerHelpersStore.getIdAndPassAuths()
- .find(a => a.authName === authName)
+ if (auth?.onLogout) {
+ logger.info('Running onLogout function from auth %s of plugin %s', authName, npmName)
- if (auth.onLogout) {
try {
- auth.onLogout()
+ auth.onLogout(user)
} catch (err) {
logger.warn('Cannot run onLogout function from auth %s of plugin %s.', authName, npmName, { err })
}
}
}
+ async isTokenValid (token: MOAuthTokenUser, type: 'access' | 'refresh') {
+ const auth = this.getAuth(token.User.pluginAuth, token.authName)
+ if (!auth) return true
+
+ if (auth.hookTokenValidity) {
+ try {
+ const { valid } = await auth.hookTokenValidity({ token, type })
+
+ if (valid === false) {
+ logger.info('Rejecting %s token validity from auth %s of plugin %s', type, token.authName, token.User.pluginAuth)
+ }
+
+ return valid
+ } catch (err) {
+ logger.warn('Cannot run check token validity from auth %s of plugin %s.', token.authName, token.User.pluginAuth, { err })
+ return true
+ }
+ }
+
+ return true
+ }
+
// ###################### Hooks ######################
async runHook<T> (hookName: ServerHookName, result?: T, params?: any): Promise<T> {
return join(CONFIG.STORAGE.PLUGINS_DIR, 'node_modules', npmName)
}
+ private getAuth (npmName: string, authName: string) {
+ const plugin = this.getRegisteredPluginOrTheme(npmName)
+ if (!plugin || plugin.type !== PluginType.PLUGIN) return null
+
+ let auths: (RegisterServerAuthPassOptions | RegisterServerAuthExternalOptions)[] = plugin.registerHelpersStore.getIdAndPassAuths()
+ auths = auths.concat(plugin.registerHelpersStore.getExternalAuths())
+
+ return auths.find(a => a.authName === authName)
+ }
+
// ###################### Private getters ######################
private getRegisteredPluginsOrThemes (type: PluginType) {