Files
outline/server/models/helpers/AuthenticationHelper.ts
Tom Moor f9a11a28d8 chore: Plugin registration (#6623)
* first pass

* test

* test

* priority

* Reduce boilerplate further

* Update server/utils/PluginManager.ts

Co-authored-by: Apoorv Mishra <apoorvmishra101092@gmail.com>

* fix: matchesNode error in destroyed editor transaction

* fix: Individual imported files do not display source correctly in 'Insights'

* chore: Add sleep before Slack notification

* docs

* fix: Error logged about missing plugin.json

* Remove email template glob

---------

Co-authored-by: Apoorv Mishra <apoorvmishra101092@gmail.com>
2024-03-08 20:32:05 -08:00

56 lines
1.8 KiB
TypeScript

/* eslint-disable @typescript-eslint/no-var-requires */
import find from "lodash/find";
import env from "@server/env";
import Team from "@server/models/Team";
import { PluginManager, PluginType } from "@server/utils/PluginManager";
export default class AuthenticationHelper {
/**
* Returns the enabled authentication provider configurations for the current
* installation.
*
* @returns A list of authentication providers
*/
public static get providers() {
return PluginManager.getEnabledPlugins(PluginType.AuthProvider);
}
/**
* Returns the enabled authentication provider configurations for a team,
* if given otherwise all enabled providers are returned.
*
* @param team The team to get enabled providers for
* @returns A list of authentication providers
*/
public static providersForTeam(team?: Team) {
const isCloudHosted = env.isCloudHosted;
return AuthenticationHelper.providers
.sort((plugin) => (plugin.id === "email" ? 1 : -1))
.filter((plugin) => {
// Email sign-in is an exception as it does not have an authentication
// provider using passport, instead it exists as a boolean option.
if (plugin.id === "email") {
return team?.emailSigninEnabled;
}
// If no team return all possible authentication providers except email.
if (!team) {
return true;
}
const authProvider = find(team.authenticationProviders, {
name: plugin.id,
});
// If cloud hosted then the auth provider must be enabled for the team,
// If self-hosted then it must not be actively disabled, otherwise all
// providers are considered.
return (
(!isCloudHosted && authProvider?.enabled !== false) ||
(isCloudHosted && authProvider?.enabled)
);
});
}
}