From 6a828532cbf0394329e67e814af4f57354733c89 Mon Sep 17 00:00:00 2001 From: Nazar Kanaev Date: Fri, 12 Feb 2021 10:31:00 +0000 Subject: [PATCH] logout --- assets/javascripts/api.js | 3 +++ assets/javascripts/app.js | 5 +++++ server/auth.go | 9 +++++++++ server/handlers.go | 6 ++++++ 4 files changed, 23 insertions(+) diff --git a/assets/javascripts/api.js b/assets/javascripts/api.js index fe8450b..327fdb0 100644 --- a/assets/javascripts/api.js +++ b/assets/javascripts/api.js @@ -92,6 +92,9 @@ body: new FormData(form), }) }, + logout: function() { + return api('post', './logout') + }, crawl: function(url) { return fetch('./page?url=' + url).then(function(res) { return res.text() diff --git a/assets/javascripts/app.js b/assets/javascripts/app.js index f8bac14..20f00ca 100644 --- a/assets/javascripts/app.js +++ b/assets/javascripts/app.js @@ -509,6 +509,11 @@ var vm = new Vue({ vm.refreshStats() }) }, + logout: function() { + api.logout().then(function() { + document.location.reload() + }) + }, getReadable: function(item) { if (this.itemSelectedReadability) { this.itemSelectedReadability = null diff --git a/server/auth.go b/server/auth.go index f9950fb..ee7d70e 100644 --- a/server/auth.go +++ b/server/auth.go @@ -39,6 +39,15 @@ func userAuthenticate(rw http.ResponseWriter, username, password string) { http.SetCookie(rw, &cookie) } +func userLogout(rw http.ResponseWriter) { + cookie := http.Cookie{ + Name: "auth", + Value: "", + MaxAge: -1, + } + http.SetCookie(rw, &cookie) +} + func stringsEqual(p1, p2 string) bool { return subtle.ConstantTimeCompare([]byte(p1), []byte(p2)) == 1 } diff --git a/server/handlers.go b/server/handlers.go index af19929..c3fc927 100644 --- a/server/handlers.go +++ b/server/handlers.go @@ -40,6 +40,7 @@ var routes []Route = []Route{ p("/opml/import", OPMLImportHandler), p("/opml/export", OPMLExportHandler), p("/page", PageCrawlHandler), + p("/logout", LogoutHandler), } type asset struct { @@ -528,3 +529,8 @@ func PageCrawlHandler(rw http.ResponseWriter, req *http.Request) { } } } + +func LogoutHandler(rw http.ResponseWriter, req *http.Request) { + userLogout(rw) + rw.WriteHeader(http.StatusNoContent) +}