package utils;
import com.fasterxml.jackson.databind.node.ObjectNode;
import controllers.routes;
import models.User;
import play.Logger;
import play.libs.F;
import play.libs.Json;
import play.mvc.Action;
import play.mvc.Http;
import play.mvc.Result;
import static play.mvc.Controller.session;
public class AuthAction extends Action<Authentication> {
public F.Promise<Result> call(Http.Context ctx) throws Throwable {
String username = session("user");
if (username == null) {
if (configuration.json()) {
ObjectNode out = Json.newObject();
out.put("status", 1234);
out.put("message", "Not log in");
return F.Promise.pure(ok(out));
} else {
return F.Promise.promise(() ->
redirect(routes.UserController.loginPage())
);
}
} else {
User user = User.find.where().eq("name", username).findUnique();
if (user == null || user.adminLevel < configuration.admin()) {
if (configuration.json()) {
ObjectNode out = Json.newObject();
out.put("status", 2345);
out.put("message", "Member not found");
return F.Promise.pure(ok(out));
} else {
return F.Promise.promise(() ->
redirect(routes.UserController.logoutRedirect())
);
}
}
Logger.debug("Setting user in ctx.");
ctx.args.put("user", user);
return delegate.call(ctx);
}
}
}