You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@datalab.apache.org by yk...@apache.org on 2021/07/07 12:37:56 UTC

[incubator-datalab] 03/03: [DATALAB-2504] -- fixed problem with wrong write on config page

This is an automated email from the ASF dual-hosted git repository.

ykinash pushed a commit to branch DATATALAB-2504
in repository https://gitbox.apache.org/repos/asf/incubator-datalab.git

commit e213ed49d94855470719ddb5db870385078daffc
Author: KinashYurii <ur...@gmail.com>
AuthorDate: Wed Jul 7 15:37:20 2021 +0300

    [DATALAB-2504] -- fixed problem with wrong write on config page
---
 .../datalab/properties/ChangePropertiesConst.java  |  12 +--
 .../properties/ChangePropertiesService.java        | 100 ++++++++++++++-------
 2 files changed, 76 insertions(+), 36 deletions(-)

diff --git a/services/datalab-webapp-common/src/main/java/com/epam/datalab/properties/ChangePropertiesConst.java b/services/datalab-webapp-common/src/main/java/com/epam/datalab/properties/ChangePropertiesConst.java
index 2cfc997..1fa021c 100644
--- a/services/datalab-webapp-common/src/main/java/com/epam/datalab/properties/ChangePropertiesConst.java
+++ b/services/datalab-webapp-common/src/main/java/com/epam/datalab/properties/ChangePropertiesConst.java
@@ -23,17 +23,17 @@ public interface ChangePropertiesConst {
     String GKE_SELF_SERVICE_PATH = "/root/self-service.yaml";
     String GKE_SELF_SERVICE = "self-service.yaml";
     String SELF_SERVICE = "self-service.yml";
-    //    String SELF_SERVICE_PROP_PATH = "services/self-service/self-service.yml";
-    String SELF_SERVICE_PROP_PATH = "/opt/datalab/conf/self-service.yml";
+        String SELF_SERVICE_PROP_PATH = "services/self-service/self-service.yml";
+//    String SELF_SERVICE_PROP_PATH = "/opt/datalab/conf/self-service.yml";
     String PROVISIONING_SERVICE = "provisioning.yml";
-    //    String PROVISIONING_SERVICE_PROP_PATH = "services/provisioning-service/provisioning.yml";
-    String PROVISIONING_SERVICE_PROP_PATH = "/opt/datalab/conf/provisioning.yml";
+        String PROVISIONING_SERVICE_PROP_PATH = "services/provisioning-service/provisioning.yml";
+//    String PROVISIONING_SERVICE_PROP_PATH = "/opt/datalab/conf/provisioning.yml";
 
     String BILLING_SERVICE = "billing.yml";
+    //    String BILLING_SERVICE_PROP_PATH = "/opt/datalab/conf/billing.yml";
     //    String BILLING_SERVICE_PROP_PATH = "services/billing-gcp/billing.yml";
     //      String BILLING_SERVICE_PROP_PATH = "services/billing-azure/billing.yml";
-//    String BILLING_SERVICE_PROP_PATH = "services/billing-aws/billing.yml";
-    String BILLING_SERVICE_PROP_PATH = "/opt/datalab/conf/billing.yml";
+    String BILLING_SERVICE_PROP_PATH = "services/billing-aws/billing.yml";
     String GKE_BILLING_PATH = "/root/billing.yaml";
     String GKE_BILLING_SERVICE = "billing.yml";
     String RESTART_URL = "config/restart";
diff --git a/services/datalab-webapp-common/src/main/java/com/epam/datalab/properties/ChangePropertiesService.java b/services/datalab-webapp-common/src/main/java/com/epam/datalab/properties/ChangePropertiesService.java
index e4944a5..80b000a 100644
--- a/services/datalab-webapp-common/src/main/java/com/epam/datalab/properties/ChangePropertiesService.java
+++ b/services/datalab-webapp-common/src/main/java/com/epam/datalab/properties/ChangePropertiesService.java
@@ -49,21 +49,39 @@ public class ChangePropertiesService {
         }
     }
 
