/*
* Copyright (c) 2015 EMC Corporation
* All Rights Reserved
*/
package controllers.catalog;
import java.net.MalformedURLException;
import java.net.URL;
import org.apache.commons.lang.StringUtils;
import play.data.validation.Validation;
import play.mvc.Controller;
import play.mvc.With;
import util.CatalogPreferenceUtils;
import util.MessagesUtils;
import util.validation.HostNameOrIpAddressCheck;
import com.emc.vipr.model.catalog.CatalogPreferencesRestRep;
import com.emc.vipr.model.catalog.CatalogPreferencesUpdateParam;
import controllers.Common;
import controllers.deadbolt.Restrict;
import controllers.deadbolt.Restrictions;
import controllers.tenant.TenantSelector;
import controllers.util.FlashException;
import controllers.util.Models;
@With(Common.class)
@Restrictions({ @Restrict("TENANT_ADMIN") })
public class ApprovalConfiguration extends Controller {
public static void edit() {
CatalogPreferencesRestRep prefs = CatalogPreferenceUtils.getCatalogPreferences(Models.currentAdminTenant());
Form approvalConfig = new Form();
approvalConfig.readFrom(prefs);
TenantSelector.addRenderArgs();
render(approvalConfig);
}
@FlashException("edit")
public static void save(Form approvalConfig) {
approvalConfig.validate("approvalConfig");
if (Validation.hasErrors()) {
params.flash();
Validation.keep();
edit();
}
CatalogPreferencesUpdateParam updateParam = new CatalogPreferencesUpdateParam();
updateParam.setTenantId(Models.currentAdminTenant());
approvalConfig.writeTo(updateParam);
CatalogPreferenceUtils.updatePreferences(updateParam);
flash.success(MessagesUtils.get("approvalConfig.saved"));
edit();
}
public static class Form {
public String approverEmail;
public String approvalUrl;
public void validate(String formName) {
if (StringUtils.isNotBlank(approverEmail)) {
for (String email : StringUtils.split(approverEmail, ",")) {
email = StringUtils.trim(email);
Validation.email(formName + ".approverEmail", email);
}
}
if (StringUtils.isNotBlank(approvalUrl)) {
// Play's URL validation is not very good, it doesn't allow IP address URLs
try {
URL url = new URL(approvalUrl);
if (!"http".equalsIgnoreCase(url.getProtocol()) && !"https".equalsIgnoreCase(url.getProtocol())) {
Validation.addError(formName + ".approvalUrl", "validation.url");
}
else if (!HostNameOrIpAddressCheck.isValidHostNameOrIp(url.getHost())) {
Validation.addError(formName + ".approvalUrl", "validation.url");
}
} catch (MalformedURLException e) {
Validation.addError(formName + ".approvalUrl", "validation.url");
}
}
}
public void readFrom(CatalogPreferencesRestRep prefs) {
if (prefs != null) {
approverEmail = prefs.getApproverEmail();
approvalUrl = prefs.getApprovalUrl();
}
}
public void writeTo(CatalogPreferencesUpdateParam updateParam) {
updateParam.setApproverEmail(StringUtils.defaultString(approverEmail));
updateParam.setApprovalUrl(StringUtils.defaultString(approvalUrl));
}
}
}