If REMOVEAGENTFROMGROUP core groups call fails because requesting agent does not have sufficient permission, return null failure result rather than true.

On non-HG this is on the only recognized failure state so we can return more information in the error result.
On HG there are multiple failure states which would require more work to distinguish, so currently return the unsatisfying "Internal Error" like some other existing calls.
bullet-2.82
Justin Clark-Casey (justincc) 2014-07-31 21:32:20 +01:00
parent 6ab463a446
commit dfd0c2a54a
4 changed files with 22 additions and 10 deletions

View File

@ -209,9 +209,10 @@ namespace OpenSim.Groups
string agentID = request["AgentID"].ToString(); string agentID = request["AgentID"].ToString();
string token = request["AccessToken"].ToString(); string token = request["AccessToken"].ToString();
m_GroupsService.RemoveAgentFromGroup(agentID, agentID, groupID, token); if (!m_GroupsService.RemoveAgentFromGroup(agentID, agentID, groupID, token))
NullResult(result, "Internal error");
result["RESULT"] = "true"; else
result["RESULT"] = "true";
} }
//m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString);

View File

@ -285,9 +285,10 @@ namespace OpenSim.Groups
string agentID = request["AgentID"].ToString(); string agentID = request["AgentID"].ToString();
string requestingAgentID = request["RequestingAgentID"].ToString(); string requestingAgentID = request["RequestingAgentID"].ToString();
m_GroupsService.RemoveAgentFromGroup(requestingAgentID, agentID, groupID); if (!m_GroupsService.RemoveAgentFromGroup(requestingAgentID, agentID, groupID))
NullResult(result, string.Format("Insufficient permissions.", agentID));
result["RESULT"] = "true"; else
result["RESULT"] = "true";
} }
//m_log.DebugFormat("[XXX]: resp string: {0}", xmlString); //m_log.DebugFormat("[XXX]: resp string: {0}", xmlString);

View File

@ -393,13 +393,15 @@ namespace OpenSim.Groups
return true; return true;
} }
public void RemoveAgentFromGroup(string RequestingAgentID, string AgentID, UUID GroupID) public bool RemoveAgentFromGroup(string RequestingAgentID, string AgentID, UUID GroupID)
{ {
// check perms // check perms
if (RequestingAgentID != AgentID && !HasPower(RequestingAgentID, GroupID, GroupPowers.Eject)) if (RequestingAgentID != AgentID && !HasPower(RequestingAgentID, GroupID, GroupPowers.Eject))
return; return false;
_RemoveAgentFromGroup(RequestingAgentID, AgentID, GroupID); _RemoveAgentFromGroup(RequestingAgentID, AgentID, GroupID);
return true;
} }
public bool AddAgentToGroupInvite(string RequestingAgentID, UUID inviteID, UUID groupID, UUID roleID, string agentID) public bool AddAgentToGroupInvite(string RequestingAgentID, UUID inviteID, UUID groupID, UUID roleID, string agentID)

View File

@ -131,19 +131,27 @@ namespace OpenSim.Groups
return true; return true;
} }
public void RemoveAgentFromGroup(string RequestingAgentID, string AgentID, UUID GroupID, string token) public bool RemoveAgentFromGroup(string RequestingAgentID, string AgentID, UUID GroupID, string token)
{ {
// check the token // check the token
MembershipData membership = m_Database.RetrieveMember(GroupID, AgentID); MembershipData membership = m_Database.RetrieveMember(GroupID, AgentID);
if (membership != null) if (membership != null)
{ {
if (token != string.Empty && token.Equals(membership.Data["AccessToken"])) if (token != string.Empty && token.Equals(membership.Data["AccessToken"]))
RemoveAgentFromGroup(RequestingAgentID, AgentID, GroupID); {
return RemoveAgentFromGroup(RequestingAgentID, AgentID, GroupID);
}
else else
{
m_log.DebugFormat("[Groups.HGGroupsService]: access token {0} did not match stored one {1}", token, membership.Data["AccessToken"]); m_log.DebugFormat("[Groups.HGGroupsService]: access token {0} did not match stored one {1}", token, membership.Data["AccessToken"]);
return false;
}
} }
else else
{
m_log.DebugFormat("[Groups.HGGroupsService]: membership not found for {0}", AgentID); m_log.DebugFormat("[Groups.HGGroupsService]: membership not found for {0}", AgentID);
return false;
}
} }
public ExtendedGroupRecord GetGroupRecord(string RequestingAgentID, UUID GroupID, string groupName, string token) public ExtendedGroupRecord GetGroupRecord(string RequestingAgentID, UUID GroupID, string groupName, string token)