From 3ec83483d8ad70d4c01aefd853d9198cd2d85b08 Mon Sep 17 00:00:00 2001 From: Pieter Vander Vennet Date: Wed, 5 Feb 2025 13:20:51 +0100 Subject: [PATCH] Anrdoid: add 'getToken' to OSM Connection --- app/land.ts | 28 ++++++++++++++++++++++++---- src/Logic/Osm/OsmConnection.ts | 16 ++++++++++++---- 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/app/land.ts b/app/land.ts index fa2ae88af8..65ccc5d58b 100644 --- a/app/land.ts +++ b/app/land.ts @@ -3,22 +3,42 @@ import Constants from "../src/Models/Constants" import { Utils } from "../src/Utils" import { UIEventSource } from "../src/Logic/UIEventSource" import { VariableUiElement } from "../src/UI/Base/VariableUIElement" +import Combine from "../src/UI/Base/Combine" console.log("Authorizing...") const key = Constants.osmAuthConfig.url + "oauth2_state" const st = window.localStorage.getItem(key) console.log("Prev state is", key, st) const tokenSrc = new UIEventSource("") -new VariableUiElement(tokenSrc).AttachTo("token") +const debug = new UIEventSource([]) + +new Combine([ + new VariableUiElement(debug.map(debug => "")), + new VariableUiElement(tokenSrc)]).AttachTo("token") -new OsmConnection().finishLogin(async (_, token: string) => { +const connection = new OsmConnection() +connection.finishLogin(async () => { + let token: string = undefined + let attempt = 0 + do { + await Utils.waitFor(500) + token = connection.getToken() + tokenSrc.set("Trying to get token ("+attempt+")") + attempt++ + + const dbg = [] + Object.keys(localStorage).forEach(key => { + dbg.push(`${key} - ${localStorage.getItem(key)}`); + }) + debug.set(dbg) + + } while (!token) console.log("Login finished, redirecting to passthrough; token is " + token) tokenSrc.set(token) - if(!token){ + if (!token) { tokenSrc.set("ERROR: no token retrieved!") return } - await Utils.waitFor(500) window.location.href = "orgmapcomplete://passthrough.html?oauth_token=" + token }) diff --git a/src/Logic/Osm/OsmConnection.ts b/src/Logic/Osm/OsmConnection.ts index 71784c88ed..c83d7f2b73 100644 --- a/src/Logic/Osm/OsmConnection.ts +++ b/src/Logic/Osm/OsmConnection.ts @@ -278,7 +278,7 @@ export class OsmConnection { Utils.runningFromConsole ? undefined : window.location.href, ) - this.auth.authenticate((err, result) => { + this.auth.authenticate((err) => { if (!err) { this.loadUserInfo() } @@ -564,16 +564,24 @@ export class OsmConnection { /** * To be called by land.html */ - public finishLogin(callback: (previousURL: string, oauth_token: string) => void) { + public finishLogin(callback: (previousURL: string) => void) { this.auth.authenticate(() => { // Fully authed at this point console.log("Authentication successful!") - const oauth_token = QueryParameters.GetQueryParameter("oauth_token", undefined).data ?? window.localStorage.getItem(this._oauth_config.url + "oauth2_access_token") const previousLocation = LocalStorageSource.get("location_before_login") - callback(previousLocation.data, oauth_token) + callback(previousLocation.data) }) } + public getToken(): string { + // https://www.openstreetmap.orgoauth2_access_token + let prefix = this.Backend() + while(prefix.endsWith("/")){ + prefix = prefix.substring(0, prefix.length-2) + } + return QueryParameters.GetQueryParameter(prefix+ "oauth_token", undefined).data ?? window.localStorage.getItem(this._oauth_config.url + "oauth2_access_token") + } + private async loginAndroidPolyfill() { const token = await AndroidPolyfill.requestLoginCodes() console.log("Got login token!", token)