rev |
line source |
bsw/jbe@1309
|
1 if not request.is_post() then
|
bsw/jbe@1309
|
2 return execute.view { module = "index", view = "405" }
|
bsw/jbe@1309
|
3 end
|
bsw/jbe@1309
|
4
|
bsw/jbe@1309
|
5 slot.set_layout(nil, "application/json")
|
bsw/jbe@1309
|
6
|
bsw/jbe@1309
|
7 local function error_result(error_code, description)
|
bsw/jbe@1309
|
8 local r = json.object()
|
bsw/jbe@1309
|
9 r.error = error_code
|
bsw/jbe@1309
|
10 r.error_description = description
|
bsw/jbe@1309
|
11 slot.put_into("data", json.export(r))
|
bsw/jbe@1309
|
12 request.set_status("400 Bad Request")
|
bsw/jbe@1309
|
13 end
|
bsw/jbe@1309
|
14
|
bsw/jbe@1309
|
15 local access_token, access_token_err = util.get_access_token()
|
bsw/jbe@1309
|
16
|
bsw/jbe@1309
|
17 if access_token_err then
|
bsw/jbe@1309
|
18 if access_token_err == "header_and_param" then
|
bsw/jbe@1309
|
19 return error_result("invalid_request", "Access token passed both via header and param")
|
bsw/jbe@1309
|
20 end
|
bsw/jbe@1309
|
21 error("Error in util.get_access_token")
|
bsw/jbe@1309
|
22 end
|
bsw/jbe@1309
|
23
|
bsw/jbe@1309
|
24 if not access_token then
|
bsw/jbe@1309
|
25 return error_result("invalid_token", "No access token supplied")
|
bsw/jbe@1309
|
26 end
|
bsw/jbe@1309
|
27
|
bsw/jbe@1309
|
28 local token = Token:by_token_type_and_token("access", access_token)
|
bsw/jbe@1309
|
29
|
bsw/jbe@1309
|
30 if not token then
|
bsw/jbe@1309
|
31 return error_result("invalid_token", "Access token invalid")
|
bsw/jbe@1309
|
32 end
|
bsw/jbe@1309
|
33
|
bsw/jbe@1309
|
34 local scopes = {}
|
bsw/jbe@1309
|
35 for scope in string.gmatch(token.scope, "[^ ]+") do
|
bsw/jbe@1309
|
36 local match = string.match(scope, "(.+)_detached$")
|
bsw/jbe@1309
|
37 scopes[match or scope] = true
|
bsw/jbe@1309
|
38 end
|
bsw/jbe@1309
|
39 local scope_list = {}
|
bsw/jbe@1309
|
40 for scope in pairs(scopes) do
|
bsw/jbe@1309
|
41 scope_list[#scope_list+1] = scope
|
bsw/jbe@1309
|
42 end
|
bsw/jbe@1309
|
43 table.sort(scope_list)
|
bsw/jbe@1309
|
44 local scope = table.concat(scope_list, " ")
|
bsw/jbe@1309
|
45
|
bsw/jbe@1309
|
46 local r = json.object()
|
bsw/jbe@1309
|
47 r.scope = scope
|
bsw/jbe@1309
|
48 r.member_id = token.member_id
|
bsw/jbe@1309
|
49 if token.member.role then
|
bsw/jbe@1309
|
50 r.member_is_role = true
|
bsw/jbe@1309
|
51 end
|
bsw/jbe@1309
|
52 if token.session then
|
bsw/jbe@1309
|
53 r.real_member_id = token.session.real_member_id
|
bsw/jbe@1309
|
54 end
|
bsw/jbe@1309
|
55
|
bsw/jbe@1309
|
56 if param.get("include_member", atom.boolean) then
|
bsw/jbe@1309
|
57 if scopes.identification or scopes.authentication then
|
bsw/jbe@1309
|
58 local member = token.member
|
bsw/jbe@1309
|
59 r.member = json.object{
|
bsw/jbe@1309
|
60 id = member.id,
|
bsw/jbe@1309
|
61 name = member.name,
|
bsw/jbe@1309
|
62 }
|
bsw/jbe@1309
|
63 if token.session and token.session.real_member then
|
bsw/jbe@1309
|
64 r.real_member = json.object{
|
bsw/jbe@1309
|
65 id = token.session.real_member.id,
|
bsw/jbe@1309
|
66 name = token.session.real_member.name,
|
bsw/jbe@1309
|
67 }
|
bsw/jbe@1309
|
68 end
|
bsw/jbe@1309
|
69 if scopes.identification then
|
bsw/jbe@1309
|
70 r.member.identification = member.identification
|
bsw/jbe@1309
|
71 if token.session and token.session.real_member then
|
bsw/jbe@1309
|
72 r.real_member.identification = token.session.real_member.identification
|
bsw/jbe@1309
|
73 end
|
bsw/jbe@1309
|
74 end
|
bsw/jbe@1309
|
75 if param.get("include_member_notify_email", atom.boolean) then
|
bsw/jbe@1309
|
76 r.member.notify_email = member.notify_email
|
bsw/jbe@1309
|
77 end
|
bsw/jbe@1309
|
78 end
|
bsw/jbe@1309
|
79 end
|
bsw/jbe@1309
|
80
|
bsw/jbe@1309
|
81 r.logged_in = token.session_id and true or false
|
bsw/jbe@1309
|
82 slot.put_into("data", json.export(r))
|
bsw/jbe@1309
|
83
|
bsw/jbe@1309
|
84
|
bsw/jbe@1309
|
85
|