From ae69e02562fa2d8a0dc29c333ec0666189e6367b Mon Sep 17 00:00:00 2001
From: Sonia Zorba <sonia.zorba@inaf.it>
Date: Fri, 24 Apr 2020 16:26:55 +0200
Subject: [PATCH] Update on CLI; bugfix in CreateGroupCall; added workaround
 for invited registration trigger

---
 .gitignore                                    |  2 +
 gms-client/gms-cli/gms.properties             |  8 +--
 gms-client/gms-cli/pom.xml                    | 42 +++++------
 .../main/java/it/inaf/ia2/gms/cli/CLI.java    | 69 ++++++++-----------
 .../inaf/ia2/gms/cli/GmsCliApplication.java   | 13 ----
 .../ia2/gms/cli/GmsCliApplicationTests.java   | 16 -----
 .../ia2/gms/client/call/CreateGroupCall.java  |  1 +
 .../manager/InvitedRegistrationManager.java   |  2 +
 .../persistence/InvitedRegistrationDAO.java   | 15 +++-
 9 files changed, 68 insertions(+), 100 deletions(-)
 delete mode 100644 gms-client/gms-cli/src/main/java/it/inaf/ia2/gms/cli/GmsCliApplication.java
 delete mode 100644 gms-client/gms-cli/src/test/java/it/inaf/ia2/gms/cli/GmsCliApplicationTests.java

diff --git a/.gitignore b/.gitignore
index 43b7667..410aba1 100644
--- a/.gitignore
+++ b/.gitignore
@@ -62,3 +62,5 @@ nbactions.xml
 /gms/node/
 
 nb-configuration.xml
+dependency-reduced-pom.xml
+
diff --git a/gms-client/gms-cli/gms.properties b/gms-client/gms-cli/gms.properties
index 846a803..facdd47 100644
--- a/gms-client/gms-cli/gms.properties
+++ b/gms-client/gms-cli/gms.properties
@@ -1,6 +1,2 @@
-#base_url=http://localhost:8081/gms
-#client_id=test
-#client_secret=test
-base_url=https://sso.ia2.inaf.it/gms
-client_id=sso-admin
-client_secret=cXjbauYe8g
+base_url=http://localhost:8082/gms/ws/jwt
+token=eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiIsImtpZCI6IjM0ZmU4MDcwMDVhNTcxMTYifQ.eyJpc3MiOiJzc28uaWEyLmluYWYuaXQiLCJzdWIiOiIyMzg2IiwiaWF0IjoxNTg3NjU5NzYxLCJleHAiOjE1ODc3NDYxNjEsImF1ZCI6ImdtcyJ9.KcXRAciG3ApqlE8MFM8VYW9WAX3hEZb7Vk8jB9uJtWsOMU48ha_Ybb4k_f0nrD2jhOxwaNn2QMxWZuflwCf1N-KiCj5Ff9f8xKOrrXZrl-w1H3_dwtMlIS8t2b0-w0WwRJ7UIhrwVBzmCcWinD3qJhFPzyO2pi-A4aXV57RpJ68VXfALQXeHK0sslrf-RgAU3xWYOgjGTUoGB5BQYC9huA_bZ0eV1HFcancs9pDdoTusqZs8OkPFCJbo7-L5eibsuykqnLHztYdCcP2Vtvtwb0pww-ofWZblIHzoMI8i-ipnfLJETG8Dpc7FrhjCYLw3AEGZg4U1wYTeqG3HRbPXSQ
diff --git a/gms-client/gms-cli/pom.xml b/gms-client/gms-cli/pom.xml
index 2a8a09e..76393e0 100644
--- a/gms-client/gms-cli/pom.xml
+++ b/gms-client/gms-cli/pom.xml
@@ -2,12 +2,6 @@
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
     <modelVersion>4.0.0</modelVersion>
