import type { OAuthConfiguration } from '@rocket.chat/core-typings'; import { Meteor } from 'meteor/meteor'; import passport from 'passport'; import _ from 'underscore'; import { addPassportCustomOAuth } from '../oauth/addPassportCustomOAuth'; import { CustomOAuth } from './custom-oauth/custom_oauth_server'; import { settings } from '../../settings'; const config: Partial = { serverURL: 'https://gitlab.com', identityPath: '/api/v4/user', authorizePath: '/oauth/authorize', tokenPath: '/oauth/token', scope: 'read_user', mergeUsers: false, addAutopublishFields: { forLoggedInUser: ['services.gitlab'], forOtherUsers: ['services.gitlab.username'], }, 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; } const completeConfig = { ...config, clientId, clientSecret, serverURL, identityPath, mergeUsers }; if (settings.get('Accounts_OAuth_Use_Modern_Flow')) { addPassportCustomOAuth('gitlab', completeConfig); return; } Gitlab.configure(completeConfig); }; Meteor.startup(() => { 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', 'Accounts_OAuth_Use_Modern_Flow', ], updateConfig, ); });