| rev | 
   line source | 
| 
bsw@1071
 | 
     1 -- Update member privileges from LDAP
 | 
| 
bsw@1071
 | 
     2 -- --------------------------------------------------------------------------
 | 
| 
bsw@1071
 | 
     3 --
 | 
| 
bsw@1071
 | 
     4 -- arguments:
 | 
| 
bsw@1071
 | 
     5 --   member: the member for which the privileges should be updated
 | 
| 
bsw@1071
 | 
     6 --   ldap_entry: the ldap entry to be used for updating the privileges
 | 
| 
bsw@1071
 | 
     7 --
 | 
| 
bsw@1071
 | 
     8 -- returns:
 | 
| 
bsw@1071
 | 
     9 --   err: an error code, if an error occured (string)
 | 
| 
bsw@1071
 | 
    10 --   err2: Error dependent extra error information
 | 
| 
bsw@1071
 | 
    11 
 | 
| 
bsw@1071
 | 
    12 function ldap.update_member_privileges(member, ldap_entry)
 | 
| 
bsw@1071
 | 
    13 
 | 
| 
bsw@1071
 | 
    14   local privileges, err = config.ldap.member.privilege_map(ldap_entry, member)
 | 
| 
bsw@1071
 | 
    15 
 | 
| 
bsw@1071
 | 
    16   if err then
 | 
| 
bsw@1071
 | 
    17     return false, "privilege_map_error", err
 | 
| 
bsw@1071
 | 
    18   end
 | 
| 
bsw@1071
 | 
    19 
 | 
| 
bsw@1071
 | 
    20   local privileges_by_unit_id = {}
 | 
| 
bsw@1071
 | 
    21   for i, privilege in ipairs(privileges) do
 | 
| 
bsw@1071
 | 
    22     privileges_by_unit_id[privilege.unit_id] = privilege
 | 
| 
bsw@1071
 | 
    23   end
 | 
| 
bsw@1071
 | 
    24 
 | 
| 
bsw@1071
 | 
    25   local current_privileges = Privilege:by_member_id(member.id)
 | 
| 
bsw@1071
 | 
    26   local current_privilege_ids = {}
 | 
| 
bsw@1071
 | 
    27 
 | 
| 
bsw@1071
 | 
    28   for i, privilege in ipairs(current_privileges) do
 | 
| 
bsw@1071
 | 
    29     if privileges_by_unit_id[privilege.unit_id] then
 | 
| 
bsw@1071
 | 
    30       current_privilege_ids[privilege.unit_id] = privilege
 | 
| 
bsw@1071
 | 
    31     else
 | 
| 
bsw@1071
 | 
    32       privilege:destroy()
 | 
| 
bsw@1071
 | 
    33     end
 | 
| 
bsw@1071
 | 
    34   end
 | 
| 
bsw@1071
 | 
    35 
 | 
| 
bsw@1071
 | 
    36   for i, privilege in ipairs(privileges) do
 | 
| 
bsw@1071
 | 
    37     local current_privilege = current_privilege_ids[privilege.unit_id]
 | 
| 
bsw@1071
 | 
    38     if not current_privilege then
 | 
| 
bsw@1071
 | 
    39       current_privilege = Privilege:new()
 | 
| 
bsw@1071
 | 
    40       current_privilege.member_id = member.id
 | 
| 
bsw@1071
 | 
    41       current_privileges[#current_privileges+1] = current_privilege
 | 
| 
bsw@1071
 | 
    42     end
 | 
| 
bsw@1071
 | 
    43     for key, val in pairs(privilege) do
 | 
| 
bsw@1071
 | 
    44       current_privilege[key] = val
 | 
| 
bsw@1071
 | 
    45     end
 | 
| 
bsw@1071
 | 
    46   end
 | 
| 
bsw@1071
 | 
    47 
 | 
| 
bsw@1071
 | 
    48   for i, privilege in ipairs(current_privileges) do
 | 
| 
bsw@1071
 | 
    49     local err = privilege:try_save()
 | 
| 
bsw@1071
 | 
    50     if err then
 | 
| 
bsw@1071
 | 
    51       return false, "privilege_save_error", err
 | 
| 
bsw@1071
 | 
    52     end
 | 
| 
bsw@1071
 | 
    53   end
 | 
| 
bsw@1071
 | 
    54 
 | 
| 
bsw@1071
 | 
    55   return true
 | 
| 
bsw@1071
 | 
    56 end
 |