package controllers;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.concurrent.CompletionStage;
import managers.AccountManager;
import models.Account;
import play.Logger;
import play.twirl.api.Html;
import play.db.jpa.Transactional;
import play.mvc.Action;
import play.mvc.Http.Context;
import play.mvc.Result;
import javax.inject.Inject;
public class Component extends Action.Simple {
private final AccountManager accountManager;
@Inject
public Component(AccountManager accountManager) {
this.accountManager = accountManager;
}
@Override
@Transactional
public CompletionStage<Result> call(Context ctx) {
String sessionId = ctx.session().get("id");
if(sessionId != null) {
Long id = Long.parseLong(ctx.session().get("id"));
Account account = accountManager.findById(id);
if(account == null) {
ctx.session().clear();
Logger.info("Clear Session");
return delegate.call(ctx);
}
ctx.args.put("account", account);
} else {
ctx.args.put("account", null);
}
return delegate.call(ctx);
}
public static class ContextIdent {
public static String loginForm = "loginForm";
}
public static void addToContext(String ident, Object object) {
Context.current().args.put(ident, object);
}
public static Object getFromContext(String ident) {
return Context.current().args.get(ident);
}
public static Account currentAccount() {
return (Account)Context.current().args.get("account");
}
/**
* Generates an md5 hash of a String.
* @param input String value
* @return Hashvalue of the String.
*/
public static String md5(String input) {
String md5 = null;
if(null == input) return null;
try {
//Create MessageDigest object for MD5
MessageDigest digest = MessageDigest.getInstance("MD5");
//Update input string in message digest
digest.update(input.getBytes(), 0, input.length());
//Converts message digest value in base 16 (hex)
md5 = new BigInteger(1, digest.digest()).toString(16);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
return md5;
}
}