admin user approval implemented
This commit is contained in:
parent
a46566f8c6
commit
ab28328408
@ -1 +1,43 @@
|
|||||||
GET {{host}}
|
### User Register
|
||||||
|
POST {{host}}/api/auth/register
|
||||||
|
Content-Type: application/json
|
||||||
|
|
||||||
|
{
|
||||||
|
"firstName": "Admin",
|
||||||
|
"lastName": "Admin",
|
||||||
|
"email": "admin@admin.at",
|
||||||
|
"password": "SuperAdmin",
|
||||||
|
"atNumber": "AT0010000000000000000000001234567"
|
||||||
|
}
|
||||||
|
|
||||||
|
### User Login
|
||||||
|
POST {{host}}/api/auth/login
|
||||||
|
Content-Type: application/json
|
||||||
|
|
||||||
|
{
|
||||||
|
"email": "admin@admin.at",
|
||||||
|
"password": "SuperAdmin"
|
||||||
|
}
|
||||||
|
|
||||||
|
> {%
|
||||||
|
client.global.set("auth_token", response.body.token);
|
||||||
|
%}
|
||||||
|
|
||||||
|
### Admin User Pending
|
||||||
|
GET {{host}}/api/admin/users/pending
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{auth_token}}
|
||||||
|
|
||||||
|
> {%
|
||||||
|
if (response.status === 200 && response.body.length > 0) {
|
||||||
|
client.global.set("pending_user_id", response.body[0].id);
|
||||||
|
client.log("Gespeicherte User ID: " + client.global.get("pending_user_id"));
|
||||||
|
} else {
|
||||||
|
client.log("Keine Pending Users gefunden oder Fehler beim Abruf.");
|
||||||
|
}
|
||||||
|
%}
|
||||||
|
|
||||||
|
### Admin User Approve
|
||||||
|
POST {{host}}/api/admin/users/{{pending_user_id}}/approve
|
||||||
|
Content-Type: application/json
|
||||||
|
Authorization: Bearer {{auth_token}}
|
||||||
@ -39,7 +39,7 @@
|
|||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
<groupId>org.springdoc</groupId>
|
<groupId>org.springdoc</groupId>
|
||||||
<artifactId>springdoc-openapi-starter-webmvc-api</artifactId>
|
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
|
||||||
<version>3.0.3</version>
|
<version>3.0.3</version>
|
||||||
</dependency>
|
</dependency>
|
||||||
<dependency>
|
<dependency>
|
||||||
|
|||||||
@ -8,7 +8,6 @@ import at.mueller.eeg.backend.community.repository.MeteringPointRepository;
|
|||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import org.springframework.context.ApplicationEventPublisher;
|
import org.springframework.context.ApplicationEventPublisher;
|
||||||
import org.springframework.stereotype.Component;
|
import org.springframework.stereotype.Component;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
|
||||||
import org.springframework.transaction.event.TransactionPhase;
|
import org.springframework.transaction.event.TransactionPhase;
|
||||||
import org.springframework.transaction.event.TransactionalEventListener;
|
import org.springframework.transaction.event.TransactionalEventListener;
|
||||||
|
|
||||||
@ -20,7 +19,6 @@ public class MeteringPointEventListener {
|
|||||||
private final ApplicationEventPublisher eventPublisher;
|
private final ApplicationEventPublisher eventPublisher;
|
||||||
|
|
||||||
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
|
@TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT)
|
||||||
@Transactional
|
|
||||||
public void handleUserRegistered(UserRegisteredEvent event) {
|
public void handleUserRegistered(UserRegisteredEvent event) {
|
||||||
MeteringPoint point = new MeteringPoint();
|
MeteringPoint point = new MeteringPoint();
|
||||||
point.setUserId(event.userId());
|
point.setUserId(event.userId());
|
||||||
|
|||||||
@ -1,15 +1,21 @@
|
|||||||
package at.mueller.eeg.backend.iam.api;
|
package at.mueller.eeg.backend.iam.api;
|
||||||
|
|
||||||
import at.mueller.eeg.backend.iam.api.dto.IamDtos.UserProfileResponse;
|
import at.mueller.eeg.backend.iam.api.dto.IamDtos.UserProfileResponse;
|
||||||
|
import at.mueller.eeg.backend.iam.domain.RegistrationStatus;
|
||||||
|
import at.mueller.eeg.backend.iam.domain.User;
|
||||||
|
import at.mueller.eeg.backend.iam.mapper.UserMapper;
|
||||||
import at.mueller.eeg.backend.iam.repository.UserRepository;
|
import at.mueller.eeg.backend.iam.repository.UserRepository;
|
||||||
import io.swagger.v3.oas.annotations.Operation;
|
import io.swagger.v3.oas.annotations.Operation;
|
||||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
|
import org.springframework.http.HttpStatus;
|
||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.security.access.prepost.PreAuthorize;
|
import org.springframework.security.access.prepost.PreAuthorize;
|
||||||
import org.springframework.web.bind.annotation.*;
|
import org.springframework.web.bind.annotation.*;
|
||||||
|
import org.springframework.web.server.ResponseStatusException;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Optional;
|
||||||
import java.util.UUID;
|
import java.util.UUID;
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@ -21,20 +27,35 @@ public class AdminIamController {
|
|||||||
|
|
||||||
private final UserRepository userRepository;
|
private final UserRepository userRepository;
|
||||||
|
|
||||||
|
private final UserMapper userMapper;
|
||||||
|
|
||||||
@GetMapping("/pending")
|
@GetMapping("/pending")
|
||||||
@Operation(summary = "Lädt alle wartenden User",
|
@Operation(summary = "Lädt alle wartenden User",
|
||||||
description = "Zeigt User im Status PENDING inkl. der Ergebnisse des EDA-Netz-Checks.")
|
description = "Zeigt User im Status PENDING inkl. der Ergebnisse des EDA-Netz-Checks.")
|
||||||
public ResponseEntity<List<UserProfileResponse>> getPendingUsers() {
|
public ResponseEntity<List<UserProfileResponse>> getPendingUsers() {
|
||||||
|
List<User> allByStatus = userRepository.findAllByStatus(RegistrationStatus.PENDING);
|
||||||
|
return ResponseEntity.ok(userMapper.mapToDto(allByStatus));
|
||||||
//return ResponseEntity.ok(userRepository.findAllByStatus(RegistrationStatus.PENDING));
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping("/{userId}/approve")
|
@PostMapping("/{userId}/approve")
|
||||||
@Operation(summary = "User freigeben",
|
@Operation(summary = "User freigeben",
|
||||||
description = "Setzt enabled=true, status=APPROVED und triggert die finale EDA-Anmeldung.")
|
description = "Setzt enabled=true, status=APPROVED und triggert die finale EDA-Anmeldung.")
|
||||||
public ResponseEntity<Void> approveUser(@PathVariable UUID userId) {
|
public ResponseEntity<Void> approveUser(@PathVariable UUID userId) {
|
||||||
|
|
||||||
|
Optional<User> userOptional = userRepository.findById(userId);
|
||||||
|
if (userOptional.isPresent()) {
|
||||||
|
User user = userOptional.get();
|
||||||
|
if (RegistrationStatus.PENDING.equals(user.getStatus())) {
|
||||||
|
user.setStatus(RegistrationStatus.APPROVED);
|
||||||
|
} else {
|
||||||
|
throw new ResponseStatusException(HttpStatus.FORBIDDEN, "User in wrong status");
|
||||||
|
}
|
||||||
|
if (user.isEnabled()) {
|
||||||
|
throw new ResponseStatusException(HttpStatus.FORBIDDEN, "User already enabled");
|
||||||
|
}
|
||||||
|
user.setEnabled(true);
|
||||||
|
userRepository.save(user);
|
||||||
|
}
|
||||||
// Logik: status auf APPROVED, enabled auf true
|
// Logik: status auf APPROVED, enabled auf true
|
||||||
// Event feuern: UserApprovedEvent (Schickt E-Mail an User)
|
// Event feuern: UserApprovedEvent (Schickt E-Mail an User)
|
||||||
|
|
||||||
|
|||||||
@ -6,11 +6,15 @@ import org.mapstruct.Mapper;
|
|||||||
import org.mapstruct.Mapping;
|
import org.mapstruct.Mapping;
|
||||||
import org.mapstruct.MappingTarget;
|
import org.mapstruct.MappingTarget;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
@Mapper(
|
@Mapper(
|
||||||
uses = PasswordHashMapper.class
|
uses = PasswordHashMapper.class
|
||||||
)
|
)
|
||||||
public interface UserMapper {
|
public interface UserMapper {
|
||||||
|
|
||||||
|
List<IamDtos.UserProfileResponse> mapToDto(List<User> users);
|
||||||
|
|
||||||
@Mapping(target = "primaryAtNumber", ignore = true)
|
@Mapping(target = "primaryAtNumber", ignore = true)
|
||||||
IamDtos.UserProfileResponse mapToDto(User user);
|
IamDtos.UserProfileResponse mapToDto(User user);
|
||||||
|
|
||||||
|
|||||||
@ -6,8 +6,9 @@ import org.springframework.data.jpa.repository.JpaRepository;
|
|||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
import java.util.UUID;
|
||||||
|
|
||||||
public interface UserRepository extends JpaRepository<User, String> {
|
public interface UserRepository extends JpaRepository<User, UUID> {
|
||||||
|
|
||||||
Optional<User> findByEmail(String email);
|
Optional<User> findByEmail(String email);
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user