From b5be5ca490771b664788dabe332022635d33ec4d Mon Sep 17 00:00:00 2001
From: Christopher
Date: Tue, 4 Aug 2015 08:56:37 +0200
Subject: Make osAvatarName2Key() able to get names from unknown HG users

Signed-off-by: Melanie Thielker <melanie@t-data.com>
---
 .../Shared/Api/Implementation/OSSL_Api.cs          | 44 ++++++++++++++++++++--
 prebuild.xml                                       |  1 +
 2 files changed, 41 insertions(+), 4 deletions(-)

diff --git a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
index d42a125..0461e1a 100644
--- a/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
+++ b/OpenSim/Region/ScriptEngine/Shared/Api/Implementation/OSSL_Api.cs
@@ -63,6 +63,7 @@ using LSL_Rotation = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Quaternion;
 using LSL_String = OpenSim.Region.ScriptEngine.Shared.LSL_Types.LSLString;
 using LSL_Vector = OpenSim.Region.ScriptEngine.Shared.LSL_Types.Vector3;
 using PermissionMask = OpenSim.Framework.PermissionMask;
+using OpenSim.Services.Connectors.Hypergrid;
 
 namespace OpenSim.Region.ScriptEngine.Shared.Api
 {
@@ -2052,15 +2053,50 @@ namespace OpenSim.Region.ScriptEngine.Shared.Api
             CheckThreatLevel(ThreatLevel.Low, "osAvatarName2Key");
             m_host.AddScriptLPS(1);
 
-            UserAccount account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, firstname, lastname);
-            if (null == account)
+            if (lastname.Contains("@"))
             {
-                return UUID.Zero.ToString();
+                String realFirstName; String realLastName; String serverURI;
+
+                realFirstName = firstname.Split('.')[0];
+                realLastName = firstname.Split('.')[1];
+                serverURI = new Uri("http://" + lastname.Replace("@", "")).ToString();
+
+                try
+                {
+                    UserAgentServiceConnector userConnection = new UserAgentServiceConnector(serverURI, true);
+
+                    if (userConnection != null)
+                    {
+                        UUID ruserid = userConnection.GetUUID(realFirstName, realLastName);
+
+                        if (ruserid != null)
+                        {
+                            IUserManagement userManager = m_ScriptEngine.World.RequestModuleInterface<IUserManagement>();
+
+                            if (userManager != null)
+                            {
+                                //Use the HomeURI from the script to get user infos and then ask the remote gridserver for the real HomeURI.
+                                userManager.AddUser(ruserid, realFirstName, realLastName, serverURI);
+                                serverURI = userManager.GetUserServerURL(ruserid, "HomeURI");
+                                userManager.AddUser(ruserid, realFirstName, realLastName, serverURI);
+
+                                return ruserid.ToString();
+                            }
+                        }
+                    }
+                }
+                catch (Exception osAvatarException)
+                {
+                    //m_log.Warn("[osAvatarName2Key] UserAgentServiceConnector - Unable to connect to destination grid\n" + osAvatarException.Message);
+                }
             }
             else
             {
-                return account.PrincipalID.ToString();
+                UserAccount account = World.UserAccountService.GetUserAccount(World.RegionInfo.ScopeID, firstname, lastname);
+                if (account != null) return account.PrincipalID.ToString();
             }
+
+            return UUID.Zero.ToString();
         }
 
         public string osKey2Name(string id)
diff --git a/prebuild.xml b/prebuild.xml
index 94a40af..b5ebed1 100644
--- a/prebuild.xml
+++ b/prebuild.xml
@@ -2272,6 +2272,7 @@
       <Reference name="OpenSim.Region.CoreModules"/>
       <Reference name="OpenSim.Region.Physics.Manager"/>
       <Reference name="OpenSim.Services.Interfaces"/>
+	  <Reference name="OpenSim.Services.Connectors"/>
       <Reference name="OpenSim.Region.ScriptEngine.Shared"/>
       <Reference name="OpenSim.Region.ScriptEngine.Shared.Api.Runtime"/>
       <Reference name="Nini" path="../../../../../../bin/"/>
-- 
cgit v1.1