package controllers; import org.apache.chemistry.opencmis.client.api.Session; import org.apache.chemistry.opencmis.commons.data.RepositoryInfo; import com.fasterxml.jackson.databind.JsonNode; import constant.Token; import model.Login; import play.Routes; import play.data.*; import play.mvc.Controller; import play.mvc.Result; import util.Util; import views.html.login; public class Application extends Controller{ public static Result login(String repositoryId) { return ok(login.render(repositoryId, Form.form(Login.class))); } public static Result authenticate(String repositoryId){ Form<Login> formData = Form.form(Login.class); formData = formData.bindFromRequest(); if(formData.hasErrors()) return badRequest(login.render(repositoryId, formData)); Login loginModel = formData.get(); session().clear(); session(Token.LOGIN_USER_ID, loginModel.id); session(Token.LOGIN_USER_PASSWORD, loginModel.password); session(Token.LOGIN_USER_IS_ADMIN, String.valueOf(isAdmin(repositoryId, loginModel.id))); session(Token.LOGIN_REPOSITORY_ID, repositoryId); session(Token.NEMAKIWARE_VERSION,getVersion(repositoryId)); return redirect(routes.Node.index(repositoryId)); } public static String getVersion(String repositoryId){ Session session = CmisSessions.getCmisSession(repositoryId, session()); RepositoryInfo repo = session.getRepositoryInfo(); return repo.getProductVersion(); } private static boolean isAdmin(String repositoryId, String id){ boolean isAdmin = false; String coreRestUri = Util.buildNemakiCoreUri() + "rest/"; String endPoint = coreRestUri + "repo/" + repositoryId + "/user/"; try{ JsonNode result = Util.getJsonResponse(session(), endPoint + "show/" + id); if("success".equals(result.get("status").asText())){ JsonNode _user = result.get("user"); model.User user = new model.User(_user); isAdmin = user.isAdmin; } }catch(Exception e){ //TODO logging System.out.println("This user is not returned in REST API:" + id); } return isAdmin; } public static Result logout(String repositoryId){ //CMIS session CmisSessions.disconnect(repositoryId, session()); //Play session session().remove("loginUserId"); return redirect(routes.Application.login(repositoryId)); } public static Result error(){ return ok(views.html.error.render()); } public static Result jsRoutes() { response().setContentType("text/javascript"); return ok( Routes.javascriptRouter("jsRoutes", controllers.routes.javascript.Node.showDetail(), controllers.routes.javascript.Node.getAce(), controllers.routes.javascript.Node.update(), controllers.routes.javascript.Node.delete(), controllers.routes.javascript.Type.showBlank(), controllers.routes.javascript.Type.edit(), controllers.routes.javascript.Type.delete(), controllers.routes.javascript.User.showDetail(), controllers.routes.javascript.User.delete(), controllers.routes.javascript.User.showPasswordChanger(), controllers.routes.javascript.Group.showDetail(), controllers.routes.javascript.Group.delete(), controllers.routes.javascript.SearchEngine.index(), controllers.routes.javascript.SearchEngine.init(), controllers.routes.javascript.SearchEngine.reindex() ) ); } }