mirror of
https://github.com/opensim/opensim.git
synced 2026-08-08 18:25:33 +08:00
Allow a client to pass a scope id to log into in the login XML / LLSD
This commit is contained in:
@@ -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";
|
||||
|
||||
Reference in New Issue
Block a user