diff --git a/eeg_backend/iam.http b/eeg_backend/iam.http index cb1c210..5ecff6b 100644 --- a/eeg_backend/iam.http +++ b/eeg_backend/iam.http @@ -1 +1,43 @@ -GET {{host}} \ No newline at end of file +### 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}} \ No newline at end of file diff --git a/eeg_backend/pom.xml b/eeg_backend/pom.xml index 9f11765..f740058 100644 --- a/eeg_backend/pom.xml +++ b/eeg_backend/pom.xml @@ -39,7 +39,7 @@ org.springdoc - springdoc-openapi-starter-webmvc-api + springdoc-openapi-starter-webmvc-ui 3.0.3 diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/community/event/listener/MeteringPointEventListener.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/community/event/listener/MeteringPointEventListener.java index 54f5966..18eeb8d 100644 --- a/eeg_backend/src/main/java/at/mueller/eeg/backend/community/event/listener/MeteringPointEventListener.java +++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/community/event/listener/MeteringPointEventListener.java @@ -8,7 +8,6 @@ import at.mueller.eeg.backend.community.repository.MeteringPointRepository; import lombok.RequiredArgsConstructor; import org.springframework.context.ApplicationEventPublisher; import org.springframework.stereotype.Component; -import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.event.TransactionPhase; import org.springframework.transaction.event.TransactionalEventListener; @@ -20,7 +19,6 @@ public class MeteringPointEventListener { private final ApplicationEventPublisher eventPublisher; @TransactionalEventListener(phase = TransactionPhase.AFTER_COMMIT) - @Transactional public void handleUserRegistered(UserRegisteredEvent event) { MeteringPoint point = new MeteringPoint(); point.setUserId(event.userId()); diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/api/AdminIamController.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/api/AdminIamController.java index 74f441c..d12bd78 100644 --- a/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/api/AdminIamController.java +++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/api/AdminIamController.java @@ -1,15 +1,21 @@ package at.mueller.eeg.backend.iam.api; 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 io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; import lombok.RequiredArgsConstructor; +import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.web.bind.annotation.*; +import org.springframework.web.server.ResponseStatusException; import java.util.List; +import java.util.Optional; import java.util.UUID; @RestController @@ -21,20 +27,35 @@ public class AdminIamController { private final UserRepository userRepository; + private final UserMapper userMapper; + @GetMapping("/pending") @Operation(summary = "Lädt alle wartenden User", description = "Zeigt User im Status PENDING inkl. der Ergebnisse des EDA-Netz-Checks.") public ResponseEntity> getPendingUsers() { - - - //return ResponseEntity.ok(userRepository.findAllByStatus(RegistrationStatus.PENDING)); - return null; + List allByStatus = userRepository.findAllByStatus(RegistrationStatus.PENDING); + return ResponseEntity.ok(userMapper.mapToDto(allByStatus)); } @PostMapping("/{userId}/approve") @Operation(summary = "User freigeben", description = "Setzt enabled=true, status=APPROVED und triggert die finale EDA-Anmeldung.") public ResponseEntity approveUser(@PathVariable UUID userId) { + + Optional 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 // Event feuern: UserApprovedEvent (Schickt E-Mail an User) diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/mapper/UserMapper.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/mapper/UserMapper.java index 05a0a19..4e2baf2 100644 --- a/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/mapper/UserMapper.java +++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/mapper/UserMapper.java @@ -6,11 +6,15 @@ import org.mapstruct.Mapper; import org.mapstruct.Mapping; import org.mapstruct.MappingTarget; +import java.util.List; + @Mapper( uses = PasswordHashMapper.class ) public interface UserMapper { + List mapToDto(List users); + @Mapping(target = "primaryAtNumber", ignore = true) IamDtos.UserProfileResponse mapToDto(User user); diff --git a/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/repository/UserRepository.java b/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/repository/UserRepository.java index 6025aeb..bb992bb 100644 --- a/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/repository/UserRepository.java +++ b/eeg_backend/src/main/java/at/mueller/eeg/backend/iam/repository/UserRepository.java @@ -6,8 +6,9 @@ import org.springframework.data.jpa.repository.JpaRepository; import java.util.List; import java.util.Optional; +import java.util.UUID; -public interface UserRepository extends JpaRepository { +public interface UserRepository extends JpaRepository { Optional findByEmail(String email);