Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 55eeda4

Browse files
Keep session on restart
1 parent 230e25d commit 55eeda4

File tree

6 files changed

+42
-9
lines changed

6 files changed

+42
-9
lines changed

extensions/users/login-redirect.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ local location = '/login.html'
55

66
return HttpFilter.byPath(HttpFilter:new(function(_, exchange)
77
local session = exchange:getSession()
8-
if session and not session.attributes.user then
8+
if session and not session.attributes.userName then
99
HttpExchange.redirect(exchange, location)
1010
return false
1111
end

extensions/users/manifest.json

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,11 @@
6767
"title": "Restrict the access to logged users",
6868
"type": "boolean",
6969
"default": true
70+
},
71+
"keepSessions": {
72+
"title": "Keep the sessions on restart",
73+
"type": "boolean",
74+
"default": true
7075
}
7176
}
7277
}

extensions/users/users.lua

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
local extension = ...
22

33
local class = require('jls.lang.class')
4+
local serialization = require('jls.lang.serialization')
45
local logger = extension:getLogger()
6+
local File = require('jls.io.File')
57
local HttpExchange = require('jls.net.http.HttpExchange')
68
local HttpFilter = require('jls.net.http.HttpFilter')
79
local Url = require('jls.net.Url')
@@ -64,6 +66,10 @@ local function refreshUsers(users)
6466
end
6567
end
6668

69+
local function getSessionsFile()
70+
return File:new(extension:getEngine():getWorkDirectory(), 'sessions.dat')
71+
end
72+
6773
local sessionFilter
6874

6975
extension:subscribeEvent('startup', function()
@@ -73,10 +79,24 @@ extension:subscribeEvent('startup', function()
7379
sessionFilter:close()
7480
end
7581
sessionFilter = HttpFilter.session(configuration.maxAge, configuration.idleTimeout)
82+
if configuration.keepSessions then
83+
local sessionsFile = getSessionsFile()
84+
if sessionsFile:isFile() then
85+
local status, sessions = pcall(serialization.deserialize, sessionsFile:readAll(), '{jls.net.http.HttpSession}')
86+
if status then
87+
logger:info('restoring %l session(s)', sessions)
88+
sessionFilter:addSessions(sessions)
89+
sessionFilter:cleanup()
90+
sessionsFile:delete()
91+
else
92+
logger:warn('unable to read sessions due to %s', sessions)
93+
end
94+
end
95+
end
7696
cleanup()
7797
refreshUsers(configuration.users)
7898
function sessionFilter:onCreated(session)
79-
session.attributes.user = nil
99+
session.attributes.userName = nil
80100
session.attributes.permission = configuration.defaultPermission or ''
81101
end
82102
extension:addContext('/logout', function(exchange)
@@ -95,7 +115,7 @@ extension:subscribeEvent('startup', function()
95115
local user = userMap[info.name]
96116
if user and user:checkPassword(encrypt(info.password)) then
97117
local session = exchange:getSession()
98-
session.attributes.user = user
118+
session.attributes.userName = info.name
99119
if user.permission then
100120
session.attributes.permission = user.permission
101121
end
@@ -155,5 +175,13 @@ extension:subscribeEvent('refresh', function()
155175
end)
156176

157177
extension:subscribeEvent('shutdown', function()
178+
if extension:getConfiguration().keepSessions then
179+
sessionFilter:cleanup()
180+
local sessions = sessionFilter:getSessions()
181+
if #sessions > 0 then
182+
local s = serialization.serialize(sessions)
183+
getSessionsFile():write(s)
184+
end
185+
end
158186
cleanup()
159187
end)

extensions/web-base/www/app.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -450,7 +450,7 @@ <h1>{{ title }}</h1>
450450
<div>
451451
<slot name="bar-right"></slot>
452452
<template v-if="app.getPage('user')">
453-
<button v-on:click="app.toPage('user', true)" v-if="app.user && app.user.logged" :title="app.user.name"><i class="fa fa-user"></i></button>
453+
<button v-on:click="app.toPage('user')" v-if="app.user && app.user.logged" :title="app.user.name"><i class="fa fa-user"></i></button>
454454
<button v-on:click="app.toPage('user')" v-else title="Not logged"><i class="fa fa-user-alt-slash"></i></button>
455455
</template>
456456
</div>

extensions/web-notes/web-notes.lua

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,8 +29,8 @@ extension:subscribeEvent('startup', function()
2929
function handler:findFile(exchange, path)
3030
local session = exchange:getSession()
3131
local userDir = sharedNotesDir
32-
if session and session.attributes.user then
33-
local userName = session.attributes.user.name
32+
local userName = session and session.attributes.userName
33+
if userName then
3434
local dirName = Url.encodePercent(userName)
3535
userDir = File:new(self.rootFile, dirName)
3636
if userName ~= lastUserName then

lha/restEngine.lua

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -457,10 +457,10 @@ return {
457457
user = function(exchange)
458458
local session = exchange:getSession()
459459
if session then
460-
local user = session.attributes.user
460+
local userName = session.attributes.userName
461461
return {
462-
name = user and user.name,
463-
logged = user ~= nil,
462+
name = userName,
463+
logged = userName ~= nil,
464464
permission = session.attributes.permission
465465
}
466466
end

0 commit comments

Comments
 (0)