package de.mummeit.pmg.api; import de.mummeit.pmg.api.model.access.request.CheckAccessRequest; import de.mummeit.pmg.api.model.access.request.PermitRequest; import de.mummeit.pmg.api.model.access.request.RevokeScopeAccessRequest; import de.mummeit.pmg.api.model.access.request.RevokeUserAccessRequest; import de.mummeit.pmg.api.model.access.request.SearchPermitRequest; import de.mummeit.pmg.api.model.access.request.ListPermittedScopesRequest; import de.mummeit.pmg.api.model.access.response.PermittedResponse; import de.mummeit.pmg.api.model.access.response.ListPermittedScopesResponse; import de.mummeit.pmg.api.model.integration.Integration; import de.mummeit.pmg.api.model.structure.Domain; import de.mummeit.pmg.api.model.structure.Permission; import de.mummeit.pmg.api.model.structure.Role; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.*; import java.util.List; @FeignClient( name = "permission-manager", url = "${permission-manager.url}" ) public interface PermissionManagerClient { @GetMapping("/health") String getHealthStatus(); // Access Management @PostMapping("/api/v1/access/check") PermittedResponse checkAccess(@RequestBody CheckAccessRequest request); @PostMapping("/api/v1/access/permit") void permitAccess(@RequestBody PermitRequest request); @PostMapping("/api/v1/access/permits/search") List searchPermits(@RequestBody SearchPermitRequest request); @PatchMapping("/api/v1/access/revoke") void revokeAccess(@RequestBody PermitRequest request); @PatchMapping("/api/v1/access/revoke/scope") void revokeScopeAccess(@RequestBody RevokeScopeAccessRequest request); @PatchMapping("/api/v1/access/revoke/user") void revokeUserAccess(@RequestBody RevokeUserAccessRequest request); @PostMapping("/api/v1/access/scopes") ListPermittedScopesResponse listPermittedScopes(@RequestBody ListPermittedScopesRequest request); // Domain Management @PostMapping("/api/v1/domains") Domain createDomain(@RequestBody Domain domain); @GetMapping("/api/v1/domains/{domain}") Domain getDomain(@PathVariable("domain") String domain); @PutMapping("/api/v1/domains/{domain}") Domain updateDomain(@PathVariable("domain") String domain, @RequestBody Domain domainRequest); @DeleteMapping("/api/v1/domains/{domain}") void deleteDomain(@PathVariable("domain") String domain); // Permission Management @PostMapping("/api/v1/domains/{domain}/permissions") Permission createPermission(@PathVariable("domain") String domain, @RequestBody Permission permission); @GetMapping("/api/v1/domains/{domain}/permissions/{permission}") Permission getPermission(@PathVariable("domain") String domain, @PathVariable("permission") String permission); @PutMapping("/api/v1/domains/{domain}/permissions/{permission}") Permission updatePermission( @PathVariable("domain") String domain, @PathVariable("permission") String permission, @RequestBody Permission permissionRequest ); @DeleteMapping("/api/v1/domains/{domain}/permissions/{permission}") void deletePermission(@PathVariable("domain") String domain, @PathVariable("permission") String permission); // Role Management @PostMapping("/api/v1/domains/{domain}/roles") Role createRole(@PathVariable("domain") String domain, @RequestBody Role role); @GetMapping("/api/v1/domains/{domain}/roles/{role}") Role getRole(@PathVariable("domain") String domain, @PathVariable("role") String role); @PutMapping("/api/v1/domains/{domain}/roles/{role}") Role updateRole( @PathVariable("domain") String domain, @PathVariable("role") String role, @RequestBody Role roleRequest ); @DeleteMapping("/api/v1/domains/{domain}/roles/{role}") void deleteRole(@PathVariable("domain") String domain, @PathVariable("role") String role); // Integration @PostMapping("/api/v1/integration/perform") void performIntegration(List> integrations); }