Skip to content

Commit

Permalink
Merge pull request #148 from Tech-Harbor/Bezsmertnyi
Browse files Browse the repository at this point in the history
Bezsmertnyi
  • Loading branch information
Vladik-gif authored Aug 15, 2024
2 parents 2f0fcaf + b7e82fe commit 4a4c5a9
Show file tree
Hide file tree
Showing 19 changed files with 118 additions and 98 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ public class AuthenticationConfig {
public AuthenticationProvider authenticationProvider() {
final var authProvider = new DaoAuthenticationProvider();
authProvider.setUserDetailsService(myUserDetailsService);
authProvider.setPasswordEncoder(myPasswordEncoder.passwordEncoder());
authProvider.setPasswordEncoder(myPasswordEncoder);
return authProvider;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@

import static com.example.backend.utils.general.Constants.BEARER_AUTHENTICATION;
import static org.springframework.http.HttpHeaders.AUTHORIZATION;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;

@RestController
@AllArgsConstructor
Expand All @@ -37,62 +38,62 @@ public class AuthController {
private static final String ACTIVE_USER = "/active";
private static final String SEND_MESSAGE_EMAIL_NOT_ACTIVE = "/sendMessageEmailActive";

@PostMapping(SIGNUP_URI)
@SecurityRequirement(name = BEARER_AUTHENTICATION)
@Operation(summary = "Register user")
@ApiResponseCreated
@ApiResponseBadRequest
@PostMapping(value = SIGNUP_URI, produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE)
public void signup(@RequestBody @Validated final RegisterRequest registerRequest) {
authServer.signup(registerRequest);
}

@PostMapping(LOGIN_URI)
@SecurityRequirement(name = BEARER_AUTHENTICATION)
@Operation(summary = "Login user")
@ApiResponseOK
@ApiResponseUnauthorized
@ApiResponseForbidden
@PostMapping(value = LOGIN_URI, produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE)
public AuthResponse login(@RequestBody @Validated final AuthRequest authRequest) {
return authServer.login(authRequest);
}

@PostMapping(UPDATE_JWT_URI)
@Operation(summary = "Update refreshToken user")
@ApiResponseTokenOK
@PostMapping(value = UPDATE_JWT_URI, produces = APPLICATION_JSON_VALUE)
public void refreshToken(final HttpServletRequest request, final HttpServletResponse response) {
authServer.updateRefreshToken(request, response);
}

@PutMapping(FORM_CHANGE_PASSWORD_URI)
@Operation(summary = "Update Password User")
@ApiResponseOK
@ApiResponseNotFound
@ApiResponseBadRequest
@PutMapping(value = FORM_CHANGE_PASSWORD_URI, produces = APPLICATION_JSON_VALUE)
public void updatePassword(@RequestHeader(AUTHORIZATION) final String jwt,
@RequestBody @Validated final PasswordRequest passwordRequest) {
authServer.formUpdatePassword(jwt, passwordRequest);
}

@PostMapping(REQUEST_EMAIL_UPDATE_PASSWORD)
@Operation(summary = "Change password using email")
@ApiResponseEmailOK
@ApiResponseBadRequest
@PostMapping(value = REQUEST_EMAIL_UPDATE_PASSWORD, consumes = APPLICATION_JSON_VALUE)
public void requestEmailUpdatePassword(@RequestBody @Validated final EmailRequest emailRequest) {
authServer.requestEmailUpdatePassword(emailRequest);
}

@PostMapping(ACTIVE_USER)
@Operation(summary = "Active User, JWT Token")
@ApiResponseEmailOK
@ApiResponseBadRequest
@PostMapping(value = ACTIVE_USER, consumes = APPLICATION_JSON_VALUE)
public void activeUser(@RequestHeader(AUTHORIZATION) final String jwt) {
authServer.activeUser(jwt);
}

@PostMapping(SEND_MESSAGE_EMAIL_NOT_ACTIVE)
@Operation(summary = "Re-sending the account activation letter if the first letter was not successful")
@ApiResponseEmailOK
@ApiResponseBadRequest
@PostMapping(value = SEND_MESSAGE_EMAIL_NOT_ACTIVE, consumes = APPLICATION_JSON_VALUE)
public void sendEmailSecondActive(@RequestBody @Validated final EmailRequest emailRequest) {
authServer.sendEmailActive(emailRequest);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,7 @@ private UserEntity createUserEntity(final Map<String, Object> attributes, final
.credentialsNonExpired(true)
.accountNonLocked(true)
.accountNonExpired(true)
.createData(LocalDateTime.now())
.password(passwordEncoder.passwordEncoder().encode(generateRandomPassword()))
.password(passwordEncoder.encode(generateRandomPassword()))
.phone(attributes.getOrDefault("phone", EMPTY_LINE).toString())
.build();
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -55,21 +55,9 @@ public void signup(final RegisterRequest registerRequest) {
}
);

final var user = UserEntity.builder()
.firstname(registerRequest.firstname())
.lastname(registerRequest.lastname())
.email(registerRequest.email())
.password(myPasswordEncoder.passwordEncoder().encode(registerRequest.password()))
.phone(registerRequest.phone())
.registerAuthStatus(JWT)
.enabled(false)
.accountNonLocked(true)
.accountNonExpired(true)
.credentialsNonExpired(true)
.roles(Set.of(USER, ADMIN))
.build();
final var saveUser = createUserEntity(registerRequest);

final var userSecurityDTO = userServer.mySecuritySave(user);
final var userSecurityDTO = userServer.mySecuritySave(saveUser);

log.info("Register User: {}", userSecurityDTO);

Expand Down Expand Up @@ -107,7 +95,7 @@ public void formUpdatePassword(final String jwt, final PasswordRequest passwordR
final var userPassword = helpers.tokenUserEmail(jwt);

userPassword.ifPresent(user -> {
user.setPassword(myPasswordEncoder.passwordEncoder().encode(passwordRequest.password()));
user.setPassword(myPasswordEncoder.encode(passwordRequest.password()));

log.info("Update Password: {}", user.getFirstname());

Expand Down Expand Up @@ -164,4 +152,20 @@ public void sendEmailActive(final EmailRequest emailRequest) {
public void updateRefreshToken(final HttpServletRequest request, final HttpServletResponse response) {
jwtAuthServerFilter.updateRefreshTokenFilter(request, response);
}

private UserEntity createUserEntity(RegisterRequest registerRequest) {
return UserEntity.builder()
.firstname(registerRequest.firstname())
.lastname(registerRequest.lastname())
.email(registerRequest.email())
.password(myPasswordEncoder.encode(registerRequest.password()))
.phone(registerRequest.phone())
.registerAuthStatus(JWT)
.enabled(false)
.accountNonLocked(true)
.accountNonExpired(true)
.credentialsNonExpired(true)
.roles(Set.of(USER, ADMIN))
.build();
}
}
27 changes: 14 additions & 13 deletions src/main/java/com/example/backend/utils/general/Helpers.java
Original file line number Diff line number Diff line change
@@ -1,36 +1,37 @@
package com.example.backend.utils.general;


import com.example.backend.security.servers.JwtServer;
import com.example.backend.web.User.UserServer;
import com.example.backend.web.User.UserRepository;
import com.example.backend.web.User.store.UserEntity;
import org.springframework.context.annotation.Lazy;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Component;

import java.util.Optional;

import static com.example.backend.utils.exception.RequestException.badRequestException;

@Component
@RequiredArgsConstructor
public class Helpers {

private final UserRepository userRepository;
private final JwtServer jwtServer;
private final UserServer userServer;

public Helpers(final @Lazy JwtServer jwtServer,
final @Lazy UserServer userServer) {
this.jwtServer = jwtServer;
this.userServer = userServer;
}


public UserEntity tokenUserData(final String jwt) {
final var token = jwtServer.extractUserData(jwt.substring(7));

return userServer.getByUserData(token);
return getByUserData(token);
}

public Optional<UserEntity> tokenUserEmail(final String jwt) {
final var token = jwtServer.extractUserData(jwt.substring(7));

return userServer.getByEmail(token);
return userRepository.findByEmail(token);
}

private UserEntity getByUserData(final String userData) {
return userRepository.findByEmail(userData).orElseThrow(
() -> badRequestException("Not userData: " + userData)
);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,15 @@
import java.util.Base64;

@Component
public class MyPasswordEncoder {
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder(12);
public class MyPasswordEncoder implements PasswordEncoder{
@Override
public String encode(CharSequence rawPassword) {
return new BCryptPasswordEncoder().encode(rawPassword);
}

@Override
public boolean matches(CharSequence rawPassword, String encodedPassword) {
return false;
}

public static String generateRandomPassword() {
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package com.example.backend.utils.mapper;

import com.example.backend.web.Advertisement.store.AdvertisementEntity;
import com.example.backend.web.Advertisement.store.dto.AdvertisementDTO;
import com.example.backend.web.Advertisement.store.mapper.AdvertisementMapper;
import lombok.RequiredArgsConstructor;
import org.mapstruct.Named;
import org.springframework.stereotype.Component;

import java.util.Collections;
import java.util.List;

@Component
@RequiredArgsConstructor
@Named("AdvertisementBaseMapper")
public class AdvertisementBaseMapper {

private final AdvertisementMapper advertisementMapper;

@Named("getAllAdvertisements")
public List<AdvertisementDTO> getAllAdvertisements(final List<AdvertisementEntity> advertisement) {
return Collections.singletonList(advertisementMapper
.advertisementMapperDTO((AdvertisementEntity) advertisement)
);
}
}
Original file line number Diff line number Diff line change
@@ -1,36 +1,24 @@
package com.example.backend.utils.general;
package com.example.backend.utils.mapper;

import com.example.backend.utils.enums.RegisterAuthStatus;
import com.example.backend.utils.enums.Role;
import com.example.backend.web.Advertisement.store.AdvertisementEntity;
import com.example.backend.web.Advertisement.store.dto.AdvertisementDTO;
import com.example.backend.web.Advertisement.store.mapper.AdvertisementMapper;
import com.example.backend.web.Category.store.CategoryEntity;
import com.example.backend.web.File.ImageRepository;
import com.example.backend.web.File.store.ImageEntity;
import lombok.RequiredArgsConstructor;
import org.mapstruct.Named;
import org.springframework.stereotype.Component;

import java.util.Collections;
import java.util.List;
import java.util.Set;

@Named("BaseMapper")
@Component
@Named("BaseMapper")
@RequiredArgsConstructor
public class BaseMapper {

private final AdvertisementMapper advertisementMapper;
private final ImageRepository imageRepository;

@Named("getAllAdvertisements")
public List<AdvertisementDTO> getAllAdvertisements(final List<AdvertisementEntity> advertisement) {
return Collections.singletonList(advertisementMapper
.advertisementMapperDTO((AdvertisementEntity) advertisement)
);
}

@Named("getAllImages")
public List<ImageEntity> getAllImages(final List<ImageEntity> image) {
return imageRepository.findAll();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import java.util.List;

import static org.springframework.http.HttpHeaders.AUTHORIZATION;
import static org.springframework.http.MediaType.APPLICATION_JSON_VALUE;
import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE;

@RestController
Expand All @@ -31,9 +32,9 @@ public class AdvertisementController {
private static final String ADVERTISEMENT = "/advertisement";
private static final String URL_DELETE_ALL = "/deleteAll";

@PostMapping(value = URL_CREATE, consumes = {MULTIPART_FORM_DATA_VALUE})
@Operation(summary = "Current user create advertisements")
@ApiResponseCreated
@PostMapping(value = URL_CREATE, consumes = {MULTIPART_FORM_DATA_VALUE}, produces = APPLICATION_JSON_VALUE)
public AdvertisementCreateDTO createAdvertisementByUser(@RequestHeader(AUTHORIZATION) final String jwt,
@RequestPart final AdvertisementCreateDTO advertisement,
@RequestPart final List<MultipartFile> images) {
Expand All @@ -45,31 +46,31 @@ public List<AdvertisementDTO> getAllAdvertisement() {
return advertisementServer.getAllAdvertisement();
}

@GetMapping(ADVERTISEMENT)
@Operation(summary = "Current user get advertisement")
@ApiResponseOK
@GetMapping(value = ADVERTISEMENT, produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE)
public AdvertisementDTO getByAdvertisement(@RequestHeader(AUTHORIZATION) final String jwt) {
return advertisementServer.advertisement(jwt);
}

@PatchMapping(URL_EDIT)
@Operation(summary = "Current user update advertisement")
@ApiResponseOK
@PatchMapping(value = URL_EDIT, produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE)
public AdvertisementUpdateDTO editAdvertisement(@RequestHeader(AUTHORIZATION) final String jwt,
@RequestBody final AdvertisementUpdateDTO entity) {
return advertisementServer.editAdvertisement(jwt, entity);
}

@DeleteMapping(URL_DELETE)
@Operation(summary = "Current user delete advertisement")
@ApiResponseDelete
@DeleteMapping(value = URL_DELETE, produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE)
public void deleteAdvertisement(@RequestHeader(AUTHORIZATION) final String jwt) {
advertisementServer.deleteAdvertisement(jwt);
}

@DeleteMapping(URL_DELETE_ALL)
@Operation(summary = "Current user will remove all advertisements")
@ApiResponseDelete
@DeleteMapping(value = URL_DELETE_ALL, produces = APPLICATION_JSON_VALUE, consumes = APPLICATION_JSON_VALUE)
public void deleteAllAdvertisement(@RequestHeader(AUTHORIZATION) final String jwt) {
advertisementServer.deleteAll(jwt);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
import com.example.backend.web.Advertisement.store.dto.AdvertisementCreateDTO;
import com.example.backend.web.Advertisement.store.dto.AdvertisementDTO;
import com.example.backend.web.Advertisement.store.dto.AdvertisementUpdateDTO;
import com.example.backend.utils.general.BaseMapper;
import com.example.backend.utils.mapper.BaseMapper;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;

Expand All @@ -18,4 +18,4 @@ public interface AdvertisementMapper {
@Mapping(target = "images", qualifiedByName = {"BaseMapper", "getAllImages"})
@Mapping(target = "category", qualifiedByName = {"BaseMapper", "getCategoryName"})
AdvertisementDTO advertisementMapperDTO(AdvertisementEntity entity);
}
}
Loading

0 comments on commit 4a4c5a9

Please sign in to comment.