OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
GroupsServiceHGConnector.cs
Go to the documentation of this file.
1 /*
2  * Copyright (c) Contributors, http://opensimulator.org/
3  * See CONTRIBUTORS.TXT for a full list of copyright holders.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  * * Redistributions of source code must retain the above copyright
8  * notice, this list of conditions and the following disclaimer.
9  * * Redistributions in binary form must reproduce the above copyright
10  * notice, this list of conditions and the following disclaimer in the
11  * documentation and/or other materials provided with the distribution.
12  * * Neither the name of the OpenSimulator Project nor the
13  * names of its contributors may be used to endorse or promote products
14  * derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17  * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19  * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21  * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23  * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25  * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26  */
27 
28 using System;
29 using System.Collections.Generic;
30 using System.Linq;
31 using System.Reflection;
32 using System.Text;
33 
34 using OpenSim.Framework;
35 using OpenSim.Server.Base;
36 
37 using OpenMetaverse;
38 using log4net;
39 
40 namespace OpenSim.Groups
41 {
43  {
44  private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
45 
46  private string m_ServerURI;
47  private object m_Lock = new object();
48 
49  public GroupsServiceHGConnector(string url)
50  {
51  m_ServerURI = url;
52  if (!m_ServerURI.EndsWith("/"))
53  m_ServerURI += "/";
54 
55  m_log.DebugFormat("[Groups.HGConnector]: Groups server at {0}", m_ServerURI);
56  }
57 
58  public bool CreateProxy(string RequestingAgentID, string AgentID, string accessToken, UUID groupID, string url, string name, out string reason)
59  {
60  reason = string.Empty;
61 
62  Dictionary<string, object> sendData = new Dictionary<string,object>();
63  sendData["RequestingAgentID"] = RequestingAgentID;
64  sendData["AgentID"] = AgentID.ToString();
65  sendData["AccessToken"] = accessToken;
66  sendData["GroupID"] = groupID.ToString();
67  sendData["Location"] = url;
68  sendData["Name"] = name;
69  Dictionary<string, object> ret = MakeRequest("POSTGROUP", sendData);
70 
71  if (ret == null)
72  return false;
73 
74  if (!ret.ContainsKey("RESULT"))
75  return false;
76 
77  if (ret["RESULT"].ToString().ToLower() != "true")
78  {
79  reason = ret["REASON"].ToString();
80  return false;
81  }
82 
83  return true;
84 
85  }
86 
87  public void RemoveAgentFromGroup(string AgentID, UUID GroupID, string token)
88  {
89  Dictionary<string, object> sendData = new Dictionary<string, object>();
90  sendData["AgentID"] = AgentID;
91  sendData["GroupID"] = GroupID.ToString();
92  sendData["AccessToken"] = GroupsDataUtils.Sanitize(token);
93  MakeRequest("REMOVEAGENTFROMGROUP", sendData);
94  }
95 
96  public ExtendedGroupRecord GetGroupRecord(string RequestingAgentID, UUID GroupID, string GroupName, string token)
97  {
98  if (GroupID == UUID.Zero && (GroupName == null || (GroupName != null && GroupName == string.Empty)))
99  return null;
100 
101  Dictionary<string, object> sendData = new Dictionary<string, object>();
102  if (GroupID != UUID.Zero)
103  sendData["GroupID"] = GroupID.ToString();
104  if (!string.IsNullOrEmpty(GroupName))
105  sendData["Name"] = GroupsDataUtils.Sanitize(GroupName);
106 
107  sendData["RequestingAgentID"] = RequestingAgentID;
108  sendData["AccessToken"] = GroupsDataUtils.Sanitize(token);
109 
110  Dictionary<string, object> ret = MakeRequest("GETGROUP", sendData);
111 
112  if (ret == null)
113  return null;
114 
115  if (!ret.ContainsKey("RESULT"))
116  return null;
117 
118  if (ret["RESULT"].ToString() == "NULL")
119  return null;
120 
121  return GroupsDataUtils.GroupRecord((Dictionary<string, object>)ret["RESULT"]);
122  }
123 
124  public List<ExtendedGroupMembersData> GetGroupMembers(string RequestingAgentID, UUID GroupID, string token)
125  {
126  List<ExtendedGroupMembersData> members = new List<ExtendedGroupMembersData>();
127 
128  Dictionary<string, object> sendData = new Dictionary<string, object>();
129  sendData["GroupID"] = GroupID.ToString();
130  sendData["RequestingAgentID"] = RequestingAgentID;
131  sendData["AccessToken"] = GroupsDataUtils.Sanitize(token);
132  Dictionary<string, object> ret = MakeRequest("GETGROUPMEMBERS", sendData);
133 
134  if (ret == null)
135  return members;
136 
137  if (!ret.ContainsKey("RESULT"))
138  return members;
139 
140  if (ret["RESULT"].ToString() == "NULL")
141  return members;
142  foreach (object v in ((Dictionary<string, object>)ret["RESULT"]).Values)
143  {
144  ExtendedGroupMembersData m = GroupsDataUtils.GroupMembersData((Dictionary<string, object>)v);
145  members.Add(m);
146  }
147 
148  return members;
149  }
150 
151  public List<GroupRolesData> GetGroupRoles(string RequestingAgentID, UUID GroupID, string token)
152  {
153  List<GroupRolesData> roles = new List<GroupRolesData>();
154 
155  Dictionary<string, object> sendData = new Dictionary<string, object>();
156  sendData["GroupID"] = GroupID.ToString();
157  sendData["RequestingAgentID"] = RequestingAgentID;
158  sendData["AccessToken"] = GroupsDataUtils.Sanitize(token);
159  Dictionary<string, object> ret = MakeRequest("GETGROUPROLES", sendData);
160 
161  if (ret == null)
162  return roles;
163 
164  if (!ret.ContainsKey("RESULT"))
165  return roles;
166 
167  if (ret["RESULT"].ToString() == "NULL")
168  return roles;
169  foreach (object v in ((Dictionary<string, object>)ret["RESULT"]).Values)
170  {
171  GroupRolesData m = GroupsDataUtils.GroupRolesData((Dictionary<string, object>)v);
172  roles.Add(m);
173  }
174 
175  return roles;
176  }
177 
178  public List<ExtendedGroupRoleMembersData> GetGroupRoleMembers(string RequestingAgentID, UUID GroupID, string token)
179  {
180  List<ExtendedGroupRoleMembersData> rmembers = new List<ExtendedGroupRoleMembersData>();
181 
182  Dictionary<string, object> sendData = new Dictionary<string, object>();
183  sendData["GroupID"] = GroupID.ToString();
184  sendData["RequestingAgentID"] = RequestingAgentID;
185  sendData["AccessToken"] = GroupsDataUtils.Sanitize(token);
186  Dictionary<string, object> ret = MakeRequest("GETROLEMEMBERS", sendData);
187 
188  if (ret == null)
189  return rmembers;
190 
191  if (!ret.ContainsKey("RESULT"))
192  return rmembers;
193 
194  if (ret["RESULT"].ToString() == "NULL")
195  return rmembers;
196 
197  foreach (object v in ((Dictionary<string, object>)ret["RESULT"]).Values)
198  {
199  ExtendedGroupRoleMembersData m = GroupsDataUtils.GroupRoleMembersData((Dictionary<string, object>)v);
200  rmembers.Add(m);
201  }
202 
203  return rmembers;
204  }
205 
206  public bool AddNotice(string RequestingAgentID, UUID groupID, UUID noticeID, string fromName, string subject, string message,
207  bool hasAttachment, byte attType, string attName, UUID attItemID, string attOwnerID)
208  {
209  Dictionary<string, object> sendData = new Dictionary<string, object>();
210  sendData["GroupID"] = groupID.ToString();
211  sendData["NoticeID"] = noticeID.ToString();
212  sendData["FromName"] = GroupsDataUtils.Sanitize(fromName);
213  sendData["Subject"] = GroupsDataUtils.Sanitize(subject);
214  sendData["Message"] = GroupsDataUtils.Sanitize(message);
215  sendData["HasAttachment"] = hasAttachment.ToString();
216  if (hasAttachment)
217  {
218  sendData["AttachmentType"] = attType.ToString();
219  sendData["AttachmentName"] = attName.ToString();
220  sendData["AttachmentItemID"] = attItemID.ToString();
221  sendData["AttachmentOwnerID"] = attOwnerID;
222  }
223  sendData["RequestingAgentID"] = RequestingAgentID;
224 
225  Dictionary<string, object> ret = MakeRequest("ADDNOTICE", sendData);
226 
227  if (ret == null)
228  return false;
229 
230  if (!ret.ContainsKey("RESULT"))
231  return false;
232 
233  if (ret["RESULT"].ToString().ToLower() != "true")
234  return false;
235 
236  return true;
237  }
238 
239  public bool VerifyNotice(UUID noticeID, UUID groupID)
240  {
241  Dictionary<string, object> sendData = new Dictionary<string, object>();
242  sendData["NoticeID"] = noticeID.ToString();
243  sendData["GroupID"] = groupID.ToString();
244  Dictionary<string, object> ret = MakeRequest("VERIFYNOTICE", sendData);
245 
246  if (ret == null)
247  return false;
248 
249  if (!ret.ContainsKey("RESULT"))
250  return false;
251 
252  if (ret["RESULT"].ToString().ToLower() != "true")
253  return false;
254 
255  return true;
256  }
257 
258  //
259  //
260  //
261  //
262  //
263 
264  #region Make Request
265 
266  private Dictionary<string, object> MakeRequest(string method, Dictionary<string, object> sendData)
267  {
268  sendData["METHOD"] = method;
269 
270  string reply = string.Empty;
271  lock (m_Lock)
272  reply = SynchronousRestFormsRequester.MakeRequest("POST",
273  m_ServerURI + "hg-groups",
274  ServerUtils.BuildQueryString(sendData));
275 
276  //m_log.DebugFormat("[XXX]: reply was {0}", reply);
277 
278  if (string.IsNullOrEmpty(reply))
279  return null;
280 
281  Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse(
282  reply);
283 
284  return replyData;
285  }
286  #endregion
287 
288  }
289 }
List< ExtendedGroupMembersData > GetGroupMembers(string RequestingAgentID, UUID GroupID, string token)
ExtendedGroupRecord GetGroupRecord(string RequestingAgentID, UUID GroupID, string GroupName, string token)
List< GroupRolesData > GetGroupRoles(string RequestingAgentID, UUID GroupID, string token)
bool AddNotice(string RequestingAgentID, UUID groupID, UUID noticeID, string fromName, string subject, string message, bool hasAttachment, byte attType, string attName, UUID attItemID, string attOwnerID)
static string Sanitize(string s)
List< ExtendedGroupRoleMembersData > GetGroupRoleMembers(string RequestingAgentID, UUID GroupID, string token)
bool VerifyNotice(UUID noticeID, UUID groupID)
void RemoveAgentFromGroup(string AgentID, UUID GroupID, string token)
bool CreateProxy(string RequestingAgentID, string AgentID, string accessToken, UUID groupID, string url, string name, out string reason)