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 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.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.main.account.AccountController
import de.bixilon.minosoft.gui.eros.util.JavaFXUtil import de.bixilon.minosoft.gui.eros.util.JavaFXUtil
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.util.KUtil.asResourceLocation 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.application.Platform
import javafx.concurrent.Worker import javafx.concurrent.Worker
import javafx.fxml.FXML import javafx.fxml.FXML
@ -25,6 +30,7 @@ import javafx.scene.web.WebView
import javafx.stage.Modality import javafx.stage.Modality
import java.net.CookieHandler import java.net.CookieHandler
import java.net.CookieManager import java.net.CookieManager
import java.net.URL
class MicrosoftAddController( class MicrosoftAddController(
@ -50,9 +56,24 @@ class MicrosoftAddController(
webView.engine.loadContent("Loading...") webView.engine.loadContent("Loading...")
webView.engine.loadWorker.stateProperty().addListener { _, _, new -> webView.engine.loadWorker.stateProperty().addListener { _, _, new ->
if (new == Worker.State.SUCCEEDED) { if (new == Worker.State.SUCCEEDED) {
if (webView.engine.location.startsWith("ms-xal-" + ProtocolDefinition.MICROSOFT_ACCOUNT_APPLICATION_ID)) { val location = webView.engine.location
// login is being handled by MicrosoftOAuthUtils. We can go now... if (!location.startsWith("ms-xal-" + ProtocolDefinition.MICROSOFT_ACCOUNT_APPLICATION_ID)) {
stage.scene.window.hide() 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 package de.bixilon.minosoft.util.account.microsoft
import de.bixilon.minosoft.data.accounts.types.MicrosoftAccount 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.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.util.KUtil.asList import de.bixilon.minosoft.util.KUtil.asList
import de.bixilon.minosoft.util.KUtil.asUUID import de.bixilon.minosoft.util.KUtil.asUUID
import de.bixilon.minosoft.util.KUtil.toLong import de.bixilon.minosoft.util.KUtil.toLong
import de.bixilon.minosoft.util.KUtil.unsafeCast 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.postData
import de.bixilon.minosoft.util.http.HTTP2.postJson import de.bixilon.minosoft.util.http.HTTP2.postJson
import de.bixilon.minosoft.util.logging.Log import de.bixilon.minosoft.util.logging.Log
@ -136,12 +134,6 @@ object MicrosoftOAuthUtils {
private object LoginURLHandler : URLStreamHandler() { private object LoginURLHandler : URLStreamHandler() {
override fun openConnection(url: URL): URLConnection { 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 return URLProtocolStreamHandlers.NULL_URL_CONNECTION
} }
} }