diff options
author | Rob Smart | 2009-09-10 20:15:50 +0100 |
---|---|---|
committer | Diva Canto | 2009-09-10 17:53:05 -0700 |
commit | b5c8925fdf17db87df6118449f2f84adb1326225 (patch) | |
tree | 6e332f052221028039c7f80d919227d1b4d95289 /OpenSim | |
parent | adding in working functionality for the remote connector (diff) | |
download | opensim-SC-b5c8925fdf17db87df6118449f2f84adb1326225.zip opensim-SC-b5c8925fdf17db87df6118449f2f84adb1326225.tar.gz opensim-SC-b5c8925fdf17db87df6118449f2f84adb1326225.tar.bz2 opensim-SC-b5c8925fdf17db87df6118449f2f84adb1326225.tar.xz |
added AuthorizationRequest and AuthorizationResponse objects for passing Authorization messages over http. Added handling code for these in the AuthorizationServerConnector and AuthorizationServicesConnector
Diffstat (limited to 'OpenSim')
-rw-r--r-- | OpenSim/Framework/AuthorizationRequest.cs | 92 | ||||
-rw-r--r-- | OpenSim/Framework/AuthorizationResponse.cs | 58 | ||||
-rw-r--r-- | OpenSim/Server/Handlers/Authorization/AuthorizationServerConnector.cs | 2 | ||||
-rw-r--r-- | OpenSim/Server/Handlers/Authorization/AuthorizationServerPostHandler.cs (renamed from OpenSim/Server/Handlers/Authorization/AuthorizationServerGetHandler.cs) | 49 | ||||
-rw-r--r-- | OpenSim/Services/Connectors/Authorization/AuthorizationServiceConnector.cs | 17 |
5 files changed, 172 insertions, 46 deletions
diff --git a/OpenSim/Framework/AuthorizationRequest.cs b/OpenSim/Framework/AuthorizationRequest.cs new file mode 100644 index 0000000..864d87d --- /dev/null +++ b/OpenSim/Framework/AuthorizationRequest.cs | |||
@@ -0,0 +1,92 @@ | |||
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 | namespace OpenSim.Framework | ||
29 | { | ||
30 | public class AuthorizationRequest | ||
31 | { | ||
32 | private string m_ID; | ||
33 | private string m_firstname; | ||
34 | private string m_surname; | ||
35 | private string m_email; | ||
36 | private string m_regionName; | ||
37 | private string m_regionID; | ||
38 | |||
39 | public AuthorizationRequest() | ||
40 | { | ||
41 | } | ||
42 | |||
43 | public AuthorizationRequest(string ID,string FirstName, string SurName, string Email, string RegionName, string RegionID) | ||
44 | { | ||
45 | m_ID = ID; | ||
46 | m_firstname = FirstName; | ||
47 | m_surname = SurName; | ||
48 | m_email = Email; | ||
49 | m_regionName = RegionName; | ||
50 | m_regionID = RegionID; | ||
51 | } | ||
52 | |||
53 | public string ID | ||
54 | { | ||
55 | get { return m_ID; } | ||
56 | set { m_ID = value; } | ||
57 | } | ||
58 | |||
59 | public string FirstName | ||
60 | { | ||
61 | get { return m_firstname; } | ||
62 | set { m_firstname = value; } | ||
63 | } | ||
64 | |||
65 | public string SurName | ||
66 | { | ||
67 | get { return m_surname; } | ||
68 | set { m_surname = value; } | ||
69 | } | ||
70 | |||
71 | public string Email | ||
72 | { | ||
73 | get { return m_email; } | ||
74 | set { m_email = value; } | ||
75 | } | ||
76 | |||
77 | public string RegionName | ||
78 | { | ||
79 | get { return m_regionName; } | ||
80 | set { m_regionName = value; } | ||
81 | } | ||
82 | |||
83 | public string RegionID | ||
84 | { | ||
85 | get { return m_regionID; } | ||
86 | set { m_regionID = value; } | ||
87 | } | ||
88 | |||
89 | |||
90 | |||
91 | } | ||
92 | } \ No newline at end of file | ||
diff --git a/OpenSim/Framework/AuthorizationResponse.cs b/OpenSim/Framework/AuthorizationResponse.cs new file mode 100644 index 0000000..5a03dfe --- /dev/null +++ b/OpenSim/Framework/AuthorizationResponse.cs | |||
@@ -0,0 +1,58 @@ | |||
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 | namespace OpenSim.Framework | ||
29 | { | ||
30 | public class AuthorizationResponse | ||
31 | { | ||
32 | private bool m_isAuthorized; | ||
33 | private string m_message; | ||
34 | |||
35 | public AuthorizationResponse() | ||
36 | { | ||
37 | } | ||
38 | |||
39 | public AuthorizationResponse(bool isAuthorized,string message) | ||
40 | { | ||
41 | m_isAuthorized = isAuthorized; | ||
42 | m_message = message; | ||
43 | |||
44 | } | ||
45 | |||
46 | public bool IsAuthorized | ||
47 | { | ||
48 | get { return m_isAuthorized; } | ||
49 | set { m_isAuthorized = value; } | ||
50 | } | ||
51 | |||
52 | public string Message | ||
53 | { | ||
54 | get { return m_message; } | ||
55 | set { m_message = value; } | ||
56 | } | ||
57 | } | ||
58 | } \ No newline at end of file | ||
diff --git a/OpenSim/Server/Handlers/Authorization/AuthorizationServerConnector.cs b/OpenSim/Server/Handlers/Authorization/AuthorizationServerConnector.cs index 725cf78..0d9f239 100644 --- a/OpenSim/Server/Handlers/Authorization/AuthorizationServerConnector.cs +++ b/OpenSim/Server/Handlers/Authorization/AuthorizationServerConnector.cs | |||
@@ -55,7 +55,7 @@ namespace OpenSim.Server.Handlers.Authorization | |||
55 | m_AuthorizationService = | 55 | m_AuthorizationService = |
56 | ServerUtils.LoadPlugin<IAuthorizationService>(authorizationService, args); | 56 | ServerUtils.LoadPlugin<IAuthorizationService>(authorizationService, args); |
57 | 57 | ||
58 | server.AddStreamHandler(new AuthorizationServerGetHandler(m_AuthorizationService)); | 58 | server.AddStreamHandler(new AuthorizationServerPostHandler(m_AuthorizationService)); |
59 | } | 59 | } |
60 | } | 60 | } |
61 | } | 61 | } |
diff --git a/OpenSim/Server/Handlers/Authorization/AuthorizationServerGetHandler.cs b/OpenSim/Server/Handlers/Authorization/AuthorizationServerPostHandler.cs index 9e4c00e..407a18a 100644 --- a/OpenSim/Server/Handlers/Authorization/AuthorizationServerGetHandler.cs +++ b/OpenSim/Server/Handlers/Authorization/AuthorizationServerPostHandler.cs | |||
@@ -28,8 +28,8 @@ | |||
28 | using Nini.Config; | 28 | using Nini.Config; |
29 | using log4net; | 29 | using log4net; |
30 | using System; | 30 | using System; |
31 | using System.IO; | ||
32 | using System.Reflection; | 31 | using System.Reflection; |
32 | using System.IO; | ||
33 | using System.Net; | 33 | using System.Net; |
34 | using System.Text; | 34 | using System.Text; |
35 | using System.Text.RegularExpressions; | 35 | using System.Text.RegularExpressions; |
@@ -42,54 +42,29 @@ using OpenSim.Framework.Servers.HttpServer; | |||
42 | 42 | ||
43 | namespace OpenSim.Server.Handlers.Authorization | 43 | namespace OpenSim.Server.Handlers.Authorization |
44 | { | 44 | { |
45 | public class AuthorizationServerGetHandler : BaseStreamHandler | 45 | public class AuthorizationServerPostHandler : BaseStreamHandler |
46 | { | 46 | { |
47 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | 47 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); |
48 | 48 | ||
49 | private IAuthorizationService m_AuthorizationService; | ||
49 | 50 | ||
50 | public AuthorizationServerGetHandler(IAuthorizationService service) : | 51 | public AuthorizationServerPostHandler(IAuthorizationService service) : |
51 | base("GET", "/authorization") | 52 | base("POST", "/authorization") |
52 | { | 53 | { |
54 | m_AuthorizationService = service; | ||
53 | } | 55 | } |
54 | 56 | ||
55 | public override byte[] Handle(string path, Stream request, | 57 | public override byte[] Handle(string path, Stream request, |
56 | OSHttpRequest httpRequest, OSHttpResponse httpResponse) | 58 | OSHttpRequest httpRequest, OSHttpResponse httpResponse) |
57 | { | 59 | { |
58 | // always return success for now, this is just stub functionality | 60 | XmlSerializer xs = new XmlSerializer(typeof (AuthorizationRequest)); |
59 | return SuccessResult(); | 61 | AuthorizationRequest Authorization = (AuthorizationRequest) xs.Deserialize(request); |
60 | } | ||
61 | |||
62 | private byte[] SuccessResult() | ||
63 | { | ||
64 | XmlDocument doc = new XmlDocument(); | ||
65 | |||
66 | XmlNode xmlnode = doc.CreateNode(XmlNodeType.XmlDeclaration, | ||
67 | "", ""); | ||
68 | |||
69 | doc.AppendChild(xmlnode); | ||
70 | 62 | ||
71 | XmlElement rootElement = doc.CreateElement("", "Authorization", | 63 | AuthorizationResponse result = new AuthorizationResponse(true,Authorization.FirstName + " " + Authorization.SurName + " has been authorized"); |
72 | ""); | ||
73 | |||
74 | doc.AppendChild(rootElement); | ||
75 | |||
76 | XmlElement result = doc.CreateElement("", "Result", ""); | ||
77 | result.AppendChild(doc.CreateTextNode("success")); | ||
78 | |||
79 | rootElement.AppendChild(result); | ||
80 | |||
81 | return DocToBytes(doc); | ||
82 | } | ||
83 | |||
84 | private byte[] DocToBytes(XmlDocument doc) | ||
85 | { | ||
86 | MemoryStream ms = new MemoryStream(); | ||
87 | XmlTextWriter xw = new XmlTextWriter(ms, null); | ||
88 | xw.Formatting = Formatting.Indented; | ||
89 | doc.WriteTo(xw); | ||
90 | xw.Flush(); | ||
91 | 64 | ||
92 | return ms.GetBuffer(); | 65 | xs = new XmlSerializer(typeof(AuthorizationResponse)); |
66 | return ServerUtils.SerializeResult(xs, result); | ||
67 | |||
93 | } | 68 | } |
94 | } | 69 | } |
95 | } | 70 | } |
diff --git a/OpenSim/Services/Connectors/Authorization/AuthorizationServiceConnector.cs b/OpenSim/Services/Connectors/Authorization/AuthorizationServiceConnector.cs index 151d96a..d65afc6 100644 --- a/OpenSim/Services/Connectors/Authorization/AuthorizationServiceConnector.cs +++ b/OpenSim/Services/Connectors/Authorization/AuthorizationServiceConnector.cs | |||
@@ -90,26 +90,27 @@ namespace OpenSim.Services.Connectors | |||
90 | 90 | ||
91 | public bool isAuthorizedForRegion(UserProfileData user, RegionInfo region) | 91 | public bool isAuthorizedForRegion(UserProfileData user, RegionInfo region) |
92 | { | 92 | { |
93 | // this should be a remote call to the authorization server specified in the AuthorizationServerURI | 93 | // do a remote call to the authorization server specified in the AuthorizationServerURI |
94 | m_log.Info("[AUTHORIZATION CONNECTOR]: isAuthorizedForRegion is not yet implemented. Returning true, the user is authorized "); | 94 | m_log.InfoFormat("[AUTHORIZATION CONNECTOR]: isAuthorizedForRegion checking {0} {1} at remote server {2}",user.FirstName,user.SurName, m_ServerURI); |
95 | 95 | ||
96 | string uri = m_ServerURI + "?uuid="+user.ID + "&firstname="+user.FirstName+"&lastname="+user.SurName+"®ion="+region.RegionName+"®ionid="+region.RegionID+"&email="+user.Email; | 96 | string uri = m_ServerURI; |
97 | 97 | ||
98 | string result = string.Empty; | 98 | AuthorizationRequest req = new AuthorizationRequest(user.ID.ToString(),user.FirstName,user.SurName,user.Email,region.RegionName,region.RegionID.ToString()); |
99 | 99 | ||
100 | AuthorizationResponse response; | ||
100 | try | 101 | try |
101 | { | 102 | { |
102 | result = SynchronousRestObjectRequester. | 103 | response = SynchronousRestObjectRequester.MakeRequest<AuthorizationRequest, AuthorizationResponse>("POST", uri, req); |
103 | MakeRequest<UserProfileData, string>("POST", uri, user); | ||
104 | } | 104 | } |
105 | catch (Exception e) | 105 | catch (Exception e) |
106 | { | 106 | { |
107 | m_log.WarnFormat("[AUTHORIZATION CONNECTOR]: Unable to send authorize {0} {1} for region {2} error thrown during comms with remote server. Reason: {3}", user.FirstName,user.SurName,region.RegionName, e.Message); | 107 | m_log.WarnFormat("[AUTHORIZATION CONNECTOR]: Unable to send authorize {0} {1} for region {2} error thrown during comms with remote server. Reason: {3}", user.FirstName,user.SurName,region.RegionName, e.Message); |
108 | m_log.WarnFormat("Inner Exception is {0}",e.InnerException); | ||
108 | return m_ResponseOnFailure; | 109 | return m_ResponseOnFailure; |
109 | } | 110 | } |
110 | 111 | ||
111 | m_log.DebugFormat("[AUTHORIZATION CONNECTOR] response from remote service was {0}",result); | 112 | m_log.DebugFormat("[AUTHORIZATION CONNECTOR] response from remote service was {0}",response.Message); |
112 | if(result.Contains("success")) | 113 | if(response.IsAuthorized) |
113 | return true; | 114 | return true; |
114 | else | 115 | else |
115 | return false; | 116 | return false; |