diff --git a/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.api.server.notification.template.common/pom.xml b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.api.server.notification.template.common/pom.xml new file mode 100644 index 0000000000..41f71c6d5b --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.api.server.notification.template.common/pom.xml @@ -0,0 +1,60 @@ + + + + + + + org.wso2.carbon.identity.server.api + org.wso2.carbon.identity.api.server.notification.template + 1.2.196-SNAPSHOT + ../pom.xml + + + 4.0.0 + org.wso2.carbon.identity.api.server.notification.template.common + jar + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + + + + javax.ws.rs + javax.ws.rs-api + provided + + + org.wso2.carbon.identity.event.handler.notification + org.wso2.carbon.email.mgt + + + org.springframework + spring-web + provided + + + diff --git a/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.api.server.notification.template.common/src/main/java/org/wso2/carbon/identity/api/server/notification/template/common/Constants.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.api.server.notification.template.common/src/main/java/org/wso2/carbon/identity/api/server/notification/template/common/Constants.java new file mode 100644 index 0000000000..11c15e7a9e --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.api.server.notification.template.common/src/main/java/org/wso2/carbon/identity/api/server/notification/template/common/Constants.java @@ -0,0 +1,152 @@ +/* + * Copyright (c) 2024, WSO2 LLC. (http://www.wso2.org) All Rights Reserved. + * + * 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.notification.template.common; + +import java.util.HashMap; +import java.util.Map; +import javax.ws.rs.core.Response.Status; + +import static org.wso2.carbon.email.mgt.constants.TemplateMgtConstants.ErrorCodes.ERROR_ADDING_TEMPLATE; +import static org.wso2.carbon.email.mgt.constants.TemplateMgtConstants.ErrorCodes.ERROR_UPDATING_TEMPLATE; +import static org.wso2.carbon.email.mgt.constants.TemplateMgtConstants.ErrorCodes.TEMPLATE_ALREADY_EXISTS; +import static org.wso2.carbon.email.mgt.constants.TemplateMgtConstants.ErrorCodes.TEMPLATE_NOT_FOUND; +import static org.wso2.carbon.email.mgt.constants.TemplateMgtConstants.ErrorCodes.TEMPLATE_TYPE_ALREADY_EXISTS; +import static org.wso2.carbon.email.mgt.constants.TemplateMgtConstants.ErrorCodes.TEMPLATE_TYPE_NOT_FOUND; + +/** + * Constants related to notification templates. + */ +public class Constants { + + public static final String NOTIFICATION_TEMPLATES_ERROR_CODE_PREFIX = "NTM-"; + public static final String NOTIFICATION_TEMPLATES_API_BASE_PATH_EMAIL = "/email"; + public static final String NOTIFICATION_TEMPLATES_API_BASE_PATH_SMS = "/sms"; + public static final String NOTIFICATION_TEMPLATES_API_PATH = "/notification"; + public static final String TEMPLATE_TYPES_PATH = "/template-types"; + public static final String APP_TEMPLATES_PATH = "/app-templates"; + public static final String ORG_TEMPLATES_PATH = "/org-templates"; + public static final String PATH_SEPARATOR = "/"; + public static final String NOTIFICATION_CHANNEL_EMAIL = "email"; + public static final String NOTIFICATION_CHANNEL_SMS = "sms"; + + // ERROR MESSAGES + private static final Map NTM_ERROR_CODE_MAP = new HashMap<>(); + + /** + * Enum for error messages. + */ + public enum ErrorMessage { + + ERROR_TEMPLATE_TYPE_ALREADY_EXISTS("65001", Status.CONFLICT, + "Template Type already exists in the system.", + "A template type for the provided template display name already exists " + + "in the system."), + ERROR_TEMPLATE_TYPE_NOT_FOUND("65002", Status.NOT_FOUND, + "Template Type does not exist.", + "Specified template type does not exist in the system."), + ERROR_TEMPLATE_ALREADY_EXISTS("65003", Status.CONFLICT, + "Template already exists in the system.", + "A template for the provided template id already exists in the system."), + ERROR_TEMPLATE_NOT_FOUND("65004", Status.NOT_FOUND, + "Template does not exist.", + "Specified template does not exist in the system."), + ERROR_ERROR_RETRIEVING_TEMPLATE_TYPES("60002", Status.INTERNAL_SERVER_ERROR, + "Unable to retrieve template types.", + "Server encountered an error while retrieving template types."), + ERROR_ERROR_RETRIEVING_TEMPLATE_TYPE("60003", Status.INTERNAL_SERVER_ERROR, + "Unable to retrieve the template type.", + "Server encountered an error while retrieving the template " + + "type identified by the given template-type-id."), + ERROR_ERROR_ADDING_TEMPLATE_TYPE("60004", Status.INTERNAL_SERVER_ERROR, + "Unable to add the template type.", + "Server encountered an error while adding template type."), + ERROR_ERROR_DELETING_TEMPLATE_TYPE("60005", Status.INTERNAL_SERVER_ERROR, + "Unable to delete the template type.", + "Server encountered an error while deleting the template type."), + ERROR_ERROR_ADDING_TEMPLATE("60006", Status.INTERNAL_SERVER_ERROR, + "Unable to add the template.", + "Server encountered an error while adding the template to the system."), + ERROR_ERROR_UPDATING_TEMPLATE("60007", Status.INTERNAL_SERVER_ERROR, + "Unable to update the template.", + "Server encountered an error while updating the template."), + ERROR_ERROR_RETRIEVING_TEMPLATE("60008", Status.INTERNAL_SERVER_ERROR, + "Unable to retrieve the template.", + "Server encountered an error while retrieving the template " + + "identified by the given template-type-id and the template-id."), + ERROR_ERROR_DELETING_EMAIL_TEMPLATE("60009", Status.INTERNAL_SERVER_ERROR, + "Unable to delete the email template.", + "Server encountered an error while deleting the email template."), + ERROR_ERROR_DELETING_SMS_TEMPLATE("60010", Status.INTERNAL_SERVER_ERROR, + "Unable to delete the SMS template.", + "Server encountered an error while deleting the SMS template."); + + private final String message; + private final Status httpStatus; + private final String code; + private final String description; + + ErrorMessage(String code, Status httpStatus, String message, String description) { + + this.code = code; + this.httpStatus = httpStatus; + this.message = message; + this.description = description; + } + + public String getCode() { + + return NOTIFICATION_TEMPLATES_ERROR_CODE_PREFIX + code; + } + + public String getMessage() { + + return message; + } + + public String getDescription() { + + return description; + } + + public Status getHttpStatus() { + + return httpStatus; + } + + @Override + public String toString() { + + return code + " | " + message; + } + } + + static { + NTM_ERROR_CODE_MAP.put(TEMPLATE_TYPE_ALREADY_EXISTS, ErrorMessage.ERROR_TEMPLATE_TYPE_ALREADY_EXISTS); + NTM_ERROR_CODE_MAP.put(TEMPLATE_TYPE_NOT_FOUND, ErrorMessage.ERROR_TEMPLATE_TYPE_NOT_FOUND); + NTM_ERROR_CODE_MAP.put(TEMPLATE_ALREADY_EXISTS, ErrorMessage.ERROR_TEMPLATE_ALREADY_EXISTS); + NTM_ERROR_CODE_MAP.put(TEMPLATE_NOT_FOUND, ErrorMessage.ERROR_TEMPLATE_NOT_FOUND); + NTM_ERROR_CODE_MAP.put(ERROR_ADDING_TEMPLATE, ErrorMessage.ERROR_ERROR_ADDING_TEMPLATE); + NTM_ERROR_CODE_MAP.put(ERROR_UPDATING_TEMPLATE, ErrorMessage.ERROR_ERROR_UPDATING_TEMPLATE); + } + + public static ErrorMessage getNTMMappedErrorMessage(String errorCode) { + + return NTM_ERROR_CODE_MAP.get(errorCode); + } +} diff --git a/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.api.server.notification.template.common/src/main/java/org/wso2/carbon/identity/api/server/notification/template/common/TemplatesServiceHolder.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.api.server.notification.template.common/src/main/java/org/wso2/carbon/identity/api/server/notification/template/common/TemplatesServiceHolder.java new file mode 100644 index 0000000000..60b7d34f8b --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.api.server.notification.template.common/src/main/java/org/wso2/carbon/identity/api/server/notification/template/common/TemplatesServiceHolder.java @@ -0,0 +1,28 @@ +package org.wso2.carbon.identity.api.server.notification.template.common; + + +import org.wso2.carbon.identity.governance.service.notification.NotificationTemplateManager; + +/** + * This class is used to hold the TemplateManager service. + */ +public class TemplatesServiceHolder { + + private static NotificationTemplateManager notificationTemplateManager; + + /** + * Get TemplateManager osgi service. + * @return TemplateManager + */ + public static NotificationTemplateManager getNotificationTemplateManager() { + return notificationTemplateManager; + } + + /** + * Set TemplateManager osgi service. + * @param notificationTemplateManager TemplateManager + */ + public static void setNotificationTemplateManager(NotificationTemplateManager notificationTemplateManager) { + TemplatesServiceHolder.notificationTemplateManager = notificationTemplateManager; + } +} diff --git a/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.api.server.notification.template.common/src/main/java/org/wso2/carbon/identity/api/server/notification/template/common/factory/OSGIServiceFactory.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.api.server.notification.template.common/src/main/java/org/wso2/carbon/identity/api/server/notification/template/common/factory/OSGIServiceFactory.java new file mode 100644 index 0000000000..f2a067ac23 --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.api.server.notification.template.common/src/main/java/org/wso2/carbon/identity/api/server/notification/template/common/factory/OSGIServiceFactory.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2024, WSO2 LLC. (http://www.wso2.org) All Rights Reserved. + * + * 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.notification.template.common.factory; + +import org.springframework.beans.factory.config.AbstractFactoryBean; +import org.wso2.carbon.context.PrivilegedCarbonContext; +import org.wso2.carbon.identity.governance.service.notification.NotificationTemplateManager; + +import java.util.Hashtable; + +/** + * Factory Beans serves as a factory for creating other beans within the IOC container. This factory bean is used to + * instantiate the NotificationTemplateManager type of object inside the container. + */ +public class OSGIServiceFactory extends AbstractFactoryBean { + + private NotificationTemplateManager notificationTemplateManager; + + @Override + public Class getObjectType() { + return Object.class; + } + + @Override + protected NotificationTemplateManager createInstance() throws Exception { + + if (this.notificationTemplateManager == null) { + Hashtable serviceProperties = new Hashtable<>(); + serviceProperties.put("service.name", "NotificationTemplateManager"); + NotificationTemplateManager taskOperationService = (NotificationTemplateManager) PrivilegedCarbonContext. + getThreadLocalCarbonContext().getOSGiService(NotificationTemplateManager.class, serviceProperties); + if (taskOperationService != null) { + this.notificationTemplateManager = taskOperationService; + } else { + throw new Exception("Unable to retrieve NotificationTemplateManager service."); + } + } + return this.notificationTemplateManager; + } +} diff --git a/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/pom.xml b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/pom.xml new file mode 100644 index 0000000000..0e5584f085 --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/pom.xml @@ -0,0 +1,179 @@ + + + + + + + org.wso2.carbon.identity.server.api + org.wso2.carbon.identity.api.server.notification.template + 1.2.196-SNAPSHOT + + + 4.0.0 + org.wso2.carbon.identity.rest.api.server.notification.template.v1 + jar + + WSO2 Identity Server - Notification Templates Rest API v1 + WSO2 Identity Server - Notification Templates Rest API v1 + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 1.8 + 1.8 + + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.8 + + + add-source + generate-sources + + add-source + + + + src/gen/java + + + + + + + + + + + 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.event.handler.notification + org.wso2.carbon.email.mgt + provided + + + org.wso2.carbon.identity.server.api + org.wso2.carbon.identity.api.server.notification.template.common + + + org.wso2.carbon.identity.governance + org.wso2.carbon.identity.recovery + provided + + + javax.ws.rs + jsr311-api + + + + + org.wso2.carbon.identity.server.api + org.wso2.carbon.identity.api.server.common + + + diff --git a/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/NotificationApi.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/NotificationApi.java new file mode 100644 index 0000000000..d961ed1675 --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/NotificationApi.java @@ -0,0 +1,721 @@ +/* + * 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.rest.api.server.notification.template.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.rest.api.server.notification.template.v1.model.EmailTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.EmailTemplateWithID; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.Error; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SMSTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SMSTemplateWithID; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SimpleTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.TemplateTypeOverview; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.TemplateTypeWithID; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.NotificationApiService; + +import javax.validation.Valid; +import javax.ws.rs.*; +import javax.ws.rs.core.Response; +import io.swagger.annotations.*; + +import javax.validation.constraints.*; + +@Path("/notification") +@Api(description = "The notification API") + +public class NotificationApi { + + @Autowired + private NotificationApiService delegate; + + @Valid + @POST + @Path("/email/template-types/{template-type-id}/app-templates/{app-uuid}") + @Consumes({ "application/json" }) + @Produces({ "application/json" }) + @ApiOperation(value = "Adds a new application email template to an existing email template type.", notes = "Another application email template with the same locale should not already exist in the respective email template type.
Scopes required:
* internal_email_mgt_create ", response = SimpleTemplate.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Application Email Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 201, message = "Item Created", response = SimpleTemplate.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 409, message = "Item Already Exists.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response addAppEmailTemplate(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "Application UUID.",required=true) @PathParam("app-uuid") String appUuid, @ApiParam(value = "Email template to be added." ) @Valid EmailTemplateWithID emailTemplateWithID) { + + return delegate.addAppEmailTemplate(templateTypeId, appUuid, emailTemplateWithID ); + } + + @Valid + @POST + @Path("/sms/template-types/{template-type-id}/app-templates/{app-uuid}") + @Consumes({ "application/json" }) + @Produces({ "application/json" }) + @ApiOperation(value = "Adds a new application SMS template to an existing SMS template type.", notes = "Another application SMS template with the same locale should not already exist in the respective SMS template type.
Scopes required:
* internal_sms_mgt_create ", response = SimpleTemplate.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Application SMS Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 201, message = "Item Created", response = SimpleTemplate.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 409, message = "Item Already Exists.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response addAppSMSTemplate(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "Application UUID.",required=true) @PathParam("app-uuid") String appUuid, @ApiParam(value = "SMS template to be added." ) @Valid SMSTemplateWithID smSTemplateWithID) { + + return delegate.addAppSMSTemplate(templateTypeId, appUuid, smSTemplateWithID ); + } + + @Valid + @POST + @Path("/email/template-types") + @Consumes({ "application/json" }) + @Produces({ "application/json" }) + @ApiOperation(value = "Adds a new email template type.", notes = "Adds a new email template type to the system. An email template type can have any number of organization or application email templates.
* Attribute _**displayName**_ of the template type should be unique.
Scopes required:
* internal_email_mgt_create ", response = TemplateTypeWithID.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Email Template Types", }) + @ApiResponses(value = { + @ApiResponse(code = 201, message = "Item Created", response = TemplateTypeWithID.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 409, message = "Item Already Exists.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response addEmailTemplateType(@ApiParam(value = "Email template type to be added." ) @Valid TemplateTypeOverview templateTypeOverview) { + + return delegate.addEmailTemplateType(templateTypeOverview ); + } + + @Valid + @POST + @Path("/email/template-types/{template-type-id}/org-templates") + @Consumes({ "application/json" }) + @Produces({ "application/json" }) + @ApiOperation(value = "Adds a new email template to an existing email template type.", notes = "Another email template with the same locale should not already exist in the respective email template type.
Scopes required:
* internal_email_mgt_create ", response = SimpleTemplate.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Email Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 201, message = "Item Created", response = SimpleTemplate.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 409, message = "Item Already Exists.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response addOrgEmailTemplate(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "Email template to be added." ) @Valid EmailTemplateWithID emailTemplateWithID) { + + return delegate.addOrgEmailTemplate(templateTypeId, emailTemplateWithID ); + } + + @Valid + @POST + @Path("/sms/template-types/{template-type-id}/org-templates") + @Consumes({ "application/json" }) + @Produces({ "application/json" }) + @ApiOperation(value = "Adds a new organization SMS template to an existing SMS template type.", notes = "Another SMS organization template with the same locale should not already exist in the respective SMS template type.
Scopes required:
* internal_sms_mgt_create ", response = SimpleTemplate.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "SMS Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 201, message = "Item Created", response = SimpleTemplate.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 409, message = "Item Already Exists.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response addOrgSMSTemplate(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "SMS template to be added." ) @Valid SMSTemplateWithID smSTemplateWithID) { + + return delegate.addOrgSMSTemplate(templateTypeId, smSTemplateWithID ); + } + + @Valid + @POST + @Path("/sms/template-types") + @Consumes({ "application/json" }) + @Produces({ "application/json" }) + @ApiOperation(value = "Adds a new SMS template type.", notes = "Adds a new SMS template type to the system. An SMS template type can have any number of organization or application SMS templates.
* Attribute _**displayName**_ of the template type should be unique.
Scopes required:
* internal_sms_mgt_create ", response = TemplateTypeWithID.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "SMS Template Types", }) + @ApiResponses(value = { + @ApiResponse(code = 201, message = "Item Created", response = TemplateTypeWithID.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 409, message = "Item Already Exists.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response addSMSTemplateType(@ApiParam(value = "SMS template type to be added." ) @Valid TemplateTypeOverview templateTypeOverview) { + + return delegate.addSMSTemplateType(templateTypeOverview ); + } + + @Valid + @DELETE + @Path("/email/template-types/{template-type-id}/app-templates/{app-uuid}/{locale}") + + @Produces({ "application/json" }) + @ApiOperation(value = "Removes an email template.", notes = "Removes an email template identified by the template-type-id and the locale.
Scopes required:
* internal_email_mgt_delete ", response = Void.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Application Email Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 204, message = "Item Deleted.", response = Void.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response deleteAppEmailTemplate(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "Application UUID.",required=true) @PathParam("app-uuid") String appUuid, @ApiParam(value = "This should be a valid locale.",required=true) @PathParam("locale") String locale) { + + return delegate.deleteAppEmailTemplate(templateTypeId, appUuid, locale ); + } + + @Valid + @DELETE + @Path("/sms/template-types/{template-type-id}/app-templates/{app-uuid}/{locale}") + + @Produces({ "application/json" }) + @ApiOperation(value = "Removes an SMS template.", notes = "Removes an SMS template identified by the template-type-id and the locale.
Scopes required:
* internal_sms_mgt_delete ", response = Void.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Application SMS Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 204, message = "Item Deleted.", response = Void.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response deleteAppSMSTemplate(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "Application UUID.",required=true) @PathParam("app-uuid") String appUuid, @ApiParam(value = "This should be a valid locale.",required=true) @PathParam("locale") String locale) { + + return delegate.deleteAppSMSTemplate(templateTypeId, appUuid, locale ); + } + + @Valid + @DELETE + @Path("/email/template-types/{template-type-id}") + + @Produces({ "application/json" }) + @ApiOperation(value = "Removes an email template type.", notes = "Removes an existing email template type with all its email templates from the system.
Scopes required:
* internal_email_mgt_delete ", response = Void.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Email Template Types", }) + @ApiResponses(value = { + @ApiResponse(code = 204, message = "Item Deleted.", response = Void.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response deleteEmailTemplateType(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId) { + + return delegate.deleteEmailTemplateType(templateTypeId ); + } + + @Valid + @DELETE + @Path("/email/template-types/{template-type-id}/org-templates/{locale}") + + @Produces({ "application/json" }) + @ApiOperation(value = "Removes an email template.", notes = "Removes an email template identified by the template-type-id and the locale.
Scopes required:
* internal_email_mgt_delete ", response = Void.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Email Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 204, message = "Item Deleted.", response = Void.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response deleteOrgEmailTemplate(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "This should be a valid locale.",required=true) @PathParam("locale") String locale) { + + return delegate.deleteOrgEmailTemplate(templateTypeId, locale ); + } + + @Valid + @DELETE + @Path("/sms/template-types/{template-type-id}/org-templates/{locale}") + + @Produces({ "application/json" }) + @ApiOperation(value = "Removes an organization SMS template.", notes = "Removes an organization SMS template identified by the template-type-id and the locale.
Scopes required:
* internal_sms_mgt_delete ", response = Void.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "SMS Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 204, message = "Item Deleted.", response = Void.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response deleteOrgSMSTemplate(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "This should be a valid locale.",required=true) @PathParam("locale") String locale) { + + return delegate.deleteOrgSMSTemplate(templateTypeId, locale ); + } + + @Valid + @DELETE + @Path("/sms/template-types/{template-type-id}") + + @Produces({ "application/json" }) + @ApiOperation(value = "Removes an SMS template type.", notes = "Removes an existing SMS template type with all its SMS templates from the system.
Scopes required:
* internal_sms_mgt_delete ", response = Void.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "SMS Template Types", }) + @ApiResponses(value = { + @ApiResponse(code = 204, message = "Item Deleted.", response = Void.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response deleteSMSTemplateType(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId) { + + return delegate.deleteSMSTemplateType(templateTypeId ); + } + + @Valid + @GET + @Path("/email/template-types") + + @Produces({ "application/json" }) + @ApiOperation(value = "Retrieves all the email template types.", notes = "Retrieves all the email template types in the system.

Scopes required:
* internal_email_mgt_view ", response = TemplateTypeWithID.class, responseContainer = "List", authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Email Template Types", }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Search results matching the given criteria.", response = TemplateTypeWithID.class, responseContainer = "List"), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response getAllEmailTemplateTypes() { + + return delegate.getAllEmailTemplateTypes(); + } + + @Valid + @GET + @Path("/sms/template-types") + + @Produces({ "application/json" }) + @ApiOperation(value = "Retrieves all the sms template types.", notes = "Retrieves all the SMS template types in the system.
Scopes required:
* internal_sms_mgt_view ", response = TemplateTypeWithID.class, responseContainer = "List", authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "SMS Template Types", }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Search results matching the given criteria.", response = TemplateTypeWithID.class, responseContainer = "List"), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response getAllSMSTemplateTypes() { + + return delegate.getAllSMSTemplateTypes(); + } + + @Valid + @GET + @Path("/email/template-types/{template-type-id}/app-templates/{app-uuid}/{locale}") + + @Produces({ "application/json" }) + @ApiOperation(value = "Retrieves a single email template of application.", notes = "Retrieves the application email template that matches to the template-type-id and the locale.
Scope required:
* internal_email_mgt_view ", response = EmailTemplateWithID.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Application Email Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Search results matching the given criteria.", response = EmailTemplateWithID.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response getAppEmailTemplate(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "Application UUID.",required=true) @PathParam("app-uuid") String appUuid, @ApiParam(value = "This should be a valid locale.",required=true) @PathParam("locale") String locale) { + + return delegate.getAppEmailTemplate(templateTypeId, appUuid, locale ); + } + + @Valid + @GET + @Path("/sms/template-types/{template-type-id}/app-templates/{app-uuid}/{locale}") + + @Produces({ "application/json" }) + @ApiOperation(value = "Retrieves a single SMS template of application.", notes = "Retrieves the application SMS template that matches to the template-type-id and the locale.
Scope required:
* internal_sms_mgt_view ", response = SMSTemplateWithID.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Application SMS Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Search results matching the given criteria.", response = SMSTemplateWithID.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response getAppSMSTemplate(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "Application UUID.",required=true) @PathParam("app-uuid") String appUuid, @ApiParam(value = "This should be a valid locale.",required=true) @PathParam("locale") String locale) { + + return delegate.getAppSMSTemplate(templateTypeId, appUuid, locale ); + } + + @Valid + @GET + @Path("/email/template-types/{template-type-id}/app-templates/{app-uuid}") + + @Produces({ "application/json" }) + @ApiOperation(value = "Retrieves the list of application email templates in the template type id.", notes = "Retrieves the list of application email templates in the template type id.
Scope required:
* internal_email_mgt_view
", response = EmailTemplateWithID.class, responseContainer = "List", authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Application Email Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Search results matching the given criteria.", response = EmailTemplateWithID.class, responseContainer = "List"), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response getAppTemplatesListOfEmailTemplateType(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "Application UUID.",required=true) @PathParam("app-uuid") String appUuid) { + + return delegate.getAppTemplatesListOfEmailTemplateType(templateTypeId, appUuid ); + } + + @Valid + @GET + @Path("/sms/template-types/{template-type-id}/app-templates/{app-uuid}") + + @Produces({ "application/json" }) + @ApiOperation(value = "Retrieves the list of application SMS templates in the template type id.", notes = "Retrieves the list of application SMS templates in the template type id.
Scope required:
* internal_sms_mgt_view
", response = SMSTemplateWithID.class, responseContainer = "List", authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Application SMS Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Search results matching the given criteria.", response = SMSTemplateWithID.class, responseContainer = "List"), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response getAppTemplatesListOfSMSTemplateType(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "Application UUID.",required=true) @PathParam("app-uuid") String appUuid) { + + return delegate.getAppTemplatesListOfSMSTemplateType(templateTypeId, appUuid ); + } + + @Valid + @GET + @Path("/email/template-types/{template-type-id}") + + @Produces({ "application/json" }) + @ApiOperation(value = "Retrieves the email template type corresponding to the template type id.", notes = "Retrieves the email template type in the system identified by the template-type-id.
Scopes required:
* internal_email_mgt_view
", response = TemplateTypeWithID.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Email Template Types", }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Search results matching the given criteria.", response = TemplateTypeWithID.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response getEmailTemplateType(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId) { + + return delegate.getEmailTemplateType(templateTypeId ); + } + + @Valid + @GET + @Path("/email/template-types/{template-type-id}/org-templates/{locale}") + + @Produces({ "application/json" }) + @ApiOperation(value = "Retrieves a single email template.", notes = "Retrieves the email template that matches to the template-type-id and the locale.
Scope required:
* internal_email_mgt_view ", response = EmailTemplateWithID.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Email Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Search results matching the given criteria.", response = EmailTemplateWithID.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response getOrgEmailTemplate(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "This should be a valid locale.",required=true) @PathParam("locale") String locale) { + + return delegate.getOrgEmailTemplate(templateTypeId, locale ); + } + + @Valid + @GET + @Path("/sms/template-types/{template-type-id}/org-templates/{locale}") + + @Produces({ "application/json" }) + @ApiOperation(value = "Retrieves a single organization SMS template.", notes = "Retrieves the SMS template that matches to the template-type-id and the locale.
Scope required:
* internal_sms_mgt_view ", response = SMSTemplateWithID.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "SMS Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Search results matching the given criteria.", response = SMSTemplateWithID.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response getOrgSMSTemplate(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "This should be a valid locale.",required=true) @PathParam("locale") String locale) { + + return delegate.getOrgSMSTemplate(templateTypeId, locale ); + } + + @Valid + @GET + @Path("/email/template-types/{template-type-id}/org-templates") + + @Produces({ "application/json" }) + @ApiOperation(value = "Retrieves the list of organization email templates in the template type id.", notes = "Retrieves the list of organization email templates in the template type id.
Scope required:
* internal_email_mgt_view
", response = EmailTemplateWithID.class, responseContainer = "List", authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Email Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Search results matching the given criteria.", response = EmailTemplateWithID.class, responseContainer = "List"), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response getOrgTemplatesListOfEmailTemplateType(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId) { + + return delegate.getOrgTemplatesListOfEmailTemplateType(templateTypeId ); + } + + @Valid + @GET + @Path("/sms/template-types/{template-type-id}/org-templates") + + @Produces({ "application/json" }) + @ApiOperation(value = "Retrieves the list of organization SMS templates in the template type id.", notes = "Retrieves the list of organization SMS templates in the template type id.
Scope required:
* internal_sms_mgt_view
", response = SMSTemplateWithID.class, responseContainer = "List", authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "SMS Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Search results matching the given criteria.", response = SMSTemplateWithID.class, responseContainer = "List"), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response getOrgTemplatesListOfSMSTemplateType(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId) { + + return delegate.getOrgTemplatesListOfSMSTemplateType(templateTypeId ); + } + + @Valid + @GET + @Path("/sms/template-types/{template-type-id}") + + @Produces({ "application/json" }) + @ApiOperation(value = "Retrieves the SMS template type corresponding to the template type id.", notes = "Retrieves the SMS template type in the system identified by the template-type-id.
Scopes required:
* internal_sms_mgt_view
", response = TemplateTypeWithID.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "SMS Template Types", }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Search results matching the given criteria.", response = TemplateTypeWithID.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response getSMSTemplateType(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId) { + + return delegate.getSMSTemplateType(templateTypeId ); + } + + @Valid + @PUT + @Path("/email/template-types/{template-type-id}/app-templates/{app-uuid}/{locale}") + @Consumes({ "application/json" }) + @Produces({ "application/json" }) + @ApiOperation(value = "Replaces an existing application email template.", notes = "Replaces the application email template identified by the template-type-id and the locale.
Scopes required:
* internal_email_mgt_update ", response = Void.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Application Email Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Item Updated.", response = Void.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response updateAppEmailTemplate(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "Application UUID.",required=true) @PathParam("app-uuid") String appUuid, @ApiParam(value = "This should be a valid locale.",required=true) @PathParam("locale") String locale, @ApiParam(value = "Email templates for the template type." ) @Valid EmailTemplate emailTemplate) { + + return delegate.updateAppEmailTemplate(templateTypeId, appUuid, locale, emailTemplate ); + } + + @Valid + @PUT + @Path("/sms/template-types/{template-type-id}/app-templates/{app-uuid}/{locale}") + @Consumes({ "application/json" }) + @Produces({ "application/json" }) + @ApiOperation(value = "Replaces an existing application SMS template.", notes = "Replaces the application SMS template identified by the template-type-id and the locale.
Scopes required:
* internal_sms_mgt_update ", response = Void.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Application SMS Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Item Updated.", response = Void.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response updateAppSMSTemplate(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "Application UUID.",required=true) @PathParam("app-uuid") String appUuid, @ApiParam(value = "This should be a valid locale.",required=true) @PathParam("locale") String locale, @ApiParam(value = "Email templates for the template type." ) @Valid SMSTemplate smSTemplate) { + + return delegate.updateAppSMSTemplate(templateTypeId, appUuid, locale, smSTemplate ); + } + + @Valid + @PUT + @Path("/email/template-types/{template-type-id}/org-templates/{locale}") + @Consumes({ "application/json" }) + @Produces({ "application/json" }) + @ApiOperation(value = "Replaces an existing email template.", notes = "Replaces the email template identified by the template-type-id and the locale.
Scopes required:
* internal_email_mgt_update ", response = Void.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "Email Templates", }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Item Updated.", response = Void.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response updateOrgEmailTemplate(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "This should be a valid locale.",required=true) @PathParam("locale") String locale, @ApiParam(value = "Email templates for the template type." ) @Valid EmailTemplate emailTemplate) { + + return delegate.updateOrgEmailTemplate(templateTypeId, locale, emailTemplate ); + } + + @Valid + @PUT + @Path("/sms/template-types/{template-type-id}/org-templates/{locale}") + @Consumes({ "application/json" }) + @Produces({ "application/json" }) + @ApiOperation(value = "Replaces an existing organization SMS template.", notes = "Replaces the organization SMS template identified by the template-type-id and the locale.
Scopes required:
* internal_sms_mgt_update ", response = Void.class, authorizations = { + @Authorization(value = "BasicAuth"), + @Authorization(value = "OAuth2", scopes = { + + }) + }, tags={ "SMS Templates" }) + @ApiResponses(value = { + @ApiResponse(code = 200, message = "Item Updated.", response = Void.class), + @ApiResponse(code = 400, message = "Invalid input request.", response = Error.class), + @ApiResponse(code = 401, message = "Unauthorized.", response = Void.class), + @ApiResponse(code = 403, message = "Forbidden.", response = Void.class), + @ApiResponse(code = 404, message = "The specified resource is not found.", response = Error.class), + @ApiResponse(code = 500, message = "Internal Server Error.", response = Error.class) + }) + public Response updateOrgSMSTemplate(@ApiParam(value = "Email Template Type ID.",required=true) @PathParam("template-type-id") String templateTypeId, @ApiParam(value = "This should be a valid locale.",required=true) @PathParam("locale") String locale, @ApiParam(value = "SMS templates for the template type." ) @Valid SMSTemplate smSTemplate) { + + return delegate.updateOrgSMSTemplate(templateTypeId, locale, smSTemplate ); + } + +} diff --git a/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/NotificationApiService.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/NotificationApiService.java new file mode 100644 index 0000000000..3548a1cfce --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/NotificationApiService.java @@ -0,0 +1,95 @@ +/* + * 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.rest.api.server.notification.template.v1; + +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.*; +import org.wso2.carbon.identity.rest.api.server.notification.template.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.rest.api.server.notification.template.v1.model.EmailTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.EmailTemplateWithID; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.Error; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SMSTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SMSTemplateWithID; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SimpleTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.TemplateTypeOverview; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.TemplateTypeWithID; +import javax.ws.rs.core.Response; + + +public interface NotificationApiService { + + public Response addAppEmailTemplate(String templateTypeId, String appUuid, EmailTemplateWithID emailTemplateWithID); + + public Response addAppSMSTemplate(String templateTypeId, String appUuid, SMSTemplateWithID smSTemplateWithID); + + public Response addEmailTemplateType(TemplateTypeOverview templateTypeOverview); + + public Response addOrgEmailTemplate(String templateTypeId, EmailTemplateWithID emailTemplateWithID); + + public Response addOrgSMSTemplate(String templateTypeId, SMSTemplateWithID smSTemplateWithID); + + public Response addSMSTemplateType(TemplateTypeOverview templateTypeOverview); + + public Response deleteAppEmailTemplate(String templateTypeId, String appUuid, String locale); + + public Response deleteAppSMSTemplate(String templateTypeId, String appUuid, String locale); + + public Response deleteEmailTemplateType(String templateTypeId); + + public Response deleteOrgEmailTemplate(String templateTypeId, String locale); + + public Response deleteOrgSMSTemplate(String templateTypeId, String locale); + + public Response deleteSMSTemplateType(String templateTypeId); + + public Response getAllEmailTemplateTypes(); + + public Response getAllSMSTemplateTypes(); + + public Response getAppEmailTemplate(String templateTypeId, String appUuid, String locale); + + public Response getAppSMSTemplate(String templateTypeId, String appUuid, String locale); + + public Response getAppTemplatesListOfEmailTemplateType(String templateTypeId, String appUuid); + + public Response getAppTemplatesListOfSMSTemplateType(String templateTypeId, String appUuid); + + public Response getEmailTemplateType(String templateTypeId); + + public Response getOrgEmailTemplate(String templateTypeId, String locale); + + public Response getOrgSMSTemplate(String templateTypeId, String locale); + + public Response getOrgTemplatesListOfEmailTemplateType(String templateTypeId); + + public Response getOrgTemplatesListOfSMSTemplateType(String templateTypeId); + + public Response getSMSTemplateType(String templateTypeId); + + public Response updateAppEmailTemplate(String templateTypeId, String appUuid, String locale, EmailTemplate emailTemplate); + + public Response updateAppSMSTemplate(String templateTypeId, String appUuid, String locale, SMSTemplate smSTemplate); + + public Response updateOrgEmailTemplate(String templateTypeId, String locale, EmailTemplate emailTemplate); + + public Response updateOrgSMSTemplate(String templateTypeId, String locale, SMSTemplate smSTemplate); +} diff --git a/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/factories/NotificationApiServiceFactory.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/factories/NotificationApiServiceFactory.java new file mode 100644 index 0000000000..8e708a033b --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/factories/NotificationApiServiceFactory.java @@ -0,0 +1,32 @@ +/* + * 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.rest.api.server.notification.template.v1.factories; + +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.NotificationApiService; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.impl.NotificationApiServiceImpl; + +public class NotificationApiServiceFactory { + + private final static NotificationApiService service = new NotificationApiServiceImpl(); + + public static NotificationApiService getNotificationApi() + { + return service; + } +} diff --git a/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/EmailTemplate.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/EmailTemplate.java new file mode 100644 index 0000000000..9f0c5e716b --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/EmailTemplate.java @@ -0,0 +1,171 @@ +/* + * 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.rest.api.server.notification.template.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 EmailTemplate { + + private String contentType; + private String subject; + private String body; + private String footer; + + /** + * Content type of the email template. + **/ + public EmailTemplate contentType(String contentType) { + + this.contentType = contentType; + return this; + } + + @ApiModelProperty(example = "text/html", required = true, value = "Content type of the email template.") + @JsonProperty("contentType") + @Valid + @NotNull(message = "Property contentType cannot be null.") + + public String getContentType() { + return contentType; + } + public void setContentType(String contentType) { + this.contentType = contentType; + } + + /** + * The subject of the email. + **/ + public EmailTemplate subject(String subject) { + + this.subject = subject; + return this; + } + + @ApiModelProperty(example = "WSO2 - Account Confirmation", required = true, value = "The subject of the email.") + @JsonProperty("subject") + @Valid + @NotNull(message = "Property subject cannot be null.") + + public String getSubject() { + return subject; + } + public void setSubject(String subject) { + this.subject = subject; + } + + /** + * The body of the email. + **/ + public EmailTemplate body(String body) { + + this.body = body; + return this; + } + + @ApiModelProperty(example = "HTML Body", required = true, value = "The body of the email.") + @JsonProperty("body") + @Valid + @NotNull(message = "Property body cannot be null.") + + public String getBody() { + return body; + } + public void setBody(String body) { + this.body = body; + } + + /** + * The footer of the email. + **/ + public EmailTemplate footer(String footer) { + + this.footer = footer; + return this; + } + + @ApiModelProperty(example = "WSO2 Identity Server Team", value = "The footer of the email.") + @JsonProperty("footer") + @Valid + public String getFooter() { + return footer; + } + public void setFooter(String footer) { + this.footer = footer; + } + + + + @Override + public boolean equals(java.lang.Object o) { + + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + EmailTemplate emailTemplate = (EmailTemplate) o; + return Objects.equals(this.contentType, emailTemplate.contentType) && + Objects.equals(this.subject, emailTemplate.subject) && + Objects.equals(this.body, emailTemplate.body) && + Objects.equals(this.footer, emailTemplate.footer); + } + + @Override + public int hashCode() { + return Objects.hash(contentType, subject, body, footer); + } + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append("class EmailTemplate {\n"); + + sb.append(" contentType: ").append(toIndentedString(contentType)).append("\n"); + sb.append(" subject: ").append(toIndentedString(subject)).append("\n"); + sb.append(" body: ").append(toIndentedString(body)).append("\n"); + sb.append(" footer: ").append(toIndentedString(footer)).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.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/EmailTemplateWithID.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/EmailTemplateWithID.java new file mode 100644 index 0000000000..758785ca4b --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/EmailTemplateWithID.java @@ -0,0 +1,106 @@ +/* + * 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.rest.api.server.notification.template.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 org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.EmailTemplate; +import javax.validation.constraints.*; + + +import io.swagger.annotations.*; +import java.util.Objects; +import javax.validation.Valid; +import javax.xml.bind.annotation.*; + +public class EmailTemplateWithID extends EmailTemplate { + + private String locale; + + /** + * Locale of the email template. + **/ + public EmailTemplateWithID locale(String locale) { + + this.locale = locale; + return this; + } + + @ApiModelProperty(example = "en_US", required = true, value = "Locale of the email template.") + @JsonProperty("locale") + @Valid + @NotNull(message = "Property locale cannot be null.") + + public String getLocale() { + return locale; + } + public void setLocale(String locale) { + this.locale = locale; + } + + + + @Override + public boolean equals(java.lang.Object o) { + + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + if (!super.equals(o)) { + return false; + } + + EmailTemplateWithID emailTemplateWithID = (EmailTemplateWithID) o; + return Objects.equals(this.locale, emailTemplateWithID.locale); + } + + @Override + public int hashCode() { + return Objects.hash(locale); + } + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append("class EmailTemplateWithID {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append(" locale: ").append(toIndentedString(locale)).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.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/Error.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/Error.java new file mode 100644 index 0000000000..2ae19eb2ca --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/Error.java @@ -0,0 +1,165 @@ +/* + * 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.rest.api.server.notification.template.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; + + /** + **/ + public Error code(String code) { + + this.code = code; + return this; + } + + @ApiModelProperty(example = "NTM-50000", required = true, value = "") + @JsonProperty("code") + @Valid + @NotNull(message = "Property code cannot be null.") + + public String getCode() { + return code; + } + public void setCode(String code) { + this.code = code; + } + + /** + **/ + public Error message(String message) { + + this.message = message; + return this; + } + + @ApiModelProperty(example = "Some Error Message", required = true, value = "") + @JsonProperty("message") + @Valid + @NotNull(message = "Property message cannot be null.") + + public String getMessage() { + return message; + } + public void setMessage(String message) { + this.message = message; + } + + /** + **/ + public Error description(String description) { + + this.description = description; + return this; + } + + @ApiModelProperty(example = "Some Error Description", value = "") + @JsonProperty("description") + @Valid + public String getDescription() { + return description; + } + public void setDescription(String description) { + this.description = description; + } + + /** + **/ + public Error traceId(String traceId) { + + this.traceId = traceId; + return this; + } + + @ApiModelProperty(example = "TR0001", value = "") + @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.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/SMSTemplate.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/SMSTemplate.java new file mode 100644 index 0000000000..788fce7c25 --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/SMSTemplate.java @@ -0,0 +1,101 @@ +/* + * 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.rest.api.server.notification.template.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 SMSTemplate { + + private String body; + + /** + * The body of the SMS. + **/ + public SMSTemplate body(String body) { + + this.body = body; + return this; + } + + @ApiModelProperty(example = "SMS Body", required = true, value = "The body of the SMS.") + @JsonProperty("body") + @Valid + @NotNull(message = "Property body cannot be null.") + + public String getBody() { + return body; + } + public void setBody(String body) { + this.body = body; + } + + + + @Override + public boolean equals(java.lang.Object o) { + + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + SMSTemplate smSTemplate = (SMSTemplate) o; + return Objects.equals(this.body, smSTemplate.body); + } + + @Override + public int hashCode() { + return Objects.hash(body); + } + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append("class SMSTemplate {\n"); + + sb.append(" body: ").append(toIndentedString(body)).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.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/SMSTemplateWithID.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/SMSTemplateWithID.java new file mode 100644 index 0000000000..406165c35e --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/SMSTemplateWithID.java @@ -0,0 +1,106 @@ +/* + * 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.rest.api.server.notification.template.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 org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SMSTemplate; +import javax.validation.constraints.*; + + +import io.swagger.annotations.*; +import java.util.Objects; +import javax.validation.Valid; +import javax.xml.bind.annotation.*; + +public class SMSTemplateWithID extends SMSTemplate { + + private String locale; + + /** + * Locale of the SMS template. + **/ + public SMSTemplateWithID locale(String locale) { + + this.locale = locale; + return this; + } + + @ApiModelProperty(example = "en_US", required = true, value = "Locale of the SMS template.") + @JsonProperty("locale") + @Valid + @NotNull(message = "Property locale cannot be null.") + + public String getLocale() { + return locale; + } + public void setLocale(String locale) { + this.locale = locale; + } + + + + @Override + public boolean equals(java.lang.Object o) { + + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + if (!super.equals(o)) { + return false; + } + + SMSTemplateWithID smSTemplateWithID = (SMSTemplateWithID) o; + return Objects.equals(this.locale, smSTemplateWithID.locale); + } + + @Override + public int hashCode() { + return Objects.hash(locale); + } + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append("class SMSTemplateWithID {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append(" locale: ").append(toIndentedString(locale)).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.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/SimpleTemplate.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/SimpleTemplate.java new file mode 100644 index 0000000000..e47e891a59 --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/SimpleTemplate.java @@ -0,0 +1,125 @@ +/* + * 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.rest.api.server.notification.template.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 SimpleTemplate { + + private String locale; + private String self; + + /** + * Locale of the template. + **/ + public SimpleTemplate locale(String locale) { + + this.locale = locale; + return this; + } + + @ApiModelProperty(example = "en_US", required = true, value = "Locale of the template.") + @JsonProperty("locale") + @Valid + @NotNull(message = "Property locale cannot be null.") + + public String getLocale() { + return locale; + } + public void setLocale(String locale) { + this.locale = locale; + } + + /** + * Location of the created/updated resource. + **/ + public SimpleTemplate self(String self) { + + this.self = self; + return this; + } + + @ApiModelProperty(example = "/t/{tenant-domain}/api/server/v1/notification/sms/template-types/YWNjb3VudGNvbmZpcm1hdGlvbg/templates/en_US", required = true, value = "Location of the created/updated resource.") + @JsonProperty("self") + @Valid + @NotNull(message = "Property self cannot be null.") + + public String getSelf() { + return self; + } + public void setSelf(String self) { + this.self = self; + } + + + + @Override + public boolean equals(java.lang.Object o) { + + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + SimpleTemplate simpleTemplate = (SimpleTemplate) o; + return Objects.equals(this.locale, simpleTemplate.locale) && + Objects.equals(this.self, simpleTemplate.self); + } + + @Override + public int hashCode() { + return Objects.hash(locale, self); + } + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append("class SimpleTemplate {\n"); + + sb.append(" locale: ").append(toIndentedString(locale)).append("\n"); + sb.append(" self: ").append(toIndentedString(self)).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.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/TemplateType.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/TemplateType.java new file mode 100644 index 0000000000..a054eb72c2 --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/TemplateType.java @@ -0,0 +1,125 @@ +/* + * 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.rest.api.server.notification.template.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 TemplateType { + + private String displayName; + private String self; + + /** + * Display name of the email template type. + **/ + public TemplateType displayName(String displayName) { + + this.displayName = displayName; + return this; + } + + @ApiModelProperty(example = "Account Confirmation", required = true, value = "Display name of the email template type.") + @JsonProperty("displayName") + @Valid + @NotNull(message = "Property displayName cannot be null.") + + public String getDisplayName() { + return displayName; + } + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + /** + * Location of the created/updated resource. + **/ + public TemplateType self(String self) { + + this.self = self; + return this; + } + + @ApiModelProperty(example = "/t/{tenant-domain}/api/server/v1/notification/email/template-types/YWNjb3VudGNvbmZpcm1hdGlvbg", required = true, value = "Location of the created/updated resource.") + @JsonProperty("self") + @Valid + @NotNull(message = "Property self cannot be null.") + + public String getSelf() { + return self; + } + public void setSelf(String self) { + this.self = self; + } + + + + @Override + public boolean equals(java.lang.Object o) { + + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TemplateType templateType = (TemplateType) o; + return Objects.equals(this.displayName, templateType.displayName) && + Objects.equals(this.self, templateType.self); + } + + @Override + public int hashCode() { + return Objects.hash(displayName, self); + } + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append("class TemplateType {\n"); + + sb.append(" displayName: ").append(toIndentedString(displayName)).append("\n"); + sb.append(" self: ").append(toIndentedString(self)).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.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/TemplateTypeOverview.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/TemplateTypeOverview.java new file mode 100644 index 0000000000..1b60b13fbc --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/TemplateTypeOverview.java @@ -0,0 +1,101 @@ +/* + * 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.rest.api.server.notification.template.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 TemplateTypeOverview { + + private String displayName; + + /** + * Display name of the template type. + **/ + public TemplateTypeOverview displayName(String displayName) { + + this.displayName = displayName; + return this; + } + + @ApiModelProperty(example = "Account Confirmation", required = true, value = "Display name of the template type.") + @JsonProperty("displayName") + @Valid + @NotNull(message = "Property displayName cannot be null.") + + public String getDisplayName() { + return displayName; + } + public void setDisplayName(String displayName) { + this.displayName = displayName; + } + + + + @Override + public boolean equals(java.lang.Object o) { + + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + TemplateTypeOverview templateTypeOverview = (TemplateTypeOverview) o; + return Objects.equals(this.displayName, templateTypeOverview.displayName); + } + + @Override + public int hashCode() { + return Objects.hash(displayName); + } + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append("class TemplateTypeOverview {\n"); + + sb.append(" displayName: ").append(toIndentedString(displayName)).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.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/TemplateTypeWithID.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/TemplateTypeWithID.java new file mode 100644 index 0000000000..dccfb2930f --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/gen/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/model/TemplateTypeWithID.java @@ -0,0 +1,106 @@ +/* + * 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.rest.api.server.notification.template.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 org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.TemplateType; +import javax.validation.constraints.*; + + +import io.swagger.annotations.*; +import java.util.Objects; +import javax.validation.Valid; +import javax.xml.bind.annotation.*; + +public class TemplateTypeWithID extends TemplateType { + + private String id; + + /** + * Unique ID of the template type. + **/ + public TemplateTypeWithID id(String id) { + + this.id = id; + return this; + } + + @ApiModelProperty(example = "YWNjb3VudGNvbmZpcm1hdGlvbg", required = true, value = "Unique ID of the template type.") + @JsonProperty("id") + @Valid + @NotNull(message = "Property id cannot be null.") + + public String getId() { + return id; + } + public void setId(String id) { + this.id = id; + } + + + + @Override + public boolean equals(java.lang.Object o) { + + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + if (!super.equals(o)) { + return false; + } + + TemplateTypeWithID templateTypeWithID = (TemplateTypeWithID) o; + return Objects.equals(this.id, templateTypeWithID.id); + } + + @Override + public int hashCode() { + return Objects.hash(id); + } + + @Override + public String toString() { + + StringBuilder sb = new StringBuilder(); + sb.append("class TemplateTypeWithID {\n"); + sb.append(" ").append(toIndentedString(super.toString())).append("\n"); + sb.append(" id: ").append(toIndentedString(id)).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.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/core/ApplicationTemplatesService.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/core/ApplicationTemplatesService.java new file mode 100644 index 0000000000..0a936bd843 --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/core/ApplicationTemplatesService.java @@ -0,0 +1,305 @@ +/* + * Copyright (c) 2024, WSO2 LLC. (http://www.wso2.org) All Rights Reserved. + * + * 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.rest.api.server.notification.template.v1.core; + +import org.wso2.carbon.identity.api.server.notification.template.common.Constants; +import org.wso2.carbon.identity.api.server.notification.template.common.TemplatesServiceHolder; +import org.wso2.carbon.identity.governance.exceptions.notiification.NotificationTemplateManagerException; +import org.wso2.carbon.identity.governance.model.NotificationTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.EmailTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.EmailTemplateWithID; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SMSTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SMSTemplateWithID; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SimpleTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.util.Util; + +import java.util.List; + +import static org.wso2.carbon.identity.api.server.common.ContextLoader.getTenantDomainFromContext; +import static org.wso2.carbon.identity.api.server.notification.template.common.Constants.APP_TEMPLATES_PATH; +import static org.wso2.carbon.identity.api.server.notification.template.common.Constants.PATH_SEPARATOR; + +/** + * Service class for application email templates. + */ +public class ApplicationTemplatesService { + + /** + * Adds a new application email template to the given template type. Template ID should not exist in the system. + * + * @param templateTypeId Template type in which the template should be added. + * @param emailTemplateWithID New email template. + * @param applicationUuid Application UUID. + * @return Location of the newly created template if successful, 409 if template already exists, 500 otherwise. + */ + public SimpleTemplate addEmailTemplate(String templateTypeId, EmailTemplateWithID emailTemplateWithID, + String applicationUuid) { + + try { + NotificationTemplate notificationTemplate = Util.buildNotificationTemplateWithEmailTemplateWithID( + templateTypeId, emailTemplateWithID); + TemplatesServiceHolder.getNotificationTemplateManager().addNotificationTemplate(notificationTemplate, + getTenantDomainFromContext(), applicationUuid); + + // Create and send the location of the created object as the response. + SimpleTemplate simpleEmailTemplate = new SimpleTemplate(); + simpleEmailTemplate.setSelf(getTemplateLocation(templateTypeId, applicationUuid, + notificationTemplate.getLocale(), Constants.NOTIFICATION_CHANNEL_EMAIL)); + simpleEmailTemplate.setLocale(notificationTemplate.getLocale()); + return simpleEmailTemplate; + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, Constants.ErrorMessage.ERROR_ERROR_ADDING_TEMPLATE); + } + } + /** + * Adds a new application SMS template to the given template type. Template ID should not exist in the system. + * + * @param templateTypeId Template type in which the template should be added. + * @param smsTemplateWithID New SMS template. + * @param applicationUuid Application UUID. + * @return Location of the newly created template if successful, 409 if template already exists, 500 otherwise. + */ + public SimpleTemplate addSMSTemplate(String templateTypeId, SMSTemplateWithID smsTemplateWithID, + String applicationUuid) { + + try { + NotificationTemplate notificationTemplate = Util.buildNotificationTemplateWithSMSTemplateWithID( + templateTypeId, smsTemplateWithID); + TemplatesServiceHolder.getNotificationTemplateManager().addNotificationTemplate(notificationTemplate, + getTenantDomainFromContext(), applicationUuid); + + // Create and send the location of the created object as the response. + SimpleTemplate simpleEmailTemplate = new SimpleTemplate(); + simpleEmailTemplate.setSelf(getTemplateLocation(templateTypeId, applicationUuid, + notificationTemplate.getLocale(), Constants.NOTIFICATION_CHANNEL_SMS)); + simpleEmailTemplate.setLocale(notificationTemplate.getLocale()); + return simpleEmailTemplate; + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, Constants.ErrorMessage.ERROR_ERROR_ADDING_TEMPLATE); + } + } + + /** + * Retrieves the list of application email templates of the given template type. + * + * @param templateTypeId Template type ID. + * @param applicationUuid Application UUID. + * @return List of email templates. + */ + public List getTemplatesListOfEmailTemplateType(String templateTypeId, + String applicationUuid) { + + String templateTypeDisplayName = Util.decodeTemplateTypeId(templateTypeId); + try { + List emailTemplates = TemplatesServiceHolder.getNotificationTemplateManager() + .getNotificationTemplatesOfType(Constants.NOTIFICATION_CHANNEL_EMAIL, templateTypeDisplayName, + getTenantDomainFromContext(), applicationUuid); + return Util.buildEmailTemplateWithIDList(emailTemplates); + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, + Constants.ErrorMessage.ERROR_ERROR_RETRIEVING_TEMPLATE_TYPE); + } + } + + /** + * Retrieves the list of application SMS templates of the given template type. + * + * @param templateTypeId Template type ID. + * @param applicationUuid Application UUID. + * @return List of SMS templates. + */ + public List getTemplatesListOfSMSTemplateType(String templateTypeId, + String applicationUuid) { + + String templateTypeDisplayName = Util.decodeTemplateTypeId(templateTypeId); + try { + List smsTemplates = TemplatesServiceHolder.getNotificationTemplateManager() + .getNotificationTemplatesOfType(Constants.NOTIFICATION_CHANNEL_SMS, templateTypeDisplayName, + getTenantDomainFromContext(), applicationUuid); + return Util.buildSMSTemplateWithIDList(smsTemplates); + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, + Constants.ErrorMessage.ERROR_ERROR_RETRIEVING_TEMPLATE_TYPE); + } + } + + /** + * Retrieves the application email template of the given template type and locale. + * + * @param templateTypeId Template type ID. + * @param templateId Template ID. + * @param applicationUuid Application UUID. + * @return Email template. + */ + public EmailTemplateWithID getEmailTemplate(String templateTypeId, String templateId, String applicationUuid) { + + try { + String templateTypeDisplayName = Util.decodeTemplateTypeId(templateTypeId); + NotificationTemplate internalEmailTemplate = TemplatesServiceHolder.getNotificationTemplateManager(). + getNotificationTemplate(Constants.NOTIFICATION_CHANNEL_EMAIL, templateTypeDisplayName, templateId, + getTenantDomainFromContext(), applicationUuid); + // NotificationTemplateManager sends the default template if no matching template found. + // We need to check for the locale specifically. + if (!internalEmailTemplate.getLocale().equals(templateId)) { + throw Util.handleError(Constants.ErrorMessage.ERROR_TEMPLATE_NOT_FOUND); + } else { + return Util.buildEmailTemplateWithID(internalEmailTemplate); + } + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, Constants.ErrorMessage.ERROR_ERROR_RETRIEVING_TEMPLATE); + } + } + + /** + * Retrieves the application SMS template of the given template type and locale. + * + * @param templateTypeId Template type ID. + * @param templateId Template ID. + * @param applicationUuid Application UUID. + * @return SMS template. + */ + public SMSTemplateWithID getSMSTemplate(String templateTypeId, String templateId, String applicationUuid) { + + try { + String templateTypeDisplayName = Util.decodeTemplateTypeId(templateTypeId); + NotificationTemplate internalEmailTemplate = TemplatesServiceHolder.getNotificationTemplateManager(). + getNotificationTemplate(Constants.NOTIFICATION_CHANNEL_SMS, templateTypeDisplayName, templateId, + getTenantDomainFromContext(), applicationUuid); + // NotificationTemplateManager sends the default template if no matching template found. + // We need to check for the locale specifically. + if (!internalEmailTemplate.getLocale().equals(templateId)) { + throw Util.handleError(Constants.ErrorMessage.ERROR_TEMPLATE_NOT_FOUND); + } else { + return Util.buildSMSTemplateWithID(internalEmailTemplate); + } + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, Constants.ErrorMessage.ERROR_ERROR_RETRIEVING_TEMPLATE); + } + } + + /** + * Updates the application email template of the given template type and locale. + * + * @param templateTypeId Template type ID. + * @param templateId Template ID. + * @param emailTemplate Updated email template. + * @param applicationUuid Application UUID. + */ + public void updateEmailTemplate(String templateTypeId, String templateId, EmailTemplate emailTemplate, + String applicationUuid) { + + EmailTemplateWithID emailTemplateWithID = + Util.buildEmailTemplateWithIdUsingEmailTemplate(emailTemplate, templateId); + try { + NotificationTemplate notificationTemplate = Util.buildNotificationTemplateWithEmailTemplateWithID( + templateTypeId, emailTemplateWithID); + TemplatesServiceHolder.getNotificationTemplateManager().updateNotificationTemplate(notificationTemplate, + getTenantDomainFromContext(), applicationUuid); + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, Constants.ErrorMessage.ERROR_ERROR_UPDATING_TEMPLATE); + } + } + + /** + * Updates the application SMS template of the given template type and locale. + * + * @param templateTypeId Template type ID. + * @param templateId Template ID. + * @param smsTemplate Updated SMS template. + * @param applicationUuid Application UUID. + */ + public void updateSMSTemplate(String templateTypeId, String templateId, SMSTemplate smsTemplate, + String applicationUuid) { + + SMSTemplateWithID smsTemplateWithID = + Util.buildSMSTemplateWithIdUsingSMSTemplate(smsTemplate, templateId); + try { + NotificationTemplate notificationTemplate = Util.buildNotificationTemplateWithSMSTemplateWithID( + templateTypeId, smsTemplateWithID); + TemplatesServiceHolder.getNotificationTemplateManager().updateNotificationTemplate(notificationTemplate, + getTenantDomainFromContext(), applicationUuid); + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, Constants.ErrorMessage.ERROR_ERROR_UPDATING_TEMPLATE); + } + } + + /** + * Deletes the application email template of the given template type and locale. + * + * @param templateTypeId Template type ID. + * @param locale Template locale. + * @param applicationUuid Application UUID. + */ + public void deleteEmailTemplate(String templateTypeId, String locale, String applicationUuid) { + + String templateTypeDisplayName = Util.decodeTemplateTypeId(templateTypeId); + try { + Util.assertTemplateTypeExistence(Constants.NOTIFICATION_CHANNEL_EMAIL, templateTypeDisplayName); + boolean notificationTemplateExists = TemplatesServiceHolder.getNotificationTemplateManager() + .isNotificationTemplateExists(Constants.NOTIFICATION_CHANNEL_EMAIL, templateTypeDisplayName, + locale, getTenantDomainFromContext(), applicationUuid); + if (notificationTemplateExists) { + TemplatesServiceHolder.getNotificationTemplateManager().deleteNotificationTemplate( + Constants.NOTIFICATION_CHANNEL_EMAIL, templateTypeDisplayName, locale, + getTenantDomainFromContext(), applicationUuid); + } else { + throw Util.handleError(Constants.ErrorMessage.ERROR_TEMPLATE_NOT_FOUND); + } + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, + Constants.ErrorMessage.ERROR_ERROR_DELETING_EMAIL_TEMPLATE); + } + } + + /** + * Deletes the application SMS template of the given template type and locale. + * + * @param templateTypeId Template type ID. + * @param locale Template ID. + * @param applicationUuid Application UUID. + */ + public void deleteSMSTemplate(String templateTypeId, String locale, String applicationUuid) { + + String templateTypeDisplayName = Util.decodeTemplateTypeId(templateTypeId); + try { + Util.assertTemplateTypeExistence(Constants.NOTIFICATION_CHANNEL_SMS, templateTypeDisplayName); + boolean notificationTemplateExists = TemplatesServiceHolder.getNotificationTemplateManager() + .isNotificationTemplateExists(Constants.NOTIFICATION_CHANNEL_SMS, templateTypeDisplayName, + locale, getTenantDomainFromContext(), applicationUuid); + if (notificationTemplateExists) { + TemplatesServiceHolder.getNotificationTemplateManager().deleteNotificationTemplate( + Constants.NOTIFICATION_CHANNEL_SMS, templateTypeDisplayName, locale, + getTenantDomainFromContext(), applicationUuid); + } else { + throw Util.handleError(Constants.ErrorMessage.ERROR_TEMPLATE_NOT_FOUND); + } + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, + Constants.ErrorMessage.ERROR_ERROR_DELETING_SMS_TEMPLATE); + } + } + + private String getTemplateLocation(String templateTypeId, String applicationUuid, String locale, + String notificationType) { + + String templateLocation = Util.getTemplateTypeLocation(templateTypeId, notificationType); + return templateLocation + PATH_SEPARATOR + APP_TEMPLATES_PATH + PATH_SEPARATOR + applicationUuid + + PATH_SEPARATOR + locale; + } +} diff --git a/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/core/OrganizationTemplatesService.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/core/OrganizationTemplatesService.java new file mode 100644 index 0000000000..fffc2429db --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/core/OrganizationTemplatesService.java @@ -0,0 +1,220 @@ +/* + * Copyright (c) 2024, WSO2 LLC. (http://www.wso2.org) All Rights Reserved. + * + * 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.rest.api.server.notification.template.v1.core; + +import org.wso2.carbon.identity.api.server.notification.template.common.Constants; +import org.wso2.carbon.identity.api.server.notification.template.common.TemplatesServiceHolder; +import org.wso2.carbon.identity.governance.exceptions.notiification.NotificationTemplateManagerException; +import org.wso2.carbon.identity.governance.model.NotificationTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.EmailTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.EmailTemplateWithID; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SMSTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SMSTemplateWithID; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SimpleTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.util.Util; + +import java.util.List; + +import static org.wso2.carbon.identity.api.server.common.ContextLoader.getTenantDomainFromContext; + +/** + * This is the service implementation class for notification template management related operations. + */ +public class OrganizationTemplatesService { + + public SimpleTemplate addEmailTemplate(String templateTypeId, EmailTemplateWithID emailTemplateWithID) { + + try { + NotificationTemplate notificationTemplate = Util.buildNotificationTemplateWithEmailTemplateWithID( + templateTypeId, emailTemplateWithID); + TemplatesServiceHolder.getNotificationTemplateManager().addNotificationTemplate(notificationTemplate, + getTenantDomainFromContext(), null); + + // Create and send the location of the created object as the response. + SimpleTemplate simpleEmailTemplate = new SimpleTemplate(); + simpleEmailTemplate.setSelf(getTemplateLocation( + templateTypeId, notificationTemplate.getLocale(), Constants.NOTIFICATION_CHANNEL_EMAIL)); + simpleEmailTemplate.setLocale(notificationTemplate.getLocale()); + return simpleEmailTemplate; + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, Constants.ErrorMessage.ERROR_ERROR_ADDING_TEMPLATE); + } + } + + public SimpleTemplate addSMSTemplate(String templateTypeId, SMSTemplateWithID smsTemplateWithID) { + + try { + NotificationTemplate notificationTemplate = Util.buildNotificationTemplateWithSMSTemplateWithID( + templateTypeId, smsTemplateWithID); + TemplatesServiceHolder.getNotificationTemplateManager().addNotificationTemplate(notificationTemplate, + getTenantDomainFromContext(), null); + + // Create and send the location of the created object as the response. + SimpleTemplate simpleEmailTemplate = new SimpleTemplate(); + simpleEmailTemplate.setSelf(getTemplateLocation( + templateTypeId, notificationTemplate.getLocale(), Constants.NOTIFICATION_CHANNEL_SMS)); + simpleEmailTemplate.setLocale(notificationTemplate.getLocale()); + return simpleEmailTemplate; + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, Constants.ErrorMessage.ERROR_ERROR_ADDING_TEMPLATE); + } + } + + public List getTemplatesListOfEmailTemplateType(String templateTypeId) { + + String templateTypeDisplayName = Util.decodeTemplateTypeId(templateTypeId); + try { + List emailTemplates = TemplatesServiceHolder.getNotificationTemplateManager() + .getNotificationTemplatesOfType(Constants.NOTIFICATION_CHANNEL_EMAIL, templateTypeDisplayName, + getTenantDomainFromContext()); + return Util.buildEmailTemplateWithIDList(emailTemplates); + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, + Constants.ErrorMessage.ERROR_ERROR_RETRIEVING_TEMPLATE_TYPE); + } + } + + public List getTemplatesListOfSMSTemplateType(String templateTypeId) { + + String templateTypeDisplayName = Util.decodeTemplateTypeId(templateTypeId); + try { + List smsTemplates = TemplatesServiceHolder.getNotificationTemplateManager() + .getNotificationTemplatesOfType(Constants.NOTIFICATION_CHANNEL_SMS, templateTypeDisplayName, + getTenantDomainFromContext()); + return Util.buildSMSTemplateWithIDList(smsTemplates); + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, + Constants.ErrorMessage.ERROR_ERROR_RETRIEVING_TEMPLATE_TYPE); + } + } + + public EmailTemplateWithID getEmailTemplate(String templateTypeId, String templateId) { + + try { + String templateTypeDisplayName = Util.decodeTemplateTypeId(templateTypeId); + NotificationTemplate internalEmailTemplate = TemplatesServiceHolder.getNotificationTemplateManager(). + getNotificationTemplate(Constants.NOTIFICATION_CHANNEL_EMAIL, templateTypeDisplayName, templateId, + getTenantDomainFromContext()); + // NotificationTemplateManager sends the default template if no matching template found. + // We need to check for the locale specifically. + if (!internalEmailTemplate.getLocale().equals(templateId)) { + throw Util.handleError(Constants.ErrorMessage.ERROR_TEMPLATE_NOT_FOUND); + } else { + return Util.buildEmailTemplateWithID(internalEmailTemplate); + } + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, Constants.ErrorMessage.ERROR_ERROR_RETRIEVING_TEMPLATE); + } + } + + public SMSTemplateWithID getSMSTemplate(String templateTypeId, String templateId) { + + try { + String templateTypeDisplayName = Util.decodeTemplateTypeId(templateTypeId); + NotificationTemplate internalEmailTemplate = TemplatesServiceHolder.getNotificationTemplateManager(). + getNotificationTemplate(Constants.NOTIFICATION_CHANNEL_SMS, templateTypeDisplayName, templateId, + getTenantDomainFromContext()); + // NotificationTemplateManager sends the default template if no matching template found. + // We need to check for the locale specifically. + if (!internalEmailTemplate.getLocale().equals(templateId)) { + throw Util.handleError(Constants.ErrorMessage.ERROR_TEMPLATE_NOT_FOUND); + } else { + return Util.buildSMSTemplateWithID(internalEmailTemplate); + } + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, Constants.ErrorMessage.ERROR_ERROR_RETRIEVING_TEMPLATE); + } + } + + public void updateEmailTemplate(String templateTypeId, String locale, EmailTemplate emailTemplate) { + + EmailTemplateWithID emailTemplateWithID = + Util.buildEmailTemplateWithIdUsingEmailTemplate(emailTemplate, locale); + try { + NotificationTemplate notificationTemplate = Util.buildNotificationTemplateWithEmailTemplateWithID( + templateTypeId, emailTemplateWithID); + TemplatesServiceHolder.getNotificationTemplateManager().updateNotificationTemplate(notificationTemplate, + getTenantDomainFromContext(), null); + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, Constants.ErrorMessage.ERROR_ERROR_UPDATING_TEMPLATE); + } + } + + public void updateSMSTemplate(String templateTypeId, String locale, SMSTemplate smsTemplate) { + + SMSTemplateWithID smsTemplateWithID = + Util.buildSMSTemplateWithIdUsingSMSTemplate(smsTemplate, locale); + try { + NotificationTemplate notificationTemplate = Util.buildNotificationTemplateWithSMSTemplateWithID( + templateTypeId, smsTemplateWithID); + TemplatesServiceHolder.getNotificationTemplateManager().updateNotificationTemplate(notificationTemplate, + getTenantDomainFromContext(), null); + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, Constants.ErrorMessage.ERROR_ERROR_UPDATING_TEMPLATE); + } + } + + public void deleteEmailTemplate(String templateTypeId, String locale) { + + String templateTypeDisplayName = Util.decodeTemplateTypeId(templateTypeId); + try { + Util.assertTemplateTypeExistence(Constants.NOTIFICATION_CHANNEL_EMAIL, templateTypeDisplayName); + boolean notificationTemplateExists = TemplatesServiceHolder.getNotificationTemplateManager() + .isNotificationTemplateExists(Constants.NOTIFICATION_CHANNEL_EMAIL, templateTypeDisplayName, + locale, getTenantDomainFromContext()); + if (notificationTemplateExists) { + TemplatesServiceHolder.getNotificationTemplateManager().deleteNotificationTemplate( + Constants.NOTIFICATION_CHANNEL_EMAIL, templateTypeDisplayName, locale, + getTenantDomainFromContext()); + } else { + throw Util.handleError(Constants.ErrorMessage.ERROR_TEMPLATE_NOT_FOUND); + } + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, + Constants.ErrorMessage.ERROR_ERROR_DELETING_EMAIL_TEMPLATE); + } + } + + public void deleteSMSTemplate(String templateTypeId, String locale) { + + String templateTypeDisplayName = Util.decodeTemplateTypeId(templateTypeId); + try { + Util.assertTemplateTypeExistence(Constants.NOTIFICATION_CHANNEL_SMS, templateTypeDisplayName); + boolean notificationTemplateExists = TemplatesServiceHolder.getNotificationTemplateManager() + .isNotificationTemplateExists(Constants.NOTIFICATION_CHANNEL_SMS, templateTypeDisplayName, + locale, getTenantDomainFromContext()); + if (notificationTemplateExists) { + TemplatesServiceHolder.getNotificationTemplateManager().deleteNotificationTemplate( + Constants.NOTIFICATION_CHANNEL_SMS, templateTypeDisplayName, locale, + getTenantDomainFromContext()); + } else { + throw Util.handleError(Constants.ErrorMessage.ERROR_TEMPLATE_NOT_FOUND); + } + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, + Constants.ErrorMessage.ERROR_ERROR_DELETING_SMS_TEMPLATE); + } + } + + private String getTemplateLocation(String templateTypeId, String templateId, String type) { + + String templateLocation = Util.getTemplateTypeLocation(templateTypeId, type); + return templateLocation + Constants.ORG_TEMPLATES_PATH + Constants.PATH_SEPARATOR + templateId; + } +} diff --git a/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/core/TemplateTypeService.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/core/TemplateTypeService.java new file mode 100644 index 0000000000..96095266bd --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/core/TemplateTypeService.java @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2024, WSO2 LLC. (http://www.wso2.org) All Rights Reserved. + * + * 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.rest.api.server.notification.template.v1.core; + +import org.wso2.carbon.identity.api.server.common.error.APIError; +import org.wso2.carbon.identity.api.server.notification.template.common.Constants; +import org.wso2.carbon.identity.api.server.notification.template.common.TemplatesServiceHolder; +import org.wso2.carbon.identity.governance.exceptions.notiification.NotificationTemplateManagerException; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.TemplateTypeOverview; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.TemplateTypeWithID; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.util.Util; + +import java.util.ArrayList; +import java.util.List; + +import static org.wso2.carbon.identity.api.server.common.ContextLoader.getTenantDomainFromContext; +import static org.wso2.carbon.identity.rest.api.server.notification.template.v1.util.Util.getTemplateTypeLocation; + +/** + * Service class for the template types. + */ +public class TemplateTypeService { + + /** + * Add a new template type for a given channel. + * + * @param notificationChannel Notification channel (Eg: sms, email). + * @param templateTypeOverview Template type overview. + * @return TemplateTypeWithID object. + */ + public TemplateTypeWithID addNotificationTemplateType(String notificationChannel, + TemplateTypeOverview templateTypeOverview) { + + String templateTypeDisplayName = templateTypeOverview.getDisplayName(); + try { + TemplatesServiceHolder.getNotificationTemplateManager().addNotificationTemplateType(notificationChannel, + templateTypeDisplayName, getTenantDomainFromContext()); + // Build a response object and send if everything is successful. + TemplateTypeWithID response = new TemplateTypeWithID(); + response.setDisplayName(templateTypeDisplayName); + String templateTypeId = Util.resolveTemplateIdFromDisplayName(templateTypeDisplayName); + response.setId(templateTypeId); + response.setSelf(getTemplateTypeLocation(templateTypeId, notificationChannel)); + return response; + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, Constants.ErrorMessage.ERROR_ERROR_ADDING_TEMPLATE_TYPE); + } + } + + /** + * Get all available notification template types for a notification chanel in the tenant. + * + * @param notificationChannel Notification channel (Eg: sms, email). + * @return List of TemplateTypeWithID objects. + */ + public List getAllNotificationTemplateTypes(String notificationChannel) { + + try { + List templateTypes = TemplatesServiceHolder.getNotificationTemplateManager() + .getAllNotificationTemplateTypes(notificationChannel, getTenantDomainFromContext()); + List templateTypeWithIDs = new ArrayList<>(); + if (templateTypes != null) { + for (String emailTemplateType : templateTypes) { + TemplateTypeWithID templateTypeWithID = new TemplateTypeWithID(); + templateTypeWithID.setDisplayName(emailTemplateType); + String templateTypeId = Util.resolveTemplateIdFromDisplayName(emailTemplateType); + templateTypeWithID.setId(templateTypeId); + templateTypeWithID.setSelf( + getTemplateTypeLocation(templateTypeId, notificationChannel)); + templateTypeWithIDs.add(templateTypeWithID); + } + } + return templateTypeWithIDs; + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, + Constants.ErrorMessage.ERROR_ERROR_RETRIEVING_TEMPLATE_TYPES); + } + } + + /** + * Delete a notification template type from the tenant. + * + * @param notificationChannel Notification channel (Eg: sms, email). + * @param templateId ID of the template type. + */ + public void deleteNotificationTemplateType(String notificationChannel, String templateId) { + + String templateTypeDisplayName; + try { + templateTypeDisplayName = Util.decodeTemplateTypeId(templateId); + } catch (APIError e) { + // Ignoring the delete operation and return 204 response code, since the resource does not exist. + return; + } + try { + boolean isTemplateTypeExists = + TemplatesServiceHolder.getNotificationTemplateManager().isNotificationTemplateTypeExists( + notificationChannel, templateTypeDisplayName, getTenantDomainFromContext()); + if (isTemplateTypeExists) { + TemplatesServiceHolder.getNotificationTemplateManager().deleteNotificationTemplateType( + notificationChannel, templateTypeDisplayName, getTenantDomainFromContext()); + } else { + throw Util.handleError(Constants.ErrorMessage.ERROR_TEMPLATE_TYPE_NOT_FOUND); + } + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, + Constants.ErrorMessage.ERROR_ERROR_DELETING_TEMPLATE_TYPE); + } + } + + /** + * Get a specific notification template type. + * + * @param notificationChannel Notification channel (Eg: sms, email). + * @param templateTypeId ID of the template type. + * @return TemplateTypeWithID object. + */ + public TemplateTypeWithID getNotificationTemplateType(String notificationChannel, + String templateTypeId) { + + String templateTypeDisplayName = Util.decodeTemplateTypeId(templateTypeId); + try { + boolean isTemplateTypeExists = + TemplatesServiceHolder.getNotificationTemplateManager().isNotificationTemplateTypeExists( + notificationChannel, templateTypeDisplayName, getTenantDomainFromContext()); + if (isTemplateTypeExists) { + TemplateTypeWithID templateTypeWithID = new TemplateTypeWithID(); + templateTypeWithID.setDisplayName(templateTypeDisplayName); + templateTypeWithID.setId(templateTypeId); + templateTypeWithID.setSelf(getTemplateTypeLocation(templateTypeId, notificationChannel)); + return templateTypeWithID; + } else { + throw Util.handleError(Constants.ErrorMessage.ERROR_TEMPLATE_TYPE_NOT_FOUND); + } + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, + Constants.ErrorMessage.ERROR_ERROR_RETRIEVING_TEMPLATE); + } + } + +} diff --git a/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/impl/NotificationApiServiceImpl.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/impl/NotificationApiServiceImpl.java new file mode 100644 index 0000000000..176a640505 --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/impl/NotificationApiServiceImpl.java @@ -0,0 +1,291 @@ +/* + * 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.rest.api.server.notification.template.v1.impl; + + +import org.springframework.beans.factory.annotation.Autowired; +import org.wso2.carbon.identity.api.server.notification.template.common.Constants; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.NotificationApiService; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.core.ApplicationTemplatesService; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.core.OrganizationTemplatesService; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.core.TemplateTypeService; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.EmailTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.EmailTemplateWithID; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SMSTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SMSTemplateWithID; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SimpleTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.TemplateTypeOverview; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.TemplateTypeWithID; + +import java.net.URI; +import javax.ws.rs.core.Response; + +import static org.wso2.carbon.identity.api.server.common.Constants.V1_API_PATH_COMPONENT; +import static org.wso2.carbon.identity.api.server.common.ContextLoader.buildURIForHeader; +import static org.wso2.carbon.identity.api.server.notification.template.common.Constants.APP_TEMPLATES_PATH; +import static org.wso2.carbon.identity.api.server.notification.template.common. + Constants.NOTIFICATION_TEMPLATES_API_BASE_PATH_EMAIL; +import static org.wso2.carbon.identity.api.server.notification.template.common. + Constants.NOTIFICATION_TEMPLATES_API_BASE_PATH_SMS; +import static org.wso2.carbon.identity.api.server.notification.template.common. + Constants.NOTIFICATION_TEMPLATES_API_PATH; +import static org.wso2.carbon.identity.api.server.notification.template.common.Constants.ORG_TEMPLATES_PATH; +import static org.wso2.carbon.identity.api.server.notification.template.common.Constants.PATH_SEPARATOR; +import static org.wso2.carbon.identity.api.server.notification.template.common.Constants.TEMPLATE_TYPES_PATH; + +/** + * This is the service implementation class for notification template management related operations. + */ +public class NotificationApiServiceImpl implements NotificationApiService { + + @Autowired + private ApplicationTemplatesService applicationTemplatesService; + @Autowired + private OrganizationTemplatesService organizationTemplatesService; + @Autowired + private TemplateTypeService templateTypeService; + + @Override + public Response addAppEmailTemplate(String templateTypeId, String appUuid, + EmailTemplateWithID emailTemplateWithID) { + + SimpleTemplate simpleEmailTemplate = applicationTemplatesService.addEmailTemplate(templateTypeId, + emailTemplateWithID, appUuid); + URI headerLocation = buildURIForHeader(V1_API_PATH_COMPONENT + NOTIFICATION_TEMPLATES_API_PATH + + NOTIFICATION_TEMPLATES_API_BASE_PATH_EMAIL + TEMPLATE_TYPES_PATH + PATH_SEPARATOR + + templateTypeId + APP_TEMPLATES_PATH + PATH_SEPARATOR + appUuid + PATH_SEPARATOR + + simpleEmailTemplate.getLocale()); + return Response.created(headerLocation).entity(simpleEmailTemplate).build(); + } + + @Override + public Response addAppSMSTemplate(String templateTypeId, String appUuid, SMSTemplateWithID smSTemplateWithID) { + + SimpleTemplate simpleSMSTemplate = applicationTemplatesService.addSMSTemplate(templateTypeId, + smSTemplateWithID, appUuid); + URI headerLocation = buildURIForHeader(V1_API_PATH_COMPONENT + NOTIFICATION_TEMPLATES_API_PATH + + NOTIFICATION_TEMPLATES_API_BASE_PATH_SMS + TEMPLATE_TYPES_PATH + PATH_SEPARATOR + + templateTypeId + APP_TEMPLATES_PATH + PATH_SEPARATOR + appUuid + PATH_SEPARATOR + + smSTemplateWithID.getLocale()); + return Response.created(headerLocation).entity(simpleSMSTemplate).build(); + } + + @Override + public Response addEmailTemplateType(TemplateTypeOverview templateTypeOverview) { + + TemplateTypeWithID templateType = templateTypeService + .addNotificationTemplateType(Constants.NOTIFICATION_CHANNEL_EMAIL, templateTypeOverview); + URI headerLocation = buildURIForHeader( + V1_API_PATH_COMPONENT + NOTIFICATION_TEMPLATES_API_PATH + + NOTIFICATION_TEMPLATES_API_BASE_PATH_EMAIL + TEMPLATE_TYPES_PATH + + PATH_SEPARATOR + templateType.getId()); + return Response.created(headerLocation).entity(templateType).build(); + } + + @Override + public Response addOrgEmailTemplate(String templateTypeId, EmailTemplateWithID emailTemplateWithID) { + + SimpleTemplate simpleEmailTemplate = organizationTemplatesService.addEmailTemplate(templateTypeId, + emailTemplateWithID); + URI headerLocation = buildURIForHeader( + V1_API_PATH_COMPONENT + NOTIFICATION_TEMPLATES_API_PATH + + NOTIFICATION_TEMPLATES_API_BASE_PATH_EMAIL + PATH_SEPARATOR + templateTypeId + + ORG_TEMPLATES_PATH + PATH_SEPARATOR + simpleEmailTemplate.getLocale()); + return Response.created(headerLocation).entity(simpleEmailTemplate).build(); + } + + @Override + public Response addOrgSMSTemplate(String templateTypeId, SMSTemplateWithID smSTemplateWithID) { + + SimpleTemplate simpleSMSTemplate = organizationTemplatesService.addSMSTemplate(templateTypeId, + smSTemplateWithID); + URI headerLocation = buildURIForHeader( + V1_API_PATH_COMPONENT + NOTIFICATION_TEMPLATES_API_PATH + + NOTIFICATION_TEMPLATES_API_BASE_PATH_SMS + PATH_SEPARATOR + templateTypeId + + ORG_TEMPLATES_PATH + PATH_SEPARATOR + simpleSMSTemplate.getLocale()); + return Response.created(headerLocation).entity(simpleSMSTemplate).build(); + } + + @Override + public Response addSMSTemplateType(TemplateTypeOverview templateTypeOverview) { + + TemplateTypeWithID templateType = templateTypeService + .addNotificationTemplateType(Constants.NOTIFICATION_CHANNEL_SMS, templateTypeOverview); + URI headerLocation = buildURIForHeader( + V1_API_PATH_COMPONENT + NOTIFICATION_TEMPLATES_API_PATH + + NOTIFICATION_TEMPLATES_API_BASE_PATH_SMS + TEMPLATE_TYPES_PATH + + PATH_SEPARATOR + templateType.getId()); + return Response.created(headerLocation).entity(templateType).build(); + } + + @Override + public Response deleteAppEmailTemplate(String templateTypeId, String appUuid, String locale) { + + applicationTemplatesService.deleteEmailTemplate(templateTypeId, locale, appUuid); + return Response.noContent().build(); + } + + @Override + public Response deleteAppSMSTemplate(String templateTypeId, String appUuid, String locale) { + + applicationTemplatesService.deleteSMSTemplate(templateTypeId, locale, appUuid); + return Response.noContent().build(); + } + + @Override + public Response deleteEmailTemplateType(String templateTypeId) { + + templateTypeService.deleteNotificationTemplateType(Constants.NOTIFICATION_CHANNEL_EMAIL, templateTypeId); + return Response.noContent().build(); + } + + @Override + public Response deleteOrgEmailTemplate(String templateTypeId, String locale) { + + organizationTemplatesService.deleteEmailTemplate(templateTypeId, locale); + return Response.noContent().build(); + } + + @Override + public Response deleteOrgSMSTemplate(String templateTypeId, String locale) { + + organizationTemplatesService.deleteSMSTemplate(templateTypeId, locale); + return Response.noContent().build(); + } + + @Override + public Response deleteSMSTemplateType(String templateTypeId) { + + templateTypeService.deleteNotificationTemplateType(Constants.NOTIFICATION_CHANNEL_SMS, templateTypeId); + return Response.noContent().build(); + } + + @Override + public Response getAllEmailTemplateTypes() { + + return Response.ok().entity(templateTypeService + .getAllNotificationTemplateTypes(Constants.NOTIFICATION_CHANNEL_EMAIL)).build(); + } + + @Override + public Response getAllSMSTemplateTypes() { + + return Response.ok().entity(templateTypeService + .getAllNotificationTemplateTypes(Constants.NOTIFICATION_CHANNEL_SMS)).build(); + } + + @Override + public Response getAppEmailTemplate(String templateTypeId, String appUuid, String locale) { + + return Response.ok().entity(applicationTemplatesService.getEmailTemplate(templateTypeId, locale, appUuid)) + .build(); + } + + @Override + public Response getAppSMSTemplate(String templateTypeId, String appUuid, String locale) { + + return Response.ok().entity(applicationTemplatesService.getSMSTemplate(templateTypeId, locale, appUuid)) + .build(); + } + + @Override + public Response getAppTemplatesListOfEmailTemplateType(String templateTypeId, String appUuid) { + + return Response.ok().entity( + applicationTemplatesService.getTemplatesListOfEmailTemplateType(templateTypeId, appUuid)).build(); + } + + @Override + public Response getAppTemplatesListOfSMSTemplateType(String templateTypeId, String appUuid) { + + return Response.ok().entity( + applicationTemplatesService.getTemplatesListOfSMSTemplateType(templateTypeId, appUuid)).build(); + } + + @Override + public Response getEmailTemplateType(String templateTypeId) { + + return Response.ok().entity(templateTypeService.getNotificationTemplateType( + Constants.NOTIFICATION_CHANNEL_EMAIL, templateTypeId)).build(); + } + + @Override + public Response getOrgEmailTemplate(String templateTypeId, String locale) { + + return Response.ok().entity(organizationTemplatesService.getEmailTemplate(templateTypeId, locale)).build(); + } + + @Override + public Response getOrgSMSTemplate(String templateTypeId, String locale) { + + return Response.ok().entity(organizationTemplatesService.getSMSTemplate(templateTypeId, locale)).build(); + } + + @Override + public Response getOrgTemplatesListOfEmailTemplateType(String templateTypeId) { + + return Response.ok().entity(organizationTemplatesService.getTemplatesListOfEmailTemplateType(templateTypeId)) + .build(); + } + + @Override + public Response getOrgTemplatesListOfSMSTemplateType(String templateTypeId) { + + return Response.ok().entity(organizationTemplatesService.getTemplatesListOfSMSTemplateType(templateTypeId)) + .build(); + } + + @Override + public Response getSMSTemplateType(String templateTypeId) { + + return Response.ok().entity(templateTypeService.getNotificationTemplateType(Constants.NOTIFICATION_CHANNEL_SMS, + templateTypeId)).build(); + } + + @Override + public Response updateAppEmailTemplate(String templateTypeId, String appUuid, String locale, + EmailTemplate emailTemplate) { + + applicationTemplatesService.updateEmailTemplate(templateTypeId, locale, emailTemplate, appUuid); + return Response.ok().build(); + } + + @Override + public Response updateAppSMSTemplate(String templateTypeId, String appUuid, String locale, + SMSTemplate smsTemplate) { + + applicationTemplatesService.updateSMSTemplate(templateTypeId, locale, smsTemplate, appUuid); + return Response.ok().build(); + } + + @Override + public Response updateOrgEmailTemplate(String templateTypeId, String locale, + EmailTemplate emailTemplate) { + + organizationTemplatesService.updateEmailTemplate(templateTypeId, locale, emailTemplate); + return Response.ok().build(); + } + + @Override + public Response updateOrgSMSTemplate(String templateTypeId, String locale, SMSTemplate smsTemplate) { + + organizationTemplatesService.updateSMSTemplate(templateTypeId, locale, smsTemplate); + return Response.ok().build(); + } +} diff --git a/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/util/Util.java b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/util/Util.java new file mode 100644 index 0000000000..83f15392f6 --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/java/org/wso2/carbon/identity/rest/api/server/notification/template/v1/util/Util.java @@ -0,0 +1,334 @@ +/* + * Copyright (c) 2024, WSO2 LLC. (http://www.wso2.org) All Rights Reserved. + * + * 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.rest.api.server.notification.template.v1.util; + +import org.apache.commons.logging.Log; +import org.apache.commons.logging.LogFactory; +import org.wso2.carbon.email.mgt.util.I18nEmailUtil; +import org.wso2.carbon.identity.api.server.common.ContextLoader; +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.notification.template.common.Constants; +import org.wso2.carbon.identity.api.server.notification.template.common.TemplatesServiceHolder; +import org.wso2.carbon.identity.governance.exceptions.notiification.NotificationTemplateManagerClientException; +import org.wso2.carbon.identity.governance.exceptions.notiification.NotificationTemplateManagerException; +import org.wso2.carbon.identity.governance.exceptions.notiification.NotificationTemplateManagerServerException; +import org.wso2.carbon.identity.governance.model.NotificationTemplate; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.EmailTemplateWithID; +import org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SMSTemplateWithID; + +import java.util.ArrayList; +import java.util.List; +import javax.ws.rs.core.Response; + +import static org.wso2.carbon.identity.api.server.common.Constants.V1_API_PATH_COMPONENT; +import static org.wso2.carbon.identity.api.server.common.ContextLoader.getTenantDomainFromContext; +import static org.wso2.carbon.identity.api.server.common.Util.base64URLDecode; +import static org.wso2.carbon.identity.api.server.common.Util.base64URLEncode; +import static org.wso2.carbon.identity.api.server.notification.template.common.Constants.NOTIFICATION_CHANNEL_EMAIL; +import static org.wso2.carbon.identity.api.server.notification.template.common.Constants.NOTIFICATION_TEMPLATES_API_BASE_PATH_EMAIL; +import static org.wso2.carbon.identity.api.server.notification.template.common.Constants.NOTIFICATION_TEMPLATES_API_BASE_PATH_SMS; +import static org.wso2.carbon.identity.api.server.notification.template.common.Constants.NOTIFICATION_TEMPLATES_API_PATH; +import static org.wso2.carbon.identity.api.server.notification.template.common.Constants.PATH_SEPARATOR; +import static org.wso2.carbon.identity.api.server.notification.template.common.Constants.TEMPLATE_TYPES_PATH; + +/** + * Utility class for notification templates API + */ +public class Util { + + private static final Log log = LogFactory.getLog(Util.class); + + private static final String ERROR_CODE_DELIMITER = "-"; + + /** + * Converts a list of EmailTemplate objects to a list of NotificationTemplate objects. + * + * @param emailTemplates List of EmailTemplate objects. + * @return List of EmailTemplateWithID objects. + */ + public static List buildEmailTemplateWithIDList(List emailTemplates) { + + List emailTemplateWithIDs = new ArrayList<>(); + if (emailTemplates != null) { + for (NotificationTemplate emailTemplate : emailTemplates) { + EmailTemplateWithID emailTemplateWithID = new EmailTemplateWithID(); + emailTemplateWithID.setLocale(emailTemplate.getLocale()); + emailTemplateWithID.setContentType(emailTemplate.getContentType()); + emailTemplateWithID.setSubject(emailTemplate.getSubject()); + emailTemplateWithID.setBody(emailTemplate.getBody()); + emailTemplateWithID.setFooter(emailTemplate.getFooter()); + emailTemplateWithIDs.add(emailTemplateWithID); + } + } + return emailTemplateWithIDs; + } + + /** + * Converts a list of SMSTemplate objects to a list of SMSTemplateWithID objects. + * + * @param smsTemplates List of SMSTemplate objects. + * @return List of SMSTemplateWithID objects. + */ + public static List buildSMSTemplateWithIDList(List smsTemplates) { + + List smsTemplateWithIDs = new ArrayList<>(); + if (smsTemplates != null) { + for (NotificationTemplate smsTemplate : smsTemplates) { + SMSTemplateWithID emailTemplateWithID = new SMSTemplateWithID(); + emailTemplateWithID.setLocale(smsTemplate.getLocale()); + emailTemplateWithID.setBody(smsTemplate.getBody()); + smsTemplateWithIDs.add(emailTemplateWithID); + } + } + return smsTemplateWithIDs; + } + + /** + * Resolves templateID using the templateTypeDisplayName. + * + * @param templateTypeDisplayName Display name of the template type. + * @return templateID. + */ + public static String resolveTemplateIdFromDisplayName(String templateTypeDisplayName) { + + return base64URLEncode(templateTypeDisplayName); + } + + /** + * Decodes the template type ID. + * + * @param encodedTemplateTypeId Encoded template type ID. + * @return Decoded template type ID. + */ + public static String decodeTemplateTypeId(String encodedTemplateTypeId) { + + try { + return base64URLDecode(encodedTemplateTypeId); + } catch (Throwable e) { + throw handleError(Constants.ErrorMessage.ERROR_TEMPLATE_TYPE_NOT_FOUND); + } + } + + /** + * Handles the error and returns an APIError object. + * + * @param error Error message. + * @return APIError object. + */ + public static APIError handleError(Constants.ErrorMessage error) { + + return new APIError(error.getHttpStatus(), getErrorBuilder(error).build()); + } + + /** + * Handles the I18nEmailMgtException and returns an APIError object. + * + * @param exception I18nEmailMgtException. + * @param errorEnum Error message. + * @return APIError object. + */ + public static APIError handleNotificationTemplateManagerException(NotificationTemplateManagerException exception, + Constants.ErrorMessage errorEnum) { + + ErrorResponse errorResponse; + Response.Status status; + String errorCode = extractErrorCode(exception.getErrorCode()); + if (exception instanceof NotificationTemplateManagerServerException + && Constants.getNTMMappedErrorMessage(errorCode) != null) { + // Specific error with code is found. + Constants.ErrorMessage errorMessage = Constants.getNTMMappedErrorMessage(errorCode); + errorResponse = getErrorBuilder(errorMessage).build(log, exception, errorEnum.getDescription()); + status = errorMessage.getHttpStatus(); + } else if (exception instanceof NotificationTemplateManagerClientException) { + // Send client error with original exception message. + errorResponse = getErrorBuilder(errorEnum).build(log, exception.getMessage()); + errorResponse.setDescription(exception.getMessage()); + status = Response.Status.BAD_REQUEST; + } else { + // Server error + errorResponse = getErrorBuilder(errorEnum).build(log, exception, errorEnum.getDescription()); + status = Response.Status.INTERNAL_SERVER_ERROR; + } + return new APIError(status, errorResponse); + } + + /** + * Builds EmailTemplateWithID using NotificationTemplate. + * + * @param internalTemplate NotificationTemplate object. + * @return EmailTemplateWithID object. + */ + public static EmailTemplateWithID buildEmailTemplateWithID(NotificationTemplate internalTemplate) { + + EmailTemplateWithID templateWithID = new EmailTemplateWithID(); + templateWithID.setLocale(internalTemplate.getLocale()); + templateWithID.setContentType(internalTemplate.getContentType()); + templateWithID.setSubject(internalTemplate.getSubject()); + templateWithID.setBody(internalTemplate.getBody()); + templateWithID.setFooter(internalTemplate.getFooter()); + return templateWithID; + } + + /** + * Builds SMSTemplateWithID using NotificationTemplate. + * + * @param internalTemplate NotificationTemplate object. + * @return SMSTemplateWithID object. + */ + public static SMSTemplateWithID buildSMSTemplateWithID(NotificationTemplate internalTemplate) { + + SMSTemplateWithID templateWithID = new SMSTemplateWithID(); + templateWithID.setLocale(internalTemplate.getLocale()); + templateWithID.setBody(internalTemplate.getBody()); + return templateWithID; + } + + /** + * Builds NotificationTemplate object using SMSTemplateWithID object. + * @param templateTypeId Template type ID. + * @param smsTemplateWithID SMSTemplateWithID Object. + * @return NotificationTemplate object built using provided values. + */ + public static NotificationTemplate buildNotificationTemplateWithSMSTemplateWithID(String templateTypeId, + SMSTemplateWithID smsTemplateWithID) { + + String templateTypeDisplayName = Util.decodeTemplateTypeId(templateTypeId); + NotificationTemplate notificationTemplate = new NotificationTemplate(); + notificationTemplate.setNotificationChannel(Constants.NOTIFICATION_CHANNEL_SMS); + notificationTemplate.setLocale(smsTemplateWithID.getLocale()); + notificationTemplate.setBody(smsTemplateWithID.getBody()); + notificationTemplate.setDisplayName(templateTypeDisplayName); + notificationTemplate.setLocale(smsTemplateWithID.getLocale()); + notificationTemplate.setType(I18nEmailUtil.getNormalizedName(templateTypeDisplayName)); + return notificationTemplate; + } + + /** + * Builds NotificationTemplate object using EmailTemplateWithID object. + * @param templateTypeId Template type ID. + * @param emailTemplateWithID EmailTemplateWithID Object. + * @return NotificationTemplate object built using provided values. + */ + public static NotificationTemplate buildNotificationTemplateWithEmailTemplateWithID(String templateTypeId, + EmailTemplateWithID emailTemplateWithID) { + + String templateTypeDisplayName = Util.decodeTemplateTypeId(templateTypeId); + NotificationTemplate notificationTemplate = new NotificationTemplate(); + notificationTemplate.setNotificationChannel(Constants.NOTIFICATION_CHANNEL_EMAIL); + notificationTemplate.setLocale(emailTemplateWithID.getLocale()); + notificationTemplate.setBody(emailTemplateWithID.getBody()); + notificationTemplate.setDisplayName(templateTypeDisplayName); + notificationTemplate.setLocale(emailTemplateWithID.getLocale()); + notificationTemplate.setType(I18nEmailUtil.getNormalizedName(templateTypeDisplayName)); + notificationTemplate.setSubject(emailTemplateWithID.getSubject()); + notificationTemplate.setFooter(emailTemplateWithID.getFooter()); + notificationTemplate.setContentType(emailTemplateWithID.getContentType()); + return notificationTemplate; + } + + /** + * Asserts the existence of the template type. + * + * @param notificationChannel Notification channel. + * @param templateTypeDisplayName Template type display name. + */ + public static void assertTemplateTypeExistence(String notificationChannel, String templateTypeDisplayName) { + + try { + boolean isTemplateTypeExists = TemplatesServiceHolder.getNotificationTemplateManager() + .isNotificationTemplateTypeExists(notificationChannel, templateTypeDisplayName, + getTenantDomainFromContext()); + if (!isTemplateTypeExists) { + throw Util.handleError(Constants.ErrorMessage.ERROR_TEMPLATE_TYPE_NOT_FOUND); + } + } catch (NotificationTemplateManagerException e) { + throw Util.handleNotificationTemplateManagerException(e, + Constants.ErrorMessage.ERROR_ERROR_RETRIEVING_TEMPLATE_TYPE); + } + } + + /** + * Builds the location of the template type. + * + * @param templateTypeId Template type ID. + * @param templateType Notification channel type. + * @return Location of the template. + */ + public static String getTemplateTypeLocation(String templateTypeId, String templateType) { + + String templateTypePath; + // Only EMAIL and SMS are passed as the type. So, no need to check for other types. + if (templateType.equals(NOTIFICATION_CHANNEL_EMAIL)) { + templateTypePath = NOTIFICATION_TEMPLATES_API_BASE_PATH_EMAIL; + } else { + templateTypePath = NOTIFICATION_TEMPLATES_API_BASE_PATH_SMS; + } + String location = V1_API_PATH_COMPONENT + NOTIFICATION_TEMPLATES_API_PATH + templateTypePath + + TEMPLATE_TYPES_PATH + PATH_SEPARATOR + templateTypeId; + return ContextLoader.buildURIForBody(location).toString(); + } + + /** + * Generates EmailTemplateWithID using provided values. + * + * @param emailTemplate EmailTemplate object. + * @param locale Locale. + * @return EmailTemplateWithID object. + */ + public static EmailTemplateWithID buildEmailTemplateWithIdUsingEmailTemplate( + org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.EmailTemplate emailTemplate, + String locale) { + EmailTemplateWithID emailTemplateWithID = new EmailTemplateWithID(); + emailTemplateWithID.setLocale(locale); + emailTemplateWithID.setContentType(emailTemplate.getContentType()); + emailTemplateWithID.setSubject(emailTemplate.getSubject()); + emailTemplateWithID.setBody(emailTemplate.getBody()); + emailTemplateWithID.setFooter(emailTemplate.getFooter()); + return emailTemplateWithID; + } + + /** + * Generates SMSTemplateWithID using provided values. + * + * @param smsTemplate SMSTemplate object. + * @param locale Locale. + * @return SMSTemplateWithID object. + */ + public static SMSTemplateWithID buildSMSTemplateWithIdUsingSMSTemplate( + org.wso2.carbon.identity.rest.api.server.notification.template.v1.model.SMSTemplate smsTemplate, + String locale) { + + SMSTemplateWithID smsTemplateWithID = new SMSTemplateWithID(); + smsTemplateWithID.setLocale(locale); + smsTemplateWithID.setBody(smsTemplate.getBody()); + return smsTemplateWithID; + } + + private static ErrorResponse.Builder getErrorBuilder(Constants.ErrorMessage errorMsg) { + + return new ErrorResponse.Builder().withCode(errorMsg.getCode()). + withMessage(errorMsg.getMessage()).withDescription(errorMsg.getDescription()); + } + + private static String extractErrorCode(String errorCodeWithScenario) { + + return errorCodeWithScenario.split(ERROR_CODE_DELIMITER)[1]; + } +} diff --git a/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/resources/META-INF/cxf/notification-template-server-v1-cxf.xml b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/resources/META-INF/cxf/notification-template-server-v1-cxf.xml new file mode 100644 index 0000000000..a5f16fb98c --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/resources/META-INF/cxf/notification-template-server-v1-cxf.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + diff --git a/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/resources/notification-template.yml b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/resources/notification-template.yml new file mode 100644 index 0000000000..3cd3110bf0 --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/org.wso2.carbon.identity.rest.api.server.notification.template.v1/src/main/resources/notification-template.yml @@ -0,0 +1,1168 @@ +openapi: 3.0.0 +info: + title: "WSO2 Identity Server - Notification Template API" + version: 1.0.0 + description: >- + This is the RESTful API for managing notification templates inWSO2 Identity + Server. This API allows adding, retrieving, replacing, and removing email + templates and template types. +tags: + - name: Email Template Types + description: An email template type can have multiple email templates for different languages. + - name: Email Templates + description: An email template of a specific type and a language. + - name: Application Email Templates + description: An application email template of a specific type and a language. + - name: SMS Template Types + description: An sms template type can have multiple sms templates for different languages. + - name: SMS Templates + description: An SMS template of a specific type and a language. + - name: Application SMS Templates + description: An application email template of a specific type and a language. +security: + - OAuth2: [] + - BasicAuth: [] +paths: + /notification/email/template-types: + get: + tags: + - Email Template Types + summary: Retrieves all the email template types. + operationId: getAllEmailTemplateTypes + description: | + Retrieves all the email template types in the system.
+ +
+ Scopes required: +
* internal_email_mgt_view + responses: + '200': + description: Search results matching the given criteria. + content: + 'application/json': + schema: + type: array + items: + $ref: '#/components/schemas/TemplateTypeWithID' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + post: + tags: + - Email Template Types + summary: Adds a new email template type. + operationId: addEmailTemplateType + description: | + Adds a new email template type to the system. An email template type can have any number of + organization or application email templates.
+ + * Attribute _**displayName**_ of the template type should be unique.
+ + Scopes required: +
* internal_email_mgt_create + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TemplateTypeOverview' + description: Email template type to be added. + responses: + '201': + description: Item Created + headers: + self: + description: Location of the newly created email template type. + schema: + type: string + content: + 'application/json': + schema: + $ref: '#/components/schemas/TemplateTypeWithID' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '409': + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + '/notification/email/template-types/{template-type-id}': + get: + tags: + - Email Template Types + summary: Retrieves the email template type corresponding to the template type id. + operationId: getEmailTemplateType + description: | + Retrieves the email template type in the system identified by the template-type-id.
+ + Scopes required:
+ * internal_email_mgt_view
+ parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + responses: + '200': + description: Search results matching the given criteria. + content: + 'application/json': + schema: + $ref: '#/components/schemas/TemplateTypeWithID' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + delete: + tags: + - Email Template Types + summary: Removes an email template type. + operationId: deleteEmailTemplateType + description: | + Removes an existing email template type with all its email templates + from the system.
+ + Scopes required:
+ * internal_email_mgt_delete + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + responses: + '204': + $ref: '#/components/responses/Deleted' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + '/notification/email/template-types/{template-type-id}/org-templates': + get: + tags: + - Email Templates + summary: Retrieves the list of organization email templates in the template type id. + operationId: getOrgTemplatesListOfEmailTemplateType + description: | + Retrieves the list of organization email templates in the template type id.
+ + Scope required:
+ * internal_email_mgt_view
+ parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + responses: + '200': + description: Search results matching the given criteria. + content: + 'application/json': + schema: + type: array + items: + $ref: '#/components/schemas/EmailTemplateWithID' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + post: + tags: + - Email Templates + summary: Adds a new email template to an existing email template type. + operationId: addOrgEmailTemplate + description: | + Another email template with the same locale should not already exist in the + respective email template type.
+ + Scopes required:
* internal_email_mgt_create + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EmailTemplateWithID' + description: Email template to be added. + responses: + '201': + description: Item Created + headers: + Location: + description: Location of the newly created email template. + schema: + type: string + content: + 'application/json': + schema: + $ref: '#/components/schemas/SimpleTemplate' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '409': + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + '/notification/email/template-types/{template-type-id}/app-templates/{app-uuid}': + get: + tags: + - Application Email Templates + summary: Retrieves the list of application email templates in the template type id. + operationId: getAppTemplatesListOfEmailTemplateType + description: | + Retrieves the list of application email templates in the template type id.
+ + Scope required:
+ * internal_email_mgt_view
+ parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/appUuidPathParam' + responses: + '200': + description: Search results matching the given criteria. + content: + 'application/json': + schema: + type: array + items: + $ref: '#/components/schemas/EmailTemplateWithID' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + post: + tags: + - Application Email Templates + summary: Adds a new application email template to an existing email template type. + operationId: addAppEmailTemplate + description: | + Another application email template with the same locale should not already exist in the + respective email template type.
+ + Scopes required:
* internal_email_mgt_create + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/appUuidPathParam' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EmailTemplateWithID' + description: Email template to be added. + responses: + '201': + description: Item Created + headers: + Location: + description: Location of the newly created email template. + schema: + type: string + content: + 'application/json': + schema: + $ref: '#/components/schemas/SimpleTemplate' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '409': + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + '/notification/email/template-types/{template-type-id}/org-templates/{locale}': + get: + tags: + - Email Templates + summary: Retrieves a single email template. + operationId: getOrgEmailTemplate + description: | + Retrieves the email template that matches to the template-type-id and the locale.
+ + Scope required:
+ * internal_email_mgt_view + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/localePathParam' + responses: + '200': + description: Search results matching the given criteria. + content: + 'application/json': + schema: + $ref: '#/components/schemas/EmailTemplateWithID' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + put: + tags: + - Email Templates + summary: Replaces an existing email template. + operationId: updateOrgEmailTemplate + description: | + Replaces the email template identified by the template-type-id and the locale.
+ + Scopes required:
+ * internal_email_mgt_update + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/localePathParam' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EmailTemplate' + description: Email templates for the template type. + responses: + '200': + $ref: '#/components/responses/Updated' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + delete: + tags: + - Email Templates + summary: Removes an email template. + operationId: deleteOrgEmailTemplate + description: | + Removes an email template identified by the template-type-id and the locale.
+ + Scopes required:
+ * internal_email_mgt_delete + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/localePathParam' + responses: + '204': + $ref: '#/components/responses/Deleted' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + '/notification/email/template-types/{template-type-id}/app-templates/{app-uuid}/{locale}': + get: + tags: + - Application Email Templates + summary: Retrieves a single email template of application. + operationId: getAppEmailTemplate + description: | + Retrieves the application email template that matches to the template-type-id and the locale.
+ + Scope required:
+ * internal_email_mgt_view + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/appUuidPathParam' + - $ref: '#/components/parameters/localePathParam' + responses: + '200': + description: Search results matching the given criteria. + content: + 'application/json': + schema: + $ref: '#/components/schemas/EmailTemplateWithID' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + put: + tags: + - Application Email Templates + summary: Replaces an existing application email template. + operationId: updateAppEmailTemplate + description: | + Replaces the application email template identified by the template-type-id and the locale.
+ + Scopes required:
+ * internal_email_mgt_update + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/appUuidPathParam' + - $ref: '#/components/parameters/localePathParam' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/EmailTemplate' + description: Email templates for the template type. + responses: + '200': + $ref: '#/components/responses/Updated' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + delete: + tags: + - Application Email Templates + summary: Removes an email template. + operationId: deleteAppEmailTemplate + description: | + Removes an email template identified by the template-type-id and the locale.
+ + Scopes required:
+ * internal_email_mgt_delete + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/appUuidPathParam' + - $ref: '#/components/parameters/localePathParam' + responses: + '204': + $ref: '#/components/responses/Deleted' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + /notification/sms/template-types: + get: + tags: + - SMS Template Types + summary: Retrieves all the sms template types. + operationId: getAllSMSTemplateTypes + description: | + Retrieves all the SMS template types in the system.
+ + Scopes required: +
* internal_sms_mgt_view + responses: + '200': + description: Search results matching the given criteria. + content: + 'application/json': + schema: + type: array + items: + $ref: '#/components/schemas/TemplateTypeWithID' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '500': + $ref: '#/components/responses/ServerError' + post: + tags: + - SMS Template Types + summary: Adds a new SMS template type. + operationId: addSMSTemplateType + description: | + Adds a new SMS template type to the system. An SMS template type can have any number of + organization or application SMS templates.
+ + * Attribute _**displayName**_ of the template type should be unique.
+ + Scopes required: +
* internal_sms_mgt_create + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/TemplateTypeOverview' + description: SMS template type to be added. + responses: + '201': + description: Item Created + headers: + self: + description: Location of the newly created SMS template type. + schema: + type: string + content: + 'application/json': + schema: + $ref: '#/components/schemas/TemplateTypeWithID' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '409': + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + '/notification/sms/template-types/{template-type-id}': + get: + tags: + - SMS Template Types + summary: Retrieves the SMS template type corresponding to the template type id. + operationId: getSMSTemplateType + description: | + Retrieves the SMS template type in the system identified by the template-type-id.
+ + Scopes required:
+ * internal_sms_mgt_view
+ parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + responses: + '200': + description: Search results matching the given criteria. + content: + 'application/json': + schema: + $ref: '#/components/schemas/TemplateTypeWithID' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + delete: + tags: + - SMS Template Types + summary: Removes an SMS template type. + operationId: deleteSMSTemplateType + description: | + Removes an existing SMS template type with all its SMS templates + from the system.
+ + Scopes required:
+ * internal_sms_mgt_delete + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + responses: + '204': + $ref: '#/components/responses/Deleted' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + '/notification/sms/template-types/{template-type-id}/app-templates/{app-uuid}': + get: + tags: + - Application SMS Templates + summary: Retrieves the list of application SMS templates in the template type id. + operationId: getAppTemplatesListOfSMSTemplateType + description: | + Retrieves the list of application SMS templates in the template type id.
+ + Scope required:
+ * internal_sms_mgt_view
+ parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/appUuidPathParam' + responses: + '200': + description: Search results matching the given criteria. + content: + 'application/json': + schema: + type: array + items: + $ref: '#/components/schemas/SMSTemplateWithID' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + post: + tags: + - Application SMS Templates + summary: Adds a new application SMS template to an existing SMS template type. + operationId: addAppSMSTemplate + description: | + Another application SMS template with the same locale should not already exist in the + respective SMS template type.
+ + Scopes required:
* internal_sms_mgt_create + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/appUuidPathParam' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SMSTemplateWithID' + description: SMS template to be added. + responses: + '201': + description: Item Created + headers: + Location: + description: Location of the newly created SMS template. + schema: + type: string + content: + 'application/json': + schema: + $ref: '#/components/schemas/SimpleTemplate' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '409': + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + '/notification/sms/template-types/{template-type-id}/app-templates/{app-uuid}/{locale}': + get: + tags: + - Application SMS Templates + summary: Retrieves a single SMS template of application. + operationId: getAppSMSTemplate + description: | + Retrieves the application SMS template that matches to the template-type-id and the locale.
+ + Scope required:
+ * internal_sms_mgt_view + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/appUuidPathParam' + - $ref: '#/components/parameters/localePathParam' + responses: + '200': + description: Search results matching the given criteria. + content: + 'application/json': + schema: + $ref: '#/components/schemas/SMSTemplateWithID' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + put: + tags: + - Application SMS Templates + summary: Replaces an existing application SMS template. + operationId: updateAppSMSTemplate + description: | + Replaces the application SMS template identified by the template-type-id and the locale.
+ + Scopes required:
+ * internal_sms_mgt_update + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/appUuidPathParam' + - $ref: '#/components/parameters/localePathParam' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SMSTemplate' + description: Email templates for the template type. + responses: + '200': + $ref: '#/components/responses/Updated' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + delete: + tags: + - Application SMS Templates + summary: Removes an SMS template. + operationId: deleteAppSMSTemplate + description: | + Removes an SMS template identified by the template-type-id and the locale.
+ + Scopes required:
+ * internal_sms_mgt_delete + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/appUuidPathParam' + - $ref: '#/components/parameters/localePathParam' + responses: + '204': + $ref: '#/components/responses/Deleted' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + '/notification/sms/template-types/{template-type-id}/org-templates': + get: + tags: + - SMS Templates + summary: Retrieves the list of organization SMS templates in the template type id. + operationId: getOrgTemplatesListOfSMSTemplateType + description: | + Retrieves the list of organization SMS templates in the template type id.
+ + Scope required:
+ * internal_sms_mgt_view
+ parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + responses: + '200': + description: Search results matching the given criteria. + content: + 'application/json': + schema: + type: array + items: + $ref: '#/components/schemas/SMSTemplateWithID' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + post: + tags: + - SMS Templates + summary: Adds a new organization SMS template to an existing SMS template type. + operationId: addOrgSMSTemplate + description: | + Another SMS organization template with the same locale should not already exist in the + respective SMS template type.
+ + Scopes required:
* internal_sms_mgt_create + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SMSTemplateWithID' + description: SMS template to be added. + responses: + '201': + description: Item Created + headers: + Location: + description: Location of the newly created SMS template. + schema: + type: string + content: + 'application/json': + schema: + $ref: '#/components/schemas/SimpleTemplate' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '409': + $ref: '#/components/responses/Conflict' + '500': + $ref: '#/components/responses/ServerError' + '/notification/sms/template-types/{template-type-id}/org-templates/{locale}': + get: + tags: + - SMS Templates + summary: Retrieves a single organization SMS template. + operationId: getOrgSMSTemplate + description: | + Retrieves the SMS template that matches to the template-type-id and the locale.
+ + Scope required:
+ * internal_sms_mgt_view + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/localePathParam' + responses: + '200': + description: Search results matching the given criteria. + content: + 'application/json': + schema: + $ref: '#/components/schemas/SMSTemplateWithID' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + put: + tags: + - SMS Templates + summary: Replaces an existing organization SMS template. + operationId: updateOrgSMSTemplate + description: | + Replaces the organization SMS template identified by the template-type-id and the locale.
+ + Scopes required:
+ * internal_sms_mgt_update + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/localePathParam' + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/SMSTemplate' + description: SMS templates for the template type. + responses: + '200': + $ref: '#/components/responses/Updated' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + delete: + tags: + - SMS Templates + summary: Removes an organization SMS template. + operationId: deleteOrgSMSTemplate + description: | + Removes an organization SMS template identified by the template-type-id and the locale.
+ + Scopes required:
+ * internal_sms_mgt_delete + parameters: + - $ref: '#/components/parameters/templateTypeIdPathParam' + - $ref: '#/components/parameters/localePathParam' + responses: + '204': + $ref: '#/components/responses/Deleted' + '400': + $ref: '#/components/responses/InvalidInput' + '401': + $ref: '#/components/responses/Unauthorized' + '403': + $ref: '#/components/responses/Forbidden' + '404': + $ref: '#/components/responses/NotFound' + '500': + $ref: '#/components/responses/ServerError' + +servers: + # Added by API Auto Mocking Plugin + - description: SwaggerHub API Auto Mocking + url: https://virtserver.swaggerhub.com/RUSHANNANA/NotificationTemplateAPI/1.0.0 + - url: 'https://localhost:9443/t/{tenant-domain}/api/server/v1' + variables: + tenant-domain: + default: unknown + +components: + parameters: + templateTypeIdPathParam: + in: path + name: template-type-id + required: true + description: Email Template Type ID. + schema: + type: string + localePathParam: + in: path + name: locale + required: true + description: This should be a valid locale. + schema: + type: string + appUuidPathParam: + in: path + name: app-uuid + required: true + description: Application UUID. + schema: + type: string + offsetQueryParam: + in: query + name: offset + description: >- + Number of records to skip for pagination. _This option is not yet + supported._ + schema: + type: integer + format: int32 + minimum: 0 + limitQueryParam: + in: query + name: limit + description: >- + Maximum number of records to return. _This option is not yet + supported._ + schema: + type: integer + format: int32 + minimum: 0 + sortOrderQueryParam: + in: query + name: sortOrder + required: false + description: >- + Define the order in which the retrieved records should be sorted. _This + option is not yet supported._ + schema: + type: string + enum: + - asc + - desc + sortByQueryParam: + in: query + name: sortBy + required: false + description: >- + Attribute by which the retrieved records should be sorted. _This + option is not yet supported._ + schema: + type: string + responses: + NotFound: + description: The specified resource is not found. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Unauthorized: + description: Unauthorized. + Forbidden: + description: Forbidden. + ServerError: + description: Internal Server Error. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + InvalidInput: + description: Invalid input request. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Conflict: + description: Item Already Exists. + content: + 'application/json': + schema: + $ref: '#/components/schemas/Error' + Deleted: + description: Item Deleted. + Updated: + description: Item Updated. + securitySchemes: + BasicAuth: + type: http + scheme: basic + OAuth2: + type: oauth2 + flows: + authorizationCode: + authorizationUrl: 'https://localhost:9443/oauth2/authorize' + tokenUrl: 'https://localhost:9443/oauth2/token' + scopes: {} + schemas: + TemplateType: + type: object + required: + - displayName + - self + properties: + displayName: + type: string + example: Account Confirmation + description: Display name of the email template type. + self: + type: string + example: /t/{tenant-domain}/api/server/v1/notification/email/template-types/YWNjb3VudGNvbmZpcm1hdGlvbg + description: Location of the created/updated resource. + TemplateTypeOverview: + type: object + required: + - displayName + properties: + displayName: + type: string + example: Account Confirmation + description: Display name of the template type. + TemplateTypeWithID: + allOf: + - $ref: '#/components/schemas/TemplateType' + - required: + - id + properties: + id: + type: string + example: YWNjb3VudGNvbmZpcm1hdGlvbg + description: Unique ID of the template type. + EmailTemplate: + type: object + required: + - contentType + - subject + - body + properties: + contentType: + type: string + example: text/html + description: Content type of the email template. + subject: + type: string + example: WSO2 - Account Confirmation + description: The subject of the email. + body: + type: string + example: HTML Body + description: The body of the email. + footer: + type: string + example: WSO2 Identity Server Team + description: The footer of the email. + EmailTemplateWithID: + allOf: + - $ref: '#/components/schemas/EmailTemplate' + - required: + - locale + properties: + locale: + type: string + example: en_US + description: >- + Locale of the email template. + SMSTemplate: + type: object + required: + - body + properties: + body: + type: string + example: SMS Body + description: The body of the SMS. + SMSTemplateWithID: + allOf: + - $ref: '#/components/schemas/SMSTemplate' + - required: + - locale + properties: + locale: + type: string + example: en_US + description: >- + Locale of the SMS template. + SimpleTemplate: + type: object + required: + - locale + - self + properties: + locale: + type: string + example: en_US + description: >- + Locale of the template. + self: + type: string + example: /t/{tenant-domain}/api/server/v1/notification/sms/template-types/YWNjb3VudGNvbmZpcm1hdGlvbg/templates/en_US + description: Location of the created/updated resource. + + Error: + type: object + required: + - code + - message + properties: + code: + type: string + example: NTM-50000 + message: + type: string + example: Some Error Message + description: + type: string + example: Some Error Description + traceId: + type: string + example: TR0001 diff --git a/components/org.wso2.carbon.identity.api.server.notification.template/pom.xml b/components/org.wso2.carbon.identity.api.server.notification.template/pom.xml new file mode 100644 index 0000000000..c1b2c6dded --- /dev/null +++ b/components/org.wso2.carbon.identity.api.server.notification.template/pom.xml @@ -0,0 +1,37 @@ + + + + + + org.wso2.carbon.identity.server.api + identity-api-server + 1.2.196-SNAPSHOT + ../../pom.xml + + 4.0.0 + + org.wso2.carbon.identity.api.server.notification.template + pom + + + org.wso2.carbon.identity.api.server.notification.template.common + org.wso2.carbon.identity.rest.api.server.notification.template.v1 + + + diff --git a/pom.xml b/pom.xml index 78baa84f0f..0f87d69e1e 100644 --- a/pom.xml +++ b/pom.xml @@ -287,6 +287,12 @@ provided ${project.version} + + org.wso2.carbon.identity.server.api + org.wso2.carbon.identity.api.server.notification.template.common + provided + ${project.version} + org.wso2.carbon.identity.server.api org.wso2.carbon.identity.api.server.application.management.common @@ -859,6 +865,7 @@ components/org.wso2.carbon.identity.api.server.tenant.management components/org.wso2.carbon.identity.api.server.cors components/org.wso2.carbon.identity.api.server.notification.sender + components/org.wso2.carbon.identity.api.server.notification.template components/org.wso2.carbon.identity.api.server.authenticators components/org.wso2.carbon.identity.api.server.secret.management components/org.wso2.carbon.identity.api.server.branding.preference.management