From 03a42e9f0ba387bd1d296d99e29d44cc4ee7d74e Mon Sep 17 00:00:00 2001 From: Emmanuel Durin Date: Thu, 23 May 2024 11:19:51 +0200 Subject: [PATCH] Fixed exception when a user has no organization --- .../ResolveGeorchestraUserGlobalFilter.java | 4 +++- ...esolveGeorchestraUserGlobalFilterTest.java | 19 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/gateway/src/main/java/org/georchestra/gateway/security/ResolveGeorchestraUserGlobalFilter.java b/gateway/src/main/java/org/georchestra/gateway/security/ResolveGeorchestraUserGlobalFilter.java index 6c57c9cc..baf546ab 100644 --- a/gateway/src/main/java/org/georchestra/gateway/security/ResolveGeorchestraUserGlobalFilter.java +++ b/gateway/src/main/java/org/georchestra/gateway/security/ResolveGeorchestraUserGlobalFilter.java @@ -98,7 +98,9 @@ public class ResolveGeorchestraUserGlobalFilter implements GlobalFilter, Ordered if (usr != null && usr instanceof ExtendedGeorchestraUser) { ExtendedGeorchestraUser eu = (ExtendedGeorchestraUser) usr; Organization org = eu.getOrg(); - GeorchestraOrganizations.store(exchange, org); + if (org != null) { + GeorchestraOrganizations.store(exchange, org); + } } return exchange; })// diff --git a/gateway/src/test/java/org/georchestra/gateway/security/ResolveGeorchestraUserGlobalFilterTest.java b/gateway/src/test/java/org/georchestra/gateway/security/ResolveGeorchestraUserGlobalFilterTest.java index f75bc300..326a77f0 100644 --- a/gateway/src/test/java/org/georchestra/gateway/security/ResolveGeorchestraUserGlobalFilterTest.java +++ b/gateway/src/test/java/org/georchestra/gateway/security/ResolveGeorchestraUserGlobalFilterTest.java @@ -34,6 +34,7 @@ import java.util.Optional; import org.georchestra.gateway.model.GeorchestraUsers; +import org.georchestra.gateway.security.ldap.extended.ExtendedGeorchestraUser; import org.georchestra.security.model.GeorchestraUser; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -121,4 +122,22 @@ void testFilter_UseResolved() { Optional resolved = GeorchestraUsers.resolve(exchange); assertSame(user1, resolved.orElseThrow()); } + + @Test + void testFilter_UseResolvedWithoutOrganization() { + Authentication auth1 = mock(Authentication.class); + ExtendedGeorchestraUser user1 = mock(ExtendedGeorchestraUser.class); + when(mockMapper.resolve(same(auth1))).thenReturn(Optional.of(user1)); + when(user1.getOrg()).thenReturn(null); + + ServerWebExchange exchange = this.exchange.mutate().principal(Mono.just(auth1)).build(); + + filter.filter(exchange, mockChain).block(); + + verify(mockChain, times(1)).filter(same(exchange)); + verify(mockMapper, times(1)).resolve(any()); + + Optional resolved = GeorchestraUsers.resolve(exchange); + assertSame(user1, resolved.orElseThrow()); + } }