package jetbrains.buildServer.auth.oauth; import com.intellij.openapi.util.text.StringUtil; import jetbrains.buildServer.serverSide.SBuildServer; import jetbrains.buildServer.serverSide.auth.AuthModule; import jetbrains.buildServer.serverSide.auth.LoginConfiguration; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.List; import java.util.Map; import java.util.Optional; public class AuthenticationSchemeProperties { private final ConfigPresets presets; private final SBuildServer sBuildServer; private final LoginConfiguration loginConfiguration; public AuthenticationSchemeProperties(@NotNull final SBuildServer sBuildServer, @NotNull final LoginConfiguration loginConfiguration) { this.sBuildServer = sBuildServer; this.loginConfiguration = loginConfiguration; this.presets = new ConfigPresets(); } @Nullable public String getRootUrl() { return sBuildServer.getRootUrl(); } @Nullable public String getPreset() { return getProperty(ConfigKey.preset); } @Nullable public String getAuthorizeEndpoint() { return getPresetProperty(ConfigKey.authorizeEndpoint); } @Nullable public String getTokenEndpoint() { return getPresetProperty(ConfigKey.tokenEndpoint); } @Nullable public String getUserEndpoint() { return getPresetProperty(ConfigKey.userEndpoint); } @Nullable public String getClientId() { return getProperty(ConfigKey.clientId); } @Nullable public String getClientSecret() { return getProperty(ConfigKey.clientSecret); } @Nullable public String getScope() { return getProperty(ConfigKey.scope); } @Nullable public List<String> getEmailDomains() { return StringUtil.split(getProperty(ConfigKey.emailDomain), " "); } @Nullable public String getOrganizations() { return getProperty(ConfigKey.organizations); } public boolean isHideLoginForm() { return Boolean.valueOf(getProperty(ConfigKey.hideLoginForm)); } public boolean isSchemeConfigured() { return !loginConfiguration.getConfiguredAuthModules(OAuthAuthenticationScheme.class).isEmpty(); } private String getPresetProperty(ConfigKey key) { return presets.getPresetKey(getPreset(), key).orElseGet(() -> getProperty(key)); } private String getProperty(ConfigKey key) { Map<String, String> properties = getSchemeProperties(); return properties == null ? null : properties.get(key.toString()); } @Nullable private Map<String, String> getSchemeProperties() { List<AuthModule<OAuthAuthenticationScheme>> aadAuthModules = loginConfiguration.getConfiguredAuthModules(OAuthAuthenticationScheme.class); return aadAuthModules.isEmpty() ? null : aadAuthModules.get(0).getProperties(); } public boolean isAllowInsecureHttps() { return Optional.ofNullable(getProperty(ConfigKey.allowInsecureHttps)) .map(Boolean::valueOf) .orElse(true); } // used by JSP loginViaOAuth.jsp public boolean isGuestLoginAllowed() { return loginConfiguration.isGuestLoginAllowed(); } }