| 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@223
 | 
    21     if path == nil then
 | 
| 
jbe/bsw@16
 | 
    22       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
 |