[Markdown] Fix auth error in Google service: Code Challenge must be created with URL encoder

GitOrigin-RevId: f624ed6dcca661d2e83bd3da3b13eb2b57540d53
This commit is contained in:
Elya.Mamedova
2021-10-08 18:06:11 +03:00
committed by intellij-monorepo-bot
parent 924c9cbcd8
commit f5049ace56
3 changed files with 8 additions and 12 deletions

View File

@@ -7,15 +7,9 @@ import java.util.*
object PkceUtils {
fun generateCodeVerifier(): String = DigestUtil.randomToken()
fun generateShaCodeChallenge(codeVerifier: String, withoutPadding: Boolean): String {
fun generateShaCodeChallenge(codeVerifier: String, encoder: Base64.Encoder): String {
val sha = DigestUtil.sha256().digest(codeVerifier.toByteArray())
val encoder =
if (withoutPadding) {
Base64.getEncoder().withoutPadding()
}
else {
Base64.getEncoder()
}
return encoder.encodeToString(sha)
}
}
}

View File

@@ -12,6 +12,7 @@ import com.intellij.util.Url
import com.intellij.util.Urls.newFromEncoded
import org.jetbrains.ide.BuiltInServerManager
import org.jetbrains.ide.RestService
import java.util.*
import java.util.concurrent.CompletableFuture
@Service
@@ -31,7 +32,7 @@ internal class GHOAuthService : OAuthServiceBase<Credentials>() {
private val codeVerifier = PkceUtils.generateCodeVerifier()
private val codeChallenge = PkceUtils.generateShaCodeChallenge(codeVerifier, false)
private val codeChallenge = PkceUtils.generateShaCodeChallenge(codeVerifier, Base64.getEncoder())
override val authorizationCodeUrl: Url
get() = newFromEncoded("http://127.0.0.1:$port/${RestService.PREFIX}/$SERVICE_NAME/authorization_code")

View File

@@ -11,13 +11,14 @@ import com.intellij.util.io.DigestUtil
import org.intellij.plugins.markdown.google.utils.GoogleCredentialUtils
import org.jetbrains.ide.BuiltInServerManager
import org.jetbrains.ide.RestService
import java.util.*
internal class GoogleOAuthRequest(googleAppCred: GoogleCredentialUtils.GoogleAppCredentials) : OAuthRequest<GoogleCredentials> {
private val port: Int get() = BuiltInServerManager.getInstance().port
private val encoder = Base64.getUrlEncoder().withoutPadding()
private val codeVerifier = PkceUtils.generateCodeVerifier()
private val codeChallenge = PkceUtils.generateShaCodeChallenge(codeVerifier, true)
private val codeChallenge = PkceUtils.generateShaCodeChallenge(codeVerifier, encoder)
override val authorizationCodeUrl: Url
get() = Urls.newFromEncoded("http://localhost:${port}/${RestService.PREFIX}/${service<GoogleOAuthService>().name}/authorization_code")