| rev | line source | 
| jbe/bsw@16 | 1 --[[-- | 
| jbe/bsw@16 | 2 request.set_cookie{ | 
| jbe/bsw@16 | 3   name   = name,     -- name of cookie | 
| jbe/bsw@16 | 4   value  = value,    -- value of cookie | 
| jbe/bsw@16 | 5   domain = domain,   -- optional domain domain where cookie is transmitted | 
| jbe/bsw@16 | 6   path   = path,     -- optional path where cookie is transmitted, defaults to application base | 
| jbe/bsw@16 | 7   secure = secure    -- optional boolean, indicating if cookie should only be transmitted over HTTPS | 
| jbe/bsw@16 | 8 } | 
| jbe/bsw@16 | 9 | 
| jbe/bsw@16 | 10 This function is similar to rocketwiki.set_cookie{...}, except that it automatically sets the path to the application base. It also sets secure=true, if the secure option is unset and the application base URL starts with "https://". | 
| jbe/bsw@16 | 11 | 
| jbe/bsw@16 | 12 --]]-- | 
| jbe/bsw@16 | 13 | 
| jbe/bsw@16 | 14 function request.set_cookie(args) | 
| jbe@223 | 15   local args = table.new(args) | 
| jbe@223 | 16   if not args.path then | 
| jbe@223 | 17     args.path = string.match( | 
| jbe/bsw@16 | 18       request.get_absolute_baseurl(), | 
| jbe/bsw@16 | 19       "://[^/]*(.*)" | 
| jbe/bsw@16 | 20     ) | 
| jbe@249 | 21     if args.path == nil then | 
| jbe@249 | 22       args.path = "/" | 
| jbe/bsw@16 | 23     end | 
| jbe/bsw@16 | 24   end | 
| jbe@223 | 25   if args.secure == nil then | 
| jbe/bsw@16 | 26     if string.find( | 
| jbe/bsw@16 | 27       string.lower(request.get_absolute_baseurl()), | 
| jbe/bsw@16 | 28       "^https://" | 
| jbe/bsw@16 | 29     ) then | 
| jbe@223 | 30       args.secure = true | 
| jbe/bsw@16 | 31     else | 
| jbe@223 | 32       args.secure = false | 
| jbe/bsw@16 | 33     end | 
| jbe/bsw@16 | 34   end | 
| jbe@223 | 35   assert(string.find(args.name, "^[0-9A-Za-z%%._~-]+$"), "Illegal cookie name") | 
| jbe@223 | 36   assert(string.find(args.value, "^[0-9A-Za-z%%._~-]+$"), "Illegal cookie value") | 
| jbe@223 | 37   local parts = {args.name .. "=" .. args.value} | 
| jbe@223 | 38   if args.domain then | 
| jbe@223 | 39     assert( | 
| jbe@223 | 40       string.find(args.path, "^[0-9A-Za-z%%/._~-]+$"), | 
| jbe@223 | 41       "Illegal cookie domain" | 
| jbe@223 | 42     ) | 
| jbe@223 | 43     parts[#parts+1] = "domain=" .. args.domain | 
| jbe@223 | 44   end | 
| jbe@223 | 45   if args.path then | 
| jbe@223 | 46     assert( | 
| jbe@223 | 47       string.find(args.path, "^[0-9A-Za-z%%/._~-]+$"), | 
| jbe@223 | 48       "Illegal cookie path" | 
| jbe@223 | 49     ) | 
| jbe@223 | 50     parts[#parts+1] = "path=" .. args.path | 
| jbe@223 | 51   end | 
| jbe@223 | 52   if args.secure then | 
| jbe@223 | 53     parts[#parts+1] = "secure" | 
| jbe@223 | 54   end | 
| jbe@223 | 55   request.add_header("Set-Cookie", table.concat(parts, "; ")) | 
| jbe/bsw@16 | 56 end |