package com.intrbiz.bergamot.ui.action;
import static com.intrbiz.balsa.BalsaContext.*;
import java.sql.Timestamp;
import java.util.UUID;
import java.util.concurrent.TimeUnit;
import org.apache.log4j.Logger;
import com.intrbiz.bergamot.config.model.BergamotCfg;
import com.intrbiz.bergamot.config.validator.ValidatedBergamotConfiguration;
import com.intrbiz.bergamot.data.BergamotDB;
import com.intrbiz.bergamot.importer.BergamotConfigImporter;
import com.intrbiz.bergamot.importer.BergamotImportReport;
import com.intrbiz.bergamot.model.ConfigChange;
import com.intrbiz.bergamot.model.Contact;
import com.intrbiz.crypto.cookie.CookieBaker.Expires;
import com.intrbiz.crypto.cookie.CryptoCookie;
import com.intrbiz.metadata.Action;
public class ConfigChangeActions
{
private Logger logger = Logger.getLogger(ConfigChangeActions.class);
@Action("apply-config-change")
public BergamotImportReport applyConfigChange(UUID siteId, UUID changeId, String resetUrl, Contact user)
{
logger.info("Applying configuration change: " + siteId + "::" + changeId);
try (BergamotDB db = BergamotDB.connect())
{
ConfigChange change = db.getConfigChange(changeId);
// validate
BergamotCfg cfg = (BergamotCfg) change.getConfiguration();
ValidatedBergamotConfiguration validated = cfg.validate(db.getObjectLocator(siteId));
// import
BergamotImportReport report = new BergamotConfigImporter(validated)
.resetState(false)
.online(true)
.registrationURLSupplier((contact) -> resetUrl + "?token=" + Balsa().app().getSecurityEngine().generateAuthenticationTokenForPrincipal(contact, Expires.after(1, TimeUnit.DAYS), CryptoCookie.Flags.Reset))
.importConfiguration();
// update the db
if (report.isSuccessful())
{
change.setApplied(true);
change.setAppliedAt(new Timestamp(System.currentTimeMillis()));
change.setAppliedById(user == null ? null : user.getId());
db.setConfigChange(change);
}
// return the report
logger.info("Configuration change applied:\n" + report.toString());
return report;
}
}
}