diff options
6 files changed, 55 insertions, 39 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; | |||
32 | using System.Text; | 32 | using System.Text; |
33 | 33 | ||
34 | using OpenSim.Framework; | 34 | using OpenSim.Framework; |
35 | using OpenSim.Framework.ServiceAuth; | ||
35 | using OpenSim.Server.Base; | 36 | using OpenSim.Server.Base; |
36 | 37 | ||
37 | using OpenMetaverse; | 38 | using OpenMetaverse; |
38 | using log4net; | 39 | using log4net; |
40 | using Nini.Config; | ||
39 | 41 | ||
40 | namespace OpenSim.Groups | 42 | namespace 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; | |||
36 | using OpenSim.Server.Base; | 36 | using OpenSim.Server.Base; |
37 | using OpenSim.Services.Interfaces; | 37 | using OpenSim.Services.Interfaces; |
38 | using OpenSim.Framework.Servers.HttpServer; | 38 | using OpenSim.Framework.Servers.HttpServer; |
39 | using OpenSim.Framework.ServiceAuth; | ||
39 | using OpenSim.Server.Handlers.Base; | 40 | using OpenSim.Server.Handlers.Base; |
40 | using log4net; | 41 | using log4net; |
41 | using OpenMetaverse; | 42 | using 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 | { |
diff --git a/OpenSim/Addons/OfflineIM/OfflineIMRegionModule.cs b/OpenSim/Addons/OfflineIM/OfflineIMRegionModule.cs index 950e1fd..5340bcd 100644 --- a/OpenSim/Addons/OfflineIM/OfflineIMRegionModule.cs +++ b/OpenSim/Addons/OfflineIM/OfflineIMRegionModule.cs | |||
@@ -66,7 +66,7 @@ namespace OpenSim.OfflineIM | |||
66 | if (serviceLocation == string.Empty) | 66 | if (serviceLocation == string.Empty) |
67 | m_OfflineIMService = new OfflineIMService(config); | 67 | m_OfflineIMService = new OfflineIMService(config); |
68 | else | 68 | else |
69 | m_OfflineIMService = new OfflineIMServiceRemoteConnector(serviceLocation); | 69 | m_OfflineIMService = new OfflineIMServiceRemoteConnector(config); |
70 | 70 | ||
71 | m_ForwardOfflineGroupMessages = cnf.GetBoolean("ForwardOfflineGroupMessages", m_ForwardOfflineGroupMessages); | 71 | m_ForwardOfflineGroupMessages = cnf.GetBoolean("ForwardOfflineGroupMessages", m_ForwardOfflineGroupMessages); |
72 | m_log.DebugFormat("[OfflineIM.V2]: Offline messages enabled by {0}", Name); | 72 | m_log.DebugFormat("[OfflineIM.V2]: Offline messages enabled by {0}", Name); |
diff --git a/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRemoteConnector.cs b/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRemoteConnector.cs index eb287a4..047b8be 100644 --- a/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRemoteConnector.cs +++ b/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRemoteConnector.cs | |||
@@ -32,6 +32,7 @@ using System.Reflection; | |||
32 | using System.Text; | 32 | using System.Text; |
33 | 33 | ||
34 | using OpenSim.Framework; | 34 | using OpenSim.Framework; |
35 | using OpenSim.Framework.ServiceAuth; | ||
35 | using OpenSim.Server.Base; | 36 | using OpenSim.Server.Base; |
36 | using OpenSim.Services.Interfaces; | 37 | using OpenSim.Services.Interfaces; |
37 | 38 | ||
@@ -46,6 +47,7 @@ namespace OpenSim.OfflineIM | |||
46 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 47 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
47 | 48 | ||
48 | private string m_ServerURI = string.Empty; | 49 | private string m_ServerURI = string.Empty; |
50 | private IServiceAuth m_Auth; | ||
49 | private object m_Lock = new object(); | 51 | private object m_Lock = new object(); |
50 | 52 | ||
51 | public OfflineIMServiceRemoteConnector(string url) | 53 | public OfflineIMServiceRemoteConnector(string url) |
@@ -65,6 +67,18 @@ namespace OpenSim.OfflineIM | |||
65 | 67 | ||
66 | m_ServerURI = cnf.GetString("OfflineMessageURL", string.Empty); | 68 | m_ServerURI = cnf.GetString("OfflineMessageURL", string.Empty); |
67 | 69 | ||
70 | /// This is from BaseServiceConnector | ||
71 | string authType = Util.GetConfigVarFromSections<string>(config, "AuthType", new string[] { "Network", "Messaging" }, "None"); | ||
72 | |||
73 | switch (authType) | ||
74 | { | ||
75 | case "BasicHttpAuthentication": | ||
76 | m_Auth = new BasicHttpAuthentication(config, "Messaging"); | ||
77 | break; | ||
78 | } | ||
79 | /// | ||
80 | m_log.DebugFormat("[OfflineIM.V2.RemoteConnector]: Offline IM server at {0} with auth {1}", | ||
81 | m_ServerURI, (m_Auth == null ? "None" : m_Auth.GetType().ToString())); | ||
68 | } | 82 | } |
69 | 83 | ||
70 | #region IOfflineIMService | 84 | #region IOfflineIMService |
@@ -143,7 +157,8 @@ namespace OpenSim.OfflineIM | |||
143 | lock (m_Lock) | 157 | lock (m_Lock) |
144 | reply = SynchronousRestFormsRequester.MakeRequest("POST", | 158 | reply = SynchronousRestFormsRequester.MakeRequest("POST", |
145 | m_ServerURI + "/offlineim", | 159 | m_ServerURI + "/offlineim", |
146 | ServerUtils.BuildQueryString(sendData)); | 160 | ServerUtils.BuildQueryString(sendData), |
161 | m_Auth); | ||
147 | 162 | ||
148 | Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse( | 163 | Dictionary<string, object> replyData = ServerUtils.ParseXmlResponse( |
149 | reply); | 164 | reply); |
diff --git a/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRobustConnector.cs b/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRobustConnector.cs index ed5c742..c44b6cc 100644 --- a/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRobustConnector.cs +++ b/OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRobustConnector.cs | |||
@@ -36,6 +36,7 @@ using OpenSim.Framework; | |||
36 | using OpenSim.Server.Base; | 36 | using OpenSim.Server.Base; |
37 | using OpenSim.Services.Interfaces; | 37 | using OpenSim.Services.Interfaces; |
38 | using OpenSim.Framework.Servers.HttpServer; | 38 | using OpenSim.Framework.Servers.HttpServer; |
39 | using OpenSim.Framework.ServiceAuth; | ||
39 | using OpenSim.Server.Handlers.Base; | 40 | using OpenSim.Server.Handlers.Base; |
40 | using log4net; | 41 | using log4net; |
41 | using OpenMetaverse; | 42 | using OpenMetaverse; |
@@ -59,7 +60,9 @@ namespace OpenSim.OfflineIM | |||
59 | 60 | ||
60 | m_OfflineIMService = new OfflineIMService(config); | 61 | m_OfflineIMService = new OfflineIMService(config); |
61 | 62 | ||
62 | server.AddStreamHandler(new OfflineIMServicePostHandler(m_OfflineIMService)); | 63 | IServiceAuth auth = ServiceAuth.Create(config, m_ConfigName); |
64 | |||
65 | server.AddStreamHandler(new OfflineIMServicePostHandler(m_OfflineIMService, auth)); | ||
63 | } | 66 | } |
64 | } | 67 | } |
65 | 68 | ||
@@ -69,8 +72,8 @@ namespace OpenSim.OfflineIM | |||
69 | 72 | ||
70 | private IOfflineIMService m_OfflineIMService; | 73 | private IOfflineIMService m_OfflineIMService; |
71 | 74 | ||
72 | public OfflineIMServicePostHandler(IOfflineIMService service) : | 75 | public OfflineIMServicePostHandler(IOfflineIMService service, IServiceAuth auth) : |
73 | base("POST", "/offlineim") | 76 | base("POST", "/offlineim", auth) |
74 | { | 77 | { |
75 | m_OfflineIMService = service; | 78 | m_OfflineIMService = service; |
76 | } | 79 | } |