login

<     >

2023-08-07 12:13:32 (UTC-03:00)

Marcel Rodrigues <marcelgmr@gmail.com>

add "after" query parameter to login

diff --git a/skopos.lua b/skopos.lua
index 553bb80..fe1bcaa 100644
--- a/skopos.lua
+++ b/skopos.lua
@@ -81,7 +81,7 @@ function App:routes()
     end},
     {"GET", "/login",
     function (req)
-        local env = {title=self.title}
+        local env = {title=self.title, after=req.query.after}
         return lud.template.render_file("view/login.html", env)
     end},
     {"POST", "/login",
@@ -102,8 +102,9 @@ function App:routes()
                 local session_id = auth.b64_enc(auth.uuid4())
                 self.sessions[session_id] = nick
                 self:log(LOG_INFO, "logged in as "..nick)
+                local path = req.query.after or "/"
                 local cookie = {key="sid", val=session_id, path="/", age=3*24*60*60}
-                return "/", 303, "See Other", {cookie}
+                return path, 303, "See Other", {cookie}
             else
                 self:log(LOG_WARN, "invalid password for "..nick)
             end
@@ -113,7 +114,7 @@ function App:routes()
     {"GET", "/i",
     function (req)
         local user = self:get_user(req)
-        if user == nil then return "/login", 303 end
+        if user == nil then return "/login?after=/i", 303 end
         local invites = self.model:get_invites(user.id)
         local env = {title=self.title, invites=invites}
         return lud.template.render_file("view/invites.html", env)
@@ -137,7 +138,7 @@ function App:routes()
     {"GET", "/p",
     function (req)
         local user = self:get_user(req)
-        if user == nil then return "/login", 303 end
+        if user == nil then return "/login?after=/p", 303 end
         local projs = self.model:get_user_projects(user.id)
         local env = {title=self.title, user=user, projs=projs}
         return lud.template.render_file("view/projs.html", env)
@@ -145,14 +146,14 @@ function App:routes()
     {"GET", "/p/new",
     function (req)
         local user = self:get_user(req)
-        if user == nil then return "/login", 303 end
+        if user == nil then return "/login?after=/p/new", 303 end
         local env = {title=self.title, user=user}
         return lud.template.render_file("view/proj_form.html", env)
     end},
     {"GET", "/p/([-_%w]+)",
     function (req, name)
         local user = self:get_user(req)
-        if user == nil then return "/login", 303 end
+        if user == nil then return "/login?after="..req.path, 303 end
         local proj = self.model:get_user_project(user.id, name)
         if proj == nil then return "not found", 404 end
         local states = self.model.states
@@ -179,7 +180,7 @@ function App:routes()
     {"GET", "/p/([-_%w]+)/edit",
     function (req, name)
         local user = self:get_user(req)
-        if user == nil then return "/login", 303 end
+        if user == nil then return "/login?after="..req.path, 303 end
         local proj = self.model:get_user_project(user.id, name)
         if proj == nil then return "not found", 404 end
         local env = {title=self.title, user=user, proj=proj}
@@ -212,7 +213,7 @@ function App:routes()
     {"GET", "/p/([-_%w]+)/t/new",
     function (req, name)
         local user = self:get_user(req)
-        if user == nil then return "/login", 303 end
+        if user == nil then return "/login?after="..req.path, 303 end
         local proj = self.model:get_user_project(user.id, name)
         if proj == nil then return "not found", 404 end
         local env = {title=self.title, user=user, proj=proj}
@@ -221,7 +222,7 @@ function App:routes()
     {"GET", "/p/([-_%w]+)/t/(%d+)",
     function (req, name, code)
         local user = self:get_user(req)
-        if user == nil then return "/login", 303 end
+        if user == nil then return "/login?after="..req.path, 303 end
         local proj = self.model:get_user_project(user.id, name)
         if proj == nil then return "not found", 404 end
         local tick = self.model:get_ticket(proj.id, code, true)
@@ -250,7 +251,7 @@ function App:routes()
     {"GET", "/p/([-_%w]+)/t/(%d+)/edit",
     function (req, name, code)
         local user = self:get_user(req)
-        if user == nil then return "/login", 303 end
+        if user == nil then return "/login?after="..req.path, 303 end
         local proj = self.model:get_user_project(user.id, name)
         if proj == nil then return "not found", 404 end
         local tick = self.model:get_ticket(proj.id, code)

diff --git a/view/login.html b/view/login.html
index 21b0d2e..0719c97 100644
--- a/view/login.html
+++ b/view/login.html
@@ -11,7 +11,12 @@
 <body>
   <br>
   <h1 class="centered">Login</h1>
-  <form action="/login" method="post">
+  % if $after ~= nil then
+    % set query = "?after=" .. $after
+  % else
+    % set query = ""
+  % end
+  <form action="/login{{$query}}" method="post">
     <ul class="centered ul-form">
       <li><input
         type="text" class="flat-field" name="username" placeholder="Username"