rev |
line source |
bsw/jbe@1309
|
1 local member_id = param.get("member_id", atom.integer)
|
bsw/jbe@1309
|
2 local system_application_id = param.get("system_application_id", atom.integer)
|
bsw/jbe@1309
|
3 local domain = param.get("domain")
|
bsw/jbe@1309
|
4 local session_id = param.get("session_id", atom.integer)
|
bsw/jbe@1309
|
5 local redirect_uri = param.get("redirect_uri")
|
bsw/jbe@1309
|
6 local redirect_uri_explicit = param.get("redirect_uri_explicit", atom.boolean)
|
bsw/jbe@1309
|
7 local scopes = param.get("scopes", "table")
|
bsw/jbe@1309
|
8 local state = param.get("state")
|
bsw/jbe@1309
|
9 local response_type = param.get("response_type")
|
bsw/jbe@1309
|
10
|
bsw/jbe@1309
|
11 if response_type == "code" then
|
bsw/jbe@1309
|
12
|
bsw/jbe@1309
|
13 local token = Token:create_authorization(
|
bsw/jbe@1309
|
14 member_id,
|
bsw/jbe@1309
|
15 system_application_id,
|
bsw/jbe@1309
|
16 domain,
|
bsw/jbe@1309
|
17 session_id,
|
bsw/jbe@1309
|
18 redirect_uri,
|
bsw/jbe@1309
|
19 redirect_uri_explicit,
|
bsw/jbe@1309
|
20 scopes,
|
bsw/jbe@1309
|
21 state
|
bsw/jbe@1309
|
22 )
|
bsw/jbe@1309
|
23
|
bsw/jbe@1309
|
24 request.redirect{
|
bsw/jbe@1309
|
25 external = redirect_uri,
|
bsw/jbe@1309
|
26 params = { code = token.token, state = state }
|
bsw/jbe@1309
|
27 }
|
bsw/jbe@1309
|
28
|
bsw/jbe@1309
|
29
|
bsw/jbe@1309
|
30 elseif response_type == "token" then
|
bsw/jbe@1309
|
31
|
bsw/jbe@1309
|
32 local expiry = db:query({ "SELECT now() + (? || 'sec')::interval AS access", config.oauth2.access_token_lifetime }, "object").access
|
bsw/jbe@1309
|
33
|
bsw/jbe@1309
|
34 local anchor_params = {
|
bsw/jbe@1309
|
35 state = state,
|
bsw/jbe@1309
|
36 expires_in = config.oauth2.access_token_lifetime,
|
bsw/jbe@1309
|
37 token_type = "bearer"
|
bsw/jbe@1309
|
38 }
|
bsw/jbe@1309
|
39
|
bsw/jbe@1309
|
40 for i = 0, #scopes do
|
bsw/jbe@1309
|
41 if scopes[i] then
|
bsw/jbe@1309
|
42 local access_token = Token:new()
|
bsw/jbe@1309
|
43 access_token.token_type = "access"
|
bsw/jbe@1309
|
44 access_token.member_id = member_id
|
bsw/jbe@1309
|
45 access_token.system_application_id = system_application_id
|
bsw/jbe@1309
|
46 access_token.domain = domain
|
bsw/jbe@1309
|
47 access_token.session_id = session_id
|
bsw/jbe@1309
|
48 access_token.expiry = expiry
|
bsw/jbe@1309
|
49 access_token.scope = scopes[i]
|
bsw/jbe@1309
|
50 access_token:save()
|
bsw/jbe@1309
|
51 local index = i == 0 and "" or i
|
bsw/jbe@1309
|
52 anchor_params["access_token" .. index] = access_token.token
|
bsw/jbe@1309
|
53 end
|
bsw/jbe@1309
|
54 end
|
bsw/jbe@1309
|
55
|
bsw/jbe@1309
|
56 local anchor_params_list = {}
|
bsw/jbe@1309
|
57 for k, v in pairs(anchor_params) do
|
bsw/jbe@1309
|
58 anchor_params_list[#anchor_params_list+1] = k .. "=" .. encode.url_part(v)
|
bsw/jbe@1309
|
59 end
|
bsw/jbe@1309
|
60 local anchor = table.concat(anchor_params_list, "&")
|
bsw/jbe@1309
|
61
|
bsw/jbe@1309
|
62 request.redirect{
|
bsw/jbe@1309
|
63 external = redirect_uri .. "#" .. anchor
|
bsw/jbe@1309
|
64 }
|
bsw/jbe@1309
|
65
|
bsw/jbe@1309
|
66 else
|
bsw/jbe@1309
|
67
|
bsw/jbe@1309
|
68 error("Internal error, should not happen")
|
bsw/jbe@1309
|
69
|
bsw/jbe@1309
|
70 end
|