diff --git a/src/main/java/de/bixilon/minosoft/gui/eros/main/account/add/MicrosoftAddController.kt b/src/main/java/de/bixilon/minosoft/gui/eros/main/account/add/MicrosoftAddController.kt index 547cc0fed..6ecb05286 100644 --- a/src/main/java/de/bixilon/minosoft/gui/eros/main/account/add/MicrosoftAddController.kt +++ b/src/main/java/de/bixilon/minosoft/gui/eros/main/account/add/MicrosoftAddController.kt @@ -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() } } } } diff --git a/src/main/java/de/bixilon/minosoft/util/account/microsoft/MicrosoftOAuthUtils.kt b/src/main/java/de/bixilon/minosoft/util/account/microsoft/MicrosoftOAuthUtils.kt index 8c0003249..809602119 100644 --- a/src/main/java/de/bixilon/minosoft/util/account/microsoft/MicrosoftOAuthUtils.kt +++ b/src/main/java/de/bixilon/minosoft/util/account/microsoft/MicrosoftOAuthUtils.kt @@ -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 } }