| rev | 
   line source | 
| 
bsw/jbe@1309
 | 
     1 local members = param.get("members", "table")
 | 
| 
bsw/jbe@1309
 | 
     2 
 | 
| 
bsw@1504
 | 
     3 local include_unit_ids = param.get("include_unit_ids", atom.boolean)
 | 
| 
bsw@1504
 | 
     4 local include_units = param.get("include_units", atom.boolean)
 | 
| 
bsw@1504
 | 
     5 local include_roles = param.get("include_roles", atom.boolean)
 | 
| 
bsw/jbe@1309
 | 
     6 local include_profile = param.get("include_profile", atom.boolean)
 | 
| 
bsw/jbe@1309
 | 
     7 
 | 
| 
bsw/jbe@1309
 | 
     8 if include_profile and not app.scopes.read_profiles then
 | 
| 
bsw/jbe@1309
 | 
     9   return util.api_error(403, "Forbidden", "insufficient_scope", "Scope read_profiles required")
 | 
| 
bsw/jbe@1309
 | 
    10 end
 | 
| 
bsw/jbe@1309
 | 
    11 
 | 
| 
bsw/jbe@1309
 | 
    12 local fields = {}
 | 
| 
bsw/jbe@1309
 | 
    13 
 | 
| 
bsw/jbe@1309
 | 
    14 if app.scopes.read_authors or app.scopes.read_identities then
 | 
| 
bsw/jbe@1309
 | 
    15   fields = { "id", "created", "last_activity", "admin", "name", "location" }
 | 
| 
bsw/jbe@1309
 | 
    16 end
 | 
| 
bsw/jbe@1309
 | 
    17 
 | 
| 
bsw/jbe@1309
 | 
    18 if app.scopes.read_identities then
 | 
| 
bsw/jbe@1309
 | 
    19   fields[#fields+1] = "identification"
 | 
| 
bsw/jbe@1309
 | 
    20 end
 | 
| 
bsw/jbe@1309
 | 
    21 
 | 
| 
bsw/jbe@1309
 | 
    22 local r = json.array()
 | 
| 
bsw/jbe@1309
 | 
    23 
 | 
| 
bsw/jbe@1309
 | 
    24 if app.scopes.read_identities then
 | 
| 
bsw@1504
 | 
    25 
 | 
| 
bsw@1504
 | 
    26   if include_unit_ids or include_units or include_roles then
 | 
| 
bsw@1504
 | 
    27     members:load("units")
 | 
| 
bsw@1504
 | 
    28   end
 | 
| 
bsw@1504
 | 
    29 
 | 
| 
bsw/jbe@1309
 | 
    30   if include_profile then
 | 
| 
bsw/jbe@1309
 | 
    31     members:load("profile")
 | 
| 
bsw/jbe@1309
 | 
    32   end
 | 
| 
bsw/jbe@1309
 | 
    33 
 | 
| 
bsw/jbe@1309
 | 
    34   for i, member in ipairs(members) do
 | 
| 
bsw/jbe@1309
 | 
    35     local m = json.object()
 | 
| 
bsw/jbe@1309
 | 
    36     for j, field in ipairs(fields) do
 | 
| 
bsw/jbe@1309
 | 
    37       local value = member[field]
 | 
| 
bsw/jbe@1309
 | 
    38       if value == nil then
 | 
| 
bsw/jbe@1309
 | 
    39         value = json.null
 | 
| 
bsw/jbe@1309
 | 
    40       else
 | 
| 
bsw/jbe@1309
 | 
    41         value = tostring(value)
 | 
| 
bsw/jbe@1309
 | 
    42       end
 | 
| 
bsw/jbe@1309
 | 
    43       m[field] = value
 | 
| 
bsw/jbe@1309
 | 
    44     end
 | 
| 
bsw@1504
 | 
    45     if include_unit_ids or include_units or include_roles then
 | 
| 
bsw@1504
 | 
    46       if include_unit_ids then
 | 
| 
bsw@1504
 | 
    47         m.unit_ids = json.array()
 | 
| 
bsw@1504
 | 
    48       end
 | 
| 
bsw@1504
 | 
    49       if include_units then
 | 
| 
bsw@1504
 | 
    50         m.units = json.array()
 | 
| 
bsw@1504
 | 
    51       end
 | 
| 
bsw@1504
 | 
    52       if include_roles then
 | 
| 
bsw@1504
 | 
    53         m.roles = json.object()
 | 
| 
bsw@1504
 | 
    54       end
 | 
| 
bsw@1504
 | 
    55       for i, unit in ipairs(member.units) do
 | 
| 
bsw@1504
 | 
    56         if unit.attr.hidden ~= true then
 | 
| 
bsw@1504
 | 
    57           if include_unit_ids then
 | 
| 
bsw@1504
 | 
    58             table.insert(m.unit_ids, unit.id)
 | 
| 
bsw@1504
 | 
    59           end
 | 
| 
bsw@1504
 | 
    60           if include_units then
 | 
| 
bsw@1504
 | 
    61             table.insert(m.units, json.object{
 | 
| 
bsw@1504
 | 
    62               id = unit.id,
 | 
| 
bsw@1504
 | 
    63               parent_id = unit.parent_id,
 | 
| 
bsw@1504
 | 
    64               name = unit.name,
 | 
| 
bsw@1504
 | 
    65               description = unit.description
 | 
| 
bsw@1504
 | 
    66             })
 | 
| 
bsw@1504
 | 
    67           end
 | 
| 
bsw@1504
 | 
    68         end
 | 
| 
bsw@1504
 | 
    69         if include_roles then
 | 
| 
bsw@1504
 | 
    70           if unit.attr.role then
 | 
| 
bsw@1504
 | 
    71             if not unit.attr.only_visible_for_role 
 | 
| 
bsw@1504
 | 
    72               or app.access_token
 | 
| 
bsw@1504
 | 
    73               and app.access_token.member:has_role(unit.attr.only_visible_for_role)
 | 
| 
bsw@1504
 | 
    74             then
 | 
| 
bsw@1504
 | 
    75               m.roles[unit.attr.role] = true
 | 
| 
bsw@1504
 | 
    76             end
 | 
| 
bsw@1504
 | 
    77           end
 | 
| 
bsw@1504
 | 
    78         end
 | 
| 
bsw@1504
 | 
    79       end
 | 
| 
bsw@1504
 | 
    80     end
 | 
| 
bsw/jbe@1309
 | 
    81     if include_profile then
 | 
| 
bsw/jbe@1309
 | 
    82       m.profile = execute.chunk{ module = "api", chunk = "_profile", params = { profile = member.profile } }
 | 
| 
bsw/jbe@1309
 | 
    83     end
 | 
| 
bsw/jbe@1309
 | 
    84     r[#r+1] = m
 | 
| 
bsw/jbe@1309
 | 
    85   end
 | 
| 
bsw/jbe@1309
 | 
    86 end
 | 
| 
bsw/jbe@1309
 | 
    87 
 | 
| 
bsw/jbe@1309
 | 
    88 return r
 |