[Lada-commits] [PATCH 3 of 5] Create a new user object if not exists and use user authorization for queries
Wald Commits
scm-commit at wald.intevation.org
Tue Feb 2 15:33:16 CET 2016
# HG changeset patch
# User Raimund Renkert <raimund.renkert at intevation.de>
# Date 1454423524 -3600
# Node ID c481688150e8d81f3f268abfe1e3df8b015f6bdd
# Parent c3a5e1ee63b8701e580a191cf6a306471f8ff419
Create a new user object if not exists and use user authorization for queries.
diff -r c3a5e1ee63b8 -r c481688150e8 src/main/java/de/intevation/lada/rest/stamm/QueryService.java
--- a/src/main/java/de/intevation/lada/rest/stamm/QueryService.java Tue Feb 02 15:29:23 2016 +0100
+++ b/src/main/java/de/intevation/lada/rest/stamm/QueryService.java Tue Feb 02 15:32:04 2016 +0100
@@ -7,14 +7,25 @@
*/
package de.intevation.lada.rest.stamm;
+import java.util.List;
+
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
+import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
+import javax.ws.rs.core.Context;
+import de.intevation.lada.model.stamm.Favorite;
+import de.intevation.lada.model.stamm.Filter;
+import de.intevation.lada.model.stamm.FilterValue;
import de.intevation.lada.model.stamm.Query;
+import de.intevation.lada.util.annotation.AuthorizationConfig;
import de.intevation.lada.util.annotation.RepositoryConfig;
+import de.intevation.lada.util.auth.Authorization;
+import de.intevation.lada.util.auth.AuthorizationType;
+import de.intevation.lada.util.auth.UserInfo;
import de.intevation.lada.util.data.QueryBuilder;
import de.intevation.lada.util.data.Repository;
import de.intevation.lada.util.data.RepositoryType;
@@ -59,20 +70,33 @@
@RepositoryConfig(type=RepositoryType.RO)
private Repository repository;
+ @Inject
+ @AuthorizationConfig(type=AuthorizationType.HEADER)
+ private Authorization authorization;
+
/**
* Request all configured probe queries.
*/
@GET
@Path("/probe")
@Produces("application/json")
- public Response getProbe() {
+ public Response getProbe(
+ @Context HttpServletRequest request
+ ) {
+ UserInfo userInfo = authorization.getInfo(request);
QueryBuilder<Query> builder = new QueryBuilder<Query>(
repository.entityManager("stamm"),
Query.class
);
builder.and("type", "probe");
- return repository.filter(builder.getQuery(), "stamm");
- //return new Response(true, 200, QueryTools.getProbeConfig());
+ List<Query> queries = repository.filterPlain(builder.getQuery(), "stamm");
+
+ markFavorites(queries, userInfo);
+
+ setFilterValues(queries, 0);
+ setFilterValues(queries, userInfo.getUserId());
+
+ return new Response(true, 200, queries);
}
/**
@@ -81,13 +105,20 @@
@GET
@Path("/messprogramm")
@Produces("application/json")
- public Response getMessprogramm() {
+ public Response getMessprogramm(
+ @Context HttpServletRequest request
+ ) {
+ UserInfo userInfo = authorization.getInfo(request);
QueryBuilder<Query> builder = new QueryBuilder<Query>(
repository.entityManager("stamm"),
Query.class
);
builder.and("type", "messprogramm");
- return repository.filter(builder.getQuery(), "stamm");
+ List<Query> queries = repository.filterPlain(builder.getQuery(), "stamm");
+
+ markFavorites(queries, userInfo);
+
+ return new Response(true, 200, queries);
}
/**
@@ -96,7 +127,10 @@
@GET
@Path("/stammdaten")
@Produces("application/json")
- public Response getStammdaten() {
+ public Response getStammdaten(
+ @Context HttpServletRequest request
+ ) {
+ UserInfo userInfo = authorization.getInfo(request);
QueryBuilder<Query> builder = new QueryBuilder<Query>(
repository.entityManager("stamm"),
Query.class
@@ -105,6 +139,47 @@
builder.or("type", "probenehmer");
builder.or("type", "datensatzerzeuger");
builder.or("type", "messprogrammkategorie");
- return repository.filter(builder.getQuery(), "stamm");
+ List<Query> queries = repository.filterPlain(builder.getQuery(), "stamm");
+
+ markFavorites(queries, userInfo);
+
+ return new Response(true, 200, queries);
+ }
+
+ private void markFavorites(List<Query> queries, UserInfo userInfo) {
+ QueryBuilder<Favorite> fBuilder = new QueryBuilder<Favorite>(
+ repository.entityManager("stamm"),
+ Favorite.class
+ );
+ fBuilder.and("userId", userInfo.getUserId());
+ List<Favorite> favorites = repository.filterPlain(fBuilder.getQuery(), "stamm");
+ for (Favorite f : favorites) {
+ for (Query q : queries) {
+ if (q.getId().equals(f.getQueryId())) {
+ q.setFavorite(true);
+ }
+ }
+ }
+ }
+
+ private void setFilterValues(List<Query> queries, Integer userId) {
+ QueryBuilder<FilterValue> builder = new QueryBuilder<FilterValue>(
+ repository.entityManager("stamm"),
+ FilterValue.class
+ );
+ builder.and("userId", userId);
+ for (Query q : queries) {
+ builder.and("queryId", q.getId());
+ List<FilterValue> values = repository.filterPlain(builder.getQuery(), "stamm");
+ for (Filter f : q.getFilters()) {
+ for (FilterValue fv : values) {
+ if (fv.getFilterId().equals(f.getId())) {
+ f.setValue(fv.getValue());
+ }
+ }
+ }
+ builder = builder.getEmptyBuilder();
+ builder.and("userId", userId);
+ }
}
}
diff -r c3a5e1ee63b8 -r c481688150e8 src/main/java/de/intevation/lada/util/auth/HeaderAuthorization.java
--- a/src/main/java/de/intevation/lada/util/auth/HeaderAuthorization.java Tue Feb 02 15:29:23 2016 +0100
+++ b/src/main/java/de/intevation/lada/util/auth/HeaderAuthorization.java Tue Feb 02 15:32:04 2016 +0100
@@ -7,7 +7,6 @@
*/
package de.intevation.lada.util.auth;
-import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
@@ -18,6 +17,8 @@
import javax.persistence.EntityManager;
import javax.servlet.http.HttpServletRequest;
+import org.apache.log4j.Logger;
+
import de.intevation.lada.model.land.LKommentarM;
import de.intevation.lada.model.land.LKommentarP;
import de.intevation.lada.model.land.LMessung;
@@ -28,6 +29,7 @@
import de.intevation.lada.model.land.LZusatzWert;
import de.intevation.lada.model.stamm.Auth;
import de.intevation.lada.model.stamm.DatensatzErzeuger;
+import de.intevation.lada.model.stamm.LadaUser;
import de.intevation.lada.model.stamm.MessprogrammKategorie;
import de.intevation.lada.model.stamm.Ort;
import de.intevation.lada.model.stamm.Probenehmer;
@@ -47,11 +49,14 @@
@AuthorizationConfig(type=AuthorizationType.HEADER)
public class HeaderAuthorization implements Authorization {
+ @Inject
+ private Logger logger;
+
/**
* The Repository used to read from Database.
*/
@Inject
- @RepositoryConfig(type=RepositoryType.RO)
+ @RepositoryConfig(type=RepositoryType.RW)
private Repository repository;
@SuppressWarnings("rawtypes")
@@ -94,6 +99,19 @@
request.getAttribute("lada.user.roles").toString();
UserInfo info = getGroupsFromDB(roleString);
info.setName(request.getAttribute("lada.user.name").toString());
+ QueryBuilder<LadaUser> builder = new QueryBuilder<LadaUser>(
+ repository.entityManager("stamm"),
+ LadaUser.class
+ );
+ builder.and("name", info.getName());
+ List<LadaUser> user = repository.filterPlain(builder.getQuery(), "stamm");
+ if (user == null || user.isEmpty()) {
+ LadaUser newUser = new LadaUser();
+ newUser.setName(info.getName());
+ Response r = repository.create(newUser, "stamm");
+ user = repository.filterPlain(builder.getQuery(), "stamm");
+ }
+ info.setUserId(user.get(0).getId());
return info;
}
return null;
diff -r c3a5e1ee63b8 -r c481688150e8 src/main/java/de/intevation/lada/util/auth/UserInfo.java
--- a/src/main/java/de/intevation/lada/util/auth/UserInfo.java Tue Feb 02 15:29:23 2016 +0100
+++ b/src/main/java/de/intevation/lada/util/auth/UserInfo.java Tue Feb 02 15:32:04 2016 +0100
@@ -19,6 +19,7 @@
*/
public class UserInfo {
private String name;
+ private Integer userId;
private List<String> messstellen;
private List<String> netzbetreiber;
private List<String> roles;
@@ -46,6 +47,20 @@
}
/**
+ * @return the userId
+ */
+ public Integer getUserId() {
+ return userId;
+ }
+
+ /**
+ * @param userId the userId to set
+ */
+ public void setUserId(Integer userId) {
+ this.userId = userId;
+ }
+
+ /**
* @return the messstellen
*/
public List<String> getMessstellen() {
More information about the Lada-commits
mailing list