diff --git a/src/main/java/org/hbp/mip/controllers/ArticlesApi.java b/src/main/java/org/hbp/mip/controllers/ArticlesApi.java index bbbad3dfd3f9e9e192f69d05638014e3d69d3f14..2ac7d351b2549ce7107a965041b1b47a82e4fde4 100644 --- a/src/main/java/org/hbp/mip/controllers/ArticlesApi.java +++ b/src/main/java/org/hbp/mip/controllers/ArticlesApi.java @@ -45,7 +45,7 @@ public class ArticlesApi { User user = mipApplication.getUser(); - String queryString = "SELECT a FROM Article a, User u WHERE a.createdBy=u.id"; + String queryString = "SELECT a FROM Article a, User u WHERE a.createdBy=u.username"; if(status != null) { queryString += " AND status= :status"; @@ -56,9 +56,11 @@ public class ArticlesApi { } else { + queryString += " AND (status='published' or u.username= :username)"; if(team != null && team) { - queryString += " AND u.team= :team"; + // TODO: decide if this is needed + //queryString += " AND u.team= :team"; } } @@ -70,13 +72,7 @@ public class ArticlesApi { if (status != null) { query.setString("status", status); } - if (own != null && own) { - query.setString("username", user.getUsername()); - } else { - if (team != null && team) { - query.setString("team", user.getTeam()); - } - } + query.setString("username", user.getUsername()); articles = query.list(); session.getTransaction().commit(); } catch (Exception e) @@ -102,54 +98,61 @@ public class ArticlesApi { User user = mipApplication.getUser(); - String originalTitle = article.getTitle(); - article.setCreatedAt(new Date()); if (article.getStatus().equals("published")) { article.setPublishedAt(new Date()); } article.setCreatedBy(user); + Long count; Session session = HibernateUtil.getSessionFactory().getCurrentSession(); try{ session.beginTransaction(); - Long count; int i = 0; - do { - Slugify slg = null; - try { - slg = new Slugify(); - } catch (IOException e) { - e.printStackTrace(); - } - String slug = slg.slugify(article.getTitle()); - article.setSlug(slug); - + do{ + i++; count = (Long) session - .createQuery("select count(*) from Article where slug= :slug") - .setString("slug", slug) + .createQuery("select count(*) from Article where title= :title") + .setString("title", article.getTitle()) .uniqueResult(); + if(count > 0) { String title = article.getTitle(); - if(i > 0) + if(i > 1) { title = title.substring(0, title.length()-4); } - i++; article.setTitle(title + " (" + i + ")"); } } while(count > 0); - count = (Long) session - .createQuery("select count(*) from Article where title= :title") - .setString("title", originalTitle) - .uniqueResult(); - if(count < 1) - { - article.setTitle(originalTitle); + Slugify slg = null; + try { + slg = new Slugify(); + } catch (IOException e) { + e.printStackTrace(); } + String slug = slg.slugify(article.getTitle()); + + i = 0; + do { + i++; + count = (Long) session + .createQuery("select count(*) from Article where slug= :slug") + .setString("slug", slug) + .uniqueResult(); + if(count > 0) + { + if(i > 1) + { + slug = slug.substring(0, slug.length()-2); + } + slug += "-"+i; + } + article.setSlug(slug); + } while(count > 0); session.save(article); session.getTransaction().commit(); @@ -173,15 +176,24 @@ public class ArticlesApi { @ApiParam(value = "slug", required = true) @PathVariable("slug") String slug ) { + User user = mipApplication.getUser(); + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); Article article = null; try{ session.beginTransaction(); + article = (Article) session .createQuery("FROM Article WHERE slug= :slug") .setString("slug", slug) .uniqueResult(); + session.getTransaction().commit(); + + if (!article.getStatus().equals("published") && !article.getCreatedBy().getUsername().equals(user.getUsername())) + { + return ResponseEntity.status(HttpStatus.FORBIDDEN).body(null); + } } catch (Exception e) { if(session.getTransaction() != null) @@ -203,32 +215,47 @@ public class ArticlesApi { @RequestBody @ApiParam(value = "Article to update", required = true) @Valid Article article ) { + User user = mipApplication.getUser(); + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); try{ session.beginTransaction(); + String author = (String) session + .createQuery("select U.username from User U, Article A where A.createdBy = U.username and A.slug = :slug") + .setString("slug", slug) + .uniqueResult(); + + if(!user.getUsername().equals(author)) + { + session.getTransaction().commit(); + return new ResponseEntity<>(HttpStatus.FORBIDDEN); + } + String oldTitle = (String) session .createQuery("select title from Article where slug= :slug") .setString("slug", slug) .uniqueResult(); - if(!oldTitle.equals(article.getTitle())) { + String newTitle = article.getTitle(); + + if(!newTitle.equals(oldTitle)) { Long count; int i = 0; do { - String title = article.getTitle(); + i++; + newTitle = article.getTitle(); count = (Long) session .createQuery("select count(*) from Article where title= :title") - .setString("title", title) + .setString("title", newTitle) .uniqueResult(); - if (count > 0 && !oldTitle.equals(title)) { - if (i > 0) { - title = title.substring(0, title.length() - 4); + if (count > 0 && !newTitle.equals(oldTitle)) { + if (i > 1) { + newTitle = newTitle.substring(0, newTitle.length() - 4); } - i++; - article.setTitle(title + " (" + i + ")"); + article.setTitle(newTitle + " (" + i + ")"); } - } while (count > 0 && !oldTitle.equals(article.getTitle())); + } while (count > 0 && !newTitle.equals(oldTitle)); } session.update(article); diff --git a/src/main/java/org/hbp/mip/controllers/ModelsApi.java b/src/main/java/org/hbp/mip/controllers/ModelsApi.java index 4899032e5e03f0b35a3e13240293e1e8db29e775..b7f3338edba6bebf546bfdd015993563dbc4ad03 100644 --- a/src/main/java/org/hbp/mip/controllers/ModelsApi.java +++ b/src/main/java/org/hbp/mip/controllers/ModelsApi.java @@ -18,10 +18,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; import java.io.IOException; -import java.util.Date; -import java.util.LinkedList; -import java.util.List; -import java.util.Random; +import java.util.*; import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE; @@ -42,21 +39,28 @@ public class ModelsApi { public ResponseEntity<List<Model>> getModels( @ApiParam(value = "Max number of results") @RequestParam(value = "limit", required = false) Integer limit, @ApiParam(value = "Only ask own models") @RequestParam(value = "own", required = false) Boolean own, - @ApiParam(value = "Only ask models from own team") @RequestParam(value = "team", required = false) Boolean team + @ApiParam(value = "Only ask models from own team") @RequestParam(value = "team", required = false) Boolean team, + @ApiParam(value = "Only ask published models") @RequestParam(value = "valid", required = false) Boolean valid ) { User user = mipApplication.getUser(); - String queryString = "SELECT m FROM Model m, User u WHERE m.createdBy=u.id"; + String queryString = "SELECT m FROM Model m, User u WHERE m.createdBy=u.username"; + if(valid != null && valid) + { + queryString += " AND m.valid= :valid"; + } if(own != null && own) { queryString += " AND u.username= :username"; } else { + queryString += " AND (m.valid=true or u.username= :username)"; if(team != null && team) { - queryString += " AND u.team= :team"; + // TODO: decide if this is needed + //queryString += " AND u.team= :team"; } } @@ -65,17 +69,11 @@ public class ModelsApi { try{ session.beginTransaction(); Query query = session.createQuery(queryString); - if(own != null && own) + if(valid != null) { - query.setString("username", user.getUsername()); - } - else - { - if(team != null && team) - { - query.setString("team", user.getTeam()); - } + query.setBoolean("valid", valid); } + query.setString("username", user.getUsername()); if(limit != null) { query.setMaxResults(limit); // Pagination : Use query.setFirstResult(...) to set begining index @@ -104,55 +102,67 @@ public class ModelsApi { User user = mipApplication.getUser(); - String originalTitle = model.getTitle(); - model.setTitle(model.getConfig().getTitle().get("text")); - model.setValid(true); model.setCreatedBy(user); model.setCreatedAt(new Date()); + if(model.getValid() == null) + { + model.setValid(false); + } + Long count; Session session = HibernateUtil.getSessionFactory().getCurrentSession(); - - try { + try{ session.beginTransaction(); - Long count; + int i = 0; + do{ + i++; + count = (Long) session + .createQuery("select count(*) from Model where title= :title") + .setString("title", model.getTitle()) + .uniqueResult(); - do { - Slugify slg = null; - try { - slg = new Slugify(); - } catch (IOException e) { - e.printStackTrace(); + if(count > 0) + { + String title = model.getTitle(); + if(i > 1) + { + title = title.substring(0, title.length()-4); + } + model.setTitle(title + " (" + i + ")"); } - String slug = slg.slugify(model.getTitle()); - model.setSlug(slug); + } while(count > 0); + Slugify slg = null; + try { + slg = new Slugify(); + } catch (IOException e) { + e.printStackTrace(); + } + String slug = slg.slugify(model.getTitle()); + + i = 0; + do { + i++; count = (Long) session .createQuery("select count(*) from Model where slug= :slug") .setString("slug", slug) .uniqueResult(); if(count > 0) { - String title = model.getTitle(); - if(i > 0) + if(i > 1) { - title = title.substring(0, title.length()-4); + slug = slug.substring(0, slug.length()-2); } - i++; - model.setTitle(title + " (" + i + ")"); + slug += "-"+i; } + model.setSlug(slug); + } while(count > 0); - } while (count > 0); - - count = (Long) session - .createQuery("select count(*) from Article where title= :title") - .setString("title", originalTitle) - .uniqueResult(); - if(count < 1) - { - model.setTitle(originalTitle); - } + Map<String, String> map = new HashMap<>(model.getConfig().getTitle()); + map.put("text", model.getTitle()); + model.getConfig().setTitle(map); session.save(model); session.getTransaction().commit(); @@ -165,7 +175,6 @@ public class ModelsApi { } } - return new ResponseEntity<Model>(HttpStatus.CREATED).ok(model); } @@ -176,6 +185,8 @@ public class ModelsApi { @ApiParam(value = "slug", required = true) @PathVariable("slug") String slug ) { + User user = mipApplication.getUser(); + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); Model model = null; Query query; @@ -188,6 +199,11 @@ public class ModelsApi { .uniqueResult(); session.getTransaction().commit(); + if (!model.getValid() && !model.getCreatedBy().getUsername().equals(user.getUsername())) + { + return ResponseEntity.status(HttpStatus.FORBIDDEN).body(null); + } + } catch (Exception e) { if(session.getTransaction() != null) @@ -277,34 +293,53 @@ public class ModelsApi { User user = mipApplication.getUser(); + model.setTitle(model.getConfig().getTitle().get("text")); + Session session = HibernateUtil.getSessionFactory().getCurrentSession(); try{ session.beginTransaction(); + String author = (String) session + .createQuery("select U.username from User U, Model M where M.createdBy = U.username and M.slug = :slug") + .setString("slug", slug) + .uniqueResult(); + + if(!user.getUsername().equals(author)) + { + session.getTransaction().commit(); + return new ResponseEntity<>(HttpStatus.FORBIDDEN); + } + String oldTitle = (String) session - .createQuery("select title from Article where slug= :slug") + .createQuery("select title from Model where slug= :slug") .setString("slug", slug) .uniqueResult(); - if(!oldTitle.equals(model.getTitle())) { + String newTitle = model.getTitle(); + + if(!newTitle.equals(oldTitle)) { Long count; int i = 0; do { - String title = model.getTitle(); + i++; + newTitle = model.getTitle(); count = (Long) session - .createQuery("select count(*) from Article where title= :title") - .setString("title", title) + .createQuery("select count(*) from Model where title= :title") + .setString("title", newTitle) .uniqueResult(); - if (count > 0 && !oldTitle.equals(title)) { - if (i > 0) { - title = title.substring(0, title.length() - 4); + if (count > 0 && !newTitle.equals(oldTitle)) { + if (i > 1) { + newTitle = newTitle.substring(0, newTitle.length() - 4); } - i++; - model.setTitle(title + " (" + i + ")"); + model.setTitle(newTitle + " (" + i + ")"); } - } while (count > 0 && !oldTitle.equals(model.getTitle())); + } while (count > 0 && !newTitle.equals(oldTitle)); } + Map<String, String> map = new HashMap<>(model.getConfig().getTitle()); + map.put("text", model.getTitle()); + model.getConfig().setTitle(map); + session.update(model); session.getTransaction().commit(); } catch (Exception e)