-    <parent>
-        <groupId>org.springframework.boot</groupId>
-        <artifactId>spring-boot-starter-parent</artifactId>
-        <version>2.1.7.RELEASE</version>
-        <relativePath/> <!-- lookup parent from repository -->
-    </parent>
     <groupId>it.inaf.ia2</groupId>
     <artifactId>gms-cli</artifactId>
     <version>0.0.1-SNAPSHOT</version>
@@ -15,34 +9,40 @@
     <description>GMS Command Line Client</description>
 
     <properties>
-        <java.version>1.8</java.version>
+        <maven.compiler.source>12</maven.compiler.source>
+        <maven.compiler.target>12</maven.compiler.target>
+        <java.version>12</java.version>
     </properties>
 
     <dependencies>
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter</artifactId>
-        </dependency>
-
-        <dependency>
-            <groupId>org.springframework.boot</groupId>
-            <artifactId>spring-boot-starter-test</artifactId>
-            <scope>test</scope>
-        </dependency>
         <dependency>
             <groupId>${project.groupId}</groupId>
             <artifactId>gms-client-lib</artifactId>
             <version>1.0-SNAPSHOT</version>
         </dependency>
     </dependencies>
-
     <build>
         <plugins>
             <plugin>
-                <groupId>org.springframework.boot</groupId>
-                <artifactId>spring-boot-maven-plugin</artifactId>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-shade-plugin</artifactId>
+                <version>3.2.3</version>
+                <executions>
+                    <execution>
+                        <phase>package</phase>
+                        <goals>
+                            <goal>shade</goal>
+                        </goals>
+                        <configuration>
+                            <transformers>
+                                <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
+                                    <mainClass>it.inaf.ia2.gms.cli.CLI</mainClass>
+                                </transformer>
+                            </transformers>
+                        </configuration>
+                    </execution>
+                </executions>
             </plugin>
         </plugins>
     </build>
-
 </project>
diff --git a/gms-client/gms-cli/src/main/java/it/inaf/ia2/gms/cli/CLI.java b/gms-client/gms-cli/src/main/java/it/inaf/ia2/gms/cli/CLI.java
index b183e2c..f522fcd 100644
--- a/gms-client/gms-cli/src/main/java/it/inaf/ia2/gms/cli/CLI.java
+++ b/gms-client/gms-cli/src/main/java/it/inaf/ia2/gms/cli/CLI.java
@@ -1,22 +1,22 @@
 package it.inaf.ia2.gms.cli;
 
 import it.inaf.ia2.gms.client.GmsClient;
+import it.inaf.ia2.gms.client.model.Permission;
 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
-import java.util.ArrayList;
-import java.util.List;
 import java.util.Properties;
-import org.springframework.boot.CommandLineRunner;
-import org.springframework.stereotype.Component;
 
