diff --git a/apps/meteor/app/gitlab/server/lib.ts b/apps/meteor/app/gitlab/server/lib.ts index 0f4d330cf5970..3df1c1ded5496 100644 --- a/apps/meteor/app/gitlab/server/lib.ts +++ b/apps/meteor/app/gitlab/server/lib.ts @@ -1,11 +1,12 @@ -import type { OauthConfig } from '@rocket.chat/core-typings'; +import type { OAuthConfiguration } from '@rocket.chat/core-typings'; import { Meteor } from 'meteor/meteor'; +import passport from 'passport'; import _ from 'underscore'; -import { CustomOAuth } from '../../custom-oauth/server/custom_oauth_server'; +import { addPassportCustomOAuth } from '../../../server/lib/oauth/addPassportCustomOAuth'; import { settings } from '../../settings/server'; -const config: OauthConfig = { +const config: Partial = { serverURL: 'https://gitlab.com', identityPath: '/api/v4/user', scope: 'read_user', @@ -17,15 +18,39 @@ const config: OauthConfig = { accessTokenParam: 'access_token', }; -const Gitlab = new CustomOAuth('gitlab', config); +const configureGitlabOAuth = () => { + passport.unuse('gitlab'); + + const enabled = settings.get('Accounts_OAuth_Gitlab'); + if (!enabled) { + return; + } + + const clientId = settings.get('Accounts_OAuth_Gitlab_id'); + const clientSecret = settings.get('Accounts_OAuth_Gitlab_secret'); + const serverURL = settings.get('API_Gitlab_URL').trim().replace(/\/*$/, '') || config.serverURL; + const identityPath = settings.get('Accounts_OAuth_Gitlab_identity_path') || config.identityPath; + const mergeUsers = Boolean(settings.get('Accounts_OAuth_Gitlab_merge_users')); + + if (!clientId || !clientSecret) { + return; + } + + addPassportCustomOAuth('gitlab', { ...config, clientId, clientSecret, serverURL, identityPath, mergeUsers }); +}; Meteor.startup(() => { - const updateConfig = _.debounce(() => { - config.serverURL = settings.get('API_Gitlab_URL').trim().replace(/\/*$/, '') || config.serverURL; - config.identityPath = settings.get('Accounts_OAuth_Gitlab_identity_path') || config.identityPath; - config.mergeUsers = Boolean(settings.get('Accounts_OAuth_Gitlab_merge_users')); - Gitlab.configure(config); - }, 300); - - settings.watchMultiple(['API_Gitlab_URL', 'Accounts_OAuth_Gitlab_identity_path', 'Accounts_OAuth_Gitlab_merge_users'], updateConfig); + const updateConfig = _.debounce(configureGitlabOAuth, 300); + + settings.watchMultiple( + [ + 'Accounts_OAuth_Gitlab', + 'API_Gitlab_URL', + 'Accounts_OAuth_Gitlab_id', + 'Accounts_OAuth_Gitlab_secret', + 'Accounts_OAuth_Gitlab_identity_path', + 'Accounts_OAuth_Gitlab_merge_users', + ], + updateConfig, + ); });