Software /
code /
prosody
Comparison
plugins/muc/muc.lib.lua @ 6186:85f7cd91dc31
plugins/muc/muc.lib: Smarter validation in set_affiliation
author | daurnimator <quae@daurnimator.com> |
---|---|
date | Fri, 28 Mar 2014 14:15:18 -0400 |
parent | 6185:d4a8840e72f9 |
child | 6187:c0b4b5d41e55 |
comparison
equal
deleted
inserted
replaced
6185:d4a8840e72f9 | 6186:85f7cd91dc31 |
---|---|
1309 local bare = node and node.."@"..host or host; | 1309 local bare = node and node.."@"..host or host; |
1310 local result = self._affiliations[bare]; -- Affiliations are granted, revoked, and maintained based on the user's bare JID. | 1310 local result = self._affiliations[bare]; -- Affiliations are granted, revoked, and maintained based on the user's bare JID. |
1311 if not result and self._affiliations[host] == "outcast" then result = "outcast"; end -- host banned | 1311 if not result and self._affiliations[host] == "outcast" then result = "outcast"; end -- host banned |
1312 return result; | 1312 return result; |
1313 end | 1313 end |
1314 | |
1315 local valid_affiliations = { | |
1316 outcast = true; | |
1317 none = true; | |
1318 member = true; | |
1319 admin = true; | |
1320 owner = true; | |
1321 }; | |
1314 function room_mt:set_affiliation(actor, jid, affiliation, reason) | 1322 function room_mt:set_affiliation(actor, jid, affiliation, reason) |
1323 if not actor then return nil, "modify", "not-acceptable"; end; | |
1324 | |
1315 jid = jid_bare(jid); | 1325 jid = jid_bare(jid); |
1316 if affiliation == "none" then affiliation = nil; end | 1326 |
1317 if affiliation and affiliation ~= "outcast" and affiliation ~= "owner" and affiliation ~= "admin" and affiliation ~= "member" then | 1327 if valid_affiliations[affiliation or "none"] == nil then |
1318 return nil, "modify", "not-acceptable"; | 1328 return nil, "modify", "not-acceptable"; |
1319 end | 1329 end |
1330 affiliation = affiliation ~= "none" and affiliation or nil; -- coerces `affiliation == false` to `nil` | |
1331 | |
1320 if actor ~= true then | 1332 if actor ~= true then |
1321 local actor_affiliation = self:get_affiliation(actor); | 1333 local actor_affiliation = self:get_affiliation(actor); |
1322 local target_affiliation = self:get_affiliation(jid); | 1334 local target_affiliation = self:get_affiliation(jid); |
1323 if target_affiliation == affiliation then -- no change, shortcut | 1335 if target_affiliation == affiliation then -- no change, shortcut |
1324 return true; | 1336 return true; |