Add fake user switch to mimick a logged in user; fixes #432
This commit is contained in:
parent
abd7db100d
commit
3bcd255311
5 changed files with 182 additions and 129 deletions
|
@ -20,126 +20,158 @@ the URL-parameters are stated in the part between the `?` and the `#`. There are
|
||||||
Finally, the URL-hash is the part after the `#`. It is `node/1234` in this case.
|
Finally, the URL-hash is the part after the `#`. It is `node/1234` in this case.
|
||||||
|
|
||||||
|
|
||||||
layer-control-toggle
|
backend
|
||||||
----------------------
|
|
||||||
|
|
||||||
Whether or not the layer control is shown The default value is _false_
|
|
||||||
|
|
||||||
|
|
||||||
tab
|
|
||||||
-----
|
|
||||||
|
|
||||||
The tab that is shown in the welcome-message. 0 = the explanation of the theme,1 = OSM-credits, 2 = sharescreen, 3 = more themes, 4 = about mapcomplete (user must be logged in and have >50 changesets) The default value is _0_
|
|
||||||
|
|
||||||
|
|
||||||
z
|
|
||||||
---
|
|
||||||
|
|
||||||
The initial/current zoom level The default value is _0_
|
|
||||||
|
|
||||||
|
|
||||||
lat
|
|
||||||
-----
|
|
||||||
|
|
||||||
The initial/current latitude The default value is _0_
|
|
||||||
|
|
||||||
|
|
||||||
lon
|
|
||||||
-----
|
|
||||||
|
|
||||||
The initial/current longitude of the app The default value is _0_
|
|
||||||
|
|
||||||
|
|
||||||
fs-userbadge
|
|
||||||
--------------
|
|
||||||
|
|
||||||
Disables/Enables the user information pill (userbadge) at the top left. Disabling this disables logging in and thus disables editing all together, effectively putting MapComplete into read-only mode. The default value is _true_
|
|
||||||
|
|
||||||
|
|
||||||
fs-search
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Disables/Enables the search bar The default value is _true_
|
|
||||||
|
|
||||||
|
|
||||||
fs-layers
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Disables/Enables the layer control The default value is _true_
|
|
||||||
|
|
||||||
|
|
||||||
fs-add-new
|
|
||||||
------------
|
|
||||||
|
|
||||||
Disables/Enables the 'add new feature'-popup. (A theme without presets might not have it in the first place) The default value is _true_
|
|
||||||
|
|
||||||
|
|
||||||
fs-welcome-message
|
|
||||||
--------------------
|
|
||||||
|
|
||||||
Disables/enables the help menu or welcome message The default value is _true_
|
|
||||||
|
|
||||||
|
|
||||||
fs-iframe
|
|
||||||
-----------
|
|
||||||
|
|
||||||
Disables/Enables the iframe-popup The default value is _false_
|
|
||||||
|
|
||||||
|
|
||||||
fs-more-quests
|
|
||||||
----------------
|
|
||||||
|
|
||||||
Disables/Enables the 'More Quests'-tab in the welcome message The default value is _true_
|
|
||||||
|
|
||||||
|
|
||||||
fs-share-screen
|
|
||||||
-----------------
|
|
||||||
|
|
||||||
Disables/Enables the 'Share-screen'-tab in the welcome message The default value is _true_
|
|
||||||
|
|
||||||
|
|
||||||
fs-geolocation
|
|
||||||
----------------
|
|
||||||
|
|
||||||
Disables/Enables the geolocation button The default value is _true_
|
|
||||||
|
|
||||||
|
|
||||||
fs-all-questions
|
|
||||||
------------------
|
|
||||||
|
|
||||||
Always show all questions The default value is _false_
|
|
||||||
|
|
||||||
|
|
||||||
test
|
|
||||||
------
|
|
||||||
|
|
||||||
If true, 'dryrun' mode is activated. The app will behave as normal, except that changes to OSM will be printed onto the console instead of actually uploaded to osm.org The default value is _false_
|
|
||||||
|
|
||||||
|
|
||||||
debug
|
|
||||||
-------
|
|
||||||
|
|
||||||
If true, shows some extra debugging help such as all the available tags on every object The default value is _false_
|
|
||||||
|
|
||||||
|
|
||||||
backend
|
|
||||||
---------
|
---------
|
||||||
|
|
||||||
The OSM backend to use - can be used to redirect mapcomplete to the testing backend when using 'osm-test' The default value is _osm_
|
The OSM backend to use - can be used to redirect mapcomplete to the testing backend when using 'osm-test' The default value is _osm_
|
||||||
|
|
||||||
|
|
||||||
custom-css
|
test
|
||||||
|
------
|
||||||
|
|
||||||
|
If true, 'dryrun' mode is activated. The app will behave as normal, except that changes to OSM will be printed onto the console instead of actually uploaded to osm.org The default value is _false_
|
||||||
|
|
||||||
|
|
||||||
|
layout
|
||||||
|
--------
|
||||||
|
|
||||||
|
The layout to load into MapComplete The default value is __
|
||||||
|
|
||||||
|
|
||||||
|
userlayout
|
||||||
------------
|
------------
|
||||||
|
|
||||||
If specified, the custom css from the given link will be loaded additionaly The default value is __
|
If not 'false', a custom (non-official) theme is loaded. This custom layout can be done in multiple ways:
|
||||||
|
|
||||||
|
- The hash of the URL contains a base64-encoded .json-file containing the theme definition
|
||||||
|
- The hash of the URL contains a lz-compressed .json-file, as generated by the custom theme generator
|
||||||
|
- The parameter itself is an URL, in which case that URL will be downloaded. It should point to a .json of a theme The default value is _false_
|
||||||
|
|
||||||
|
|
||||||
background
|
layer-control-toggle
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Whether or not the layer control is shown The default value is _false_
|
||||||
|
|
||||||
|
|
||||||
|
tab
|
||||||
|
-----
|
||||||
|
|
||||||
|
The tab that is shown in the welcome-message. 0 = the explanation of the theme,1 = OSM-credits, 2 = sharescreen, 3 = more themes, 4 = about mapcomplete (user must be logged in and have >50 changesets) The default value is _0_
|
||||||
|
|
||||||
|
|
||||||
|
z
|
||||||
|
---
|
||||||
|
|
||||||
|
The initial/current zoom level The default value is _14_
|
||||||
|
|
||||||
|
|
||||||
|
lat
|
||||||
|
-----
|
||||||
|
|
||||||
|
The initial/current latitude The default value is _51.2095_
|
||||||
|
|
||||||
|
|
||||||
|
lon
|
||||||
|
-----
|
||||||
|
|
||||||
|
The initial/current longitude of the app The default value is _3.2228_
|
||||||
|
|
||||||
|
|
||||||
|
fs-userbadge
|
||||||
|
--------------
|
||||||
|
|
||||||
|
Disables/Enables the user information pill (userbadge) at the top left. Disabling this disables logging in and thus disables editing all together, effectively putting MapComplete into read-only mode. The default value is _true_
|
||||||
|
|
||||||
|
|
||||||
|
fs-search
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Disables/Enables the search bar The default value is _true_
|
||||||
|
|
||||||
|
|
||||||
|
fs-layers
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Disables/Enables the layer control The default value is _true_
|
||||||
|
|
||||||
|
|
||||||
|
fs-add-new
|
||||||
------------
|
------------
|
||||||
|
|
||||||
The id of the background layer to start with The default value is _osm_
|
Disables/Enables the 'add new feature'-popup. (A theme without presets might not have it in the first place) The default value is _true_
|
||||||
|
|
||||||
|
|
||||||
|
fs-welcome-message
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
Disables/enables the help menu or welcome message The default value is _true_
|
||||||
|
|
||||||
|
|
||||||
|
fs-iframe
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Disables/Enables the iframe-popup The default value is _false_
|
||||||
|
|
||||||
|
|
||||||
|
fs-more-quests
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Disables/Enables the 'More Quests'-tab in the welcome message The default value is _true_
|
||||||
|
|
||||||
|
|
||||||
|
fs-share-screen
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Disables/Enables the 'Share-screen'-tab in the welcome message The default value is _true_
|
||||||
|
|
||||||
|
|
||||||
|
fs-geolocation
|
||||||
|
----------------
|
||||||
|
|
||||||
|
Disables/Enables the geolocation button The default value is _true_
|
||||||
|
|
||||||
|
|
||||||
|
fs-all-questions
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Always show all questions The default value is _false_
|
||||||
|
|
||||||
|
|
||||||
|
fs-export
|
||||||
|
-----------
|
||||||
|
|
||||||
|
If set, enables the 'download'-button to download everything as geojson The default value is _false_
|
||||||
|
|
||||||
|
|
||||||
|
fake-user
|
||||||
|
-----------
|
||||||
|
|
||||||
|
If true, 'dryrun' mode is activated and a fake user account is loaded The default value is _false_
|
||||||
|
|
||||||
|
|
||||||
|
debug
|
||||||
|
-------
|
||||||
|
|
||||||
|
If true, shows some extra debugging help such as all the available tags on every object The default value is _false_
|
||||||
|
|
||||||
|
|
||||||
|
custom-css
|
||||||
|
------------
|
||||||
|
|
||||||
|
If specified, the custom css from the given link will be loaded additionaly The default value is __
|
||||||
|
|
||||||
|
|
||||||
|
background
|
||||||
|
------------
|
||||||
|
|
||||||
|
The id of the background layer to start with The default value is _osm_
|
||||||
|
|
||||||
|
|
||||||
|
oauth_token
|
||||||
|
-------------
|
||||||
|
|
||||||
|
Used to complete the login No default value set
|
||||||
layer-<layer-id>
|
layer-<layer-id>
|
||||||
------------------
|
------------------
|
||||||
|
|
||||||
|
|
|
@ -47,6 +47,7 @@ export class OsmConnection {
|
||||||
public auth;
|
public auth;
|
||||||
public userDetails: UIEventSource<UserDetails>;
|
public userDetails: UIEventSource<UserDetails>;
|
||||||
public isLoggedIn: UIEventSource<boolean>
|
public isLoggedIn: UIEventSource<boolean>
|
||||||
|
private fakeUser: boolean;
|
||||||
_dryRun: boolean;
|
_dryRun: boolean;
|
||||||
public preferencesHandler: OsmPreferences;
|
public preferencesHandler: OsmPreferences;
|
||||||
public changesetHandler: ChangesetHandler;
|
public changesetHandler: ChangesetHandler;
|
||||||
|
@ -59,12 +60,15 @@ export class OsmConnection {
|
||||||
url: string
|
url: string
|
||||||
};
|
};
|
||||||
|
|
||||||
constructor(dryRun: boolean, oauth_token: UIEventSource<string>,
|
constructor(dryRun: boolean,
|
||||||
|
fakeUser: boolean,
|
||||||
|
oauth_token: UIEventSource<string>,
|
||||||
// Used to keep multiple changesets open and to write to the correct changeset
|
// Used to keep multiple changesets open and to write to the correct changeset
|
||||||
layoutName: string,
|
layoutName: string,
|
||||||
singlePage: boolean = true,
|
singlePage: boolean = true,
|
||||||
osmConfiguration: "osm" | "osm-test" = 'osm'
|
osmConfiguration: "osm" | "osm-test" = 'osm'
|
||||||
) {
|
) {
|
||||||
|
this.fakeUser = fakeUser;
|
||||||
this._singlePage = singlePage;
|
this._singlePage = singlePage;
|
||||||
this._oauth_config = OsmConnection.oauth_configs[osmConfiguration] ?? OsmConnection.oauth_configs.osm;
|
this._oauth_config = OsmConnection.oauth_configs[osmConfiguration] ?? OsmConnection.oauth_configs.osm;
|
||||||
console.debug("Using backend", this._oauth_config.url)
|
console.debug("Using backend", this._oauth_config.url)
|
||||||
|
@ -72,7 +76,15 @@ export class OsmConnection {
|
||||||
this._iframeMode = Utils.runningFromConsole ? false : window !== window.top;
|
this._iframeMode = Utils.runningFromConsole ? false : window !== window.top;
|
||||||
|
|
||||||
this.userDetails = new UIEventSource<UserDetails>(new UserDetails(this._oauth_config.url), "userDetails");
|
this.userDetails = new UIEventSource<UserDetails>(new UserDetails(this._oauth_config.url), "userDetails");
|
||||||
this.userDetails.data.dryRun = dryRun;
|
this.userDetails.data.dryRun = dryRun || fakeUser;
|
||||||
|
if(fakeUser){
|
||||||
|
const ud = this.userDetails.data;
|
||||||
|
ud.csCount = 5678
|
||||||
|
ud.loggedIn= true;
|
||||||
|
ud.unreadMessages = 0
|
||||||
|
ud.name = "Fake user"
|
||||||
|
ud.totalMessages = 42;
|
||||||
|
}
|
||||||
const self =this;
|
const self =this;
|
||||||
this.isLoggedIn = this.userDetails.map(user => user.loggedIn).addCallback(isLoggedIn => {
|
this.isLoggedIn = this.userDetails.map(user => user.loggedIn).addCallback(isLoggedIn => {
|
||||||
if(self.userDetails.data.loggedIn == false && isLoggedIn == true){
|
if(self.userDetails.data.loggedIn == false && isLoggedIn == true){
|
||||||
|
@ -138,6 +150,10 @@ export class OsmConnection {
|
||||||
}
|
}
|
||||||
|
|
||||||
public AttemptLogin() {
|
public AttemptLogin() {
|
||||||
|
if(this.fakeUser){
|
||||||
|
console.log("AttemptLogin called, but ignored as fakeUser is set")
|
||||||
|
return;
|
||||||
|
}
|
||||||
const self = this;
|
const self = this;
|
||||||
console.log("Trying to log in...");
|
console.log("Trying to log in...");
|
||||||
this.updateAuthObject();
|
this.updateAuthObject();
|
||||||
|
|
25
State.ts
25
State.ts
|
@ -60,7 +60,7 @@ export default class State {
|
||||||
|
|
||||||
public layerUpdater: OverpassFeatureSource;
|
public layerUpdater: OverpassFeatureSource;
|
||||||
|
|
||||||
public osmApiFeatureSource : OsmApiFeatureSource ;
|
public osmApiFeatureSource: OsmApiFeatureSource;
|
||||||
|
|
||||||
|
|
||||||
public filteredLayers: UIEventSource<{
|
public filteredLayers: UIEventSource<{
|
||||||
|
@ -81,7 +81,7 @@ export default class State {
|
||||||
* Keeps track of relations: which way is part of which other way?
|
* Keeps track of relations: which way is part of which other way?
|
||||||
* Set by the overpass-updater; used in the metatagging
|
* Set by the overpass-updater; used in the metatagging
|
||||||
*/
|
*/
|
||||||
public readonly knownRelations = new UIEventSource<Map<string, {role: string, relation: Relation}[]>>(undefined, "Relation memberships")
|
public readonly knownRelations = new UIEventSource<Map<string, { role: string, relation: Relation }[]>>(undefined, "Relation memberships")
|
||||||
|
|
||||||
public readonly featureSwitchUserbadge: UIEventSource<boolean>;
|
public readonly featureSwitchUserbadge: UIEventSource<boolean>;
|
||||||
public readonly featureSwitchSearch: UIEventSource<boolean>;
|
public readonly featureSwitchSearch: UIEventSource<boolean>;
|
||||||
|
@ -96,8 +96,8 @@ export default class State {
|
||||||
public readonly featureSwitchIsDebugging: UIEventSource<boolean>;
|
public readonly featureSwitchIsDebugging: UIEventSource<boolean>;
|
||||||
public readonly featureSwitchShowAllQuestions: UIEventSource<boolean>;
|
public readonly featureSwitchShowAllQuestions: UIEventSource<boolean>;
|
||||||
public readonly featureSwitchApiURL: UIEventSource<string>;
|
public readonly featureSwitchApiURL: UIEventSource<string>;
|
||||||
public readonly featureSwitchEnableExport: UIEventSource<boolean>;
|
public readonly featureSwitchEnableExport: UIEventSource<boolean>;
|
||||||
|
public readonly featureSwitchFakeUser: UIEventSource<boolean>;
|
||||||
|
|
||||||
|
|
||||||
public readonly featurePipeline: FeaturePipeline;
|
public readonly featurePipeline: FeaturePipeline;
|
||||||
|
@ -205,18 +205,22 @@ export default class State {
|
||||||
"Disables/Enables the geolocation button");
|
"Disables/Enables the geolocation button");
|
||||||
this.featureSwitchShowAllQuestions = featSw("fs-all-questions", (layoutToUse) => layoutToUse?.enableShowAllQuestions ?? false,
|
this.featureSwitchShowAllQuestions = featSw("fs-all-questions", (layoutToUse) => layoutToUse?.enableShowAllQuestions ?? false,
|
||||||
"Always show all questions");
|
"Always show all questions");
|
||||||
this.featureSwitchEnableExport = featSw("fs-export",(layoutToUse) => layoutToUse?.enableExportButton ?? false,
|
this.featureSwitchEnableExport = featSw("fs-export", (layoutToUse) => layoutToUse?.enableExportButton ?? false,
|
||||||
"If set, enables the 'download'-button to download everything as geojson")
|
"If set, enables the 'download'-button to download everything as geojson")
|
||||||
|
|
||||||
this.featureSwitchIsTesting = QueryParameters.GetQueryParameter("test", "false",
|
this.featureSwitchIsTesting = QueryParameters.GetQueryParameter("test", "false",
|
||||||
"If true, 'dryrun' mode is activated. The app will behave as normal, except that changes to OSM will be printed onto the console instead of actually uploaded to osm.org")
|
"If true, 'dryrun' mode is activated. The app will behave as normal, except that changes to OSM will be printed onto the console instead of actually uploaded to osm.org")
|
||||||
.map(str => str === "true", [], b => "" + b);
|
.map(str => str === "true", [], b => "" + b);
|
||||||
|
|
||||||
this.featureSwitchIsDebugging = QueryParameters.GetQueryParameter("debug","false",
|
this.featureSwitchFakeUser = QueryParameters.GetQueryParameter("fake-user", "false",
|
||||||
|
"If true, 'dryrun' mode is activated and a fake user account is loaded")
|
||||||
|
.map(str => str === "true", [], b => "" + b);
|
||||||
|
|
||||||
|
this.featureSwitchIsDebugging = QueryParameters.GetQueryParameter("debug", "false",
|
||||||
"If true, shows some extra debugging help such as all the available tags on every object")
|
"If true, shows some extra debugging help such as all the available tags on every object")
|
||||||
.map(str => str === "true", [], b => "" + b)
|
.map(str => str === "true", [], b => "" + b)
|
||||||
|
|
||||||
this.featureSwitchApiURL = QueryParameters.GetQueryParameter("backend","osm",
|
this.featureSwitchApiURL = QueryParameters.GetQueryParameter("backend", "osm",
|
||||||
"The OSM backend to use - can be used to redirect mapcomplete to the testing backend when using 'osm-test'")
|
"The OSM backend to use - can be used to redirect mapcomplete to the testing backend when using 'osm-test'")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -229,18 +233,19 @@ export default class State {
|
||||||
|
|
||||||
|
|
||||||
this.backgroundLayerId = QueryParameters.GetQueryParameter("background",
|
this.backgroundLayerId = QueryParameters.GetQueryParameter("background",
|
||||||
layoutToUse?.defaultBackgroundId ?? "osm",
|
layoutToUse?.defaultBackgroundId ?? "osm",
|
||||||
"The id of the background layer to start with")
|
"The id of the background layer to start with")
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if(Utils.runningFromConsole){
|
if (Utils.runningFromConsole) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
this.osmConnection = new OsmConnection(
|
this.osmConnection = new OsmConnection(
|
||||||
this.featureSwitchIsTesting.data,
|
this.featureSwitchIsTesting.data,
|
||||||
|
this.featureSwitchFakeUser.data,
|
||||||
QueryParameters.GetQueryParameter("oauth_token", undefined,
|
QueryParameters.GetQueryParameter("oauth_token", undefined,
|
||||||
"Used to complete the login"),
|
"Used to complete the login"),
|
||||||
layoutToUse?.id,
|
layoutToUse?.id,
|
||||||
|
|
|
@ -12,7 +12,7 @@ import BaseUIElement from "./UI/BaseUIElement";
|
||||||
import Table from "./UI/Base/Table";
|
import Table from "./UI/Base/Table";
|
||||||
|
|
||||||
|
|
||||||
const connection = new OsmConnection(false, new UIEventSource<string>(undefined), "");
|
const connection = new OsmConnection(false, false, new UIEventSource<string>(undefined), "");
|
||||||
|
|
||||||
let rendered = false;
|
let rendered = false;
|
||||||
|
|
||||||
|
|
|
@ -15,7 +15,7 @@ export default class OsmConnectionSpec extends T {
|
||||||
super("OsmConnectionSpec-test", [
|
super("OsmConnectionSpec-test", [
|
||||||
["login on dev",
|
["login on dev",
|
||||||
() => {
|
() => {
|
||||||
const osmConn = new OsmConnection(false,
|
const osmConn = new OsmConnection(false,false,
|
||||||
new UIEventSource<string>(undefined),
|
new UIEventSource<string>(undefined),
|
||||||
"Unit test",
|
"Unit test",
|
||||||
true,
|
true,
|
||||||
|
|
Loading…
Reference in a new issue