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

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


The following commit(s) were added to refs/heads/develop by this push:
     new 923ae04  [DATALAB] -- [BE-ConfigPage]fixed bug with repeated changed 
in config while writing yaml.
     new 22de75f  Merge remote-tracking branch 'origin/develop' into develop
923ae04 is described below

commit 923ae04853037df40de41896478296fbd1c84248
Author: KinashYurii <[email protected]>
AuthorDate: Mon Jul 12 15:16:44 2021 +0300

    [DATALAB] -- [BE-ConfigPage]fixed bug with repeated changed in config while 
writing yaml.
---
 .../datalab/properties/ChangePropertiesConst.java  | 14 ++--
 .../properties/ChangePropertiesService.java        | 83 +++++++++++++++-------
 2 files changed, 64 insertions(+), 33 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 36ec8bd..ea71207 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,15 +23,15 @@ 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 = "/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 SELF_SERVICE_PROP_PATH = 
"services/self-service/self-service.yml";
     String 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 PROVISIONING_SERVICE_PROP_PATH = 
"services/provisioning-service/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 = "/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 GKE_BILLING_PATH = "/root/billing.yaml";
@@ -43,7 +43,7 @@ public interface ChangePropertiesConst {
     String SELF_SERVICE_SUPERVISORCTL_RUN_NAME = " ui ";
     String PROVISIONING_SERVICE_SUPERVISORCTL_RUN_NAME = " provserv ";
     String BILLING_SERVICE_SUPERVISORCTL_RUN_NAME = " billing ";
-    String SECRET_REGEX = "((.*)([sS]ecret(.*)|[pP]assword)): (.*)";
+    String SECRET_REGEX = "((.*)[sS]ecret(.*)|(p|P)assword): (.*)";
     String USER_REGEX = " *(user|username): (.*)";
     String SECRET_REPLACEMENT_FORMAT = " ***********";
     String SUPERVISORCTL_RESTART_SH_COMMAND = "sudo supervisorctl 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 4e488c4..095b78c 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
@@ -28,11 +28,13 @@ import java.io.File;
 import java.io.FileWriter;
 import java.io.IOException;
 import java.nio.charset.Charset;
-import java.util.HashMap;
-import java.util.Map;
+import java.util.*;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import static 
com.epam.datalab.properties.ChangePropertiesConst.DEFAULT_NAME_PLACE;
+import static 
com.epam.datalab.properties.ChangePropertiesConst.DEFAULT_VALUE_PLACE;
+
 @Slf4j
 public class ChangePropertiesService {
 
@@ -104,28 +106,26 @@ 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);
-        Map<String, String> secretsAndUsers = new HashMap<>();
+        List<String> secretsAndUsers = new ArrayList<>();
         final String[] confWithReplacedSecretConf = 
{removeLicence(currentConf)};
         while (passMatcher.find()) {
             String[] secret = passMatcher.group().split(":");
-            if (!(secret[ChangePropertiesConst.DEFAULT_VALUE_PLACE].isEmpty() 
||
-                    
secret[ChangePropertiesConst.DEFAULT_VALUE_PLACE].trim().isEmpty())) {
+            if (!(secret[DEFAULT_VALUE_PLACE].isEmpty() ||
+                    secret[DEFAULT_VALUE_PLACE].trim().isEmpty())) {
 
-                
secretsAndUsers.put(secret[ChangePropertiesConst.DEFAULT_NAME_PLACE],
-                        secret[ChangePropertiesConst.DEFAULT_VALUE_PLACE]);
+                secretsAndUsers.add(secret[DEFAULT_NAME_PLACE] + ":" + 
secret[DEFAULT_VALUE_PLACE]);
             }
         }
         while (userMatcher.find()) {
             String[] user = userMatcher.group().split(":");
-            if (!(user[ChangePropertiesConst.DEFAULT_VALUE_PLACE].isEmpty() ||
-                    
user[ChangePropertiesConst.DEFAULT_VALUE_PLACE].trim().isEmpty()))
-                
secretsAndUsers.put(user[ChangePropertiesConst.DEFAULT_NAME_PLACE],
-                        user[ChangePropertiesConst.DEFAULT_VALUE_PLACE]);
+            if (!(user[DEFAULT_VALUE_PLACE].isEmpty() ||
+                    user[DEFAULT_VALUE_PLACE].trim().isEmpty()))
+                secretsAndUsers.add(user[DEFAULT_NAME_PLACE] + ":" + 
user[DEFAULT_VALUE_PLACE]);
+
         }
-        secretsAndUsers.forEach((key, value) -> {
-            String replacement = key + ":" + value;
-            String toReplace = key + ":" + 
ChangePropertiesConst.SECRET_REPLACEMENT_FORMAT;
-            confWithReplacedSecretConf[0] = 
confWithReplacedSecretConf[0].replace(replacement, toReplace);
+        secretsAndUsers.forEach(x -> {
+            String toReplace = x.split(":")[DEFAULT_NAME_PLACE] + ":" + 
ChangePropertiesConst.SECRET_REPLACEMENT_FORMAT;
+            confWithReplacedSecretConf[0] = 
confWithReplacedSecretConf[0].replace(x, toReplace);
         });
         return confWithReplacedSecretConf[0];
     }
@@ -151,11 +151,11 @@ public class ChangePropertiesService {
     }
 
     private String checkAndReplaceSecretIfEmpty(String newPropFile, String 
oldProf) {
-        Map<String, String> emptySecretsAndUserNames = 
findEmptySecretAndNames(newPropFile);
-        return emptySecretsAndUserNames.isEmpty() ? newPropFile : 
replaceEmptySecret(newPropFile, oldProf, emptySecretsAndUserNames);
+        Map<String, Queue<String>> emptySecretsAndUserNames = 
findEmptySecretAndNames(newPropFile);
+        return emptySecretsAndUserNames.isEmpty() ? newPropFile : 
replaceOldSecret(newPropFile, oldProf, emptySecretsAndUserNames);
     }
 
-    private String replaceEmptySecret(String newPropFile, String oldProf, 
Map<String, String> emptySecrets) {
+    private String replaceOldSecret(String newPropFile, String oldProf, 
Map<String, Queue<String>> emptySecrets) {
         String fileWithReplacedEmptySecrets = newPropFile;
         Matcher oldPassMatcher = 
Pattern.compile(ChangePropertiesConst.SECRET_REGEX).matcher(oldProf);
         Matcher oldUserMatcher = 
Pattern.compile(ChangePropertiesConst.USER_REGEX).matcher(oldProf);
@@ -163,33 +163,64 @@ public class ChangePropertiesService {
         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]),
 oldPassMatcher.group());
+
+                String poll = emptySecrets.get(s[DEFAULT_NAME_PLACE]).poll();
+                if (poll != null) {
+                    poll = poll.replace("*", "\\*");
+                    String old = oldPassMatcher.group();
+                    old = old.replace("$", "\\$");
+                    old = old.replace("{", "\\}");
+                    old = old.replace("}", "\\}");
+                    fileWithReplacedEmptySecrets = 
fileWithReplacedEmptySecrets.replaceFirst(poll, old);
+                }
             }
         }
         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());
