added the post /user Endpoint
This commit is contained in:
		@ -41,10 +41,10 @@ public class MockController {
 | 
			
		||||
    @PostMapping("/mock")
 | 
			
		||||
    public void postMock(){
 | 
			
		||||
 | 
			
		||||
        User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand",new Date(0), "none",Role.Admin,"admin");
 | 
			
		||||
        User joe = new User("Mama","Joe","student@student.com","roundabout","DaWarudo",new Date(0), "None",Role.Student,"student");
 | 
			
		||||
        User meh = new User("Inspiration","lackOf","secretary@secretary.com","a Box","the street",new Date(0),"none", Role.Teacher,"secretary");
 | 
			
		||||
        User joke = new User("CthemBalls","Lemme","teacher@teacher.com","lab","faculty",new Date(0), "none",Role.Teacher,"teacher");
 | 
			
		||||
        User herobrine = new User("brine","hero","admin@admin.com","in your WalLs","ShadowsLand",new Date(0), "none",Role.Admin,passwordEncoder.encode("admin"));
 | 
			
		||||
        User joe = new User("Mama","Joe","student@student.com","roundabout","DaWarudo",new Date(0), "None",Role.Student,passwordEncoder.encode("student"));
 | 
			
		||||
        User meh = new User("Inspiration","lackOf","secretary@secretary.com","a Box","the street",new Date(0),"none", Role.Teacher, passwordEncoder.encode("secretary"));
 | 
			
		||||
        User joke = new User("CthemBalls","Lemme","teacher@teacher.com","lab","faculty",new Date(0), "none",Role.Teacher, passwordEncoder.encode("teacher"));
 | 
			
		||||
 | 
			
		||||
        mockUsers = new ArrayList<User>(Arrays.asList(herobrine,joe,meh,joke));
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,8 +1,10 @@
 | 
			
		||||
package ovh.herisson.Clyde.EndPoints;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
import jakarta.servlet.http.HttpServletRequest;
 | 
			
		||||
import org.springframework.http.HttpStatus;
 | 
			
		||||
 | 
			
		||||
import org.springframework.http.MediaType;
 | 
			
		||||
import org.springframework.http.ResponseEntity;
 | 
			
		||||
import org.springframework.web.bind.annotation.*;
 | 
			
		||||
import ovh.herisson.Clyde.Responses.UnauthorizedResponse;
 | 
			
		||||
@ -11,7 +13,9 @@ import ovh.herisson.Clyde.Services.UserService;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.Role;
 | 
			
		||||
import ovh.herisson.Clyde.Tables.User;
 | 
			
		||||
 | 
			
		||||
import java.io.IOException;
 | 
			
		||||
import java.util.ArrayList;
 | 
			
		||||
import java.util.Map;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@RestController
 | 
			
		||||
@ -38,13 +42,9 @@ public class UserController {
 | 
			
		||||
    @PostMapping("/user")
 | 
			
		||||
    public ResponseEntity<String> postUser(@RequestBody User user,@RequestHeader("Authorization") String authorization){
 | 
			
		||||
 | 
			
		||||
        if (authorization == null) return new UnauthorizedResponse<>(null);
 | 
			
		||||
        User poster = authServ.getUserFromToken(authorization);
 | 
			
		||||
 | 
			
		||||
        if (poster.getRole() != Role.Secretary || poster.getRole() != Role.Admin)
 | 
			
		||||
        if (!isSecretaryOrAdmin(authorization))
 | 
			
		||||
            return new UnauthorizedResponse<>(null);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        userService.save(user);
 | 
			
		||||
        return new ResponseEntity<>(String.format("Account created with ID:%s",user.getRegNo()),HttpStatus.CREATED);
 | 
			
		||||
    }
 | 
			
		||||
@ -52,12 +52,7 @@ public class UserController {
 | 
			
		||||
    @GetMapping("/users")
 | 
			
		||||
    public ResponseEntity<Iterable<Object[]>> getAllUsers(@RequestHeader("Authorization") String authorization){
 | 
			
		||||
 | 
			
		||||
        if (authorization == null) return new UnauthorizedResponse<>(null);
 | 
			
		||||
        User poster = authServ.getUserFromToken(authorization);
 | 
			
		||||
 | 
			
		||||
        if (poster == null) return new UnauthorizedResponse<>(null);
 | 
			
		||||
 | 
			
		||||
        if (poster.getRole() != Role.Secretary || poster.getRole() != Role.Admin)
 | 
			
		||||
        if (!isSecretaryOrAdmin(authorization))
 | 
			
		||||
            return new UnauthorizedResponse<>(null);
 | 
			
		||||
 | 
			
		||||
        Iterable<User> users = userService.getAll();
 | 
			
		||||
@ -68,7 +63,19 @@ public class UserController {
 | 
			
		||||
        }
 | 
			
		||||
        return new ResponseEntity<>(withoutPassword, HttpStatus.OK);
 | 
			
		||||
    }
 | 
			
		||||
    @PatchMapping("/user")
 | 
			
		||||
    public ResponseEntity<String> patchUser(@RequestBody Map<String,Object> updates, @RequestHeader("Authorization") String authorization) {
 | 
			
		||||
 | 
			
		||||
        if (authorization == null) return new UnauthorizedResponse<>(null);
 | 
			
		||||
 | 
			
		||||
        User poster = authServ.getUserFromToken(authorization);
 | 
			
		||||
        if (poster == null) {return new UnauthorizedResponse<>("bad authorization");}
 | 
			
		||||
 | 
			
		||||
        if (!userService.modifyData(poster, updates, poster))
 | 
			
		||||
            return new UnauthorizedResponse<>("there was an issue with the updates requested");
 | 
			
		||||
 | 
			
		||||
        return new ResponseEntity<>("data modified", HttpStatus.OK);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
        /** return user's data except password
 | 
			
		||||
@ -78,5 +85,15 @@ public class UserController {
 | 
			
		||||
    private Object[] userWithoutPassword(User user){
 | 
			
		||||
        return new Object[] {user.getRegNo(),user.getFirstName(),user.getLastName(),user.getBirthDate(),user.getCountry(),user.getAddress(),user.getRole()};
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    private boolean isSecretaryOrAdmin(String authorization){
 | 
			
		||||
        if (authorization ==null)
 | 
			
		||||
            return false;
 | 
			
		||||
 | 
			
		||||
        User poster = authServ.getUserFromToken(authorization);
 | 
			
		||||
        if (poster == null) return false;
 | 
			
		||||
 | 
			
		||||
        return poster.getRole() == Role.Secretary && poster.getRole() == Role.Admin;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -28,6 +28,68 @@ public class UserService {
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /** modify the target data
 | 
			
		||||
     * verify the permission of modifying from the poster
 | 
			
		||||
     *
 | 
			
		||||
     * @param poster the user wanting to modify target's data
 | 
			
		||||
     * @param updates the changes to be made
 | 
			
		||||
     * @param target the user to update
 | 
			
		||||
     * @return if the changes were done or not
 | 
			
		||||
     */
 | 
			
		||||
    public boolean modifyData(User poster, Map<String ,Object> updates, User target){
 | 
			
		||||
 | 
			
		||||
        System.out.printf("%s and %s",poster.getRegNo(),target.getRegNo());
 | 
			
		||||
        if (poster.getRegNo().equals(target.getRegNo())){
 | 
			
		||||
            for (Map.Entry<String, Object> entry : updates.entrySet()){
 | 
			
		||||
 | 
			
		||||
                if ( entry.getKey().equals("regNo") || entry.getKey().equals("role")) {return false;}
 | 
			
		||||
 | 
			
		||||
                switch (entry.getKey()){
 | 
			
		||||
                    case "firstName":
 | 
			
		||||
                        target.setFirstName((String) entry.getValue());
 | 
			
		||||
                        break;
 | 
			
		||||
                    case "lastName":
 | 
			
		||||
                        target.setLastName((String) entry.getValue());
 | 
			
		||||
                        break;
 | 
			
		||||
                    case "email":
 | 
			
		||||
                        target.setEmail((String) entry.getValue());
 | 
			
		||||
                        break;
 | 
			
		||||
                    case "address":
 | 
			
		||||
                        target.setAddress((String) entry.getValue());
 | 
			
		||||
                        break;
 | 
			
		||||
                    case "country":
 | 
			
		||||
                        target.setCountry((String) entry.getValue());
 | 
			
		||||
                        break;
 | 
			
		||||
                    case "birthDate":
 | 
			
		||||
                        target.setBirthDate((Date) entry.getValue());
 | 
			
		||||
                        break;
 | 
			
		||||
                    case "profilePictureUrl":
 | 
			
		||||
                        target.setProfilePictureUrl((String) entry.getValue());
 | 
			
		||||
                        break;
 | 
			
		||||
                    case "password":
 | 
			
		||||
                        target.setPassword(encodePassword((String) entry.getValue()));
 | 
			
		||||
                        break;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            userRepo.save(target);
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
        // the secretary can change roles (for example if a student becomes a teacher)
 | 
			
		||||
        else if (poster.getRole() == Role.Secretary)
 | 
			
		||||
        {
 | 
			
		||||
            for (Map.Entry<String, Object> entry : updates.entrySet()){
 | 
			
		||||
 | 
			
		||||
                if ( !entry.getKey().equals("role")) {return false;}
 | 
			
		||||
 | 
			
		||||
                if (entry.getValue() == Role.Admin){return false;}
 | 
			
		||||
 | 
			
		||||
                target.setRole((Role) entry.getValue());
 | 
			
		||||
                userRepo.save(target);
 | 
			
		||||
                return true;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
    public boolean checkPassword(User user, String tryingPassword){
 | 
			
		||||
 | 
			
		||||
@ -12,7 +12,7 @@ import java.util.Date;
 | 
			
		||||
public class User {
 | 
			
		||||
    @Id
 | 
			
		||||
    @GeneratedValue(strategy = GenerationType.AUTO)
 | 
			
		||||
    private int regNo;
 | 
			
		||||
    private Long regNo;
 | 
			
		||||
    private String lastName;
 | 
			
		||||
    private String firstName;
 | 
			
		||||
    private String email;
 | 
			
		||||
@ -63,7 +63,7 @@ public class User {
 | 
			
		||||
    }
 | 
			
		||||
    public User() {}
 | 
			
		||||
 | 
			
		||||
    public int getRegNo(){
 | 
			
		||||
    public Long getRegNo(){
 | 
			
		||||
        return this.regNo;
 | 
			
		||||
    }
 | 
			
		||||
    public String getLastName() {
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user