diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/config/SecurityConfig.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/config/SecurityConfig.java index 582c9171d2fe6cf2c4d99f685c3fd5b5334aa2a2..5a55fab02752554c8652639559fd408e26af160e 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/config/SecurityConfig.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/config/SecurityConfig.java @@ -35,6 +35,7 @@ public class SecurityConfig { .authorizeHttpRequests(auth-> auth .requestMatchers(HttpMethod.POST, "api/auth/**").permitAll() .requestMatchers(HttpMethod.POST, "api/user/**").permitAll() + .requestMatchers(HttpMethod.GET, "api/groups/**").permitAll() .requestMatchers(HttpMethod.GET, "swagger-ui/**").permitAll() .requestMatchers(HttpMethod.GET, "/v3/api-docs/**").permitAll() .anyRequest().authenticated() diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/UserController.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/UserController.java index a259109c3145c57cbd29ce348a313f7e5f7cdc20..e986f1204c4b08035621397b882065862a4ae4b4 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/UserController.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/UserController.java @@ -9,12 +9,16 @@ import ntnu.idatt2016.v233.SmartMat.service.user.UserService; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.crypto.password.PasswordEncoder; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; +/** + * The user controller is responsible for handling requests related to users. + * It uses the user service to handle the requests. + * @author Birk + * @version 1.2 + * @since 20.04.2023 + */ @AllArgsConstructor @RestController @RequestMapping("/api/user") @@ -73,5 +77,20 @@ public class UserController { return ResponseEntity.ok(newUser); } + /** + * Get a user from the database. + * @param username The username of the user to be fetched. + * @return The user with the given username. + */ + @GetMapping("/get/{username}") + public ResponseEntity<User> getUser(@PathVariable String username) { + return userService.getUserFromUsername(username) + .map(user -> { + user.setPassword(null); + return ResponseEntity.ok(user); + }) + .orElseGet(() -> ResponseEntity.notFound().build()); + } + } \ No newline at end of file diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Group.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Group.java index 0f1421020785bcf36337dd9fe179616e86362ba8..a6dac8fa5ab3d2f2e9067652a66e11df6b715bd8 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Group.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/group/Group.java @@ -1,13 +1,15 @@ package ntnu.idatt2016.v233.SmartMat.entity.group; -import jakarta.persistence.Column; -import jakarta.persistence.Entity; -import jakarta.persistence.Id; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; +import ntnu.idatt2016.v233.SmartMat.entity.user.User; + +import java.util.List; /** * Group is an entity class representing a group in the system. @@ -36,4 +38,9 @@ public class Group { @Column(name = "group_name") String groupName; + + @OneToMany(mappedBy = "group") + @JsonIgnoreProperties({"password", "group"}) + private List<User> users; + } diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/user/User.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/user/User.java index aa2d2513d4cab48ceef5fabb5c7a17858a85cdc9..7a098494e6d429e518f5276732edd49a741d31ab 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/user/User.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/user/User.java @@ -1,12 +1,15 @@ package ntnu.idatt2016.v233.SmartMat.entity.user; +import com.fasterxml.jackson.annotation.JsonIgnoreProperties; +import com.fasterxml.jackson.annotation.JsonIncludeProperties; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import ntnu.idatt2016.v233.SmartMat.dto.enums.Authority; +import ntnu.idatt2016.v233.SmartMat.entity.group.Group; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; @@ -54,6 +57,12 @@ public class User implements UserDetails { @Enumerated(EnumType.STRING) private Authority authority; + + @ManyToOne + @JoinColumn(name = "group_id") + @JsonIgnoreProperties("users") + private Group group; + /** * used when created jwts and validating user authority * @return the users authority