OpenSim
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros
AuthorizationServicesConnector.cs
Go to the documentation of this file.
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 using log4net;
29 using System;
30 using System.Collections.Generic;
31 using System.IO;
32 using System.Reflection;
33 using Nini.Config;
34 using OpenSim.Framework;
35 using OpenSim.Services.Interfaces;
36 using OpenMetaverse;
37 
38 namespace OpenSim.Services.Connectors
39 {
41  {
42  private static readonly ILog m_log =
43  LogManager.GetLogger(
44  MethodBase.GetCurrentMethod().DeclaringType);
45 
46  private string m_ServerURI = String.Empty;
47  private bool m_ResponseOnFailure = true;
48 
50  {
51  }
52 
53  public AuthorizationServicesConnector(string serverURI)
54  {
55  m_ServerURI = serverURI.TrimEnd('/');
56  }
57 
58  public AuthorizationServicesConnector(IConfigSource source)
59  {
60  Initialise(source);
61  }
62 
63  public virtual void Initialise(IConfigSource source)
64  {
65  IConfig authorizationConfig = source.Configs["AuthorizationService"];
66  if (authorizationConfig == null)
67  {
68  //m_log.Info("[AUTHORIZATION CONNECTOR]: AuthorizationService missing from OpenSim.ini");
69  throw new Exception("Authorization connector init error");
70  }
71 
72  string serviceURI = authorizationConfig.GetString("AuthorizationServerURI",
73  String.Empty);
74 
75  if (serviceURI == String.Empty)
76  {
77  m_log.Error("[AUTHORIZATION CONNECTOR]: No Server URI named in section AuthorizationService");
78  throw new Exception("Authorization connector init error");
79  }
80  m_ServerURI = serviceURI;
81 
82  // this dictates what happens if the remote service fails, if the service fails and the value is true
83  // the user is authorized for the region.
84  bool responseOnFailure = authorizationConfig.GetBoolean("ResponseOnFailure",true);
85 
86  m_ResponseOnFailure = responseOnFailure;
87  m_log.Info("[AUTHORIZATION CONNECTOR]: AuthorizationService initialized");
88  }
89 
90  public bool IsAuthorizedForRegion(string userID, string firstname, string surname, string email, string regionName, string regionID, out string message)
91  {
92  // do a remote call to the authorization server specified in the AuthorizationServerURI
93  m_log.InfoFormat("[AUTHORIZATION CONNECTOR]: IsAuthorizedForRegion checking {0} at remote server {1}", userID, m_ServerURI);
94 
95  string uri = m_ServerURI;
96 
97  AuthorizationRequest req = new AuthorizationRequest(userID, firstname, surname, email, regionName, regionID);
98 
99  AuthorizationResponse response;
100  try
101  {
102  response = SynchronousRestObjectRequester.MakeRequest<AuthorizationRequest, AuthorizationResponse>("POST", uri, req);
103  }
104  catch (Exception e)
105  {
106  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  message = e.Message;
108  return m_ResponseOnFailure;
109  }
110  if (response == null)
111  {
112  message = "Null response";
113  return m_ResponseOnFailure;
114  }
115  m_log.DebugFormat("[AUTHORIZATION CONNECTOR] response from remote service was {0}", response.Message);
116  message = response.Message;
117 
118  return response.IsAuthorized;
119  }
120 
121  }
122 }
bool IsAuthorizedForRegion(string userID, string firstname, string surname, string email, string regionName, string regionID, out string message)