liquid_feedback_frontend

changeset 1538:25ea15b4bd5e

Reworked cookie session control, exceptions for API
author bsw
date Tue Oct 20 17:48:49 2020 +0200 (2020-10-20)
parents 1e5c1edf7388
children 52185c8f5746
files app/main/_filter/20_session.lua app/main/oauth2/session.lua
line diff
     1.1 --- a/app/main/_filter/20_session.lua	Mon Oct 12 12:19:18 2020 +0200
     1.2 +++ b/app/main/_filter/20_session.lua	Tue Oct 20 17:48:49 2020 +0200
     1.3 @@ -1,37 +1,58 @@
     1.4 -local cookie = request.get_cookie{ name = config.cookie_name }
     1.5 -local cookie_samesite = request.get_cookie{ name = config.cookie_name_samesite }
     1.6 +local module = request.get_module()
     1.7 +local view = request.get_view()
     1.8  
     1.9 -local oauth2_session_request = request.get_module() == "oauth2" and request.get_view() == "session"
    1.10 +local need_session = false
    1.11 +local cors_request = false
    1.12  
    1.13 -if
    1.14 -  cookie and cookie ~= cookie_samesite and not oauth2_session_request
    1.15 -then
    1.16 -  slot.put_into("error", _"Cookie error. Try restarting your web browser and login again.")  
    1.17 -  ui.script{ script = [[
    1.18 -  function cookie_by_name(name) {
    1.19 -    var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
    1.20 -    if (match) return match[2];
    1.21 -  }
    1.22 -  var cookie = (cookie_by_name("]] .. config.cookie_name .. [["));
    1.23 -  var cookie_samesite = (cookie_by_name("]] .. config.cookie_name_samesite ..[["));
    1.24 -  if (cookie != cookie_samesite) {
    1.25 -    document.cookie = "]] .. config.cookie_name .. [[= ; expires = Thu, 01 Jan 1970 00:00:00 GMT"
    1.26 -    document.cookie = "]] .. config.cookie_name_samesite .. [[= ; expires = Thu, 01 Jan 1970 00:00:00 GMT"
    1.27 -    window.location = "]] .. request.get_absolute_baseurl() .. [[";
    1.28 -  }
    1.29 -  ]]}
    1.30 -  return
    1.31 +if module == "api" then
    1.32 +  need_session = false
    1.33 +elseif module == "oauth2" then
    1.34 +  if view == "authorization" then
    1.35 +    need_session = true
    1.36 +  elseif view == "session" then
    1.37 +    need_session = true
    1.38 +    cors_request = true
    1.39 +  else
    1.40 +    need_session = false
    1.41 +  end
    1.42 +else
    1.43 +  need_session = true
    1.44  end
    1.45  
    1.46 -if cookie then
    1.47 -  app.session = Session:by_ident(cookie)
    1.48 -end
    1.49 +if need_session then
    1.50 +
    1.51 +  local cookie = request.get_cookie{ name = config.cookie_name }
    1.52  
    1.53 -if not app.session then
    1.54 -  app.session = Session:new()
    1.55 -  if not oauth2_session_request then
    1.56 +  if not cors_request then
    1.57 +    local cookie_samesite = request.get_cookie{ name = config.cookie_name_samesite }
    1.58 +    if cookie ~= cookie_samesite then
    1.59 +      slot.put_into("error", _"Cookie error. Try restarting your web browser and login again.")  
    1.60 +      ui.script{ script = [[
    1.61 +      function cookie_by_name(name) {
    1.62 +        var match = document.cookie.match(new RegExp('(^| )' + name + '=([^;]+)'));
    1.63 +        if (match) return match[2];
    1.64 +      }
    1.65 +      var cookie = (cookie_by_name("]] .. config.cookie_name .. [["));
    1.66 +      var cookie_samesite = (cookie_by_name("]] .. config.cookie_name_samesite ..[["));
    1.67 +      if (cookie != cookie_samesite) {
    1.68 +        document.cookie = "]] .. config.cookie_name .. [[= ; expires = Thu, 01 Jan 1970 00:00:00 GMT"
    1.69 +        document.cookie = "]] .. config.cookie_name_samesite .. [[= ; expires = Thu, 01 Jan 1970 00:00:00 GMT"
    1.70 +        window.location = "]] .. request.get_absolute_baseurl() .. [[";
    1.71 +      }
    1.72 +      ]]}
    1.73 +      return
    1.74 +    end
    1.75 +  end
    1.76 +
    1.77 +  if cookie then
    1.78 +    app.session = Session:by_ident(cookie)
    1.79 +  end
    1.80 +
    1.81 +  if not cors_request and not app.session then
    1.82 +    app.session = Session:new()
    1.83      app.session:set_cookie()
    1.84    end
    1.85 +
    1.86  end
    1.87  
    1.88  locale.set{ lang = app.session.lang or config.default_lang or "en" }
     2.1 --- a/app/main/oauth2/session.lua	Mon Oct 12 12:19:18 2020 +0200
     2.2 +++ b/app/main/oauth2/session.lua	Tue Oct 20 17:48:49 2020 +0200
     2.3 @@ -8,7 +8,7 @@
     2.4    member_id = json.null
     2.5  }
     2.6  
     2.7 -if app.session.member_id then
     2.8 +if app.session and app.session.member_id then
     2.9    local origin = request.get_header("Origin")
    2.10    if origin then
    2.11      local system_applications = SystemApplication:by_origin(origin)

Impressum / About Us