-@Component
-public class CLI implements CommandLineRunner {
+public class CLI {
 
     private final GmsClient client;
 
-    public CLI() throws IOException {
+    public static void main(String[] args) throws Exception {
+        new CLI().run(args);
+    }
+
+    private CLI() throws IOException {
 
         File config = new File("gms.properties");
         if (!config.exists()) {
@@ -35,22 +35,15 @@ public class CLI implements CommandLineRunner {
             System.exit(1);
         }
 
-        String clientId = (String) properties.get("client_id");
-        if (clientId == null) {
-            System.err.println("Missing client_id in gms.properties");
-            System.exit(1);
-        }
-
-        String clientSecret = (String) properties.get("client_secret");
-        if (clientSecret == null) {
-            System.err.println("Missing client_secret in gms.properties");
+        String token = (String) properties.get("token");
+        if (token == null) {
+            System.err.println("Missing token in gms.properties");
             System.exit(1);
         }
 
-        client = new GmsClient(baseUrl, clientId, clientSecret);
+        client = new GmsClient(baseUrl).setAccessToken(token);
     }
 
-    @Override
     public void run(String... args) throws Exception {
         if (args.length < 2) {
             displayUsage();
@@ -58,39 +51,43 @@ public class CLI implements CommandLineRunner {
 
         switch (args[0]) {
             case "create-group":
-                client.addGroup(getNames(args, 1));
+                boolean leaf = false;
+                if (args.length > 1) {
+                    leaf = Boolean.parseBoolean(args[2]);
+                }
+                client.createGroup(args[1], leaf);
                 System.out.println("Group created");
                 break;
             case "delete-group":
-                client.removeGroup(getNames(args, 1));
+                client.deleteGroup(args[1]);
                 System.out.println("Group deleted");
                 break;
             case "add-member":
                 if (args.length < 3) {
                     displayUsage();
                 }
-                client.addMember(getNames(args, 1, args.length - 2), args[args.length - 1]);
+                client.addMember(args[1], args[2]);
                 System.out.println("Member added");
                 break;
             case "remove-member":
                 if (args.length < 3) {
                     displayUsage();
                 }
-                client.removeMember(getNames(args, 1, args.length - 2), args[args.length - 1]);
+                client.removeMember(args[1], args[2]);
                 System.out.println("Member removed");
                 break;
             case "add-permission":
                 if (args.length < 4) {
                     displayUsage();
                 }
-                client.addPermission(getNames(args, 1, args.length - 3), args[args.length - 2], args[args.length - 1]);
+                client.addPermission(args[1], args[2], Permission.valueOf(args[3]));
                 System.out.println("Permission added");
                 break;
             case "delete-permission":
                 if (args.length < 4) {
                     displayUsage();
                 }
-                client.removePermission(getNames(args, 1, args.length - 2), args[args.length - 1]);
+                client.removePermission(args[1], args[2]);
                 System.out.println("Permission removed");
                 break;
             default:
@@ -101,24 +98,12 @@ public class CLI implements CommandLineRunner {
 
     private void displayUsage() {
         System.out.println("java -jar gms-client.jar\n"
-                + "    create-group <name1 name2 name3>\n"
-                + "    delete-group <name1 name2 name3>\n"
-                + "    add-member <name1 name2 name3> <user_id>\n"
-                + "    remove-member <name1 name2 name3> <user_id>\n"
-                + "    add-permission <name1 name2 name3> <user_id> <permission>\n"
-                + "    delete-permission <name1 name2 name3> <user_id>");
+                + "    create-group <name1.name2.name3> <leaf>\n"
+                + "    delete-group <name1.name2.name3>\n"
+                + "    add-member <name1.name2.name3> <user_id>\n"
+                + "    remove-member <name1.name2.name3> <user_id>\n"
+                + "    add-permission <name1.name2.name3> <user_id> <permission>\n"
+                + "    delete-permission <name1.name2.name3> <user_id>");
         System.exit(0);
     }
-
-    private List<String> getNames(String[] args, int startIndex) {
-        return getNames(args, startIndex, args.length - 1);
-    }
-
-    private List<String> getNames(String[] args, int startIndex, int endIndex) {
-        List<String> names = new ArrayList<>();
-        for (int i = startIndex; i <= endIndex; i++) {
-            names.add(args[i]);
-        }
-        return names;
-    }
 }
diff --git a/gms-client/gms-cli/src/main/java/it/inaf/ia2/gms/cli/GmsCliApplication.java b/gms-client/gms-cli/src/main/java/it/inaf/ia2/gms/cli/GmsCliApplication.java
deleted file mode 100644
index 005a5b4..0000000
--- a/gms-client/gms-cli/src/main/java/it/inaf/ia2/gms/cli/GmsCliApplication.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package it.inaf.ia2.gms.cli;
-
-import org.springframework.boot.SpringApplication;
-import org.springframework.boot.autoconfigure.SpringBootApplication;
-
-@SpringBootApplication
-public class GmsCliApplication {
-
-	public static void main(String[] args) {
-		SpringApplication.run(GmsCliApplication.class, args);
-	}
-
-}
diff --git a/gms-client/gms-cli/src/test/java/it/inaf/ia2/gms/cli/GmsCliApplicationTests.java b/gms-client/gms-cli/src/test/java/it/inaf/ia2/gms/cli/GmsCliApplicationTests.java
deleted file mode 100644
index 55043e8..0000000
--- a/gms-client/gms-cli/src/test/java/it/inaf/ia2/gms/cli/GmsCliApplicationTests.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package it.inaf.ia2.gms.cli;
-
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.springframework.boot.test.context.SpringBootTest;
-import org.springframework.test.context.junit4.SpringRunner;
-
-@RunWith(SpringRunner.class)
-@SpringBootTest
-public class GmsCliApplicationTests {
-
-	@Test
-	public void contextLoads() {
-	}
-
-}
diff --git a/gms-client/gms-client-lib/src/main/java/it/inaf/ia2/gms/client/call/CreateGroupCall.java b/gms-client/gms-client-lib/src/main/java/it/inaf/ia2/gms/client/call/CreateGroupCall.java
index 3481123..1cbb2e1 100644
--- a/gms-client/gms-client-lib/src/main/java/it/inaf/ia2/gms/client/call/CreateGroupCall.java
+++ b/gms-client/gms-client-lib/src/main/java/it/inaf/ia2/gms/client/call/CreateGroupCall.java
@@ -14,6 +14,7 @@ public class CreateGroupCall extends BaseGmsCall {
 
         HttpRequest groupsRequest = newHttpRequest(completeGroupName)
                 .header("Accept", "text/plain")
+                .header("Content-Type", "application/x-www-form-urlencoded")
                 .POST(BodyPublishers.ofString("leaf=" + leaf))
                 .build();
 
diff --git a/gms/src/main/java/it/inaf/ia2/gms/manager/InvitedRegistrationManager.java b/gms/src/main/java/it/inaf/ia2/gms/manager/InvitedRegistrationManager.java
index b16bec4..73bdea1 100644
--- a/gms/src/main/java/it/inaf/ia2/gms/manager/InvitedRegistrationManager.java
+++ b/gms/src/main/java/it/inaf/ia2/gms/manager/InvitedRegistrationManager.java
@@ -110,6 +110,8 @@ public class InvitedRegistrationManager extends UserAwareComponent {
             }
 
             invitedRegistration.setUserId(getCurrentUserId());
+            // FIXME (workaround): separated update for user and done in order to use triggers
+            invitedRegistrationDAO.setRegistrationUser(invitedRegistration);
             invitedRegistrationDAO.setRegistrationDone(invitedRegistration);
 
             httpSession.removeAttribute(INVITED_REGISTRATION);
diff --git a/gms/src/main/java/it/inaf/ia2/gms/persistence/InvitedRegistrationDAO.java b/gms/src/main/java/it/inaf/ia2/gms/persistence/InvitedRegistrationDAO.java
index f05086f..5fb1057 100644
--- a/gms/src/main/java/it/inaf/ia2/gms/persistence/InvitedRegistrationDAO.java
+++ b/gms/src/main/java/it/inaf/ia2/gms/persistence/InvitedRegistrationDAO.java
@@ -92,9 +92,9 @@ public class InvitedRegistrationDAO {
         return Optional.ofNullable(registration);
     }
 
-    public void setRegistrationDone(InvitedRegistration invitedRegistration) {
+    public void setRegistrationUser(InvitedRegistration invitedRegistration) {
 
-        String sql = "UPDATE invited_registration_request SET \"user\" = ?, done = true WHERE id = ?";
+        String sql = "UPDATE invited_registration_request SET \"user\" = ? WHERE id = ?";
 
         jdbcTemplate.update(conn -> {
             PreparedStatement ps = conn.prepareStatement(sql);
@@ -103,4 +103,15 @@ public class InvitedRegistrationDAO {
             return ps;
         });
     }
+
+    public void setRegistrationDone(InvitedRegistration invitedRegistration) {
+
+        String sql = "UPDATE invited_registration_request SET done = true WHERE id = ?";
+
+        jdbcTemplate.update(conn -> {
+            PreparedStatement ps = conn.prepareStatement(sql);
+            ps.setString(1, invitedRegistration.getId());
+            return ps;
+        });
+    }
 }
-- 
GitLab