improve microsoft webview login

This commit is contained in:
Bixilon 2021-08-02 21:44:02 +02:00
parent 906c2cfeaa
commit 04deee09e3
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
2 changed files with 24 additions and 11 deletions

View File

@ -13,11 +13,16 @@
package de.bixilon.minosoft.gui.eros.main.account.add
import de.bixilon.minosoft.Minosoft
import de.bixilon.minosoft.gui.eros.controller.JavaFXWindowController
import de.bixilon.minosoft.gui.eros.dialog.ErosErrorReport.Companion.report
import de.bixilon.minosoft.gui.eros.main.account.AccountController
import de.bixilon.minosoft.gui.eros.util.JavaFXUtil
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.util.KUtil.asResourceLocation
import de.bixilon.minosoft.util.Util
import de.bixilon.minosoft.util.account.microsoft.MicrosoftOAuthUtils
import de.bixilon.minosoft.util.task.pool.DefaultThreadPool
import javafx.application.Platform
import javafx.concurrent.Worker
import javafx.fxml.FXML
@ -25,6 +30,7 @@ import javafx.scene.web.WebView
import javafx.stage.Modality
import java.net.CookieHandler
import java.net.CookieManager
import java.net.URL
class MicrosoftAddController(
@ -50,9 +56,24 @@ class MicrosoftAddController(
webView.engine.loadContent("Loading...")
webView.engine.loadWorker.stateProperty().addListener { _, _, new ->
if (new == Worker.State.SUCCEEDED) {
if (webView.engine.location.startsWith("ms-xal-" + ProtocolDefinition.MICROSOFT_ACCOUNT_APPLICATION_ID)) {
// login is being handled by MicrosoftOAuthUtils. We can go now...
stage.scene.window.hide()
val location = webView.engine.location
if (!location.startsWith("ms-xal-" + ProtocolDefinition.MICROSOFT_ACCOUNT_APPLICATION_ID)) {
return@addListener
}
DefaultThreadPool += {
try {
// ms-xal-00000000402b5328://auth/?code=M.R3_BL2.9c86df10-b29b-480d-9094-d8accb31e4a5
val account = MicrosoftOAuthUtils.loginToMicrosoftAccount(Util.urlQueryToMap(URL(location).query)["code"]!!)
Minosoft.config.config.account.entries[account.id] = account
Minosoft.config.saveToFile()
Platform.runLater { accountController.refreshList() }
} catch (exception: Exception) {
exception.printStackTrace()
exception.report()
}
Platform.runLater { stage.scene.window.hide() }
}
}
}

View File

@ -14,13 +14,11 @@
package de.bixilon.minosoft.util.account.microsoft
import de.bixilon.minosoft.data.accounts.types.MicrosoftAccount
import de.bixilon.minosoft.gui.eros.dialog.ErosErrorReport.Companion.report
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.util.KUtil.asList
import de.bixilon.minosoft.util.KUtil.asUUID
import de.bixilon.minosoft.util.KUtil.toLong
import de.bixilon.minosoft.util.KUtil.unsafeCast
import de.bixilon.minosoft.util.Util
import de.bixilon.minosoft.util.http.HTTP2.postData
import de.bixilon.minosoft.util.http.HTTP2.postJson
import de.bixilon.minosoft.util.logging.Log
@ -136,12 +134,6 @@ object MicrosoftOAuthUtils {
private object LoginURLHandler : URLStreamHandler() {
override fun openConnection(url: URL): URLConnection {
try {
loginToMicrosoftAccount(Util.urlQueryToMap(url.query)["code"]!!)
} catch (exception: Exception) {
exception.printStackTrace()
exception.report()
}
return URLProtocolStreamHandlers.NULL_URL_CONNECTION
}
}