package envoy.server.processors;
import java.io.IOException;
import java.util.logging.Level;
import envoy.event.PasswordChangeRequest;
import envoy.event.PasswordChangeResult;
import envoy.server.data.PersistenceManager;
import envoy.server.net.ObjectWriteProxy;
import envoy.server.util.PasswordUtil;
import envoy.util.EnvoyLog;
/**
* Project: envoy-server-standalone
* File: PasswordChangeRequestProcessor.java
* Created: 31.07.2020
*
* @author Leon Hofmeister
* @since Envoy Server v0.2-beta
*/
public class PasswordChangeRequestProcessor implements ObjectProcessor {
@Override
public void process(PasswordChangeRequest event, long socketID, ObjectWriteProxy writeProxy) throws IOException {
final var persistenceManager = PersistenceManager.getInstance();
final var user = persistenceManager.getUserByID(event.getID());
final var logger = EnvoyLog.getLogger(PasswordChangeRequestProcessor.class);
final var correctAuthentication = PasswordUtil.validate(event.getOldPassword(), user.getPasswordHash());
if (correctAuthentication) {
user.setPasswordHash(PasswordUtil.hash(event.get()));
logger.log(Level.INFO, user + " changed his password");
} else logger.log(Level.INFO, user + " tried changing his password but provided insufficient authentication");
writeProxy.write(socketID, new PasswordChangeResult(correctAuthentication));
}
}