package com.sshmanager.controller; import com.sshmanager.dto.LoginRequest; import com.sshmanager.dto.LoginResponse; import com.sshmanager.entity.User; import com.sshmanager.repository.UserRepository; import com.sshmanager.security.JwtTokenProvider; import org.springframework.http.ResponseEntity; import org.springframework.security.authentication.AuthenticationManager; import org.springframework.security.authentication.BadCredentialsException; import org.springframework.security.authentication.UsernamePasswordAuthenticationToken; import org.springframework.security.core.Authentication; import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.web.bind.annotation.*; import java.util.HashMap; import java.util.Map; @RestController @RequestMapping("/api/auth") public class AuthController { private final AuthenticationManager authenticationManager; private final JwtTokenProvider tokenProvider; private final UserRepository userRepository; public AuthController(AuthenticationManager authenticationManager, JwtTokenProvider tokenProvider, UserRepository userRepository) { this.authenticationManager = authenticationManager; this.tokenProvider = tokenProvider; this.userRepository = userRepository; } @PostMapping("/login") public ResponseEntity login(@RequestBody LoginRequest request) { try { Authentication authentication = authenticationManager.authenticate( new UsernamePasswordAuthenticationToken(request.getUsername(), request.getPassword())); SecurityContextHolder.getContext().setAuthentication(authentication); String token = tokenProvider.generateToken(authentication); User user = userRepository.findByUsername(request.getUsername()).orElseThrow(() -> new IllegalStateException("User not found")); LoginResponse response = new LoginResponse(token, user.getUsername(), user.getDisplayName() != null ? user.getDisplayName() : user.getUsername()); return ResponseEntity.ok(response); } catch (BadCredentialsException e) { Map error = new HashMap<>(); error.put("message", "Invalid username or password"); return ResponseEntity.status(401).body(error); } } @GetMapping("/me") public ResponseEntity me(Authentication authentication) { if (authentication == null || !authentication.isAuthenticated()) { Map error = new HashMap<>(); error.put("error", "Unauthorized"); return ResponseEntity.status(401).body(error); } User user = userRepository.findByUsername(authentication.getName()).orElseThrow(() -> new IllegalStateException("User not found")); Map data = new HashMap<>(); data.put("username", user.getUsername()); data.put("displayName", user.getDisplayName()); return ResponseEntity.ok(data); } }