aboutsummaryrefslogtreecommitdiffstats
path: root/app/src/main/java/com/zeapo/pwdstore/git/config
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/com/zeapo/pwdstore/git/config')
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/git/config/ConnectionMode.kt22
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/git/config/GitSettings.kt115
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/git/config/Protocol.kt20
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/git/config/SshApiSessionFactory.java36
-rw-r--r--app/src/main/java/com/zeapo/pwdstore/git/config/SshjSessionFactory.kt4
5 files changed, 118 insertions, 79 deletions
diff --git a/app/src/main/java/com/zeapo/pwdstore/git/config/ConnectionMode.kt b/app/src/main/java/com/zeapo/pwdstore/git/config/ConnectionMode.kt
deleted file mode 100644
index 6c4524c9..00000000
--- a/app/src/main/java/com/zeapo/pwdstore/git/config/ConnectionMode.kt
+++ /dev/null
@@ -1,22 +0,0 @@
-/*
- * Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved.
- * SPDX-License-Identifier: GPL-3.0-only
- */
-package com.zeapo.pwdstore.git.config
-
-enum class ConnectionMode(val pref: String) {
- SshKey("ssh-key"),
- Password("username/password"),
- OpenKeychain("OpenKeychain"),
- None("None"),
- ;
-
- companion object {
-
- private val map = values().associateBy(ConnectionMode::pref)
- fun fromString(type: String?): ConnectionMode {
- return map[type ?: return SshKey]
- ?: throw IllegalArgumentException("$type is not a valid ConnectionMode")
- }
- }
-}
diff --git a/app/src/main/java/com/zeapo/pwdstore/git/config/GitSettings.kt b/app/src/main/java/com/zeapo/pwdstore/git/config/GitSettings.kt
new file mode 100644
index 00000000..b81a8f8f
--- /dev/null
+++ b/app/src/main/java/com/zeapo/pwdstore/git/config/GitSettings.kt
@@ -0,0 +1,115 @@
+/*
+ * Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved.
+ * SPDX-License-Identifier: GPL-3.0-only
+ */
+package com.zeapo.pwdstore.git.config
+
+import androidx.core.content.edit
+import com.zeapo.pwdstore.Application
+import com.zeapo.pwdstore.utils.PasswordRepository
+import com.zeapo.pwdstore.utils.PreferenceKeys
+import com.zeapo.pwdstore.utils.getEncryptedPrefs
+import com.zeapo.pwdstore.utils.getString
+import com.zeapo.pwdstore.utils.sharedPrefs
+import java.io.File
+import org.eclipse.jgit.transport.URIish
+
+enum class Protocol(val pref: String) {
+ Ssh("ssh://"),
+ Https("https://"),
+ ;
+
+ companion object {
+
+ private val map = values().associateBy(Protocol::pref)
+ fun fromString(type: String?): Protocol {
+ return map[type ?: return Ssh]
+ ?: throw IllegalArgumentException("$type is not a valid Protocol")
+ }
+ }
+}
+
+enum class ConnectionMode(val pref: String) {
+ SshKey("ssh-key"),
+ Password("username/password"),
+ OpenKeychain("OpenKeychain"),
+ None("None"),
+ ;
+
+ companion object {
+
+ private val map = values().associateBy(ConnectionMode::pref)
+ fun fromString(type: String?): ConnectionMode {
+ return map[type ?: return SshKey]
+ ?: throw IllegalArgumentException("$type is not a valid ConnectionMode")
+ }
+ }
+}
+
+object GitSettings {
+
+ private const val DEFAULT_BRANCH = "master"
+
+ private val settings by lazy { Application.instance.sharedPrefs }
+ private val encryptedSettings by lazy { Application.instance.getEncryptedPrefs("git_operation") }
+
+ var protocol
+ get() = Protocol.fromString(settings.getString(PreferenceKeys.GIT_REMOTE_PROTOCOL))
+ set(value) {
+ settings.edit {
+ putString(PreferenceKeys.GIT_REMOTE_PROTOCOL, value.pref)
+ }
+ }
+ var connectionMode
+ get() = ConnectionMode.fromString(settings.getString(PreferenceKeys.GIT_REMOTE_AUTH))
+ set(value) {
+ settings.edit {
+ putString(PreferenceKeys.GIT_REMOTE_AUTH, value.pref)
+ }
+ }
+ var url
+ get() = settings.getString(PreferenceKeys.GIT_REMOTE_URL)
+ private set(value) {
+ require(value != null)
+ settings.edit {
+ putString(PreferenceKeys.GIT_REMOTE_URL, value)
+ }
+ if (PasswordRepository.isInitialized)
+ PasswordRepository.addRemote("origin", value, true)
+ // When the server changes, remote password and host key file should be deleted.
+ encryptedSettings.edit { remove(PreferenceKeys.HTTPS_PASSWORD) }
+ File("${Application.instance.filesDir}/.host_key").delete()
+ }
+ var authorName
+ get() = settings.getString(PreferenceKeys.GIT_CONFIG_AUTHOR_NAME) ?: ""
+ set(value) {
+ settings.edit {
+ putString(PreferenceKeys.GIT_CONFIG_AUTHOR_NAME, value)
+ }
+ }
+ var authorEmail
+ get() = settings.getString(PreferenceKeys.GIT_CONFIG_AUTHOR_EMAIL) ?: ""
+ set(value) {
+ settings.edit {
+ putString(PreferenceKeys.GIT_CONFIG_AUTHOR_EMAIL, value)
+ }
+ }
+ var branch
+ get() = settings.getString(PreferenceKeys.GIT_BRANCH_NAME) ?: DEFAULT_BRANCH
+ set(value) {
+ settings.edit {
+ putString(PreferenceKeys.GIT_BRANCH_NAME, value)
+ }
+ }
+
+ fun updateUrlIfValid(newUrl: String): Boolean {
+ try {
+ URIish(newUrl)
+ } catch (_: Exception) {
+ return false
+ }
+ if (newUrl != url)
+ url = newUrl
+ return true
+ }
+}
diff --git a/app/src/main/java/com/zeapo/pwdstore/git/config/Protocol.kt b/app/src/main/java/com/zeapo/pwdstore/git/config/Protocol.kt
deleted file mode 100644
index 5e172c76..00000000
--- a/app/src/main/java/com/zeapo/pwdstore/git/config/Protocol.kt
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * Copyright © 2014-2020 The Android Password Store Authors. All Rights Reserved.
- * SPDX-License-Identifier: GPL-3.0-only
- */
-package com.zeapo.pwdstore.git.config
-
-enum class Protocol(val pref: String) {
- Ssh("ssh://"),
- Https("https://"),
- ;
-
- companion object {
-
- private val map = values().associateBy(Protocol::pref)
- fun fromString(type: String?): Protocol {
- return map[type ?: return Ssh]
- ?: throw IllegalArgumentException("$type is not a valid Protocol")
- }
- }
-}
diff --git a/app/src/main/java/com/zeapo/pwdstore/git/config/SshApiSessionFactory.java b/app/src/main/java/com/zeapo/pwdstore/git/config/SshApiSessionFactory.java
index aa62fdae..03760741 100644
--- a/app/src/main/java/com/zeapo/pwdstore/git/config/SshApiSessionFactory.java
+++ b/app/src/main/java/com/zeapo/pwdstore/git/config/SshApiSessionFactory.java
@@ -18,18 +18,12 @@ import com.jcraft.jsch.Identity;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.JSchException;
import com.jcraft.jsch.Session;
-import com.jcraft.jsch.UserInfo;
import com.zeapo.pwdstore.R;
import com.zeapo.pwdstore.git.BaseGitActivity;
import com.zeapo.pwdstore.utils.PreferenceKeys;
-import org.eclipse.jgit.errors.UnsupportedCredentialItem;
-import org.eclipse.jgit.transport.CredentialItem;
-import org.eclipse.jgit.transport.CredentialsProvider;
-import org.eclipse.jgit.transport.CredentialsProviderUserInfo;
import org.eclipse.jgit.transport.JschConfigSessionFactory;
import org.eclipse.jgit.transport.OpenSshConfig;
-import org.eclipse.jgit.transport.URIish;
import org.eclipse.jgit.util.Base64;
import org.eclipse.jgit.util.FS;
import org.openintents.ssh.authentication.ISshAuthenticationService;
@@ -52,11 +46,9 @@ public class SshApiSessionFactory extends JschConfigSessionFactory {
*/
public static final int POST_SIGNATURE = 301;
- private final String username;
private final Identity identity;
- public SshApiSessionFactory(String username, Identity identity) {
- this.username = username;
+ public SshApiSessionFactory(Identity identity) {
this.identity = identity;
}
@@ -74,32 +66,6 @@ public class SshApiSessionFactory extends JschConfigSessionFactory {
protected void configure(@NonNull OpenSshConfig.Host hc, Session session) {
session.setConfig("StrictHostKeyChecking", "no");
session.setConfig("PreferredAuthentications", "publickey");
-
- CredentialsProvider provider =
- new CredentialsProvider() {
- @Override
- public boolean isInteractive() {
- return false;
- }
-
- @Override
- public boolean supports(CredentialItem... items) {
- return true;
- }
-
- @Override
- public boolean get(URIish uri, CredentialItem... items)
- throws UnsupportedCredentialItem {
- for (CredentialItem item : items) {
- if (item instanceof CredentialItem.Username) {
- ((CredentialItem.Username) item).setValue(username);
- }
- }
- return true;
- }
- };
- UserInfo userInfo = new CredentialsProviderUserInfo(session, provider);
- session.setUserInfo(userInfo);
}
/**
diff --git a/app/src/main/java/com/zeapo/pwdstore/git/config/SshjSessionFactory.kt b/app/src/main/java/com/zeapo/pwdstore/git/config/SshjSessionFactory.kt
index c35e4a79..066f8ac6 100644
--- a/app/src/main/java/com/zeapo/pwdstore/git/config/SshjSessionFactory.kt
+++ b/app/src/main/java/com/zeapo/pwdstore/git/config/SshjSessionFactory.kt
@@ -95,10 +95,10 @@ abstract class InteractivePasswordFinder : PasswordFinder {
final override fun shouldRetry(resource: Resource<*>?) = true
}
-class SshjSessionFactory(private val username: String, private val authData: SshAuthData, private val hostKeyFile: File) : SshSessionFactory() {
+class SshjSessionFactory(private val authData: SshAuthData, private val hostKeyFile: File) : SshSessionFactory() {
override fun getSession(uri: URIish, credentialsProvider: CredentialsProvider?, fs: FS?, tms: Int): RemoteSession {
- return SshjSession(uri, username, authData, hostKeyFile).connect()
+ return SshjSession(uri, uri.user, authData, hostKeyFile).connect()
}
fun clearCredentials() {