diff --git a/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.common/pom.xml b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.common/pom.xml
new file mode 100644
index 0000000000..c5826febbc
--- /dev/null
+++ b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.common/pom.xml
@@ -0,0 +1,57 @@
+
+
+
+ 4.0.0
+
+
+ org.wso2.carbon.identity.server.api
+ org.wso2.carbon.identity.api.server.organization.configs
+ 1.2.84-SNAPSHOT
+
+
+ org.wso2.carbon.identity.api.server.organization.configs.common
+ jar
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+
+
+ 1.8
+
+
+
+
+
+
+
+ org.wso2.carbon.identity.organization.management
+ org.wso2.carbon.identity.organization.config.service
+ provided
+
+
+ org.springframework
+ spring-web
+ provided
+
+
+
+
diff --git a/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.common/src/main/java/org/wso2/carbon/identity/api/server/organization/configs/common/OrganizationConfigsServiceHolder.java b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.common/src/main/java/org/wso2/carbon/identity/api/server/organization/configs/common/OrganizationConfigsServiceHolder.java
new file mode 100644
index 0000000000..dc1005a888
--- /dev/null
+++ b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.common/src/main/java/org/wso2/carbon/identity/api/server/organization/configs/common/OrganizationConfigsServiceHolder.java
@@ -0,0 +1,49 @@
+/*
+ * Copyright (c) 2023, 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.api.server.organization.configs.common;
+
+import org.wso2.carbon.identity.organization.config.service.OrganizationConfigManager;
+
+/**
+ * Service holder class for organization configuration management.
+ */
+public class OrganizationConfigsServiceHolder {
+
+ private static OrganizationConfigManager organizationConfigManager;
+
+ /**
+ * Get OrganizationConfigManager OSGi service.
+ *
+ * @return OrganizationConfigManager.
+ */
+ public static OrganizationConfigManager getOrganizationConfigManager() {
+
+ return organizationConfigManager;
+ }
+
+ /**
+ * Set OrganizationConfigManager OSGi service.
+ *
+ * @param organizationConfigManager OrganizationConfigManager.
+ */
+ public static void setOrganizationConfigManager(OrganizationConfigManager organizationConfigManager) {
+
+ OrganizationConfigsServiceHolder.organizationConfigManager = organizationConfigManager;
+ }
+}
diff --git a/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.common/src/main/java/org/wso2/carbon/identity/api/server/organization/configs/common/factory/OrganizationConfigManagerOSGIServiceFactory.java b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.common/src/main/java/org/wso2/carbon/identity/api/server/organization/configs/common/factory/OrganizationConfigManagerOSGIServiceFactory.java
new file mode 100644
index 0000000000..145baeb38d
--- /dev/null
+++ b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.common/src/main/java/org/wso2/carbon/identity/api/server/organization/configs/common/factory/OrganizationConfigManagerOSGIServiceFactory.java
@@ -0,0 +1,53 @@
+/*
+ * Copyright (c) 2023, 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.api.server.organization.configs.common.factory;
+
+import org.springframework.beans.factory.config.AbstractFactoryBean;
+import org.wso2.carbon.context.PrivilegedCarbonContext;
+import org.wso2.carbon.identity.organization.config.service.OrganizationConfigManager;
+
+/**
+ * Factory Beans serves as a factory for creating other beans within the IOC container. This factory bean is used to
+ * instantiate the OrganizationConfigManager type of object inside the container.
+ */
+public class OrganizationConfigManagerOSGIServiceFactory extends AbstractFactoryBean {
+
+ private OrganizationConfigManager organizationConfigManager;
+
+ @Override
+ public Class> getObjectType() {
+
+ return Object.class;
+ }
+
+ @Override
+ protected OrganizationConfigManager createInstance() throws Exception {
+
+ if (this.organizationConfigManager == null) {
+ OrganizationConfigManager taskOperationService = (OrganizationConfigManager) PrivilegedCarbonContext.
+ getThreadLocalCarbonContext().getOSGiService(OrganizationConfigManager.class, null);
+ if (taskOperationService != null) {
+ this.organizationConfigManager = taskOperationService;
+ } else {
+ throw new Exception("Unable to retrieve OrganizationConfigManager service.");
+ }
+ }
+ return this.organizationConfigManager;
+ }
+}
diff --git a/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/pom.xml b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/pom.xml
new file mode 100644
index 0000000000..aa32985ba9
--- /dev/null
+++ b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/pom.xml
@@ -0,0 +1,170 @@
+
+
+
+ 4.0.0
+
+
+ org.wso2.carbon.identity.server.api
+ org.wso2.carbon.identity.api.server.organization.configs
+ 1.2.84-SNAPSHOT
+
+
+ org.wso2.carbon.identity.api.server.organization.configs.v1
+ jar
+
+
+
+
+
+ org.codehaus.mojo
+ build-helper-maven-plugin
+ 1.8
+
+
+ add-source
+ generate-sources
+
+ add-source
+
+
+
+
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven.compiler.plugin.version}
+
+
+ 1.8
+
+
+
+
+
+
+
+ org.apache.cxf
+ cxf-rt-frontend-jaxrs
+ provided
+
+
+ org.apache.cxf
+ cxf-rt-rs-service-description
+ provided
+
+
+ org.springframework
+ spring-web
+ provided
+
+
+ javax.ws.rs
+ javax.ws.rs-api
+ provided
+
+
+ io.swagger
+ swagger-jaxrs
+
+
+ com.fasterxml.jackson.core
+ jackson-databind
+
+
+ com.fasterxml.jackson.core
+ jackson-annotations
+
+
+ com.fasterxml.jackson.core
+ jackson-core
+
+
+ com.fasterxml.jackson.dataformat
+ jackson-dataformat-yaml
+
+
+ javax.ws.rs
+ jsr311-api
+
+
+ com.google.guava
+ guava
+
+
+
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-json-provider
+ provided
+
+
+ org.wso2.carbon.identity.server.api
+ org.wso2.carbon.identity.api.server.common
+ provided
+
+
+ org.wso2.carbon.identity.server.api
+ org.wso2.carbon.identity.api.server.organization.configs.common
+ provided
+
+
+ org.wso2.carbon.identity.organization.management
+ org.wso2.carbon.identity.organization.config.service
+ provided
+
+
+
+
diff --git a/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/OrganizationConfigsApi.java b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/OrganizationConfigsApi.java
new file mode 100644
index 0000000000..ae265d79d5
--- /dev/null
+++ b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/OrganizationConfigsApi.java
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2023, 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.api.server.organization.configs.v1;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.apache.cxf.jaxrs.ext.multipart.Attachment;
+import org.apache.cxf.jaxrs.ext.multipart.Multipart;
+import java.io.InputStream;
+import java.util.List;
+
+import org.wso2.carbon.identity.api.server.organization.configs.v1.model.Config;
+import org.wso2.carbon.identity.api.server.organization.configs.v1.model.Error;
+import org.wso2.carbon.identity.api.server.organization.configs.v1.OrganizationConfigsApiService;
+
+import javax.validation.Valid;
+import javax.ws.rs.*;
+import javax.ws.rs.core.Response;
+import io.swagger.annotations.*;
+
+import javax.validation.constraints.*;
+
+@Path("/organization-configs")
+@Api(description = "The organization-configs API")
+
+public class OrganizationConfigsApi {
+
+ @Autowired
+ private OrganizationConfigsApiService delegate;
+
+ @Valid
+ @POST
+ @Path("/discovery")
+ @Consumes({ "application/json" })
+ @Produces({ "application/json" })
+ @ApiOperation(value = "Add organization discovery configuration.", notes = "This API provides the capability to add discovery configuration for the primary organization.
Permission required:
* /permission/admin/manage/identity/configmgt/add
Scope required:
* internal_config_mgt_add ", response = Config.class, authorizations = {
+ @Authorization(value = "BasicAuth"),
+ @Authorization(value = "OAuth2", scopes = {
+
+ })
+ }, tags={ "Discovery", })
+ @ApiResponses(value = {
+ @ApiResponse(code = 201, message = "Successful Response", response = Config.class),
+ @ApiResponse(code = 400, message = "Invalid input in the request.", response = Error.class),
+ @ApiResponse(code = 401, message = "Authentication information is missing or invalid.", response = Void.class),
+ @ApiResponse(code = 403, message = "Access forbidden.", response = Void.class),
+ @ApiResponse(code = 409, message = "Resource already exists.", response = Error.class),
+ @ApiResponse(code = 500, message = "Internal server error.", response = Error.class)
+ })
+ public Response createDiscoveryConfig(@ApiParam(value = "" ) @Valid Config config) {
+
+ return delegate.createDiscoveryConfig(config );
+ }
+
+ @Valid
+ @DELETE
+ @Path("/discovery")
+
+ @Produces({ "application/json" })
+ @ApiOperation(value = "Delete organization discovery configuration.", notes = "This API provides the capability to delete discovery configuration of the primary organization.
Permission required:
* /permission/admin/manage/identity/configmgt/delete
Scope required:
* internal_config_mgt_delete ", response = Void.class, authorizations = {
+ @Authorization(value = "BasicAuth"),
+ @Authorization(value = "OAuth2", scopes = {
+
+ })
+ }, tags={ "Discovery", })
+ @ApiResponses(value = {
+ @ApiResponse(code = 204, message = "No content.", response = Void.class),
+ @ApiResponse(code = 401, message = "Authentication information is missing or invalid.", response = Void.class),
+ @ApiResponse(code = 403, message = "Access forbidden.", response = Void.class),
+ @ApiResponse(code = 500, message = "Internal server error.", response = Error.class)
+ })
+ public Response deleteDiscoveryConfig() {
+
+ return delegate.deleteDiscoveryConfig();
+ }
+
+ @Valid
+ @GET
+ @Path("/discovery")
+
+ @Produces({ "application/json" })
+ @ApiOperation(value = "Get organization discovery configuration.", notes = "This API facilitates the retrieval of discovery configuration of the primary organization.
Permission required:
* /permission/admin/manage/identity/configmgt/view
Scope required:
* internal_config_mgt_view ", response = Config.class, authorizations = {
+ @Authorization(value = "BasicAuth"),
+ @Authorization(value = "OAuth2", scopes = {
+
+ })
+ }, tags={ "Discovery" })
+ @ApiResponses(value = {
+ @ApiResponse(code = 200, message = "Successful response.", response = Config.class),
+ @ApiResponse(code = 401, message = "Authentication information is missing or invalid.", response = Void.class),
+ @ApiResponse(code = 403, message = "Access forbidden.", response = Void.class),
+ @ApiResponse(code = 500, message = "Internal server error.", response = Error.class)
+ })
+ public Response getDiscoveryConfig() {
+
+ return delegate.getDiscoveryConfig();
+ }
+
+}
diff --git a/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/OrganizationConfigsApiService.java b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/OrganizationConfigsApiService.java
new file mode 100644
index 0000000000..50ebed2842
--- /dev/null
+++ b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/OrganizationConfigsApiService.java
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2023, 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.api.server.organization.configs.v1;
+
+import org.wso2.carbon.identity.api.server.organization.configs.v1.*;
+import org.wso2.carbon.identity.api.server.organization.configs.v1.model.*;
+import org.apache.cxf.jaxrs.ext.multipart.Attachment;
+import org.apache.cxf.jaxrs.ext.multipart.Multipart;
+import java.io.InputStream;
+import java.util.List;
+import org.wso2.carbon.identity.api.server.organization.configs.v1.model.Config;
+import org.wso2.carbon.identity.api.server.organization.configs.v1.model.Error;
+import javax.ws.rs.core.Response;
+
+
+public interface OrganizationConfigsApiService {
+
+ public Response createDiscoveryConfig(Config config);
+
+ public Response deleteDiscoveryConfig();
+
+ public Response getDiscoveryConfig();
+}
diff --git a/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/factories/OrganizationConfigsApiServiceFactory.java b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/factories/OrganizationConfigsApiServiceFactory.java
new file mode 100644
index 0000000000..ca10ec7642
--- /dev/null
+++ b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/factories/OrganizationConfigsApiServiceFactory.java
@@ -0,0 +1,32 @@
+/*
+ * Copyright (c) 2023, 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.api.server.organization.configs.v1.factories;
+
+import org.wso2.carbon.identity.api.server.organization.configs.v1.OrganizationConfigsApiService;
+import org.wso2.carbon.identity.api.server.organization.configs.v1.impl.OrganizationConfigsApiServiceImpl;
+
+public class OrganizationConfigsApiServiceFactory {
+
+ private final static OrganizationConfigsApiService service = new OrganizationConfigsApiServiceImpl();
+
+ public static OrganizationConfigsApiService getOrganizationConfigsApi()
+ {
+ return service;
+ }
+}
diff --git a/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/model/Config.java b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/model/Config.java
new file mode 100644
index 0000000000..c8aefe68fe
--- /dev/null
+++ b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/model/Config.java
@@ -0,0 +1,110 @@
+/*
+ * Copyright (c) 2023, 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.api.server.organization.configs.v1.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import java.util.ArrayList;
+import java.util.List;
+import org.wso2.carbon.identity.api.server.organization.configs.v1.model.Properties;
+import javax.validation.constraints.*;
+
+
+import io.swagger.annotations.*;
+import java.util.Objects;
+import javax.validation.Valid;
+import javax.xml.bind.annotation.*;
+
+public class Config {
+
+ private List properties = null;
+
+
+ /**
+ **/
+ public Config properties(List properties) {
+
+ this.properties = properties;
+ return this;
+ }
+
+ @ApiModelProperty(value = "")
+ @JsonProperty("properties")
+ @Valid
+ public List getProperties() {
+ return properties;
+ }
+ public void setProperties(List properties) {
+ this.properties = properties;
+ }
+
+ public Config addPropertiesItem(Properties propertiesItem) {
+ if (this.properties == null) {
+ this.properties = new ArrayList<>();
+ }
+ this.properties.add(propertiesItem);
+ return this;
+ }
+
+
+
+ @Override
+ public boolean equals(java.lang.Object o) {
+
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ Config config = (Config) o;
+ return Objects.equals(this.properties, config.properties);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(properties);
+ }
+
+ @Override
+ public String toString() {
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("class Config {\n");
+
+ sb.append(" properties: ").append(toIndentedString(properties)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(java.lang.Object o) {
+
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n");
+ }
+}
+
diff --git a/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/model/Error.java b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/model/Error.java
new file mode 100644
index 0000000000..97b40a27ce
--- /dev/null
+++ b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/model/Error.java
@@ -0,0 +1,169 @@
+/*
+ * Copyright (c) 2023, 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.api.server.organization.configs.v1.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import javax.validation.constraints.*;
+
+
+import io.swagger.annotations.*;
+import java.util.Objects;
+import javax.validation.Valid;
+import javax.xml.bind.annotation.*;
+
+public class Error {
+
+ private String code;
+ private String message;
+ private String description;
+ private String traceId;
+
+ /**
+ * An error code.
+ **/
+ public Error code(String code) {
+
+ this.code = code;
+ return this;
+ }
+
+ @ApiModelProperty(example = "OCM-00000", required = true, value = "An error code.")
+ @JsonProperty("code")
+ @Valid
+ @NotNull(message = "Property code cannot be null.")
+
+ public String getCode() {
+ return code;
+ }
+ public void setCode(String code) {
+ this.code = code;
+ }
+
+ /**
+ * An error message.
+ **/
+ public Error message(String message) {
+
+ this.message = message;
+ return this;
+ }
+
+ @ApiModelProperty(example = "Some Error Message", required = true, value = "An error message.")
+ @JsonProperty("message")
+ @Valid
+ @NotNull(message = "Property message cannot be null.")
+
+ public String getMessage() {
+ return message;
+ }
+ public void setMessage(String message) {
+ this.message = message;
+ }
+
+ /**
+ * An error description.
+ **/
+ public Error description(String description) {
+
+ this.description = description;
+ return this;
+ }
+
+ @ApiModelProperty(example = "Some Error Description", value = "An error description.")
+ @JsonProperty("description")
+ @Valid
+ public String getDescription() {
+ return description;
+ }
+ public void setDescription(String description) {
+ this.description = description;
+ }
+
+ /**
+ * An error trace identifier.
+ **/
+ public Error traceId(String traceId) {
+
+ this.traceId = traceId;
+ return this;
+ }
+
+ @ApiModelProperty(example = "e0fbcfeb-3617-43c4-8dd0-7b7d38e13047", value = "An error trace identifier.")
+ @JsonProperty("traceId")
+ @Valid
+ public String getTraceId() {
+ return traceId;
+ }
+ public void setTraceId(String traceId) {
+ this.traceId = traceId;
+ }
+
+
+
+ @Override
+ public boolean equals(java.lang.Object o) {
+
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ Error error = (Error) o;
+ return Objects.equals(this.code, error.code) &&
+ Objects.equals(this.message, error.message) &&
+ Objects.equals(this.description, error.description) &&
+ Objects.equals(this.traceId, error.traceId);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(code, message, description, traceId);
+ }
+
+ @Override
+ public String toString() {
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("class Error {\n");
+
+ sb.append(" code: ").append(toIndentedString(code)).append("\n");
+ sb.append(" message: ").append(toIndentedString(message)).append("\n");
+ sb.append(" description: ").append(toIndentedString(description)).append("\n");
+ sb.append(" traceId: ").append(toIndentedString(traceId)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(java.lang.Object o) {
+
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n");
+ }
+}
+
diff --git a/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/model/Properties.java b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/model/Properties.java
new file mode 100644
index 0000000000..3e01c3f9b9
--- /dev/null
+++ b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/gen/java/org/wso2/carbon/identity/api/server/organization/configs/v1/model/Properties.java
@@ -0,0 +1,123 @@
+/*
+ * Copyright (c) 2023, 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.api.server.organization.configs.v1.model;
+
+import com.fasterxml.jackson.annotation.JsonProperty;
+import com.fasterxml.jackson.annotation.JsonCreator;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import javax.validation.constraints.*;
+
+
+import io.swagger.annotations.*;
+import java.util.Objects;
+import javax.validation.Valid;
+import javax.xml.bind.annotation.*;
+
+public class Properties {
+
+ private String key;
+ private String value;
+
+ /**
+ **/
+ public Properties key(String key) {
+
+ this.key = key;
+ return this;
+ }
+
+ @ApiModelProperty(example = "emailDomain.enable", required = true, value = "")
+ @JsonProperty("key")
+ @Valid
+ @NotNull(message = "Property key cannot be null.")
+
+ public String getKey() {
+ return key;
+ }
+ public void setKey(String key) {
+ this.key = key;
+ }
+
+ /**
+ **/
+ public Properties value(String value) {
+
+ this.value = value;
+ return this;
+ }
+
+ @ApiModelProperty(example = "true", required = true, value = "")
+ @JsonProperty("value")
+ @Valid
+ @NotNull(message = "Property value cannot be null.")
+
+ public String getValue() {
+ return value;
+ }
+ public void setValue(String value) {
+ this.value = value;
+ }
+
+
+
+ @Override
+ public boolean equals(java.lang.Object o) {
+
+ if (this == o) {
+ return true;
+ }
+ if (o == null || getClass() != o.getClass()) {
+ return false;
+ }
+ Properties properties = (Properties) o;
+ return Objects.equals(this.key, properties.key) &&
+ Objects.equals(this.value, properties.value);
+ }
+
+ @Override
+ public int hashCode() {
+ return Objects.hash(key, value);
+ }
+
+ @Override
+ public String toString() {
+
+ StringBuilder sb = new StringBuilder();
+ sb.append("class Properties {\n");
+
+ sb.append(" key: ").append(toIndentedString(key)).append("\n");
+ sb.append(" value: ").append(toIndentedString(value)).append("\n");
+ sb.append("}");
+ return sb.toString();
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(java.lang.Object o) {
+
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\n", "\n");
+ }
+}
+
diff --git a/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/main/java/org/wso2/carbon/identity/api/server/organization/configs/v1/core/OrganizationConfigsService.java b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/main/java/org/wso2/carbon/identity/api/server/organization/configs/v1/core/OrganizationConfigsService.java
new file mode 100644
index 0000000000..a9d1d68f19
--- /dev/null
+++ b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/main/java/org/wso2/carbon/identity/api/server/organization/configs/v1/core/OrganizationConfigsService.java
@@ -0,0 +1,136 @@
+/*
+ * Copyright (c) 2023, 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.api.server.organization.configs.v1.core;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.identity.api.server.common.error.APIError;
+import org.wso2.carbon.identity.api.server.common.error.ErrorResponse;
+import org.wso2.carbon.identity.api.server.organization.configs.common.OrganizationConfigsServiceHolder;
+import org.wso2.carbon.identity.api.server.organization.configs.v1.model.Config;
+import org.wso2.carbon.identity.api.server.organization.configs.v1.model.Properties;
+import org.wso2.carbon.identity.organization.config.service.exception.OrganizationConfigClientException;
+import org.wso2.carbon.identity.organization.config.service.exception.OrganizationConfigException;
+import org.wso2.carbon.identity.organization.config.service.model.ConfigProperty;
+import org.wso2.carbon.identity.organization.config.service.model.DiscoveryConfig;
+
+import java.util.List;
+import java.util.stream.Collectors;
+
+import javax.ws.rs.core.Response;
+
+import static org.wso2.carbon.identity.organization.config.service.constant.OrganizationConfigConstants.ErrorMessages.ERROR_CODE_DISCOVERY_CONFIG_CONFLICT;
+import static org.wso2.carbon.identity.organization.config.service.constant.OrganizationConfigConstants.ErrorMessages.ERROR_CODE_DISCOVERY_CONFIG_NOT_EXIST;
+
+/**
+ * Perform organization configuration management related operations.
+ */
+public class OrganizationConfigsService {
+
+ private static final Log LOG = LogFactory.getLog(OrganizationConfigsService.class);
+
+ /**
+ * Add the organization discovery configuration in the primary organization.
+ *
+ * @param config The organization discovery configuration.
+ */
+ public void addDiscoveryConfiguration(Config config) {
+
+ List configProperties = config.getProperties().stream()
+ .map(property -> new ConfigProperty(property.getKey(), property.getValue()))
+ .collect(Collectors.toList());
+ try {
+ OrganizationConfigsServiceHolder.getOrganizationConfigManager().addDiscoveryConfiguration
+ (new DiscoveryConfig(configProperties));
+ } catch (OrganizationConfigException e) {
+ throw handleException(e);
+ }
+ }
+
+ /**
+ * Fetch organization discovery configuration.
+ *
+ * @return The organization discovery configuration.
+ */
+ public Config getDiscoveryConfiguration() {
+
+ try {
+ DiscoveryConfig discoveryConfig = OrganizationConfigsServiceHolder.getOrganizationConfigManager()
+ .getDiscoveryConfiguration();
+
+ List properties = discoveryConfig.getConfigProperties().stream()
+ .map(configProperty -> {
+ Properties prop = new Properties();
+ prop.setKey(configProperty.getKey());
+ prop.setValue(configProperty.getValue());
+ return prop;
+ }).collect(Collectors.toList());
+ Config config = new Config();
+ config.setProperties(properties);
+ return config;
+ } catch (OrganizationConfigException e) {
+ throw handleException(e);
+ }
+ }
+
+ /**
+ * Delete the organization discovery configuration.
+ */
+ public void deleteDiscoveryConfiguration() {
+
+ try {
+ OrganizationConfigsServiceHolder.getOrganizationConfigManager().deleteDiscoveryConfiguration();
+ } catch (OrganizationConfigException e) {
+ throw handleException(e);
+ }
+ }
+
+ private APIError handleException(OrganizationConfigException e) {
+
+ if (e instanceof OrganizationConfigClientException) {
+ throw buildClientError(e);
+ }
+ throw buildServerError(e);
+ }
+
+ private APIError buildClientError(OrganizationConfigException e) {
+
+ String errorCode = e.getErrorCode();
+ ErrorResponse errorResponse = new ErrorResponse.Builder().withCode(e.getErrorCode()).withMessage(e.getMessage())
+ .withDescription(e.getDescription()).build(LOG, e.getMessage());
+
+ Response.Status status = Response.Status.BAD_REQUEST;
+ if (ERROR_CODE_DISCOVERY_CONFIG_CONFLICT.getCode().equals(errorCode)) {
+ status = Response.Status.CONFLICT;
+ } else if (ERROR_CODE_DISCOVERY_CONFIG_NOT_EXIST.getCode().equals(errorCode)) {
+ status = Response.Status.NOT_FOUND;
+ }
+ return new APIError(status, errorResponse);
+ }
+
+ private APIError buildServerError(OrganizationConfigException e) {
+
+ String errorCode = e.getErrorCode();
+ ErrorResponse errorResponse = new ErrorResponse.Builder().withCode(errorCode).withMessage(e.getMessage())
+ .withDescription(e.getDescription()).build(LOG, e, e.getMessage());
+
+ Response.Status status = Response.Status.INTERNAL_SERVER_ERROR;
+ return new APIError(status, errorResponse);
+ }
+}
diff --git a/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/main/java/org/wso2/carbon/identity/api/server/organization/configs/v1/impl/OrganizationConfigsApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/main/java/org/wso2/carbon/identity/api/server/organization/configs/v1/impl/OrganizationConfigsApiServiceImpl.java
new file mode 100644
index 0000000000..91451087d0
--- /dev/null
+++ b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/main/java/org/wso2/carbon/identity/api/server/organization/configs/v1/impl/OrganizationConfigsApiServiceImpl.java
@@ -0,0 +1,55 @@
+/*
+ * Copyright (c) 2023, 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.api.server.organization.configs.v1.impl;
+
+import org.springframework.beans.factory.annotation.Autowired;
+import org.wso2.carbon.identity.api.server.organization.configs.v1.OrganizationConfigsApiService;
+import org.wso2.carbon.identity.api.server.organization.configs.v1.core.OrganizationConfigsService;
+import org.wso2.carbon.identity.api.server.organization.configs.v1.model.Config;
+
+import javax.ws.rs.core.Response;
+
+/**
+ * Implementation of the organization configuration REST API.
+ */
+public class OrganizationConfigsApiServiceImpl implements OrganizationConfigsApiService {
+
+ @Autowired
+ private OrganizationConfigsService organizationConfigsService;
+
+ @Override
+ public Response createDiscoveryConfig(Config config) {
+
+ organizationConfigsService.addDiscoveryConfiguration(config);
+ return Response.status(Response.Status.CREATED).entity(config).build();
+ }
+
+ @Override
+ public Response deleteDiscoveryConfig() {
+
+ organizationConfigsService.deleteDiscoveryConfiguration();
+ return Response.noContent().build();
+ }
+
+ @Override
+ public Response getDiscoveryConfig() {
+
+ return Response.ok().entity(organizationConfigsService.getDiscoveryConfiguration()).build();
+ }
+}
diff --git a/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/main/resources/META-INF/cxf/organization-configs-server-v1-cxf.xml b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/main/resources/META-INF/cxf/organization-configs-server-v1-cxf.xml
new file mode 100644
index 0000000000..a9f987b127
--- /dev/null
+++ b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/main/resources/META-INF/cxf/organization-configs-server-v1-cxf.xml
@@ -0,0 +1,31 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/main/resources/organization-configs.yaml b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/main/resources/organization-configs.yaml
new file mode 100644
index 0000000000..0cee82f16f
--- /dev/null
+++ b/components/org.wso2.carbon.identity.api.server.organization.configs/org.wso2.carbon.identity.api.server.organization.configs.v1/src/main/resources/organization-configs.yaml
@@ -0,0 +1,189 @@
+openapi: 3.0.0
+info:
+ title: WSO2 Identity Server - Organization Configuration API Definition
+ description: This document specifies a **RESTful API** for **WSO2 Identity Server Organization Configurations**
+ contact:
+ name: WSO2
+ url: http://wso2.com/products/identity-server/
+ email: iam-dev@wso2.org
+ license:
+ name: Apache 2.0
+ url: http://www.apache.org/licenses/LICENSE-2.0.html
+ version: "v1"
+servers:
+ - url: 'https://localhost:9443/o/{organization-domain}/api/server/v1'
+ variables:
+ organization-domain:
+ default: 10084a8d-113f-4211-a0d5-efe36b082211
+security:
+ - OAuth2: []
+ - BasicAuth: []
+
+paths:
+ /organization-configs/discovery:
+ get:
+ tags:
+ - Discovery
+ summary: Get organization discovery configuration.
+ description: |
+ This API facilitates the retrieval of discovery configuration of the primary organization.
+ Permission required:
+ * /permission/admin/manage/identity/configmgt/view
+ Scope required:
+ * internal_config_mgt_view
+ operationId: getDiscoveryConfig
+ responses:
+ '200':
+ description: Successful response.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Config'
+ '401':
+ $ref: '#/components/responses/Unauthorized'
+ '403':
+ $ref: '#/components/responses/Forbidden'
+ '500':
+ $ref: '#/components/responses/ServerError'
+ post:
+ tags:
+ - Discovery
+ summary: Add organization discovery configuration.
+ description: |
+ This API provides the capability to add discovery configuration for the primary organization.
+ Permission required:
+ * /permission/admin/manage/identity/configmgt/add
+ Scope required:
+ * internal_config_mgt_add
+ operationId: createDiscoveryConfig
+ requestBody:
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Config'
+ responses:
+ '201':
+ description: Successful Response
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Config'
+ '400':
+ $ref: '#/components/responses/BadRequest'
+ '401':
+ $ref: '#/components/responses/Unauthorized'
+ '403':
+ $ref: '#/components/responses/Forbidden'
+ '409':
+ $ref: '#/components/responses/Conflict'
+ '500':
+ $ref: '#/components/responses/ServerError'
+ delete:
+ tags:
+ - Discovery
+ summary: Delete organization discovery configuration.
+ description: |
+ This API provides the capability to delete discovery configuration of the primary organization.
+ Permission required:
+ * /permission/admin/manage/identity/configmgt/delete
+ Scope required:
+ * internal_config_mgt_delete
+ operationId: deleteDiscoveryConfig
+ responses:
+ '204':
+ $ref: '#/components/responses/NoContent'
+ '401':
+ $ref: '#/components/responses/Unauthorized'
+ '403':
+ $ref: '#/components/responses/Forbidden'
+ '500':
+ $ref: '#/components/responses/ServerError'
+
+components:
+ schemas:
+ Error:
+ type: object
+ required:
+ - code
+ - message
+ properties:
+ code:
+ type: string
+ example: OCM-00000
+ description: An error code.
+ message:
+ type: string
+ example: Some Error Message
+ description: An error message.
+ description:
+ type: string
+ example: Some Error Description
+ description: An error description.
+ traceId:
+ type: string
+ example: e0fbcfeb-3617-43c4-8dd0-7b7d38e13047
+ description: An error trace identifier.
+
+ Config:
+ type: object
+ properties:
+ properties:
+ type: array
+ items:
+ $ref: '#/components/schemas/Properties'
+ Properties:
+ required:
+ - key
+ - value
+ type: object
+ properties:
+ key:
+ type: string
+ example: emailDomain.enable
+ value:
+ type: string
+ example: true
+
+ responses:
+ BadRequest:
+ description: Invalid input in the request.
+ content:
+ 'application/json':
+ schema:
+ $ref: '#/components/schemas/Error'
+ NotFound:
+ description: Requested resource is not found.
+ content:
+ 'application/json':
+ schema:
+ $ref: '#/components/schemas/Error'
+ Conflict:
+ description: Resource already exists.
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/Error'
+ NoContent:
+ description: No content.
+ Unauthorized:
+ description: Authentication information is missing or invalid.
+ Forbidden:
+ description: Access forbidden.
+ ServerError:
+ description: Internal server error.
+ content:
+ 'application/json':
+ schema:
+ $ref: '#/components/schemas/Error'
+
+ securitySchemes:
+ BasicAuth:
+ type: http
+ scheme: basic
+ OAuth2:
+ type: oauth2
+ flows:
+ authorizationCode:
+ authorizationUrl: https://localhost:9443/oauth2/authorize
+ tokenUrl: https://localhost:9443/oauth2/token
+ scopes: {}
diff --git a/components/org.wso2.carbon.identity.api.server.organization.configs/pom.xml b/components/org.wso2.carbon.identity.api.server.organization.configs/pom.xml
new file mode 100644
index 0000000000..1b0c3fdaba
--- /dev/null
+++ b/components/org.wso2.carbon.identity.api.server.organization.configs/pom.xml
@@ -0,0 +1,37 @@
+
+
+
+
+
+ identity-api-server
+ org.wso2.carbon.identity.server.api
+ 1.2.84-SNAPSHOT
+ ../../pom.xml
+
+
+ 4.0.0
+ org.wso2.carbon.identity.api.server.organization.configs
+
+ pom
+
+
+ org.wso2.carbon.identity.api.server.organization.configs.common
+ org.wso2.carbon.identity.api.server.organization.configs.v1
+
+
diff --git a/pom.xml b/pom.xml
index b6901e19e2..9a8fcebbbf 100644
--- a/pom.xml
+++ b/pom.xml
@@ -555,6 +555,12 @@
${org.wso2.carbon.identity.organization.management.version}
provided
+
+ org.wso2.carbon.identity.organization.management
+ org.wso2.carbon.identity.organization.config.service
+ ${org.wso2.carbon.identity.organization.management.version}
+ provided
+
org.wso2.carbon.identity.server.api
org.wso2.carbon.identity.api.server.organization.management.common
@@ -610,6 +616,12 @@
org.wso2.carbon.identity.api.idle.account.identification.common
${project.version}
+
+ org.wso2.carbon.identity.server.api
+ org.wso2.carbon.identity.api.server.organization.configs.common
+ ${project.version}
+ provided
+
org.apache.felix
org.apache.felix.scr.ds-annotations
@@ -747,7 +759,7 @@
- 1.3.61
+ 1.3.70
@@ -788,6 +800,7 @@
components/org.wso2.carbon.identity.api.expired.password.identification
components/org.wso2.carbon.identity.api.server.organization.user.invitation.management
components/org.wso2.carbon.identity.api.server.api.resource
+ components/org.wso2.carbon.identity.api.server.organization.configs