This is an automated email from the ASF dual-hosted git repository. rcordier pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/james-project.git
commit 11765992e2240d801e781665c2a37e03d16e1221 Author: duc91 <duc91....@gmail.com> AuthorDate: Tue Feb 4 11:02:57 2020 +0700 JAMES-3039: Provision a LinShare technical user within James --- .../apache/james/linshare/LinshareExtension.java | 36 +++++++++- .../org/apache/james/linshare/LinshareFixture.java | 7 ++ .../org/apache/james/linshare/LinshareTest.java | 19 ++++++ .../client/TechnicalAccountCreationRequest.java | 76 ++++++++++++++++++++++ .../TechnicalAccountGrantPermissionsRequest.java | 66 +++++++++++++++++++ .../linshare/client/TechnicalAccountResponse.java | 66 +++++++++++++++++++ 6 files changed, 269 insertions(+), 1 deletion(-) diff --git a/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareExtension.java b/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareExtension.java index 488083b..103ef3d 100644 --- a/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareExtension.java +++ b/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareExtension.java @@ -18,17 +18,23 @@ ****************************************************************/ package org.apache.james.linshare; +import static org.apache.james.linshare.LinshareFixture.ADMIN_ACCOUNT; import static org.apache.james.linshare.LinshareFixture.USER_1; import static org.apache.james.linshare.LinshareFixture.USER_CREDENTIAL_MAP; import static org.apache.james.linshare.client.LinshareAPI.Headers.ACCEPT_APPLICATION_JSON; +import static org.apache.james.linshare.client.LinshareAPI.Headers.CONTENT_TYPE_APPLICATION_JSON; import java.util.List; import java.util.Optional; import org.apache.james.linshare.client.Document; import org.apache.james.linshare.client.LinshareAPI; +import org.apache.james.linshare.client.TechnicalAccountCreationRequest; +import org.apache.james.linshare.client.TechnicalAccountGrantPermissionsRequest; +import org.apache.james.linshare.client.TechnicalAccountResponse; import org.apache.james.linshare.client.User; import org.apache.james.utils.FakeSmtp; +import org.junit.jupiter.api.extension.BeforeAllCallback; import org.junit.jupiter.api.extension.BeforeEachCallback; import org.junit.jupiter.api.extension.ExtensionContext; @@ -45,7 +51,7 @@ import feign.jackson.JacksonDecoder; import feign.jackson.JacksonEncoder; import feign.slf4j.Slf4jLogger; -public class LinshareExtension implements BeforeEachCallback { +public class LinshareExtension implements BeforeEachCallback, BeforeAllCallback { private interface LinshareAPIForTesting { @@ -74,9 +80,21 @@ public class LinshareExtension implements BeforeEachCallback { @Headers(ACCEPT_APPLICATION_JSON) List<User> allUsers(); + @RequestLine("GET /linshare/webservice/rest/admin/technical_accounts") + @Headers(ACCEPT_APPLICATION_JSON) + List<TechnicalAccountResponse> allTechnicalAccounts(); + @RequestLine("GET /linshare/webservice/rest/user/v2/received_shares/{documentId}/download") @Headers({ CONTENT_TYPE_APPLICATION_OCTET_STREAM, CONTENT_DISPOSITION_ATTACHMENT }) byte[] downloadShare(@Param("documentId") String documentId, @Param("filename") String filename); + + @RequestLine("POST /linshare/webservice/rest/admin/technical_accounts") + @Headers({ ACCEPT_APPLICATION_JSON, CONTENT_TYPE_APPLICATION_JSON }) + TechnicalAccountResponse createTechnicalAccount(TechnicalAccountCreationRequest accountCreationRequest); + + @RequestLine("PUT /linshare/webservice/rest/admin/technical_accounts") + @Headers({ ACCEPT_APPLICATION_JSON, CONTENT_TYPE_APPLICATION_JSON }) + TechnicalAccountResponse grantTechnicalAccountPermissions(TechnicalAccountGrantPermissionsRequest accountGrantPermissionsRequest); } private final Linshare linshare = LinshareSingleton.singleton; @@ -109,6 +127,22 @@ public class LinshareExtension implements BeforeEachCallback { .downloadShare(document.asString(), filename); } + @Override + public void beforeAll(ExtensionContext extensionContext){ + createTechnicalAccount(TechnicalAccountCreationRequest.defaultAccount()); + } + + private void createTechnicalAccount(TechnicalAccountCreationRequest technicalAccountDTO) { + TechnicalAccountResponse technicalAccountResponse = LinshareAPIForTesting.from(ADMIN_ACCOUNT, linshare).createTechnicalAccount(technicalAccountDTO); + + TechnicalAccountGrantPermissionsRequest technicalAccountGrantPermissionsRequest = new TechnicalAccountGrantPermissionsRequest(technicalAccountResponse); + LinshareAPIForTesting.from(ADMIN_ACCOUNT, linshare).grantTechnicalAccountPermissions(technicalAccountGrantPermissionsRequest); + } + + public List<TechnicalAccountResponse> getAllTechnicalAccounts(LinshareFixture.Credential credential) { + return LinshareAPIForTesting.from(credential, linshare).allTechnicalAccounts(); + } + private void deleteAllUsersDocuments() { LinshareAPIForTesting.from(USER_1, linshare) .allUsers() diff --git a/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareFixture.java b/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareFixture.java index a47e409..1ee6217 100644 --- a/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareFixture.java +++ b/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareFixture.java @@ -84,4 +84,11 @@ public interface LinshareFixture { "\"combinator\": \"and\"," + "\"criteria\": []" + "}"; + + Credential TECHNICAL_ACCOUNT = new Credential("techni...@linshare.org", "Technical"); + Credential ADMIN_ACCOUNT = new Credential("root@localhost.localdomain", "adminlinshare"); + + boolean ACCOUNT_ENABLED = true; + + List<String> TECHNICAL_PERMISSIONS = ImmutableList.of("DOCUMENT_ENTRIES_CREATE"); } diff --git a/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareTest.java b/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareTest.java index 855f5ed..27d55e4 100644 --- a/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareTest.java +++ b/third-party/linshare/src/test/java/org/apache/james/linshare/LinshareTest.java @@ -21,10 +21,17 @@ package org.apache.james.linshare; import static io.restassured.RestAssured.given; import static io.restassured.config.EncoderConfig.encoderConfig; import static io.restassured.config.RestAssuredConfig.newConfig; +import static org.apache.james.linshare.LinshareFixture.ACCOUNT_ENABLED; +import static org.apache.james.linshare.LinshareFixture.TECHNICAL_ACCOUNT; +import static org.apache.james.linshare.LinshareFixture.TECHNICAL_PERMISSIONS; +import static org.assertj.core.api.Assertions.assertThat; import java.nio.charset.StandardCharsets; +import java.util.List; import org.apache.http.HttpStatus; +import org.apache.james.linshare.client.TechnicalAccountResponse; +import org.assertj.core.api.SoftAssertions; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.RegisterExtension; @@ -34,6 +41,7 @@ import io.restassured.builder.RequestSpecBuilder; import io.restassured.http.ContentType; class LinshareTest { + @RegisterExtension static LinshareExtension linshareExtension = new LinshareExtension(); @@ -58,4 +66,15 @@ class LinshareTest { .then() .statusCode(HttpStatus.SC_OK); } + + @Test + void linshareShouldHaveATechnicalAccountConfigured() { + List<TechnicalAccountResponse> technicalAccounts = linshareExtension.getAllTechnicalAccounts(LinshareFixture.ADMIN_ACCOUNT); + + assertThat(technicalAccounts).anySatisfy(account -> SoftAssertions.assertSoftly(softly -> { + softly.assertThat(account.getName()).isEqualTo(TECHNICAL_ACCOUNT.getUsername()); + softly.assertThat(account.getPermissions()).containsOnlyElementsOf(TECHNICAL_PERMISSIONS); + softly.assertThat(account.isEnabled()).isEqualTo(ACCOUNT_ENABLED); + })); + } } diff --git a/third-party/linshare/src/test/java/org/apache/james/linshare/client/TechnicalAccountCreationRequest.java b/third-party/linshare/src/test/java/org/apache/james/linshare/client/TechnicalAccountCreationRequest.java new file mode 100644 index 0000000..ad52803 --- /dev/null +++ b/third-party/linshare/src/test/java/org/apache/james/linshare/client/TechnicalAccountCreationRequest.java @@ -0,0 +1,76 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.linshare.client; + +import static org.apache.james.linshare.LinshareFixture.ACCOUNT_ENABLED; +import static org.apache.james.linshare.LinshareFixture.TECHNICAL_ACCOUNT; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class TechnicalAccountCreationRequest { + + private final String name; + private final String mail; + private final boolean enable; + private final String password; + private final String role; + + public static TechnicalAccountCreationRequest defaultAccount() { + return new TechnicalAccountCreationRequest(TECHNICAL_ACCOUNT.getUsername(), + "techni...@linshare.org", + ACCOUNT_ENABLED, + TECHNICAL_ACCOUNT.getPassword(), + "DELEGATION"); + } + + public TechnicalAccountCreationRequest(String name, + String mail, + boolean enable, + String password, + String role) { + this.name = name; + this.mail = mail; + this.enable = enable; + this.password = password; + this.role = role; + } + + public String getName() { + return name; + } + + public String getMail() { + return mail; + } + + @JsonProperty("enable") + public boolean isEnabled() { + return enable; + } + + public String getPassword() { + return password; + } + + public String getRole() { + return role; + } + +} diff --git a/third-party/linshare/src/test/java/org/apache/james/linshare/client/TechnicalAccountGrantPermissionsRequest.java b/third-party/linshare/src/test/java/org/apache/james/linshare/client/TechnicalAccountGrantPermissionsRequest.java new file mode 100644 index 0000000..9fff36c --- /dev/null +++ b/third-party/linshare/src/test/java/org/apache/james/linshare/client/TechnicalAccountGrantPermissionsRequest.java @@ -0,0 +1,66 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.linshare.client; + +import static org.apache.james.linshare.LinshareFixture.ACCOUNT_ENABLED; +import static org.apache.james.linshare.LinshareFixture.TECHNICAL_PERMISSIONS; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.common.collect.ImmutableList; + +public class TechnicalAccountGrantPermissionsRequest { + + private final String uuid; + private final String mail; + private final String name; + private final List<String> permissions; + private final boolean enable; + + public TechnicalAccountGrantPermissionsRequest(TechnicalAccountResponse technicalAccountResponse) { + this.uuid = technicalAccountResponse.getUuid(); + this.mail = technicalAccountResponse.getMail(); + this.name = technicalAccountResponse.getName(); + this.enable = ACCOUNT_ENABLED; + this.permissions = ImmutableList.copyOf(TECHNICAL_PERMISSIONS); + } + + public String getUuid() { + return uuid; + } + + public String getMail() { + return mail; + } + + public String getName() { + return name; + } + + public List<String> getPermissions() { + return permissions; + } + + @JsonProperty("enable") + public boolean isEnabled() { + return enable; + } +} diff --git a/third-party/linshare/src/test/java/org/apache/james/linshare/client/TechnicalAccountResponse.java b/third-party/linshare/src/test/java/org/apache/james/linshare/client/TechnicalAccountResponse.java new file mode 100644 index 0000000..c30477e --- /dev/null +++ b/third-party/linshare/src/test/java/org/apache/james/linshare/client/TechnicalAccountResponse.java @@ -0,0 +1,66 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.linshare.client; + +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; +import com.google.common.collect.ImmutableList; + +public class TechnicalAccountResponse { + + private final String uuid; + private final boolean enabled; + private final String name; + private final String mail; + private final List<String> permissions; + + public TechnicalAccountResponse(@JsonProperty("uuid") String uuid, + @JsonProperty("enable") boolean enabled, + @JsonProperty("name") String name, + @JsonProperty("mail") String mail, + @JsonProperty("permissions") List<String> permissions) { + this.uuid = uuid; + this.enabled = enabled; + this.mail = mail; + this.name = name; + this.permissions = ImmutableList.copyOf(permissions); + } + + public String getUuid() { + return uuid; + } + + public boolean isEnabled() { + return enabled; + } + + public String getName() { + return name; + } + + public List<String> getPermissions() { + return permissions; + } + + public String getMail() { + return mail; + } +} --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org