liquid_feedback_frontend
view app/main/oauth2_client/callback.lua @ 1795:2526423907d9
Added missing translations
| author | bsw | 
|---|---|
| date | Thu Oct 21 14:46:56 2021 +0200 (2021-10-21) | 
| parents | 5eb8b596f7d4 | 
| children | 
 line source
     1 local provider = param.get("provider")
     2 local provider_config = config.oauth2_providers[provider]
     3 if not provider_config then
     4   return
     5 end
     8 local error = param.get("error")
    10 if error then
    11   ui.heading{ content = "OAuth error" }
    12   ui.container{ content = error }
    13   return
    14 end
    16 local state = param.get("state")
    18 if state ~= app.session:additional_secret_for("oauth") then
    19   ui.heading{ content = "OAuth error" }
    20   ui.container{ content = "state invalid" }
    21   return
    22 end
    24 local code = param.get("code")
    26 local params = {
    27   code = code,
    28   client_id = provider_config.client_id,
    29   client_secret = provider_config.client_secret,
    30   redirect_uri = request.get_absolute_baseurl() .. "oauth2_client/callback.html?provider=" .. provider,
    31   grant_type = "authorization_code"
    32 }
    34 local params_list = {}
    35 for key, val in pairs(params) do
    36   table.insert(params_list, encode.url_part(key) .. "=" .. encode.url_part(val))
    37 end
    39 local r = table.concat(params_list, "&")
    41 local output, err, status = extos.pfilter(nil, "curl", "-X", "POST", "-d", r, provider_config.token_url)
    43 local result = json.import(output)
    45 local url = provider_config.id_url .. "?access_token=" .. encode.url_part(result.access_token)
    47 local output, err, status = extos.pfilter(nil, "curl", url)
    49 local id_result = json.import(output)
    51 local id = id_result[provider_config.id_field]
    52 local email = id_result[provider_config.email_field]
    54 if id then
    55   local member = Member:new_selector()
    56     :add_where{ "authority = ?", "oauth2_" .. provider }
    57     :add_where{ "authority_uid = ?", id }
    58     :optional_object_mode()
    59     :exec()
    61   if not member then
    62     member = Member:new()
    63     member.authority = "oauth2_" .. provider
    64     member.authority_uid = id
    65     member.notify_email = email
    66     member.name = "Member " .. id
    67     member.identification = "Member " .. id
    68     member.activated = "now"
    69     member:save()
    70     for i, unit_id in ipairs(provider_config.unit_ids) do
    71       local privilege = Privilege:new()
    72       privilege.member_id = member.id
    73       privilege.unit_id = unit_id
    74       privilege.initiative_right = true
    75       privilege.voting_right = true
    76       privilege:save()
    77     end
    78   end
    79   member.last_login = "now"
    80   member.last_activity = "now"
    81   member.active = true
    82   member:save()
    83   app.session.member = member
    84   app.session:save()
    85   request.redirect{ external = request.get_absolute_baseurl() }
    87 end
