From f7f55e8eff8b172d8fd04f095781efa2420b1be6 Mon Sep 17 00:00:00 2001 From: "jeremy@jermolene.com" Date: Sun, 25 Oct 2020 16:33:44 +0000 Subject: [PATCH] Add support for username/password parameters for tm-login message --- core/modules/syncer.js | 44 +++++++++++++------ .../moduletypes/SyncAdaptorModules.tid | 26 +++-------- .../messages/WidgetMessage_ tm-login.tid | 3 +- 3 files changed, 37 insertions(+), 36 deletions(-) diff --git a/core/modules/syncer.js b/core/modules/syncer.js index 45538e306..1ad9c3474 100644 --- a/core/modules/syncer.js +++ b/core/modules/syncer.js @@ -113,8 +113,16 @@ function Syncer(options) { return confirmationMessage; }); // Listen out for login/logout/refresh events in the browser - $tw.rootWidget.addEventListener("tm-login",function() { - self.handleLoginEvent(); + $tw.rootWidget.addEventListener("tm-login",function(event) { + var username = event && event.paramObject && event.paramObject.username, + password = event && event.paramObject && event.paramObject.password; + if(username && password) { + // Login with username and password + self.login(username,password,function() {}); + } else { + // No username and password, so we display a prompt + self.handleLoginEvent(); + } }); $tw.rootWidget.addEventListener("tm-logout",function() { self.handleLogoutEvent(); @@ -400,23 +408,31 @@ Syncer.prototype.handleLoginEvent = function() { var self = this; this.getStatus(function(err,isLoggedIn,username) { if(!err && !isLoggedIn) { - var promptInfo = $tw.passwordPrompt.createPrompt({ - serviceName: $tw.language.getString("LoginToTiddlySpace"), - callback: function(data) { - self.login(data.username,data.password,function(err,isLoggedIn) { - self.syncFromServer(); - }); - return true; // Get rid of the password prompt - } - }); - // Let the sync adaptor adjust the prompt - if(self.syncadaptor && self.syncadaptor.customiseLoginPrompt) { - self.syncadaptor.customiseLoginPrompt(promptInfo); + if(self.syncadaptor && self.syncadaptor.displayLoginPrompt) { + self.syncadaptor.displayLoginPrompt(self); + } else { + self.displayLoginPrompt(); } } }); }; +/* +Dispay a password prompt +*/ +Syncer.prototype.displayLoginPrompt = function() { + var self = this; + var promptInfo = $tw.passwordPrompt.createPrompt({ + serviceName: $tw.language.getString("LoginToTiddlySpace"), + callback: function(data) { + self.login(data.username,data.password,function(err,isLoggedIn) { + self.syncFromServer(); + }); + return true; // Get rid of the password prompt + } + }); +}; + /* Attempt to login to TiddlyWeb. username: username diff --git a/editions/dev/tiddlers/from tw5.com/moduletypes/SyncAdaptorModules.tid b/editions/dev/tiddlers/from tw5.com/moduletypes/SyncAdaptorModules.tid index 92f124623..b4f150ff0 100644 --- a/editions/dev/tiddlers/from tw5.com/moduletypes/SyncAdaptorModules.tid +++ b/editions/dev/tiddlers/from tw5.com/moduletypes/SyncAdaptorModules.tid @@ -1,5 +1,5 @@ created: 20130825162100000 -modified: 20201014124049248 +modified: 20201025162413404 tags: dev moduletypes title: SyncAdaptorModules type: text/vnd.tiddlywiki @@ -80,30 +80,14 @@ Attempts to login to the server with specified credentials. This method is optio |password |Password | |callback |Callback function invoked with parameter `err` | -!! `customiseLoginPrompt(promptInfo)` +!! `displayLoginPrompt(syncer)` -Provides an opportunity to customise the login prompt. +Invoked by the syncer to display a custom login promopt. This method is optional. |!Parameter |!Description | -|promptInfo |The `promptInfo` object returned by `$tw.passwordPrompt.createPrompt()` | +|syncer |Reference to the syncer object making the call | -Here's an example of customising the login prompt to include a "forgotten password" button: - -``` -SyncAdaptor.prototype.customiseLoginPrompt = function(promptInfo) { - promptInfo.form.appendChild($tw.utils.domMaker("button",{ - attributes: {type: "submit"}, - text: "Forgot password", - eventListeners: [{ - name: "click", - handlerFunction: function(event) { - promptInfo.owner.removePrompt(promptInfo); - alert("Forgot password"); - } - }] - })); -}; -``` +The custom login prompt should send the widget message `tm-login` with the username and password in parameters ''username'' and ''password''. !! `logout(callback)` diff --git a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-login.tid b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-login.tid index 71f45431d..39ed6321e 100644 --- a/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-login.tid +++ b/editions/tw5.com/tiddlers/messages/WidgetMessage_ tm-login.tid @@ -1,5 +1,5 @@ created: 20140811112445887 -modified: 20140811113336694 +modified: 20201025163134940 tags: Messages title: WidgetMessage: tm-login type: text/vnd.tiddlywiki @@ -9,3 +9,4 @@ The login message prompts the user for a username and password and attempts to l The login message is handled by the TiddlyWiki core SyncMechanism which invokes the current [[SyncAdaptorModule|SyncAdaptorModules]] (typically the ''tiddlywiki/tiddlywebadaptor'' plugin). +<<.from-version "5.1.23">> The login message can optionally accept parameters called ''username'' and ''password'' that immediately attempts to login with the specified credentials without displaying the prompt