Changeset 5c65932
- Timestamp:
- 01/26/26 13:35:45 (6 months ago)
- Branches:
- main
- Children:
- 0c86e77
- Parents:
- ecd0016
- Location:
- finkwave/src/main/java/com/ukim/finki/develop/finkwave
- Files:
-
- 4 edited
-
model/NonAdminUser.java (modified) (2 diffs)
-
model/User.java (modified) (2 diffs)
-
service/AuthService.java (modified) (5 diffs)
-
service/CustomUserDetailsService.java (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/NonAdminUser.java
recd0016 r5c65932 4 4 import lombok.Getter; 5 5 import lombok.Setter; 6 import org.hibernate.annotations.Cascade; 6 7 7 8 @Getter … … 15 16 16 17 @MapsId 17 @OneToOne 18 @OneToOne(cascade = {CascadeType.PERSIST, CascadeType.MERGE}) 18 19 @JoinColumn(name = "user_id") 19 20 private User user; -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/model/User.java
recd0016 r5c65932 4 4 import com.fasterxml.jackson.annotation.JsonIgnoreProperties; 5 5 6 import jakarta.persistence.*; 7 import lombok.*; 6 import jakarta.persistence.Column; 7 import jakarta.persistence.Entity; 8 import jakarta.persistence.EnumType; 9 import jakarta.persistence.Enumerated; 10 import jakarta.persistence.GeneratedValue; 11 import jakarta.persistence.GenerationType; 12 import jakarta.persistence.Id; 13 import jakarta.persistence.OneToOne; 14 import jakarta.persistence.Table; 15 import lombok.AllArgsConstructor; 16 import lombok.Builder; 17 import lombok.Getter; 18 import lombok.NoArgsConstructor; 19 import lombok.Setter; 8 20 9 21 @Setter … … 41 53 private Admin admin; 42 54 43 // todo: is this column needed? if so, add to entities and documentation44 55 @Enumerated(EnumType.STRING) 45 56 private Role role; 46 57 47 @OneToOne(mappedBy = "user" )58 @OneToOne(mappedBy = "user", orphanRemoval = true) 48 59 @JsonIgnore 49 60 private NonAdminUser nonAdminUser; -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/AuthService.java
recd0016 r5c65932 1 1 package com.ukim.finki.develop.finkwave.service; 2 2 3 import com.ukim.finki.develop.finkwave.config.AuthProperties;4 import com.ukim.finki.develop.finkwave.dto.LoginRequestDto;5 3 import org.springframework.security.crypto.password.PasswordEncoder; 6 4 import org.springframework.stereotype.Service; 7 5 6 import com.ukim.finki.develop.finkwave.config.AuthProperties; 8 7 import com.ukim.finki.develop.finkwave.dto.AuthRequestDto; 8 import com.ukim.finki.develop.finkwave.dto.LoginRequestDto; 9 9 import com.ukim.finki.develop.finkwave.dto.UserResponseDto; 10 10 import com.ukim.finki.develop.finkwave.model.NonAdminUser; … … 17 17 import jakarta.servlet.http.Cookie; 18 18 import jakarta.servlet.http.HttpServletResponse; 19 import jakarta.transaction.Transactional; 19 20 import lombok.RequiredArgsConstructor; 20 21 … … 30 31 31 32 33 @Transactional 32 34 public UserResponseDto registerAndLogIn(HttpServletResponse response, AuthRequestDto authRequestDto){ 33 35 if (userRepository.findByUsername(authRequestDto.username()).isPresent()){ 34 36 throw new RuntimeException("User already exists"); 35 37 } 36 createNonAdminUser(authRequestDto); 37 // todo: could also be redirect in controller, which one is better? 38 return login(response, new LoginRequestDto(authRequestDto.username(), authRequestDto.password())); 38 User user = createNonAdminUser(authRequestDto); 39 return authenticateAndRespond(response, user); 39 40 } 40 41 41 // todo: dto in arguments or the standalone values?42 42 public UserResponseDto login(HttpServletResponse response, LoginRequestDto loginRequestDto){ 43 43 User user = userRepository.findByUsername(loginRequestDto.username()) 44 44 .orElseThrow(() -> new RuntimeException("Invalid credentials")); 45 45 46 if (!passwordEncoder.matches(loginRequestDto.password(), user.getPassword())){ 46 47 throw new RuntimeException("Invalid credentials"); 47 48 } 48 49 49 String accessToken = jwtService.generateToken(loginRequestDto.username(), user.getRole().name()); 50 RefreshToken refreshToken = refreshTokenService.createRefreshToken(user); 51 52 UserResponseDto userResponseDto = new UserResponseDto(user.getUsername(), user.getRole()); 53 addTokensToResponse(response, refreshToken, accessToken); 54 return userResponseDto; 50 return authenticateAndRespond(response, user); 55 51 } 56 52 … … 93 89 } 94 90 95 // todo: should it be transactional? 96 // @Transactional 97 private void createNonAdminUser(AuthRequestDto authRequestDto){ 91 private User createNonAdminUser(AuthRequestDto authRequestDto){ 98 92 User user = User.builder() 99 93 .fullName(authRequestDto.fullname()) … … 109 103 user.setNonAdminUser(nonAdminUser); 110 104 nonAdminUserRepository.save(nonAdminUser); 111 userRepository.save(user); 105 return user; 106 } 107 108 private UserResponseDto authenticateAndRespond(HttpServletResponse response, User user){ 109 String accessToken = jwtService.generateToken(user.getUsername(), user.getRole().name()); 110 RefreshToken refreshToken = refreshTokenService.createRefreshToken(user); 111 112 UserResponseDto userResponseDto = new UserResponseDto(user.getUsername(), user.getRole()); 113 addTokensToResponse(response, refreshToken, accessToken); 114 return userResponseDto; 112 115 } 113 116 -
finkwave/src/main/java/com/ukim/finki/develop/finkwave/service/CustomUserDetailsService.java
recd0016 r5c65932 22 22 User user = userRepository.findByUsername(username) 23 23 .orElseThrow(() -> new RuntimeException("user not found")); 24 // todo: fix hardcoded role 25 // List<GrantedAuthority> authorities = List.of(new SimpleGrantedAuthority("ROLE_" + user.getRole().name())); 26 List<GrantedAuthority> authorities = List.of(new SimpleGrantedAuthority("ROLE_NONADMIN")); 24 List<GrantedAuthority> authorities = List.of(new SimpleGrantedAuthority("ROLE_" + user.getRole().name())); 27 25 return new org.springframework.security.core.userdetails.User( 28 26 user.getUsername(),
Note:
See TracChangeset
for help on using the changeset viewer.
