| 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 
 |