aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim/Addons
diff options
context:
space:
mode:
authorDiva Canto2014-05-23 17:31:39 -0700
committerDiva Canto2014-05-23 17:31:39 -0700
commitff9da2446583ffd95b42e7ced2a86c2166c993c1 (patch)
treeb775be9cce73a03831bd7d4c23555d844874c093 /OpenSim/Addons
parentMerge branch 'master' of ssh://opensimulator.org/var/git/opensim (diff)
downloadopensim-SC_OLD-ff9da2446583ffd95b42e7ced2a86c2166c993c1.zip
opensim-SC_OLD-ff9da2446583ffd95b42e7ced2a86c2166c993c1.tar.gz
opensim-SC_OLD-ff9da2446583ffd95b42e7ced2a86c2166c993c1.tar.bz2
opensim-SC_OLD-ff9da2446583ffd95b42e7ced2a86c2166c993c1.tar.xz
Added HTTP Authentication also to Groups and offline IM.
Diffstat (limited to 'OpenSim/Addons')
-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
-rw-r--r--OpenSim/Addons/OfflineIM/OfflineIMRegionModule.cs2
-rw-r--r--OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRemoteConnector.cs17
-rw-r--r--OpenSim/Addons/OfflineIM/Remote/OfflineIMServiceRobustConnector.cs9
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;
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 {
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;
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;
36using OpenSim.Services.Interfaces; 37using 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;
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;
@@ -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 }