Skip to content

Commit

Permalink
Add service layer support to manage the user defined local authentica…
Browse files Browse the repository at this point in the history
…tors
  • Loading branch information
Thisara-Welmilla committed Dec 2, 2024
1 parent 20e9f48 commit 676e93f
Show file tree
Hide file tree
Showing 10 changed files with 198 additions and 127 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -91,6 +91,8 @@
org.apache.commons.logging; version="${import.package.version.commons.logging}",
org.apache.commons.lang; version="${commons-lang.wso2.osgi.version.range}",
org.apache.commons.collections; version="${commons-collections.wso2.osgi.version.range}",
org.wso2.carbon.database.utils.jdbc; version="${org.wso2.carbon.database.utils.version.range}",
org.wso2.carbon.database.utils.jdbc.exceptions; version="${org.wso2.carbon.database.utils.version.range}",

org.apache.axis2.*; version="${axis2.osgi.version.range}",

Expand All @@ -107,6 +109,8 @@
org.wso2.carbon.identity.core.cache; version="${carbon.identity.package.import.version.range}",
org.wso2.carbon.identity.central.log.mgt.*; version="${carbon.identity.package.import.version.range}",
org.wso2.carbon.identity.action.management.*; version="${carbon.identity.package.import.version.range}",
org.osgi.framework; version="${osgi.framework.imp.pkg.version.range}",
org.osgi.service.component; version="${osgi.service.component.imp.pkg.version.range}",

com.fasterxml.jackson.annotation; version="${com.fasterxml.jackson.annotation.version.range}"
</Import-Package>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,23 +20,23 @@

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.wso2.carbon.identity.application.common.constant.AuthenticatorMgtErrorConstants.ErrorMessages;
import org.wso2.carbon.identity.application.common.dao.impl.AuthenticatorManagementDAOImpl;
import org.wso2.carbon.identity.application.common.dao.impl.CacheBackedAuthenticatorMgtDAO;
import org.wso2.carbon.identity.application.common.exception.AuthenticatorMgtClientException;
import org.wso2.carbon.identity.application.common.exception.AuthenticatorMgtException;
import org.wso2.carbon.identity.application.common.model.FederatedAuthenticatorConfig;
import org.wso2.carbon.identity.application.common.model.LocalAuthenticatorConfig;
import org.wso2.carbon.identity.application.common.model.RequestPathAuthenticatorConfig;
import org.wso2.carbon.identity.application.common.model.UserDefinedLocalAuthenticatorConfig;
import org.wso2.carbon.identity.application.common.util.AuthenticatorMgtExceptionBuilder.AuthenticatorMgtError;
import org.wso2.carbon.identity.application.common.util.UserDefinedLocalAuthenticatorValidator;
import org.wso2.carbon.identity.base.AuthenticatorPropertyConstants.DefinedByType;
import org.wso2.carbon.identity.core.util.IdentityTenantUtil;

import java.util.ArrayList;
import java.util.List;

import static org.wso2.carbon.identity.application.common.constant.AuthenticatorMgtErrorConstants.ErrorMessages.ERROR_CODE_INVALID_DEFINED_BY_AUTH_PROVIDED;
import static org.wso2.carbon.identity.application.common.util.AuthenticatorMgtExceptionBuilder.buildClientException;
import static org.wso2.carbon.identity.application.common.util.AuthenticatorMgtExceptionBuilder.buildRuntimeServerException;

