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