basic auth
This commit is contained in:
parent
2fe6907b94
commit
e74c598235
@ -25,9 +25,8 @@ public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
|
||||
.csrf().disable()
|
||||
.authorizeRequests()
|
||||
.antMatchers("/h2-console/**").permitAll()
|
||||
.antMatchers("/api/user/register").permitAll()
|
||||
.antMatchers("/api/user/email/{email}").permitAll()
|
||||
.antMatchers("/api/user/**").hasAnyAuthority("ROLE_ADMIN", "ROLE_USER")
|
||||
.antMatchers("/api/login/{login}").permitAll()
|
||||
.antMatchers("/api/**").hasAnyAuthority("ROLE_ADMIN", "ROLE_USER")
|
||||
.anyRequest().authenticated()
|
||||
.and()
|
||||
.httpBasic()
|
||||
|
@ -1,20 +1,26 @@
|
||||
package com.example.nto.controller;
|
||||
|
||||
import com.example.nto.dto.EmployeeDto;
|
||||
import com.example.nto.dto.EnterDto;
|
||||
import com.example.nto.dto.RegisterDto;
|
||||
import com.example.nto.entity.Code;
|
||||
import com.example.nto.entity.Employee;
|
||||
import com.example.nto.entity.Enter;
|
||||
import com.example.nto.exception.NoRequestBodyException;
|
||||
import com.example.nto.repository.CodeRepository;
|
||||
import com.example.nto.repository.EmployeeRepository;
|
||||
import com.example.nto.service.EmployeeService;
|
||||
import com.example.nto.service.EnterService;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Getter;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.http.HttpStatus;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.security.core.Authentication;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.LinkedHashMap;
|
||||
import java.util.Map;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
|
||||
@RestController
|
||||
@ -22,61 +28,40 @@ import java.util.Map;
|
||||
@RequestMapping("/api")
|
||||
public class EmployeeController {
|
||||
private final EmployeeService employeeService;
|
||||
private final EmployeeRepository employeeRepository;
|
||||
private final CodeRepository codeRepository;
|
||||
private final EnterService enterService;
|
||||
|
||||
@Getter
|
||||
public static class UserData {
|
||||
@JsonProperty("value")
|
||||
private String value;
|
||||
@GetMapping("/login/{login}")
|
||||
public ResponseEntity<String> getByUsername(@PathVariable String login) {
|
||||
if (login == null) {
|
||||
throw new NoRequestBodyException("No or wrong request body!");
|
||||
}
|
||||
|
||||
EmployeeDto employeeDto = employeeService.getByLogin(login);
|
||||
return ResponseEntity.ok(employeeDto.getLogin());
|
||||
}
|
||||
|
||||
@GetMapping("/{login}/auth")
|
||||
public ResponseEntity<String> authEmployee(@PathVariable String login) {
|
||||
try {
|
||||
boolean loginExists = employeeService.checkLogin(login);
|
||||
|
||||
if (loginExists) {
|
||||
return ResponseEntity.ok("данный логин существует");
|
||||
} else {
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body("логина не существует или неверный");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("что-то пошло не так");
|
||||
@GetMapping("/login")
|
||||
public ResponseEntity<EmployeeDto> login(Authentication authentication) {
|
||||
if (authentication == null) {
|
||||
throw new NoRequestBodyException("No or wrong request body!");
|
||||
}
|
||||
return ResponseEntity.ok(employeeService.getByLogin(authentication.getName()));
|
||||
}
|
||||
|
||||
@GetMapping("/{login}/info")
|
||||
public ResponseEntity<?> infoEmployee(@PathVariable String login) {
|
||||
try {
|
||||
Employee user = employeeRepository.getEmployeeByLogin(login);
|
||||
if (user != null) {
|
||||
Map<String, Object> response = new LinkedHashMap<>();
|
||||
response.put("id", user.getId());
|
||||
response.put("login", user.getLogin());
|
||||
response.put("name", user.getName());
|
||||
response.put("photo", user.getPhoto());
|
||||
response.put("lastVisit", user.getLastVisit());
|
||||
|
||||
return ResponseEntity.ok(response);
|
||||
} else {
|
||||
return ResponseEntity.status(HttpStatus.UNAUTHORIZED)
|
||||
.body("логина не существует или неверный");
|
||||
}
|
||||
} catch (Exception e) {
|
||||
return ResponseEntity.status(HttpStatus.BAD_REQUEST)
|
||||
.body("что-то пошло не так");
|
||||
}
|
||||
public ResponseEntity<EmployeeDto> infoEmployee(@PathVariable String login) {
|
||||
EmployeeDto employeeDto = employeeService.getByLogin(login);
|
||||
return ResponseEntity.ok(employeeDto);
|
||||
}
|
||||
|
||||
@PatchMapping("/{login}/open")
|
||||
public ResponseEntity<?> openEmployee(@PathVariable String login, @RequestBody UserData userData) {
|
||||
public ResponseEntity<String> openEmployee(@PathVariable String login, @RequestBody Code code) {
|
||||
try {
|
||||
long code = Long.parseLong(userData.getValue());
|
||||
boolean loginExists = employeeService.checkLogin(login);
|
||||
EmployeeDto employeeDto = employeeService.getByLogin(login);
|
||||
|
||||
if (loginExists) {
|
||||
boolean codeExists = codeRepository.checkCode(code);
|
||||
if (employeeDto != null) {
|
||||
boolean codeExists = codeRepository.checkCode(code.getValue());
|
||||
|
||||
if (codeExists) {
|
||||
return ResponseEntity.ok("дверь открылась");
|
||||
@ -90,4 +75,10 @@ public class EmployeeController {
|
||||
return ResponseEntity.status(HttpStatus.BAD_REQUEST).body("что-то пошло не так");
|
||||
}
|
||||
}
|
||||
|
||||
@GetMapping("/{login}/enters")
|
||||
public ResponseEntity<List<EnterDto>> infoEnters(@PathVariable String login) {
|
||||
List<EnterDto> enters = enterService.getByLogin(login);
|
||||
return ResponseEntity.ok(enters);
|
||||
}
|
||||
}
|
||||
|
@ -1,7 +1,11 @@
|
||||
package com.example.nto.entity;
|
||||
|
||||
import com.example.nto.service.impl.UserDetailsServiceImpl;
|
||||
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
|
||||
import lombok.*;
|
||||
import org.springframework.security.core.userdetails.UserDetails;
|
||||
import org.springframework.security.core.userdetails.UserDetailsService;
|
||||
import org.springframework.security.core.userdetails.UsernameNotFoundException;
|
||||
|
||||
import javax.persistence.*;
|
||||
import java.sql.Timestamp;
|
||||
@ -12,41 +16,55 @@ import java.util.Set;
|
||||
@Entity
|
||||
@Table(name = "employee")
|
||||
|
||||
public class Employee {
|
||||
public class Employee implements UserDetails {
|
||||
@Id
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private Long id;
|
||||
|
||||
@Column(name="login", nullable = false, unique = true)
|
||||
@Column(name="login")
|
||||
private String login;
|
||||
|
||||
@Column(name="name", nullable = false)
|
||||
@Column(name="name")
|
||||
private String name;
|
||||
|
||||
@Column(name="password", nullable = false)
|
||||
@Column(name="password")
|
||||
private String password;
|
||||
|
||||
@Column(name="photo")
|
||||
private String photo;
|
||||
|
||||
@Column(name = "description")
|
||||
private String description;
|
||||
|
||||
@Column(name = "birth_date")
|
||||
private String birthDate;
|
||||
@Column(name = "position")
|
||||
private String position;
|
||||
|
||||
@Column(name = "avatar_url")
|
||||
private String avatarUrl;
|
||||
|
||||
@Column(name = "entered_at")
|
||||
private Timestamp joinedAt;
|
||||
|
||||
@Column(name = "created_at", nullable = false)
|
||||
private Timestamp createdAt;
|
||||
|
||||
@Column(name = "last_visit")
|
||||
@Column(name = "last_enter")
|
||||
private Timestamp lastVisit;
|
||||
|
||||
@OneToMany(fetch = FetchType.EAGER)
|
||||
private Set<Authority> authorities;
|
||||
|
||||
|
||||
@Override
|
||||
public String getUsername() {
|
||||
return login;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAccountNonExpired() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isAccountNonLocked() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isCredentialsNonExpired() {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean isEnabled() {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,10 @@
|
||||
package com.example.nto.repository;
|
||||
|
||||
import com.example.nto.entity.Authority;
|
||||
import org.springframework.data.jpa.repository.JpaRepository;
|
||||
|
||||
import java.util.Optional;
|
||||
|
||||
public interface AuthorityRepository extends JpaRepository<Authority, Long> {
|
||||
Optional<Authority> findByAuthority(String authority);
|
||||
}
|
@ -1,8 +1,9 @@
|
||||
package com.example.nto.service;
|
||||
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.example.nto.dto.EmployeeDto;
|
||||
import com.example.nto.dto.RegisterDto;
|
||||
|
||||
public interface EmployeeService {
|
||||
boolean checkLogin(String login);
|
||||
EmployeeDto getByLogin(String login);
|
||||
}
|
@ -1,19 +1,40 @@
|
||||
package com.example.nto.service.impl;
|
||||
|
||||
import com.example.nto.dto.EmployeeDto;
|
||||
import com.example.nto.dto.RegisterDto;
|
||||
import com.example.nto.entity.Authority;
|
||||
import com.example.nto.entity.Employee;
|
||||
import com.example.nto.exception.*;
|
||||
import com.example.nto.repository.AuthorityRepository;
|
||||
import com.example.nto.service.EmployeeService;
|
||||
import com.example.nto.repository.EmployeeRepository;
|
||||
|
||||
import com.example.nto.utils.EmployeeMapper;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.h2.jdbc.JdbcSQLDataException;
|
||||
import org.springframework.dao.DataIntegrityViolationException;
|
||||
import org.springframework.security.crypto.password.PasswordEncoder;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
||||
@Service
|
||||
@RequiredArgsConstructor
|
||||
public class EmployeeServiceImpl implements EmployeeService {
|
||||
|
||||
private final EmployeeRepository employeeRepository;
|
||||
private final AuthorityRepository authorityRepository;
|
||||
private final PasswordEncoder passwordEncoder;
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public boolean checkLogin(String login) {
|
||||
return employeeRepository.existsByLogin(login);
|
||||
public EmployeeDto getByLogin(String username) {
|
||||
Optional<Employee> employee = employeeRepository.findByLogin(username);
|
||||
if (employee.isEmpty()) {
|
||||
throw new UserNotFoundException("User with name " + username + " not found!");
|
||||
}
|
||||
return EmployeeMapper.convertToDto(employee.get());
|
||||
}
|
||||
}
|
@ -16,9 +16,10 @@ public class UserDetailsServiceImpl implements UserDetailsService {
|
||||
|
||||
private final EmployeeRepository employeeRepository;
|
||||
|
||||
|
||||
@Override
|
||||
public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
|
||||
Employee optionalPerson = employeeRepository.findByLogin(s);
|
||||
Optional<Employee> optionalPerson = employeeRepository.findByLogin(s);
|
||||
if (optionalPerson.isEmpty()) {
|
||||
throw new UsernameNotFoundException("User not found");
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user