package org.jenkins.tools.test.dao;
import com.google.appengine.api.datastore.*;
import java.util.logging.Logger;
/**
* @author fcamblor
*/
public enum SecurityTokenDAO {
INSTANCE;
private static final Logger log = Logger.getLogger(PluginCompatResultDAO.class.getName());
private static enum SecurityProperties {
value, activated;
public static final String KIND = "securityToken";
}
public void initializeUniqueToken(){
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
// Ensuring there isn't any token yet in DB...
int tokenCount = datastore.prepare(
new Query(SecurityProperties.KIND)
).asList(FetchOptions.Builder.withDefaults()).size();
if(tokenCount != 0){
throw new IllegalStateException(String.format(
"Attempting to create a new token whereas %d tokens are present in datastore !", tokenCount));
}
Entity token = new Entity(SecurityProperties.KIND);
token.setProperty(SecurityProperties.value.name(), "xxxxx");
// Created token is deactivated by default :
// you will have to manually edit your generated token value / activated flag
// in order to be able to use it !
token.setProperty(SecurityProperties.activated.name(), false);
Key tokenKey = datastore.put(token);
log.info(String.format("Created token with key [%s] !", tokenKey.getId()));
}
public boolean isTokenValid(String token){
DatastoreService datastore = DatastoreServiceFactory.getDatastoreService();
int tokenCount = datastore.prepare(
new Query(SecurityProperties.KIND)
.addFilter(SecurityProperties.value.name(), Query.FilterOperator.EQUAL, token)
.addFilter(SecurityProperties.activated.name(), Query.FilterOperator.EQUAL, true)
).asList(FetchOptions.Builder.withDefaults()).size();
return tokenCount != 0;
}
}