diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/AbstractDirectoryExternalModel.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/AbstractDirectoryExternalModel.java new file mode 100644 index 00000000..ab589d83 --- /dev/null +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/AbstractDirectoryExternalModel.java @@ -0,0 +1,15 @@ +package com.deftdevs.bootstrapi.commons.model; + +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.xml.bind.annotation.XmlElement; + +@Data +@EqualsAndHashCode(callSuper = true) +public abstract class AbstractDirectoryExternalModel extends AbstractDirectoryModel { + + @XmlElement + private Boolean testConnection; + +} diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/AbstractDirectoryModel.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/AbstractDirectoryModel.java index 62a9dceb..9fab99fb 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/AbstractDirectoryModel.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/AbstractDirectoryModel.java @@ -7,7 +7,6 @@ import lombok.Data; import lombok.NoArgsConstructor; -import javax.validation.constraints.NotNull; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import java.util.Date; @@ -44,7 +43,6 @@ public abstract class AbstractDirectoryModel { private Long id; @XmlElement - @NotNull private String name; @XmlElement diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/ApplicationLinkModel.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/ApplicationLinkModel.java index c91435b0..a6cc7b80 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/ApplicationLinkModel.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/ApplicationLinkModel.java @@ -4,7 +4,6 @@ import lombok.Data; import lombok.NoArgsConstructor; -import javax.validation.constraints.NotNull; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; import java.net.URI; @@ -43,19 +42,15 @@ public enum ApplicationLinkStatus { private UUID uuid; @XmlElement - @NotNull private String name; @XmlElement - @NotNull private ApplicationLinkType type; @XmlElement - @NotNull private URI displayUrl; @XmlElement - @NotNull private URI rpcUrl; @XmlElement @@ -65,11 +60,14 @@ public enum ApplicationLinkStatus { private ApplicationLinkAuthType incomingAuthType; @XmlElement - private boolean primary; + private Boolean primary; @XmlElement private ApplicationLinkStatus status; + @XmlElement + private Boolean ignoreSetupErrors; + // Example instances for documentation and tests public static final ApplicationLinkModel EXAMPLE_1; diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/DirectoryCrowdModel.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/DirectoryCrowdModel.java index 30878d38..6dfdc345 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/DirectoryCrowdModel.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/DirectoryCrowdModel.java @@ -17,7 +17,7 @@ @NoArgsConstructor @EqualsAndHashCode(callSuper = true) @XmlRootElement(name = BootstrAPI.DIRECTORY + '-' + BootstrAPI.DIRECTORY_CROWD) -public class DirectoryCrowdModel extends AbstractDirectoryModel { +public class DirectoryCrowdModel extends AbstractDirectoryExternalModel { @XmlElement private DirectoryCrowdServer server; diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/DirectoryDelegatingModel.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/DirectoryDelegatingModel.java index d2b3a3fe..dcfdea27 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/DirectoryDelegatingModel.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/DirectoryDelegatingModel.java @@ -13,7 +13,7 @@ @NoArgsConstructor @EqualsAndHashCode(callSuper = true) @XmlRootElement(name = BootstrAPI.DIRECTORY + '-' + BootstrAPI.DIRECTORY_DELEGATING) -public class DirectoryDelegatingModel extends AbstractDirectoryModel { +public class DirectoryDelegatingModel extends AbstractDirectoryExternalModel { @XmlElement private DirectoryDelegatingConnector connector; diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/DirectoryLdapModel.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/DirectoryLdapModel.java index 1a309d2e..48a9051e 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/DirectoryLdapModel.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/DirectoryLdapModel.java @@ -16,7 +16,7 @@ @NoArgsConstructor @EqualsAndHashCode(callSuper = true) @XmlRootElement(name = BootstrAPI.DIRECTORY + '-' + BootstrAPI.DIRECTORY_LDAP) -public class DirectoryLdapModel extends AbstractDirectoryModel { +public class DirectoryLdapModel extends AbstractDirectoryExternalModel { @XmlElement private DirectoryLdapServer server; diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/util/ApplicationLinkModelUtil.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/util/ApplicationLinkModelUtil.java index 9975126b..fb73fd50 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/util/ApplicationLinkModelUtil.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/model/util/ApplicationLinkModelUtil.java @@ -79,7 +79,7 @@ public static ApplicationLinkDetails toApplicationLinkDetails( .name(applicationLinkModel.getName()) .displayUrl(applicationLinkModel.getDisplayUrl()) .rpcUrl(applicationLinkModel.getRpcUrl()) - .isPrimary(applicationLinkModel.isPrimary()) + .isPrimary(applicationLinkModel.getPrimary()) .build(); } diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractApplicationLinkResourceImpl.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractApplicationLinkResourceImpl.java index 44c2274a..26bdfcec 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractApplicationLinkResourceImpl.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractApplicationLinkResourceImpl.java @@ -4,7 +4,6 @@ import com.deftdevs.bootstrapi.commons.rest.api.ApplicationLinkResource; import com.deftdevs.bootstrapi.commons.service.api.ApplicationLinksService; -import javax.ws.rs.core.Response; import java.util.UUID; public abstract class AbstractApplicationLinkResourceImpl implements ApplicationLinkResource { @@ -18,39 +17,31 @@ public AbstractApplicationLinkResourceImpl( } @Override - public Response getApplicationLink( + public ApplicationLinkModel getApplicationLink( final UUID uuid) { - final ApplicationLinkModel linkModel = applicationLinksService.getApplicationLink(uuid); - return Response.ok(linkModel).build(); + return applicationLinksService.getApplicationLink(uuid); } @Override - public Response createApplicationLink( - final boolean ignoreSetupErrors, - final ApplicationLinkModel linkModel) { + public ApplicationLinkModel createApplicationLink( + final ApplicationLinkModel applicationLinkModel) { - final ApplicationLinkModel addedApplicationLink = applicationLinksService.addApplicationLink( - linkModel, ignoreSetupErrors); - return Response.ok(addedApplicationLink).build(); + return applicationLinksService.addApplicationLink(applicationLinkModel); } @Override - public Response updateApplicationLink( + public ApplicationLinkModel updateApplicationLink( final UUID uuid, - final boolean ignoreSetupErrors, - final ApplicationLinkModel linkModel) { + final ApplicationLinkModel applicationLinkModel) { - final ApplicationLinkModel updatedLinkModel = applicationLinksService.setApplicationLink( - uuid, linkModel, ignoreSetupErrors); - return Response.ok(updatedLinkModel).build(); + return applicationLinksService.setApplicationLink(uuid, applicationLinkModel); } @Override - public Response deleteApplicationLink( + public void deleteApplicationLink( final UUID uuid) { applicationLinksService.deleteApplicationLink(uuid); - return Response.ok().build(); } } diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractApplicationLinksResourceImpl.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractApplicationLinksResourceImpl.java index 418acc40..a94720d1 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractApplicationLinksResourceImpl.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractApplicationLinksResourceImpl.java @@ -4,8 +4,7 @@ import com.deftdevs.bootstrapi.commons.rest.api.ApplicationLinksResource; import com.deftdevs.bootstrapi.commons.service.api.ApplicationLinksService; -import javax.ws.rs.core.Response; -import java.util.List; +import java.util.Map; public abstract class AbstractApplicationLinksResourceImpl implements ApplicationLinksResource { @@ -18,26 +17,21 @@ public AbstractApplicationLinksResourceImpl( } @Override - public Response getApplicationLinks() { - final List applicationLinkModels = applicationLinksService.getApplicationLinks(); - return Response.ok(applicationLinkModels).build(); + public Map getApplicationLinks() { + return applicationLinksService.getApplicationLinks(); } @Override - public Response setApplicationLinks( - final boolean ignoreSetupErrors, - final List applicationLinkModels) { + public Map setApplicationLinks( + final Map applicationLinkModels) { - final List updatedApplicationLinkModels = applicationLinksService.setApplicationLinks( - applicationLinkModels, ignoreSetupErrors); - return Response.ok(updatedApplicationLinkModels).build(); + return applicationLinksService.setApplicationLinks(applicationLinkModels); } @Override - public Response deleteApplicationLinks( + public void deleteApplicationLinks( final boolean force) { applicationLinksService.deleteApplicationLinks(force); - return Response.ok().build(); } } diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractAuthenticationResourceImpl.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractAuthenticationResourceImpl.java index 7112553a..cb4c3247 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractAuthenticationResourceImpl.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractAuthenticationResourceImpl.java @@ -5,11 +5,10 @@ import com.deftdevs.bootstrapi.commons.rest.api.AuthenticationResource; import com.deftdevs.bootstrapi.commons.service.api.AuthenticationService; -import javax.ws.rs.core.Response; -import java.util.List; +import java.util.Map; -public abstract class AbstractAuthenticationResourceImpl> - implements AuthenticationResource { +public abstract class AbstractAuthenticationResourceImpl> + implements AuthenticationResource { private final S authenticationService; @@ -20,31 +19,27 @@ protected AbstractAuthenticationResourceImpl( } @Override - public Response getAuthenticationIdps() { - final List resultAuthenticationIdpModels = authenticationService.getAuthenticationIdps(); - return Response.ok(resultAuthenticationIdpModels).build(); + public Map getAuthenticationIdps() { + return authenticationService.getAuthenticationIdps(); } @Override - public Response setAuthenticationIdps( - final List authenticationIdpModels) { + public Map setAuthenticationIdps( + final Map authenticationIdpModels) { - final List resultAuthenticationIdpModels = authenticationService.setAuthenticationIdps(authenticationIdpModels); - return Response.ok(resultAuthenticationIdpModels).build(); + return authenticationService.setAuthenticationIdps(authenticationIdpModels); } @Override - public Response getAuthenticationSso() { - final SB resultAuthenticationSsoModel = authenticationService.getAuthenticationSso(); - return Response.ok(resultAuthenticationSsoModel).build(); + public SM getAuthenticationSso() { + return authenticationService.getAuthenticationSso(); } @Override - public Response setAuthenticationSso( - final SB authenticationSsoModel) { + public SM setAuthenticationSso( + final SM authenticationSsoModel) { - final SB resultAuthenticationSsoModel = authenticationService.setAuthenticationSso(authenticationSsoModel); - return Response.ok(resultAuthenticationSsoModel).build(); + return authenticationService.setAuthenticationSso(authenticationSsoModel); } } diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractDirectoriesResourceImpl.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractDirectoriesResourceImpl.java index f6281ef6..0b25d2f8 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractDirectoriesResourceImpl.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractDirectoriesResourceImpl.java @@ -4,37 +4,35 @@ import com.deftdevs.bootstrapi.commons.rest.api.DirectoriesResource; import com.deftdevs.bootstrapi.commons.service.api.DirectoriesService; -import javax.ws.rs.core.Response; -import java.util.List; +import java.util.Map; public abstract class AbstractDirectoriesResourceImpl implements DirectoriesResource { private final DirectoriesService directoriesService; - public AbstractDirectoriesResourceImpl(DirectoriesService directoriesService) { + public AbstractDirectoriesResourceImpl( + final DirectoriesService directoriesService) { + this.directoriesService = directoriesService; } @Override - public Response getDirectories() { - final List directoryModels = directoriesService.getDirectories(); - return Response.ok(directoryModels).build(); + public Map getDirectories() { + return directoriesService.getDirectories(); } @Override - public Response setDirectories ( - final boolean testConnection, - final List directories) { + public Map setDirectories ( + final Map directories) { - List directoryModels = directoriesService.setDirectories(directories, testConnection); - return Response.ok(directoryModels).build(); + return directoriesService.setDirectories(directories); } @Override - public Response deleteDirectories( + public void deleteDirectories( final boolean force) { + directoriesService.deleteDirectories(force); - return Response.ok().build(); } } diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractDirectoryResourceImpl.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractDirectoryResourceImpl.java index c5d94875..09bd3935 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractDirectoryResourceImpl.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/AbstractDirectoryResourceImpl.java @@ -15,35 +15,31 @@ public AbstractDirectoryResourceImpl(DirectoriesService directoriesService) { } @Override - public Response getDirectory( + public AbstractDirectoryModel getDirectory( final long id) { - final AbstractDirectoryModel directoryModel = directoriesService.getDirectory(id); - return Response.ok(directoryModel).build(); + + return directoriesService.getDirectory(id); } @Override - public Response updateDirectory( + public AbstractDirectoryModel updateDirectory( final long id, - final boolean testConnection, final AbstractDirectoryModel directory) { - AbstractDirectoryModel resultDirectoryModel = directoriesService.setDirectory(id, directory, testConnection); - return Response.ok(resultDirectoryModel).build(); + return directoriesService.setDirectory(id, directory); } @Override - public Response createDirectory( - final boolean testConnection, + public AbstractDirectoryModel createDirectory( final AbstractDirectoryModel directory) { - AbstractDirectoryModel addedDirectoryModel = directoriesService.addDirectory(directory, testConnection); - return Response.ok(addedDirectoryModel).build(); + return directoriesService.addDirectory(directory); } @Override - public Response deleteDirectory( + public void deleteDirectory( final long id) { + directoriesService.deleteDirectory(id); - return Response.ok().build(); } } diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/ApplicationLinkResource.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/ApplicationLinkResource.java index 9559ed89..85764f18 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/ApplicationLinkResource.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/ApplicationLinkResource.java @@ -8,9 +8,15 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; import java.util.UUID; public interface ApplicationLinkResource { @@ -33,7 +39,7 @@ public interface ApplicationLinkResource { ), } ) - Response getApplicationLink( + ApplicationLinkModel getApplicationLink( @PathParam("uuid") final UUID uuid); @POST @@ -53,8 +59,7 @@ Response getApplicationLink( ), } ) - Response createApplicationLink( - @QueryParam("ignore-setup-errors") @DefaultValue("false") final boolean ignoreSetupErrors, + ApplicationLinkModel createApplicationLink( final ApplicationLinkModel linkModel); @PUT @@ -75,9 +80,8 @@ Response createApplicationLink( ), } ) - Response updateApplicationLink( + ApplicationLinkModel updateApplicationLink( @PathParam("uuid") final UUID uuid, - @QueryParam("ignore-setup-errors") @DefaultValue("false") final boolean ignoreSetupErrors, final ApplicationLinkModel linksModelModels); @DELETE @@ -96,7 +100,7 @@ Response updateApplicationLink( ), } ) - Response deleteApplicationLink( + void deleteApplicationLink( @PathParam("uuid") final UUID uuid); } diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/ApplicationLinksResource.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/ApplicationLinksResource.java index d10eef1e..cc02f47c 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/ApplicationLinksResource.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/ApplicationLinksResource.java @@ -9,10 +9,14 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import java.util.List; +import java.util.Map; public interface ApplicationLinksResource { @@ -32,7 +36,7 @@ public interface ApplicationLinksResource { ), } ) - Response getApplicationLinks(); + Map getApplicationLinks(); @PUT @Consumes(MediaType.APPLICATION_JSON) @@ -52,9 +56,8 @@ public interface ApplicationLinksResource { ), } ) - Response setApplicationLinks( - @QueryParam("ignore-setup-errors") @DefaultValue("false") final boolean ignoreSetupErrors, - final List applicationLinkModels); + Map setApplicationLinks( + final Map applicationLinkModels); @DELETE @Operation( @@ -72,7 +75,7 @@ Response setApplicationLinks( ), } ) - Response deleteApplicationLinks( + void deleteApplicationLinks( @QueryParam("force") final boolean force); } diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/AuthenticationResource.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/AuthenticationResource.java index 65a65624..a122265b 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/AuthenticationResource.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/AuthenticationResource.java @@ -16,10 +16,9 @@ import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import java.util.List; +import java.util.Map; -public interface AuthenticationResource { +public interface AuthenticationResource { @GET @Path(BootstrAPI.AUTHENTICATION_IDPS) @@ -37,7 +36,7 @@ public interface AuthenticationResource getAuthenticationIdps(); @PATCH @Path(BootstrAPI.AUTHENTICATION_IDPS) @@ -56,8 +55,8 @@ public interface AuthenticationResource authenticationIdpModels); + Map setAuthenticationIdps( + final Map authenticationIdpModels); @GET @Path(BootstrAPI.AUTHENTICATION_SSO) @@ -75,7 +74,7 @@ Response setAuthenticationIdps( ) } ) - Response getAuthenticationSso(); + SM getAuthenticationSso(); @PATCH @Path(BootstrAPI.AUTHENTICATION_SSO) @@ -94,7 +93,7 @@ Response setAuthenticationIdps( ) } ) - Response setAuthenticationSso( - final SB authenticationSsoModel); + SM setAuthenticationSso( + final SM authenticationSsoModel); } diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/DirectoriesResource.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/DirectoriesResource.java index 156d3b1c..6f3d4566 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/DirectoriesResource.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/DirectoriesResource.java @@ -4,15 +4,18 @@ import com.deftdevs.bootstrapi.commons.model.AbstractDirectoryModel; import com.deftdevs.bootstrapi.commons.model.ErrorCollection; import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.media.ArraySchema; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import java.util.List; +import java.util.Map; public interface DirectoriesResource { @@ -23,8 +26,8 @@ public interface DirectoriesResource { summary = "Get all user directories", responses = { @ApiResponse( - responseCode = "200", content = @Content(array = @ArraySchema(schema = @Schema(implementation = AbstractDirectoryModel.class))), - description = "Returns all directories." + responseCode = "200", content = @Content(schema = @Schema(type = "object", additionalPropertiesSchema = AbstractDirectoryModel.class)), + description = "Returns directories mapped by their name." ), @ApiResponse( responseCode = "default", content = @Content(schema = @Schema(implementation = ErrorCollection.class)), @@ -32,19 +35,19 @@ public interface DirectoriesResource { ), } ) - Response getDirectories(); + Map getDirectories(); @PUT @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) @Operation( tags = { BootstrAPI.DIRECTORIES }, - summary = "Set a list of user directories", + summary = "Set directories mapped by their name.", description = "NOTE: All existing directories with the same 'name' attribute are updated.", responses = { @ApiResponse( - responseCode = "200", content = @Content(array = @ArraySchema(schema = @Schema(implementation = AbstractDirectoryModel.class))), - description = "Returns all directories." + responseCode = "200", content = @Content(schema = @Schema(type = "object", additionalPropertiesSchema = AbstractDirectoryModel.class)), + description = "Returns directories mapped by their name." ), @ApiResponse( responseCode = "default", content = @Content(schema = @Schema(implementation = ErrorCollection.class)), @@ -52,9 +55,8 @@ public interface DirectoriesResource { ), } ) - Response setDirectories( - @QueryParam("test-connection") @DefaultValue("false") final boolean testConnection, - final List directories); + Map setDirectories( + final Map directories); @DELETE @Operation( @@ -72,7 +74,7 @@ Response setDirectories( ), } ) - Response deleteDirectories( + void deleteDirectories( @QueryParam("force") final boolean force); } diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/DirectoryResource.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/DirectoryResource.java index 7beb2a0d..245923cd 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/DirectoryResource.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/rest/api/DirectoryResource.java @@ -8,9 +8,15 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; public interface DirectoryResource { @@ -31,7 +37,7 @@ public interface DirectoryResource { ), } ) - Response getDirectory( + AbstractDirectoryModel getDirectory( @PathParam("id") final long id); @POST @@ -51,8 +57,7 @@ Response getDirectory( ), } ) - Response createDirectory( - @QueryParam("test-connection") @DefaultValue("false") final boolean testConnection, + AbstractDirectoryModel createDirectory( final AbstractDirectoryModel directory); @PUT @@ -73,9 +78,8 @@ Response createDirectory( ), } ) - Response updateDirectory( + AbstractDirectoryModel updateDirectory( @PathParam("id") final long id, - @QueryParam("test-connection") @DefaultValue("false") final boolean testConnection, final AbstractDirectoryModel directory); @DELETE @@ -94,7 +98,7 @@ Response updateDirectory( ), } ) - Response deleteDirectory( + void deleteDirectory( @PathParam("id") final long id); } diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/AbstractDirectoriesService.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/AbstractDirectoriesService.java new file mode 100644 index 00000000..49a07cf0 --- /dev/null +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/AbstractDirectoriesService.java @@ -0,0 +1,49 @@ +package com.deftdevs.bootstrapi.commons.service; + +import com.deftdevs.bootstrapi.commons.exception.web.BadRequestException; +import com.deftdevs.bootstrapi.commons.model.AbstractDirectoryModel; +import com.deftdevs.bootstrapi.commons.service.api.DirectoriesService; + +import java.util.LinkedHashMap; +import java.util.Map; +import java.util.Set; +import java.util.function.Function; +import java.util.stream.Collectors; + +public abstract class AbstractDirectoriesService implements DirectoriesService { + + @Override + public Map setDirectories( + final Map directoryModels) { + + final Map existingDirectoriesByName = getDirectories().values().stream() + .collect(Collectors.toMap(AbstractDirectoryModel::getName, Function.identity())); + + final Map resultDirectories = new LinkedHashMap<>(); + + for (Map.Entry directoryModelEntry : directoryModels.entrySet()) { + final AbstractDirectoryModel directoryModel = directoryModelEntry.getValue(); + + // Check if directoryModel is not an instance of any supported class + if (getSupportedClassesForUpdate().stream().noneMatch(clazz -> clazz.isInstance(directoryModel))) { + throw new BadRequestException(String.format("Updating directory type '%s' is not supported (yet)", directoryModel.getClass())); + } + + final AbstractDirectoryModel existingDirectoryModel = existingDirectoriesByName.get(directoryModelEntry.getKey()); + final AbstractDirectoryModel resultDirectoryModel; + + if (existingDirectoryModel != null) { + resultDirectoryModel = setDirectory(existingDirectoryModel.getId(), directoryModelEntry.getValue()); + } else { + resultDirectoryModel = addDirectory(directoryModelEntry.getValue()); + } + + resultDirectories.put(resultDirectoryModel.getName(), resultDirectoryModel); + } + + return resultDirectories; + } + + protected abstract Set> getSupportedClassesForUpdate(); + +} diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/DefaultApplicationLinksServiceImpl.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/DefaultApplicationLinksServiceImpl.java index a6b07830..6e756417 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/DefaultApplicationLinksServiceImpl.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/DefaultApplicationLinksServiceImpl.java @@ -31,16 +31,16 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.net.URI; -import java.util.List; import java.util.Map; import java.util.UUID; +import java.util.function.Function; import java.util.stream.Collectors; import java.util.stream.StreamSupport; import static com.atlassian.applinks.internal.status.error.ApplinkErrorType.CONNECTION_REFUSED; -import static com.deftdevs.bootstrapi.commons.model.ApplicationLinkModel.ApplicationLinkStatus.*; +import static com.deftdevs.bootstrapi.commons.model.ApplicationLinkModel.ApplicationLinkStatus.AVAILABLE; import static com.deftdevs.bootstrapi.commons.model.ApplicationLinkModel.ApplicationLinkStatus.CONFIGURATION_ERROR; +import static com.deftdevs.bootstrapi.commons.model.ApplicationLinkModel.ApplicationLinkStatus.UNAVAILABLE; public class DefaultApplicationLinksServiceImpl implements ApplicationLinksService { @@ -67,12 +67,12 @@ public DefaultApplicationLinksServiceImpl( } @Override - public List getApplicationLinks() { + public Map getApplicationLinks() { final Iterable applicationLinksIterable = mutatingApplicationLinkService.getApplicationLinks(); return StreamSupport.stream(applicationLinksIterable.spliterator(),false) .map(this::getApplicationLinkModel) - .collect(Collectors.toList()); + .collect(Collectors.toMap(ApplicationLinkModel::getName, Function.identity())); } @Override @@ -95,21 +95,21 @@ public ApplicationLinkModel getApplicationLink( } @Override - public List setApplicationLinks( - final List applicationLinkModels, - final boolean ignoreSetupErrors) { + public Map setApplicationLinks( + final Map applicationLinkModels) { // existing application links map - final Map linkModelMap = getApplicationLinks().stream() - .collect(Collectors.toMap(ApplicationLinkModel::getRpcUrl, link -> link)); + final Map linkModelMap = getApplicationLinks(); // find existing link by rpcUrl - for (ApplicationLinkModel applicationLink : applicationLinkModels) { - URI key = applicationLink.getRpcUrl(); - if (linkModelMap.containsKey(key)) { - setApplicationLink(linkModelMap.get(key).getUuid(), applicationLink, ignoreSetupErrors); + for (Map.Entry applicationLinkModelEntry : applicationLinkModels.entrySet()) { + final ApplicationLinkModel applicationLinkModel = applicationLinkModelEntry.getValue(); + final String name = applicationLinkModel.getName(); + + if (linkModelMap.containsKey(name)) { + setApplicationLink(linkModelMap.get(name).getUuid(), applicationLinkModel); } else { - addApplicationLink(applicationLink, ignoreSetupErrors); + addApplicationLink(applicationLinkModel); } } @@ -119,8 +119,7 @@ public List setApplicationLinks( @Override public ApplicationLinkModel setApplicationLink( final UUID uuid, - final ApplicationLinkModel applicationLinkModel, - final boolean ignoreSetupErrors) { + final ApplicationLinkModel applicationLinkModel) { final ApplicationId applicationId = new ApplicationId(uuid.toString()); @@ -139,7 +138,7 @@ public ApplicationLinkModel setApplicationLink( // configuring authentication might fail if setup is incorrect or remote app is unavailable setOutgoingOAuthConfig(applicationLink, outgoingOAuthConfig); - setIncomingOAuthConfig(applicationLink, incomingOAuthConfig, ignoreSetupErrors); + setIncomingOAuthConfig(applicationLink, incomingOAuthConfig, Boolean.TRUE.equals(applicationLinkModel.getIgnoreSetupErrors())); return getApplicationLinkModel(recreatedApplicationLink); } catch (TypeNotInstalledException e) { @@ -149,8 +148,7 @@ public ApplicationLinkModel setApplicationLink( @Override public ApplicationLinkModel addApplicationLink( - final ApplicationLinkModel applicationLinkModel, - final boolean ignoreSetupErrors) { + final ApplicationLinkModel applicationLinkModel) { final ApplicationLinkDetails applicationLinkDetails = ApplicationLinkModelUtil.toApplicationLinkDetails(applicationLinkModel); final OAuthConfig outgoingOAuthConfig = ApplicationLinkModelUtil.toOAuthConfig(applicationLinkModel.getOutgoingAuthType()); @@ -176,7 +174,7 @@ public ApplicationLinkModel addApplicationLink( // configuring authentication might fail if setup is incorrect or remote app is unavailable setOutgoingOAuthConfig(applicationLink, outgoingOAuthConfig); - setIncomingOAuthConfig(applicationLink, incomingOAuthConfig, ignoreSetupErrors); + setIncomingOAuthConfig(applicationLink, incomingOAuthConfig, Boolean.TRUE.equals(applicationLinkModel.getIgnoreSetupErrors())); return getApplicationLinkModel(applicationLink); } diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/api/ApplicationLinksService.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/api/ApplicationLinksService.java index 4e51ce75..9897b539 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/api/ApplicationLinksService.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/api/ApplicationLinksService.java @@ -2,7 +2,7 @@ import com.deftdevs.bootstrapi.commons.model.ApplicationLinkModel; -import java.util.List; +import java.util.Map; import java.util.UUID; public interface ApplicationLinksService { @@ -12,7 +12,7 @@ public interface ApplicationLinksService { * * @return the application links */ - List getApplicationLinks(); + Map getApplicationLinks(); /** * Gets a single application link. @@ -27,39 +27,30 @@ ApplicationLinkModel getApplicationLink( * Sets or updates the given application links * * @param applicationLinkModels the application links to set / update - * @param ignoreSetupErrors whether or not to ignore authentication or other setup errors when setting up the link - * which usually happens if the application to link has not setup the link counterpart yet * @return the updated application links */ - List setApplicationLinks( - final List applicationLinkModels, - boolean ignoreSetupErrors); + Map setApplicationLinks( + final Map applicationLinkModels); /** * Updates the given application link * - * @param uuid the application link uuid to update + * @param uuid the application link uuid to update * @param applicationLinkModel the application link to set / update - * @param ignoreSetupErrors whether or not to ignore authentication or other setup errors when setting up the link - * which usually happens if the application to link has not setup the link counterpart yet * @return the updated application link */ ApplicationLinkModel setApplicationLink( final UUID uuid, - final ApplicationLinkModel applicationLinkModel, - boolean ignoreSetupErrors); + final ApplicationLinkModel applicationLinkModel); /** * Adds a single application link * * @param applicationLinkModel the application link to set - * @param ignoreSetupErrors whether or not to ignore authentication or other setup errors when setting up the link - * which usually happens if the application to link has not setup the link counterpart yet * @return the added application link */ ApplicationLinkModel addApplicationLink( - final ApplicationLinkModel applicationLinkModel, - boolean ignoreSetupErrors); + final ApplicationLinkModel applicationLinkModel); /** * Deletes all application links diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/api/AuthenticationService.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/api/AuthenticationService.java index 91ed615f..871806a1 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/api/AuthenticationService.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/api/AuthenticationService.java @@ -3,14 +3,14 @@ import com.deftdevs.bootstrapi.commons.model.AbstractAuthenticationIdpModel; import com.deftdevs.bootstrapi.commons.model.AuthenticationSsoModel; -import java.util.List; +import java.util.Map; public interface AuthenticationService { - List getAuthenticationIdps(); + Map getAuthenticationIdps(); - List setAuthenticationIdps( - List authenticationIdpModels); + Map setAuthenticationIdps( + Map authenticationIdpModels); IB setAuthenticationIdp( IB authenticationIdpModel); diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/api/DirectoriesService.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/api/DirectoriesService.java index cbdca6b0..82292250 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/api/DirectoriesService.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/api/DirectoriesService.java @@ -2,7 +2,7 @@ import com.deftdevs.bootstrapi.commons.model.AbstractDirectoryModel; -import java.util.List; +import java.util.Map; /** * The User directory service interface. @@ -14,7 +14,7 @@ public interface DirectoriesService { * * @return the directories */ - List getDirectories(); + Map getDirectories(); /** * Gets a single directory. @@ -26,39 +26,33 @@ AbstractDirectoryModel getDirectory( final long id); /** - * Adds or Updates directory configurations. Any existing configurations with the same 'name' property is updated. + * Adds or Updates directory configurations. Any existing configurations with the same key is updated. * - * @param directories the directories - * @param testConnection whether to test connection + * @param directoryModels the directories * @return the directories */ - List setDirectories( - List directories, - boolean testConnection); + Map setDirectories( + Map directoryModels); /** * Updates a single directory configuration. Any existing configuration with the same 'name' property is updated. * * @param id the directory id to update - * @param directory the directory - * @param testConnection whether to test connection + * @param directoryModel the directory * @return the directories */ AbstractDirectoryModel setDirectory( long id, - AbstractDirectoryModel directory, - boolean testConnection); + AbstractDirectoryModel directoryModel); /** * Adds a new directory configuration. * - * @param directory the directories - * @param testConnection whether to test connection + * @param directoryModel the directories * @return the added directory */ AbstractDirectoryModel addDirectory( - AbstractDirectoryModel directory, - boolean testConnection); + AbstractDirectoryModel directoryModel); /** * Deletes all directories diff --git a/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/api/UsersService.java b/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/api/UsersService.java index 58b47e85..ebcb822e 100644 --- a/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/api/UsersService.java +++ b/commons/src/main/java/com/deftdevs/bootstrapi/commons/service/api/UsersService.java @@ -3,6 +3,7 @@ import com.deftdevs.bootstrapi.commons.model.UserModel; import java.util.List; +import java.util.Map; public interface UsersService { @@ -48,6 +49,17 @@ List setUsers( final long directoryId, final List userModels); + /** + * Set (add or update) users. + * + * @param directoryId the directory id + * @param userModels the user beans + * @return the set user beans + */ + Map setUsers( + final long directoryId, + final Map userModels); + /** * Update the user. * diff --git a/commons/src/test/java/com/deftdevs/bootstrapi/commons/model/util/ApplicationLinkModelUtilTest.java b/commons/src/test/java/com/deftdevs/bootstrapi/commons/model/util/ApplicationLinkModelUtilTest.java index 831dc422..4075bad1 100644 --- a/commons/src/test/java/com/deftdevs/bootstrapi/commons/model/util/ApplicationLinkModelUtilTest.java +++ b/commons/src/test/java/com/deftdevs/bootstrapi/commons/model/util/ApplicationLinkModelUtilTest.java @@ -44,7 +44,7 @@ void testToApplicationLinkModel() throws URISyntaxException { assertEquals(bean.getName(), applicationLink.getName()); assertEquals(bean.getDisplayUrl(), applicationLink.getDisplayUrl()); assertEquals(bean.getRpcUrl(), applicationLink.getRpcUrl()); - assertEquals(bean.isPrimary(), applicationLink.isPrimary()); + assertEquals(bean.getPrimary(), applicationLink.isPrimary()); } @Test @@ -56,7 +56,7 @@ void testToApplicationLinkDetails() throws Exception { assertEquals(bean.getName(), linkDetails.getName()); assertEquals(bean.getDisplayUrl(), linkDetails.getDisplayUrl()); assertEquals(bean.getRpcUrl(), linkDetails.getRpcUrl()); - assertEquals(bean.isPrimary(), linkDetails.isPrimary()); + assertEquals(bean.getPrimary(), linkDetails.isPrimary()); } @Test diff --git a/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/ApplicationLinkResourceTest.java b/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/ApplicationLinkResourceTest.java index daffea2f..dbdf4793 100644 --- a/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/ApplicationLinkResourceTest.java +++ b/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/ApplicationLinkResourceTest.java @@ -9,7 +9,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.ws.rs.core.Response; import java.util.UUID; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -32,42 +31,29 @@ public void setup() { @Test void testGetApplicationLink() { final ApplicationLinkModel bean = ApplicationLinkModel.EXAMPLE_1; - - UUID id = UUID.randomUUID(); - + final UUID id = UUID.randomUUID(); doReturn(bean).when(applicationLinksService).getApplicationLink(id); - final Response response = resource.getApplicationLink(id); - assertEquals(200, response.getStatus()); - final ApplicationLinkModel linkModel = (ApplicationLinkModel) response.getEntity(); - + final ApplicationLinkModel linkModel = resource.getApplicationLink(id); assertEquals(linkModel, bean); } @Test void testCreateApplicationLink() { final ApplicationLinkModel bean = ApplicationLinkModel.EXAMPLE_1; + doReturn(bean).when(applicationLinksService).addApplicationLink(bean); - doReturn(bean).when(applicationLinksService).addApplicationLink(bean, true); - - final Response response = resource.createApplicationLink(true, bean); - assertEquals(200, response.getStatus()); - final ApplicationLinkModel responseModel = (ApplicationLinkModel) response.getEntity(); - + final ApplicationLinkModel responseModel = resource.createApplicationLink(bean); assertEquals(responseModel, bean); } @Test void testUpdateApplicationLink() { final ApplicationLinkModel bean = ApplicationLinkModel.EXAMPLE_1; - UUID id = UUID.randomUUID(); - - doReturn(bean).when(applicationLinksService).setApplicationLink(id, bean, true); - - final Response response = resource.updateApplicationLink(id, true, bean); - assertEquals(200, response.getStatus()); - final ApplicationLinkModel linkModel = (ApplicationLinkModel) response.getEntity(); + final UUID id = UUID.randomUUID(); + doReturn(bean).when(applicationLinksService).setApplicationLink(id, bean); + final ApplicationLinkModel linkModel = resource.updateApplicationLink(id, bean); assertEquals(linkModel, bean); } diff --git a/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/ApplicationLinksResourceTest.java b/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/ApplicationLinksResourceTest.java index 0c3f4e46..22d3613e 100644 --- a/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/ApplicationLinksResourceTest.java +++ b/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/ApplicationLinksResourceTest.java @@ -9,9 +9,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.ws.rs.core.Response; import java.util.Collections; -import java.util.List; +import java.util.Map; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -32,25 +31,19 @@ public void setup() { @Test void testGetApplicationLinks() { - final List applicationLinkModels = Collections.singletonList(ApplicationLinkModel.EXAMPLE_1); + final Map applicationLinkModels = Collections.singletonMap(ApplicationLinkModel.EXAMPLE_1.getName(), ApplicationLinkModel.EXAMPLE_1); doReturn(applicationLinkModels).when(applicationLinksService).getApplicationLinks(); - final Response response = resource.getApplicationLinks(); - assertEquals(200, response.getStatus()); - - final List responseApplicationLinkModels = (List) response.getEntity(); + final Map responseApplicationLinkModels = resource.getApplicationLinks(); assertEquals(responseApplicationLinkModels, applicationLinkModels); } @Test void testSetApplicationLinks() { - final List applicationLinkModels = Collections.singletonList(ApplicationLinkModel.EXAMPLE_1); - doReturn(applicationLinkModels).when(applicationLinksService).setApplicationLinks(applicationLinkModels, true); - - final Response response = resource.setApplicationLinks(true, applicationLinkModels); - assertEquals(200, response.getStatus()); + final Map applicationLinkModels = Collections.singletonMap(ApplicationLinkModel.EXAMPLE_1.getName(), ApplicationLinkModel.EXAMPLE_1); + doReturn(applicationLinkModels).when(applicationLinksService).setApplicationLinks(applicationLinkModels); - final List resultApplicationLinkModels = (List) response.getEntity(); + final Map resultApplicationLinkModels = resource.setApplicationLinks(applicationLinkModels); assertEquals(resultApplicationLinkModels, applicationLinkModels); } diff --git a/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/AuthenticationResourceTest.java b/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/AuthenticationResourceTest.java index 77e85923..cd091657 100644 --- a/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/AuthenticationResourceTest.java +++ b/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/AuthenticationResourceTest.java @@ -12,9 +12,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.ws.rs.core.Response; -import java.util.Arrays; -import java.util.List; +import java.util.Map; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.mockito.Mockito.doReturn; @@ -23,7 +21,7 @@ class AuthenticationResourceTest { @Mock - private AuthenticationService authenticationService; + private AuthenticationService authenticationService; private TestAuthenticationResourceImpl resource; @@ -34,31 +32,25 @@ public void setup() { @Test void testGetAuthenticationIdps() { - final List authenticationIdpModels = Arrays.asList( - AuthenticationIdpOidcModel.EXAMPLE_1, - AuthenticationIdpSamlModel.EXAMPLE_1 + final Map authenticationIdpModels = Map.of( + AuthenticationIdpOidcModel.EXAMPLE_1.getName(), AuthenticationIdpOidcModel.EXAMPLE_1, + AuthenticationIdpSamlModel.EXAMPLE_1.getName(), AuthenticationIdpSamlModel.EXAMPLE_1 ); doReturn(authenticationIdpModels).when(authenticationService).getAuthenticationIdps(); - final Response response = resource.getAuthenticationIdps(); - assertEquals(200, response.getStatus()); - - final List authenticationIdpModelsResponse = (List) response.getEntity(); + final Map authenticationIdpModelsResponse = resource.getAuthenticationIdps(); assertEquals(authenticationIdpModels, authenticationIdpModelsResponse); } @Test void testSetAuthenticationIdps() { - final List authenticationIdpModels = Arrays.asList( - AuthenticationIdpOidcModel.EXAMPLE_1, - AuthenticationIdpSamlModel.EXAMPLE_1 + final Map authenticationIdpModels = Map.of( + AuthenticationIdpOidcModel.EXAMPLE_1.getName(), AuthenticationIdpOidcModel.EXAMPLE_1, + AuthenticationIdpSamlModel.EXAMPLE_1.getName(), AuthenticationIdpSamlModel.EXAMPLE_1 ); doReturn(authenticationIdpModels).when(authenticationService).setAuthenticationIdps(authenticationIdpModels); - final Response response = resource.setAuthenticationIdps(authenticationIdpModels); - assertEquals(200, response.getStatus()); - - final List authenticationIdpModelsResponse = (List) response.getEntity(); + final Map authenticationIdpModelsResponse = resource.setAuthenticationIdps(authenticationIdpModels); assertEquals(authenticationIdpModels, authenticationIdpModelsResponse); } @@ -67,10 +59,7 @@ void testGetAuthenticationSso() { final AuthenticationSsoModel authenticationSsoModel = AuthenticationSsoModel.EXAMPLE_1; doReturn(authenticationSsoModel).when(authenticationService).getAuthenticationSso(); - final Response response = resource.getAuthenticationSso(); - assertEquals(200, response.getStatus()); - - final AuthenticationSsoModel authenticationSsoModelResponse = (AuthenticationSsoModel) response.getEntity(); + final AuthenticationSsoModel authenticationSsoModelResponse = resource.getAuthenticationSso(); assertEquals(authenticationSsoModel, authenticationSsoModelResponse); } @@ -79,10 +68,7 @@ void testSetAuthenticationSso() { final AuthenticationSsoModel authenticationSsoModel = AuthenticationSsoModel.EXAMPLE_1; doReturn(authenticationSsoModel).when(authenticationService).setAuthenticationSso(authenticationSsoModel); - final Response response = resource.setAuthenticationSso(authenticationSsoModel); - assertEquals(200, response.getStatus()); - - final AuthenticationSsoModel authenticationSsoModelResponse = (AuthenticationSsoModel) response.getEntity(); + final AuthenticationSsoModel authenticationSsoModelResponse = resource.setAuthenticationSso(authenticationSsoModel); assertEquals(authenticationSsoModel, authenticationSsoModelResponse); } diff --git a/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/DirectoriesResourceTest.java b/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/DirectoriesResourceTest.java index 6ca52d26..afc7540d 100644 --- a/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/DirectoriesResourceTest.java +++ b/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/DirectoriesResourceTest.java @@ -10,10 +10,11 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.ws.rs.core.Response; -import java.util.Arrays; import java.util.Collections; -import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; @@ -35,27 +36,22 @@ public void setup() { @Test void testGetDirectories() { final DirectoryCrowdModel initialDirectoryModel = DirectoryCrowdModel.EXAMPLE_1; - final List directoryModels = Collections.singletonList(initialDirectoryModel); + final Map directoryModels = Collections.singletonMap(initialDirectoryModel.getName(), initialDirectoryModel); doReturn(directoryModels).when(directoriesService).getDirectories(); - final Response response = resource.getDirectories(); - assertEquals(200, response.getStatus()); - - final List responseDirectoryModels = (List) response.getEntity(); - assertEquals(initialDirectoryModel, responseDirectoryModels.iterator().next()); + final Map responseDirectoryModels = resource.getDirectories(); + assertEquals(initialDirectoryModel, responseDirectoryModels.values().iterator().next()); } @Test void testSetDirectories() { final DirectoryCrowdModel directoryModel1 = DirectoryCrowdModel.EXAMPLE_1; final DirectoryCrowdModel directoryModel2 = DirectoryCrowdModel.EXAMPLE_3; - final List directoryModels = Arrays.asList(directoryModel1, directoryModel2); - doReturn(directoryModels).when(directoriesService).setDirectories(directoryModels, false); - - final Response response = resource.setDirectories(Boolean.FALSE, directoryModels); - assertEquals(200, response.getStatus()); + final Map directoryModels = Stream.of(directoryModel1, directoryModel2) + .collect(Collectors.toMap(AbstractDirectoryModel::getName, Function.identity())); + doReturn(directoryModels).when(directoriesService).setDirectories(directoryModels); - final List responseDirectoryModels = (List) response.getEntity(); + final Map responseDirectoryModels = resource.setDirectories(directoryModels); assertEquals(directoryModels.size(), responseDirectoryModels.size()); } diff --git a/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/DirectoryResourceTest.java b/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/DirectoryResourceTest.java index 80a6a107..eed610bc 100644 --- a/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/DirectoryResourceTest.java +++ b/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/DirectoryResourceTest.java @@ -10,8 +10,6 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import javax.ws.rs.core.Response; - import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.Mockito.doReturn; @@ -32,39 +30,27 @@ public void setup() { @Test void testGetDirectory() { DirectoryCrowdModel directoryModel = DirectoryCrowdModel.EXAMPLE_1; - doReturn(directoryModel).when(directoriesService).getDirectory(1L); - final Response response = resource.getDirectory(1L); - assertEquals(200, response.getStatus()); - final AbstractDirectoryModel directoryModelResponse = (AbstractDirectoryModel) response.getEntity(); - + final AbstractDirectoryModel directoryModelResponse = resource.getDirectory(1L); assertEquals(directoryModel, directoryModelResponse); } @Test void testCreateDirectory() { DirectoryCrowdModel bean = DirectoryCrowdModel.EXAMPLE_1; + doReturn(bean).when(directoriesService).addDirectory(bean); - doReturn(bean).when(directoriesService).addDirectory(bean, false); - - final Response response = resource.createDirectory(Boolean.FALSE, bean); - assertEquals(200, response.getStatus()); - final AbstractDirectoryModel responseModel = (AbstractDirectoryModel) response.getEntity(); - + final AbstractDirectoryModel responseModel = resource.createDirectory(bean); assertEquals(bean.getName(), responseModel.getName()); } @Test void testUpdateDirectory() { DirectoryCrowdModel directoryModel = DirectoryCrowdModel.EXAMPLE_1; + doReturn(directoryModel).when(directoriesService).setDirectory(1L, directoryModel); - doReturn(directoryModel).when(directoriesService).setDirectory(1L, directoryModel, false); - - final Response response = resource.updateDirectory(1L, Boolean.FALSE, directoryModel); - assertEquals(200, response.getStatus()); - final AbstractDirectoryModel directoryModelResponse = (AbstractDirectoryModel) response.getEntity(); - + final AbstractDirectoryModel directoryModelResponse = resource.updateDirectory(1L, directoryModel); assertEquals(directoryModel, directoryModelResponse); } diff --git a/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/impl/TestAuthenticationResourceImpl.java b/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/impl/TestAuthenticationResourceImpl.java index aada79ef..3fdb67d0 100644 --- a/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/impl/TestAuthenticationResourceImpl.java +++ b/commons/src/test/java/com/deftdevs/bootstrapi/commons/rest/impl/TestAuthenticationResourceImpl.java @@ -1,11 +1,15 @@ package com.deftdevs.bootstrapi.commons.rest.impl; +import com.deftdevs.bootstrapi.commons.model.AbstractAuthenticationIdpModel; +import com.deftdevs.bootstrapi.commons.model.AuthenticationSsoModel; import com.deftdevs.bootstrapi.commons.rest.AbstractAuthenticationResourceImpl; import com.deftdevs.bootstrapi.commons.service.api.AuthenticationService; -public class TestAuthenticationResourceImpl extends AbstractAuthenticationResourceImpl { +public class TestAuthenticationResourceImpl extends AbstractAuthenticationResourceImpl> { + + public TestAuthenticationResourceImpl( + AuthenticationService authenticationService) { - public TestAuthenticationResourceImpl(AuthenticationService authenticationService) { super(authenticationService); } diff --git a/commons/src/test/java/com/deftdevs/bootstrapi/commons/service/DefaultApplicationLinkServiceTest.java b/commons/src/test/java/com/deftdevs/bootstrapi/commons/service/DefaultApplicationLinkServiceTest.java index 30bc65c1..407dcc61 100644 --- a/commons/src/test/java/com/deftdevs/bootstrapi/commons/service/DefaultApplicationLinkServiceTest.java +++ b/commons/src/test/java/com/deftdevs/bootstrapi/commons/service/DefaultApplicationLinkServiceTest.java @@ -17,12 +17,12 @@ import com.atlassian.applinks.spi.link.MutatingApplicationLinkService; import com.atlassian.applinks.spi.util.TypeAccessor; import com.deftdevs.bootstrapi.commons.exception.web.BadRequestException; -import com.deftdevs.bootstrapi.commons.types.DefaultApplicationLink; -import com.deftdevs.bootstrapi.commons.types.DefaultApplicationType; import com.deftdevs.bootstrapi.commons.helper.api.ApplicationLinksAuthConfigHelper; import com.deftdevs.bootstrapi.commons.model.ApplicationLinkModel; import com.deftdevs.bootstrapi.commons.model.ApplicationLinkModel.ApplicationLinkType; import com.deftdevs.bootstrapi.commons.model.util.ApplicationLinkModelUtil; +import com.deftdevs.bootstrapi.commons.types.DefaultApplicationLink; +import com.deftdevs.bootstrapi.commons.types.DefaultApplicationType; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -33,7 +33,7 @@ import java.net.URI; import java.net.URISyntaxException; import java.util.Collections; -import java.util.List; +import java.util.Map; import java.util.UUID; import static com.atlassian.applinks.internal.common.status.oauth.OAuthConfig.createDefaultOAuthConfig; @@ -42,9 +42,16 @@ import static com.deftdevs.bootstrapi.commons.model.ApplicationLinkModel.ApplicationLinkStatus.AVAILABLE; import static com.deftdevs.bootstrapi.commons.model.ApplicationLinkModel.ApplicationLinkStatus.CONFIGURATION_ERROR; import static com.deftdevs.bootstrapi.commons.model.ApplicationLinkModel.ApplicationLinkType.CROWD; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.anyBoolean; +import static org.mockito.Mockito.doNothing; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; @ExtendWith(MockitoExtension.class) class DefaultApplicationLinkServiceTest { @@ -76,12 +83,12 @@ void testGetApplicationLinks() throws URISyntaxException, NoAccessException, NoS doReturn(OAuthConfig.createDefaultOAuthConfig()).when(applicationLinksAuthConfigHelper).getIncomingOAuthConfig(any()); doReturn(createApplinkStatus(applicationLink, AVAILABLE)).when(applinkStatusService).getApplinkStatus(any()); - final List applicationLinkModels = applicationLinkService.getApplicationLinks(); + final Map applicationLinkModels = applicationLinkService.getApplicationLinks(); final ApplicationLinkModel applicationLinkModel = ApplicationLinkModelUtil.toApplicationLinkModel(applicationLink); applicationLinkModel.setOutgoingAuthType(ApplicationLinkModel.ApplicationLinkAuthType.OAUTH); applicationLinkModel.setIncomingAuthType(ApplicationLinkModel.ApplicationLinkAuthType.OAUTH); applicationLinkModel.setStatus(AVAILABLE); - assertEquals(applicationLinkModels.iterator().next(), applicationLinkModel); + assertEquals(applicationLinkModels.values().iterator().next(), applicationLinkModel); } @Test @@ -107,7 +114,7 @@ void testSetApplicationLinks() final ApplicationLink applicationLink = createApplicationLink(); final ApplicationLinkModel applicationLinkModel = createApplicationLinkModel(); - final List applicationLinkModels = Collections.singletonList(createApplicationLinkModel()); + final Map applicationLinkModels = Collections.singletonMap(applicationLinkModel.getName(), applicationLinkModel); doReturn(Collections.singletonList(applicationLink)).when(mutatingApplicationLinkService).getApplicationLinks(); doReturn(applicationLink).when(mutatingApplicationLinkService).getApplicationLink(any()); doReturn(applicationLink).when(mutatingApplicationLinkService).addApplicationLink(any(), any(), any()); @@ -116,8 +123,8 @@ void testSetApplicationLinks() doReturn(OAuthConfig.createDisabledConfig()).when(applicationLinksAuthConfigHelper).getIncomingOAuthConfig(any()); doReturn(createApplinkStatus(applicationLink, AVAILABLE)).when(applinkStatusService).getApplinkStatus(any()); - final List responseApplicationLinkModels = applicationLinkService.setApplicationLinks(applicationLinkModels, true); - assertEquals(responseApplicationLinkModels.iterator().next().getName(), applicationLinkModel.getName()); + final Map responseApplicationLinkModels = applicationLinkService.setApplicationLinks(applicationLinkModels); + assertEquals(responseApplicationLinkModels.values().iterator().next().getName(), applicationLinkModel.getName()); } @Test @@ -126,7 +133,6 @@ void testSetApplicationLink() ApplicationLink applicationLink = createApplicationLink(); ApplicationLinkModel applicationLinkModel = createApplicationLinkModel(); - doReturn(applicationLink).when(mutatingApplicationLinkService).getApplicationLink(any()); doReturn(applicationLink).when(mutatingApplicationLinkService).addApplicationLink(any(), any(), any()); doReturn(new DefaultApplicationType()).when(typeAccessor).getApplicationType(any()); @@ -134,8 +140,7 @@ void testSetApplicationLink() doReturn(OAuthConfig.createDisabledConfig()).when(applicationLinksAuthConfigHelper).getIncomingOAuthConfig(any()); doReturn(createApplinkStatus(applicationLink, AVAILABLE)).when(applinkStatusService).getApplinkStatus(any()); - ApplicationLinkModel applicationLinkResponse = applicationLinkService.setApplicationLink(UUID.randomUUID(), applicationLinkModel, true); - + ApplicationLinkModel applicationLinkResponse = applicationLinkService.setApplicationLink(UUID.randomUUID(), applicationLinkModel); assertEquals(applicationLinkModel.getName(), applicationLinkResponse.getName()); } @@ -156,7 +161,7 @@ void testSetApplicationLinkUpdate() doNothing().when(spyApplicationLinkService).setOutgoingOAuthConfig(any(), any()); doNothing().when(spyApplicationLinkService).setIncomingOAuthConfig(any(), any(), anyBoolean()); - final ApplicationLinkModel applicationLinkResponse = spyApplicationLinkService.setApplicationLink(UUID.randomUUID(), applicationLinkModel, true); + final ApplicationLinkModel applicationLinkResponse = spyApplicationLinkService.setApplicationLink(UUID.randomUUID(), applicationLinkModel); assertEquals(applicationLinkModel.getName(), applicationLinkResponse.getName()); } @@ -173,7 +178,7 @@ void testAddApplicationLinkWithoutExistingTargetLink() throws Exception { doReturn(OAuthConfig.createDisabledConfig()).when(applicationLinksAuthConfigHelper).getIncomingOAuthConfig(any()); doReturn(createApplinkStatus(applicationLink, AVAILABLE)).when(applinkStatusService).getApplinkStatus(any()); - ApplicationLinkModel applicationLinkResponse = applicationLinkService.addApplicationLink(applicationLinkModel, true); + ApplicationLinkModel applicationLinkResponse = applicationLinkService.addApplicationLink(applicationLinkModel); assertEquals(applicationLinkResponse.getName(), applicationLinkModel.getName()); assertNotEquals(applicationLinkResponse, applicationLinkModel); @@ -192,7 +197,7 @@ void testAddApplicationLinkWithExistingTargetLink() throws Exception { doReturn(OAuthConfig.createDisabledConfig()).when(applicationLinksAuthConfigHelper).getIncomingOAuthConfig(any()); doReturn(createApplinkStatus(applicationLink, AVAILABLE)).when(applinkStatusService).getApplinkStatus(any()); - ApplicationLinkModel applicationLinkResponse = applicationLinkService.addApplicationLink(applicationLinkModel, true); + ApplicationLinkModel applicationLinkResponse = applicationLinkService.addApplicationLink(applicationLinkModel); assertEquals(applicationLinkResponse.getName(), applicationLinkModel.getName()); assertNotEquals(applicationLinkResponse, applicationLinkModel); @@ -211,7 +216,7 @@ void testAddApplicationLinkWithAuthenticatorErrorIgnored() throws Exception { doThrow(new AuthenticationConfigurationException("")).when(mutatingApplicationLinkService).configureAuthenticationForApplicationLink(any(), any(), any(), any()); doReturn(createApplinkStatus(applicationLink, CONFIGURATION_ERROR)).when(applinkStatusService).getApplinkStatus(any()); - ApplicationLinkModel applicationLinkResponse = applicationLinkService.addApplicationLink(applicationLinkModel, true); + ApplicationLinkModel applicationLinkResponse = applicationLinkService.addApplicationLink(applicationLinkModel); assertEquals(applicationLinkResponse.getName(), applicationLinkModel.getName()); assertNotEquals(applicationLinkResponse, applicationLinkModel); @@ -230,7 +235,7 @@ void testAddApplicationLinkWithAuthenticatorErrorNOTIgnored() throws Exception { doThrow(new AuthenticationConfigurationException("")).when(mutatingApplicationLinkService).configureAuthenticationForApplicationLink(any(), any(), any(), any()); Exception exception = assertThrows(BadRequestException.class, () -> { - applicationLinkService.addApplicationLink(applicationLinkModel, false); + applicationLinkService.addApplicationLink(applicationLinkModel); }); } @@ -248,7 +253,7 @@ void testApplicationLinkTypeConverter() throws Exception { doReturn(OAuthConfig.createDisabledConfig()).when(applicationLinksAuthConfigHelper).getIncomingOAuthConfig(any()); doReturn(createApplinkStatus(applicationLink, AVAILABLE)).when(applinkStatusService).getApplinkStatus(any()); - ApplicationLinkModel applicationLinkResponse = applicationLinkService.addApplicationLink(applicationLinkModel, true); + ApplicationLinkModel applicationLinkResponse = applicationLinkService.addApplicationLink(applicationLinkModel); assertEquals(applicationLinkResponse.getName(), applicationLinkModel.getName()); } diff --git a/confluence/Apis/ApplicationLinkApi.md b/confluence/Apis/ApplicationLinkApi.md index 4a4c32f5..7e4dae40 100644 --- a/confluence/Apis/ApplicationLinkApi.md +++ b/confluence/Apis/ApplicationLinkApi.md @@ -12,7 +12,7 @@ All URIs are relative to *https://<CONFLUENCE_URL>/rest/bootstrapi/1* # **createApplicationLink** -> ApplicationLinkModel createApplicationLink(ignore-setup-errors, ApplicationLinkModel) +> ApplicationLinkModel createApplicationLink(ApplicationLinkModel) Create an application link @@ -20,7 +20,6 @@ Create an application link |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **ignore-setup-errors** | **Boolean**| | [optional] [default to false] | | **ApplicationLinkModel** | [**ApplicationLinkModel**](../Models/ApplicationLinkModel.md)| | [optional] | ### Return type @@ -90,7 +89,7 @@ Get an application link # **updateApplicationLink** -> ApplicationLinkModel updateApplicationLink(uuid, ignore-setup-errors, ApplicationLinkModel) +> ApplicationLinkModel updateApplicationLink(uuid, ApplicationLinkModel) Update an application link @@ -99,7 +98,6 @@ Update an application link |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| | **uuid** | **UUID**| | [default to null] | -| **ignore-setup-errors** | **Boolean**| | [optional] [default to false] | | **ApplicationLinkModel** | [**ApplicationLinkModel**](../Models/ApplicationLinkModel.md)| | [optional] | ### Return type diff --git a/confluence/Apis/ApplicationLinksApi.md b/confluence/Apis/ApplicationLinksApi.md index f00c798e..5695a4a5 100644 --- a/confluence/Apis/ApplicationLinksApi.md +++ b/confluence/Apis/ApplicationLinksApi.md @@ -60,7 +60,7 @@ This endpoint does not need any parameter. # **setApplicationLinks** -> List setApplicationLinks(ignore-setup-errors, ApplicationLinkModel) +> List setApplicationLinks(request\_body) Set a list of application links @@ -70,8 +70,7 @@ Set a list of application links |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **ignore-setup-errors** | **Boolean**| | [optional] [default to false] | -| **ApplicationLinkModel** | [**List**](../Models/ApplicationLinkModel.md)| | [optional] | +| **request\_body** | [**Map**](../Models/ApplicationLinkModel.md)| | [optional] | ### Return type diff --git a/confluence/Apis/AuthenticationApi.md b/confluence/Apis/AuthenticationApi.md index 06bef1d5..2a7dfaa8 100644 --- a/confluence/Apis/AuthenticationApi.md +++ b/confluence/Apis/AuthenticationApi.md @@ -56,7 +56,7 @@ This endpoint does not need any parameter. # **setAuthenticationIdps** -> List setAuthenticationIdps(AbstractAuthenticationIdpModel) +> List setAuthenticationIdps(request\_body) Set all authentication identity providers @@ -64,7 +64,7 @@ Set all authentication identity providers |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **AbstractAuthenticationIdpModel** | [**List**](../Models/AbstractAuthenticationIdpModel.md)| | [optional] | +| **request\_body** | [**Map**](../Models/AbstractAuthenticationIdpModel.md)| | [optional] | ### Return type diff --git a/confluence/Apis/DirectoriesApi.md b/confluence/Apis/DirectoriesApi.md index 0b298c06..e1595a51 100644 --- a/confluence/Apis/DirectoriesApi.md +++ b/confluence/Apis/DirectoriesApi.md @@ -6,7 +6,7 @@ All URIs are relative to *https://<CONFLUENCE_URL>/rest/bootstrapi/1* |------------- | ------------- | -------------| | [**deleteDirectories**](DirectoriesApi.md#deleteDirectories) | **DELETE** /directories | Delete all user directories | | [**getDirectories**](DirectoriesApi.md#getDirectories) | **GET** /directories | Get all user directories | -| [**setDirectories**](DirectoriesApi.md#setDirectories) | **PUT** /directories | Set a list of user directories | +| [**setDirectories**](DirectoriesApi.md#setDirectories) | **PUT** /directories | Set directories mapped by their name. | @@ -38,7 +38,7 @@ null (empty response body) # **getDirectories** -> List getDirectories() +> Map getDirectories() Get all user directories @@ -47,7 +47,7 @@ This endpoint does not need any parameter. ### Return type -[**List**](../Models/AbstractDirectoryModel.md) +[**Map**](../Models/AbstractDirectoryModel.md) ### Authorization @@ -60,9 +60,9 @@ This endpoint does not need any parameter. # **setDirectories** -> List setDirectories(test-connection, AbstractDirectoryModel) +> Map setDirectories(request\_body) -Set a list of user directories +Set directories mapped by their name. NOTE: All existing directories with the same 'name' attribute are updated. @@ -70,12 +70,11 @@ Set a list of user directories |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **test-connection** | **Boolean**| | [optional] [default to false] | -| **AbstractDirectoryModel** | [**List**](../Models/AbstractDirectoryModel.md)| | [optional] | +| **request\_body** | [**Map**](../Models/AbstractDirectoryModel.md)| | [optional] | ### Return type -[**List**](../Models/AbstractDirectoryModel.md) +[**Map**](../Models/AbstractDirectoryModel.md) ### Authorization diff --git a/confluence/Apis/DirectoryApi.md b/confluence/Apis/DirectoryApi.md index 714efa72..cecb78fb 100644 --- a/confluence/Apis/DirectoryApi.md +++ b/confluence/Apis/DirectoryApi.md @@ -12,7 +12,7 @@ All URIs are relative to *https://<CONFLUENCE_URL>/rest/bootstrapi/1* # **createDirectory** -> AbstractDirectoryModel createDirectory(test-connection, AbstractDirectoryModel) +> AbstractDirectoryModel createDirectory(AbstractDirectoryModel) Create a user directory @@ -20,7 +20,6 @@ Create a user directory |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **test-connection** | **Boolean**| | [optional] [default to false] | | **AbstractDirectoryModel** | [**AbstractDirectoryModel**](../Models/AbstractDirectoryModel.md)| | [optional] | ### Return type @@ -88,7 +87,7 @@ Get a user directory # **updateDirectory** -> AbstractDirectoryModel updateDirectory(id, test-connection, AbstractDirectoryModel) +> AbstractDirectoryModel updateDirectory(id, AbstractDirectoryModel) Update a user directory @@ -97,7 +96,6 @@ Update a user directory |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| | **id** | **Long**| | [default to null] | -| **test-connection** | **Boolean**| | [optional] [default to false] | | **AbstractDirectoryModel** | [**AbstractDirectoryModel**](../Models/AbstractDirectoryModel.md)| | [optional] | ### Return type diff --git a/confluence/Models/AbstractDirectoryModel.md b/confluence/Models/AbstractDirectoryModel.md index a025dbcf..5e9343cb 100644 --- a/confluence/Models/AbstractDirectoryModel.md +++ b/confluence/Models/AbstractDirectoryModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **connector** | [**DirectoryDelegatingConnector**](DirectoryDelegatingConnector.md) | | [optional] [default to null] | | **configuration** | [**DirectoryDelegatingConfiguration**](DirectoryDelegatingConfiguration.md) | | [optional] [default to null] | | **permissions** | [**DirectoryLdapPermissions**](DirectoryLdapPermissions.md) | | [optional] [default to null] | diff --git a/confluence/Models/ApplicationLinkModel.md b/confluence/Models/ApplicationLinkModel.md index a7c24655..485e73c8 100644 --- a/confluence/Models/ApplicationLinkModel.md +++ b/confluence/Models/ApplicationLinkModel.md @@ -4,14 +4,15 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **uuid** | **UUID** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | -| **type** | **String** | | [default to null] | -| **displayUrl** | **URI** | | [default to null] | -| **rpcUrl** | **URI** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | +| **type** | **String** | | [optional] [default to null] | +| **displayUrl** | **URI** | | [optional] [default to null] | +| **rpcUrl** | **URI** | | [optional] [default to null] | | **outgoingAuthType** | **String** | | [optional] [default to null] | | **incomingAuthType** | **String** | | [optional] [default to null] | | **primary** | **Boolean** | | [optional] [default to null] | | **status** | **String** | | [optional] [default to null] | +| **ignoreSetupErrors** | **Boolean** | | [optional] [default to null] | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/confluence/Models/DirectoryCrowdModel.md b/confluence/Models/DirectoryCrowdModel.md index e1dad078..a60141f5 100644 --- a/confluence/Models/DirectoryCrowdModel.md +++ b/confluence/Models/DirectoryCrowdModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **server** | [**DirectoryCrowdServer**](DirectoryCrowdServer.md) | | [optional] [default to null] | | **permissions** | [**DirectoryCrowdPermissions**](DirectoryCrowdPermissions.md) | | [optional] [default to null] | | **advanced** | [**DirectoryCrowdAdvanced**](DirectoryCrowdAdvanced.md) | | [optional] [default to null] | diff --git a/confluence/Models/DirectoryDelegatingModel.md b/confluence/Models/DirectoryDelegatingModel.md index 2d564d80..37b919ae 100644 --- a/confluence/Models/DirectoryDelegatingModel.md +++ b/confluence/Models/DirectoryDelegatingModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **server** | [**DirectoryLdapServer**](DirectoryLdapServer.md) | | [optional] [default to null] | | **permissions** | [**DirectoryPermissions**](DirectoryPermissions.md) | | [optional] [default to null] | | **advanced** | [**DirectoryInternalAdvanced**](DirectoryInternalAdvanced.md) | | [optional] [default to null] | diff --git a/confluence/Models/DirectoryGenericModel.md b/confluence/Models/DirectoryGenericModel.md index cecdeb75..42a62869 100644 --- a/confluence/Models/DirectoryGenericModel.md +++ b/confluence/Models/DirectoryGenericModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **server** | [**DirectoryLdapServer**](DirectoryLdapServer.md) | | [optional] [default to null] | | **permissions** | [**DirectoryLdapPermissions**](DirectoryLdapPermissions.md) | | [optional] [default to null] | | **advanced** | [**DirectoryInternalAdvanced**](DirectoryInternalAdvanced.md) | | [optional] [default to null] | diff --git a/confluence/Models/DirectoryInternalModel.md b/confluence/Models/DirectoryInternalModel.md index 0b983484..bf66d0d5 100644 --- a/confluence/Models/DirectoryInternalModel.md +++ b/confluence/Models/DirectoryInternalModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **server** | [**DirectoryLdapServer**](DirectoryLdapServer.md) | | [optional] [default to null] | | **permissions** | [**DirectoryPermissions**](DirectoryPermissions.md) | | [optional] [default to null] | | **advanced** | [**DirectoryInternalAdvanced**](DirectoryInternalAdvanced.md) | | [optional] [default to null] | diff --git a/confluence/Models/DirectoryLdapModel.md b/confluence/Models/DirectoryLdapModel.md index 3cbf6175..818bfcf9 100644 --- a/confluence/Models/DirectoryLdapModel.md +++ b/confluence/Models/DirectoryLdapModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **server** | [**DirectoryLdapServer**](DirectoryLdapServer.md) | | [optional] [default to null] | | **permissions** | [**DirectoryLdapPermissions**](DirectoryLdapPermissions.md) | | [optional] [default to null] | | **advanced** | [**DirectoryInternalAdvanced**](DirectoryInternalAdvanced.md) | | [optional] [default to null] | diff --git a/confluence/README.md b/confluence/README.md index 97e3a5dd..cc250f9f 100644 --- a/confluence/README.md +++ b/confluence/README.md @@ -24,7 +24,7 @@ All URIs are relative to *https:///rest/bootstrapi/1* *CachesApi* | [**updateCache**](Apis/CachesApi.md#updatecache) | **PUT** /caches/{name} | Update an existing cache-size. Only Setting maxObjectCount is supported. | | *DirectoriesApi* | [**deleteDirectories**](Apis/DirectoriesApi.md#deletedirectories) | **DELETE** /directories | Delete all user directories | *DirectoriesApi* | [**getDirectories**](Apis/DirectoriesApi.md#getdirectories) | **GET** /directories | Get all user directories | -*DirectoriesApi* | [**setDirectories**](Apis/DirectoriesApi.md#setdirectories) | **PUT** /directories | Set a list of user directories | +*DirectoriesApi* | [**setDirectories**](Apis/DirectoriesApi.md#setdirectories) | **PUT** /directories | Set directories mapped by their name. | | *DirectoryApi* | [**createDirectory**](Apis/DirectoryApi.md#createdirectory) | **POST** /directory | Create a user directory | *DirectoryApi* | [**deleteDirectory**](Apis/DirectoryApi.md#deletedirectory) | **DELETE** /directory/{id} | Delete a user directory | *DirectoryApi* | [**getDirectory**](Apis/DirectoryApi.md#getdirectory) | **GET** /directory/{id} | Get a user directory | diff --git a/confluence/src/main/java/com/deftdevs/bootstrapi/confluence/config/ServiceConfig.java b/confluence/src/main/java/com/deftdevs/bootstrapi/confluence/config/ServiceConfig.java index 547268fa..d0f39f51 100644 --- a/confluence/src/main/java/com/deftdevs/bootstrapi/confluence/config/ServiceConfig.java +++ b/confluence/src/main/java/com/deftdevs/bootstrapi/confluence/config/ServiceConfig.java @@ -48,7 +48,7 @@ public ConfluenceSettingsService confluenceSettingsService() { @Bean public DirectoriesService directoriesService() { - return new DirectoryServiceImpl( + return new DirectoriesServiceImpl( atlassianConfig.crowdDirectoryService()); } diff --git a/confluence/src/main/java/com/deftdevs/bootstrapi/confluence/service/AuthenticationServiceImpl.java b/confluence/src/main/java/com/deftdevs/bootstrapi/confluence/service/AuthenticationServiceImpl.java index 4c7ef24a..470a4909 100644 --- a/confluence/src/main/java/com/deftdevs/bootstrapi/confluence/service/AuthenticationServiceImpl.java +++ b/confluence/src/main/java/com/deftdevs/bootstrapi/confluence/service/AuthenticationServiceImpl.java @@ -11,8 +11,6 @@ import com.deftdevs.bootstrapi.confluence.model.util.AuthenticationSsoModelUtil; import com.deftdevs.bootstrapi.confluence.service.api.ConfluenceAuthenticationService; -import java.util.Comparator; -import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; @@ -32,21 +30,19 @@ public AuthenticationServiceImpl( } @Override - public List getAuthenticationIdps() { + public Map getAuthenticationIdps() { return idpConfigService.getIdpConfigs().stream() .map(AuthenticationIdpModelUtil::toAuthenticationIdpModel) - .sorted(authenticationIdpModelComparator) - .collect(Collectors.toList()); + .collect(Collectors.toMap(AbstractAuthenticationIdpModel::getName, Function.identity())); } @Override - public List setAuthenticationIdps( - final List authenticationIdpModels) { + public Map setAuthenticationIdps( + final Map authenticationIdpModels) { - return authenticationIdpModels.stream() + return authenticationIdpModels.values().stream() .map(this::setAuthenticationIdp) - .sorted(authenticationIdpModelComparator) - .collect(Collectors.toList()); + .collect(Collectors.toMap(AbstractAuthenticationIdpModel::getName, Function.identity())); } public AbstractAuthenticationIdpModel setAuthenticationIdp( @@ -93,6 +89,4 @@ IdpConfig findIdpConfigByName( return idpConfigsByName.get(name); } - static Comparator authenticationIdpModelComparator = (a1, a2) -> a1.getName().compareToIgnoreCase(a2.getName()); - } diff --git a/confluence/src/main/java/com/deftdevs/bootstrapi/confluence/service/DirectoryServiceImpl.java b/confluence/src/main/java/com/deftdevs/bootstrapi/confluence/service/DirectoriesServiceImpl.java similarity index 64% rename from confluence/src/main/java/com/deftdevs/bootstrapi/confluence/service/DirectoryServiceImpl.java rename to confluence/src/main/java/com/deftdevs/bootstrapi/confluence/service/DirectoriesServiceImpl.java index be20e498..df393b2a 100644 --- a/confluence/src/main/java/com/deftdevs/bootstrapi/confluence/service/DirectoryServiceImpl.java +++ b/confluence/src/main/java/com/deftdevs/bootstrapi/confluence/service/DirectoriesServiceImpl.java @@ -10,41 +10,36 @@ import com.deftdevs.bootstrapi.commons.exception.web.ServiceUnavailableException; import com.deftdevs.bootstrapi.commons.model.AbstractDirectoryModel; import com.deftdevs.bootstrapi.commons.model.DirectoryCrowdModel; -import com.deftdevs.bootstrapi.commons.service.api.DirectoriesService; +import com.deftdevs.bootstrapi.commons.service.AbstractDirectoriesService; import com.deftdevs.bootstrapi.confluence.model.util.DirectoryModelUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; import static java.lang.String.format; -public class DirectoryServiceImpl implements DirectoriesService { +public class DirectoriesServiceImpl extends AbstractDirectoriesService { - private static final Logger log = LoggerFactory.getLogger(DirectoryServiceImpl.class); + private static final Logger log = LoggerFactory.getLogger(DirectoriesServiceImpl.class); public static final int RETRY_AFTER_IN_SECONDS = 5; private final CrowdDirectoryService crowdDirectoryService; - public DirectoryServiceImpl( + public DirectoriesServiceImpl( final CrowdDirectoryService crowdDirectoryService) { this.crowdDirectoryService = crowdDirectoryService; } @Override - public List getDirectories() { - List beans = new ArrayList<>(); - for (Directory directory : crowdDirectoryService.findAllDirectories()) { - AbstractDirectoryModel crowdModel; - crowdModel = DirectoryModelUtil.toDirectoryModel(directory); - beans.add(crowdModel); - } - return beans; + public Map getDirectories() { + return crowdDirectoryService.findAllDirectories().stream() + .map(DirectoryModelUtil::toDirectoryModel) + .collect(Collectors.toMap(AbstractDirectoryModel::getName, Function.identity())); } @Override @@ -53,48 +48,24 @@ public AbstractDirectoryModel getDirectory(long id) { return DirectoryModelUtil.toDirectoryModel(directory); } - @Override - public List setDirectories(List directoryModels, boolean testConnection) { - - final Map existingDirectoriesByName = crowdDirectoryService.findAllDirectories().stream() - .collect(Collectors.toMap(Directory::getName, Function.identity())); - - directoryModels.forEach(directoryRequestModel -> { - if (directoryRequestModel instanceof DirectoryCrowdModel) { - DirectoryCrowdModel crowdRequestModel = (DirectoryCrowdModel) directoryRequestModel; - - if (existingDirectoriesByName.containsKey(crowdRequestModel.getName())) { - setDirectory(existingDirectoriesByName.get(crowdRequestModel.getName()).getId(), crowdRequestModel, testConnection); - } else { - addDirectory(crowdRequestModel, testConnection); - } - } else { - throw new BadRequestException(format("Updating directory type '%s' is not supported (yet)", directoryRequestModel.getClass())); - } - }); - return getDirectories(); - } - @Override public AbstractDirectoryModel setDirectory( - long id, - AbstractDirectoryModel abstractDirectoryModel, - boolean testConnection) { + final long id, + final AbstractDirectoryModel directoryModel) { - if (abstractDirectoryModel instanceof DirectoryCrowdModel) { - return setDirectoryCrowd(id, (DirectoryCrowdModel) abstractDirectoryModel, testConnection); + if (directoryModel instanceof DirectoryCrowdModel) { + return setDirectoryCrowd(id, (DirectoryCrowdModel) directoryModel); } else { - throw new BadRequestException(format("Setting directory type '%s' is not supported (yet)", abstractDirectoryModel.getClass())); + throw new BadRequestException(format("Setting directory type '%s' is not supported (yet)", directoryModel.getClass())); } } private AbstractDirectoryModel setDirectoryCrowd( long id, - DirectoryCrowdModel crowdModel, - boolean testConnection) { + DirectoryCrowdModel crowdModel) { Directory existingDirectory = findDirectory(id); - Directory directory = validateAndCreateDirectoryConfig(crowdModel, testConnection); + Directory directory = validateAndCreateDirectoryConfig(crowdModel); ImmutableDirectory.Builder directoryBuilder = ImmutableDirectory.newBuilder(existingDirectory); @@ -118,16 +89,15 @@ private AbstractDirectoryModel setDirectoryCrowd( @Override public AbstractDirectoryModel addDirectory( - AbstractDirectoryModel abstractDirectoryModel, - boolean testConnection) { + AbstractDirectoryModel directoryModel) { - if (abstractDirectoryModel instanceof DirectoryCrowdModel) { - DirectoryCrowdModel crowdModel = (DirectoryCrowdModel) abstractDirectoryModel; - Directory directory = validateAndCreateDirectoryConfig(crowdModel, testConnection); + if (directoryModel instanceof DirectoryCrowdModel) { + DirectoryCrowdModel crowdModel = (DirectoryCrowdModel) directoryModel; + Directory directory = validateAndCreateDirectoryConfig(crowdModel); Directory addedDirectory = crowdDirectoryService.addDirectory(directory); return DirectoryModelUtil.toDirectoryModel(addedDirectory); } else { - throw new BadRequestException(format("Adding directory type '%s' is not supported (yet)", abstractDirectoryModel.getClass())); + throw new BadRequestException(format("Adding directory type '%s' is not supported (yet)", directoryModel.getClass())); } } @@ -160,6 +130,11 @@ public void deleteDirectory(long id) { } } + @Override + protected Set> getSupportedClassesForUpdate() { + return Set.of(DirectoryCrowdModel.class); + } + private Directory findDirectory(long id) { Directory directory = crowdDirectoryService.findDirectoryById(id); if (directory == null) { @@ -168,14 +143,13 @@ private Directory findDirectory(long id) { return directory; } - private Directory validateAndCreateDirectoryConfig(DirectoryCrowdModel crowdModel, boolean testConnection) { + private Directory validateAndCreateDirectoryConfig(DirectoryCrowdModel crowdModel) { Directory directory = DirectoryModelUtil.toDirectory(crowdModel); String directoryName = crowdModel.getName(); - if (testConnection) { + if (Boolean.TRUE.equals(crowdModel.getTestConnection())) { log.debug("testing user directory connection for {}", directoryName); crowdDirectoryService.testConnection(directory); } return directory; } - } diff --git a/confluence/src/main/java/com/deftdevs/bootstrapi/confluence/service/UsersServiceImpl.java b/confluence/src/main/java/com/deftdevs/bootstrapi/confluence/service/UsersServiceImpl.java index 041db01d..8e448020 100644 --- a/confluence/src/main/java/com/deftdevs/bootstrapi/confluence/service/UsersServiceImpl.java +++ b/confluence/src/main/java/com/deftdevs/bootstrapi/confluence/service/UsersServiceImpl.java @@ -13,6 +13,7 @@ import com.deftdevs.bootstrapi.confluence.model.util.UserModelUtil; import java.util.List; +import java.util.Map; import static com.deftdevs.bootstrapi.commons.util.ModelValidationUtil.validate; @@ -104,6 +105,11 @@ public List setUsers( throw new UnsupportedOperationException(); } + @Override + public Map setUsers(long directoryId, Map userModels) { + return Map.of(); + } + @Override public UserModel updatePassword( final String username, diff --git a/confluence/src/test/java/com/deftdevs/bootstrapi/confluence/service/AuthenticationServiceTest.java b/confluence/src/test/java/com/deftdevs/bootstrapi/confluence/service/AuthenticationServiceTest.java index ea0b38f2..504d584e 100644 --- a/confluence/src/test/java/com/deftdevs/bootstrapi/confluence/service/AuthenticationServiceTest.java +++ b/confluence/src/test/java/com/deftdevs/bootstrapi/confluence/service/AuthenticationServiceTest.java @@ -1,6 +1,10 @@ package com.deftdevs.bootstrapi.confluence.service; -import com.atlassian.plugins.authentication.api.config.*; +import com.atlassian.plugins.authentication.api.config.IdpConfig; +import com.atlassian.plugins.authentication.api.config.IdpConfigService; +import com.atlassian.plugins.authentication.api.config.ImmutableSsoConfig; +import com.atlassian.plugins.authentication.api.config.SsoConfig; +import com.atlassian.plugins.authentication.api.config.SsoConfigService; import com.atlassian.plugins.authentication.api.config.oidc.OidcConfig; import com.atlassian.plugins.authentication.api.config.saml.SamlConfig; import com.deftdevs.bootstrapi.commons.exception.web.BadRequestException; @@ -14,14 +18,20 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; +import java.util.Map; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; @ExtendWith(MockitoExtension.class) class AuthenticationServiceTest { @@ -45,10 +55,8 @@ void testGetAuthenticationIdps() { final SamlConfig samlConfig = SamlConfig.builder().setName("saml").build(); doReturn(Arrays.asList(oidcConfig, samlConfig)).when(idpConfigService).getIdpConfigs(); - final List authenticationIdpModels = authenticationService.getAuthenticationIdps(); - final List names = authenticationIdpModels.stream() - .map(AbstractAuthenticationIdpModel::getName) - .collect(Collectors.toList()); + final Map authenticationIdpModels = authenticationService.getAuthenticationIdps(); + final List names = new ArrayList<>(authenticationIdpModels.keySet()); assertTrue(names.contains(oidcConfig.getName())); assertTrue(names.contains(samlConfig.getName())); } @@ -56,33 +64,40 @@ void testGetAuthenticationIdps() { @Test void testSetAuthenticationIdpsWithCreate() { final AuthenticationIdpOidcModel authenticationIdpOidcModel = AuthenticationIdpOidcModel.EXAMPLE_1; - final List authenticationIdpModels = Collections.singletonList(authenticationIdpOidcModel); + final Map authenticationIdpModels = Collections.singletonMap( + authenticationIdpOidcModel.getName(), authenticationIdpOidcModel); doAnswer(invocation -> invocation.getArgument(0)).when(idpConfigService).addIdpConfig(any()); - final List resultAuthenticationIdpModels = authenticationService.setAuthenticationIdps(authenticationIdpModels); + final Map resultAuthenticationIdpModels = authenticationService.setAuthenticationIdps(authenticationIdpModels); verify(idpConfigService, times(1)).addIdpConfig(any()); - assertEquals(authenticationIdpOidcModel.getId(), resultAuthenticationIdpModels.iterator().next().getId()); - assertEquals(authenticationIdpOidcModel.getName(), resultAuthenticationIdpModels.iterator().next().getName()); + + final AbstractAuthenticationIdpModel resultAuthenticationIdpModel = resultAuthenticationIdpModels.values().iterator().next(); + assertEquals(authenticationIdpOidcModel.getId(), resultAuthenticationIdpModel.getId()); + assertEquals(authenticationIdpOidcModel.getName(), resultAuthenticationIdpModel.getName()); } @Test void testSetAuthenticationIdpsWithUpdate() { final AuthenticationIdpOidcModel authenticationIdpOidcModel = AuthenticationIdpOidcModel.EXAMPLE_1; - final List authenticationIdpModels = Collections.singletonList(authenticationIdpOidcModel); + final Map authenticationIdpModels = Collections.singletonMap( + authenticationIdpOidcModel.getName(), authenticationIdpOidcModel); final IdpConfig idpConfig = AuthenticationIdpModelUtil.toIdpConfig(authenticationIdpOidcModel); doReturn(Collections.singletonList(idpConfig)).when(idpConfigService).getIdpConfigs(); doAnswer(invocation -> invocation.getArgument(0)).when(idpConfigService).updateIdpConfig(any()); - final List resultAuthenticationIdpModels = authenticationService.setAuthenticationIdps(authenticationIdpModels); + final Map resultAuthenticationIdpModels = authenticationService.setAuthenticationIdps(authenticationIdpModels); verify(idpConfigService, times(1)).updateIdpConfig(any()); - assertEquals(authenticationIdpOidcModel.getId(), resultAuthenticationIdpModels.iterator().next().getId()); - assertEquals(authenticationIdpOidcModel.getName(), resultAuthenticationIdpModels.iterator().next().getName()); + + final AbstractAuthenticationIdpModel resultAuthenticationIdpModel = resultAuthenticationIdpModels.values().iterator().next(); + assertEquals(authenticationIdpOidcModel.getId(), resultAuthenticationIdpModel.getId()); + assertEquals(authenticationIdpOidcModel.getName(), resultAuthenticationIdpModel.getName()); } @Test void testSetAuthenticationIdpsNameNull() { final AuthenticationIdpOidcModel authenticationIdpOidcModel = new AuthenticationIdpOidcModel(); - final List authenticationIdpModels = Collections.singletonList(authenticationIdpOidcModel); + final Map authenticationIdpModels = Collections.singletonMap( + authenticationIdpOidcModel.getName(), authenticationIdpOidcModel); assertThrows(BadRequestException.class, () -> { authenticationService.setAuthenticationIdps(authenticationIdpModels); @@ -93,7 +108,8 @@ void testSetAuthenticationIdpsNameNull() { void testSetAuthenticationIdpsNameEmpty() { final AuthenticationIdpOidcModel authenticationIdpOidcModel = new AuthenticationIdpOidcModel(); authenticationIdpOidcModel.setName(""); - final List authenticationIdpModels = Collections.singletonList(authenticationIdpOidcModel); + final Map authenticationIdpModels = Collections.singletonMap( + authenticationIdpOidcModel.getName(), authenticationIdpOidcModel); assertThrows(BadRequestException.class, () -> { authenticationService.setAuthenticationIdps(authenticationIdpModels); diff --git a/confluence/src/test/java/com/deftdevs/bootstrapi/confluence/service/DirectoryServiceTest.java b/confluence/src/test/java/com/deftdevs/bootstrapi/confluence/service/DirectoryServiceTest.java index 68a37a2b..4823f44b 100644 --- a/confluence/src/test/java/com/deftdevs/bootstrapi/confluence/service/DirectoryServiceTest.java +++ b/confluence/src/test/java/com/deftdevs/bootstrapi/confluence/service/DirectoryServiceTest.java @@ -36,11 +36,11 @@ class DirectoryServiceTest { @Mock private CrowdDirectoryService crowdDirectoryService; - private DirectoryServiceImpl directoryService; + private DirectoriesServiceImpl directoryService; @BeforeEach public void setup() { - directoryService = new DirectoryServiceImpl(crowdDirectoryService); + directoryService = new DirectoriesServiceImpl(crowdDirectoryService); } @Test @@ -48,8 +48,8 @@ void testGetDirectories() { final Directory directory = createDirectory(); doReturn(Collections.singletonList(directory)).when(crowdDirectoryService).findAllDirectories(); - final List directories = directoryService.getDirectories(); - assertEquals(directories.iterator().next(), DirectoryModelUtil.toDirectoryModel(directory)); + final Map directories = directoryService.getDirectories(); + assertEquals(directories.values().iterator().next(), DirectoryModelUtil.toDirectoryModel(directory)); } @Test @@ -68,7 +68,6 @@ void testGetDirectory() { doReturn(directory).when(crowdDirectoryService).findDirectoryById(1L); AbstractDirectoryModel directoryModel = directoryService.getDirectory(1L); - assertEquals(DirectoryModelUtil.toDirectoryModel(directory), directoryModel); } @@ -82,13 +81,12 @@ void testGetDirectoryNotExisting() { @Test void testSetDirectoriesWithoutExistingDirectory() { Directory directory = createDirectory(); - doReturn(directory).when(crowdDirectoryService).addDirectory(any()); doReturn(Collections.emptyList()).when(crowdDirectoryService).findAllDirectories(); DirectoryCrowdModel directoryModel = (DirectoryCrowdModel) DirectoryModelUtil.toDirectoryModel(directory); directoryModel.getServer().setAppPassword("test"); - directoryService.setDirectories(Collections.singletonList(directoryModel), false); + directoryService.setDirectories(Collections.singletonMap(directoryModel.getName(), directoryModel)); } @Test @@ -100,8 +98,8 @@ void testSetDirectoriesWithExistingDirectory() { final DirectoryCrowdModel directoryModel = (DirectoryCrowdModel) DirectoryModelUtil.toDirectoryModel(directory); directoryModel.getServer().setAppPassword("test"); - final List directoryAdded = directoryService.setDirectories(Collections.singletonList(directoryModel), false); - assertEquals(directoryAdded.iterator().next().getName(), directoryModel.getName()); + final Map directoryAdded = directoryService.setDirectories(Collections.singletonMap(directoryModel.getName(), directoryModel)); + assertEquals(directoryAdded.values().iterator().next().getName(), directoryModel.getName()); } @Test @@ -113,38 +111,33 @@ void testSetDirectoriesWithConnectionTest() { final DirectoryCrowdModel directoryModel = (DirectoryCrowdModel) DirectoryModelUtil.toDirectoryModel(directory); directoryModel.getServer().setAppPassword("test"); - List directoryAdded = directoryService.setDirectories(Collections.singletonList(directoryModel), true); - assertEquals(directoryAdded.iterator().next().getName(), directoryModel.getName()); + Map directoryAdded = directoryService.setDirectories(Collections.singletonMap(directoryModel.getName(), directoryModel)); + assertEquals(directoryAdded.values().iterator().next().getName(), directoryModel.getName()); } @Test void testSetDirectoryWithConnectionTest() { Directory directory = createDirectory(); - doReturn(directory).when(crowdDirectoryService).findDirectoryById(1L); doReturn(directory).when(crowdDirectoryService).updateDirectory(any()); DirectoryCrowdModel directoryModel = (DirectoryCrowdModel) DirectoryModelUtil.toDirectoryModel(directory); directoryModel.getServer().setAppPassword("test"); - AbstractDirectoryModel directoryAdded = directoryService.setDirectory(1L, directoryModel, true); - + AbstractDirectoryModel directoryAdded = directoryService.setDirectory(1L, directoryModel); assertEquals(directoryModel.getName(), directoryAdded.getName()); } @Test void testSetDirectoryDefault() { Directory directory = createDirectory(); - doReturn(directory).when(crowdDirectoryService).findDirectoryById(1L); doReturn(directory).when(crowdDirectoryService).updateDirectory(any()); DirectoryCrowdModel directoryModel = (DirectoryCrowdModel) DirectoryModelUtil.toDirectoryModel(directory); directoryModel.setDescription(null); directoryModel.setName(null); - directoryModel.getServer().setAppPassword("test"); - AbstractDirectoryModel directoryAdded = directoryService.setDirectory(1L, directoryModel, true); - + AbstractDirectoryModel directoryAdded = directoryService.setDirectory(1L, directoryModel); assertEquals(directoryModel.getDescription(), directoryAdded.getDescription()); assertEquals(directory.getName(), directoryAdded.getName()); } @@ -154,7 +147,7 @@ void testSetDirectoryUnsupportedType() { final DirectoryLdapModel directoryLdapModel = new DirectoryLdapModel(); assertThrows(BadRequestException.class, () -> { - directoryService.setDirectory(1L, directoryLdapModel, false); + directoryService.setDirectory(1L, directoryLdapModel); }); } @@ -164,7 +157,7 @@ void testSetDirectoryNotExisting() { final AbstractDirectoryModel directoryModel = DirectoryModelUtil.toDirectoryModel(directory); assertThrows(NotFoundException.class, () -> { - directoryService.setDirectory(1L, directoryModel, false); + directoryService.setDirectory(1L, directoryModel); }); } @@ -177,7 +170,7 @@ void testAddDirectoryUriException() { DirectoryCrowdModel directoryModel = (DirectoryCrowdModel) DirectoryModelUtil.toDirectoryModel(directory); assertThrows(IllegalArgumentException.class, () -> { - directoryService.addDirectory(directoryModel, false); + directoryService.addDirectory(directoryModel); }); } @@ -188,8 +181,7 @@ void testAddDirectory() { DirectoryCrowdModel directoryModel = (DirectoryCrowdModel) DirectoryModelUtil.toDirectoryModel(directory); directoryModel.getServer().setAppPassword("test"); - - AbstractDirectoryModel directoryAdded = directoryService.addDirectory(directoryModel, false); + AbstractDirectoryModel directoryAdded = directoryService.addDirectory(directoryModel); assertEquals(directoryAdded.getName(), directoryModel.getName()); } @@ -198,7 +190,7 @@ void testAddDirectoryUnsupportedType() { final DirectoryLdapModel directoryLdapModel = new DirectoryLdapModel(); assertThrows(BadRequestException.class, () -> { - directoryService.addDirectory(directoryLdapModel, false); + directoryService.addDirectory(directoryLdapModel); }); } @@ -216,7 +208,6 @@ void testDeleteDirectories() throws DirectoryCurrentlySynchronisingException { doReturn(Collections.singletonList(directory)).when(crowdDirectoryService).findAllDirectories(); directoryService.deleteDirectories(true); - verify(crowdDirectoryService).removeDirectory(1L); } @@ -226,7 +217,6 @@ void testDeleteDirectoriesWithoutInternalDirectory() { doReturn(Collections.singletonList(directory)).when(crowdDirectoryService).findAllDirectories(); directoryService.deleteDirectories(true); - verify(crowdDirectoryService).findAllDirectories(); } diff --git a/confluence/src/test/java/com/deftdevs/bootstrapi/confluence/service/UserServiceTest.java b/confluence/src/test/java/com/deftdevs/bootstrapi/confluence/service/UserServiceTest.java index 680080e9..14ba9514 100644 --- a/confluence/src/test/java/com/deftdevs/bootstrapi/confluence/service/UserServiceTest.java +++ b/confluence/src/test/java/com/deftdevs/bootstrapi/confluence/service/UserServiceTest.java @@ -15,6 +15,8 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import java.util.List; + import static com.deftdevs.bootstrapi.confluence.model.util.UserModelUtil.toUser; import static com.deftdevs.bootstrapi.confluence.model.util.UserModelUtil.toUserModel; import static org.junit.jupiter.api.Assertions.*; @@ -139,7 +141,7 @@ void testSetUserByDirectoryIdNotImplemented() { @Test void testSetUsersByDirectoryIdNotImplemented() { assertThrows(UnsupportedOperationException.class, () -> { - userService.setUsers(0, null); + userService.setUsers(0, (List) null); }); } diff --git a/crowd/Apis/ApplicationLinkApi.md b/crowd/Apis/ApplicationLinkApi.md index d46516ab..45f35383 100644 --- a/crowd/Apis/ApplicationLinkApi.md +++ b/crowd/Apis/ApplicationLinkApi.md @@ -12,7 +12,7 @@ All URIs are relative to *https://<CROWD_URL>/rest/bootstrapi/1* # **createApplicationLink** -> ApplicationLinkModel createApplicationLink(ignore-setup-errors, ApplicationLinkModel) +> ApplicationLinkModel createApplicationLink(ApplicationLinkModel) Create an application link @@ -20,7 +20,6 @@ Create an application link |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **ignore-setup-errors** | **Boolean**| | [optional] [default to false] | | **ApplicationLinkModel** | [**ApplicationLinkModel**](../Models/ApplicationLinkModel.md)| | [optional] | ### Return type @@ -90,7 +89,7 @@ Get an application link # **updateApplicationLink** -> ApplicationLinkModel updateApplicationLink(uuid, ignore-setup-errors, ApplicationLinkModel) +> ApplicationLinkModel updateApplicationLink(uuid, ApplicationLinkModel) Update an application link @@ -99,7 +98,6 @@ Update an application link |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| | **uuid** | **UUID**| | [default to null] | -| **ignore-setup-errors** | **Boolean**| | [optional] [default to false] | | **ApplicationLinkModel** | [**ApplicationLinkModel**](../Models/ApplicationLinkModel.md)| | [optional] | ### Return type diff --git a/crowd/Apis/ApplicationLinksApi.md b/crowd/Apis/ApplicationLinksApi.md index 95ca19af..9d9b36c5 100644 --- a/crowd/Apis/ApplicationLinksApi.md +++ b/crowd/Apis/ApplicationLinksApi.md @@ -60,7 +60,7 @@ This endpoint does not need any parameter. # **setApplicationLinks** -> List setApplicationLinks(ignore-setup-errors, ApplicationLinkModel) +> List setApplicationLinks(request\_body) Set a list of application links @@ -70,8 +70,7 @@ Set a list of application links |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **ignore-setup-errors** | **Boolean**| | [optional] [default to false] | -| **ApplicationLinkModel** | [**List**](../Models/ApplicationLinkModel.md)| | [optional] | +| **request\_body** | [**Map**](../Models/ApplicationLinkModel.md)| | [optional] | ### Return type diff --git a/crowd/Apis/ApplicationsApi.md b/crowd/Apis/ApplicationsApi.md index b1fdf4f6..9b88287b 100644 --- a/crowd/Apis/ApplicationsApi.md +++ b/crowd/Apis/ApplicationsApi.md @@ -62,7 +62,7 @@ This endpoint does not need any parameter. # **setApplications** -> List setApplications(ApplicationModel) +> List setApplications(request\_body) Set a list of applications @@ -72,7 +72,7 @@ Set a list of applications |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **ApplicationModel** | [**List**](../Models/ApplicationModel.md)| | [optional] | +| **request\_body** | [**Map**](../Models/ApplicationModel.md)| | [optional] | ### Return type diff --git a/crowd/Apis/DirectoriesApi.md b/crowd/Apis/DirectoriesApi.md index 66d90c0f..35799ca5 100644 --- a/crowd/Apis/DirectoriesApi.md +++ b/crowd/Apis/DirectoriesApi.md @@ -6,7 +6,7 @@ All URIs are relative to *https://<CROWD_URL>/rest/bootstrapi/1* |------------- | ------------- | -------------| | [**deleteDirectories**](DirectoriesApi.md#deleteDirectories) | **DELETE** /directories | Delete all user directories | | [**getDirectories**](DirectoriesApi.md#getDirectories) | **GET** /directories | Get all user directories | -| [**setDirectories**](DirectoriesApi.md#setDirectories) | **PUT** /directories | Set a list of user directories | +| [**setDirectories**](DirectoriesApi.md#setDirectories) | **PUT** /directories | Set directories mapped by their name. | @@ -38,7 +38,7 @@ null (empty response body) # **getDirectories** -> List getDirectories() +> Map getDirectories() Get all user directories @@ -47,7 +47,7 @@ This endpoint does not need any parameter. ### Return type -[**List**](../Models/AbstractDirectoryModel.md) +[**Map**](../Models/AbstractDirectoryModel.md) ### Authorization @@ -60,9 +60,9 @@ This endpoint does not need any parameter. # **setDirectories** -> List setDirectories(test-connection, AbstractDirectoryModel) +> Map setDirectories(request\_body) -Set a list of user directories +Set directories mapped by their name. NOTE: All existing directories with the same 'name' attribute are updated. @@ -70,12 +70,11 @@ Set a list of user directories |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **test-connection** | **Boolean**| | [optional] [default to false] | -| **AbstractDirectoryModel** | [**List**](../Models/AbstractDirectoryModel.md)| | [optional] | +| **request\_body** | [**Map**](../Models/AbstractDirectoryModel.md)| | [optional] | ### Return type -[**List**](../Models/AbstractDirectoryModel.md) +[**Map**](../Models/AbstractDirectoryModel.md) ### Authorization diff --git a/crowd/Apis/DirectoryApi.md b/crowd/Apis/DirectoryApi.md index a6b44d27..bfa9ff18 100644 --- a/crowd/Apis/DirectoryApi.md +++ b/crowd/Apis/DirectoryApi.md @@ -12,7 +12,7 @@ All URIs are relative to *https://<CROWD_URL>/rest/bootstrapi/1* # **createDirectory** -> AbstractDirectoryModel createDirectory(test-connection, AbstractDirectoryModel) +> AbstractDirectoryModel createDirectory(AbstractDirectoryModel) Create a user directory @@ -20,7 +20,6 @@ Create a user directory |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **test-connection** | **Boolean**| | [optional] [default to false] | | **AbstractDirectoryModel** | [**AbstractDirectoryModel**](../Models/AbstractDirectoryModel.md)| | [optional] | ### Return type @@ -88,7 +87,7 @@ Get a user directory # **updateDirectory** -> AbstractDirectoryModel updateDirectory(id, test-connection, AbstractDirectoryModel) +> AbstractDirectoryModel updateDirectory(id, AbstractDirectoryModel) Update a user directory @@ -97,7 +96,6 @@ Update a user directory |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| | **id** | **Long**| | [default to null] | -| **test-connection** | **Boolean**| | [optional] [default to false] | | **AbstractDirectoryModel** | [**AbstractDirectoryModel**](../Models/AbstractDirectoryModel.md)| | [optional] | ### Return type diff --git a/crowd/Models/AbstractDirectoryModel.md b/crowd/Models/AbstractDirectoryModel.md index a025dbcf..5e9343cb 100644 --- a/crowd/Models/AbstractDirectoryModel.md +++ b/crowd/Models/AbstractDirectoryModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **connector** | [**DirectoryDelegatingConnector**](DirectoryDelegatingConnector.md) | | [optional] [default to null] | | **configuration** | [**DirectoryDelegatingConfiguration**](DirectoryDelegatingConfiguration.md) | | [optional] [default to null] | | **permissions** | [**DirectoryLdapPermissions**](DirectoryLdapPermissions.md) | | [optional] [default to null] | diff --git a/crowd/Models/ApplicationLinkModel.md b/crowd/Models/ApplicationLinkModel.md index a7c24655..485e73c8 100644 --- a/crowd/Models/ApplicationLinkModel.md +++ b/crowd/Models/ApplicationLinkModel.md @@ -4,14 +4,15 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **uuid** | **UUID** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | -| **type** | **String** | | [default to null] | -| **displayUrl** | **URI** | | [default to null] | -| **rpcUrl** | **URI** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | +| **type** | **String** | | [optional] [default to null] | +| **displayUrl** | **URI** | | [optional] [default to null] | +| **rpcUrl** | **URI** | | [optional] [default to null] | | **outgoingAuthType** | **String** | | [optional] [default to null] | | **incomingAuthType** | **String** | | [optional] [default to null] | | **primary** | **Boolean** | | [optional] [default to null] | | **status** | **String** | | [optional] [default to null] | +| **ignoreSetupErrors** | **Boolean** | | [optional] [default to null] | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/crowd/Models/DirectoryCrowdModel.md b/crowd/Models/DirectoryCrowdModel.md index e1dad078..a60141f5 100644 --- a/crowd/Models/DirectoryCrowdModel.md +++ b/crowd/Models/DirectoryCrowdModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **server** | [**DirectoryCrowdServer**](DirectoryCrowdServer.md) | | [optional] [default to null] | | **permissions** | [**DirectoryCrowdPermissions**](DirectoryCrowdPermissions.md) | | [optional] [default to null] | | **advanced** | [**DirectoryCrowdAdvanced**](DirectoryCrowdAdvanced.md) | | [optional] [default to null] | diff --git a/crowd/Models/DirectoryDelegatingModel.md b/crowd/Models/DirectoryDelegatingModel.md index 2d564d80..37b919ae 100644 --- a/crowd/Models/DirectoryDelegatingModel.md +++ b/crowd/Models/DirectoryDelegatingModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **server** | [**DirectoryLdapServer**](DirectoryLdapServer.md) | | [optional] [default to null] | | **permissions** | [**DirectoryPermissions**](DirectoryPermissions.md) | | [optional] [default to null] | | **advanced** | [**DirectoryInternalAdvanced**](DirectoryInternalAdvanced.md) | | [optional] [default to null] | diff --git a/crowd/Models/DirectoryGenericModel.md b/crowd/Models/DirectoryGenericModel.md index cecdeb75..42a62869 100644 --- a/crowd/Models/DirectoryGenericModel.md +++ b/crowd/Models/DirectoryGenericModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **server** | [**DirectoryLdapServer**](DirectoryLdapServer.md) | | [optional] [default to null] | | **permissions** | [**DirectoryLdapPermissions**](DirectoryLdapPermissions.md) | | [optional] [default to null] | | **advanced** | [**DirectoryInternalAdvanced**](DirectoryInternalAdvanced.md) | | [optional] [default to null] | diff --git a/crowd/Models/DirectoryInternalModel.md b/crowd/Models/DirectoryInternalModel.md index 0b983484..bf66d0d5 100644 --- a/crowd/Models/DirectoryInternalModel.md +++ b/crowd/Models/DirectoryInternalModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **server** | [**DirectoryLdapServer**](DirectoryLdapServer.md) | | [optional] [default to null] | | **permissions** | [**DirectoryPermissions**](DirectoryPermissions.md) | | [optional] [default to null] | | **advanced** | [**DirectoryInternalAdvanced**](DirectoryInternalAdvanced.md) | | [optional] [default to null] | diff --git a/crowd/Models/DirectoryLdapModel.md b/crowd/Models/DirectoryLdapModel.md index 3cbf6175..818bfcf9 100644 --- a/crowd/Models/DirectoryLdapModel.md +++ b/crowd/Models/DirectoryLdapModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **server** | [**DirectoryLdapServer**](DirectoryLdapServer.md) | | [optional] [default to null] | | **permissions** | [**DirectoryLdapPermissions**](DirectoryLdapPermissions.md) | | [optional] [default to null] | | **advanced** | [**DirectoryInternalAdvanced**](DirectoryInternalAdvanced.md) | | [optional] [default to null] | diff --git a/crowd/README.md b/crowd/README.md index 1244cb01..f8dd0de8 100644 --- a/crowd/README.md +++ b/crowd/README.md @@ -23,7 +23,7 @@ All URIs are relative to *https:///rest/bootstrapi/1* *ApplicationsApi* | [**setApplications**](Apis/ApplicationsApi.md#setapplications) | **PUT** /applications | Set a list of applications | | *DirectoriesApi* | [**deleteDirectories**](Apis/DirectoriesApi.md#deletedirectories) | **DELETE** /directories | Delete all user directories | *DirectoriesApi* | [**getDirectories**](Apis/DirectoriesApi.md#getdirectories) | **GET** /directories | Get all user directories | -*DirectoriesApi* | [**setDirectories**](Apis/DirectoriesApi.md#setdirectories) | **PUT** /directories | Set a list of user directories | +*DirectoriesApi* | [**setDirectories**](Apis/DirectoriesApi.md#setdirectories) | **PUT** /directories | Set directories mapped by their name. | | *DirectoryApi* | [**createDirectory**](Apis/DirectoryApi.md#createdirectory) | **POST** /directory | Create a user directory | *DirectoryApi* | [**deleteDirectory**](Apis/DirectoryApi.md#deletedirectory) | **DELETE** /directory/{id} | Delete a user directory | *DirectoryApi* | [**getDirectory**](Apis/DirectoryApi.md#getdirectory) | **GET** /directory/{id} | Get a user directory | diff --git a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/model/util/DirectoryModelUtil.java b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/model/util/DirectoryModelUtil.java index 2d97032a..f60d0751 100644 --- a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/model/util/DirectoryModelUtil.java +++ b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/model/util/DirectoryModelUtil.java @@ -25,27 +25,27 @@ import javax.annotation.Nonnull; import javax.annotation.Nullable; -import java.util.Collections; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Set; -import static com.deftdevs.bootstrapi.crowd.util.AttributeUtil.*; +import static com.deftdevs.bootstrapi.crowd.util.AttributeUtil.fromBoolean; +import static com.deftdevs.bootstrapi.crowd.util.AttributeUtil.fromIntegerCollection; +import static com.deftdevs.bootstrapi.crowd.util.AttributeUtil.fromLong; +import static com.deftdevs.bootstrapi.crowd.util.AttributeUtil.toBoolean; +import static com.deftdevs.bootstrapi.crowd.util.AttributeUtil.toIntegerList; +import static com.deftdevs.bootstrapi.crowd.util.AttributeUtil.toLong; import static java.lang.Boolean.TRUE; public class DirectoryModelUtil { public static final String ATTRIBUTE_USE_NESTED_GROUPS = "useNestedGroups"; - private static final Set> SUPPORTED_DIRECTORY_BEAN_TYPES; - - static { - final Set> supportedDirectoryModelTypes = new HashSet<>(); - supportedDirectoryModelTypes.add(DirectoryInternalModel.class); - supportedDirectoryModelTypes.add(DirectoryDelegatingModel.class); - SUPPORTED_DIRECTORY_BEAN_TYPES = Collections.unmodifiableSet(supportedDirectoryModelTypes); - } + public static final Set> SUPPORTED_DIRECTORY_BEAN_TYPES = Set.of( + DirectoryInternalModel.class, + DirectoryDelegatingModel.class + ); /* * Methods for converting directories to directory beans. diff --git a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/rest/ApplicationResourceImpl.java b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/rest/ApplicationResourceImpl.java index af8ffd4e..1cf63715 100644 --- a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/rest/ApplicationResourceImpl.java +++ b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/rest/ApplicationResourceImpl.java @@ -8,7 +8,6 @@ import javax.inject.Inject; import javax.ws.rs.Path; -import javax.ws.rs.core.Response; @SystemAdminOnly @Path(BootstrAPI.APPLICATION) @@ -24,28 +23,32 @@ public ApplicationResourceImpl( } @Override - public Response getApplication( + public ApplicationModel getApplication( final long id) { - return Response.ok(applicationsService.getApplication(id)).build(); + + return applicationsService.getApplication(id); } @Override - public Response updateApplication( + public ApplicationModel updateApplication( final long id, final ApplicationModel applicationModel) { - return Response.ok(applicationsService.setApplication(id, applicationModel)).build(); + + return applicationsService.setApplication(id, applicationModel); } @Override - public Response createApplication( + public ApplicationModel createApplication( final ApplicationModel applicationModel) { - return Response.ok(applicationsService.addApplication(applicationModel)).build(); + + return applicationsService.addApplication(applicationModel); } @Override - public Response deleteApplication(long id) { + public void deleteApplication( + final long id) { + applicationsService.deleteApplication(id); - return Response.ok().build(); } } diff --git a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/rest/ApplicationsResourceImpl.java b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/rest/ApplicationsResourceImpl.java index f46ec851..e0da8b64 100644 --- a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/rest/ApplicationsResourceImpl.java +++ b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/rest/ApplicationsResourceImpl.java @@ -10,6 +10,7 @@ import javax.ws.rs.Path; import javax.ws.rs.core.Response; import java.util.List; +import java.util.Map; @SystemAdminOnly @Path(BootstrAPI.APPLICATIONS) @@ -25,20 +26,22 @@ public ApplicationsResourceImpl( } @Override - public Response getApplications() { - return Response.ok(applicationsService.getApplications()).build(); + public Map getApplications() { + return applicationsService.getApplications(); } @Override - public Response setApplications( - final List applicationModels) { - return Response.ok(applicationsService.setApplications(applicationModels)).build(); + public Map setApplications( + final Map applicationModels) { + + return applicationsService.setApplications(applicationModels); } @Override - public Response deleteApplications(boolean force) { + public void deleteApplications( + final boolean force) { + applicationsService.deleteApplications(force); - return Response.ok().build(); } } diff --git a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/rest/api/ApplicationResource.java b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/rest/api/ApplicationResource.java index e44dd9a8..0812f5bb 100644 --- a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/rest/api/ApplicationResource.java +++ b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/rest/api/ApplicationResource.java @@ -9,9 +9,15 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.POST; +import javax.ws.rs.PUT; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; public interface ApplicationResource { @@ -33,7 +39,7 @@ public interface ApplicationResource { ), } ) - Response getApplication( + ApplicationModel getApplication( @PathParam("id") long id); @POST @@ -53,7 +59,7 @@ Response getApplication( ), } ) - Response createApplication( + ApplicationModel createApplication( ApplicationModel applicationModel); @PUT @@ -74,7 +80,7 @@ Response createApplication( ), } ) - Response updateApplication( + ApplicationModel updateApplication( @PathParam("id") long id, ApplicationModel applicationsModelModels); @@ -94,7 +100,7 @@ Response updateApplication( ), } ) - Response deleteApplication( + void deleteApplication( @PathParam("id") final long id); } diff --git a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/rest/api/ApplicationsResource.java b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/rest/api/ApplicationsResource.java index 6d9e1e37..1182ef31 100644 --- a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/rest/api/ApplicationsResource.java +++ b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/rest/api/ApplicationsResource.java @@ -9,10 +9,14 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import javax.ws.rs.*; +import javax.ws.rs.Consumes; +import javax.ws.rs.DELETE; +import javax.ws.rs.GET; +import javax.ws.rs.PUT; +import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.core.MediaType; -import javax.ws.rs.core.Response; -import java.util.List; +import java.util.Map; public interface ApplicationsResource { @@ -33,7 +37,7 @@ public interface ApplicationsResource { ), } ) - Response getApplications(); + Map getApplications(); @PUT @Consumes(MediaType.APPLICATION_JSON) @@ -53,8 +57,8 @@ public interface ApplicationsResource { ), } ) - Response setApplications( - List applicationModels); + Map setApplications( + Map applicationModels); @DELETE @Operation( @@ -72,7 +76,7 @@ Response setApplications( ), } ) - Response deleteApplications( + void deleteApplications( @QueryParam("force") final boolean force); } diff --git a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/service/ApplicationsServiceImpl.java b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/service/ApplicationsServiceImpl.java index 947460c9..44307f76 100644 --- a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/service/ApplicationsServiceImpl.java +++ b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/service/ApplicationsServiceImpl.java @@ -40,10 +40,10 @@ public ApplicationsServiceImpl( } @Override - public List getApplications() { + public Map getApplications() { return applicationManager.findAll().stream() .map(application -> ApplicationModelUtil.toApplicationModel(application, defaultGroupMembershipService)) - .collect(Collectors.toList()); + .collect(Collectors.toMap(ApplicationModel::getName, Function.identity())); } @Override @@ -58,17 +58,21 @@ public ApplicationModel getApplication( } @Override - public List setApplications( - final List applicationModels) { + public Map setApplications( + final Map applicationModels) { + + final Map resultApplicationModels = new LinkedHashMap<>(); - final List resultApplicationModels = new ArrayList<>(); + for (Map.Entry applicationModelEntry : applicationModels.entrySet()) { + final ApplicationModel applicationModel = applicationModelEntry.getValue(); - for (ApplicationModel applicationModel : applicationModels) { try { - final Application application = applicationManager.findByName(applicationModel.getName()); - resultApplicationModels.add(setApplication(application.getId(), applicationModel)); + final Application application = applicationManager.findByName(applicationModelEntry.getKey()); + final ApplicationModel updatedApplicationModel = setApplication(application.getId(), applicationModel); + resultApplicationModels.put(updatedApplicationModel.getName(), updatedApplicationModel); } catch (ApplicationNotFoundException ignored) { - resultApplicationModels.add(addApplication(applicationModel)); + final ApplicationModel addedApplicationModel = addApplication(applicationModel); + resultApplicationModels.put(addedApplicationModel.getName(), addedApplicationModel); } } diff --git a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/service/DirectoriesServiceImpl.java b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/service/DirectoriesServiceImpl.java index 9026579c..31813763 100644 --- a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/service/DirectoriesServiceImpl.java +++ b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/service/DirectoriesServiceImpl.java @@ -15,23 +15,22 @@ import com.deftdevs.bootstrapi.commons.model.DirectoryInternalModel; import com.deftdevs.bootstrapi.commons.model.GroupModel; import com.deftdevs.bootstrapi.commons.model.UserModel; -import com.deftdevs.bootstrapi.commons.service.api.DirectoriesService; +import com.deftdevs.bootstrapi.commons.service.AbstractDirectoriesService; import com.deftdevs.bootstrapi.commons.service.api.UsersService; import com.deftdevs.bootstrapi.crowd.model.util.DirectoryModelUtil; import com.deftdevs.bootstrapi.crowd.service.api.GroupsService; import javax.annotation.Nonnull; -import javax.validation.constraints.NotNull; -import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; import static com.atlassian.crowd.embedded.api.DirectoryType.INTERNAL; -public class DirectoriesServiceImpl implements DirectoriesService { +public class DirectoriesServiceImpl extends AbstractDirectoriesService { private static final int RETRY_AFTER_IN_SECONDS = 5; @@ -50,10 +49,10 @@ public DirectoriesServiceImpl( } @Override - public List getDirectories() { + public Map getDirectories() { return findAllDirectories().stream() .map(DirectoryModelUtil::toDirectoryModel) - .collect(Collectors.toList()); + .collect(Collectors.toMap(AbstractDirectoryModel::getName, Function.identity())); } @Override @@ -64,32 +63,10 @@ public AbstractDirectoryModel getDirectory( return DirectoryModelUtil.toDirectoryModel(directory); } - @Override - public List setDirectories( - final List directoryModels, - final boolean testConnection) { - - final Map existingDirectoriesByName = findAllDirectories().stream() - .collect(Collectors.toMap(Directory::getName, Function.identity())); - - final List resultDirectories = new ArrayList<>(); - - for (AbstractDirectoryModel directoryModel : directoryModels) { - if (existingDirectoriesByName.containsKey(directoryModel.getName())) { - resultDirectories.add(setDirectory(existingDirectoriesByName.get(directoryModel.getName()).getId(), directoryModel, testConnection)); - } else { - resultDirectories.add(addDirectory(directoryModel, testConnection)); - } - } - - return resultDirectories; - } - @Override public AbstractDirectoryModel setDirectory( final long id, - final AbstractDirectoryModel directoryModel, - final boolean testConnection) { + final AbstractDirectoryModel directoryModel) { final Directory existingDirectory = findDirectory(id); final AbstractDirectoryModel resultDirectoryModel; @@ -114,8 +91,7 @@ public AbstractDirectoryModel setDirectory( @Override public AbstractDirectoryModel addDirectory( - final AbstractDirectoryModel directoryModel, - final boolean testConnection) { + final AbstractDirectoryModel directoryModel) { final AbstractDirectoryModel resultDirectoryModel; @@ -171,6 +147,11 @@ public void deleteDirectory( } } + @Override + protected Set> getSupportedClassesForUpdate() { + return DirectoryModelUtil.SUPPORTED_DIRECTORY_BEAN_TYPES; + } + @Nonnull Directory findDirectory( final long id) { diff --git a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/service/UsersServiceImpl.java b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/service/UsersServiceImpl.java index 5d63bac5..90b458aa 100644 --- a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/service/UsersServiceImpl.java +++ b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/service/UsersServiceImpl.java @@ -88,6 +88,14 @@ public List setUsers( .collect(Collectors.toList()); } + @Override + public Map setUsers( + final long directoryId, + final Map userModels) { + + return Map.of(); + } + public UserModel addUser( final long directoryId, final UserModel userModel) { diff --git a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/service/api/ApplicationsService.java b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/service/api/ApplicationsService.java index f069a701..dceb0ca0 100644 --- a/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/service/api/ApplicationsService.java +++ b/crowd/src/main/java/com/deftdevs/bootstrapi/crowd/service/api/ApplicationsService.java @@ -2,17 +2,17 @@ import com.deftdevs.bootstrapi.crowd.model.ApplicationModel; -import java.util.List; +import java.util.Map; public interface ApplicationsService { - List getApplications(); + Map getApplications(); ApplicationModel getApplication( long id); - List setApplications( - List applicationModels); + Map setApplications( + Map applicationModels); ApplicationModel setApplication( long id, diff --git a/crowd/src/test/java/com/deftdevs/bootstrapi/crowd/service/ApplicationsServiceTest.java b/crowd/src/test/java/com/deftdevs/bootstrapi/crowd/service/ApplicationsServiceTest.java index 3f66eb6b..76aeeda2 100644 --- a/crowd/src/test/java/com/deftdevs/bootstrapi/crowd/service/ApplicationsServiceTest.java +++ b/crowd/src/test/java/com/deftdevs/bootstrapi/crowd/service/ApplicationsServiceTest.java @@ -25,16 +25,27 @@ import org.mockito.junit.jupiter.MockitoExtension; import java.util.ArrayList; -import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Map; +import java.util.function.Function; +import java.util.stream.Collectors; +import java.util.stream.Stream; import static com.deftdevs.bootstrapi.crowd.model.ApplicationModel.EXAMPLE_1; import static com.deftdevs.bootstrapi.crowd.model.ApplicationModel.EXAMPLE_2; import static com.deftdevs.bootstrapi.crowd.model.util.ApplicationModelUtil.toApplication; import static com.deftdevs.bootstrapi.crowd.model.util.ApplicationModelUtil.toStringCollection; -import static org.junit.jupiter.api.Assertions.*; -import static org.mockito.Mockito.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.any; +import static org.mockito.Mockito.anyLong; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.doThrow; +import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; @ExtendWith(MockitoExtension.class) public class ApplicationsServiceTest { @@ -78,11 +89,11 @@ public void testGetApplications() { final List applications = Collections.singletonList(application); doReturn(applications).when(applicationManager).findAll(); - final List applicationModels = applicationsService.getApplications(); + final Map applicationModels = applicationsService.getApplications(); assertNotNull(applicationModels); assertEquals(1, applicationModels.size()); - final ApplicationModel resultApplicationModel = applicationModels.iterator().next(); + final ApplicationModel resultApplicationModel = applicationModels.values().iterator().next(); assertEquals(EXAMPLE_1.getName(), resultApplicationModel.getName()); assertEquals(EXAMPLE_1.getDescription(), resultApplicationModel.getDescription()); assertEquals(EXAMPLE_1.getActive(), resultApplicationModel.getActive()); @@ -190,7 +201,8 @@ public void testSetApplications() throws ApplicationNotFoundException { final Application applicationExample1 = ImmutableApplication.builder(toApplication(EXAMPLE_1)) .setId(EXAMPLE_1.getId()) .build(); - final List applicationModels = Arrays.asList(EXAMPLE_1, EXAMPLE_2); + final Map applicationModels = Stream.of(EXAMPLE_1, EXAMPLE_2) + .collect(Collectors.toMap(ApplicationModel::getName, Function.identity())); doReturn(applicationExample1).when(applicationManager).findByName(EXAMPLE_1.getName()); doThrow(new ApplicationNotFoundException("")).when(applicationManager).findByName(EXAMPLE_2.getName()); @@ -198,7 +210,7 @@ public void testSetApplications() throws ApplicationNotFoundException { doReturn(EXAMPLE_1).when(spy).setApplication(EXAMPLE_1.getId(), EXAMPLE_1); doReturn(EXAMPLE_2).when(spy).addApplication(EXAMPLE_2); - final List responseApplicationModels = spy.setApplications(applicationModels); + final Map responseApplicationModels = spy.setApplications(applicationModels); verify(spy).setApplication(EXAMPLE_1.getId(), EXAMPLE_1); verify(spy).addApplication(EXAMPLE_2); assertEquals(applicationModels.size(), responseApplicationModels.size()); diff --git a/crowd/src/test/java/com/deftdevs/bootstrapi/crowd/service/DirectoriesServiceTest.java b/crowd/src/test/java/com/deftdevs/bootstrapi/crowd/service/DirectoriesServiceTest.java index 32e91ee7..4159f9fe 100644 --- a/crowd/src/test/java/com/deftdevs/bootstrapi/crowd/service/DirectoriesServiceTest.java +++ b/crowd/src/test/java/com/deftdevs/bootstrapi/crowd/service/DirectoriesServiceTest.java @@ -74,12 +74,11 @@ public void testSetDirectoriesAddNew() { doReturn(Collections.singletonList(directoryInternal)).when(spy).findAllDirectories(); final AbstractDirectoryModel directoryModel = DirectoryModelUtil.toDirectoryModel(directoryInternalNew); - final List directoryModels = Collections.singletonList(directoryModel); - final boolean testConnection = false; - doReturn(null).when(spy).addDirectory(directoryModel, testConnection); + final Map directoryModels = Collections.singletonMap(directoryModel.getName(), directoryModel); + doReturn(directoryModel).when(spy).addDirectory(directoryModel); - spy.setDirectories(directoryModels, testConnection); - verify(spy).addDirectory(directoryModel, testConnection); + spy.setDirectories(directoryModels); + verify(spy).addDirectory(directoryModel); } @Test @@ -90,11 +89,11 @@ public void testSetDirectoriesAddNewUnsupportedType() { doReturn(Collections.singletonList(directoryInternal)).when(spy).findAllDirectories(); final AbstractDirectoryModel directoryModel = DirectoryModelUtil.toDirectoryModel(directoryAzureAd); - final List directoryModels = Collections.singletonList(directoryModel); + final Map directoryModels = Collections.singletonMap(directoryModel.getName(), directoryModel); final boolean testConnection = false; assertThrows(BadRequestException.class, () -> { - spy.setDirectories(directoryModels, testConnection); + spy.setDirectories(directoryModels); }); } @@ -105,12 +104,11 @@ public void testSetDirectoriesSetExisting() { doReturn(Collections.singletonList(directory)).when(spy).findAllDirectories(); final AbstractDirectoryModel directoryModel = DirectoryModelUtil.toDirectoryModel(directory); - final List directoryModels = Collections.singletonList(directoryModel); - final boolean testConnection = false; - doReturn(null).when(spy).setDirectory(directory.getId(), directoryModel, testConnection); + final Map directoryModels = Collections.singletonMap(directoryModel.getName(), directoryModel); + doReturn(directoryModel).when(spy).setDirectory(directory.getId(), directoryModel); - spy.setDirectories(directoryModels, testConnection); - verify(spy).setDirectory(directory.getId(), directoryModel, testConnection); + spy.setDirectories(directoryModels); + verify(spy).setDirectory(directory.getId(), directoryModel); } @Test @@ -118,15 +116,13 @@ public void testSetDirectoriesSetExistingUnsupportedType() { final Directory directoryInternal = getTestDirectoryInternal(); final Directory directoryAzureAd = getTestDirectoryAzureAd(); final DirectoriesServiceImpl spy = spy(directoriesService); - doReturn(ListUtil.of(directoryInternal, directoryAzureAd)).when(spy).findAllDirectories(); - doReturn(directoryAzureAd).when(spy).findDirectory(directoryAzureAd.getId()); + doReturn(List.of(directoryInternal, directoryAzureAd)).when(spy).findAllDirectories(); final AbstractDirectoryModel directoryModel = DirectoryModelUtil.toDirectoryModel(directoryAzureAd); - final List directoryModels = Collections.singletonList(directoryModel); - final boolean testConnection = false; + final Map directoryModels = Collections.singletonMap(directoryModel.getName(), directoryModel); assertThrows(BadRequestException.class, () -> { - spy.setDirectories(directoryModels, testConnection); + spy.setDirectories(directoryModels); }); } @@ -137,7 +133,7 @@ public void testAddDirectory() throws CrowdException { // Return the same directory as passed as argument doAnswer(invocation -> invocation.getArgument(0, Directory.class)).when(directoryManager).addDirectory(any()); - directoriesService.addDirectory(directoryModel, false); + directoriesService.addDirectory(directoryModel); verify(directoryManager).addDirectory(any()); } @@ -156,12 +152,12 @@ public void testAddDirectoryWithGroupsAndUsers() throws CrowdException { // Return the same groups bean as passed as argument doAnswer(invocation -> invocation.getArgument(1, List.class)).when(groupsService).setGroups(anyLong(), any()); // Return the same user beans as passed as argument - doAnswer(invocation -> invocation.getArgument(1, Collection.class)).when(usersService).setUsers(anyLong(), any()); + doAnswer(invocation -> invocation.getArgument(1, Collection.class)).when(usersService).setUsers(anyLong(), anyList()); - directoriesService.addDirectory(directoryInternalModel, false); + directoriesService.addDirectory(directoryInternalModel); verify(directoryManager).addDirectory(any()); verify(groupsService).setGroups(anyLong(), any()); - verify(usersService).setUsers(anyLong(), any()); + verify(usersService).setUsers(anyLong(), anyList()); } @Test @@ -171,7 +167,7 @@ public void testAddDirectoryWithException() throws CrowdException { doThrow(new DirectoryInstantiationException()).when(directoryManager).addDirectory(any()); assertThrows(InternalServerErrorException.class, () -> { - directoriesService.addDirectory(directoryModel, false); + directoriesService.addDirectory(directoryModel); }); } @@ -182,10 +178,9 @@ public void testUpdateDirectory() throws CrowdException { final AbstractDirectoryModel directoryModel = DirectoryModelUtil.toDirectoryModel(directory); // Return the same directory as passed as argument - doAnswer(invocation -> invocation.getArgument(0, Directory.class)).when(directoryManager).updateDirectory(any()); - directoriesService.setDirectory(directory.getId(), directoryModel, false); + directoriesService.setDirectory(directory.getId(), directoryModel); verify(directoryManager).updateDirectory(any()); } @@ -206,12 +201,12 @@ public void testUpdateDirectoryWithGroupsAndUsers() throws CrowdException { // Return the same groups bean as passed as argument doAnswer(invocation -> invocation.getArgument(1, List.class)).when(groupsService).setGroups(anyLong(), any()); // Return the same user beans as passed as argument - doAnswer(invocation -> invocation.getArgument(1, Collection.class)).when(usersService).setUsers(anyLong(), any()); + doAnswer(invocation -> invocation.getArgument(1, Collection.class)).when(usersService).setUsers(anyLong(), anyList()); - directoriesService.setDirectory(directory.getId(), directoryInternalModel, false); + directoriesService.setDirectory(directory.getId(), directoryInternalModel); verify(directoryManager).updateDirectory(any()); verify(groupsService).setGroups(anyLong(), any()); - verify(usersService).setUsers(anyLong(), any()); + verify(usersService).setUsers(anyLong(), anyList()); } @Test @@ -221,7 +216,7 @@ public void testUpdateDirectoryNotFound() throws CrowdException { doThrow(new DirectoryNotFoundException(directory.getName())).when(directoryManager).findDirectoryById(directory.getId()); assertThrows(NotFoundException.class, () -> { - directoriesService.setDirectory(directory.getId(), directoryModel, false); + directoriesService.setDirectory(directory.getId(), directoryModel); }); } @@ -233,7 +228,7 @@ public void testUpdateDirectoryWithException() throws CrowdException { doThrow(new DirectoryNotFoundException(directory.getName())).when(directoryManager).updateDirectory(any()); assertThrows(InternalServerErrorException.class, () -> { - directoriesService.setDirectory(directory.getId(), directoryModel, false); + directoriesService.setDirectory(directory.getId(), directoryModel); }); } @@ -253,7 +248,7 @@ public void testDeleteDirectories() throws CrowdException { final Directory directoryAzureAd = getTestDirectoryAzureAd(); final Directory directoryInternalOther = getTestDirectoryInternalOther(); final DirectoriesServiceImpl spy = spy(directoriesService); - doReturn(ListUtil.of(directoryInternal, directoryAzureAd, directoryInternalOther)).when(spy).findAllDirectories(); + doReturn(List.of(directoryInternal, directoryAzureAd, directoryInternalOther)).when(spy).findAllDirectories(); spy.deleteDirectories(true); verify(spy, never()).deleteDirectory(directoryInternal.getId()); @@ -271,7 +266,7 @@ public void testDeleteDirectoriesMissingForce() { @Test public void testDeleteDirectory() throws CrowdException { final Directory directory = getTestDirectoryAzureAd(); - doReturn(ListUtil.of(getTestDirectoryInternal(), directory)).when(directoryManager).searchDirectories(any()); + doReturn(List.of(getTestDirectoryInternal(), directory)).when(directoryManager).searchDirectories(any()); doReturn(directory).when(directoryManager).findDirectoryById(directory.getId()); directoriesService.deleteDirectory(directory.getId()); verify(directoryManager).removeDirectory(directory); @@ -291,7 +286,7 @@ public void testDeleteDirectoryLast() { @Test public void testDeleteDirectoryNotFoundAfterAlreadyFound() throws CrowdException { final Directory directory = getTestDirectoryInternal(); - doReturn(ListUtil.of(directory, getTestDirectoryAzureAd())).when(directoryManager).searchDirectories(any()); + doReturn(List.of(directory, getTestDirectoryAzureAd())).when(directoryManager).searchDirectories(any()); doReturn(directory).when(directoryManager).findDirectoryById(directory.getId()); doThrow(new DirectoryNotFoundException("Directory")).when(directoryManager).removeDirectory(directory); @@ -303,7 +298,7 @@ public void testDeleteDirectoryNotFoundAfterAlreadyFound() throws CrowdException @Test public void testDeleteDirectorySynchronizing() throws CrowdException { final Directory directory = getTestDirectoryInternal(); - doReturn(ListUtil.of(directory, getTestDirectoryAzureAd())).when(directoryManager).searchDirectories(any()); + doReturn(List.of(directory, getTestDirectoryAzureAd())).when(directoryManager).searchDirectories(any()); doReturn(directory).when(directoryManager).findDirectoryById(directory.getId()); doThrow(new DirectoryCurrentlySynchronisingException(1L)).when(directoryManager).removeDirectory(directory); @@ -346,7 +341,7 @@ private Directory getTestDirectoryInternalOther() { } private List getTestDirectories() { - return ListUtil.of(getTestDirectoryInternal(), getTestDirectoryAzureAd(), getTestDirectoryInternalOther()); + return List.of(getTestDirectoryInternal(), getTestDirectoryAzureAd(), getTestDirectoryInternalOther()); } private Date toDate( @@ -355,14 +350,4 @@ private Date toDate( return Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()); } - private static class ListUtil { - - static List of(T... elements) { - List list = new ArrayList<>(); - Collections.addAll(list, elements); - return list; - } - - } - } diff --git a/crowd/src/test/java/com/deftdevs/bootstrapi/crowd/service/UsersServiceTest.java b/crowd/src/test/java/com/deftdevs/bootstrapi/crowd/service/UsersServiceTest.java index 492ec856..c5a95be1 100644 --- a/crowd/src/test/java/com/deftdevs/bootstrapi/crowd/service/UsersServiceTest.java +++ b/crowd/src/test/java/com/deftdevs/bootstrapi/crowd/service/UsersServiceTest.java @@ -140,7 +140,7 @@ public void testSetUsers() { @Test public void testSetUsersNull() { - assertEquals(Collections.emptyList(), usersService.setUsers(getTestDirectory().getId(), null)); + assertEquals(Collections.emptyList(), usersService.setUsers(getTestDirectory().getId(), (List) null)); } @Test diff --git a/jira/Apis/ApplicationLinkApi.md b/jira/Apis/ApplicationLinkApi.md index 8e2a1f0c..39651d48 100644 --- a/jira/Apis/ApplicationLinkApi.md +++ b/jira/Apis/ApplicationLinkApi.md @@ -12,7 +12,7 @@ All URIs are relative to *https://<JIRA_URL>/rest/bootstrapi/1* # **createApplicationLink** -> ApplicationLinkModel createApplicationLink(ignore-setup-errors, ApplicationLinkModel) +> ApplicationLinkModel createApplicationLink(ApplicationLinkModel) Create an application link @@ -20,7 +20,6 @@ Create an application link |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **ignore-setup-errors** | **Boolean**| | [optional] [default to false] | | **ApplicationLinkModel** | [**ApplicationLinkModel**](../Models/ApplicationLinkModel.md)| | [optional] | ### Return type @@ -90,7 +89,7 @@ Get an application link # **updateApplicationLink** -> ApplicationLinkModel updateApplicationLink(uuid, ignore-setup-errors, ApplicationLinkModel) +> ApplicationLinkModel updateApplicationLink(uuid, ApplicationLinkModel) Update an application link @@ -99,7 +98,6 @@ Update an application link |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| | **uuid** | **UUID**| | [default to null] | -| **ignore-setup-errors** | **Boolean**| | [optional] [default to false] | | **ApplicationLinkModel** | [**ApplicationLinkModel**](../Models/ApplicationLinkModel.md)| | [optional] | ### Return type diff --git a/jira/Apis/ApplicationLinksApi.md b/jira/Apis/ApplicationLinksApi.md index 72e735ae..4bb37801 100644 --- a/jira/Apis/ApplicationLinksApi.md +++ b/jira/Apis/ApplicationLinksApi.md @@ -60,7 +60,7 @@ This endpoint does not need any parameter. # **setApplicationLinks** -> List setApplicationLinks(ignore-setup-errors, ApplicationLinkModel) +> List setApplicationLinks(request\_body) Set a list of application links @@ -70,8 +70,7 @@ Set a list of application links |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **ignore-setup-errors** | **Boolean**| | [optional] [default to false] | -| **ApplicationLinkModel** | [**List**](../Models/ApplicationLinkModel.md)| | [optional] | +| **request\_body** | [**Map**](../Models/ApplicationLinkModel.md)| | [optional] | ### Return type diff --git a/jira/Apis/AuthenticationApi.md b/jira/Apis/AuthenticationApi.md index 4cee1509..e693944d 100644 --- a/jira/Apis/AuthenticationApi.md +++ b/jira/Apis/AuthenticationApi.md @@ -56,7 +56,7 @@ This endpoint does not need any parameter. # **setAuthenticationIdps** -> List setAuthenticationIdps(AbstractAuthenticationIdpModel) +> List setAuthenticationIdps(request\_body) Set all authentication identity providers @@ -64,7 +64,7 @@ Set all authentication identity providers |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **AbstractAuthenticationIdpModel** | [**List**](../Models/AbstractAuthenticationIdpModel.md)| | [optional] | +| **request\_body** | [**Map**](../Models/AbstractAuthenticationIdpModel.md)| | [optional] | ### Return type diff --git a/jira/Apis/DirectoriesApi.md b/jira/Apis/DirectoriesApi.md index 55d78700..c40752f7 100644 --- a/jira/Apis/DirectoriesApi.md +++ b/jira/Apis/DirectoriesApi.md @@ -6,7 +6,7 @@ All URIs are relative to *https://<JIRA_URL>/rest/bootstrapi/1* |------------- | ------------- | -------------| | [**deleteDirectories**](DirectoriesApi.md#deleteDirectories) | **DELETE** /directories | Delete all user directories | | [**getDirectories**](DirectoriesApi.md#getDirectories) | **GET** /directories | Get all user directories | -| [**setDirectories**](DirectoriesApi.md#setDirectories) | **PUT** /directories | Set a list of user directories | +| [**setDirectories**](DirectoriesApi.md#setDirectories) | **PUT** /directories | Set directories mapped by their name. | @@ -38,7 +38,7 @@ null (empty response body) # **getDirectories** -> List getDirectories() +> Map getDirectories() Get all user directories @@ -47,7 +47,7 @@ This endpoint does not need any parameter. ### Return type -[**List**](../Models/AbstractDirectoryModel.md) +[**Map**](../Models/AbstractDirectoryModel.md) ### Authorization @@ -60,9 +60,9 @@ This endpoint does not need any parameter. # **setDirectories** -> List setDirectories(test-connection, AbstractDirectoryModel) +> Map setDirectories(request\_body) -Set a list of user directories +Set directories mapped by their name. NOTE: All existing directories with the same 'name' attribute are updated. @@ -70,12 +70,11 @@ Set a list of user directories |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **test-connection** | **Boolean**| | [optional] [default to false] | -| **AbstractDirectoryModel** | [**List**](../Models/AbstractDirectoryModel.md)| | [optional] | +| **request\_body** | [**Map**](../Models/AbstractDirectoryModel.md)| | [optional] | ### Return type -[**List**](../Models/AbstractDirectoryModel.md) +[**Map**](../Models/AbstractDirectoryModel.md) ### Authorization diff --git a/jira/Apis/DirectoryApi.md b/jira/Apis/DirectoryApi.md index a45aad2b..faa531e7 100644 --- a/jira/Apis/DirectoryApi.md +++ b/jira/Apis/DirectoryApi.md @@ -12,7 +12,7 @@ All URIs are relative to *https://<JIRA_URL>/rest/bootstrapi/1* # **createDirectory** -> AbstractDirectoryModel createDirectory(test-connection, AbstractDirectoryModel) +> AbstractDirectoryModel createDirectory(AbstractDirectoryModel) Create a user directory @@ -20,7 +20,6 @@ Create a user directory |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| -| **test-connection** | **Boolean**| | [optional] [default to false] | | **AbstractDirectoryModel** | [**AbstractDirectoryModel**](../Models/AbstractDirectoryModel.md)| | [optional] | ### Return type @@ -88,7 +87,7 @@ Get a user directory # **updateDirectory** -> AbstractDirectoryModel updateDirectory(id, test-connection, AbstractDirectoryModel) +> AbstractDirectoryModel updateDirectory(id, AbstractDirectoryModel) Update a user directory @@ -97,7 +96,6 @@ Update a user directory |Name | Type | Description | Notes | |------------- | ------------- | ------------- | -------------| | **id** | **Long**| | [default to null] | -| **test-connection** | **Boolean**| | [optional] [default to false] | | **AbstractDirectoryModel** | [**AbstractDirectoryModel**](../Models/AbstractDirectoryModel.md)| | [optional] | ### Return type diff --git a/jira/Models/AbstractDirectoryModel.md b/jira/Models/AbstractDirectoryModel.md index a025dbcf..5e9343cb 100644 --- a/jira/Models/AbstractDirectoryModel.md +++ b/jira/Models/AbstractDirectoryModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **connector** | [**DirectoryDelegatingConnector**](DirectoryDelegatingConnector.md) | | [optional] [default to null] | | **configuration** | [**DirectoryDelegatingConfiguration**](DirectoryDelegatingConfiguration.md) | | [optional] [default to null] | | **permissions** | [**DirectoryLdapPermissions**](DirectoryLdapPermissions.md) | | [optional] [default to null] | diff --git a/jira/Models/ApplicationLinkModel.md b/jira/Models/ApplicationLinkModel.md index a7c24655..485e73c8 100644 --- a/jira/Models/ApplicationLinkModel.md +++ b/jira/Models/ApplicationLinkModel.md @@ -4,14 +4,15 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **uuid** | **UUID** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | -| **type** | **String** | | [default to null] | -| **displayUrl** | **URI** | | [default to null] | -| **rpcUrl** | **URI** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | +| **type** | **String** | | [optional] [default to null] | +| **displayUrl** | **URI** | | [optional] [default to null] | +| **rpcUrl** | **URI** | | [optional] [default to null] | | **outgoingAuthType** | **String** | | [optional] [default to null] | | **incomingAuthType** | **String** | | [optional] [default to null] | | **primary** | **Boolean** | | [optional] [default to null] | | **status** | **String** | | [optional] [default to null] | +| **ignoreSetupErrors** | **Boolean** | | [optional] [default to null] | [[Back to Model list]](../README.md#documentation-for-models) [[Back to API list]](../README.md#documentation-for-api-endpoints) [[Back to README]](../README.md) diff --git a/jira/Models/DirectoryCrowdModel.md b/jira/Models/DirectoryCrowdModel.md index e1dad078..a60141f5 100644 --- a/jira/Models/DirectoryCrowdModel.md +++ b/jira/Models/DirectoryCrowdModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **server** | [**DirectoryCrowdServer**](DirectoryCrowdServer.md) | | [optional] [default to null] | | **permissions** | [**DirectoryCrowdPermissions**](DirectoryCrowdPermissions.md) | | [optional] [default to null] | | **advanced** | [**DirectoryCrowdAdvanced**](DirectoryCrowdAdvanced.md) | | [optional] [default to null] | diff --git a/jira/Models/DirectoryDelegatingModel.md b/jira/Models/DirectoryDelegatingModel.md index 2d564d80..37b919ae 100644 --- a/jira/Models/DirectoryDelegatingModel.md +++ b/jira/Models/DirectoryDelegatingModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **server** | [**DirectoryLdapServer**](DirectoryLdapServer.md) | | [optional] [default to null] | | **permissions** | [**DirectoryPermissions**](DirectoryPermissions.md) | | [optional] [default to null] | | **advanced** | [**DirectoryInternalAdvanced**](DirectoryInternalAdvanced.md) | | [optional] [default to null] | diff --git a/jira/Models/DirectoryGenericModel.md b/jira/Models/DirectoryGenericModel.md index cecdeb75..42a62869 100644 --- a/jira/Models/DirectoryGenericModel.md +++ b/jira/Models/DirectoryGenericModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **server** | [**DirectoryLdapServer**](DirectoryLdapServer.md) | | [optional] [default to null] | | **permissions** | [**DirectoryLdapPermissions**](DirectoryLdapPermissions.md) | | [optional] [default to null] | | **advanced** | [**DirectoryInternalAdvanced**](DirectoryInternalAdvanced.md) | | [optional] [default to null] | diff --git a/jira/Models/DirectoryInternalModel.md b/jira/Models/DirectoryInternalModel.md index 0b983484..bf66d0d5 100644 --- a/jira/Models/DirectoryInternalModel.md +++ b/jira/Models/DirectoryInternalModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **server** | [**DirectoryLdapServer**](DirectoryLdapServer.md) | | [optional] [default to null] | | **permissions** | [**DirectoryPermissions**](DirectoryPermissions.md) | | [optional] [default to null] | | **advanced** | [**DirectoryInternalAdvanced**](DirectoryInternalAdvanced.md) | | [optional] [default to null] | diff --git a/jira/Models/DirectoryLdapModel.md b/jira/Models/DirectoryLdapModel.md index 3cbf6175..818bfcf9 100644 --- a/jira/Models/DirectoryLdapModel.md +++ b/jira/Models/DirectoryLdapModel.md @@ -4,12 +4,13 @@ | Name | Type | Description | Notes | |------------ | ------------- | ------------- | -------------| | **id** | **Long** | | [optional] [default to null] | -| **name** | **String** | | [default to null] | +| **name** | **String** | | [optional] [default to null] | | **description** | **String** | | [optional] [default to null] | | **active** | **Boolean** | | [optional] [default to null] | | **createdDate** | **Date** | | [optional] [default to null] | | **updatedDate** | **Date** | | [optional] [default to null] | | **type** | **String** | | [default to null] | +| **testConnection** | **Boolean** | | [optional] [default to null] | | **server** | [**DirectoryLdapServer**](DirectoryLdapServer.md) | | [optional] [default to null] | | **permissions** | [**DirectoryLdapPermissions**](DirectoryLdapPermissions.md) | | [optional] [default to null] | | **advanced** | [**DirectoryInternalAdvanced**](DirectoryInternalAdvanced.md) | | [optional] [default to null] | diff --git a/jira/README.md b/jira/README.md index c0b6dd26..b569e7f3 100644 --- a/jira/README.md +++ b/jira/README.md @@ -20,7 +20,7 @@ All URIs are relative to *https:///rest/bootstrapi/1* *AuthenticationApi* | [**setAuthenticationSso**](Apis/AuthenticationApi.md#setauthenticationsso) | **PATCH** /authentication/sso | Set authentication SSO configuration | | *DirectoriesApi* | [**deleteDirectories**](Apis/DirectoriesApi.md#deletedirectories) | **DELETE** /directories | Delete all user directories | *DirectoriesApi* | [**getDirectories**](Apis/DirectoriesApi.md#getdirectories) | **GET** /directories | Get all user directories | -*DirectoriesApi* | [**setDirectories**](Apis/DirectoriesApi.md#setdirectories) | **PUT** /directories | Set a list of user directories | +*DirectoriesApi* | [**setDirectories**](Apis/DirectoriesApi.md#setdirectories) | **PUT** /directories | Set directories mapped by their name. | | *DirectoryApi* | [**createDirectory**](Apis/DirectoryApi.md#createdirectory) | **POST** /directory | Create a user directory | *DirectoryApi* | [**deleteDirectory**](Apis/DirectoryApi.md#deletedirectory) | **DELETE** /directory/{id} | Delete a user directory | *DirectoryApi* | [**getDirectory**](Apis/DirectoryApi.md#getdirectory) | **GET** /directory/{id} | Get a user directory | diff --git a/jira/src/main/java/com/deftdevs/bootstrapi/jira/config/ServiceConfig.java b/jira/src/main/java/com/deftdevs/bootstrapi/jira/config/ServiceConfig.java index 828370aa..bc0b1f91 100644 --- a/jira/src/main/java/com/deftdevs/bootstrapi/jira/config/ServiceConfig.java +++ b/jira/src/main/java/com/deftdevs/bootstrapi/jira/config/ServiceConfig.java @@ -28,7 +28,7 @@ public ApplicationLinksService applicationLinksService() { @Bean public DirectoriesService directoriesService() { - return new DirectoryServiceImpl( + return new DirectoriesServiceImpl( atlassianConfig.crowdDirectoryService()); } diff --git a/jira/src/main/java/com/deftdevs/bootstrapi/jira/service/AuthenticationServiceImpl.java b/jira/src/main/java/com/deftdevs/bootstrapi/jira/service/AuthenticationServiceImpl.java index abedfdd5..9208108a 100644 --- a/jira/src/main/java/com/deftdevs/bootstrapi/jira/service/AuthenticationServiceImpl.java +++ b/jira/src/main/java/com/deftdevs/bootstrapi/jira/service/AuthenticationServiceImpl.java @@ -11,8 +11,6 @@ import com.deftdevs.bootstrapi.jira.model.util.AuthenticationSsoModelUtil; import com.deftdevs.bootstrapi.jira.service.api.JiraAuthenticationService; -import java.util.Comparator; -import java.util.List; import java.util.Map; import java.util.function.Function; import java.util.stream.Collectors; @@ -31,21 +29,19 @@ public AuthenticationServiceImpl( } @Override - public List getAuthenticationIdps() { + public Map getAuthenticationIdps() { return idpConfigService.getIdpConfigs().stream() .map(AuthenticationIdpModelUtil::toAuthenticationIdpModel) - .sorted(authenticationIdpModelComparator) - .collect(Collectors.toList()); + .collect(Collectors.toMap(AbstractAuthenticationIdpModel::getName, Function.identity())); } @Override - public List setAuthenticationIdps( - final List authenticationIdpModels) { + public Map setAuthenticationIdps( + final Map authenticationIdpModels) { - return authenticationIdpModels.stream() + return authenticationIdpModels.values().stream() .map(this::setAuthenticationIdp) - .sorted(authenticationIdpModelComparator) - .collect(Collectors.toList()); + .collect(Collectors.toMap(AbstractAuthenticationIdpModel::getName, Function.identity())); } public AbstractAuthenticationIdpModel setAuthenticationIdp( @@ -92,6 +88,4 @@ IdpConfig findIdpConfigByName( return idpConfigsByName.get(name); } - static Comparator authenticationIdpModelComparator = (a1, a2) -> a1.getName().compareToIgnoreCase(a2.getName()); - } diff --git a/jira/src/main/java/com/deftdevs/bootstrapi/jira/service/DirectoryServiceImpl.java b/jira/src/main/java/com/deftdevs/bootstrapi/jira/service/DirectoriesServiceImpl.java similarity index 59% rename from jira/src/main/java/com/deftdevs/bootstrapi/jira/service/DirectoryServiceImpl.java rename to jira/src/main/java/com/deftdevs/bootstrapi/jira/service/DirectoriesServiceImpl.java index d024bf37..38c90f74 100644 --- a/jira/src/main/java/com/deftdevs/bootstrapi/jira/service/DirectoryServiceImpl.java +++ b/jira/src/main/java/com/deftdevs/bootstrapi/jira/service/DirectoriesServiceImpl.java @@ -10,41 +10,36 @@ import com.deftdevs.bootstrapi.commons.exception.web.ServiceUnavailableException; import com.deftdevs.bootstrapi.commons.model.AbstractDirectoryModel; import com.deftdevs.bootstrapi.commons.model.DirectoryCrowdModel; -import com.deftdevs.bootstrapi.commons.service.api.DirectoriesService; +import com.deftdevs.bootstrapi.commons.service.AbstractDirectoriesService; import com.deftdevs.bootstrapi.jira.model.util.DirectoryModelUtil; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import java.util.ArrayList; -import java.util.List; import java.util.Map; +import java.util.Set; import java.util.function.Function; import java.util.stream.Collectors; import static java.lang.String.format; -public class DirectoryServiceImpl implements DirectoriesService { +public class DirectoriesServiceImpl extends AbstractDirectoriesService { - private static final Logger log = LoggerFactory.getLogger(DirectoryServiceImpl.class); + private static final Logger log = LoggerFactory.getLogger(DirectoriesServiceImpl.class); public static final int RETRY_AFTER_IN_SECONDS = 5; private final CrowdDirectoryService crowdDirectoryService; - public DirectoryServiceImpl( + public DirectoriesServiceImpl( final CrowdDirectoryService crowdDirectoryService) { this.crowdDirectoryService = crowdDirectoryService; } @Override - public List getDirectories() { - List beans = new ArrayList<>(); - for (Directory directory : crowdDirectoryService.findAllDirectories()) { - AbstractDirectoryModel crowdModel; - crowdModel = DirectoryModelUtil.toDirectoryModel(directory); - beans.add(crowdModel); - } - return beans; + public Map getDirectories() { + return crowdDirectoryService.findAllDirectories().stream() + .map(DirectoryModelUtil::toDirectoryModel) + .collect(Collectors.toMap(AbstractDirectoryModel::getName, Function.identity())); } @Override @@ -54,41 +49,27 @@ public AbstractDirectoryModel getDirectory(long id) { } @Override - public List setDirectories( - List directoryModels, boolean testConnection) { - - final Map existingDirectoriesByName = crowdDirectoryService.findAllDirectories().stream() - .collect(Collectors.toMap(Directory::getName, Function.identity())); - - for (AbstractDirectoryModel directoryRequestModel : directoryModels) { - if (directoryRequestModel instanceof DirectoryCrowdModel) { - DirectoryCrowdModel crowdRequestModel = (DirectoryCrowdModel) directoryRequestModel; - - if (existingDirectoriesByName.containsKey(crowdRequestModel.getName())) { - setDirectory(existingDirectoriesByName.get(crowdRequestModel.getName()).getId(), crowdRequestModel, testConnection); - } else { - addDirectory(crowdRequestModel, testConnection); - } - } else { - throw new BadRequestException(format("Updating directory type '%s' is not supported (yet)", directoryRequestModel.getClass())); - } - }; - - return getDirectories(); + public AbstractDirectoryModel setDirectory( + final long id, + final AbstractDirectoryModel directoryModel) { + if (directoryModel instanceof DirectoryCrowdModel) { + return setDirectoryCrowd(id, (DirectoryCrowdModel) directoryModel); + } else { + throw new BadRequestException(format("Setting directory type '%s' is not supported (yet)", directoryModel.getClass())); + } } @Override - public AbstractDirectoryModel setDirectory(long id, AbstractDirectoryModel abstractDirectoryModel, boolean testConnection) { - if (abstractDirectoryModel instanceof DirectoryCrowdModel) { - return setDirectoryCrowd(id, (DirectoryCrowdModel) abstractDirectoryModel, testConnection); - } else { - throw new BadRequestException(format("Setting directory type '%s' is not supported (yet)", abstractDirectoryModel.getClass())); - } + protected Set> getSupportedClassesForUpdate() { + return Set.of(DirectoryCrowdModel.class); } - private AbstractDirectoryModel setDirectoryCrowd(long id, DirectoryCrowdModel crowdModel, boolean testConnection) { + private AbstractDirectoryModel setDirectoryCrowd( + final long id, + final DirectoryCrowdModel crowdModel) { + Directory existingDirectory = findDirectory(id); - Directory directory = validateAndCreateDirectoryConfig(crowdModel, testConnection); + Directory directory = validateAndCreateDirectoryConfig(crowdModel); ImmutableDirectory.Builder directoryBuilder = ImmutableDirectory.newBuilder(existingDirectory); @@ -113,19 +94,23 @@ private AbstractDirectoryModel setDirectoryCrowd(long id, DirectoryCrowdModel cr } @Override - public AbstractDirectoryModel addDirectory(AbstractDirectoryModel abstractDirectoryModel, boolean testConnection) { - if (abstractDirectoryModel instanceof DirectoryCrowdModel) { - DirectoryCrowdModel crowdModel = (DirectoryCrowdModel) abstractDirectoryModel; - Directory directory = validateAndCreateDirectoryConfig(crowdModel, testConnection); + public AbstractDirectoryModel addDirectory( + final AbstractDirectoryModel directoryModel) { + + if (directoryModel instanceof DirectoryCrowdModel) { + DirectoryCrowdModel crowdModel = (DirectoryCrowdModel) directoryModel; + Directory directory = validateAndCreateDirectoryConfig(crowdModel); Directory addedDirectory = crowdDirectoryService.addDirectory(directory); return DirectoryModelUtil.toDirectoryModel(addedDirectory); } else { - throw new BadRequestException(format("Adding directory type '%s' is not supported (yet)", abstractDirectoryModel.getClass())); + throw new BadRequestException(format("Adding directory type '%s' is not supported (yet)", directoryModel.getClass())); } } @Override - public void deleteDirectories(boolean force) { + public void deleteDirectories( + final boolean force) { + if (!force) { throw new BadRequestException("'force = true' must be supplied to delete all entries"); } else { @@ -140,7 +125,8 @@ public void deleteDirectories(boolean force) { } @Override - public void deleteDirectory(long id) { + public void deleteDirectory( + final long id) { //ensure the directory exists findDirectory(id); @@ -153,7 +139,9 @@ public void deleteDirectory(long id) { } } - private Directory findDirectory(long id) { + private Directory findDirectory( + final long id) { + Directory directory = crowdDirectoryService.findDirectoryById(id); if (directory == null) { throw new NotFoundException(String.format("directory with id '%s' was not found!", id)); @@ -161,14 +149,18 @@ private Directory findDirectory(long id) { return directory; } - private Directory validateAndCreateDirectoryConfig(DirectoryCrowdModel crowdModel, boolean testConnection) { + private Directory validateAndCreateDirectoryConfig( + final DirectoryCrowdModel crowdModel) { + Directory directory = DirectoryModelUtil.toDirectory(crowdModel); String directoryName = crowdModel.getName(); - if (testConnection) { + + if (Boolean.TRUE.equals(crowdModel.getTestConnection())) { log.debug("testing user directory connection for {}", directoryName); crowdDirectoryService.testConnection(directory); } + return directory; } -} \ No newline at end of file +} diff --git a/jira/src/test/java/com/deftdevs/bootstrapi/jira/service/AuthenticationServiceTest.java b/jira/src/test/java/com/deftdevs/bootstrapi/jira/service/AuthenticationServiceTest.java index 24469869..275f4805 100644 --- a/jira/src/test/java/com/deftdevs/bootstrapi/jira/service/AuthenticationServiceTest.java +++ b/jira/src/test/java/com/deftdevs/bootstrapi/jira/service/AuthenticationServiceTest.java @@ -1,6 +1,10 @@ package com.deftdevs.bootstrapi.jira.service; -import com.atlassian.plugins.authentication.api.config.*; +import com.atlassian.plugins.authentication.api.config.IdpConfig; +import com.atlassian.plugins.authentication.api.config.IdpConfigService; +import com.atlassian.plugins.authentication.api.config.ImmutableSsoConfig; +import com.atlassian.plugins.authentication.api.config.SsoConfig; +import com.atlassian.plugins.authentication.api.config.SsoConfigService; import com.atlassian.plugins.authentication.api.config.oidc.OidcConfig; import com.atlassian.plugins.authentication.api.config.saml.SamlConfig; import com.deftdevs.bootstrapi.commons.exception.web.BadRequestException; @@ -14,14 +18,20 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; -import java.util.stream.Collectors; +import java.util.Map; -import static org.junit.jupiter.api.Assertions.*; +import static org.junit.jupiter.api.Assertions.assertEquals; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.*; +import static org.mockito.Mockito.doAnswer; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; @ExtendWith(MockitoExtension.class) class AuthenticationServiceTest { @@ -45,10 +55,8 @@ void testGetAuthenticationIdps() { final SamlConfig samlConfig = SamlConfig.builder().setName("saml").build(); doReturn(Arrays.asList(oidcConfig, samlConfig)).when(idpConfigService).getIdpConfigs(); - final List authenticationIdpModels = authenticationService.getAuthenticationIdps(); - final List names = authenticationIdpModels.stream() - .map(AbstractAuthenticationIdpModel::getName) - .collect(Collectors.toList()); + final Map authenticationIdpModels = authenticationService.getAuthenticationIdps(); + final List names = new ArrayList<>(authenticationIdpModels.keySet()); assertTrue(names.contains(oidcConfig.getName())); assertTrue(names.contains(samlConfig.getName())); } @@ -56,33 +64,40 @@ void testGetAuthenticationIdps() { @Test void testSetAuthenticationIdpsWithCreate() { final AuthenticationIdpOidcModel authenticationIdpOidcModel = AuthenticationIdpOidcModel.EXAMPLE_1; - final List authenticationIdpModels = Collections.singletonList(authenticationIdpOidcModel); + final Map authenticationIdpModels = Collections.singletonMap( + authenticationIdpOidcModel.getName(), authenticationIdpOidcModel); doAnswer(invocation -> invocation.getArgument(0)).when(idpConfigService).addIdpConfig(any()); - final List resultAuthenticationIdpModels = authenticationService.setAuthenticationIdps(authenticationIdpModels); + final Map resultAuthenticationIdpModels = authenticationService.setAuthenticationIdps(authenticationIdpModels); verify(idpConfigService, times(1)).addIdpConfig(any()); - assertEquals(authenticationIdpOidcModel.getId(), resultAuthenticationIdpModels.iterator().next().getId()); - assertEquals(authenticationIdpOidcModel.getName(), resultAuthenticationIdpModels.iterator().next().getName()); + + final AbstractAuthenticationIdpModel resultAuthenticationIdpModel = resultAuthenticationIdpModels.values().iterator().next(); + assertEquals(authenticationIdpOidcModel.getId(), resultAuthenticationIdpModel.getId()); + assertEquals(authenticationIdpOidcModel.getName(), resultAuthenticationIdpModel.getName()); } @Test void testSetAuthenticationIdpsWithUpdate() { final AuthenticationIdpOidcModel authenticationIdpOidcModel = AuthenticationIdpOidcModel.EXAMPLE_1; - final List authenticationIdpModels = Collections.singletonList(authenticationIdpOidcModel); + final Map authenticationIdpModels = Collections.singletonMap( + authenticationIdpOidcModel.getName(), authenticationIdpOidcModel); final IdpConfig idpConfig = AuthenticationIdpModelUtil.toIdpConfig(authenticationIdpOidcModel); doReturn(Collections.singletonList(idpConfig)).when(idpConfigService).getIdpConfigs(); doAnswer(invocation -> invocation.getArgument(0)).when(idpConfigService).updateIdpConfig(any()); - final List resultAuthenticationIdpModels = authenticationService.setAuthenticationIdps(authenticationIdpModels); + final Map resultAuthenticationIdpModels = authenticationService.setAuthenticationIdps(authenticationIdpModels); verify(idpConfigService, times(1)).updateIdpConfig(any()); - assertEquals(authenticationIdpOidcModel.getId(), resultAuthenticationIdpModels.iterator().next().getId()); - assertEquals(authenticationIdpOidcModel.getName(), resultAuthenticationIdpModels.iterator().next().getName()); + + final AbstractAuthenticationIdpModel resultAuthenticationIdpModel = resultAuthenticationIdpModels.values().iterator().next(); + assertEquals(authenticationIdpOidcModel.getId(), resultAuthenticationIdpModel.getId()); + assertEquals(authenticationIdpOidcModel.getName(), resultAuthenticationIdpModel.getName()); } @Test void testSetAuthenticationIdpsNameNull() { final AuthenticationIdpOidcModel authenticationIdpOidcModel = new AuthenticationIdpOidcModel(); - final List authenticationIdpModels = Collections.singletonList(authenticationIdpOidcModel); + final Map authenticationIdpModels = Collections.singletonMap( + authenticationIdpOidcModel.getName(), authenticationIdpOidcModel); assertThrows(BadRequestException.class, () -> { authenticationService.setAuthenticationIdps(authenticationIdpModels); @@ -93,7 +108,8 @@ void testSetAuthenticationIdpsNameNull() { void testSetAuthenticationIdpsNameEmpty() { final AuthenticationIdpOidcModel authenticationIdpOidcModel = new AuthenticationIdpOidcModel(); authenticationIdpOidcModel.setName(""); - final List authenticationIdpModels = Collections.singletonList(authenticationIdpOidcModel); + final Map authenticationIdpModels = Collections.singletonMap( + authenticationIdpOidcModel.getName(), authenticationIdpOidcModel); assertThrows(BadRequestException.class, () -> { authenticationService.setAuthenticationIdps(authenticationIdpModels); diff --git a/jira/src/test/java/com/deftdevs/bootstrapi/jira/service/DirectoryServiceTest.java b/jira/src/test/java/com/deftdevs/bootstrapi/jira/service/DirectoryServiceTest.java index bfbfc895..17a308e6 100644 --- a/jira/src/test/java/com/deftdevs/bootstrapi/jira/service/DirectoryServiceTest.java +++ b/jira/src/test/java/com/deftdevs/bootstrapi/jira/service/DirectoryServiceTest.java @@ -35,11 +35,11 @@ class DirectoryServiceTest { @Mock private CrowdDirectoryService crowdDirectoryService; - private DirectoryServiceImpl directoryService; + private DirectoriesServiceImpl directoryService; @BeforeEach public void setup() { - directoryService = new DirectoryServiceImpl(crowdDirectoryService); + directoryService = new DirectoriesServiceImpl(crowdDirectoryService); } @Test @@ -47,8 +47,8 @@ void testGetDirectories() { final Directory directory = createDirectory(); doReturn(Collections.singletonList(directory)).when(crowdDirectoryService).findAllDirectories(); - final List directories = directoryService.getDirectories(); - assertEquals(directories.iterator().next(), DirectoryModelUtil.toDirectoryModel(directory)); + final Map directories = directoryService.getDirectories(); + assertEquals(directories.values().iterator().next(), DirectoryModelUtil.toDirectoryModel(directory)); } @Test @@ -86,7 +86,7 @@ void testSetDirectoriesWithoutExistingDirectory() { final DirectoryCrowdModel directoryModel = (DirectoryCrowdModel) DirectoryModelUtil.toDirectoryModel(directory); directoryModel.getServer().setAppPassword("test"); - directoryService.setDirectories(Collections.singletonList(directoryModel), false); + directoryService.setDirectories(Collections.singletonMap(directoryModel.getName(), directoryModel)); assertTrue(true, "Update Successful"); } @@ -99,8 +99,8 @@ void testSetDirectoriesWithExistingDirectory() { final DirectoryCrowdModel directoryModel = (DirectoryCrowdModel) DirectoryModelUtil.toDirectoryModel(directory); directoryModel.getServer().setAppPassword("test"); - final List directoryAdded = directoryService.setDirectories(Collections.singletonList(directoryModel), false); - assertEquals(directoryAdded.iterator().next().getName(), directoryModel.getName()); + final Map directoryAdded = directoryService.setDirectories(Collections.singletonMap(directoryModel.getName(), directoryModel)); + assertEquals(directoryAdded.values().iterator().next().getName(), directoryModel.getName()); } @Test @@ -112,8 +112,8 @@ void testSetDirectoriesWithConnectionTest() { final DirectoryCrowdModel directoryModel = (DirectoryCrowdModel) DirectoryModelUtil.toDirectoryModel(directory); directoryModel.getServer().setAppPassword("test"); - final List directoryAdded = directoryService.setDirectories(Collections.singletonList(directoryModel), true); - assertEquals(directoryAdded.iterator().next().getName(), directoryModel.getName()); + final Map directoryAdded = directoryService.setDirectories(Collections.singletonMap(directoryModel.getName(), directoryModel)); + assertEquals(directoryAdded.values().iterator().next().getName(), directoryModel.getName()); } @Test @@ -128,7 +128,7 @@ void testSetDirectoryDefault() { directoryModel.setName(null); directoryModel.getServer().setAppPassword("test"); - AbstractDirectoryModel directoryAdded = directoryService.setDirectory(1L, directoryModel, true); + AbstractDirectoryModel directoryAdded = directoryService.setDirectory(1L, directoryModel); assertEquals(directoryModel.getDescription(), directoryAdded.getDescription()); assertEquals(directory.getName(), directoryAdded.getName()); @@ -143,7 +143,7 @@ void testSetDirectoryWithConnectionTest() { DirectoryCrowdModel directoryModel = (DirectoryCrowdModel) DirectoryModelUtil.toDirectoryModel(directory); directoryModel.getServer().setAppPassword("test"); - AbstractDirectoryModel directoryAdded = directoryService.setDirectory(1L, directoryModel, true); + AbstractDirectoryModel directoryAdded = directoryService.setDirectory(1L, directoryModel); assertEquals(directoryModel.getName(), directoryAdded.getName()); assertEquals(directoryModel.getId(), directoryAdded.getId()); @@ -154,7 +154,7 @@ void testSetDirectoryUnsupportedType() { final DirectoryLdapModel directoryLdapModel = new DirectoryLdapModel(); assertThrows(BadRequestException.class, () -> { - directoryService.setDirectory(1L, directoryLdapModel, false); + directoryService.setDirectory(1L, directoryLdapModel); }); } @@ -164,7 +164,7 @@ void testSetDirectoryNotExisting() { final AbstractDirectoryModel directoryModel = DirectoryModelUtil.toDirectoryModel(directory); assertThrows(NotFoundException.class, () -> { - directoryService.setDirectory(1L, directoryModel, false); + directoryService.setDirectory(1L, directoryModel); }); } @@ -177,7 +177,7 @@ void testAddDirectoryUriException() { DirectoryCrowdModel directoryModel = (DirectoryCrowdModel) DirectoryModelUtil.toDirectoryModel(directory); assertThrows(IllegalArgumentException.class, () -> { - directoryService.addDirectory(directoryModel, false); + directoryService.addDirectory(directoryModel); }); } @@ -189,7 +189,7 @@ void testAddDirectory() { DirectoryCrowdModel directoryModel = (DirectoryCrowdModel) DirectoryModelUtil.toDirectoryModel(directory); directoryModel.getServer().setAppPassword("test"); - AbstractDirectoryModel directoryAdded = directoryService.addDirectory(directoryModel, false); + AbstractDirectoryModel directoryAdded = directoryService.addDirectory(directoryModel); assertEquals(directoryAdded.getName(), directoryModel.getName()); assertEquals(directoryAdded.getId(), directoryModel.getId()); } @@ -199,7 +199,7 @@ void testAddDirectoryUnsupportedType() { final DirectoryLdapModel directoryLdapModel = new DirectoryLdapModel(); assertThrows(BadRequestException.class, () -> { - directoryService.addDirectory(directoryLdapModel, false); + directoryService.addDirectory(directoryLdapModel); }); }