Added AccountController

This commit is contained in:
Andrey Terentev 2024-03-18 15:22:46 +07:00 committed by Andrey Terentev
parent 2ee1d18360
commit 5113358181
3 changed files with 47 additions and 11 deletions

View File

@ -0,0 +1,24 @@
package ru.dragonestia.picker.controller;
import lombok.RequiredArgsConstructor;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import ru.dragonestia.picker.api.model.account.ResponseAccount;
import ru.dragonestia.picker.model.Account;
import ru.dragonestia.picker.service.AccountService;
@RestController
@RequestMapping("/accounts")
@RequiredArgsConstructor
public class AccountsController {
private final AccountService accountService;
@GetMapping("/current")
ResponseAccount currentAccount() {
var account = (Account) SecurityContextHolder.getContext().getAuthentication().getPrincipal();
return account.toResponseObject();
}
}

View File

@ -3,12 +3,16 @@ package ru.dragonestia.picker.model;
import org.jetbrains.annotations.Contract; import org.jetbrains.annotations.Contract;
import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.NotNull;
import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetails;
import ru.dragonestia.picker.api.model.account.IAccount;
import ru.dragonestia.picker.api.model.account.ResponseAccount;
import java.beans.Transient;
import java.util.Collection; import java.util.Collection;
import java.util.HashSet; import java.util.HashSet;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors;
public class Account implements UserDetails { public class Account implements IAccount, UserDetails {
private final String username; private final String username;
private final String lowerUsername; private final String lowerUsername;
@ -24,10 +28,15 @@ public class Account implements UserDetails {
} }
@Override @Override
public Collection<Permission> getAuthorities() { public @NotNull Collection<Permission> getAuthorities() {
return permissions; return permissions;
} }
@Override
public boolean isLocked() {
return locked;
}
@Contract("_ -> this") @Contract("_ -> this")
public @NotNull Account setAuthorities(@NotNull Set<Permission> permissions) { public @NotNull Account setAuthorities(@NotNull Set<Permission> permissions) {
this.permissions = permissions; this.permissions = permissions;
@ -35,10 +44,15 @@ public class Account implements UserDetails {
} }
@Override @Override
public String getPassword() { public @NotNull String getPassword() {
return password; return password;
} }
@Override
public @NotNull Set<String> getPermissions() {
return getAuthorities().stream().map(Enum::name).collect(Collectors.toSet());
}
@Contract("_ -> this") @Contract("_ -> this")
public @NotNull Account setPassword(String value) { public @NotNull Account setPassword(String value) {
password = value; password = value;
@ -96,4 +110,8 @@ public class Account implements UserDetails {
} }
return false; return false;
} }
public @NotNull ResponseAccount toResponseObject() {
return new ResponseAccount(username, password, getPermissions(), locked);
}
} }

View File

@ -3,16 +3,10 @@ package ru.dragonestia.picker.model;
import org.springframework.security.core.GrantedAuthority; import org.springframework.security.core.GrantedAuthority;
public enum Permission implements GrantedAuthority { public enum Permission implements GrantedAuthority {
ADMIN("admin"); ADMIN;
private final String id;
Permission(String id) {
this.id = id;
}
@Override @Override
public String getAuthority() { public String getAuthority() {
return id; return name();
} }
} }