Some more unnecessary things deleted in Framework.Communications.
							parent
							
								
									dc4bbf6065
								
							
						
					
					
						commit
						cddd48aeea
					
				| 
						 | 
				
			
			@ -35,7 +35,6 @@ using Nini.Config;
 | 
			
		|||
using OpenSim.Framework;
 | 
			
		||||
using OpenSim.Framework.Communications;
 | 
			
		||||
using OpenSim.Services.Interfaces;
 | 
			
		||||
using IUserService = OpenSim.Framework.Communications.IUserService;
 | 
			
		||||
using IAvatarService = OpenSim.Services.Interfaces.IAvatarService;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.ApplicationPlugins.Rest.Inventory
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,39 +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 OpenMetaverse;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Framework.Communications
 | 
			
		||||
{
 | 
			
		||||
    public interface IAuthentication
 | 
			
		||||
    {
 | 
			
		||||
        string GetNewKey(string url, UUID userID, UUID authToken);
 | 
			
		||||
        bool VerifyKey(UUID userID, string key);
 | 
			
		||||
        bool VerifySession(UUID iserID, UUID sessionID);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,48 +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 OpenMetaverse;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Framework.Communications
 | 
			
		||||
{
 | 
			
		||||
    public interface IAvatarService
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Get avatar appearance information
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="user"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        AvatarAppearance GetUserAppearance(UUID user);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Update avatar appearance information
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="user"></param>
 | 
			
		||||
        /// <param name="appearance"></param>
 | 
			
		||||
        void UpdateUserAppearance(UUID user, AvatarAppearance appearance);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,64 +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.Collections.Generic;
 | 
			
		||||
using OpenMetaverse;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Framework.Communications
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Inventory operations used between grid services.
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public interface IInterServiceInventoryServices
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Create a new inventory for the given user.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="user"></param>
 | 
			
		||||
        /// <returns>true if the inventory was successfully created, false otherwise</returns>
 | 
			
		||||
        bool CreateNewUserInventory(UUID user);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns a list of all the folders in a given user's inventory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="userId"></param>
 | 
			
		||||
        /// <returns>A flat list of the user's inventory folder tree,
 | 
			
		||||
        /// null if there is no inventory for this user</returns>
 | 
			
		||||
        List<InventoryFolderBase> GetInventorySkeleton(UUID userId);
 | 
			
		||||
        
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Returns a list of all the active gestures in a user's inventory.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="userId">
 | 
			
		||||
        /// The <see cref="UUID"/> of the user
 | 
			
		||||
        /// </param>
 | 
			
		||||
        /// <returns>
 | 
			
		||||
        /// A flat list of the gesture items.
 | 
			
		||||
        /// </returns>
 | 
			
		||||
        List<InventoryItemBase> GetActiveGestures(UUID userId);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,37 +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.Collections.Generic;
 | 
			
		||||
using OpenMetaverse;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Framework.Communications
 | 
			
		||||
{
 | 
			
		||||
    public interface IMessagingService
 | 
			
		||||
    {
 | 
			
		||||
        Dictionary<UUID, FriendRegionInfo> GetFriendRegionInfos (List<UUID> uuids);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,71 +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 OpenMetaverse;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Framework.Communications
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Interface for the service for administrating users
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public interface IUserAdminService
 | 
			
		||||
    {
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Add a new user
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="firstName">The first name</param>
 | 
			
		||||
        /// <param name="lastName">The last name</param>
 | 
			
		||||
        /// <param name="pass">password of avatar</param>
 | 
			
		||||
        /// <param name="email">email of user</param>
 | 
			
		||||
        /// <param name="regX">region X</param>
 | 
			
		||||
        /// <param name="regY">region Y</param>
 | 
			
		||||
        /// <returns>The UUID of the created user profile.  On failure, returns UUID.Zero</returns>
 | 
			
		||||
        UUID AddUser(string firstName, string lastName, string pass, string email, uint regX, uint regY);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Add a new user with a specified UUID.   SHOULD ONLY BE USED in very special circumstances from modules!
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="firstName">The first name</param>
 | 
			
		||||
        /// <param name="lastName">The last name</param>
 | 
			
		||||
        /// <param name="pass">password of avatar</param>
 | 
			
		||||
        /// <param name="email">email of user</param>
 | 
			
		||||
        /// <param name="regX">region X</param>
 | 
			
		||||
        /// <param name="regY">region Y</param>
 | 
			
		||||
        /// <param name="setUUID">The set UUID</param>
 | 
			
		||||
        /// <returns>The UUID of the created user profile.  On failure, returns UUID.Zero</returns>
 | 
			
		||||
        UUID AddUser(string firstName, string lastName, string pass, string email, uint regX, uint regY, UUID setUUID);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Reset a user password
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="firstName"></param>
 | 
			
		||||
        /// <param name="lastName"></param>
 | 
			
		||||
        /// <param name="newPassword"></param>
 | 
			
		||||
        /// <returns>true if the update was successful, false otherwise</returns>
 | 
			
		||||
        bool ResetUserPassword(string firstName, string lastName, string newPassword);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,910 +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.Generic;
 | 
			
		||||
using System.Net;
 | 
			
		||||
using System.Reflection;
 | 
			
		||||
using System.Security.Cryptography;
 | 
			
		||||
using log4net;
 | 
			
		||||
using Nwc.XmlRpc;
 | 
			
		||||
using OpenMetaverse;
 | 
			
		||||
using OpenMetaverse.StructuredData;
 | 
			
		||||
using OpenSim.Data;
 | 
			
		||||
using OpenSim.Framework.Communications;
 | 
			
		||||
using OpenSim.Framework.Statistics;
 | 
			
		||||
using OpenSim.Services.Interfaces;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Framework.Communications
 | 
			
		||||
{
 | 
			
		||||
    /// <summary>
 | 
			
		||||
    /// Base class for user management (create, read, etc)
 | 
			
		||||
    /// </summary>
 | 
			
		||||
    public abstract class UserManagerBase 
 | 
			
		||||
        : IUserService, IUserAdminService, IAvatarService, IMessagingService, IAuthentication
 | 
			
		||||
    {
 | 
			
		||||
        private static readonly ILog m_log
 | 
			
		||||
            = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
 | 
			
		||||
 | 
			
		||||
        /// <value>
 | 
			
		||||
        /// List of plugins to search for user data
 | 
			
		||||
        /// </value>
 | 
			
		||||
        private List<IUserDataPlugin> m_plugins = new List<IUserDataPlugin>();
 | 
			
		||||
 | 
			
		||||
        protected CommunicationsManager m_commsManager;
 | 
			
		||||
        protected IInventoryService m_InventoryService;
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Constructor
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="commsManager"></param>
 | 
			
		||||
        public UserManagerBase(CommunicationsManager commsManager)
 | 
			
		||||
        {
 | 
			
		||||
            m_commsManager = commsManager;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual void SetInventoryService(IInventoryService invService)
 | 
			
		||||
        {
 | 
			
		||||
            m_InventoryService = invService;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Add a new user data plugin - plugins will be requested in the order they were added.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="plugin">The plugin that will provide user data</param>
 | 
			
		||||
        public void AddPlugin(IUserDataPlugin plugin)
 | 
			
		||||
        {
 | 
			
		||||
            m_plugins.Add(plugin);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Adds a list of user data plugins, as described by `provider' and
 | 
			
		||||
        /// `connect', to `_plugins'.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="provider">
 | 
			
		||||
        /// The filename of the inventory server plugin DLL.
 | 
			
		||||
        /// </param>
 | 
			
		||||
        /// <param name="connect">
 | 
			
		||||
        /// The connection string for the storage backend.
 | 
			
		||||
        /// </param>
 | 
			
		||||
        public void AddPlugin(string provider, string connect)
 | 
			
		||||
        {
 | 
			
		||||
            m_plugins.AddRange(DataPluginFactory.LoadDataPlugins<IUserDataPlugin>(provider, connect));
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #region UserProfile
 | 
			
		||||
        
 | 
			
		||||
        public virtual void AddTemporaryUserProfile(UserProfileData userProfile)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                plugin.AddTemporaryUserProfile(userProfile);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public virtual UserProfileData GetUserProfile(string fname, string lname)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                UserProfileData profile = plugin.GetUserByName(fname, lname);
 | 
			
		||||
 | 
			
		||||
                if (profile != null)
 | 
			
		||||
                {
 | 
			
		||||
                    profile.CurrentAgent = GetUserAgent(profile.ID);
 | 
			
		||||
                    return profile;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void LogoutUsers(UUID regionID)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                plugin.LogoutUsers(regionID);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void ResetAttachments(UUID userID)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                plugin.ResetAttachments(userID);
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public UserProfileData GetUserProfile(Uri uri)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                UserProfileData profile = plugin.GetUserByUri(uri);
 | 
			
		||||
 | 
			
		||||
                if (null != profile)
 | 
			
		||||
                    return profile;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual UserAgentData GetAgentByUUID(UUID userId)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                UserAgentData agent = plugin.GetAgentByUUID(userId);
 | 
			
		||||
 | 
			
		||||
                if (agent != null)
 | 
			
		||||
                {
 | 
			
		||||
                    return agent;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Uri GetUserUri(UserProfileData userProfile)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        // see IUserService
 | 
			
		||||
        public virtual UserProfileData GetUserProfile(UUID uuid)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                UserProfileData profile = plugin.GetUserByUUID(uuid);
 | 
			
		||||
 | 
			
		||||
                if (null != profile)
 | 
			
		||||
                {
 | 
			
		||||
                    profile.CurrentAgent = GetUserAgent(profile.ID);
 | 
			
		||||
                    return profile;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual List<AvatarPickerAvatar> GenerateAgentPickerRequestResponse(UUID queryID, string query)
 | 
			
		||||
        {
 | 
			
		||||
            List<AvatarPickerAvatar> allPickerList = new List<AvatarPickerAvatar>();
 | 
			
		||||
            
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    List<AvatarPickerAvatar> pickerList = plugin.GeneratePickerResults(queryID, query);
 | 
			
		||||
                    if (pickerList != null)
 | 
			
		||||
                        allPickerList.AddRange(pickerList);
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.Error(
 | 
			
		||||
                        "[USERSTORAGE]: Unable to generate AgentPickerData via  " + plugin.Name + "(" + query + ")");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return allPickerList;
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public virtual bool UpdateUserProfile(UserProfileData data)
 | 
			
		||||
        {
 | 
			
		||||
            bool result = false;
 | 
			
		||||
            
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    plugin.UpdateUserProfile(data);
 | 
			
		||||
                    result = true;
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.ErrorFormat(
 | 
			
		||||
                        "[USERSTORAGE]: Unable to set user {0} {1} via {2}: {3}", 
 | 
			
		||||
                        data.FirstName, data.SurName, plugin.Name, e.ToString());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region Get UserAgent
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Loads a user agent by uuid (not called directly)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="uuid">The agent's UUID</param>
 | 
			
		||||
        /// <returns>Agent profiles</returns>
 | 
			
		||||
        public UserAgentData GetUserAgent(UUID uuid)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    UserAgentData result = plugin.GetAgentByUUID(uuid);
 | 
			
		||||
 | 
			
		||||
                    if (result != null)
 | 
			
		||||
                        return result;
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.Error("[USERSTORAGE]: Unable to find user via " + plugin.Name + "(" + e.ToString() + ")");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Loads a user agent by name (not called directly)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="name">The agent's name</param>
 | 
			
		||||
        /// <returns>A user agent</returns>
 | 
			
		||||
        public UserAgentData GetUserAgent(string name)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    UserAgentData result = plugin.GetAgentByName(name);
 | 
			
		||||
                    
 | 
			
		||||
                    if (result != null)
 | 
			
		||||
                        return result;
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.Error("[USERSTORAGE]: Unable to find user via " + plugin.Name + "(" + e.ToString() + ")");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Loads a user agent by name (not called directly)
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="fname">The agent's firstname</param>
 | 
			
		||||
        /// <param name="lname">The agent's lastname</param>
 | 
			
		||||
        /// <returns>A user agent</returns>
 | 
			
		||||
        public UserAgentData GetUserAgent(string fname, string lname)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    UserAgentData result = plugin.GetAgentByName(fname, lname);
 | 
			
		||||
                    
 | 
			
		||||
                    if (result != null)
 | 
			
		||||
                        return result;
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.Error("[USERSTORAGE]: Unable to find user via " + plugin.Name + "(" + e.ToString() + ")");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual List<FriendListItem> GetUserFriendList(UUID ownerID)
 | 
			
		||||
        {
 | 
			
		||||
            List<FriendListItem> allFriends = new List<FriendListItem>();
 | 
			
		||||
            
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    List<FriendListItem> friends = plugin.GetUserFriendList(ownerID);
 | 
			
		||||
 | 
			
		||||
                    if (friends != null)
 | 
			
		||||
                        allFriends.AddRange(friends);
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.Error("[USERSTORAGE]: Unable to GetUserFriendList via " + plugin.Name + "(" + e.ToString() + ")");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            return allFriends;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual Dictionary<UUID, FriendRegionInfo> GetFriendRegionInfos (List<UUID> uuids)
 | 
			
		||||
        {
 | 
			
		||||
            //Dictionary<UUID, FriendRegionInfo> allFriendRegions = new Dictionary<UUID, FriendRegionInfo>();
 | 
			
		||||
            
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    Dictionary<UUID, FriendRegionInfo> friendRegions = plugin.GetFriendRegionInfos(uuids);
 | 
			
		||||
 | 
			
		||||
                    if (friendRegions != null)
 | 
			
		||||
                        return friendRegions;
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.Error("[USERSTORAGE]: Unable to GetFriendRegionInfos via " + plugin.Name + "(" + e.ToString() + ")");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            return new Dictionary<UUID, FriendRegionInfo>();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void StoreWebLoginKey(UUID agentID, UUID webLoginKey)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    plugin.StoreWebLoginKey(agentID, webLoginKey);
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.Error("[USERSTORAGE]: Unable to Store WebLoginKey via " + plugin.Name + "(" + e.ToString() + ")");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    plugin.AddNewUserFriend(friendlistowner, friend, perms);
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.Error("[USERSTORAGE]: Unable to AddNewUserFriend via " + plugin.Name + "(" + e.ToString() + ")");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual void RemoveUserFriend(UUID friendlistowner, UUID friend)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    plugin.RemoveUserFriend(friendlistowner, friend);
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.Error("[USERSTORAGE]: Unable to RemoveUserFriend via " + plugin.Name + "(" + e.ToString() + ")");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    plugin.UpdateUserFriendPerms(friendlistowner, friend, perms);
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.Error("[USERSTORAGE]: Unable to UpdateUserFriendPerms via " + plugin.Name + "(" + e.ToString() + ")");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Resets the currentAgent in the user profile
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="agentID">The agent's ID</param>
 | 
			
		||||
        public virtual void ClearUserAgent(UUID agentID)
 | 
			
		||||
        {
 | 
			
		||||
            UserProfileData profile = GetUserProfile(agentID);
 | 
			
		||||
 | 
			
		||||
            if (profile == null)
 | 
			
		||||
            {
 | 
			
		||||
                return;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            profile.CurrentAgent = null;
 | 
			
		||||
 | 
			
		||||
            UpdateUserProfile(profile);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        #region CreateAgent
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Creates and initialises a new user agent - make sure to use CommitAgent when done to submit to the DB
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="profile">The users profile</param>
 | 
			
		||||
        /// <param name="request">The users loginrequest</param>
 | 
			
		||||
        public void CreateAgent(UserProfileData profile, XmlRpcRequest request)
 | 
			
		||||
        {
 | 
			
		||||
            //m_log.DebugFormat("[USER MANAGER]: Creating agent {0} {1}", profile.Name, profile.ID);
 | 
			
		||||
            
 | 
			
		||||
            UserAgentData agent = new UserAgentData();
 | 
			
		||||
 | 
			
		||||
            // User connection
 | 
			
		||||
            agent.AgentOnline = true;
 | 
			
		||||
 | 
			
		||||
            if (request.Params.Count > 1)
 | 
			
		||||
            {
 | 
			
		||||
                if (request.Params[1] != null)
 | 
			
		||||
                {
 | 
			
		||||
                    IPEndPoint RemoteIPEndPoint = (IPEndPoint)request.Params[1];
 | 
			
		||||
                    agent.AgentIP = RemoteIPEndPoint.Address.ToString();
 | 
			
		||||
                    agent.AgentPort = (uint)RemoteIPEndPoint.Port;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // Generate sessions
 | 
			
		||||
            RNGCryptoServiceProvider rand = new RNGCryptoServiceProvider();
 | 
			
		||||
            byte[] randDataS = new byte[16];
 | 
			
		||||
            byte[] randDataSS = new byte[16];
 | 
			
		||||
            rand.GetBytes(randDataS);
 | 
			
		||||
            rand.GetBytes(randDataSS);
 | 
			
		||||
 | 
			
		||||
            agent.SecureSessionID = new UUID(randDataSS, 0);
 | 
			
		||||
            agent.SessionID = new UUID(randDataS, 0);
 | 
			
		||||
 | 
			
		||||
            // Profile UUID
 | 
			
		||||
            agent.ProfileID = profile.ID;
 | 
			
		||||
 | 
			
		||||
            // Current location/position/alignment
 | 
			
		||||
            if (profile.CurrentAgent != null)
 | 
			
		||||
            {
 | 
			
		||||
                agent.Region = profile.CurrentAgent.Region;
 | 
			
		||||
                agent.Handle = profile.CurrentAgent.Handle;
 | 
			
		||||
                agent.Position = profile.CurrentAgent.Position;
 | 
			
		||||
                agent.LookAt = profile.CurrentAgent.LookAt;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                agent.Region = profile.HomeRegionID;
 | 
			
		||||
                agent.Handle = profile.HomeRegion;
 | 
			
		||||
                agent.Position = profile.HomeLocation;
 | 
			
		||||
                agent.LookAt = profile.HomeLookAt;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // What time did the user login?
 | 
			
		||||
            agent.LoginTime = Util.UnixTimeSinceEpoch();
 | 
			
		||||
            agent.LogoutTime = 0;
 | 
			
		||||
 | 
			
		||||
            profile.CurrentAgent = agent;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void CreateAgent(UserProfileData profile, OSD request)
 | 
			
		||||
        {
 | 
			
		||||
            //m_log.DebugFormat("[USER MANAGER]: Creating agent {0} {1}", profile.Name, profile.ID);
 | 
			
		||||
            
 | 
			
		||||
            UserAgentData agent = new UserAgentData();
 | 
			
		||||
 | 
			
		||||
            // User connection
 | 
			
		||||
            agent.AgentOnline = true;
 | 
			
		||||
 | 
			
		||||
            //if (request.Params.Count > 1)
 | 
			
		||||
            //{
 | 
			
		||||
            //    IPEndPoint RemoteIPEndPoint = (IPEndPoint)request.Params[1];
 | 
			
		||||
            //    agent.AgentIP = RemoteIPEndPoint.Address.ToString();
 | 
			
		||||
            //    agent.AgentPort = (uint)RemoteIPEndPoint.Port;
 | 
			
		||||
            //}
 | 
			
		||||
 | 
			
		||||
            // Generate sessions
 | 
			
		||||
            RNGCryptoServiceProvider rand = new RNGCryptoServiceProvider();
 | 
			
		||||
            byte[] randDataS = new byte[16];
 | 
			
		||||
            byte[] randDataSS = new byte[16];
 | 
			
		||||
            rand.GetBytes(randDataS);
 | 
			
		||||
            rand.GetBytes(randDataSS);
 | 
			
		||||
 | 
			
		||||
            agent.SecureSessionID = new UUID(randDataSS, 0);
 | 
			
		||||
            agent.SessionID = new UUID(randDataS, 0);
 | 
			
		||||
 | 
			
		||||
            // Profile UUID
 | 
			
		||||
            agent.ProfileID = profile.ID;
 | 
			
		||||
 | 
			
		||||
            // Current location/position/alignment
 | 
			
		||||
            if (profile.CurrentAgent != null)
 | 
			
		||||
            {
 | 
			
		||||
                agent.Region = profile.CurrentAgent.Region;
 | 
			
		||||
                agent.Handle = profile.CurrentAgent.Handle;
 | 
			
		||||
                agent.Position = profile.CurrentAgent.Position;
 | 
			
		||||
                agent.LookAt = profile.CurrentAgent.LookAt;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                agent.Region = profile.HomeRegionID;
 | 
			
		||||
                agent.Handle = profile.HomeRegion;
 | 
			
		||||
                agent.Position = profile.HomeLocation;
 | 
			
		||||
                agent.LookAt = profile.HomeLookAt;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            // What time did the user login?
 | 
			
		||||
            agent.LoginTime = Util.UnixTimeSinceEpoch();
 | 
			
		||||
            agent.LogoutTime = 0;
 | 
			
		||||
 | 
			
		||||
            profile.CurrentAgent = agent;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Saves a target agent to the database
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="profile">The users profile</param>
 | 
			
		||||
        /// <returns>Successful?</returns>
 | 
			
		||||
        public bool CommitAgent(ref UserProfileData profile)
 | 
			
		||||
        {
 | 
			
		||||
            //m_log.DebugFormat("[USER MANAGER]: Committing agent {0} {1}", profile.Name, profile.ID);
 | 
			
		||||
            
 | 
			
		||||
            // TODO: how is this function different from setUserProfile?  -> Add AddUserAgent() here and commit both tables "users" and "agents"
 | 
			
		||||
            // TODO: what is the logic should be?
 | 
			
		||||
            bool ret = false;
 | 
			
		||||
            ret = AddUserAgent(profile.CurrentAgent);
 | 
			
		||||
            ret = ret & UpdateUserProfile(profile);
 | 
			
		||||
            return ret;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Process a user logoff from OpenSim.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="userid"></param>
 | 
			
		||||
        /// <param name="regionid"></param>
 | 
			
		||||
        /// <param name="regionhandle"></param>
 | 
			
		||||
        /// <param name="position"></param>
 | 
			
		||||
        /// <param name="lookat"></param>
 | 
			
		||||
        public virtual void LogOffUser(UUID userid, UUID regionid, ulong regionhandle, Vector3 position, Vector3 lookat)
 | 
			
		||||
        {
 | 
			
		||||
            if (StatsManager.UserStats != null)
 | 
			
		||||
                StatsManager.UserStats.AddLogout();
 | 
			
		||||
 | 
			
		||||
            UserProfileData userProfile = GetUserProfile(userid);
 | 
			
		||||
 | 
			
		||||
            if (userProfile != null)
 | 
			
		||||
            {
 | 
			
		||||
                UserAgentData userAgent = userProfile.CurrentAgent;
 | 
			
		||||
                if (userAgent != null)
 | 
			
		||||
                {
 | 
			
		||||
                    userAgent.AgentOnline = false;
 | 
			
		||||
                    userAgent.LogoutTime = Util.UnixTimeSinceEpoch();
 | 
			
		||||
                    //userAgent.sessionID = UUID.Zero;
 | 
			
		||||
                    if (regionid != UUID.Zero)
 | 
			
		||||
                    {
 | 
			
		||||
                        userAgent.Region = regionid;
 | 
			
		||||
                    }
 | 
			
		||||
                    userAgent.Handle = regionhandle;
 | 
			
		||||
                    userAgent.Position = position;
 | 
			
		||||
                    userAgent.LookAt = lookat;
 | 
			
		||||
                    //userProfile.CurrentAgent = userAgent;
 | 
			
		||||
                    userProfile.LastLogin = userAgent.LogoutTime;
 | 
			
		||||
 | 
			
		||||
                    CommitAgent(ref userProfile);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                {
 | 
			
		||||
                    // If currentagent is null, we can't reference it here or the UserServer crashes!
 | 
			
		||||
                    m_log.Info("[LOGOUT]: didn't save logout position: " + userid.ToString());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                m_log.Warn("[LOGOUT]: Unknown User logged out");
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void LogOffUser(UUID userid, UUID regionid, ulong regionhandle, float posx, float posy, float posz)
 | 
			
		||||
        {
 | 
			
		||||
            LogOffUser(userid, regionid, regionhandle, new Vector3(posx, posy, posz), new Vector3());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Add a new user
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="firstName">first name</param>
 | 
			
		||||
        /// <param name="lastName">last name</param>
 | 
			
		||||
        /// <param name="password">password</param>
 | 
			
		||||
        /// <param name="email">email</param>
 | 
			
		||||
        /// <param name="regX">location X</param>
 | 
			
		||||
        /// <param name="regY">location Y</param>
 | 
			
		||||
        /// <returns>The UUID of the created user profile.  On failure, returns UUID.Zero</returns>
 | 
			
		||||
        public virtual UUID AddUser(string firstName, string lastName, string password, string email, uint regX, uint regY)
 | 
			
		||||
        {
 | 
			
		||||
            return AddUser(firstName, lastName, password, email, regX, regY, UUID.Random());
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Add a new user
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="firstName">first name</param>
 | 
			
		||||
        /// <param name="lastName">last name</param>
 | 
			
		||||
        /// <param name="password">password</param>
 | 
			
		||||
        /// <param name="email">email</param>
 | 
			
		||||
        /// <param name="regX">location X</param>
 | 
			
		||||
        /// <param name="regY">location Y</param>
 | 
			
		||||
        /// <param name="SetUUID">UUID of avatar.</param>
 | 
			
		||||
        /// <returns>The UUID of the created user profile.  On failure, returns UUID.Zero</returns>
 | 
			
		||||
        public virtual UUID AddUser(
 | 
			
		||||
            string firstName, string lastName, string password, string email, uint regX, uint regY, UUID SetUUID)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            UserProfileData user = new UserProfileData();
 | 
			
		||||
 | 
			
		||||
            user.PasswordSalt = Util.Md5Hash(UUID.Random().ToString());
 | 
			
		||||
            string md5PasswdHash = Util.Md5Hash(Util.Md5Hash(password) + ":" + user.PasswordSalt);
 | 
			
		||||
 | 
			
		||||
            user.HomeLocation = new Vector3(128, 128, 100);
 | 
			
		||||
            user.ID = SetUUID;
 | 
			
		||||
            user.FirstName = firstName;
 | 
			
		||||
            user.SurName = lastName;
 | 
			
		||||
            user.PasswordHash = md5PasswdHash;
 | 
			
		||||
            user.Created = Util.UnixTimeSinceEpoch();
 | 
			
		||||
            user.HomeLookAt = new Vector3(100, 100, 100);
 | 
			
		||||
            user.HomeRegionX = regX;
 | 
			
		||||
            user.HomeRegionY = regY;
 | 
			
		||||
            user.Email = email;
 | 
			
		||||
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    plugin.AddNewUserProfile(user);
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.Error("[USERSTORAGE]: Unable to add user via " + plugin.Name + "(" + e.ToString() + ")");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            UserProfileData userProf = GetUserProfile(firstName, lastName);
 | 
			
		||||
            if (userProf == null)
 | 
			
		||||
            {
 | 
			
		||||
                return UUID.Zero;
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
            {
 | 
			
		||||
                return userProf.ID;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Reset a user password.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="firstName"></param>
 | 
			
		||||
        /// <param name="lastName"></param>
 | 
			
		||||
        /// <param name="newPassword"></param>
 | 
			
		||||
        /// <returns>true if the update was successful, false otherwise</returns>
 | 
			
		||||
        public virtual bool ResetUserPassword(string firstName, string lastName, string newPassword)
 | 
			
		||||
        {
 | 
			
		||||
            string md5PasswdHash = Util.Md5Hash(Util.Md5Hash(newPassword) + ":" + String.Empty);
 | 
			
		||||
 | 
			
		||||
            UserProfileData profile = GetUserProfile(firstName, lastName);
 | 
			
		||||
 | 
			
		||||
            if (null == profile)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.ErrorFormat("[USERSTORAGE]: Could not find user {0} {1}", firstName, lastName);
 | 
			
		||||
                return false;
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            profile.PasswordHash = md5PasswdHash;
 | 
			
		||||
            profile.PasswordSalt = String.Empty;
 | 
			
		||||
 | 
			
		||||
            UpdateUserProfile(profile);
 | 
			
		||||
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public abstract UserProfileData SetupMasterUser(string firstName, string lastName);
 | 
			
		||||
        public abstract UserProfileData SetupMasterUser(string firstName, string lastName, string password);
 | 
			
		||||
        public abstract UserProfileData SetupMasterUser(UUID uuid);
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Add an agent using data plugins.
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="agentdata">The agent data to be added</param>
 | 
			
		||||
        /// <returns>
 | 
			
		||||
        /// true if at least one plugin added the user agent.  false if no plugin successfully added the agent
 | 
			
		||||
        /// </returns>
 | 
			
		||||
        public virtual bool AddUserAgent(UserAgentData agentdata)
 | 
			
		||||
        {
 | 
			
		||||
            bool result = false;
 | 
			
		||||
            
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    plugin.AddNewUserAgent(agentdata);
 | 
			
		||||
                    result = true;
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.Error("[USERSTORAGE]: Unable to add agent via " + plugin.Name + "(" + e.ToString() + ")");
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            return result;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// Get avatar appearance information
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="user"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public virtual AvatarAppearance GetUserAppearance(UUID user)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    AvatarAppearance appearance = plugin.GetUserAppearance(user);
 | 
			
		||||
                    
 | 
			
		||||
                    if (appearance != null)
 | 
			
		||||
                        return appearance;
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.ErrorFormat("[USERSTORAGE]: Unable to find user appearance {0} via {1} ({2})", user.ToString(), plugin.Name, e.ToString());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            return null;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual void UpdateUserAppearance(UUID user, AvatarAppearance appearance)
 | 
			
		||||
        {
 | 
			
		||||
            foreach (IUserDataPlugin plugin in m_plugins)
 | 
			
		||||
            {
 | 
			
		||||
                try
 | 
			
		||||
                {
 | 
			
		||||
                    plugin.UpdateUserAppearance(user, appearance);
 | 
			
		||||
                }
 | 
			
		||||
                catch (Exception e)
 | 
			
		||||
                {
 | 
			
		||||
                    m_log.ErrorFormat("[USERSTORAGE]: Unable to update user appearance {0} via {1} ({2})", user.ToString(), plugin.Name, e.ToString());
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #region IAuthentication
 | 
			
		||||
 | 
			
		||||
        protected Dictionary<UUID, List<string>> m_userKeys = new Dictionary<UUID, List<string>>();
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// This generates authorization keys in the form
 | 
			
		||||
        /// http://userserver/uuid
 | 
			
		||||
        /// after verifying that the caller is, indeed, authorized to request a key
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="url">URL of the user server</param>
 | 
			
		||||
        /// <param name="userID">The user ID requesting the new key</param>
 | 
			
		||||
        /// <param name="authToken">The original authorization token for that user, obtained during login</param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public string GetNewKey(string url, UUID userID, UUID authToken)
 | 
			
		||||
        {
 | 
			
		||||
            UserProfileData profile = GetUserProfile(userID);
 | 
			
		||||
            string newKey = string.Empty;
 | 
			
		||||
            if (!url.EndsWith("/"))
 | 
			
		||||
                url = url + "/";
 | 
			
		||||
 | 
			
		||||
            if (profile != null)
 | 
			
		||||
            {
 | 
			
		||||
                // I'm overloading webloginkey for this, so that no changes are needed in the DB
 | 
			
		||||
                // The uses of webloginkey are fairly mutually exclusive
 | 
			
		||||
                if (profile.WebLoginKey.Equals(authToken))
 | 
			
		||||
                {
 | 
			
		||||
                    newKey = UUID.Random().ToString();
 | 
			
		||||
                    List<string> keys;
 | 
			
		||||
                    lock (m_userKeys)
 | 
			
		||||
                    {
 | 
			
		||||
                        if (m_userKeys.ContainsKey(userID))
 | 
			
		||||
                        {
 | 
			
		||||
                            keys = m_userKeys[userID];
 | 
			
		||||
                        }
 | 
			
		||||
                        else
 | 
			
		||||
                        {
 | 
			
		||||
                            keys = new List<string>();
 | 
			
		||||
                            m_userKeys.Add(userID, keys);
 | 
			
		||||
                        }
 | 
			
		||||
                        keys.Add(newKey);
 | 
			
		||||
                    }
 | 
			
		||||
                    m_log.InfoFormat("[USERAUTH]: Successfully generated new auth key for user {0}", userID);
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                    m_log.Warn("[USERAUTH]: Unauthorized key generation request. Denying new key.");
 | 
			
		||||
            }
 | 
			
		||||
            else
 | 
			
		||||
                m_log.Warn("[USERAUTH]: User not found.");
 | 
			
		||||
 | 
			
		||||
            return url + newKey;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        /// <summary>
 | 
			
		||||
        /// This verifies the uuid portion of the key given out by GenerateKey
 | 
			
		||||
        /// </summary>
 | 
			
		||||
        /// <param name="userID"></param>
 | 
			
		||||
        /// <param name="key"></param>
 | 
			
		||||
        /// <returns></returns>
 | 
			
		||||
        public bool VerifyKey(UUID userID, string key)
 | 
			
		||||
        {
 | 
			
		||||
            lock (m_userKeys)
 | 
			
		||||
            {
 | 
			
		||||
                if (m_userKeys.ContainsKey(userID))
 | 
			
		||||
                {
 | 
			
		||||
                    List<string> keys = m_userKeys[userID];
 | 
			
		||||
                    if (keys.Contains(key))
 | 
			
		||||
                    {
 | 
			
		||||
                        // Keys are one-time only, so remove it
 | 
			
		||||
                        keys.Remove(key);
 | 
			
		||||
                        return true;
 | 
			
		||||
                    }
 | 
			
		||||
                    return false;
 | 
			
		||||
                }
 | 
			
		||||
                else
 | 
			
		||||
                    return false;
 | 
			
		||||
            }
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public virtual bool VerifySession(UUID userID, UUID sessionID)
 | 
			
		||||
        {
 | 
			
		||||
            UserProfileData userProfile = GetUserProfile(userID);
 | 
			
		||||
 | 
			
		||||
            if (userProfile != null && userProfile.CurrentAgent != null)
 | 
			
		||||
            {
 | 
			
		||||
                m_log.DebugFormat(
 | 
			
		||||
                    "[USER AUTH]: Verifying session {0} for {1}; current  session {2}", 
 | 
			
		||||
                    sessionID, userID, userProfile.CurrentAgent.SessionID);
 | 
			
		||||
                
 | 
			
		||||
                if (userProfile.CurrentAgent.SessionID == sessionID)
 | 
			
		||||
                {
 | 
			
		||||
                    return true;
 | 
			
		||||
                }
 | 
			
		||||
            }
 | 
			
		||||
            
 | 
			
		||||
            return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual bool AuthenticateUserByPassword(UUID userID, string password)
 | 
			
		||||
        {
 | 
			
		||||
//            m_log.DebugFormat("[USER AUTH]: Authenticating user {0} given password {1}", userID, password);
 | 
			
		||||
            
 | 
			
		||||
            UserProfileData userProfile = GetUserProfile(userID);
 | 
			
		||||
 | 
			
		||||
            if (null == userProfile)
 | 
			
		||||
                return false;
 | 
			
		||||
      
 | 
			
		||||
            string md5PasswordHash = Util.Md5Hash(Util.Md5Hash(password) + ":" + userProfile.PasswordSalt);
 | 
			
		||||
 | 
			
		||||
//            m_log.DebugFormat(
 | 
			
		||||
//                "[USER AUTH]: Submitted hash {0}, stored hash {1}", md5PasswordHash, userProfile.PasswordHash);
 | 
			
		||||
    
 | 
			
		||||
            if (md5PasswordHash == userProfile.PasswordHash)
 | 
			
		||||
                return true;
 | 
			
		||||
            else
 | 
			
		||||
                return false;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        #endregion
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -1,149 +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.Generic;
 | 
			
		||||
using OpenMetaverse;
 | 
			
		||||
using OpenSim.Framework;
 | 
			
		||||
using OpenSim.Framework.Communications;
 | 
			
		||||
using OpenSim.Framework.Communications.Cache;
 | 
			
		||||
using OpenSim.Services.Interfaces;
 | 
			
		||||
 | 
			
		||||
namespace OpenSim.Tests.Common
 | 
			
		||||
{
 | 
			
		||||
    public class MockUserService : IUserService
 | 
			
		||||
    {
 | 
			
		||||
        public void AddTemporaryUserProfile(UserProfileData userProfile)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
        
 | 
			
		||||
        public UserProfileData GetUserProfile(string firstName, string lastName)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public UserProfileData GetUserProfile(UUID userId)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public UserProfileData GetUserProfile(Uri uri)
 | 
			
		||||
        {
 | 
			
		||||
            UserProfileData userProfile = new UserProfileData();
 | 
			
		||||
 | 
			
		||||
//                userProfile.ID = new UUID(Util.GetHashGuid(uri.ToString(), AssetCache.AssetInfo.Secret));
 | 
			
		||||
 | 
			
		||||
            return userProfile;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public Uri GetUserUri(UserProfileData userProfile)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public UserAgentData GetAgentByUUID(UUID userId)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void ClearUserAgent(UUID avatarID)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public List<AvatarPickerAvatar> GenerateAgentPickerRequestResponse(UUID QueryID, string Query)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public UserProfileData SetupMasterUser(string firstName, string lastName)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public UserProfileData SetupMasterUser(string firstName, string lastName, string password)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public UserProfileData SetupMasterUser(UUID userId)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool UpdateUserProfile(UserProfileData data)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void AddNewUserFriend(UUID friendlistowner, UUID friend, uint perms)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void RemoveUserFriend(UUID friendlistowner, UUID friend)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void UpdateUserFriendPerms(UUID friendlistowner, UUID friend, uint perms)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void LogOffUser(UUID userid, UUID regionid, ulong regionhandle, Vector3 position, Vector3 lookat)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void LogOffUser(UUID userid, UUID regionid, ulong regionhandle, float posx, float posy, float posz)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public List<FriendListItem> GetUserFriendList(UUID friendlistowner)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public bool VerifySession(UUID userID, UUID sessionID)
 | 
			
		||||
        {
 | 
			
		||||
            return true;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public void SetInventoryService(IInventoryService inv)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        public virtual bool AuthenticateUserByPassword(UUID userID, string password)
 | 
			
		||||
        {
 | 
			
		||||
            throw new NotImplementedException();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -58,11 +58,6 @@ namespace OpenSim.Tests.Common.Mock
 | 
			
		|||
            : base(serversInfo, null)
 | 
			
		||||
        {
 | 
			
		||||
 | 
			
		||||
            LocalUserServices lus = new LocalUserServices(991, 992, this);
 | 
			
		||||
            lus.AddPlugin(new TemporaryUserProfilePlugin());
 | 
			
		||||
            m_userDataPlugin = new TestUserDataPlugin();
 | 
			
		||||
            lus.AddPlugin(m_userDataPlugin);
 | 
			
		||||
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue