Procházet zdrojové kódy

error redirect beres

athrainsky před 1 rokem
rodič
revize
f2005fd6c3

+ 92 - 33
src/main/kotlin/com/server/alb/controllers/BugController.kt

@@ -3,12 +3,10 @@ package com.server.alb.controllers
 import com.server.alb.models.*
 import com.server.alb.repositories.*
 import com.server.alb.services.BugService
-import com.server.alb.services.BugValidationService.Companion.isValid
 import com.server.alb.services.ProjectService
 import com.server.alb.services.UserService
 import jakarta.servlet.http.HttpServletRequest
 import jakarta.validation.Valid
-import jakarta.validation.Validator
 import org.springframework.security.authentication.AnonymousAuthenticationToken
 import org.springframework.security.core.Authentication
 import org.springframework.security.core.context.SecurityContextHolder
@@ -32,13 +30,13 @@ class BugController(
     private val bugService: BugService,
     private val userService: UserService,
     private val projectService: ProjectService,
-    private val passwordEncoder: PasswordEncoder,
-    private val validator: Validator
+    private val passwordEncoder: PasswordEncoder
 ) {
     val qcResultType = Status.QCResultType.values()
     val worList = Status.WorkedType.values()
     val wStList = Status.WorkedStatusType.values()
     val dStList = Status.DevStatusType.values()
+    var global:String = ""
 
     private fun getProject(): MutableList<Project> {
         return this.projectRepository.findAll()
@@ -67,6 +65,7 @@ class BugController(
     @GetMapping(value = ["/reg"])
     fun showRegister(model: Model): String {
         val userRole = UserRole()
+        userRole.oldPass = "***"
         model.addAttribute("userRole", userRole)
         model.addAttribute("role", getRole())
         return "reg"
@@ -82,7 +81,6 @@ class BugController(
         newUser.password = passwordEncoder.encode(userRole.password)
         newUser.roles = userRole.role
         newUser.isEnabled = true
-        println(newUser)
         return if (bindingResult.hasErrors()) {
             model.addAttribute("role", getRole())
             "reg"
@@ -95,7 +93,11 @@ class BugController(
 
     @RequestMapping(value = ["/userList"])
     fun viewUser(model: Model): String {
+        val myUserDetails = SecurityContextHolder.getContext().authentication.name
+        val userLogin = userRepository.findByUsername(myUserDetails)
+        val user2 = userService[userLogin.get().id]
         model.addAttribute("user", getUser())
+        model.addAttribute("user2", user2)
         return "userList"
     }
 
@@ -120,7 +122,6 @@ class BugController(
         model: Model,
     ): String {
         return if (bindingResult.hasErrors()) {
-            println(project)
             "add_proj"
         } else {
             projectRepository.save(project)
@@ -187,8 +188,6 @@ class BugController(
                 bug.qcId = userLogin.get()
             }
         }
-        println(bug)
-        println(bindingResult)
         return if (bindingResult.hasErrors()) {
             model.addAttribute("user", getUser())
             model.addAttribute("platform", getPlatform())
@@ -202,34 +201,37 @@ class BugController(
         }
     }
 
-    @RequestMapping(value = ["/save"], method = [RequestMethod.POST])
+    @PostMapping(value = ["/save"])
     fun saveBug(
         @Valid @ModelAttribute("bug") bug: ListBug,
+        bindingResult: BindingResult,
         redirectAttributes: RedirectAttributes,
-        result: BindingResult,
-        request: HttpServletRequest,
+        httpServletRequest: HttpServletRequest,
+        @RequestParam page: String,
+        model: Model,
     ): String {
-        val referer: String = request.getHeader("Referer")
-        val url = referer.split("=")
-        if (bug.qcId == null) {
-            val myUserDetails = SecurityContextHolder.getContext().authentication.name
-            val userLogin = userRepository.findByUsername(myUserDetails)
-            if (userLogin.isPresent) {
-                bug.qcId = userLogin.get()
-            }
-        }
-        val successMessage: String = if (isValid(bug)) {
-            bugService.save(bug)
-            "Success save bug"
-        } else {
-            "Failed ! Please try again"
+        if (bindingResult.hasErrors()) {
+            model.addAttribute("listQc", getUser())
+            model.addAttribute("listPro", getUser())
+            model.addAttribute("platform", getPlatform())
+            model.addAttribute("bug", bug)
+            model.addAttribute("worList", worList)
+            model.addAttribute("wStList", wStList)
+            model.addAttribute("dStList", dStList)
+            model.addAttribute("qcResultType", qcResultType)
+            return "edit_bug"
         }
-        redirectAttributes.addFlashAttribute("successMessage", successMessage)
-        return if (referer.endsWith("=index")) "redirect:/" + url.last() else "redirect:/" + url.last()
+        bugService.save(bug)
+        redirectAttributes.addFlashAttribute("successMessage", "Success save bug")
+        return "redirect:/$global"
     }
 
-    @RequestMapping(value = ["/saveUser"], method = [RequestMethod.POST])
-    fun saveUserEdit(@Valid @ModelAttribute("userRole") userRole: UserRole): String {
+    @PostMapping(value = ["/saveUser"])
+    fun saveUserEdit(
+        @Valid @ModelAttribute("userRole") userRole: UserRole,
+        bindingResult: BindingResult,
+        model: Model
+    ): String {
         val existUser = userService[userRole.id]
         val editUser = User()
         editUser.id = userRole.id
@@ -237,14 +239,55 @@ class BugController(
         editUser.password = passwordEncoder.encode(userRole.password)
         editUser.roles = userRole.role
         editUser.isEnabled = true
-        if (userService.checkIfValidOldPassword(userRole.oldPass, existUser.password)) {
-            userService.save(editUser)
+        if (bindingResult.hasErrors()) {
+            return "edit_user"
         }
+        userService.save(editUser)
         return "redirect:/userList"
     }
 
-    @RequestMapping(value = ["/saveProj"], method = [RequestMethod.POST])
-    fun saveProjEdit(@Valid @ModelAttribute("project") project: Project): String {
+    @PostMapping(value = ["/chgPass"])
+    fun saveChangePass(
+        @Valid @ModelAttribute("userRole") userRole: UserRole,
+        bindingResult: BindingResult,
+        model: Model,
+        redirectAttributes: RedirectAttributes
+    ): String {
+        val existUser = userService[userRole.id]
+        val editUser = User()
+        editUser.id = userRole.id
+        editUser.username = userRole.username
+        editUser.password = passwordEncoder.encode(userRole.password)
+        editUser.roles = existUser.roles
+        editUser.isEnabled = true
+        userRole.role = existUser.roles
+        if (bindingResult.hasErrors()) {
+            model.addAttribute("userRole", userRole)
+            model.addAttribute("role", getRole())
+            return "change_pass"
+        }
+        if (!userService.checkIfValidOldPassword(userRole.oldPass, existUser.password)) {
+            model.addAttribute("userRole", userRole)
+            model.addAttribute("role", getRole())
+            redirectAttributes.addFlashAttribute("successMessage", "old password not match")
+            return "redirect:/userList/chgPass/" + userRole.id
+        }
+        userService.save(editUser)
+        redirectAttributes.addFlashAttribute("successMessage", "Success save user")
+        return "redirect:/userList"
+    }
+
+    @PostMapping(value = ["/saveProj"])
+    fun saveProjEdit(
+        @Valid @ModelAttribute("project") project: Project,
+        bindingResult: BindingResult,
+        model: Model,
+        redirectAttributes: RedirectAttributes
+    ): String {
+        if (bindingResult.hasErrors()){
+            return "edit_proj"
+        }
+        redirectAttributes.addFlashAttribute("successMessage", "Success save project")
         projectService.save(project)
         return "redirect:/proj"
     }
@@ -254,6 +297,7 @@ class BugController(
         @PathVariable(name = "id") id: Long,
         @RequestParam page: String,
     ): ModelAndView {
+        global = page
         val mav = ModelAndView("edit_bug")
         val bug: ListBug = bugService[id]
         mav.addObject("listQc", getUser())
@@ -276,6 +320,21 @@ class BugController(
         userRole.username = user.username
         userRole.password = user.password
         userRole.role = user.roles
+        userRole.oldPass = "***"
+        mav.addObject("userRole", userRole)
+        mav.addObject("role", getRole())
+        return mav
+    }
+
+    @RequestMapping("/userList/chgPass/{id}")
+    fun changePass(@PathVariable(name = "id") id: Long): ModelAndView {
+        val mav = ModelAndView("change_pass")
+        val user: User = userService[id]
+        val userRole = UserRole()
+        userRole.id = user.id
+        userRole.username = user.username
+        userRole.password = user.password
+        userRole.role = user.roles
         mav.addObject("userRole", userRole)
         mav.addObject("role", getRole())
         return mav

+ 4 - 0
src/main/kotlin/com/server/alb/models/User.kt

@@ -39,4 +39,8 @@ class User() {
         }
     }
 
+    override fun toString(): String {
+        return ("User [id=$id,username=$username, password=$password, isEnabled=$isEnabled, roles=$roles]")
+    }
+
 }

+ 3 - 2
src/main/kotlin/com/server/alb/models/UserRole.kt

@@ -1,7 +1,7 @@
 package com.server.alb.models
 
 import jakarta.validation.constraints.NotBlank
-import jakarta.validation.constraints.NotNull
+import jakarta.validation.constraints.NotEmpty
 
 class UserRole {
     var id: Long = 0
@@ -12,10 +12,11 @@ class UserRole {
     @NotBlank(message = "Password tidak boleh kosong")
     var password: String = ""
 
-    @NotNull(message = "Role tidak boleh kosong")
+    @NotEmpty(message = "Role tidak boleh kosong")
     var role: Set<Role> = HashSet()
     var isEnabled = false
 
+    @NotBlank(message = "Old Password tidak boleh kosong")
     var oldPass: String = ""
 
     override fun toString(): String {

+ 53 - 0
src/main/resources/templates/change_pass.html

@@ -0,0 +1,53 @@
+<!DOCTYPE html>
+<html xmlns:th="http://www.thymeleaf.org"
+>
+<head>
+    <meta charset="ISO-8859-1">
+    <title>Change Password</title>
+    <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.3.1/dist/css/bootstrap.min.css" rel="stylesheet"
+          integrity="sha384-4bw+/aepP/YC94hEpVNVgiZdgIC5+VKNBQNGCHeKRQN+PtmoHDEXuppvnDJzQIu9" crossorigin="anonymous">
+</head>
+<body>
+<div class="container py-5 h-100">
+    <h1>Change Password</h1>
+    <span th:text="${successMessage}" style="color:red"></span>
+    <br/>
+    <form action="#" th:action="@{/chgPass}" th:object="${userRole}" method="post">
+        <table>
+            <tr>
+                <td>User ID:</td>
+                <td><input type="text" th:field="*{id}" class="form-control" readonly="readonly"/></td>
+            </tr>
+            <tr>
+                <td>User Name:</td>
+                <td><input type="text" th:field="*{username}" readonly="readonly" class="form-control">
+                </td>
+            </tr>
+            <tr>
+                <td>Old Password:</td>
+                <td><input id="oldPass" type="password" th:field="*{oldPass}" class="form-control">
+                </td>
+                <td th:if="${#fields.hasErrors('oldPass')}" th:errors="*{oldPass}" style="color:red">old password Error</td>
+            </tr>
+            <tr>
+                <td>New Password:</td>
+                <td><input id="password" type="password" th:field="*{password}" class="form-control">
+                </td>
+                <td th:if="${#fields.hasErrors('password')}" th:errors="*{password}" style="color:red">password Error</td>
+            </tr>
+            <tr hidden="hidden">
+                <td>Role:</td>
+                <td><select th:field="*{role}">
+                    <option th:each="role: ${role}" th:value="${role.id}" th:text="${role.name}"></option>
+                </select></td>
+            </tr>
+            <tr>
+                <td colspan="2">
+                    <button type="submit">Save</button>
+                </td>
+            </tr>
+        </table>
+    </form>
+</div>
+</body>
+</html>

+ 12 - 6
src/main/resources/templates/edit_bug.html

@@ -1,6 +1,5 @@
 <!DOCTYPE html>
-<html xmlns:th="http://www.thymeleaf.org"
-      xmlns:sec="https://www.thymeleaf.org/thymeleaf-extras-springsecurity5">
+<html xmlns:th="http://www.thymeleaf.org">
 <head>
     <meta charset="ISO-8859-1">
     <title>Edit Bug</title>
@@ -13,7 +12,7 @@
     <br/>
     <div th:each="project: ${project}">
     </div>
-    <form action="#" th:action="@{/save}" th:object="${bug}" method="post">
+    <form action="#" th:action="@{/save?page=}" th:object="${bug}" method="post">
         <table>
             <tr>
                 <td>Bug ID:</td>
@@ -21,8 +20,8 @@
             </tr>
             <tr>
                 <td>Tanggal QC:</td>
-                <td><input type="date" pattern="dd-MM-yyyy" th:field="*{date}" class="form-control">
-                </td>
+                <td><input type="date" pattern="dd-MM-yyyy" th:field="*{date}" class="form-control"></td>
+                <td th:if="${#fields.hasErrors('date')}" th:errors="*{date}" style="color:red">Tanggal Error</td>
             </tr>
             <tr>
                 <td>Tim QC:</td>
@@ -36,10 +35,13 @@
                     <option value="">Pilih..</option>
                     <option th:each="platform: ${platform}" th:value="${platform.id}" th:text="${platform.name}"/>
                 </select></td>
+                <td th:if="${#fields.hasErrors('platform')}" th:errors="*{platform}" style="color:red">Platform Error
+                </td>
             </tr>
             <tr>
                 <td>Link Good Day:</td>
                 <td><input type="text" th:field="*{link}" class="form-control"/></td>
+                <td th:if="${#fields.hasErrors('link')}" th:errors="*{link}" style="color:red">Link Error</td>
             </tr>
             <tr>
                 <td>Hasil QC:</td>
@@ -48,16 +50,20 @@
                     <option th:each="qcResultType: ${qcResultType}" th:value="${qcResultType}"
                             th:text="${qcResultType.display}"/>
                 </select></td>
+                <td th:if="${#fields.hasErrors('result')}" th:errors="*{result}" style="color:red">Hasil QC Error</td>
             </tr>
             <tr>
                 <td>Bug:</td>
                 <td><input type="text" th:field="*{description}" class="form-control"/></td>
+                <td th:if="${#fields.hasErrors('description')}" th:errors="*{description}" style="color:red">Bug Error
+                </td>
             </tr>
             <tr>
                 <td>Programmer:</td>
                 <td><select th:field="*{proId}">
                     <option th:each="user: ${listPro}" th:value="${user.id}" th:text="${user.username}"/>
                 </select></td>
+                <td th:if="${#fields.hasErrors('proId')}" th:errors="*{proId}" style="color:red">Programmer Error</td>
             </tr>
             <tr>
                 <td>Link Image:</td>
@@ -87,7 +93,7 @@
                 <td><input type="text" th:field="*{development}"
                            class="form-control"/></td>
             </tr>
-            <tr sec:authorize="hasAnyAuthority('ADMIN', 'QC')">
+            <tr>
                 <td>QC:</td>
                 <td>
                     <select th:field="*{devStat}">

+ 3 - 0
src/main/resources/templates/edit_proj.html

@@ -16,16 +16,19 @@
             <tr>
                 <td>Project ID:</td>
                 <td><input type="text" th:field="*{id}" class="form-control" readonly="readonly"/></td>
+
             </tr>
             <tr>
                 <td>Project Name:</td>
                 <td><input type="text" th:field="*{name}" class="form-control">
                 </td>
+                <td th:if="${#fields.hasErrors('name')}" th:errors="*{name}" style="color:red">name Error</td>
             </tr>
             <tr>
                 <td>Description:</td>
                 <td><input type="text" th:field="*{description}" class="form-control">
                 </td>
+                <td th:if="${#fields.hasErrors('description')}" th:errors="*{description}" style="color:red">description Error</td>
             </tr>
             <tr>
                 <td colspan="2">

+ 5 - 4
src/main/resources/templates/edit_user.html

@@ -21,15 +21,16 @@
                 <td>User Name:</td>
                 <td><input type="text" th:field="*{username}" class="form-control">
                 </td>
+                <td th:if="${#fields.hasErrors('username')}" th:errors="*{username}" style="color:red">username Error</td>
             </tr>
-            <tr>
+            <tr hidden="hidden">
                 <td>Old Password:</td>
-                <td><input id="oldPass" type="password" th:field="*{oldPass}" class="form-control">
+                <td><input id="oldPass" type="text" th:field="*{oldPass}" class="form-control">
                 </td>
             </tr>
-            <tr>
+            <tr hidden="hidden">
                 <td>New Password:</td>
-                <td><input id="password" type="password" th:field="*{password}" class="form-control">
+                <td><input id="password" type="text" th:field="*{password}" class="form-control">
                 </td>
             </tr>
             <tr>

+ 1 - 1
src/main/resources/templates/inPro.html

@@ -78,7 +78,7 @@
             <td th:text="${bug.development}">Development</td>
             <td th:text="${bug._displayDevStat}">QC</td>
             <td sec:authorize="hasAnyAuthority('ADMIN', 'QC')">
-                <a th:href="@{'/edit/' + ${bug.id} + '?page=inPro' +${project}}">Edit</a> &nbsp;&nbsp;&nbsp;&nbsp;
+                <a th:href="@{'/edit/' + ${bug.id} + '?page=inPro/' +${project}}">Edit</a> &nbsp;&nbsp;&nbsp;&nbsp;
                 <a th:href="@{'/delete2/' + ${bug.id}}">Delete</a>
             </td>
         </tr>

+ 6 - 1
src/main/resources/templates/reg.html

@@ -22,13 +22,18 @@
                 <td><input type="password" th:field="*{password}" class="form-control"/></td>
                 <td th:if="${#fields.hasErrors('password')}" th:errors="*{password}" style="color:red">password Error</td>
             </tr>
+            <tr hidden="hidden">
+                <td>Old Password:</td>
+                <td><input id="oldPass" type="text" th:field="*{oldPass}" class="form-control">
+                </td>
+            </tr>
             <tr>
                 <td>Role:</td>
                 <td><select th:field="*{role}">
                     <option value="">Pilih</option>
                     <option th:each="role: ${role}" th:value="${role.id}" th:text="${role.name}"></option>
-                    <td th:if="${#fields.hasErrors('role')}" th:errors="*{role}" style="color:red">role Error</td>
                 </select></td>
+                <td th:if="${#fields.hasErrors('role')}" th:errors="*{role}" style="color:red">role Error</td>
             </tr>
             <tr>
                 <td colspan="2">

+ 4 - 0
src/main/resources/templates/userList.html

@@ -17,12 +17,16 @@
             &nbsp;List User
             <a href="/proj">List Project</a>
         </div>
+        <div th:each="user2: ${user2}">
+            <a th:href="@{'/userList/chgPass/' + ${user2.id}}">Change Password</a>
+        </div>
 
         <form th:action="@{/logout}" method="post">
             <input type="submit" value="Logout"/>
         </form>
 
         <h1>List User</h1>
+        <span th:text="${successMessage}" style="color:green"></span>
     </div>
     <br/><br/>
     <table class="table table table-striped">