+                String poll = emptySecrets.get(s[DEFAULT_NAME_PLACE]).poll();
+                if (poll != null) {
+                    poll = poll.replace("*", "\\*");
+                    String old = oldUserMatcher.group();
+                    old = old.replace("$", "\\$");
+                    old = old.replace("{", "\\}");
+                    old = old.replace("}", "\\}");
+                    fileWithReplacedEmptySecrets = 
fileWithReplacedEmptySecrets.replaceFirst(poll, old);
+                }
             }
         }
         return fileWithReplacedEmptySecrets;
     }
 
-    private Map<String, String> findEmptySecretAndNames(String newPropFile) {
+    private Map<String, Queue<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<>();
+        Map<String, Queue<String>> emptySecrets = new HashMap<>();
         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());
+            if 
(s[DEFAULT_VALUE_PLACE].equals(ChangePropertiesConst.SECRET_REPLACEMENT_FORMAT))
 {
+                if (emptySecrets.get(s[DEFAULT_NAME_PLACE]) == null) {
+                    Queue<String> values = new ArrayDeque<>();
+                    values.add(passMatcher.group());
+                    
emptySecrets.put(s[ChangePropertiesConst.DEFAULT_NAME_PLACE], values);
+                } else {
+                    Queue<String> values = 
emptySecrets.get(s[DEFAULT_NAME_PLACE]);
+                    values.add(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], 
userNameMatcher.group());
+            if 
(s[DEFAULT_VALUE_PLACE].equals(ChangePropertiesConst.SECRET_REPLACEMENT_FORMAT))
 {
+                if (emptySecrets.get(s[DEFAULT_NAME_PLACE]) == null) {
+                    Queue<String> values = new ArrayDeque<>();
+                    values.add(userNameMatcher.group());
+                    
emptySecrets.put(s[ChangePropertiesConst.DEFAULT_NAME_PLACE], values);
+                } else {
+                    Queue<String> values = 
emptySecrets.get(s[DEFAULT_NAME_PLACE]);
+                    values.add(userNameMatcher.group());
+                }
             }
         }
         return emptySecrets;

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to