Skip to content

Commit

Permalink
Add new authenticator configs for user defined auth extensions.
Browse files Browse the repository at this point in the history
  • Loading branch information
Thisara-Welmilla committed Nov 6, 2024
1 parent 03b478e commit 020a81a
Show file tree
Hide file tree
Showing 8 changed files with 396 additions and 0 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,10 @@
<groupId>org.wso2.carbon.identity.framework</groupId>
<artifactId>org.wso2.carbon.identity.central.log.mgt</artifactId>
</dependency>
<dependency>
<groupId>org.wso2.carbon.identity.framework</groupId>
<artifactId>org.wso2.carbon.identity.action.management</artifactId>
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,141 @@
/*
* Copyright (c) 2024, WSO2 LLC. (http://www.wso2.com).
*
* WSO2 LLC. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package org.wso2.carbon.identity.application.common.model;

import org.wso2.carbon.identity.action.management.model.Authentication;
import org.wso2.carbon.identity.action.management.model.Authentication.Property;
import org.wso2.carbon.identity.action.management.model.EndpointConfig;

import java.util.HashMap;
import java.util.NoSuchElementException;

/**
* The authenticator endpoint configuration model.
*/
public class AuthenticatorEndpointConfiguration {

private String uri;
private String authenticationType;
private HashMap<String, String> authenticationProperties;

public AuthenticatorEndpointConfiguration() {
}

public AuthenticatorEndpointConfiguration(AuthenticatorEndpointConfigurationBuilder builder) {

this.uri = builder.uri;
this.authenticationProperties = builder.authenticationProperties;
this.authenticationType = builder.authenticationType;
}

public String getUri() {

return uri;
}

public HashMap<String, String> getAuthenticationProperties() {

return authenticationProperties;
}

public String getAuthenticationType() {

return authenticationType;
}

/**
* AuthenticatorEndpointConfiguration builder.
*/
public static class AuthenticatorEndpointConfigurationBuilder {

private String uri;
private String authenticationType;
private HashMap<String, String> authenticationProperties;

public AuthenticatorEndpointConfigurationBuilder() {
}

public AuthenticatorEndpointConfigurationBuilder uri(String uri) {

this.uri = uri;
return this;
}

public AuthenticatorEndpointConfigurationBuilder authenticationProperties(
HashMap<String, String> authentication) {

this.authenticationProperties = authentication;
return this;
}

public AuthenticatorEndpointConfigurationBuilder authenticationType(String authenticationType) {

this.authenticationType = authenticationType;
return this;
}

public AuthenticatorEndpointConfiguration build() {

try {
EndpointConfig.EndpointConfigBuilder actionEndpointConfigBuilder =
new EndpointConfig.EndpointConfigBuilder();
actionEndpointConfigBuilder.uri(this.uri);
actionEndpointConfigBuilder.authentication(buildAuthentication(
this.authenticationType, this.authenticationProperties));
actionEndpointConfigBuilder.build();
} catch (Exception e) {
throw new IllegalArgumentException("Endpoint configuration of the authenticator is not in expected " +
"format.", e);
}
return new AuthenticatorEndpointConfiguration(this);
}

private Authentication buildAuthentication(String authenticationType,
HashMap<String, String> properties) throws NoSuchElementException {

switch (Authentication.Type.valueOf(authenticationType)) {
case BASIC:
return new Authentication.BasicAuthBuilder(
getProperty(properties, Property.USERNAME.getName()),
getProperty(properties, Property.PASSWORD.getName())).build();
case BEARER:
return new Authentication.BearerAuthBuilder(
getProperty(properties, Property.ACCESS_TOKEN.getName())).build();
case API_KEY:
return new Authentication.APIKeyAuthBuilder(
getProperty(properties, Property.HEADER.getName()),
getProperty(properties, Property.VALUE.getName())).build();
case NONE:
return new Authentication.NoneAuthBuilder().build();
default:
throw new IllegalArgumentException();
}
}

private String getProperty(HashMap<String, String> actionEndpointProperties, String propertyName) {

if (actionEndpointProperties.containsKey(propertyName)) {
return actionEndpointProperties.get(propertyName);
} else {
throw new NoSuchElementException("Property " + propertyName +
" is not found in the endpoint configuration.");
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ public class FederatedAuthenticatorConfig implements Serializable {
@XmlElement(name = "DefinedBy")
protected DefinedByType definedByType;

public FederatedAuthenticatorConfig() {

definedByType = DefinedByType.SYSTEM;
}

public static FederatedAuthenticatorConfig build(OMElement federatedAuthenticatorConfigOM) {

if (federatedAuthenticatorConfigOM == null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,11 @@ public class LocalAuthenticatorConfig implements Serializable {
@XmlElement(name = "DefinedBy")
protected DefinedByType definedByType;

public LocalAuthenticatorConfig() {

definedByType = DefinedByType.SYSTEM;
}

/*
* <LocalAuthenticatorConfig> <Name></Name> <DisplayName></DisplayName> <IsEnabled></IsEnabled>
* <Properties></Properties> </LocalAuthenticatorConfig>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
/*
* Copyright (c) 2024, WSO2 LLC. (http://www.wso2.com).
*
* WSO2 LLC. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package org.wso2.carbon.identity.application.common.model;

import org.wso2.carbon.identity.base.AuthenticatorPropertyConstants.DefinedByType;

/**
* The user defined federated authenticator configuration model.
*/
public class UserDefinedFederatedAuthenticatorConfig extends FederatedAuthenticatorConfig {

private static final String TAG_CUSTOM = "CUSTOM";

protected AuthenticatorEndpointConfiguration endpointConfig;

public UserDefinedFederatedAuthenticatorConfig() {

definedByType = DefinedByType.USER;
setTags(new String[]{TAG_CUSTOM});
}

/**
* Get the endpoint config of the User defined federated authenticator config.
*
* @return DefinedByType
*/
public AuthenticatorEndpointConfiguration getEndpointConfig() {

return endpointConfig;
}

/**
* Set the defined by type of the User defined federated authenticator config.
*
* @param endpointConfig The endpoint config of the User defined federated authenticator config.
*/
public void setEndpointConfig(AuthenticatorEndpointConfiguration endpointConfig) {

this.endpointConfig = endpointConfig;
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
/*
* Copyright (c) 2024, WSO2 LLC. (http://www.wso2.com).
*
* WSO2 LLC. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/

package org.wso2.carbon.identity.application.common.model;

import org.wso2.carbon.identity.base.AuthenticatorPropertyConstants.AuthenticationType;
import org.wso2.carbon.identity.base.AuthenticatorPropertyConstants.DefinedByType;

/**
* The user defined local authenticator configuration model.
*/
public class UserDefinedLocalAuthenticatorConfig extends LocalAuthenticatorConfig {

private static final String TAG_2FA = "2FA";
private static final String TAG_CUSTOM = "CUSTOM";

protected AuthenticatorEndpointConfiguration endpointConfig;

public UserDefinedLocalAuthenticatorConfig(AuthenticationType type) {

definedByType = DefinedByType.USER;
if (AuthenticationType.VERIFICATION == type) {
setTags(new String[]{TAG_CUSTOM, TAG_2FA});
} else {
setTags(new String[]{TAG_CUSTOM});
}
}

/**
* Get the endpoint config of the User defined local authenticator config.
*
* @return DefinedByType
*/
public AuthenticatorEndpointConfiguration getEndpointConfig() {

return endpointConfig;
}

/**
* Set the defined by type of the User defined local authenticator config.
*
* @param endpointConfig The endpoint config of the User defined local authenticator config.
*/
public void setEndpointConfig(AuthenticatorEndpointConfiguration endpointConfig) {

this.endpointConfig = endpointConfig;
}
}
Loading

0 comments on commit 020a81a

Please sign in to comment.