blob: d98de46fec6fa68df096430e7813872dc4870a59 [file] [log] [blame]
package de.ids_mannheim.korap.utils;
import de.ids_mannheim.korap.config.BeansFactory;
import de.ids_mannheim.korap.exceptions.KustvaktException;
import de.ids_mannheim.korap.exceptions.StatusCodes;
import de.ids_mannheim.korap.interfaces.EncryptionIface;
import de.ids_mannheim.korap.interfaces.ValidatorIface;
import de.ids_mannheim.korap.interfaces.db.EntityHandlerIface;
import de.ids_mannheim.korap.interfaces.db.UserDataDbIface;
import de.ids_mannheim.korap.user.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Map;
import java.util.Properties;
/**
* @author hanl
* @date 30/09/2014
*
* EM: where is this used?
*/
public class UserPropertyReader extends PropertyReader {
private static Logger jlog = LoggerFactory
.getLogger(UserPropertyReader.class);
private Map<String, Properties> props;
private String path;
private EntityHandlerIface iface;
private EncryptionIface crypto;
private ValidatorIface validator;
public UserPropertyReader (String path) {
this.path = path;
this.iface = BeansFactory.getKustvaktContext().getUserDBHandler();
this.crypto = BeansFactory.getKustvaktContext().getEncryption();
this.validator = BeansFactory.getKustvaktContext().getValidator();
}
@Override
public void load () {
try {
props = super.read(this.path);
for (Map.Entry<String, Properties> e : props.entrySet()) {
try {
createUser(e.getKey(), e.getValue());
}
catch (KustvaktException ex) {
jlog.error("KorAP-Exception: {} for user {}",
ex.getStatusCode(), e.getKey());
}
}
iface.createAccount(User.UserFactory.getDemoUser());
}
catch (IOException e) {
jlog.error("Could not read from path {}", path);
}
catch (KustvaktException e) {
jlog.error("KorAP-Exception: {}", e.getStatusCode());
}
}
private User createUser (String username, Properties p)
throws KustvaktException {
KorAPUser user;
// if (username.equals(User.ADMINISTRATOR_NAME)) {
// user = User.UserFactory.getAdmin();
//
// String pass = p.getProperty(username + ".password", null);
// if (pass == null)
// throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT);
//
// try {
// pass = crypto.secureHash(pass);
// }
// catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
// throw new KustvaktException(StatusCodes.REQUEST_INVALID);
// }
// user.setPassword(pass);
// iface.createAccount(user);
// }
// else {
user = User.UserFactory.getUser(username);
Map<String, Object> vals = new HashMap<>();
for (Map.Entry e : p.entrySet()) {
String key = e.getKey().toString().split("\\.", 2)[1];
vals.put(key, e.getValue().toString());
}
String pass = p.getProperty(username + ".password", null);
if (pass == null)
throw new KustvaktException(StatusCodes.ILLEGAL_ARGUMENT);
try {
pass = crypto.secureHash(pass);
}
catch (NoSuchAlgorithmException | UnsupportedEncodingException e) {
throw new KustvaktException(StatusCodes.REQUEST_INVALID);
}
user.setPassword(pass);
user.setAccountLocked(Boolean.valueOf(p.getProperty(username
+ ".lock", "false")));
user.setAccountCreation(TimeUtils.getNow().getMillis());
//todo: make sure uri is set to 0, so sql queries work with the null value
// user.setURIExpiration(0L);
iface.createAccount(user);
UserDetails det = new UserDetails();
det.setUserId(user.getId());
det.read(vals, true);
det.validate(this.validator);
Userdata set = new UserSettings();
set.setUserId(user.getId());
set.read(vals, true);
set.validate(this.validator);
UserDataDbIface dao = BeansFactory.getTypeFactory()
.getTypeInterfaceBean(
BeansFactory.getKustvaktContext()
.getUserDataProviders(), UserDetails.class);
dao.store(det);
dao = BeansFactory.getTypeFactory().getTypeInterfaceBean(
BeansFactory.getKustvaktContext().getUserDataProviders(),
UserSettings.class);
dao.store(set);
// }
jlog.info("successfully created account for user {}",
user.getUsername());
return user;
}
}