+
     public void writeFileFromString(String newPropFile, String serviceName, String servicePath) {
+        String oldFile = readFile(serviceName, servicePath);
+        try (BufferedWriter writer = new BufferedWriter(new FileWriter(servicePath))) {
+            try {
+                //            changeCHMODE(serviceName, servicePath, ChangePropertiesConst.DEFAULT_CHMOD, ChangePropertiesConst.WRITE_CHMOD);
+                log.info("Trying to overwrite {}, file for path {} :", serviceName, servicePath);
+                writer.write(addLicence());
+                writer.write(checkAndReplaceSecretIfEmpty(newPropFile, oldFile));
+                log.info("{} overwritten successfully", serviceName);
+                writer.close();
+                //            changeCHMODE(serviceName, servicePath, ChangePropertiesConst.WRITE_CHMOD, ChangePropertiesConst.DEFAULT_CHMOD);
+            } catch (Exception e) {
+                log.error("Failed during overwriting {}", serviceName);
+                writer.write(oldFile);
+                throw new DynamicChangePropertiesException(String.format("Failed during overwriting %s", serviceName));
+            }
+        } catch (IOException e) {
+            log.error("Failed to create writer with path {}", servicePath);
+            throw new DynamicChangePropertiesException(String.format("Failed during overwriting %s", serviceName));
+        }
+    }
+
+    private String readFile(String serviceName, String servicePath) {
+        String oldFile;
         try {
-            String oldFile = FileUtils.readFileToString(new File(servicePath), Charset.defaultCharset());
-            changeCHMODE(serviceName, servicePath, ChangePropertiesConst.DEFAULT_CHMOD, ChangePropertiesConst.WRITE_CHMOD);
-            BufferedWriter writer = new BufferedWriter(new FileWriter(servicePath));
-            log.info("Trying to overwrite {}, file for path {} :", serviceName, servicePath);
-            writer.write(addLicence());
-            writer.write(checkAndReplaceSecretIfEmpty(newPropFile, oldFile));
-            log.info("{} overwritten successfully", serviceName);
-            writer.close();
-            changeCHMODE(serviceName, servicePath, ChangePropertiesConst.WRITE_CHMOD, ChangePropertiesConst.DEFAULT_CHMOD);
+            oldFile = FileUtils.readFileToString(new File(servicePath), Charset.defaultCharset());
         } catch (IOException e) {
-            log.error("Failed during overwriting {}", serviceName);
+            log.error("Failed to read with path {}", servicePath);
             throw new DynamicChangePropertiesException(String.format("Failed during overwriting %s", serviceName));
+
         }
+        return oldFile;
     }
 
     public RestartAnswer restart(RestartForm restartForm) {
@@ -94,24 +112,30 @@ public class ChangePropertiesService {
     private String hideSecretsAndRemoveLicence(String currentConf) {
         Matcher passMatcher = Pattern.compile(ChangePropertiesConst.SECRET_REGEX).matcher(currentConf);
         Matcher userMatcher = Pattern.compile(ChangePropertiesConst.USER_REGEX).matcher(currentConf);
-        List<String> secrets = new ArrayList<>();
-        List<String> users = new ArrayList<>();
+        List<String> secretsAndUsers = new ArrayList<>();
         String confWithReplacedSecretConf = removeLicence(currentConf);
         while (passMatcher.find()) {
             String secret = passMatcher.group().split(":")[ChangePropertiesConst.DEFAULT_VALUE_PLACE];
             if (!(secret.isEmpty() || secret.trim().isEmpty()))
-                secrets.add(secret);
+                secretsAndUsers.add(secret);
         }
         while (userMatcher.find()) {
             String user = userMatcher.group().split(":")[ChangePropertiesConst.DEFAULT_VALUE_PLACE];
             if (!(user.isEmpty() || user.trim().isEmpty()))
-                users.add(user);
+                secretsAndUsers.add(user);
         }
-        for (String secret : secrets) {
-            confWithReplacedSecretConf = confWithReplacedSecretConf.replace(secret, ChangePropertiesConst.SECRET_REPLACEMENT_FORMAT);
-        }
-        for (String user : users) {
-            confWithReplacedSecretConf = confWithReplacedSecretConf.replace(user, ChangePropertiesConst.SECRET_REPLACEMENT_FORMAT);
+        for (String secretOrUser : secretsAndUsers) {
+            int start = confWithReplacedSecretConf.indexOf(secretOrUser);
+            int end = confWithReplacedSecretConf.indexOf(":", start);
+            boolean isTure;
+            try {
+                String s = confWithReplacedSecretConf.substring(start, end);
+                isTure = s.equals(secretOrUser);
+            } catch (StringIndexOutOfBoundsException e) {
+                isTure = true;
+            }
+            if (isTure)
+                confWithReplacedSecretConf = confWithReplacedSecretConf.replace(secretOrUser, ChangePropertiesConst.SECRET_REPLACEMENT_FORMAT);
         }
         return confWithReplacedSecretConf;
     }
@@ -137,29 +161,45 @@ public class ChangePropertiesService {
     }
 
     private String checkAndReplaceSecretIfEmpty(String newPropFile, String oldProf) {
-        Map<String, String> emptySecrets = findEmptySecret(newPropFile);
-        return emptySecrets.isEmpty() ? newPropFile : replaceEmptySecret(newPropFile, oldProf, emptySecrets);
+        Map<String, String> emptySecretsAndUserNames = findEmptySecretAndNames(newPropFile);
+        return emptySecretsAndUserNames.isEmpty() ? newPropFile : replaceEmptySecret(newPropFile, oldProf, emptySecretsAndUserNames);
     }
 
     private String replaceEmptySecret(String newPropFile, String oldProf, Map<String, String> emptySecrets) {
         String fileWithReplacedEmptySecrets = newPropFile;
-        Matcher oldProfMatcher = Pattern.compile(ChangePropertiesConst.SECRET_REGEX).matcher(oldProf);
-        while (oldProfMatcher.find()) {
-            String[] s = oldProfMatcher.group().split(":");
+        Matcher oldPassMatcher = Pattern.compile(ChangePropertiesConst.SECRET_REGEX).matcher(oldProf);
+        Matcher oldUserMatcher = Pattern.compile(ChangePropertiesConst.USER_REGEX).matcher(oldProf);
+
+        while (oldPassMatcher.find()) {
+            String[] s = oldPassMatcher.group().split(":");
             if (emptySecrets.containsKey(s[ChangePropertiesConst.DEFAULT_NAME_PLACE])) {
-                fileWithReplacedEmptySecrets = fileWithReplacedEmptySecrets.replace(emptySecrets.get(s[ChangePropertiesConst.DEFAULT_NAME_PLACE]), oldProfMatcher.group());
+                fileWithReplacedEmptySecrets = fileWithReplacedEmptySecrets.replace(emptySecrets.get(s[ChangePropertiesConst.DEFAULT_NAME_PLACE]), oldPassMatcher.group());
+            }
+        }
+        while (oldUserMatcher.find()) {
+            String[] s = oldUserMatcher.group().split(":");
+            if (emptySecrets.containsKey(s[ChangePropertiesConst.DEFAULT_NAME_PLACE])) {
+                fileWithReplacedEmptySecrets = fileWithReplacedEmptySecrets.replace(emptySecrets.get(s[ChangePropertiesConst.DEFAULT_NAME_PLACE]), oldUserMatcher.group());
             }
         }
         return fileWithReplacedEmptySecrets;
     }
 
-    private Map<String, String> findEmptySecret(String newPropFile) {
-        Matcher newPropFileMatcher = Pattern.compile(ChangePropertiesConst.SECRET_REGEX).matcher(newPropFile);
+    private Map<String, String> findEmptySecretAndNames(String newPropFile) {
+        Matcher passMatcher = Pattern.compile(ChangePropertiesConst.SECRET_REGEX).matcher(newPropFile);
+        Matcher userNameMatcher = Pattern.compile(ChangePropertiesConst.USER_REGEX).matcher(newPropFile);
         Map<String, String> emptySecrets = new HashMap<>();
-        while (newPropFileMatcher.find()) {
-            String[] s = newPropFileMatcher.group().split(":");
+        while (passMatcher.find()) {
+            String[] s = passMatcher.group().split(":");
+            if (s[ChangePropertiesConst.DEFAULT_VALUE_PLACE].equals(ChangePropertiesConst.SECRET_REPLACEMENT_FORMAT)) {
+                emptySecrets.put(s[ChangePropertiesConst.DEFAULT_NAME_PLACE], passMatcher.group());
+            }
+        }
+
+        while (userNameMatcher.find()) {
+            String[] s = userNameMatcher.group().split(":");
             if (s[ChangePropertiesConst.DEFAULT_VALUE_PLACE].equals(ChangePropertiesConst.SECRET_REPLACEMENT_FORMAT)) {
-                emptySecrets.put(s[ChangePropertiesConst.DEFAULT_NAME_PLACE], newPropFileMatcher.group());
+                emptySecrets.put(s[ChangePropertiesConst.DEFAULT_NAME_PLACE], userNameMatcher.group());
             }
         }
         return emptySecrets;

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@datalab.apache.org
For additional commands, e-mail: commits-help@datalab.apache.org