bsw/jbe@1309: local system_application_id = param.get("system_application_id", atom.integer) bsw/jbe@1309: local domain = param.get("domain") bsw/jbe@1309: local response_type = param.get("response_type") bsw/jbe@1309: bsw/jbe@1309: if domain then bsw/jbe@1309: domain = string.lower(domain) bsw/jbe@1309: end bsw/jbe@1309: local scopes = {} bsw/jbe@1309: for i = 0, math.huge do bsw/jbe@1309: scopes[i] = param.get("scope" .. i) bsw/jbe@1309: if not scopes[i] then bsw/jbe@1309: break bsw/jbe@1309: end bsw/jbe@1309: end bsw/jbe@1309: bsw/jbe@1309: local redirect_uri = param.get("redirect_uri") bsw/jbe@1309: local redirect_uri_explicit = param.get("redirect_uri_explicit", atom.boolean) bsw/jbe@1309: local state = param.get("state") bsw/jbe@1309: bsw/jbe@1309: local selector bsw/jbe@1309: bsw/jbe@1309: if system_application_id then bsw/jbe@1309: selector = MemberApplication:get_selector_by_member_id_and_system_application_id(app.session.member_id, system_application_id) bsw/jbe@1309: else bsw/jbe@1309: selector = MemberApplication:get_selector_by_member_id_and_domain(app.session.member_id, domain) bsw/jbe@1309: end bsw/jbe@1309: selector:for_update() bsw/jbe@1309: bsw/jbe@1309: local member_application = selector:exec() bsw/jbe@1309: bsw/jbe@1309: if not member_application then bsw/jbe@1309: member_application = MemberApplication:new() bsw/jbe@1309: member_application.member_id = app.session.member_id bsw/jbe@1309: member_application.system_application_id = system_application_id bsw/jbe@1309: member_application.domain = domain bsw/jbe@1309: end bsw/jbe@1309: bsw/jbe@1309: local new_scopes = {} bsw/jbe@1309: bsw/jbe@1309: for i = 0, #scopes do bsw/jbe@1309: if scopes[i] then bsw/jbe@1309: for scope in string.gmatch(scopes[i], "[^ ]+") do bsw/jbe@1309: new_scopes[scope] = true bsw/jbe@1309: end bsw/jbe@1309: end bsw/jbe@1309: end bsw/jbe@1309: bsw/jbe@1309: if member_application.scopes then bsw/jbe@1309: for scope in string.gmatch(member_application.scopes, "[^ ]+") do bsw/jbe@1309: new_scopes[scope] = true bsw/jbe@1309: end bsw/jbe@1309: end bsw/jbe@1309: bsw/jbe@1309: local new_scopes_list = {} bsw/jbe@1309: bsw/jbe@1309: for k, v in pairs(new_scopes) do bsw/jbe@1309: new_scopes_list[#new_scopes_list+1] = k bsw/jbe@1309: end bsw/jbe@1309: bsw/jbe@1309: local new_scopes_string = table.concat(new_scopes_list, " ") bsw/jbe@1309: bsw/jbe@1309: member_application.scope = new_scopes_string bsw/jbe@1309: bsw/jbe@1309: member_application:save() bsw/jbe@1309: bsw/jbe@1309: execute.chunk{ module = "oauth2", chunk = "_authorization", params = { bsw/jbe@1309: member_id = app.session.member_id, bsw/jbe@1309: system_application_id = system_application_id, bsw/jbe@1309: domain = domain, bsw/jbe@1309: session_id = app.session.id, bsw/jbe@1309: redirect_uri = redirect_uri, bsw/jbe@1309: redirect_uri_explicit = redirect_uri_explicit, bsw/jbe@1309: scopes = scopes, bsw/jbe@1309: state = state, bsw/jbe@1309: response_type = response_type bsw/jbe@1309: } }