51 lines
1.7 KiB
Kotlin
51 lines
1.7 KiB
Kotlin
package com.jetpackduba.gitnuro.credentials
|
|
|
|
import org.eclipse.jgit.transport.CredentialItem
|
|
import org.eclipse.jgit.transport.CredentialsProvider
|
|
import org.eclipse.jgit.transport.URIish
|
|
|
|
class HttpCredentialsProvider : CredentialsProvider() {
|
|
private val credentialsStateManager = CredentialsStateManager
|
|
|
|
override fun isInteractive(): Boolean {
|
|
return true
|
|
}
|
|
|
|
override fun supports(vararg items: CredentialItem?): Boolean {
|
|
println(items)
|
|
val fields = items.map { credentialItem -> credentialItem?.promptText }
|
|
return if (fields.isEmpty()) {
|
|
true
|
|
} else
|
|
fields.size == 2 &&
|
|
fields.contains("Username") &&
|
|
fields.contains("Password")
|
|
}
|
|
|
|
override fun get(uri: URIish?, vararg items: CredentialItem?): Boolean {
|
|
CredentialsStateManager.updateState(CredentialsState.HttpCredentialsRequested)
|
|
|
|
var credentials = CredentialsStateManager.currentCredentialsState
|
|
while (credentials is CredentialsState.CredentialsRequested) {
|
|
credentials = CredentialsStateManager.currentCredentialsState
|
|
}
|
|
|
|
if (credentials is CredentialsState.HttpCredentialsAccepted) {
|
|
val userItem = items.firstOrNull { it?.promptText == "Username" }
|
|
val passwordItem = items.firstOrNull { it?.promptText == "Password" }
|
|
|
|
if (userItem is CredentialItem.Username &&
|
|
passwordItem is CredentialItem.Password
|
|
) {
|
|
|
|
userItem.value = credentials.user
|
|
passwordItem.value = credentials.password.toCharArray()
|
|
|
|
return true
|
|
}
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
} |