From 7aebde78fdd612387623160ec79431f533aa63bf Mon Sep 17 00:00:00 2001
From: Kai Reinhard <K.Reinhard@micromata.de>
Date: Sun, 10 Feb 2019 07:35:59 +0000
Subject: [PATCH] ...

---
 borgbutler-webapp/src/components/views/repos/ConfigureRepoPage.jsx       |   17 +++++++++++------
 borgbutler-webapp/src/components/views/repos/RepoConfigPasswordPanel.jsx |   37 +++++++++++++++++++++++++++----------
 borgbutler-webapp/src/components/views/repos/RepoConfigPanel.jsx         |    6 +++---
 3 files changed, 41 insertions(+), 19 deletions(-)

diff --git a/borgbutler-webapp/src/components/views/repos/ConfigureRepoPage.jsx b/borgbutler-webapp/src/components/views/repos/ConfigureRepoPage.jsx
index d94c4ee..ee7f8d6 100644
--- a/borgbutler-webapp/src/components/views/repos/ConfigureRepoPage.jsx
+++ b/borgbutler-webapp/src/components/views/repos/ConfigureRepoPage.jsx
@@ -19,12 +19,12 @@
     constructor(props) {
         super(props);
         this.handleRepoConfigChange = this.handleRepoConfigChange.bind(this);
+        this.handleInputChange = this.handleInputChange.bind(this);
         this.handleCheckboxChange = this.handleCheckboxChange.bind(this);
         this.setRepoValue = this.setRepoValue.bind(this);
         this.state = {
-            repoConfig: {
-                encryption: 'repoKey'
-            },
+            repoConfig: {},
+            encryption: 'repoKey',
             mode: 'existingRepo',
             localRemote: 'local'
         };
@@ -39,6 +39,11 @@
         this.setState({repoConfig: {...this.state.repoConfig, [variable]: value}})
     }
 
