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 b0eb15e7d40d55b4127652e97db8663579bf26ad..ce4bc75eb8e0f3e7af774474176a756c1627f1ee 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/config/SecurityConfig.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/config/SecurityConfig.java @@ -33,7 +33,8 @@ public class SecurityConfig { .cors().and() .csrf().disable() .authorizeHttpRequests(auth-> auth - .requestMatchers(HttpMethod.POST, "/auth/**").permitAll() + .requestMatchers(HttpMethod.POST, "api/auth/**").permitAll() + .requestMatchers(HttpMethod.POST, "api/user/**").permitAll() .anyRequest().authenticated() ) .oauth2ResourceServer(OAuth2ResourceServerConfigurer::jwt) 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 2e5af8dff9e30905ea38a5fb425985c45bd95aa4..4eb2532be8791b1e8af8e4875a61013bcd981b67 100644 --- a/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/UserController.java +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/controller/UserController.java @@ -1,4 +1,70 @@ package ntnu.idatt2016.v233.SmartMat.controller; + +import lombok.AllArgsConstructor; +import ntnu.idatt2016.v233.SmartMat.entity.request.RegisterUser; +import ntnu.idatt2016.v233.SmartMat.entity.user.Authority; +import ntnu.idatt2016.v233.SmartMat.entity.user.User; +import ntnu.idatt2016.v233.SmartMat.service.user.UserService; +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; + + +@AllArgsConstructor +@RestController +@RequestMapping("/api/user") public class UserController { + + UserService userService; + + PasswordEncoder passwordEncoder; + + /** + * Use this JSON format: + * { + * "username":"kari123", + * "password":"sjokoladekake", + * "email":"kari.nordman@gmail.com", + * "firstName":"kari", + * "lastName":"nordmann", + * "birthDate":"2001-12-12" + * } + * + * create a new user in the database + * uses the user service + * @param user The user to be registered. + */ + @PostMapping("/register") + public void register(@RequestBody RegisterUser user) { + + if(user.username() == null || user.username().trim().isEmpty() || user.username().length() > 50 || + user.password() == null || user.password().trim().isEmpty() || user.password().length() > 50 || + user.email() == null || user.email().trim().isEmpty() || user.email().length() > 50 || + user.firstName() == null || user.firstName().trim().isEmpty() || user.firstName().length() > 50 || + user.lastName() == null || user.lastName().trim().isEmpty() || user.lastName().length() > 50 || + user.birthDate() == null) { + return; + } + + if(userService.getUserFromUsername(user.username()).isPresent()) { + return; + } + + User newUser = User.builder() + .authority(Authority.USER) + .username(user.username()) + .password(passwordEncoder.encode(user.password())) + .email(user.email()) + .firstName(user.firstName()) + .lastName(user.lastName()) + .dateOfBirth(user.birthDate()) + .build(); + + userService.saveUser(newUser); + } + + } diff --git a/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/request/RegisterUser.java b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/request/RegisterUser.java new file mode 100644 index 0000000000000000000000000000000000000000..570d83a76c7db4018e43fd3f17c3142b7f991a0a --- /dev/null +++ b/src/main/java/ntnu/idatt2016/v233/SmartMat/entity/request/RegisterUser.java @@ -0,0 +1,14 @@ +package ntnu.idatt2016.v233.SmartMat.entity.request; + +import java.sql.Date; + +/** + * RegisterUser is a record class representing a register request. + * @param username the username of the user + * @param password the password of the user + * @param email the email of the user + * + */ +public record RegisterUser (String username, String password, String email, String firstName, String lastName, + Date birthDate){ +} 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 4281de49597bf59f7fea34fa11a7a8b4f00828a6..ca45d9b7802fd5381ff807264c1ddfd03db50aff 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 @@ -9,6 +9,7 @@ import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.authority.SimpleGrantedAuthority; import org.springframework.security.core.userdetails.UserDetails; +import java.sql.Date; import java.util.Collection; import java.util.List; @@ -34,6 +35,18 @@ public class User implements UserDetails { @Column(name = "enabled") private boolean enabled; + @Column + private String email; + + @Column + private String firstName; + + @Column(name = "last_name") + private String lastName; + + @Column(name = "birthdate") + private Date dateOfBirth; + @Enumerated(EnumType.STRING) private Authority authority;