Allow a client to pass a scope id to log into in the login XML / LLSD
parent
edde0be0a0
commit
1e743eab6d
|
@ -72,6 +72,9 @@ namespace OpenSim.Server.Handlers.Login
|
||||||
string last = requestData["last"].ToString();
|
string last = requestData["last"].ToString();
|
||||||
string passwd = requestData["passwd"].ToString();
|
string passwd = requestData["passwd"].ToString();
|
||||||
string startLocation = string.Empty;
|
string startLocation = string.Empty;
|
||||||
|
UUID scopeID = UUID.Zero;
|
||||||
|
if (requestData["scope_id"] != null)
|
||||||
|
scopeID = new UUID(requestData["scope_id"].ToString());
|
||||||
if (requestData.ContainsKey("start"))
|
if (requestData.ContainsKey("start"))
|
||||||
startLocation = requestData["start"].ToString();
|
startLocation = requestData["start"].ToString();
|
||||||
|
|
||||||
|
@ -83,7 +86,7 @@ namespace OpenSim.Server.Handlers.Login
|
||||||
m_log.InfoFormat("[LOGIN]: XMLRPC Login Requested for {0} {1}, starting in {2}, using {3}", first, last, startLocation, clientVersion);
|
m_log.InfoFormat("[LOGIN]: XMLRPC Login Requested for {0} {1}, starting in {2}, using {3}", first, last, startLocation, clientVersion);
|
||||||
|
|
||||||
LoginResponse reply = null;
|
LoginResponse reply = null;
|
||||||
reply = m_LocalService.Login(first, last, passwd, startLocation, remoteClient);
|
reply = m_LocalService.Login(first, last, passwd, startLocation, scopeID, remoteClient);
|
||||||
|
|
||||||
XmlRpcResponse response = new XmlRpcResponse();
|
XmlRpcResponse response = new XmlRpcResponse();
|
||||||
response.Value = reply.ToHashtable();
|
response.Value = reply.ToHashtable();
|
||||||
|
@ -109,10 +112,15 @@ namespace OpenSim.Server.Handlers.Login
|
||||||
if (map.ContainsKey("start"))
|
if (map.ContainsKey("start"))
|
||||||
startLocation = map["start"].AsString();
|
startLocation = map["start"].AsString();
|
||||||
|
|
||||||
|
UUID scopeID = UUID.Zero;
|
||||||
|
|
||||||
|
if (map.ContainsKey("scope_id"))
|
||||||
|
scopeID = new UUID(map["scope_id"].AsString());
|
||||||
|
|
||||||
m_log.Info("[LOGIN]: LLSD Login Requested for: '" + map["first"].AsString() + "' '" + map["last"].AsString() + "' / " + startLocation);
|
m_log.Info("[LOGIN]: LLSD Login Requested for: '" + map["first"].AsString() + "' '" + map["last"].AsString() + "' / " + startLocation);
|
||||||
|
|
||||||
LoginResponse reply = null;
|
LoginResponse reply = null;
|
||||||
reply = m_LocalService.Login(map["first"].AsString(), map["last"].AsString(), map["passwd"].AsString(), startLocation, remoteClient);
|
reply = m_LocalService.Login(map["first"].AsString(), map["last"].AsString(), map["passwd"].AsString(), startLocation, scopeID, remoteClient);
|
||||||
return reply.ToOSDMap();
|
return reply.ToOSDMap();
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -31,6 +31,7 @@ using System.Collections.Generic;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
|
|
||||||
using OpenMetaverse.StructuredData;
|
using OpenMetaverse.StructuredData;
|
||||||
|
using OpenMetaverse;
|
||||||
|
|
||||||
namespace OpenSim.Services.Interfaces
|
namespace OpenSim.Services.Interfaces
|
||||||
{
|
{
|
||||||
|
@ -46,7 +47,7 @@ namespace OpenSim.Services.Interfaces
|
||||||
|
|
||||||
public interface ILoginService
|
public interface ILoginService
|
||||||
{
|
{
|
||||||
LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, IPEndPoint clientIP);
|
LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID, IPEndPoint clientIP);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -147,7 +147,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
public LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, IPEndPoint clientIP)
|
public LoginResponse Login(string firstName, string lastName, string passwd, string startLocation, UUID scopeID, IPEndPoint clientIP)
|
||||||
{
|
{
|
||||||
bool success = false;
|
bool success = false;
|
||||||
UUID session = UUID.Random();
|
UUID session = UUID.Random();
|
||||||
|
@ -157,7 +157,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
//
|
//
|
||||||
// Get the account and check that it exists
|
// Get the account and check that it exists
|
||||||
//
|
//
|
||||||
UserAccount account = m_UserAccountService.GetUserAccount(UUID.Zero, firstName, lastName);
|
UserAccount account = m_UserAccountService.GetUserAccount(scopeID, firstName, lastName);
|
||||||
if (account == null)
|
if (account == null)
|
||||||
{
|
{
|
||||||
m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: user not found");
|
m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: user not found");
|
||||||
|
@ -170,6 +170,22 @@ namespace OpenSim.Services.LLLoginService
|
||||||
return LLFailedLoginResponse.LoginBlockedProblem;
|
return LLFailedLoginResponse.LoginBlockedProblem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// If a scope id is requested, check that the account is in
|
||||||
|
// that scope, or unscoped.
|
||||||
|
//
|
||||||
|
if (scopeID != UUID.Zero)
|
||||||
|
{
|
||||||
|
if (account.ScopeID != scopeID && account.ScopeID != UUID.Zero)
|
||||||
|
{
|
||||||
|
m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: user not found");
|
||||||
|
return LLFailedLoginResponse.UserProblem;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
scopeID = account.ScopeID;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Authenticate this user
|
// Authenticate this user
|
||||||
//
|
//
|
||||||
|
@ -219,7 +235,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
// Get the home region
|
// Get the home region
|
||||||
if ((presence.HomeRegionID != UUID.Zero) && m_GridService != null)
|
if ((presence.HomeRegionID != UUID.Zero) && m_GridService != null)
|
||||||
{
|
{
|
||||||
home = m_GridService.GetRegionByUUID(account.ScopeID, presence.HomeRegionID);
|
home = m_GridService.GetRegionByUUID(scopeID, presence.HomeRegionID);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -230,7 +246,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
Vector3 position = Vector3.Zero;
|
Vector3 position = Vector3.Zero;
|
||||||
Vector3 lookAt = Vector3.Zero;
|
Vector3 lookAt = Vector3.Zero;
|
||||||
GridRegion gatekeeper = null;
|
GridRegion gatekeeper = null;
|
||||||
GridRegion destination = FindDestination(account, presence, session, startLocation, out gatekeeper, out where, out position, out lookAt);
|
GridRegion destination = FindDestination(account, scopeID, presence, session, startLocation, out gatekeeper, out where, out position, out lookAt);
|
||||||
if (destination == null)
|
if (destination == null)
|
||||||
{
|
{
|
||||||
m_PresenceService.LogoutAgent(session, presence.Position, presence.LookAt);
|
m_PresenceService.LogoutAgent(session, presence.Position, presence.LookAt);
|
||||||
|
@ -286,7 +302,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
protected GridRegion FindDestination(UserAccount account, PresenceInfo pinfo, UUID sessionID, string startLocation, out GridRegion gatekeeper, out string where, out Vector3 position, out Vector3 lookAt)
|
protected GridRegion FindDestination(UserAccount account, UUID scopeID, PresenceInfo pinfo, UUID sessionID, string startLocation, out GridRegion gatekeeper, out string where, out Vector3 position, out Vector3 lookAt)
|
||||||
{
|
{
|
||||||
m_log.DebugFormat("[LLOGIN SERVICE]: FindDestination for start location {0}", startLocation);
|
m_log.DebugFormat("[LLOGIN SERVICE]: FindDestination for start location {0}", startLocation);
|
||||||
|
|
||||||
|
@ -318,7 +334,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
region = m_GridService.GetRegionByUUID(account.ScopeID, pinfo.HomeRegionID);
|
region = m_GridService.GetRegionByUUID(scopeID, pinfo.HomeRegionID);
|
||||||
|
|
||||||
if (null == region)
|
if (null == region)
|
||||||
{
|
{
|
||||||
|
@ -332,7 +348,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
|
|
||||||
if (tryDefaults)
|
if (tryDefaults)
|
||||||
{
|
{
|
||||||
List<GridRegion> defaults = m_GridService.GetDefaultRegions(account.ScopeID);
|
List<GridRegion> defaults = m_GridService.GetDefaultRegions(scopeID);
|
||||||
if (defaults != null && defaults.Count > 0)
|
if (defaults != null && defaults.Count > 0)
|
||||||
{
|
{
|
||||||
region = defaults[0];
|
region = defaults[0];
|
||||||
|
@ -342,7 +358,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
{
|
{
|
||||||
m_log.WarnFormat("[LLOGIN SERVICE]: User {0} {1} does not have a valid home and this grid does not have default locations. Attempting to find random region",
|
m_log.WarnFormat("[LLOGIN SERVICE]: User {0} {1} does not have a valid home and this grid does not have default locations. Attempting to find random region",
|
||||||
account.FirstName, account.LastName);
|
account.FirstName, account.LastName);
|
||||||
defaults = m_GridService.GetRegionsByName(account.ScopeID, "", 1);
|
defaults = m_GridService.GetRegionsByName(scopeID, "", 1);
|
||||||
if (defaults != null && defaults.Count > 0)
|
if (defaults != null && defaults.Count > 0)
|
||||||
{
|
{
|
||||||
region = defaults[0];
|
region = defaults[0];
|
||||||
|
@ -363,9 +379,9 @@ namespace OpenSim.Services.LLLoginService
|
||||||
|
|
||||||
GridRegion region = null;
|
GridRegion region = null;
|
||||||
|
|
||||||
if (pinfo.RegionID.Equals(UUID.Zero) || (region = m_GridService.GetRegionByUUID(account.ScopeID, pinfo.RegionID)) == null)
|
if (pinfo.RegionID.Equals(UUID.Zero) || (region = m_GridService.GetRegionByUUID(scopeID, pinfo.RegionID)) == null)
|
||||||
{
|
{
|
||||||
List<GridRegion> defaults = m_GridService.GetDefaultRegions(account.ScopeID);
|
List<GridRegion> defaults = m_GridService.GetDefaultRegions(scopeID);
|
||||||
if (defaults != null && defaults.Count > 0)
|
if (defaults != null && defaults.Count > 0)
|
||||||
{
|
{
|
||||||
region = defaults[0];
|
region = defaults[0];
|
||||||
|
@ -374,7 +390,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
m_log.Info("[LLOGIN SERVICE]: Last Region Not Found Attempting to find random region");
|
m_log.Info("[LLOGIN SERVICE]: Last Region Not Found Attempting to find random region");
|
||||||
defaults = m_GridService.GetRegionsByName(account.ScopeID, "", 1);
|
defaults = m_GridService.GetRegionsByName(scopeID, "", 1);
|
||||||
if (defaults != null && defaults.Count > 0)
|
if (defaults != null && defaults.Count > 0)
|
||||||
{
|
{
|
||||||
region = defaults[0];
|
region = defaults[0];
|
||||||
|
@ -414,11 +430,11 @@ namespace OpenSim.Services.LLLoginService
|
||||||
{
|
{
|
||||||
if (!regionName.Contains("@"))
|
if (!regionName.Contains("@"))
|
||||||
{
|
{
|
||||||
List<GridRegion> regions = m_GridService.GetRegionsByName(account.ScopeID, regionName, 1);
|
List<GridRegion> regions = m_GridService.GetRegionsByName(scopeID, regionName, 1);
|
||||||
if ((regions == null) || (regions != null && regions.Count == 0))
|
if ((regions == null) || (regions != null && regions.Count == 0))
|
||||||
{
|
{
|
||||||
m_log.InfoFormat("[LLLOGIN SERVICE]: Got Custom Login URI {0}, can't locate region {1}. Trying defaults.", startLocation, regionName);
|
m_log.InfoFormat("[LLLOGIN SERVICE]: Got Custom Login URI {0}, can't locate region {1}. Trying defaults.", startLocation, regionName);
|
||||||
regions = m_GridService.GetDefaultRegions(UUID.Zero);
|
regions = m_GridService.GetDefaultRegions(scopeID);
|
||||||
if (regions != null && regions.Count > 0)
|
if (regions != null && regions.Count > 0)
|
||||||
{
|
{
|
||||||
where = "safe";
|
where = "safe";
|
||||||
|
@ -461,7 +477,7 @@ namespace OpenSim.Services.LLLoginService
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
List<GridRegion> defaults = m_GridService.GetDefaultRegions(account.ScopeID);
|
List<GridRegion> defaults = m_GridService.GetDefaultRegions(scopeID);
|
||||||
if (defaults != null && defaults.Count > 0)
|
if (defaults != null && defaults.Count > 0)
|
||||||
{
|
{
|
||||||
where = "safe";
|
where = "safe";
|
||||||
|
|
Loading…
Reference in New Issue