mirror of https://github.com/portainer/portainer
110 lines
3.4 KiB
JavaScript
110 lines
3.4 KiB
JavaScript
import { HIDE_INTERNAL_AUTH } from '@/portainer/feature-flags/feature-ids';
|
|
|
|
import providers, { getProviderByUrl } from './providers';
|
|
|
|
export default class OAuthSettingsController {
|
|
/* @ngInject */
|
|
constructor(featureService) {
|
|
this.featureService = featureService;
|
|
|
|
this.limitedFeature = HIDE_INTERNAL_AUTH;
|
|
|
|
this.state = {
|
|
provider: 'custom',
|
|
overrideConfiguration: false,
|
|
microsoftTenantID: '',
|
|
};
|
|
|
|
this.$onInit = this.$onInit.bind(this);
|
|
this.onSelectProvider = this.onSelectProvider.bind(this);
|
|
this.onMicrosoftTenantIDChange = this.onMicrosoftTenantIDChange.bind(this);
|
|
this.useDefaultProviderConfiguration = this.useDefaultProviderConfiguration.bind(this);
|
|
this.updateSSO = this.updateSSO.bind(this);
|
|
this.addTeamMembershipMapping = this.addTeamMembershipMapping.bind(this);
|
|
this.removeTeamMembership = this.removeTeamMembership.bind(this);
|
|
}
|
|
|
|
onMicrosoftTenantIDChange() {
|
|
const tenantID = this.state.microsoftTenantID;
|
|
|
|
this.settings.AuthorizationURI = `https://login.microsoftonline.com/${tenantID}/oauth2/authorize`;
|
|
this.settings.AccessTokenURI = `https://login.microsoftonline.com/${tenantID}/oauth2/token`;
|
|
this.settings.ResourceURI = `https://graph.windows.net/${tenantID}/me?api-version=2013-11-08`;
|
|
}
|
|
|
|
useDefaultProviderConfiguration(providerId) {
|
|
const provider = providers[providerId];
|
|
|
|
this.state.overrideConfiguration = false;
|
|
|
|
if (!this.isLimitedToBE || providerId === 'custom') {
|
|
this.settings.AuthorizationURI = provider.authUrl;
|
|
this.settings.AccessTokenURI = provider.accessTokenUrl;
|
|
this.settings.ResourceURI = provider.resourceUrl;
|
|
this.settings.LogoutURI = provider.logoutUrl;
|
|
this.settings.UserIdentifier = provider.userIdentifier;
|
|
this.settings.Scopes = provider.scopes;
|
|
|
|
if (providerId === 'microsoft' && this.state.microsoftTenantID !== '') {
|
|
this.onMicrosoftTenantIDChange();
|
|
}
|
|
} else {
|
|
this.settings.ClientID = '';
|
|
this.settings.ClientSecret = '';
|
|
}
|
|
}
|
|
|
|
onSelectProvider(provider) {
|
|
this.state.provider = provider;
|
|
|
|
this.useDefaultProviderConfiguration(provider);
|
|
}
|
|
|
|
updateSSO() {
|
|
this.settings.HideInternalAuth = this.settings.SSO;
|
|
}
|
|
|
|
addTeamMembershipMapping() {
|
|
this.settings.TeamMemberships.OAuthClaimMappings.push({ ClaimValRegex: '', Team: this.settings.DefaultTeamID });
|
|
}
|
|
|
|
removeTeamMembership(index) {
|
|
this.settings.TeamMemberships.OAuthClaimMappings.splice(index, 1);
|
|
}
|
|
|
|
$onInit() {
|
|
this.isLimitedToBE = this.featureService.isLimitedToBE(this.limitedFeature);
|
|
|
|
if (this.isLimitedToBE) {
|
|
return;
|
|
}
|
|
|
|
if (this.settings.RedirectURI === '') {
|
|
this.settings.RedirectURI = window.location.origin;
|
|
}
|
|
|
|
if (this.settings.AuthorizationURI) {
|
|
const authUrl = this.settings.AuthorizationURI;
|
|
|
|
this.state.provider = getProviderByUrl(authUrl);
|
|
if (this.state.provider === 'microsoft') {
|
|
const tenantID = authUrl.match(/login.microsoftonline.com\/(.*?)\//)[1];
|
|
this.state.microsoftTenantID = tenantID;
|
|
this.onMicrosoftTenantIDChange();
|
|
}
|
|
}
|
|
|
|
if (this.settings.DefaultTeamID === 0) {
|
|
this.settings.DefaultTeamID = null;
|
|
}
|
|
|
|
if (this.settings.TeamMemberships == null) {
|
|
this.settings.TeamMemberships = {};
|
|
}
|
|
|
|
if (this.settings.TeamMemberships.OAuthClaimMappings === null) {
|
|
this.settings.TeamMemberships.OAuthClaimMappings = [];
|
|
}
|
|
}
|
|
}
|