liquid_feedback_frontend
diff app/main/oauth2/validate.lua @ 1309:32cc544d5a5b
Cumulative patch for upcoming frontend version 4
author | bsw/jbe |
---|---|
date | Sun Jul 15 14:07:29 2018 +0200 (2018-07-15) |
parents | |
children | 6077545667ec |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/app/main/oauth2/validate.lua Sun Jul 15 14:07:29 2018 +0200 1.3 @@ -0,0 +1,85 @@ 1.4 +if not request.is_post() then 1.5 + return execute.view { module = "index", view = "405" } 1.6 +end 1.7 + 1.8 +slot.set_layout(nil, "application/json") 1.9 + 1.10 +local function error_result(error_code, description) 1.11 + local r = json.object() 1.12 + r.error = error_code 1.13 + r.error_description = description 1.14 + slot.put_into("data", json.export(r)) 1.15 + request.set_status("400 Bad Request") 1.16 +end 1.17 + 1.18 +local access_token, access_token_err = util.get_access_token() 1.19 + 1.20 +if access_token_err then 1.21 + if access_token_err == "header_and_param" then 1.22 + return error_result("invalid_request", "Access token passed both via header and param") 1.23 + end 1.24 + error("Error in util.get_access_token") 1.25 +end 1.26 + 1.27 +if not access_token then 1.28 + return error_result("invalid_token", "No access token supplied") 1.29 +end 1.30 + 1.31 +local token = Token:by_token_type_and_token("access", access_token) 1.32 + 1.33 +if not token then 1.34 + return error_result("invalid_token", "Access token invalid") 1.35 +end 1.36 + 1.37 +local scopes = {} 1.38 +for scope in string.gmatch(token.scope, "[^ ]+") do 1.39 + local match = string.match(scope, "(.+)_detached$") 1.40 + scopes[match or scope] = true 1.41 +end 1.42 +local scope_list = {} 1.43 +for scope in pairs(scopes) do 1.44 + scope_list[#scope_list+1] = scope 1.45 +end 1.46 +table.sort(scope_list) 1.47 +local scope = table.concat(scope_list, " ") 1.48 + 1.49 +local r = json.object() 1.50 +r.scope = scope 1.51 +r.member_id = token.member_id 1.52 +if token.member.role then 1.53 + r.member_is_role = true 1.54 +end 1.55 +if token.session then 1.56 + r.real_member_id = token.session.real_member_id 1.57 +end 1.58 + 1.59 +if param.get("include_member", atom.boolean) then 1.60 + if scopes.identification or scopes.authentication then 1.61 + local member = token.member 1.62 + r.member = json.object{ 1.63 + id = member.id, 1.64 + name = member.name, 1.65 + } 1.66 + if token.session and token.session.real_member then 1.67 + r.real_member = json.object{ 1.68 + id = token.session.real_member.id, 1.69 + name = token.session.real_member.name, 1.70 + } 1.71 + end 1.72 + if scopes.identification then 1.73 + r.member.identification = member.identification 1.74 + if token.session and token.session.real_member then 1.75 + r.real_member.identification = token.session.real_member.identification 1.76 + end 1.77 + end 1.78 + if param.get("include_member_notify_email", atom.boolean) then 1.79 + r.member.notify_email = member.notify_email 1.80 + end 1.81 + end 1.82 +end 1.83 + 1.84 +r.logged_in = token.session_id and true or false 1.85 +slot.put_into("data", json.export(r)) 1.86 + 1.87 + 1.88 +