You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
37 lines
1.3 KiB
Lua
37 lines
1.3 KiB
Lua
local lpeg = require "lpeg"
|
|
local core = require "lpeg_patterns.core"
|
|
local http_core = require "lpeg_patterns.http.core"
|
|
|
|
local C = lpeg.C
|
|
local Cf = lpeg.Cf
|
|
local Cg = lpeg.Cg
|
|
local Ct = lpeg.Ct
|
|
local P = lpeg.P
|
|
|
|
-- RFC 7235 Section 2
|
|
local auth_scheme = http_core.token
|
|
local auth_param = Cg(http_core.token / string.lower * http_core.BWS * P"=" * http_core.BWS * (http_core.token + http_core.quoted_string))
|
|
local token68 = C((core.ALPHA + core.DIGIT + P"-" + P"." + P"_" + P"~" + P"+" + P"/" )^1 * (P"=")^0)
|
|
-- TODO: each parameter name MUST only occur once per challenge
|
|
local challenge = auth_scheme * (core.SP^1 * (Cf(Ct(true) * http_core.comma_sep(auth_param), rawset) + token68))^-1
|
|
local credentials = challenge
|
|
|
|
-- RFC 7235 Section 4
|
|
local WWW_Authenticate = http_core.comma_sep_trim(Ct(challenge), 1)
|
|
local Authorization = credentials
|
|
local Proxy_Authenticate = WWW_Authenticate
|
|
local Proxy_Authorization = Authorization
|
|
|
|
-- RFC 7615
|
|
local Authentication_Info = http_core.comma_sep_trim(auth_param)
|
|
local Proxy_Authentication_Info = http_core.comma_sep_trim(auth_param)
|
|
|
|
return {
|
|
Authentication_Info = Authentication_Info;
|
|
Authorization = Authorization;
|
|
Proxy_Authenticate = Proxy_Authenticate;
|
|
Proxy_Authentication_Info = Proxy_Authentication_Info;
|
|
Proxy_Authorization = Proxy_Authorization;
|
|
WWW_Authenticate = WWW_Authenticate;
|
|
}
|