All Downloads are FREE. Search and download functionalities are using the official Maven repository.

base.jee.api.cassandra.InitialSetup Maven / Gradle / Ivy

/**
 * Creative commons Attribution-NonCommercial license.
 *
 * http://creativecommons.org/licenses/by-nc/2.5/au/deed.en_GB
 *
 * NO WARRANTY IS GIVEN OR IMPLIED, USE AT YOUR OWN RISK.
 */
package base.jee.api.cassandra;

import java.io.IOException;
import java.util.Map;
import java.util.UUID;

import base.Command;
import base.jee.Constants;
import base.json.Json;
import base.security.ResourceUid;
import base.security.User;
import com.datastax.driver.core.Session;

import static base.jee.api.cassandra.util.AddPerson.addPerson;
import static base.jee.api.cassandra.util.HasPersonRecord.hasPersonRecord;
import static base.jee.api.cassandra.util.Log.log;
import static base.jee.api.cassandra.util.UpdateSetting.updateSetting;
import static base.jee.api.cassandra.util.UpsertRole.upsertRole;

public class InitialSetup extends Command {

	private CassandraAPI c;
	private String firstName;
	private String lastName;
	private String emailAddress;
	private String username;
	private String password;
	private String smtpHostname;
	private int smtpPort;
	private boolean selfSignup;
	private String ip;

	public InitialSetup(CassandraAPI c, String firstName, String lastName, String emailAddress, String username, String password, String smtpHostname, int smtpPort, boolean selfSignup, String ip) {
		if(c == null) {
			throw new IllegalArgumentException("Invalid parameter: c");
		}
		if(firstName == null || firstName.trim().length() == 0) {
			throw new IllegalArgumentException("Invalid parameter: firstName");
		}
		if(lastName == null || lastName.trim().length() == 0) {
			throw new IllegalArgumentException("Invalid parameter: lastName");
		}
		if(emailAddress == null || emailAddress.trim().length() == 0) {
			throw new IllegalArgumentException("Invalid parameter: emailAddress");
		}
		if((username == null || username.trim().length() == 0) && (password == null || password.length() == 0)) {
			throw new IllegalArgumentException("Must specify either a username or a password.");
		}
		if(smtpHostname == null || smtpHostname.length() == 0) {
			throw new IllegalArgumentException("Invalid parameter: smtpHostname");
		}
		if(ip == null || ip.trim().length() == 0) {
			throw new IllegalArgumentException("Invalid parameter: ip");
		}

		this.c = c;
		this.firstName = firstName.trim();
		this.lastName = lastName.trim();
		this.password = password;
		this.smtpHostname = smtpHostname;
		this.smtpPort = smtpPort;
		this.emailAddress = emailAddress.trim().toLowerCase();
		this.selfSignup = selfSignup;
		this.ip = ip;
		if(username != null) {
			this.username = username.trim().toLowerCase();
		}
	}

	public InitialSetup() {
	}

	@Override
	protected void execute() throws IOException {
		Session s = c.getCassandraSession();

		if(hasPersonRecord(s)) {
			throw new IllegalStateException("InitialSetup may only be called once.");
		}

		updateSetting(s, "smtp.hostname", smtpHostname);
		updateSetting(s, "smtp.port", "" + smtpPort);
		updateSetting(s, "self.signup", "" + selfSignup);

		UUID personUuid = addPerson(s, firstName, lastName, emailAddress, username, password, null);

		User u = User.userWithUuidAndIp(personUuid, ip);
		upsertRole(s, personUuid, Constants.PERSON_MANAGE_ROLE, u);
		upsertRole(s, personUuid, Constants.SETTING_MANAGE_ROLE, u);
		upsertRole(s, personUuid, Constants.TEMPLATE_MANAGE_ROLE, u);
		upsertRole(s, personUuid, Constants.GROUP_MANAGE_ROLE, u);
		upsertRole(s, personUuid, Constants.AUDIT_ROLE, u);

		log(s, "INFO", u, "Executed initial setup.", new ResourceUid("Person", personUuid));

	}

	@Override
	public String getJsonParameters() {
		return "{" +
				"\"firstname\":\"" + Json.escape(firstName)+ "\"," +
				"\"lastname\":\"" + Json.escape(lastName)+ "\"," +
				"\"emailaddress\":\"" + Json.escape(emailAddress)+ "\"," +
				"\"username\":\"" + Json.escape(username)+ "\"," +
				"\"password\":\"" + Json.escape(password)+ "\"," +
				"\"smtp.hostname\":\"" + Json.escape(smtpHostname)+ "\"," +
				"\"smtp.port\":" + smtpPort+ "," +
				"\"self.signup\":" + selfSignup+ "" +
				"}";
	}

	@Override
	public Command newWithParameters(Map parameters) throws IOException {
		throw new IllegalArgumentException("InitialSetup may not be instantiated with parameter map");
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy