package org.gcube.data.access.fs.external; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URI; import java.net.URL; import java.nio.charset.StandardCharsets; import java.util.HashSet; import java.util.List; import java.util.Set; import java.util.stream.Collectors; import org.gcube.common.security.providers.SecretManagerProvider; import org.gcube.common.security.secrets.CredentialSecret; import org.gcube.common.storagehub.client.dsl.FolderContainer; import org.gcube.common.storagehub.client.dsl.StorageHubClient; import org.gcube.common.storagehub.model.acls.AccessType; import org.gcube.common.storagehub.model.exceptions.StorageHubException; import org.gcube.common.storagehub.model.items.SharedFolder; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; public class CreateUsers { private static StorageHubClient client; private static Logger log = LoggerFactory.getLogger(CreateUsers.class); private String user ="pippo.test"; private String user2 ="lucio.lelii"; private String vreWA ="vre-write-all"; private String vreRO ="vre-read-only"; private String vreWO ="vre-write-owner"; private static final int TEST_USERS_NUMBER = 10; @BeforeClass public static void before() throws Exception{ String address = "localhost"; int port = 8081; URI storagehubUri = new URL(String.format("http://%s:%d/storagehub", address,port)).toURI(); client = new StorageHubClient(storagehubUri); } @Before public void setSecret() { CredentialSecret secret = new CredentialSecret("sg4-test-client", "a156a7db-3b32-4cd5-b27b-2488e0e01698", "/gcube"); SecretManagerProvider.set(secret); } @Test public void initialiseEnvironment() throws Exception { this.createUser(); this.addUserToVREs(); this.createUser2AndAddItToVres(); } //USED TO CREATE TEST USERS final String lexicon = "ABCDEFGHIJKLMNOPQRSTUVWXYZ12345674890"; final java.util.Random rand = new java.util.Random(); // consider using a Map to say whether the identifier is being used or not final Set identifiers = new HashSet(); public String randomIdentifier() { StringBuilder builder = new StringBuilder(); while(builder.toString().length() == 0) { int length = rand.nextInt(5)+5; for(int i = 0; i < length; i++) { builder.append(lexicon.charAt(rand.nextInt(lexicon.length()))); } if(identifiers.contains(builder.toString())) { builder = new StringBuilder(); } } return builder.toString(); } // END @Test public void createTestUsers() throws Exception{ for (int i =0 ; i f.get().getTitle().equals(vreWA)).findFirst().get(); FolderContainer folder = (FolderContainer) vre.list().getContainers().stream().findFirst().get(); System.out.println(folder.get().getTitle()+" "+folder.getAcls()); } @Test public void createUser() throws Exception{ client.createUserAccount(user); } @Test public void removeUserFromGroup() throws Exception{ client.getVreFolderManager(vreWA).removeAdmin(user); client.getVreFolderManager(vreWA).removeUser(user); } @Test public void addUserToVREs() throws Exception{ client.getVreFolderManager(vreWA).createVRE(AccessType.WRITE_ALL, user, false); client.getVreFolderManager(vreWA).setAdmin(user); client.getVreFolderManager(vreRO).createVRE(AccessType.READ_ONLY, user); client.getVreFolderManager(vreRO).setAdmin(user); client.getVreFolderManager(vreWO).createVRE(AccessType.WRITE_OWNER, user); client.getVreFolderManager(vreWO).setAdmin(user); createFolderByAdminInVREWO(); } @Test public void createFolderByAdminInVREWO() throws Exception { client.impersonate(user); retrieveVREbyName(vreWO).newFolder("test created by pippo", ""); } @Test public void createUser2AndAddItToVres() throws Exception{ client.impersonate(user); client.createUserAccount(user2); client.getVreFolderManager(vreWA).addUser(user2); client.getVreFolderManager(vreRO).addUser(user2); client.getVreFolderManager(vreWO).addUser(user2); } @Test public void printVREFoldersAdmin() throws StorageHubException{ System.out.println("launching ....." ); List vreFolders = client.getVREFolders().getContainers().stream().map(c -> ((FolderContainer) c)).collect(Collectors.toList()); for (FolderContainer fc : vreFolders) { System.out.println(fc.get().getTitle()); System.out.println(fc.getAcls()); System.out.println(client.getVreFolderManager(fc.get().getTitle()).getAdmins()); } } @Test public void getVREs() throws Exception{ client.impersonate(user); client.getVREFolders().getItems().stream().map(i -> ((SharedFolder) i)).forEach(s -> System.out.println(s.getDisplayName())); } @Test public void getWsRoot() throws Exception{ client.impersonate(user); client.getWSRoot().list().getItems().forEach(i -> System.out.println(i.getId()+" "+i.getTitle())); } @Test public void download() throws Exception{ client.impersonate(user); try ( InputStream is = client.open("5b5236d2-ec88-49f2-a2c5-04ecf8284191").asFile().download().getStream()){ String text = new BufferedReader( new InputStreamReader(is, StandardCharsets.UTF_8)) .lines() .collect(Collectors.joining("\n")); System.out.println(text); } } @Test public void uploadFile() { client.impersonate(user); try (InputStream is = CreateUsers.class.getResourceAsStream("/test1.jpg")){ client.getWSRoot().uploadFile(is, "test1.jpg", "a test"); } catch (Exception e) { e.printStackTrace(); } } private FolderContainer retrieveVREbyName(String name) throws StorageHubException { List vreFolders = client.getVREFolders().getContainers().stream().map(c -> ((FolderContainer) c)).collect(Collectors.toList()); return vreFolders.stream().filter(c -> ((SharedFolder)c.get()).getDisplayName().equals(name)).findFirst().get(); } @Test public void uploadFileToVREWriteAll() throws StorageHubException{ client.impersonate(user2); try (InputStream is = CreateUsers.class.getResourceAsStream("/test1.jpg")){ retrieveVREbyName(vreWA).uploadFile(is, "test1.jpg", "a test"); } catch (IOException e) { e.printStackTrace(); } } @Test(expected = StorageHubException.class) public void uploadFileToVREReadOnly() throws StorageHubException{ client.impersonate(user2); try (InputStream is = CreateUsers.class.getResourceAsStream("/test1.jpg")){ retrieveVREbyName(vreRO).uploadFile(is, "test1.jpg", "a test"); } catch (IOException e) { e.printStackTrace(); } } @Test public void uploadFileToVREReadOnlyAdmin() throws StorageHubException{ client.impersonate(user); try (InputStream is = CreateUsers.class.getResourceAsStream("/test1.jpg")){ retrieveVREbyName(vreRO).uploadFile(is, "test1.jpg", "a test"); } catch (IOException e) { e.printStackTrace(); } } @Test public void uploadFileToVREWriteOwner() throws StorageHubException{ client.impersonate(user2); try (InputStream is = CreateUsers.class.getResourceAsStream("/test1.jpg")){ retrieveVREbyName(vreWO).uploadFile(is, "test1.jpg", "a test"); } catch (IOException e) { e.printStackTrace(); } } @Test public void removeUser() throws Exception{ client.deleteUserAccount(user); } }