diff --git a/core/modules/server/routes/get-status.js b/core/modules/server/routes/get-status.js index dd4c1909a..ac35ee874 100644 --- a/core/modules/server/routes/get-status.js +++ b/core/modules/server/routes/get-status.js @@ -21,6 +21,7 @@ exports.handler = function(request,response,state) { username: state.authenticatedUsername || state.server.get("anon-username") || "", anonymous: !state.authenticatedUsername, read_only: !state.server.isAuthorized("writers",state.authenticatedUsername), + logout_is_available: false, space: { recipe: "default" }, diff --git a/editions/tw5.com/tiddlers/webserver/WebServer API_ Get Server Status.tid b/editions/tw5.com/tiddlers/webserver/WebServer API_ Get Server Status.tid index 6bcd1e4ac..bddbd263a 100644 --- a/editions/tw5.com/tiddlers/webserver/WebServer API_ Get Server Status.tid +++ b/editions/tw5.com/tiddlers/webserver/WebServer API_ Get Server Status.tid @@ -25,6 +25,7 @@ The JSON data returned comprises the following properties: * ''username'' - the username of the currently authenticated user. If undefined, the [[WebServer Parameter: anon-username]] is returned instead * ''anonymous'' - true if the current user is anonymous * ''read_only'' - true if the current user is restricted to read only access to the server +* ''logout_is_available'' - true if the server supports logging out (optional, defaults to true) * ''space'' - always contains the object `{recipe: "default"}` * ''tiddlywiki_version'' - the current TiddlyWiki version diff --git a/plugins/tiddlywiki/tiddlyweb/tiddlywebadaptor.js b/plugins/tiddlywiki/tiddlyweb/tiddlywebadaptor.js index d6fcfb901..57e71c2bc 100644 --- a/plugins/tiddlywiki/tiddlyweb/tiddlywebadaptor.js +++ b/plugins/tiddlywiki/tiddlyweb/tiddlywebadaptor.js @@ -23,6 +23,7 @@ function TiddlyWebAdaptor(options) { this.logger = new $tw.utils.Logger("TiddlyWebAdaptor"); this.isLoggedIn = false; this.isReadOnly = false; + this.logoutIsAvailable = true; } TiddlyWebAdaptor.prototype.name = "tiddlyweb"; @@ -91,6 +92,7 @@ TiddlyWebAdaptor.prototype.getStatus = function(callback) { self.isLoggedIn = json.username !== "GUEST"; self.isReadOnly = !!json["read_only"]; self.isAnonymous = !!json.anonymous; + self.logoutIsAvailable = "logout_is_available" in json ? !!json["logout_is_available"] : true; } // Invoke the callback if present if(callback) { @@ -127,23 +129,28 @@ TiddlyWebAdaptor.prototype.login = function(username,password,callback) { /* */ TiddlyWebAdaptor.prototype.logout = function(callback) { - var options = { - url: this.host + "logout", - type: "POST", - data: { - csrf_token: this.getCsrfToken(), - tiddlyweb_redirect: "/status" // workaround to marginalize automatic subsequent GET - }, - callback: function(err,data) { - callback(err); - }, - headers: { - "accept": "application/json", - "X-Requested-With": "TiddlyWiki" - } - }; - this.logger.log("Logging out:",options); - $tw.utils.httpRequest(options); + if(this.logoutIsAvailable) { + var options = { + url: this.host + "logout", + type: "POST", + data: { + csrf_token: this.getCsrfToken(), + tiddlyweb_redirect: "/status" // workaround to marginalize automatic subsequent GET + }, + callback: function(err,data,xhr) { + callback(err); + }, + headers: { + "accept": "application/json", + "X-Requested-With": "TiddlyWiki" + } + }; + this.logger.log("Logging out:",options); + $tw.utils.httpRequest(options); + } else { + alert("This server does not support logging out. If you are using basic authentication the only way to logout is close all browser windows"); + callback(null); + } }; /*