/**
* Application authenticator service.
Expand Down Expand Up @@ -150,8 +150,8 @@ public void addLocalAuthenticator(LocalAuthenticatorConfig authenticator) {

if (authenticator != null) {
if (authenticator.getDefinedByType() != DefinedByType.SYSTEM) {
throw new AuthenticatorMgtServerRuntimeException(
ERROR_CODE_INVALID_DEFINED_BY_AUTH_PROVIDED.getMessage());
throw buildRuntimeServerException(
AuthenticatorMgtError.ERROR_CODE_INVALID_DEFINED_BY_AUTH_PROVIDED, null);
}
localAuthenticators.add(authenticator);
}
Expand Down Expand Up @@ -201,9 +201,8 @@ public UserDefinedLocalAuthenticatorConfig addUserDefinedLocalAuthenticator(

LocalAuthenticatorConfig config = getLocalAuthenticatorByName(authenticatorConfig.getName(), tenantDomain);
if (config != null) {
ErrorMessages error = ErrorMessages.ERROR_AUTHENTICATOR_ALREADY_EXIST;
throw new AuthenticatorMgtClientException(error.getCode(), error.getMessage(),
String.format(error.getDescription(), authenticatorConfig.getName()));
throw buildClientException(AuthenticatorMgtError.ERROR_AUTHENTICATOR_ALREADY_EXIST,
authenticatorConfig.getName());
}
authenticatorValidator.validateAuthenticatorName(authenticatorConfig.getName());
authenticatorValidator.validateForBlank("Display name", authenticatorConfig.getDisplayName());
Expand Down Expand Up @@ -281,9 +280,7 @@ private UserDefinedLocalAuthenticatorConfig resolveExistingAuthenticator(String
getUserDefinedLocalAuthenticator(authenticatorName, IdentityTenantUtil.getTenantId(tenantDomain));

if (existingAuthenticatorConfig == null) {
ErrorMessages error = ErrorMessages.ERROR_NOT_FOUND_AUTHENTICATOR;
throw new AuthenticatorMgtClientException(error.getCode(), error.getMessage(),
String.format(error.getDescription(), authenticatorName));
throw buildClientException(AuthenticatorMgtError.ERROR_NOT_FOUND_AUTHENTICATOR, authenticatorName);
}

return existingAuthenticatorConfig;
Expand Down

This file was deleted.

Original file line number Diff line number Diff line change
Expand Up @@ -23,19 +23,14 @@
*/
public class AuthenticatorMgtServerException extends AuthenticatorMgtException {

public AuthenticatorMgtServerException(String errorCode, String message, Throwable cause) {
public AuthenticatorMgtServerException(String errorCode, String message, String description) {

super(message, errorCode, cause);
super(message, errorCode, description);
}

public AuthenticatorMgtServerException(String errorCode, String message, String description,
Throwable cause) {

super(message, description, errorCode, cause);
}

public AuthenticatorMgtServerException(String message) {

super(message);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ public class AuthenticatorMgtServerRuntimeException extends RuntimeException {
private final String errorCode;
private final String description;

public AuthenticatorMgtServerRuntimeException(String message, String description, String errorCode) {
public AuthenticatorMgtServerRuntimeException(String errorCode, String message, String description) {

super(message);
this.errorCode = errorCode;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
/*
* 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.util;

import org.apache.commons.lang.ArrayUtils;
import org.wso2.carbon.identity.application.common.exception.AuthenticatorMgtClientException;
import org.wso2.carbon.identity.application.common.exception.AuthenticatorMgtServerException;
import org.wso2.carbon.identity.application.common.exception.AuthenticatorMgtServerRuntimeException;

/**
* Utility class for building authenticator management exceptions.
*/
public class AuthenticatorMgtExceptionBuilder {

private AuthenticatorMgtExceptionBuilder() {

}

public static AuthenticatorMgtClientException buildClientException(AuthenticatorMgtError error, String... data) {

String description = error.getDescription();
if (ArrayUtils.isNotEmpty(data)) {
description = String.format(description, data);
}

return new AuthenticatorMgtClientException(error.getCode(), error.getMessage(), description);
}

public static AuthenticatorMgtServerException buildServerException(AuthenticatorMgtError error, String... data) {

String description = error.getDescription();
if (ArrayUtils.isNotEmpty(data)) {
description = String.format(description, data);
}

return new AuthenticatorMgtServerException(error.getCode(), error.getMessage(), description);
}

public static AuthenticatorMgtServerException buildServerException(AuthenticatorMgtError error, Throwable e,
String... data) {

String description = error.getDescription();
if (ArrayUtils.isNotEmpty(data)) {
description = String.format(description, data);
}

return new AuthenticatorMgtServerException(error.getCode(), error.getMessage(), description, e);
}

public static AuthenticatorMgtServerRuntimeException buildRuntimeServerException(AuthenticatorMgtError error,
Throwable e, String... data) {

String description = error.getDescription();
if (ArrayUtils.isNotEmpty(data)) {
description = String.format(description, data);
}

return new AuthenticatorMgtServerRuntimeException(error.getCode(), error.getMessage(), description);
}

/**
* Enum class to represent the rule metadata errors.
*/
public enum AuthenticatorMgtError {

// Client errors.
ERROR_NOT_FOUND_AUTHENTICATOR("60001", "No Authenticator found.",
"No Authenticator found by given authenticator name: %s."),
ERROR_OP_ON_SYSTEM_AUTHENTICATOR("60002", "No operations allowed on system authenticators.",
"Do not allow to perform any operation on system defined authenticator: %s."),
ERROR_AUTHENTICATOR_ALREADY_EXIST("60003", "An authenticator already exists.",
"As authenticator already exists for the given name: %s."),
ERROR_INVALID_AUTHENTICATOR_NAME("60004", "Authenticator name is invalid.",
"The provided authenticator name %s is not in the expected format %s."),
ERROR_BLANK_FIELD_VALUE("60004", "Invalid empty or blank value.",
"Value for %s should not be empty or blank."),

// Server errors.
ERROR_WHILE_ADDING_AUTHENTICATOR("65001", "Error while adding authenticator.",
"Error while persisting authenticator to the system."),
ERROR_WHILE_UPDATING_AUTHENTICATOR("65002", "Error while updating authenticator.",
"Error while updating authenticator in the system."),
ERROR_WHILE_RETRIEVING_AUTHENTICATOR_BY_NAME("65003", "Error while retrieving authenticator.",
"Error while retrieving authenticator in the system."),
ERROR_WHILE_DELETING_AUTHENTICATOR("65004", "Error while deleting authenticator.",
"Error while deleting authenticator in the system."),
ERROR_CODE_ENDPOINT_CONFIG_MGT("65005", "Error while managing endpoint configurations.",
"Error while managing endpoint configurations for the user defined local authenticator %s."),
ERROR_CODE_INVALID_DEFINED_BY_AUTH_PROVIDED("65006", "Error while adding local authenticator.",
"Only system defined authenticators are allowed to add via this method."),
ERROR_CODE_NO_AUTHENTICATOR_FOUND("65007", "No authenticator found.",
"No authenticator found by given authenticator name: %s."),
ERROR_CODE_NO_ACTION_ID_FOUND("65008", "No action id found.",
"No action id found for the authenticator: %s.");

private final String code;
private final String message;
private final String description;

AuthenticatorMgtError(String code, String message, String description) {

this.code = code;
this.message = message;
this.description = description;
}

public String getCode() {

return code;
}

public String getMessage() {

return message;
}

public String getDescription() {

return description;
}
}
}
Loading

0 comments on commit 676e93f

Please sign in to comment.