+    handleInputChange = (event) => {
+        event.preventDefault();
+        this.setState({[event.target.name]: event.target.value});
+    };
+
     handleCheckboxChange = event => {
         this.setState({[event.target.name]: event.target.value});
         /*if (event.target.name === 'mode' && event.target.value === 'existingRepo'
@@ -91,9 +96,9 @@
                     <FormLabel length={2}>{'Encryption'}</FormLabel>
                     <FormField length={4}>
                         <FormSelect
-                            value={repoConfig.encryption}
+                            value={this.state.encryption}
                             name={'encryption'}
-                            onChange={this.handleRepoConfigChange}
+                            onChange={this.handleInputChange}
                             hint={'Encryption for the new repository (use repokey if you don\'t know what to choose).'}
                         >
                             <FormOption label={'repokey (SHA256)'} value={'repokey'}/>
@@ -103,7 +108,7 @@
                         </FormSelect>
                     </FormField>
                 </FormGroup>
-                <RepoConfigPasswordPanel encryption={this.state.repoConfig.encryption}
+                <RepoConfigPasswordPanel passwordMethod={this.state.encryption === 'none' ? 'none' : 'yes'}
                                          repoConfig={repoConfig}
                                          handleRepoConfigChange={this.handleRepoConfigChange}
                                          setRepoValue={this.setRepoValue}/>
diff --git a/borgbutler-webapp/src/components/views/repos/RepoConfigPanel.jsx b/borgbutler-webapp/src/components/views/repos/RepoConfigPanel.jsx
index b2a11fd..cf92052 100644
--- a/borgbutler-webapp/src/components/views/repos/RepoConfigPanel.jsx
+++ b/borgbutler-webapp/src/components/views/repos/RepoConfigPanel.jsx
@@ -110,14 +110,14 @@
             />;
         } else if (this.state.repoConfig) {
             const repoConfig = this.state.repoConfig;
-            let encryption = 'undefined'; // Todo
-            const remote = (repoConfig.rsh && repoConfig.rsh.length > 0) || (repoConfig.repo && repoConfig.repo.indexOf('@') >= 0);
+            const remote = (repoConfig.rsh && repoConfig.rsh.length > 0) ||
+                (repoConfig.repo && (repoConfig.repo.indexOf('@') >= 0 || repoConfig.repo.indexOf('ssh://') >= 0));
             content = <React.Fragment>
                 <RepoConfigBasePanel repoConfig={repoConfig}
                                      remote={remote}
                                      handleRepoConfigChange={this.handleRepoConfigChange}
                                      setRepoValue={this.setRepoValue}/>
-                <RepoConfigPasswordPanel encryption={encryption}
+                <RepoConfigPasswordPanel passwordMethod={'auto'}
                                          repoConfig={repoConfig}
                                          handleRepoConfigChange={this.handleRepoConfigChange}
                                          setRepoValue={this.setRepoValue}/>
diff --git a/borgbutler-webapp/src/components/views/repos/RepoConfigPasswordPanel.jsx b/borgbutler-webapp/src/components/views/repos/RepoConfigPasswordPanel.jsx
index 49151d4..cf0054c 100644
--- a/borgbutler-webapp/src/components/views/repos/RepoConfigPasswordPanel.jsx
+++ b/borgbutler-webapp/src/components/views/repos/RepoConfigPasswordPanel.jsx
@@ -14,11 +14,31 @@
 
     constructor(props) {
         super(props);
+        this.handlePasswordMethodChange = this.handlePasswordMethodChange.bind(this);
+        let passwordMethod = this.props.passwordMethod;
+        if (passwordMethod === 'auto') {
+            const repoConfig = this.props.repoConfig;
+            passwordMethod = 'passwordCommand';
+            if (repoConfig.passwordCommand && repoConfig.passwordCommand.length > 0) {
+                if (repoConfig.passwordCommand.indexOf('find-generic-password') > 0) {
+                    passwordMethod = 'macos-keychain';
+                } else if (repoConfig.passwordCommand.indexOf('secret-tool') > 0) {
+                    passwordMethod = 'gnome-keyring';
+                } else if (repoConfig.passwordCommand.indexOf('kwallet') > 0) {
+                    passwordMethod = 'kwallet';
+                } else {
+                    passwordMethod = 'passwordCommand'; // Default.
+                }
+            } else if (repoConfig.passphrase && repoConfig.passphrase.length > 0) {
+                passwordMethod = 'passphrase';
+            } else {
+                passwordMethod = 'passwordCommand'; // Default.
+            }
+        }
         this.state = {
-            passwordMethod: 'passwordCommand',
+            passwordMethod: passwordMethod,
             passwordCreate: null
         };
-        this.handlePasswordMethodChange = this.handlePasswordMethodChange.bind(this);
     }
 
     handlePasswordMethodChange = event => {
@@ -86,13 +106,10 @@
             ['passphrase', 'Passphrase (not recommended)'],
             ['none', 'No password (no encryption, not recommended)']
         ];
-        let encrypted = true;
-        if (this.props.encryption === 'none' || this.state.passwordMethod === 'none') {
-            encrypted = false;
-        }
+        let encrypted = this.props.passwordMethod !== 'none' && this.state.passwordMethod !== 'none';
         return <React.Fragment>
             <FormGroup
-                className={this.props.encryption === 'none' ? 'hidden' : null}
+                className={this.props.passwordMethod === 'none' ? 'hidden' : null}
             >
                 <FormLabel length={2}>{'Password method'}</FormLabel>
                 <FormField length={4}>
@@ -144,7 +161,7 @@
                     <Alert
                         color={'danger'}
                     >
-                        You backup isn't encrpyted! You should ensure, that your destination storage is encrypted
+                        You backup isn't encrypted! You should ensure, that your destination storage is encrypted
                         and protected.
                     </Alert>
                 </FormField>
@@ -157,11 +174,11 @@
     handleRepoConfigChange: PropTypes.func.isRequired,
     setRepoValue: PropTypes.func.isRequired,
     repoConfig: PropTypes.object.isRequired,
-    encryption: PropTypes.string
+    passwordMethod: PropTypes.string
 };
 
 RepoConfigPasswordPanel.defaultProps = {
-    encryption: 'none'
+    passwordMethod: 'auto'
 };
 
 export default RepoConfigPasswordPanel;

--
Gitblit v1.10.0