aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Addons/Groups/Remote
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim/Addons/Groups/Remote')
-rw-r--r--OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnector.cs33
-rw-r--r--OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnectorModule.cs8
-rw-r--r--OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs25
3 files changed, 32 insertions, 34 deletions
diff --git a/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnector.cs b/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnector.cs
index 1425a23..7450c14 100644
--- a/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnector.cs
+++ b/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnector.cs
@@ -32,29 +32,47 @@ using System.Reflection;
32using System.Text; 32using System.Text;
33 33
34using OpenSim.Framework; 34using OpenSim.Framework;
35using OpenSim.Framework.ServiceAuth;
35using OpenSim.Server.Base; 36using OpenSim.Server.Base;
36 37
37using OpenMetaverse; 38using OpenMetaverse;
38using log4net; 39using log4net;
40using Nini.Config;
39 41
40namespace OpenSim.Groups 42namespace OpenSim.Groups
41{ 43{
42 public class GroupsServiceRemoteConnector 44 public class GroupsServiceRemoteConnector
43 { 45 {
44 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 46 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
45 47
46 private string m_ServerURI; 48 private string m_ServerURI;
47 private string m_SecretKey; 49 private IServiceAuth m_Auth;
48 private object m_Lock = new object(); 50 private object m_Lock = new object();
49 51
50 public GroupsServiceRemoteConnector(string url, string secret) 52 public GroupsServiceRemoteConnector(IConfigSource config)
51 { 53 {
54 IConfig groupsConfig = config.Configs["Groups"];
55 string url = groupsConfig.GetString("GroupsServerURI", string.Empty);
56 if (!Uri.IsWellFormedUriString(url, UriKind.Absolute))
57 throw new Exception(string.Format("[Groups.RemoteConnector]: Malformed groups server URL {0}. Fix it or disable the Groups feature.", url));
58
52 m_ServerURI = url; 59 m_ServerURI = url;
53 if (!m_ServerURI.EndsWith("/")) 60 if (!m_ServerURI.EndsWith("/"))
54 m_ServerURI += "/"; 61 m_ServerURI += "/";
55 62
56 m_SecretKey = secret; 63 /// This is from BaseServiceConnector
57 m_log.DebugFormat("[Groups.RemoteConnector]: Groups server at {0}, secret key {1}", m_ServerURI, m_SecretKey); 64 string authType = Util.GetConfigVarFromSections<string>(config, "AuthType", new string[] { "Network", "Groups" }, "None");
65
66 switch (authType)
67 {
68 case "BasicHttpAuthentication":
69 m_Auth = new BasicHttpAuthentication(config, "Groups");
70 break;
71 }
72 ///
73
74 m_log.DebugFormat("[Groups.RemoteConnector]: Groups server at {0}, authentication {1}",
75 m_ServerURI, (m_Auth == null ? "None" : m_Auth.GetType().ToString()));
58 } 76 }
59 77
60 public ExtendedGroupRecord CreateGroup(string RequestingAgentID, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment, 78 public ExtendedGroupRecord CreateGroup(string RequestingAgentID, string name, string charter, bool showInList, UUID insigniaID, int membershipFee, bool openEnrollment,
@@ -656,14 +674,13 @@ namespace OpenSim.Groups
656 private Dictionary<string, object> MakeRequest(string method, Dictionary<string, object> sendData) 674 private Dictionary<string, object> MakeRequest(string method, Dictionary<string, object> sendData)
657 { 675 {
658 sendData["METHOD"] = method; 676 sendData["METHOD"] = method;
659 if (m_SecretKey != string.Empty)
660 sendData["KEY"] = m_SecretKey;
661 677
662 string reply = string.Empty; 678 string reply = string.Empty;
663 lock (m_Lock) 679 lock (m_Lock)
664 reply = SynchronousRestFormsRequester.MakeRequest("POST", 680 reply = SynchronousRestFormsRequester.MakeRequest("POST",
665 m_ServerURI + "groups", 681 m_ServerURI + "groups",
666 ServerUtils.BuildQueryString(sendData)); 682 ServerUtils.BuildQueryString(sendData),
683 m_Auth);
667 684
668 if (reply == string.Empty) 685 if (reply == string.Empty)
669 return null; 686 return null;
diff --git a/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnectorModule.cs b/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnectorModule.cs
index 5fb3c19..fddda22 100644
--- a/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnectorModule.cs
+++ b/OpenSim/Addons/Groups/Remote/GroupsServiceRemoteConnectorModule.cs
@@ -72,13 +72,7 @@ namespace OpenSim.Groups
72 72
73 private void Init(IConfigSource config) 73 private void Init(IConfigSource config)
74 { 74 {
75 IConfig groupsConfig = config.Configs["Groups"]; 75 m_GroupsService = new GroupsServiceRemoteConnector(config);
76 string url = groupsConfig.GetString("GroupsServerURI", string.Empty);
77 if (!Uri.IsWellFormedUriString(url, UriKind.Absolute))
78 throw new Exception(string.Format("[Groups.RemoteConnector]: Malformed groups server URL {0}. Fix it or disable the Groups feature.", url));
79
80 string secret = groupsConfig.GetString("SecretKey", string.Empty);
81 m_GroupsService = new GroupsServiceRemoteConnector(url, secret);
82 m_Scenes = new List<Scene>(); 76 m_Scenes = new List<Scene>();
83 77
84 } 78 }
diff --git a/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs b/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs
index 33dc301..55ae6db 100644
--- a/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs
+++ b/OpenSim/Addons/Groups/Remote/GroupsServiceRobustConnector.cs
@@ -36,6 +36,7 @@ using OpenSim.Framework;
36using OpenSim.Server.Base; 36using OpenSim.Server.Base;
37using OpenSim.Services.Interfaces; 37using OpenSim.Services.Interfaces;
38using OpenSim.Framework.Servers.HttpServer; 38using OpenSim.Framework.Servers.HttpServer;
39using OpenSim.Framework.ServiceAuth;
39using OpenSim.Server.Handlers.Base; 40using OpenSim.Server.Handlers.Base;
40using log4net; 41using log4net;
41using OpenMetaverse; 42using OpenMetaverse;
@@ -69,7 +70,9 @@ namespace OpenSim.Groups
69 70
70 m_GroupsService = new GroupsService(config); 71 m_GroupsService = new GroupsService(config);
71 72
72 server.AddStreamHandler(new GroupsServicePostHandler(m_GroupsService, key)); 73 IServiceAuth auth = ServiceAuth.Create(config, m_ConfigName);
74
75 server.AddStreamHandler(new GroupsServicePostHandler(m_GroupsService, auth));
73 } 76 }
74 } 77 }
75 78
@@ -78,13 +81,11 @@ namespace OpenSim.Groups
78 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 81 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
79 82
80 private GroupsService m_GroupsService; 83 private GroupsService m_GroupsService;
81 private string m_SecretKey = String.Empty;
82 84
83 public GroupsServicePostHandler(GroupsService service, string key) : 85 public GroupsServicePostHandler(GroupsService service, IServiceAuth auth) :
84 base("POST", "/groups") 86 base("POST", "/groups", auth)
85 { 87 {
86 m_GroupsService = service; 88 m_GroupsService = service;
87 m_SecretKey = key;
88 } 89 }
89 90
90 protected override byte[] ProcessRequest(string path, Stream requestData, 91 protected override byte[] ProcessRequest(string path, Stream requestData,
@@ -108,20 +109,6 @@ namespace OpenSim.Groups
108 string method = request["METHOD"].ToString(); 109 string method = request["METHOD"].ToString();
109 request.Remove("METHOD"); 110 request.Remove("METHOD");
110 111
111 if (!String.IsNullOrEmpty(m_SecretKey)) // Verification required
112 {
113 // Sender didn't send key
114 if (!request.ContainsKey("KEY") || (request["KEY"] == null))
115 return FailureResult("This service requires a secret key");
116
117 // Sender sent wrong key
118 if (!m_SecretKey.Equals(request["KEY"]))
119 return FailureResult("Provided key does not match existing one");
120
121 // OK, key matches. Remove it.
122 request.Remove("KEY");
123 }
124
125 m_log.DebugFormat("[Groups.Handler]: {0}", method); 112 m_log.DebugFormat("[Groups.Handler]: {0}", method);
126 switch (method) 113 switch (method)
127 { 114 {