From 08732b65be3ce13e8dd965a4542991a766dbd920 Mon Sep 17 00:00:00 2001
From: diva
Date: Sun, 29 Mar 2009 20:29:13 +0000
Subject: Moved some files around, so that it's easier to share code between
standalone and the grid services. Should not affect any functionality.
---
.../Framework/Communications/HGLoginAuthService.cs | 329 ---------------------
1 file changed, 329 deletions(-)
delete mode 100644 OpenSim/Framework/Communications/HGLoginAuthService.cs
(limited to 'OpenSim/Framework/Communications/HGLoginAuthService.cs')
diff --git a/OpenSim/Framework/Communications/HGLoginAuthService.cs b/OpenSim/Framework/Communications/HGLoginAuthService.cs
deleted file mode 100644
index 49977b7..0000000
--- a/OpenSim/Framework/Communications/HGLoginAuthService.cs
+++ /dev/null
@@ -1,329 +0,0 @@
-/*
- * Copyright (c) Contributors, http://opensimulator.org/
- * See CONTRIBUTORS.TXT for a full list of copyright holders.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions are met:
- * * Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * * Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * * Neither the name of the OpenSimulator Project nor the
- * names of its contributors may be used to endorse or promote products
- * derived from this software without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
- * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
- * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
- * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
- * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
- * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
- * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
- * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
- * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
- * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- */
-
-using System;
-using System.Collections;
-using System.Collections.Generic;
-using System.Net;
-using System.Reflection;
-using System.Text.RegularExpressions;
-using OpenSim.Framework;
-using OpenSim.Framework.Communications.Cache;
-using OpenSim.Framework.Communications.Capabilities;
-using OpenSim.Framework.Servers;
-
-using OpenMetaverse;
-
-using log4net;
-using Nini.Config;
-using Nwc.XmlRpc;
-
-namespace OpenSim.Framework.Communications
-{
- public class HGLoginAuthService : LoginService
- {
- private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
-
- protected NetworkServersInfo m_serversInfo;
- protected bool m_authUsers = false;
-
- ///
- /// Used by the login service to make requests to the inventory service.
- ///
- protected IInterServiceInventoryServices m_interServiceInventoryService;
-
- ///
- /// Used to make requests to the local regions.
- ///
- protected ILoginServiceToRegionsConnector m_regionsConnector;
-
-
- public HGLoginAuthService(
- UserManagerBase userManager, string welcomeMess,
- IInterServiceInventoryServices interServiceInventoryService,
- NetworkServersInfo serversInfo,
- bool authenticate, LibraryRootFolder libraryRootFolder, ILoginServiceToRegionsConnector regionsConnector)
- : base(userManager, libraryRootFolder, welcomeMess)
- {
- this.m_serversInfo = serversInfo;
- if (m_serversInfo != null)
- {
- m_defaultHomeX = this.m_serversInfo.DefaultHomeLocX;
- m_defaultHomeY = this.m_serversInfo.DefaultHomeLocY;
- }
- m_authUsers = authenticate;
-
- m_interServiceInventoryService = interServiceInventoryService;
- m_regionsConnector = regionsConnector;
- m_inventoryService = interServiceInventoryService;
- }
-
- public void SetServersInfo(NetworkServersInfo sinfo)
- {
- m_serversInfo = sinfo;
- }
-
- public override XmlRpcResponse XmlRpcLoginMethod(XmlRpcRequest request)
- {
- m_log.Info("[HGLOGIN] HGLogin called " + request.MethodName);
- XmlRpcResponse response = base.XmlRpcLoginMethod(request);
- Hashtable responseData = (Hashtable)response.Value;
-
- responseData["grid_service"] = m_serversInfo.GridURL;
- responseData["grid_service_send_key"] = m_serversInfo.GridSendKey;
- responseData["inventory_service"] = m_serversInfo.InventoryURL;
- responseData["asset_service"] = m_serversInfo.AssetURL;
- responseData["asset_service_send_key"] = m_serversInfo.AssetSendKey;
- int x = (Int32)responseData["region_x"];
- int y = (Int32)responseData["region_y"];
- uint ux = (uint)(x / Constants.RegionSize);
- uint uy = (uint)(y / Constants.RegionSize);
- ulong regionHandle = Util.UIntsToLong(ux, uy);
- responseData["region_handle"] = regionHandle.ToString();
-
- // Let's remove the seed cap from the login
- //responseData.Remove("seed_capability");
-
- // Let's add the appearance
- UUID userID = UUID.Zero;
- UUID.TryParse((string)responseData["agent_id"], out userID);
- AvatarAppearance appearance = m_userManager.GetUserAppearance(userID);
- if (appearance == null)
- {
- m_log.WarnFormat("[INTER]: Appearance not found for {0}. Creating default.", userID);
- appearance = new AvatarAppearance();
- }
-
- responseData["appearance"] = appearance.ToHashTable();
-
- // Let's also send the auth token
- UUID token = UUID.Random();
- responseData["auth_token"] = token.ToString();
- UserProfileData userProfile = m_userManager.GetUserProfile(userID);
- if (userProfile != null)
- {
- userProfile.WebLoginKey = token;
- m_userManager.CommitAgent(ref userProfile);
- }
-
- return response;
- }
-
- public XmlRpcResponse XmlRpcGenerateKeyMethod(XmlRpcRequest request)
- {
-
- // Verify the key of who's calling
- UUID userID = UUID.Zero;
- UUID authKey = UUID.Zero;
- UUID.TryParse((string)request.Params[0], out userID);
- UUID.TryParse((string)request.Params[1], out authKey);
-
- m_log.InfoFormat("[HGLOGIN] HGGenerateKey called with authToken ", authKey);
- string newKey = string.Empty;
-
- if (!(m_userManager is IAuthentication))
- {
- m_log.Debug("[HGLOGIN]: UserManager is not IAuthentication service. Returning empty key.");
- }
- else
- {
- newKey = ((IAuthentication)m_userManager).GetNewKey(m_serversInfo.UserURL, userID, authKey);
- }
-
- XmlRpcResponse response = new XmlRpcResponse();
- response.Value = (string) newKey;
- return response;
- }
-
- public XmlRpcResponse XmlRpcVerifyKeyMethod(XmlRpcRequest request)
- {
- foreach (object o in request.Params)
- {
- if (o != null)
- m_log.Debug(" >> Param " + o.ToString());
- else
- m_log.Debug(" >> Null");
- }
-
- // Verify the key of who's calling
- UUID userID = UUID.Zero;
- string authKey = string.Empty;
- UUID.TryParse((string)request.Params[0], out userID);
- authKey = (string)request.Params[1];
-
- m_log.InfoFormat("[HGLOGIN] HGVerifyKey called with key ", authKey);
- bool success = false;
-
- if (!(m_userManager is IAuthentication))
- {
- m_log.Debug("[HGLOGIN]: UserManager is not IAuthentication service. Denying.");
- }
- else
- {
- success = ((IAuthentication)m_userManager).VerifyKey(userID, authKey);
- }
-
- XmlRpcResponse response = new XmlRpcResponse();
- response.Value = (string)success.ToString();
- return response;
- }
-
- public override UserProfileData GetTheUser(string firstname, string lastname)
- {
- UserProfileData profile = m_userManager.GetUserProfile(firstname, lastname);
- if (profile != null)
- {
- return profile;
- }
-
- if (!m_authUsers)
- {
- //no current user account so make one
- m_log.Info("[LOGIN]: No user account found so creating a new one.");
-
- m_userManager.AddUser(firstname, lastname, "test", "", m_defaultHomeX, m_defaultHomeY);
-
- return m_userManager.GetUserProfile(firstname, lastname);
- }
-
- return null;
- }
-
- public override bool AuthenticateUser(UserProfileData profile, string password)
- {
- if (!m_authUsers)
- {
- //for now we will accept any password in sandbox mode
- m_log.Info("[LOGIN]: Authorising user (no actual password check)");
-
- return true;
- }
- else
- {
- m_log.Info(
- "[LOGIN]: Authenticating " + profile.FirstName + " " + profile.SurName);
-
- if (!password.StartsWith("$1$"))
- password = "$1$" + Util.Md5Hash(password);
-
- password = password.Remove(0, 3); //remove $1$
-
- string s = Util.Md5Hash(password + ":" + profile.PasswordSalt);
-
- bool loginresult = (profile.PasswordHash.Equals(s.ToString(), StringComparison.InvariantCultureIgnoreCase)
- || profile.PasswordHash.Equals(password, StringComparison.InvariantCultureIgnoreCase));
- return loginresult;
- }
- }
-
- protected override RegionInfo RequestClosestRegion(string region)
- {
- return m_regionsConnector.RequestClosestRegion(region);
- }
-
- protected override RegionInfo GetRegionInfo(ulong homeRegionHandle)
- {
- return m_regionsConnector.RequestNeighbourInfo(homeRegionHandle);
- }
-
- protected override RegionInfo GetRegionInfo(UUID homeRegionId)
- {
- return m_regionsConnector.RequestNeighbourInfo(homeRegionId);
- }
-
-
- ///
- /// Not really informing the region. Just filling out the response fields related to the region.
- ///
- ///
- ///
- ///
- /// true if the region was successfully contacted, false otherwise
- protected override bool PrepareLoginToRegion(RegionInfo regionInfo, UserProfileData user, LoginResponse response)
- {
- IPEndPoint endPoint = regionInfo.ExternalEndPoint;
- response.SimAddress = endPoint.Address.ToString();
- response.SimPort = (uint)endPoint.Port;
- response.RegionX = regionInfo.RegionLocX;
- response.RegionY = regionInfo.RegionLocY;
- response.SimHttpPort = regionInfo.HttpPort;
-
- string capsPath = CapsUtil.GetRandomCapsObjectPath();
- string capsSeedPath = CapsUtil.GetCapsSeedPath(capsPath);
-
- // Don't use the following! It Fails for logging into any region not on the same port as the http server!
- // Kept here so it doesn't happen again!
- // response.SeedCapability = regionInfo.ServerURI + capsSeedPath;
-
- string seedcap = "http://";
-
- if (m_serversInfo.HttpUsesSSL)
- {
- seedcap = "https://" + m_serversInfo.HttpSSLCN + ":" + regionInfo.HttpPort + capsSeedPath;
- }
- else
- {
- seedcap = "http://" + regionInfo.ExternalHostName + ":" + regionInfo.HttpPort + capsSeedPath;
- }
-
- response.SeedCapability = seedcap;
-
- // Notify the target of an incoming user
- m_log.InfoFormat(
- "[LOGIN]: Telling {0} @ {1},{2} ({3}) to prepare for client connection",
- regionInfo.RegionName, response.RegionX, response.RegionY, regionInfo.ServerURI);
-
- // Update agent with target sim
- user.CurrentAgent.Region = regionInfo.RegionID;
- user.CurrentAgent.Handle = regionInfo.RegionHandle;
-
- return true;
- }
-
- public override void LogOffUser(UserProfileData theUser, string message)
- {
- RegionInfo SimInfo;
- try
- {
- SimInfo = this.m_regionsConnector.RequestNeighbourInfo(theUser.CurrentAgent.Handle);
-
- if (SimInfo == null)
- {
- m_log.Error("[LOCAL LOGIN]: Region user was in isn't currently logged in");
- return;
- }
- }
- catch (Exception)
- {
- m_log.Error("[LOCAL LOGIN]: Unable to look up region to log user off");
- return;
- }
-
- m_regionsConnector.LogOffUserFromGrid(SimInfo.RegionHandle, theUser.ID, theUser.CurrentAgent.SecureSessionID, "Logging you off");
- }
- }
-}
--
cgit v1.1