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 passwd = requestData["passwd"].ToString();
|
||||
string startLocation = string.Empty;
|
||||
UUID scopeID = UUID.Zero;
|
||||
if (requestData["scope_id"] != null)
|
||||
scopeID = new UUID(requestData["scope_id"].ToString());
|
||||
if (requestData.ContainsKey("start"))
|
||||
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);
|
||||
|
||||
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();
|
||||
response.Value = reply.ToHashtable();
|
||||
|
@ -109,10 +112,15 @@ namespace OpenSim.Server.Handlers.Login
|
|||
if (map.ContainsKey("start"))
|
||||
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);
|
||||
|
||||
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();
|
||||
|
||||
}
|
||||
|
|
|
@ -31,6 +31,7 @@ using System.Collections.Generic;
|
|||
using System.Net;
|
||||
|
||||
using OpenMetaverse.StructuredData;
|
||||
using OpenMetaverse;
|
||||
|
||||
namespace OpenSim.Services.Interfaces
|
||||
{
|
||||
|
@ -46,7 +47,7 @@ namespace OpenSim.Services.Interfaces
|
|||
|
||||
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;
|
||||
UUID session = UUID.Random();
|
||||
|
@ -157,7 +157,7 @@ namespace OpenSim.Services.LLLoginService
|
|||
//
|
||||
// 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)
|
||||
{
|
||||
m_log.InfoFormat("[LLOGIN SERVICE]: Login failed, reason: user not found");
|
||||
|
@ -170,6 +170,22 @@ namespace OpenSim.Services.LLLoginService
|
|||
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
|
||||
//
|
||||
|
@ -219,7 +235,7 @@ namespace OpenSim.Services.LLLoginService
|
|||
// Get the home region
|
||||
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 lookAt = Vector3.Zero;
|
||||
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)
|
||||
{
|
||||
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);
|
||||
|
||||
|
@ -318,7 +334,7 @@ namespace OpenSim.Services.LLLoginService
|
|||
}
|
||||
else
|
||||
{
|
||||
region = m_GridService.GetRegionByUUID(account.ScopeID, pinfo.HomeRegionID);
|
||||
region = m_GridService.GetRegionByUUID(scopeID, pinfo.HomeRegionID);
|
||||
|
||||
if (null == region)
|
||||
{
|
||||
|
@ -332,7 +348,7 @@ namespace OpenSim.Services.LLLoginService
|
|||
|
||||
if (tryDefaults)
|
||||
{
|
||||
List<GridRegion> defaults = m_GridService.GetDefaultRegions(account.ScopeID);
|
||||
List<GridRegion> defaults = m_GridService.GetDefaultRegions(scopeID);
|
||||
if (defaults != null && defaults.Count > 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",
|
||||
account.FirstName, account.LastName);
|
||||
defaults = m_GridService.GetRegionsByName(account.ScopeID, "", 1);
|
||||
defaults = m_GridService.GetRegionsByName(scopeID, "", 1);
|
||||
if (defaults != null && defaults.Count > 0)
|
||||
{
|
||||
region = defaults[0];
|
||||
|
@ -363,9 +379,9 @@ namespace OpenSim.Services.LLLoginService
|
|||
|
||||
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)
|
||||
{
|
||||
region = defaults[0];
|
||||
|
@ -374,7 +390,7 @@ namespace OpenSim.Services.LLLoginService
|
|||
else
|
||||
{
|
||||
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)
|
||||
{
|
||||
region = defaults[0];
|
||||
|
@ -414,11 +430,11 @@ namespace OpenSim.Services.LLLoginService
|
|||
{
|
||||
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))
|
||||
{
|
||||
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)
|
||||
{
|
||||
where = "safe";
|
||||
|
@ -461,7 +477,7 @@ namespace OpenSim.Services.LLLoginService
|
|||
}
|
||||
else
|
||||
{
|
||||
List<GridRegion> defaults = m_GridService.GetDefaultRegions(account.ScopeID);
|
||||
List<GridRegion> defaults = m_GridService.GetDefaultRegions(scopeID);
|
||||
if (defaults != null && defaults.Count > 0)
|
||||
{
|
||||
where = "safe";
|
||||
|
|
Loading…
Reference in New Issue