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

base.jee.api.cassandra.SignUpConfirmation 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 com.datastax.driver.core.Row;
import com.datastax.driver.core.Session;
import com.datastax.driver.core.PreparedStatement;
import com.datastax.driver.core.ResultSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import base.Query;
import base.jee.api.Settings;
import base.StringQueryResult;
import base.json.Json;
import base.json.JsonParser;
import base.security.PermissionException;
import base.security.ResourceUid;
import base.security.User;

import static base.jee.api.cassandra.util.AddPerson.addPerson;
import static base.jee.api.cassandra.util.CreateSession.createSession;
import static base.jee.api.cassandra.util.Log.log;

public class SignUpConfirmation extends Query {

	private CassandraAPI api;
	private String requestToken;
	private String ip;

	public SignUpConfirmation(CassandraAPI api, String requestToken, String ip) throws PermissionException {

		if(api == null) {
			throw new IllegalArgumentException("Invalid parameter: api");
		}
		if(ip == null) {
			throw new IllegalArgumentException("Invalid parameter: ip");
		}
		if(requestToken == null || requestToken.length() == 0) {
			throw new IllegalArgumentException("Must specify a request token.");
		}

		this.api = api;
		this.ip = ip;
		this.requestToken = requestToken;

	}

	public SignUpConfirmation() {
	}

	@Override
	public Query newWithParameters(Map parameters) throws IOException, PermissionException {
		return new SignUpConfirmation(
				(CassandraAPI)parameters.get("api"),
				(String)parameters.get("request_token"),
				(String)parameters.get("ip"));
	}

	@Override
	protected List execute() throws IOException {
		List result = new LinkedList<>();
		JsonParser pr = null;

		Session s = api.getCassandraSession();
		Settings settings = api.getSettingsCache();

		PreparedStatement p = s.prepare("select data from request_token where uid=?");
		ResultSet r = s.execute(p.bind(requestToken));
		for(Row row : r) {
			pr = new JsonParser(row.getString(0));
		}
		if(pr == null) {
			throw new IllegalArgumentException("Invalid request token.");
		}
		@SuppressWarnings("unchecked")
		Map data = (Map) pr.parse();

		UUID uuid = addPerson(s,
				(String)data.get("first_name"),
				(String)data.get("last_name"),
				(String)data.get("email"),
				(String)data.get("username"),
				(String)data.get("password"),
				null);

		log(s, "INFO", User.userWithUuidAndIp(uuid, ip), "Activated self sign up account for email: " + (String)data.get("email"), new ResourceUid("Person", uuid));

		String sessionToken = createSession(s, uuid, (String)data.get("first_name"), (String)data.get("last_name"), null, "", Long.parseLong(settings.get("session.expiry")));
		result.add(new StringQueryResult(sessionToken));
		s.execute(s.prepare("delete from request_token where uid=?").bind(requestToken));

		return result;
	}

	@Override
	public String getJsonParameters() {
		return "{" +
				"\"request_token\":\"" + Json.escape(requestToken)+ "\"" +
				"}";
	}

}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy