diff --git a/src/main/java/com/bernard/misael/model/Privilege.java b/src/main/java/com/bernard/misael/model/Privilege.java index 8f36940..5a1c680 100644 --- a/src/main/java/com/bernard/misael/model/Privilege.java +++ b/src/main/java/com/bernard/misael/model/Privilege.java @@ -4,7 +4,7 @@ import org.springframework.security.core.GrantedAuthority; public enum Privilege implements GrantedAuthority { - LIST_USERS,ADD_USERS,LIST_QUIZZ; + LIST_USERS,ADD_USERS,LIST_QUIZZ,CREATE_QUIZZ,VIEW_ALL_FORMS; @Override public String getAuthority() { diff --git a/src/main/java/com/bernard/misael/service/QuizzManager.java b/src/main/java/com/bernard/misael/service/QuizzManager.java index 696d43e..033ad48 100644 --- a/src/main/java/com/bernard/misael/service/QuizzManager.java +++ b/src/main/java/com/bernard/misael/service/QuizzManager.java @@ -12,6 +12,8 @@ public interface QuizzManager { public JsonNode answer(User user, long quizzId,JsonNode data); public JsonNode next(User user, long quizzId); + public Quizz newQuizz(User user); + public boolean canAccessQuizz(User user, long quizzId); public List editableQuizz(User user); public List answerableQuizz(User user); diff --git a/src/main/java/com/bernard/misael/service/QuizzManagerImpl.java b/src/main/java/com/bernard/misael/service/QuizzManagerImpl.java index 096a788..71aeb1b 100644 --- a/src/main/java/com/bernard/misael/service/QuizzManagerImpl.java +++ b/src/main/java/com/bernard/misael/service/QuizzManagerImpl.java @@ -65,6 +65,8 @@ public class QuizzManagerImpl implements QuizzManager { Optional oquizz = qRepository.findById(quizzId); if(!oquizz.isPresent()) return errorNode("Could not find the quizz with id "+quizzId); + if(!oquizz.get().isComplete()) + return errorNode("Quizz is not complete"); Quizz quizz = oquizz.get(); QuizzForm qf = qfRepository.findByUserAndQuizz(user, quizz); if(qf == null) @@ -124,6 +126,8 @@ public class QuizzManagerImpl implements QuizzManager { Optional oquizz = qRepository.findById(quizzId); if(!oquizz.isPresent()) return errorNode("Could not find quizz with id "+quizzId); + if(!oquizz.get().isComplete()) + return errorNode("Quizz is not complete"); Quizz quizz = oquizz.get(); QuizzForm qf = qfRepository.findByUserAndQuizz(user, quizz); if(qf == null){ @@ -165,7 +169,7 @@ public class QuizzManagerImpl implements QuizzManager { return out; } - public QuizzForm newQuizzForm(User user, Quizz quizz) { + private QuizzForm newQuizzForm(User user, Quizz quizz) { QuizzForm qf = new QuizzForm(); qf.setUser(user); qf.setQuizz(quizz); @@ -176,7 +180,16 @@ public class QuizzManagerImpl implements QuizzManager { return qf; } - public static final JsonNode errorNode(String err){ + @Override + public Quizz newQuizz(User user) { + Quizz q = new Quizz(); + q.setName("Super questions de "+user.getName()+" ("+Integer.toHexString((int)(Math.random()*0xFFFFFFF))+")"); + q.setOwner(user); + q = qRepository.save(q); + return q; + } + + private static final JsonNode errorNode(String err){ ObjectNode out = JsonNodeFactory.instance.objectNode(); out.set("success", JsonNodeFactory.instance.booleanNode(false)); out.set("message", JsonNodeFactory.instance.textNode(err)); diff --git a/src/main/java/com/bernard/misael/web/AuthController.java b/src/main/java/com/bernard/misael/web/AuthController.java index 6a02e2b..eb29b98 100644 --- a/src/main/java/com/bernard/misael/web/AuthController.java +++ b/src/main/java/com/bernard/misael/web/AuthController.java @@ -41,18 +41,6 @@ public class AuthController { return "login"; } - public User getLoggedInUser() { - if(SecurityContextHolder.getContext().getAuthentication().getPrincipal() - instanceof org.springframework.security.core.userdetails.User){ - org.springframework.security.core.userdetails.User user - = (org.springframework.security.core.userdetails.User) - SecurityContextHolder.getContext().getAuthentication().getPrincipal(); - return userService.findUserByName(user.getUsername()); - } else { - return null; - } - } - @GetMapping("/") public String index(Model model) { diff --git a/src/main/java/com/bernard/misael/web/QuestionsController.java b/src/main/java/com/bernard/misael/web/QuestionsController.java index 51d7987..46c9b23 100644 --- a/src/main/java/com/bernard/misael/web/QuestionsController.java +++ b/src/main/java/com/bernard/misael/web/QuestionsController.java @@ -11,10 +11,12 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.security.access.annotation.Secured; import org.springframework.stereotype.Controller; import org.springframework.ui.Model; import org.springframework.web.bind.annotation.RequestMapping; +import com.bernard.misael.model.Privilege; import com.bernard.misael.model.Quizz; import com.bernard.misael.model.User; import com.bernard.misael.questions.QTypes; @@ -57,6 +59,7 @@ public class QuestionsController { model.addAttribute("answerableQuizz",qm.answerableQuizz(u)); model.addAttribute("editableQuizz",qm.editableQuizz(u)); } + return "quizz.html"; } @@ -99,6 +102,18 @@ public class QuestionsController { return new ResponseEntity<>(out, HttpStatus.OK); } + @GetMapping("/new-quizz") + @Secured("CREATE_QUIZZ") + public Object newQuizz(Principal p, Model m) { + if (p==null) + return "redirect:/login?restricted"; + User u = ur.findByName(p.getName()); + if (u==null) + return new ResponseEntity<>(HttpStatus.FORBIDDEN); + Quizz q = qm.newQuizz(u); + + return "redirect:/questions/quizz-edit/"+Long.toString(q.getId()); + } Logger logger = LoggerFactory.getLogger(QuestionsController.class); @GetMapping("/quizz-edit/{q}") @@ -106,7 +121,6 @@ public class QuestionsController { if (p==null) return "redirect:/login?restricted"; User u = ur.findByName(p.getName()); - logger.info("An INFO Message"); if (u==null || !qm.canEditQuizz(u, quizzId)) return new ResponseEntity<>(HttpStatus.FORBIDDEN); m.addAttribute("quizzId", quizzId); diff --git a/src/main/resources/db/migration/V5__new_privileges.sql b/src/main/resources/db/migration/V5__new_privileges.sql new file mode 100644 index 0000000..28af02e --- /dev/null +++ b/src/main/resources/db/migration/V5__new_privileges.sql @@ -0,0 +1,8 @@ +alter table role_privileges drop constraint role_privileges_privileges_check; +alter table role_privileges add constraint role_privileges_privileges_check + check (privileges in ('LIST_USERS','ADD_USERS','LIST_QUIZZ','CREATE_QUIZZ','VIEW_ALL_FORMS')); + +insert into role_privileges VALUES + ((select id from roles where "name" = 'ADMIN'),'CREATE_QUIZZ'); +insert into role_privileges VALUES + ((select id from roles where "name" = 'ADMIN'),'VIEW_ALL_FORMS'); \ No newline at end of file diff --git a/src/main/resources/templates/quizz.html b/src/main/resources/templates/quizz.html index c01916c..20ac1fe 100644 --- a/src/main/resources/templates/quizz.html +++ b/src/main/resources/templates/quizz.html @@ -17,6 +17,7 @@
  • Aucun quizz de disponible malheureusement :(
  • Quizz
  • + Nouveau Quizz \ No newline at end of file