added security and fix edit profile

This commit is contained in:
SlimusMinus
2026-06-18 00:22:50 +03:00
parent 81e3e007e1
commit bafb636cbe
24 changed files with 418 additions and 56 deletions

View File

@@ -2,18 +2,20 @@ package com.krylov.refound.controller;
import com.krylov.refound.dto.AuthRequest;
import com.krylov.refound.dto.AuthResponse;
import com.krylov.refound.dto.CheckLoginDto;
import com.krylov.refound.dto.RegisterRequest;
import com.krylov.refound.dto.UserDto;
import com.krylov.refound.entity.User;
import com.krylov.refound.repository.UserRepository;
import com.krylov.refound.security.JwtService;
import java.util.Map;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
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.RequestParam;
import org.springframework.web.bind.annotation.RestController;
@RestController
@@ -23,6 +25,8 @@ import org.springframework.web.bind.annotation.RestController;
public class AuthController {
private final UserRepository userRepository;
private final PasswordEncoder passwordEncoder;
private final JwtService jwtService;
@PostMapping("/register")
public ResponseEntity<?> register(@RequestBody RegisterRequest request) {
@@ -38,18 +42,37 @@ public class AuthController {
User user = new User();
user.setName(request.getName());
user.setLogin(request.getLogin());
user.setPassword(request.getPassword()); // позже добавить BCrypt
user.setPassword(passwordEncoder.encode(request.getPassword()));
userRepository.save(user);
String token = "fake-jwt-token";
String token = jwtService.generateToken(user.getLogin());
return ResponseEntity.ok(new AuthResponse(token, user));
UserDto userDto = new UserDto(user.getId(), user.getName(), user.getLogin(), user.getEmail());
return ResponseEntity.ok(new AuthResponse(token, userDto));
}
@GetMapping("/check-login")
public ResponseEntity<?> checkLogin(@RequestParam String login) {
boolean exists = userRepository.existsByLogin(login);
@PostMapping("/login")
public ResponseEntity<?> login(@RequestBody AuthRequest request) {
User user = userRepository.findByLogin(request.getLogin())
.orElse(null);
if (user == null || !passwordEncoder.matches(request.getPassword(), user.getPassword())) {
return ResponseEntity
.badRequest()
.body(Map.of("message", "Неверный логин или пароль"));
}
String token = jwtService.generateToken(user.getLogin());
UserDto userDto = new UserDto(user.getId(), user.getName(), user.getLogin(), user.getEmail());
return ResponseEntity.ok(new AuthResponse(token, userDto));
}
@PostMapping("/check-login")
public ResponseEntity<?> checkLogin(@RequestBody CheckLoginDto request) {
boolean exists = userRepository.existsByLogin(request.getLogin());
return ResponseEntity.ok(Map.of("exists", exists));
}

View File

@@ -42,6 +42,11 @@ public class PostController {
return service.getFeed();
}
@GetMapping("/{id}")
public List<PostResponse> getById(@PathVariable Long id) {
return service.getById(id);
}
@PutMapping(value = "/{id}", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)
public PostResponse update(
@PathVariable Long id,

View File

@@ -0,0 +1,30 @@
package com.krylov.refound.controller;
import com.krylov.refound.dto.UserResponseDto;
import com.krylov.refound.dto.UserUpdateDto;
import com.krylov.refound.service.UserService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@RequestMapping("/api/v1/users")
@Slf4j
@RequiredArgsConstructor
public class UserController {
private final UserService userService;
@PutMapping("/{id}")
public ResponseEntity<UserResponseDto> updateUser(@PathVariable Long id, @ModelAttribute UserUpdateDto userUpdateDto) {
log.info("updateUser, id={}", id);
UserResponseDto userResponseDto = userService.updateUser(id, userUpdateDto);
return ResponseEntity.ok(userResponseDto);
}
}