| rev | line source | 
| bsw/jbe@1309 | 1 slot.set_layout(nil, "application/json") | 
| bsw/jbe@1309 | 2 | 
| bsw/jbe@1309 | 3 if not app.access_token then | 
| bsw/jbe@1309 | 4   return util.api_error(400, "Forbidden", "insufficient_scope", "Scope 'settings' required") | 
| bsw/jbe@1309 | 5 end | 
| bsw/jbe@1309 | 6 | 
| bsw/jbe@1309 | 7 local r = json.object{} | 
| bsw/jbe@1309 | 8 | 
| bsw/jbe@1309 | 9 if request.is_post() then | 
| bsw/jbe@1309 | 10   if not app.scopes.update_settings then | 
| bsw/jbe@1309 | 11     return util.api_error(403, "Forbidden", "insufficient_scope", "Scope update_settings required") | 
| bsw/jbe@1309 | 12   end | 
| bsw/jbe@1309 | 13   local settings = app.access_token.member.settings | 
| bsw/jbe@1309 | 14   if not settings then | 
| bsw/jbe@1309 | 15     settings = MemberSettings:new() | 
| bsw/jbe@1309 | 16     settings.member_id = app.access_token.member_id | 
| bsw/jbe@1309 | 17     settings.settings = json.object() | 
| bsw/jbe@1309 | 18   end | 
| bsw/jbe@1309 | 19   local fields = json.import(param.get("update")) | 
| bsw/jbe@1309 | 20   if not fields then | 
| bsw/jbe@1309 | 21     return util.api_error(400, "Bad Request", "settings_data_expected", "JSON object with updated settings data expected") | 
| bsw/jbe@1309 | 22   end | 
| bsw/jbe@1309 | 23   for i, field in ipairs(config.member_settings_fields) do | 
| bsw/jbe@1309 | 24     if json.type(fields, field.id) ~= "nil" then | 
| bsw/jbe@1309 | 25       local value = fields[field.id] | 
| bsw/jbe@1309 | 26       if value ~= nil then | 
| bsw/jbe@1309 | 27         if (field.type == "string" or field.type == "text") and json.type(value) ~= "string" then | 
| bsw/jbe@1309 | 28           return util.api_error(400, "Bad Request", "string_expected", "JSON encoded string value expected") | 
| bsw/jbe@1309 | 29         end | 
| bsw/jbe@1309 | 30         if (field.type == "boolean") and json.type(value) ~= "boolean" then | 
| bsw/jbe@1309 | 31           return util.api_error(400, "Bad Request", "boolean_expected", "JSON encoded boolean value expected") | 
| bsw/jbe@1309 | 32         end | 
| bsw/jbe@1309 | 33       end | 
| bsw/jbe@1309 | 34       settings.settings[field.id] = value | 
| bsw/jbe@1309 | 35     end | 
| bsw/jbe@1309 | 36   end | 
| bsw/jbe@1309 | 37   settings:save() | 
| bsw/jbe@1309 | 38   r.status = 'ok' | 
| bsw/jbe@1309 | 39   slot.put_into("data", json.export(r)) | 
| bsw/jbe@1309 | 40   slot.put_into("data", "\n") | 
| bsw/jbe@1309 | 41 else | 
| bsw/jbe@1309 | 42   if not app.scopes.settings then | 
| bsw/jbe@1309 | 43     return util.api_error(403, "Forbidden", "insufficient_scope", "Scope 'settings' required") | 
| bsw/jbe@1309 | 44   end | 
| bsw/jbe@1309 | 45   local settings = app.access_token.member.settings or json.object() | 
| bsw/jbe@1309 | 46   r = execute.chunk{ module = "api", chunk = "_settings", params = { settings = settings } } | 
| bsw/jbe@1309 | 47   slot.put_into("data", json.export(json.object{ result = r })) | 
| bsw/jbe@1309 | 48   slot.put_into("data", "\n") | 
| bsw/jbe@1309 | 49 end | 
| bsw/jbe@1309 | 50 |