diff options
3 files changed, 83 insertions, 9 deletions
diff --git a/OpenSim/Framework/AuthorizationRequest.cs b/OpenSim/Framework/AuthorizationRequest.cs index 3280c65..ef99d3a 100644 --- a/OpenSim/Framework/AuthorizationRequest.cs +++ b/OpenSim/Framework/AuthorizationRequest.cs | |||
@@ -46,12 +46,46 @@ namespace OpenSim.Framework | |||
46 | m_regionID = RegionID; | 46 | m_regionID = RegionID; |
47 | } | 47 | } |
48 | 48 | ||
49 | public AuthorizationRequest(string ID,string FirstName, string SurName, string Email, string RegionName, string RegionID) | ||
50 | { | ||
51 | m_userID = ID; | ||
52 | m_firstname = FirstName; | ||
53 | m_surname = SurName; | ||
54 | m_email = Email; | ||
55 | m_regionName = RegionName; | ||
56 | m_regionID = RegionID; | ||
57 | } | ||
58 | |||
49 | public string ID | 59 | public string ID |
50 | { | 60 | { |
51 | get { return m_userID; } | 61 | get { return m_userID; } |
52 | set { m_userID = value; } | 62 | set { m_userID = value; } |
53 | } | 63 | } |
54 | 64 | ||
65 | public string FirstName | ||
66 | { | ||
67 | get { return m_firstname; } | ||
68 | set { m_firstname = value; } | ||
69 | } | ||
70 | |||
71 | public string SurName | ||
72 | { | ||
73 | get { return m_surname; } | ||
74 | set { m_surname = value; } | ||
75 | } | ||
76 | |||
77 | public string Email | ||
78 | { | ||
79 | get { return m_email; } | ||
80 | set { m_email = value; } | ||
81 | } | ||
82 | |||
83 | public string RegionName | ||
84 | { | ||
85 | get { return m_regionName; } | ||
86 | set { m_regionName = value; } | ||
87 | } | ||
88 | |||
55 | public string RegionID | 89 | public string RegionID |
56 | { | 90 | { |
57 | get { return m_regionID; } | 91 | get { return m_regionID; } |
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/RemoteAuthorizationServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/RemoteAuthorizationServiceConnector.cs index b0d8baa..88e6ee2 100644 --- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/RemoteAuthorizationServiceConnector.cs +++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authorization/RemoteAuthorizationServiceConnector.cs | |||
@@ -35,6 +35,7 @@ using OpenSim.Services.Connectors; | |||
35 | using OpenSim.Region.Framework.Interfaces; | 35 | using OpenSim.Region.Framework.Interfaces; |
36 | using OpenSim.Region.Framework.Scenes; | 36 | using OpenSim.Region.Framework.Scenes; |
37 | using OpenSim.Services.Interfaces; | 37 | using OpenSim.Services.Interfaces; |
38 | using OpenMetaverse; | ||
38 | 39 | ||
39 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization | 40 | namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization |
40 | { | 41 | { |
@@ -46,6 +47,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization | |||
46 | MethodBase.GetCurrentMethod().DeclaringType); | 47 | MethodBase.GetCurrentMethod().DeclaringType); |
47 | 48 | ||
48 | private bool m_Enabled = false; | 49 | private bool m_Enabled = false; |
50 | private List<Scene> m_scenes = new List<Scene>(); | ||
49 | 51 | ||
50 | public Type ReplaceableInterface | 52 | public Type ReplaceableInterface |
51 | { | 53 | { |
@@ -68,7 +70,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization | |||
68 | IConfig authorizationConfig = source.Configs["AuthorizationService"]; | 70 | IConfig authorizationConfig = source.Configs["AuthorizationService"]; |
69 | if (authorizationConfig == null) | 71 | if (authorizationConfig == null) |
70 | { | 72 | { |
71 | m_log.Error("[AUTHORIZATION CONNECTOR]: AuthorizationService missing from OpenSim.ini"); | 73 | m_log.Error("[REMOTE AUTHORIZATION CONNECTOR]: AuthorizationService missing from OpenSim.ini"); |
72 | return; | 74 | return; |
73 | } | 75 | } |
74 | 76 | ||
@@ -76,7 +78,7 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization | |||
76 | 78 | ||
77 | base.Initialise(source); | 79 | base.Initialise(source); |
78 | 80 | ||
79 | m_log.Info("[AUTHORIZATION CONNECTOR]: Remote authorization enabled"); | 81 | m_log.Info("[REMOTE AUTHORIZATION CONNECTOR]: Remote authorization enabled"); |
80 | } | 82 | } |
81 | } | 83 | } |
82 | } | 84 | } |
@@ -94,7 +96,12 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization | |||
94 | if (!m_Enabled) | 96 | if (!m_Enabled) |
95 | return; | 97 | return; |
96 | 98 | ||
97 | scene.RegisterModuleInterface<IAuthorizationService>(this); | 99 | if (!m_scenes.Contains(scene)) |
100 | { | ||
101 | m_scenes.Add(scene); | ||
102 | scene.RegisterModuleInterface<IAuthorizationService>(this); | ||
103 | } | ||
104 | |||
98 | } | 105 | } |
99 | 106 | ||
100 | public void RemoveRegion(Scene scene) | 107 | public void RemoveRegion(Scene scene) |
@@ -106,8 +113,42 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authorization | |||
106 | if (!m_Enabled) | 113 | if (!m_Enabled) |
107 | return; | 114 | return; |
108 | 115 | ||
109 | m_log.InfoFormat("[AUTHORIZATION CONNECTOR]: Enabled remote authorization for region {0}", scene.RegionInfo.RegionName); | 116 | m_log.InfoFormat("[REMOTE AUTHORIZATION CONNECTOR]: Enabled remote authorization for region {0}", scene.RegionInfo.RegionName); |
110 | 117 | ||
111 | } | 118 | } |
119 | |||
120 | public bool IsAuthorizedForRegion(string userID, string regionID) | ||
121 | { | ||
122 | m_log.InfoFormat("[REMOTE AUTHORIZATION CONNECTOR]: IsAuthorizedForRegion checking {0} for region {1}", userID, regionID); | ||
123 | |||
124 | bool isAuthorized = true; | ||
125 | |||
126 | // get the scene this call is being made for | ||
127 | Scene scene = null; | ||
128 | lock (m_scenes) | ||
129 | { | ||
130 | foreach (Scene nextScene in m_scenes) | ||
131 | { | ||
132 | if (nextScene.RegionInfo.RegionID.ToString() == regionID) | ||
133 | { | ||
134 | scene = nextScene; | ||
135 | } | ||
136 | } | ||
137 | } | ||
138 | |||
139 | if(scene!=null) | ||
140 | { | ||
141 | UserProfileData profile = scene.CommsManager.UserService.GetUserProfile(new UUID(userID)); | ||
142 | isAuthorized = IsAuthorizedForRegion(userID, profile.FirstName, profile.SurName,profile.Email,scene.RegionInfo.RegionName,regionID); | ||
143 | } | ||
144 | else | ||
145 | { | ||
146 | m_log.ErrorFormat("[REMOTE AUTHORIZATION CONNECTOR] IsAuthorizedForRegion, can't find scene to match region id of {0} ",regionID); | ||
147 | } | ||
148 | |||
149 | |||
150 | return isAuthorized; | ||
151 | |||
152 | } | ||
112 | } | 153 | } |
113 | } | 154 | } |
diff --git a/OpenSim/Services/Connectors/Authorization/AuthorizationServiceConnector.cs b/OpenSim/Services/Connectors/Authorization/AuthorizationServiceConnector.cs index d50a6ed..bc4daad 100644 --- a/OpenSim/Services/Connectors/Authorization/AuthorizationServiceConnector.cs +++ b/OpenSim/Services/Connectors/Authorization/AuthorizationServiceConnector.cs | |||
@@ -39,7 +39,7 @@ using OpenMetaverse; | |||
39 | 39 | ||
40 | namespace OpenSim.Services.Connectors | 40 | namespace OpenSim.Services.Connectors |
41 | { | 41 | { |
42 | public class AuthorizationServicesConnector : IAuthorizationService | 42 | public class AuthorizationServicesConnector |
43 | { | 43 | { |
44 | private static readonly ILog m_log = | 44 | private static readonly ILog m_log = |
45 | LogManager.GetLogger( | 45 | LogManager.GetLogger( |
@@ -88,14 +88,14 @@ namespace OpenSim.Services.Connectors | |||
88 | m_ResponseOnFailure = responseOnFailure; | 88 | m_ResponseOnFailure = responseOnFailure; |
89 | } | 89 | } |
90 | 90 | ||
91 | public bool IsAuthorizedForRegion(string userID, string regionID) | 91 | public bool IsAuthorizedForRegion(string userID,string firstname, string surname, string email, string regionName, string regionID) |
92 | { | 92 | { |
93 | // do 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.InfoFormat("[AUTHORIZATION CONNECTOR]: IsAuthorizedForRegion checking {0} at remote server {1}", userID, m_ServerURI); | 94 | m_log.InfoFormat("[AUTHORIZATION CONNECTOR]: IsAuthorizedForRegion checking {0} at remote server {1}", userID, m_ServerURI); |
95 | 95 | ||
96 | string uri = m_ServerURI; | 96 | string uri = m_ServerURI; |
97 | 97 | ||
98 | AuthorizationRequest req = new AuthorizationRequest(userID, regionID); | 98 | AuthorizationRequest req = new AuthorizationRequest(userID, firstname, surname, email, regionName, regionID); |
99 | 99 | ||
100 | AuthorizationResponse response; | 100 | AuthorizationResponse response; |
101 | try | 101 | try |
@@ -105,7 +105,6 @@ namespace OpenSim.Services.Connectors | |||
105 | catch (Exception e) | 105 | catch (Exception e) |
106 | { | 106 | { |
107 | m_log.WarnFormat("[AUTHORIZATION CONNECTOR]: Unable to send authorize {0} for region {1} error thrown during comms with remote server. Reason: {2}", userID, regionID, e.Message); | 107 | m_log.WarnFormat("[AUTHORIZATION CONNECTOR]: Unable to send authorize {0} for region {1} error thrown during comms with remote server. Reason: {2}", userID, regionID, e.Message); |
108 | m_log.WarnFormat("Inner Exception is {0}",e.InnerException); | ||
109 | return m_ResponseOnFailure; | 108 | return m_ResponseOnFailure; |
110 | } | 109 | } |
111 | 110 | ||