From b4483df2701483aabd43fc7d03ebd74770d70170 Mon Sep 17 00:00:00 2001
From: Diva Canto
Date: Tue, 29 Dec 2009 15:58:40 -0800
Subject: * All modules and connectors for user account service are in place.
Untested. * Cleaned up a few things on presence connectors
---
.../Resources/CoreModulePlugin.addin.xml | 4 +-
.../User/LocalUserAccountServiceConnector.cs | 131 ++++++++++
.../User/LocalUserServiceConnector.cs | 131 ----------
.../User/RemoteUserAccountServiceConnector.cs | 114 ++++++++
.../User/RemoteUserServiceConnector.cs | 114 --------
.../LocalUserAccountServiceConnector.cs | 176 +++++++++++++
.../RemoteUserAccountServiceConnector.cs | 114 ++++++++
.../Handlers/Presence/PresenceServerPostHandler.cs | 4 +-
.../UserAccounts/UserAccountServerConnector.cs | 61 +++++
.../UserAccounts/UserAccountServerPostHandler.cs | 276 ++++++++++++++++++++
.../Presence/PresenceServiceConnector.cs | 28 +-
.../Connectors/User/UserServiceConnector.cs | 114 --------
.../UserAccounts/UserServiceConnector.cs | 287 +++++++++++++++++++++
OpenSim/Services/Interfaces/IUserService.cs | 4 +-
14 files changed, 1179 insertions(+), 379 deletions(-)
create mode 100644 OpenSim/Region/CoreModules/ServiceConnectorsOut/User/LocalUserAccountServiceConnector.cs
delete mode 100644 OpenSim/Region/CoreModules/ServiceConnectorsOut/User/LocalUserServiceConnector.cs
create mode 100644 OpenSim/Region/CoreModules/ServiceConnectorsOut/User/RemoteUserAccountServiceConnector.cs
delete mode 100644 OpenSim/Region/CoreModules/ServiceConnectorsOut/User/RemoteUserServiceConnector.cs
create mode 100644 OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccount/LocalUserAccountServiceConnector.cs
create mode 100644 OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccount/RemoteUserAccountServiceConnector.cs
create mode 100644 OpenSim/Server/Handlers/UserAccounts/UserAccountServerConnector.cs
create mode 100644 OpenSim/Server/Handlers/UserAccounts/UserAccountServerPostHandler.cs
delete mode 100644 OpenSim/Services/Connectors/User/UserServiceConnector.cs
create mode 100644 OpenSim/Services/Connectors/UserAccounts/UserServiceConnector.cs
diff --git a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
index 79796b1..a7acc43 100644
--- a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
+++ b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
@@ -48,9 +48,11 @@
+
-
+
+
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/User/LocalUserAccountServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/User/LocalUserAccountServiceConnector.cs
new file mode 100644
index 0000000..cca5bb4
--- /dev/null
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/User/LocalUserAccountServiceConnector.cs
@@ -0,0 +1,131 @@
+/*
+ * 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.Reflection;
+using log4net;
+using Nini.Config;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Server.Base;
+using OpenSim.Services.Interfaces;
+
+namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.User
+{
+ public class LocalUserServicesConnector : ISharedRegionModule
+ {
+ private static readonly ILog m_log =
+ LogManager.GetLogger(
+ MethodBase.GetCurrentMethod().DeclaringType);
+
+ private IUserAccountService m_UserService;
+
+ private bool m_Enabled = false;
+
+ public Type ReplaceableInterface
+ {
+ get { return null; }
+ }
+
+ public string Name
+ {
+ get { return "LocalUserServicesConnector"; }
+ }
+
+ public void Initialise(IConfigSource source)
+ {
+ IConfig moduleConfig = source.Configs["Modules"];
+ if (moduleConfig != null)
+ {
+ string name = moduleConfig.GetString("UserServices", "");
+ if (name == Name)
+ {
+ IConfig userConfig = source.Configs["UserService"];
+ if (userConfig == null)
+ {
+ m_log.Error("[USER CONNECTOR]: UserService missing from OpenSim.ini");
+ return;
+ }
+
+ string serviceDll = userConfig.GetString("LocalServiceModule",
+ String.Empty);
+
+ if (serviceDll == String.Empty)
+ {
+ m_log.Error("[USER CONNECTOR]: No LocalServiceModule named in section UserService");
+ return;
+ }
+
+ Object[] args = new Object[] { source };
+ m_UserService =
+ ServerUtils.LoadPlugin(serviceDll,
+ args);
+
+ if (m_UserService == null)
+ {
+ m_log.Error("[USER CONNECTOR]: Can't load user service");
+ return;
+ }
+ m_Enabled = true;
+ m_log.Info("[USER CONNECTOR]: Local user connector enabled");
+ }
+ }
+ }
+
+ public void PostInitialise()
+ {
+ if (!m_Enabled)
+ return;
+ }
+
+ public void Close()
+ {
+ if (!m_Enabled)
+ return;
+ }
+
+ public void AddRegion(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+
+ scene.RegisterModuleInterface(m_UserService);
+ }
+
+ public void RemoveRegion(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+ }
+
+ public void RegionLoaded(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+ }
+ }
+}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/User/LocalUserServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/User/LocalUserServiceConnector.cs
deleted file mode 100644
index cca5bb4..0000000
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/User/LocalUserServiceConnector.cs
+++ /dev/null
@@ -1,131 +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.Reflection;
-using log4net;
-using Nini.Config;
-using OpenSim.Region.Framework.Interfaces;
-using OpenSim.Region.Framework.Scenes;
-using OpenSim.Server.Base;
-using OpenSim.Services.Interfaces;
-
-namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.User
-{
- public class LocalUserServicesConnector : ISharedRegionModule
- {
- private static readonly ILog m_log =
- LogManager.GetLogger(
- MethodBase.GetCurrentMethod().DeclaringType);
-
- private IUserAccountService m_UserService;
-
- private bool m_Enabled = false;
-
- public Type ReplaceableInterface
- {
- get { return null; }
- }
-
- public string Name
- {
- get { return "LocalUserServicesConnector"; }
- }
-
- public void Initialise(IConfigSource source)
- {
- IConfig moduleConfig = source.Configs["Modules"];
- if (moduleConfig != null)
- {
- string name = moduleConfig.GetString("UserServices", "");
- if (name == Name)
- {
- IConfig userConfig = source.Configs["UserService"];
- if (userConfig == null)
- {
- m_log.Error("[USER CONNECTOR]: UserService missing from OpenSim.ini");
- return;
- }
-
- string serviceDll = userConfig.GetString("LocalServiceModule",
- String.Empty);
-
- if (serviceDll == String.Empty)
- {
- m_log.Error("[USER CONNECTOR]: No LocalServiceModule named in section UserService");
- return;
- }
-
- Object[] args = new Object[] { source };
- m_UserService =
- ServerUtils.LoadPlugin(serviceDll,
- args);
-
- if (m_UserService == null)
- {
- m_log.Error("[USER CONNECTOR]: Can't load user service");
- return;
- }
- m_Enabled = true;
- m_log.Info("[USER CONNECTOR]: Local user connector enabled");
- }
- }
- }
-
- public void PostInitialise()
- {
- if (!m_Enabled)
- return;
- }
-
- public void Close()
- {
- if (!m_Enabled)
- return;
- }
-
- public void AddRegion(Scene scene)
- {
- if (!m_Enabled)
- return;
-
- scene.RegisterModuleInterface(m_UserService);
- }
-
- public void RemoveRegion(Scene scene)
- {
- if (!m_Enabled)
- return;
- }
-
- public void RegionLoaded(Scene scene)
- {
- if (!m_Enabled)
- return;
- }
- }
-}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/User/RemoteUserAccountServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/User/RemoteUserAccountServiceConnector.cs
new file mode 100644
index 0000000..cef9129
--- /dev/null
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/User/RemoteUserAccountServiceConnector.cs
@@ -0,0 +1,114 @@
+/*
+ * 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 Nini.Config;
+using log4net;
+using System.Reflection;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Services.Interfaces;
+using OpenSim.Services.Connectors;
+
+namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.User
+{
+ public class RemoteUserServicesConnector : UserServicesConnector,
+ ISharedRegionModule, IUserAccountService
+ {
+ private static readonly ILog m_log =
+ LogManager.GetLogger(
+ MethodBase.GetCurrentMethod().DeclaringType);
+
+ private bool m_Enabled = false;
+
+ public Type ReplaceableInterface
+ {
+ get { return null; }
+ }
+
+ public string Name
+ {
+ get { return "RemoteUserServicesConnector"; }
+ }
+
+ public override void Initialise(IConfigSource source)
+ {
+ IConfig moduleConfig = source.Configs["Modules"];
+ if (moduleConfig != null)
+ {
+ string name = moduleConfig.GetString("UserServices", "");
+ if (name == Name)
+ {
+ IConfig userConfig = source.Configs["UserService"];
+ if (userConfig == null)
+ {
+ m_log.Error("[USER CONNECTOR]: UserService missing from OpanSim.ini");
+ return;
+ }
+
+ m_Enabled = true;
+
+ base.Initialise(source);
+
+ m_log.Info("[USER CONNECTOR]: Remote users enabled");
+ }
+ }
+ }
+
+ public void PostInitialise()
+ {
+ if (!m_Enabled)
+ return;
+ }
+
+ public void Close()
+ {
+ if (!m_Enabled)
+ return;
+ }
+
+ public void AddRegion(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+
+ scene.RegisterModuleInterface(this);
+ }
+
+ public void RemoveRegion(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+ }
+
+ public void RegionLoaded(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+ }
+ }
+}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/User/RemoteUserServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/User/RemoteUserServiceConnector.cs
deleted file mode 100644
index cef9129..0000000
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/User/RemoteUserServiceConnector.cs
+++ /dev/null
@@ -1,114 +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 Nini.Config;
-using log4net;
-using System.Reflection;
-using OpenSim.Region.Framework.Interfaces;
-using OpenSim.Region.Framework.Scenes;
-using OpenSim.Services.Interfaces;
-using OpenSim.Services.Connectors;
-
-namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.User
-{
- public class RemoteUserServicesConnector : UserServicesConnector,
- ISharedRegionModule, IUserAccountService
- {
- private static readonly ILog m_log =
- LogManager.GetLogger(
- MethodBase.GetCurrentMethod().DeclaringType);
-
- private bool m_Enabled = false;
-
- public Type ReplaceableInterface
- {
- get { return null; }
- }
-
- public string Name
- {
- get { return "RemoteUserServicesConnector"; }
- }
-
- public override void Initialise(IConfigSource source)
- {
- IConfig moduleConfig = source.Configs["Modules"];
- if (moduleConfig != null)
- {
- string name = moduleConfig.GetString("UserServices", "");
- if (name == Name)
- {
- IConfig userConfig = source.Configs["UserService"];
- if (userConfig == null)
- {
- m_log.Error("[USER CONNECTOR]: UserService missing from OpanSim.ini");
- return;
- }
-
- m_Enabled = true;
-
- base.Initialise(source);
-
- m_log.Info("[USER CONNECTOR]: Remote users enabled");
- }
- }
- }
-
- public void PostInitialise()
- {
- if (!m_Enabled)
- return;
- }
-
- public void Close()
- {
- if (!m_Enabled)
- return;
- }
-
- public void AddRegion(Scene scene)
- {
- if (!m_Enabled)
- return;
-
- scene.RegisterModuleInterface(this);
- }
-
- public void RemoveRegion(Scene scene)
- {
- if (!m_Enabled)
- return;
- }
-
- public void RegionLoaded(Scene scene)
- {
- if (!m_Enabled)
- return;
- }
- }
-}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccount/LocalUserAccountServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccount/LocalUserAccountServiceConnector.cs
new file mode 100644
index 0000000..e40d524
--- /dev/null
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccount/LocalUserAccountServiceConnector.cs
@@ -0,0 +1,176 @@
+/*
+ * 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.Reflection;
+using log4net;
+using Nini.Config;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Server.Base;
+using OpenSim.Services.Interfaces;
+
+using OpenMetaverse;
+
+namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.User
+{
+ public class LocalUserAccountServicesConnector : ISharedRegionModule, IUserAccountService
+ {
+ private static readonly ILog m_log =
+ LogManager.GetLogger(
+ MethodBase.GetCurrentMethod().DeclaringType);
+
+ private IUserAccountService m_UserService;
+
+ private bool m_Enabled = false;
+
+ #region ISharedRegionModule
+
+ public Type ReplaceableInterface
+ {
+ get { return null; }
+ }
+
+ public string Name
+ {
+ get { return "LocalUserAccountServicesConnector"; }
+ }
+
+ public void Initialise(IConfigSource source)
+ {
+ IConfig moduleConfig = source.Configs["Modules"];
+ if (moduleConfig != null)
+ {
+ string name = moduleConfig.GetString("UserAccountServices", "");
+ if (name == Name)
+ {
+ IConfig userConfig = source.Configs["UserAccountService"];
+ if (userConfig == null)
+ {
+ m_log.Error("[USER CONNECTOR]: UserAccountService missing from OpenSim.ini");
+ return;
+ }
+
+ string serviceDll = userConfig.GetString("LocalServiceModule",
+ String.Empty);
+
+ if (serviceDll == String.Empty)
+ {
+ m_log.Error("[USER CONNECTOR]: No LocalServiceModule named in section UserService");
+ return;
+ }
+
+ Object[] args = new Object[] { source };
+ m_UserService =
+ ServerUtils.LoadPlugin(serviceDll,
+ args);
+
+ if (m_UserService == null)
+ {
+ m_log.Error("[USER CONNECTOR]: Can't load user account service");
+ return;
+ }
+ m_Enabled = true;
+ m_log.Info("[USER CONNECTOR]: Local user connector enabled");
+ }
+ }
+ }
+
+ public void PostInitialise()
+ {
+ if (!m_Enabled)
+ return;
+ }
+
+ public void Close()
+ {
+ if (!m_Enabled)
+ return;
+ }
+
+ public void AddRegion(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+
+ scene.RegisterModuleInterface(m_UserService);
+ }
+
+ public void RemoveRegion(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+ }
+
+ public void RegionLoaded(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+ }
+
+ #endregion
+
+ #region IUserAccountService
+
+ public UserAccount GetUserAccount(UUID scopeID, UUID userID)
+ {
+ return m_UserService.GetUserAccount(scopeID, userID);
+ }
+
+ public UserAccount GetUserAccount(UUID scopeID, string FirstName, string LastName)
+ {
+ return m_UserService.GetUserAccount(scopeID, FirstName, LastName);
+ }
+
+ public UserAccount GetUserAccount(UUID scopeID, string Email)
+ {
+ return m_UserService.GetUserAccount(scopeID, Email);
+ }
+
+ public List GetUserAccounts(UUID scopeID, string query)
+ {
+ return m_UserService.GetUserAccounts(scopeID, query);
+ }
+
+ // Update all updatable fields
+ //
+ public bool SetUserAccount(UserAccount data)
+ {
+ return m_UserService.SetUserAccount(data);
+ }
+
+ // Creates a user data record
+ public bool CreateUserAccount(UserAccount data)
+ {
+ return m_UserService.CreateUserAccount(data);
+ }
+
+ #endregion
+
+ }
+}
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccount/RemoteUserAccountServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccount/RemoteUserAccountServiceConnector.cs
new file mode 100644
index 0000000..0b72080
--- /dev/null
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/UserAccount/RemoteUserAccountServiceConnector.cs
@@ -0,0 +1,114 @@
+/*
+ * 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 Nini.Config;
+using log4net;
+using System.Reflection;
+using OpenSim.Region.Framework.Interfaces;
+using OpenSim.Region.Framework.Scenes;
+using OpenSim.Services.Interfaces;
+using OpenSim.Services.Connectors;
+
+namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.User
+{
+ public class RemoteUserAccountServicesConnector : UserAccountServicesConnector,
+ ISharedRegionModule, IUserAccountService
+ {
+ private static readonly ILog m_log =
+ LogManager.GetLogger(
+ MethodBase.GetCurrentMethod().DeclaringType);
+
+ private bool m_Enabled = false;
+
+ public Type ReplaceableInterface
+ {
+ get { return null; }
+ }
+
+ public string Name
+ {
+ get { return "RemoteUserAccountServicesConnector"; }
+ }
+
+ public override void Initialise(IConfigSource source)
+ {
+ IConfig moduleConfig = source.Configs["Modules"];
+ if (moduleConfig != null)
+ {
+ string name = moduleConfig.GetString("UserServices", "");
+ if (name == Name)
+ {
+ IConfig userConfig = source.Configs["UserService"];
+ if (userConfig == null)
+ {
+ m_log.Error("[USER CONNECTOR]: UserService missing from OpanSim.ini");
+ return;
+ }
+
+ m_Enabled = true;
+
+ base.Initialise(source);
+
+ m_log.Info("[USER CONNECTOR]: Remote users enabled");
+ }
+ }
+ }
+
+ public void PostInitialise()
+ {
+ if (!m_Enabled)
+ return;
+ }
+
+ public void Close()
+ {
+ if (!m_Enabled)
+ return;
+ }
+
+ public void AddRegion(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+
+ scene.RegisterModuleInterface(this);
+ }
+
+ public void RemoveRegion(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+ }
+
+ public void RegionLoaded(Scene scene)
+ {
+ if (!m_Enabled)
+ return;
+ }
+ }
+}
diff --git a/OpenSim/Server/Handlers/Presence/PresenceServerPostHandler.cs b/OpenSim/Server/Handlers/Presence/PresenceServerPostHandler.cs
index bb00a00..11adc4a 100644
--- a/OpenSim/Server/Handlers/Presence/PresenceServerPostHandler.cs
+++ b/OpenSim/Server/Handlers/Presence/PresenceServerPostHandler.cs
@@ -265,7 +265,7 @@ namespace OpenSim.Server.Handlers.Presence
doc.AppendChild(rootElement);
- XmlElement result = doc.CreateElement("", "Result", "");
+ XmlElement result = doc.CreateElement("", "result", "");
result.AppendChild(doc.CreateTextNode("Success"));
rootElement.AppendChild(result);
@@ -287,7 +287,7 @@ namespace OpenSim.Server.Handlers.Presence
doc.AppendChild(rootElement);
- XmlElement result = doc.CreateElement("", "Result", "");
+ XmlElement result = doc.CreateElement("", "result", "");
result.AppendChild(doc.CreateTextNode("Failure"));
rootElement.AppendChild(result);
diff --git a/OpenSim/Server/Handlers/UserAccounts/UserAccountServerConnector.cs b/OpenSim/Server/Handlers/UserAccounts/UserAccountServerConnector.cs
new file mode 100644
index 0000000..f17a8de
--- /dev/null
+++ b/OpenSim/Server/Handlers/UserAccounts/UserAccountServerConnector.cs
@@ -0,0 +1,61 @@
+/*
+ * 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 Nini.Config;
+using OpenSim.Server.Base;
+using OpenSim.Services.Interfaces;
+using OpenSim.Framework.Servers.HttpServer;
+using OpenSim.Server.Handlers.Base;
+
+namespace OpenSim.Server.Handlers.UserAccounts
+{
+ public class UserAccountServiceConnector : ServiceConnector
+ {
+ private IUserAccountService m_UserAccountService;
+ private string m_ConfigName = "UserAccountService";
+
+ public UserAccountServiceConnector(IConfigSource config, IHttpServer server, string configName) :
+ base(config, server, configName)
+ {
+ IConfig serverConfig = config.Configs[m_ConfigName];
+ if (serverConfig == null)
+ throw new Exception(String.Format("No section {0} in config file", m_ConfigName));
+
+ string service = serverConfig.GetString("LocalServiceModule",
+ String.Empty);
+
+ if (service == String.Empty)
+ throw new Exception("No LocalServiceModule in config file");
+
+ Object[] args = new Object[] { config };
+ m_UserAccountService = ServerUtils.LoadPlugin(service, args);
+
+ server.AddStreamHandler(new UserAccountServerPostHandler(m_UserAccountService));
+ }
+ }
+}
diff --git a/OpenSim/Server/Handlers/UserAccounts/UserAccountServerPostHandler.cs b/OpenSim/Server/Handlers/UserAccounts/UserAccountServerPostHandler.cs
new file mode 100644
index 0000000..a92148c
--- /dev/null
+++ b/OpenSim/Server/Handlers/UserAccounts/UserAccountServerPostHandler.cs
@@ -0,0 +1,276 @@
+/*
+ * 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 Nini.Config;
+using log4net;
+using System;
+using System.Reflection;
+using System.IO;
+using System.Net;
+using System.Text;
+using System.Text.RegularExpressions;
+using System.Xml;
+using System.Xml.Serialization;
+using System.Collections.Generic;
+using OpenSim.Server.Base;
+using OpenSim.Services.Interfaces;
+using OpenSim.Framework;
+using OpenSim.Framework.Servers.HttpServer;
+using OpenMetaverse;
+
+namespace OpenSim.Server.Handlers.UserAccounts
+{
+ public class UserAccountServerPostHandler : BaseStreamHandler
+ {
+ private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
+
+ private IUserAccountService m_UserAccountService;
+
+ public UserAccountServerPostHandler(IUserAccountService service) :
+ base("POST", "/accounts")
+ {
+ m_UserAccountService = service;
+ }
+
+ public override byte[] Handle(string path, Stream requestData,
+ OSHttpRequest httpRequest, OSHttpResponse httpResponse)
+ {
+ StreamReader sr = new StreamReader(requestData);
+ string body = sr.ReadToEnd();
+ sr.Close();
+ body = body.Trim();
+
+ // We need to check the authorization header
+ //httpRequest.Headers["authorization"] ...
+
+ //m_log.DebugFormat("[XXX]: query String: {0}", body);
+
+ try
+ {
+ Dictionary request =
+ ServerUtils.ParseQueryString(body);
+
+ if (!request.ContainsKey("METHOD"))
+ return FailureResult();
+
+ string method = request["METHOD"].ToString();
+
+ switch (method)
+ {
+ case "getaccount":
+ return GetAccount(request);
+ case "getaccounts":
+ return GetAccounts(request);
+ case "createaccount":
+ return CreateAccount(request);
+ case "setaccount":
+ return SetAccount(request);
+ }
+ m_log.DebugFormat("[PRESENCE HANDLER]: unknown method request: {0}", method);
+ }
+ catch (Exception e)
+ {
+ m_log.Debug("[PRESENCE HANDLER]: Exception {0}" + e);
+ }
+
+ return FailureResult();
+
+ }
+
+ byte[] GetAccount(Dictionary request)
+ {
+ UserAccount account = null;
+ UUID scopeID = UUID.Zero;
+ Dictionary result = new Dictionary();
+
+ if (!request.ContainsKey("ScopeID"))
+ {
+ result["result"] = "null";
+ return ResultToBytes(result);
+ }
+
+ if (!UUID.TryParse(request["ScopeID"].ToString(), out scopeID))
+ {
+ result["result"] = "null";
+ return ResultToBytes(result);
+ }
+
+ if (request.ContainsKey("UserID") && request["UserID"] != null)
+ {
+ UUID userID;
+ if (UUID.TryParse(request["UserID"].ToString(), out userID))
+ account = m_UserAccountService.GetUserAccount(scopeID, userID);
+ }
+
+ else if (request.ContainsKey("Email") && request["Email"] != null)
+ account = m_UserAccountService.GetUserAccount(scopeID, request["Email"].ToString());
+
+ else if (request.ContainsKey("FirstName") && request.ContainsKey("LastName") &&
+ request["FirstName"] != null && request["LastName"] != null)
+ account = m_UserAccountService.GetUserAccount(scopeID, request["FirstName"].ToString(), request["LastName"].ToString());
+
+ if (account == null)
+ result["result"] = "null";
+ else
+ result["result"] = account.ToKeyValuePairs();
+
+ return ResultToBytes(result);
+ }
+
+ byte[] GetAccounts(Dictionary request)
+ {
+ if (!request.ContainsKey("ScopeID") || !request.ContainsKey("query"))
+ return FailureResult();
+
+ UUID scopeID = UUID.Zero;
+ if (!UUID.TryParse(request["ScopeID"].ToString(), out scopeID))
+ return FailureResult();
+
+ string query = request["query"].ToString();
+
+ List accounts = m_UserAccountService.GetUserAccounts(scopeID, query);
+
+ Dictionary result = new Dictionary();
+ if ((accounts == null) || ((accounts != null) && (accounts.Count == 0)))
+ result["result"] = "null";
+ else
+ {
+ int i = 0;
+ foreach (UserAccount acc in accounts)
+ {
+ Dictionary rinfoDict = acc.ToKeyValuePairs();
+ result["account" + i] = rinfoDict;
+ i++;
+ }
+ }
+
+ string xmlString = ServerUtils.BuildXmlResponse(result);
+ //m_log.DebugFormat("[GRID HANDLER]: resp string: {0}", xmlString);
+ UTF8Encoding encoding = new UTF8Encoding();
+ return encoding.GetBytes(xmlString);
+ }
+
+ byte[] CreateAccount(Dictionary request)
+ {
+ if (!request.ContainsKey("account"))
+ return FailureResult();
+ if (request["account"] == null)
+ return FailureResult();
+ if (!(request["account"] is Dictionary))
+ return FailureResult();
+
+ UserAccount account = new UserAccount((Dictionary) request["account"]);
+
+ if (m_UserAccountService.CreateUserAccount(account))
+ return SuccessResult();
+
+ return FailureResult();
+ }
+
+ byte[] SetAccount(Dictionary request)
+ {
+ if (!request.ContainsKey("account"))
+ return FailureResult();
+ if (request["account"] == null)
+ return FailureResult();
+ if (!(request["account"] is Dictionary))
+ return FailureResult();
+
+ UserAccount account = new UserAccount((Dictionary)request["account"]);
+
+ if (m_UserAccountService.SetUserAccount(account))
+ return SuccessResult();
+
+ return FailureResult();
+ }
+
+ private byte[] SuccessResult()
+ {
+ XmlDocument doc = new XmlDocument();
+
+ XmlNode xmlnode = doc.CreateNode(XmlNodeType.XmlDeclaration,
+ "", "");
+
+ doc.AppendChild(xmlnode);
+
+ XmlElement rootElement = doc.CreateElement("", "ServerResponse",
+ "");
+
+ doc.AppendChild(rootElement);
+
+ XmlElement result = doc.CreateElement("", "result", "");
+ result.AppendChild(doc.CreateTextNode("Success"));
+
+ rootElement.AppendChild(result);
+
+ return DocToBytes(doc);
+ }
+
+ private byte[] FailureResult()
+ {
+ XmlDocument doc = new XmlDocument();
+
+ XmlNode xmlnode = doc.CreateNode(XmlNodeType.XmlDeclaration,
+ "", "");
+
+ doc.AppendChild(xmlnode);
+
+ XmlElement rootElement = doc.CreateElement("", "ServerResponse",
+ "");
+
+ doc.AppendChild(rootElement);
+
+ XmlElement result = doc.CreateElement("", "result", "");
+ result.AppendChild(doc.CreateTextNode("Failure"));
+
+ rootElement.AppendChild(result);
+
+ return DocToBytes(doc);
+ }
+
+ private byte[] DocToBytes(XmlDocument doc)
+ {
+ MemoryStream ms = new MemoryStream();
+ XmlTextWriter xw = new XmlTextWriter(ms, null);
+ xw.Formatting = Formatting.Indented;
+ doc.WriteTo(xw);
+ xw.Flush();
+
+ return ms.ToArray();
+ }
+
+ private byte[] ResultToBytes(Dictionary result)
+ {
+ string xmlString = ServerUtils.BuildXmlResponse(result);
+ //m_log.DebugFormat("[GRID HANDLER]: resp string: {0}", xmlString);
+ UTF8Encoding encoding = new UTF8Encoding();
+ return encoding.GetBytes(xmlString);
+ }
+
+
+ }
+}
diff --git a/OpenSim/Services/Connectors/Presence/PresenceServiceConnector.cs b/OpenSim/Services/Connectors/Presence/PresenceServiceConnector.cs
index 482862d..29cfd6e 100644
--- a/OpenSim/Services/Connectors/Presence/PresenceServiceConnector.cs
+++ b/OpenSim/Services/Connectors/Presence/PresenceServiceConnector.cs
@@ -109,9 +109,9 @@ namespace OpenSim.Services.Connectors
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
- if (replyData.ContainsKey("Result"))
+ if (replyData.ContainsKey("result"))
{
- if (replyData["Result"].ToString().ToLower() == "success")
+ if (replyData["result"].ToString().ToLower() == "success")
return true;
else
return false;
@@ -153,9 +153,9 @@ namespace OpenSim.Services.Connectors
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
- if (replyData.ContainsKey("Result"))
+ if (replyData.ContainsKey("result"))
{
- if (replyData["Result"].ToString().ToLower() == "success")
+ if (replyData["result"].ToString().ToLower() == "success")
return true;
else
return false;
@@ -196,9 +196,9 @@ namespace OpenSim.Services.Connectors
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
- if (replyData.ContainsKey("Result"))
+ if (replyData.ContainsKey("result"))
{
- if (replyData["Result"].ToString().ToLower() == "success")
+ if (replyData["result"].ToString().ToLower() == "success")
return true;
else
return false;
@@ -242,9 +242,9 @@ namespace OpenSim.Services.Connectors
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
- if (replyData.ContainsKey("Result"))
+ if (replyData.ContainsKey("result"))
{
- if (replyData["Result"].ToString().ToLower() == "success")
+ if (replyData["result"].ToString().ToLower() == "success")
return true;
else
return false;
@@ -296,11 +296,8 @@ namespace OpenSim.Services.Connectors
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
PresenceInfo pinfo = null;
- if ((replyData != null) && (replyData["result"] != null))
+ if ((replyData != null) && replyData.ContainsKey("result") && (replyData["result"] != null))
{
- if (replyData["result"].ToString() == "null")
- return null;
-
if (replyData["result"] is Dictionary)
{
pinfo = new PresenceInfo((Dictionary)replyData["result"]);
@@ -345,7 +342,8 @@ namespace OpenSim.Services.Connectors
if (replyData != null)
{
- if (replyData.ContainsKey("result") && replyData.ContainsKey("result").ToString() == "null")
+ if (replyData.ContainsKey("result") &&
+ (replyData["result"].ToString() == "null" || replyData["result"].ToString() == "Failure"))
{
return new PresenceInfo[0];
}
@@ -395,9 +393,9 @@ namespace OpenSim.Services.Connectors
{
Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
- if (replyData.ContainsKey("Result"))
+ if (replyData.ContainsKey("result"))
{
- if (replyData["Result"].ToString().ToLower() == "success")
+ if (replyData["result"].ToString().ToLower() == "success")
return true;
else
return false;
diff --git a/OpenSim/Services/Connectors/User/UserServiceConnector.cs b/OpenSim/Services/Connectors/User/UserServiceConnector.cs
deleted file mode 100644
index 0de8c1d..0000000
--- a/OpenSim/Services/Connectors/User/UserServiceConnector.cs
+++ /dev/null
@@ -1,114 +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 log4net;
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Reflection;
-using Nini.Config;
-using OpenSim.Framework;
-using OpenSim.Framework.Communications;
-using OpenSim.Framework.Servers.HttpServer;
-using OpenSim.Services.Interfaces;
-using OpenMetaverse;
-
-namespace OpenSim.Services.Connectors
-{
- public class UserServicesConnector : IUserAccountService
- {
- private static readonly ILog m_log =
- LogManager.GetLogger(
- MethodBase.GetCurrentMethod().DeclaringType);
-
-// private string m_ServerURI = String.Empty;
-
- public UserServicesConnector()
- {
- }
-
- public UserServicesConnector(string serverURI)
- {
-// m_ServerURI = serverURI.TrimEnd('/');
- }
-
- public UserServicesConnector(IConfigSource source)
- {
- Initialise(source);
- }
-
- public virtual void Initialise(IConfigSource source)
- {
- IConfig assetConfig = source.Configs["UserService"];
- if (assetConfig == null)
- {
- m_log.Error("[USER CONNECTOR]: UserService missing from OpanSim.ini");
- throw new Exception("User connector init error");
- }
-
- string serviceURI = assetConfig.GetString("UserServerURI",
- String.Empty);
-
- if (serviceURI == String.Empty)
- {
- m_log.Error("[USER CONNECTOR]: No Server URI named in section UserService");
- throw new Exception("User connector init error");
- }
- //m_ServerURI = serviceURI;
- }
-
- public UserAccount GetUserAccount(UUID scopeID, string firstName, string lastName)
- {
- return null;
- }
-
- public UserAccount GetUserAccount(UUID scopeID, string email)
- {
- return null;
- }
-
- public UserAccount GetUserAccount(UUID scopeID, UUID userID)
- {
- return null;
- }
-
- public bool SetUserAccount(UserAccount data)
- {
- return false;
- }
-
- public bool CreateUserAccount(UserAccount data)
- {
- return false;
- }
-
- public List GetUserAccounts(UUID scopeID, string query)
- {
- return null;
- }
- }
-}
diff --git a/OpenSim/Services/Connectors/UserAccounts/UserServiceConnector.cs b/OpenSim/Services/Connectors/UserAccounts/UserServiceConnector.cs
new file mode 100644
index 0000000..d4b906a
--- /dev/null
+++ b/OpenSim/Services/Connectors/UserAccounts/UserServiceConnector.cs
@@ -0,0 +1,287 @@
+/*
+ * 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 log4net;
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Reflection;
+using Nini.Config;
+using OpenSim.Framework;
+using OpenSim.Framework.Communications;
+using OpenSim.Framework.Servers.HttpServer;
+using OpenSim.Server.Base;
+using OpenSim.Services.Interfaces;
+using OpenMetaverse;
+
+namespace OpenSim.Services.Connectors
+{
+ public class UserAccountServicesConnector : IUserAccountService
+ {
+ private static readonly ILog m_log =
+ LogManager.GetLogger(
+ MethodBase.GetCurrentMethod().DeclaringType);
+
+ private string m_ServerURI = String.Empty;
+
+ public UserAccountServicesConnector()
+ {
+ }
+
+ public UserAccountServicesConnector(string serverURI)
+ {
+ m_ServerURI = serverURI.TrimEnd('/');
+ }
+
+ public UserAccountServicesConnector(IConfigSource source)
+ {
+ Initialise(source);
+ }
+
+ public virtual void Initialise(IConfigSource source)
+ {
+ IConfig assetConfig = source.Configs["UserAccountService"];
+ if (assetConfig == null)
+ {
+ m_log.Error("[ACCOUNT CONNECTOR]: UserAccountService missing from OpenSim.ini");
+ throw new Exception("User account connector init error");
+ }
+
+ string serviceURI = assetConfig.GetString("UserAccountServerURI",
+ String.Empty);
+
+ if (serviceURI == String.Empty)
+ {
+ m_log.Error("[ACCOUNT CONNECTOR]: No Server URI named in section UserAccountService");
+ throw new Exception("User account connector init error");
+ }
+ m_ServerURI = serviceURI;
+ }
+
+ public UserAccount GetUserAccount(UUID scopeID, string firstName, string lastName)
+ {
+ Dictionary sendData = new Dictionary();
+ //sendData["SCOPEID"] = scopeID.ToString();
+ sendData["VERSIONMIN"] = ProtocolVersions.ClientProtocolVersionMin.ToString();
+ sendData["VERSIONMAX"] = ProtocolVersions.ClientProtocolVersionMax.ToString();
+ sendData["METHOD"] = "getaccount";
+
+ sendData["ScopeID"] = scopeID;
+ sendData["FirstName"] = firstName.ToString();
+ sendData["LastName"] = lastName.ToString();
+
+ return SendAndGetReply(sendData);
+ }
+
+ public UserAccount GetUserAccount(UUID scopeID, string email)
+ {
+ Dictionary sendData = new Dictionary();
+ //sendData["SCOPEID"] = scopeID.ToString();
+ sendData["VERSIONMIN"] = ProtocolVersions.ClientProtocolVersionMin.ToString();
+ sendData["VERSIONMAX"] = ProtocolVersions.ClientProtocolVersionMax.ToString();
+ sendData["METHOD"] = "getaccount";
+
+ sendData["ScopeID"] = scopeID;
+ sendData["Email"] = email;
+
+ return SendAndGetReply(sendData);
+ }
+
+ public UserAccount GetUserAccount(UUID scopeID, UUID userID)
+ {
+ Dictionary sendData = new Dictionary();
+ //sendData["SCOPEID"] = scopeID.ToString();
+ sendData["VERSIONMIN"] = ProtocolVersions.ClientProtocolVersionMin.ToString();
+ sendData["VERSIONMAX"] = ProtocolVersions.ClientProtocolVersionMax.ToString();
+ sendData["METHOD"] = "getaccount";
+
+ sendData["ScopeID"] = scopeID;
+ sendData["UserID"] = userID.ToString();
+
+ return SendAndGetReply(sendData);
+ }
+
+ public List GetUserAccounts(UUID scopeID, string query)
+ {
+ Dictionary sendData = new Dictionary();
+ //sendData["SCOPEID"] = scopeID.ToString();
+ sendData["VERSIONMIN"] = ProtocolVersions.ClientProtocolVersionMin.ToString();
+ sendData["VERSIONMAX"] = ProtocolVersions.ClientProtocolVersionMax.ToString();
+ sendData["METHOD"] = "getagents";
+
+ sendData["ScopeID"] = scopeID.ToString();
+ sendData["query"] = query;
+
+ string reply = string.Empty;
+ string reqString = ServerUtils.BuildQueryString(sendData);
+ // m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString);
+ try
+ {
+ reply = SynchronousRestFormsRequester.MakeRequest("POST",
+ m_ServerURI + "/accounts",
+ reqString);
+ if (reply == null || (reply != null && reply == string.Empty))
+ {
+ m_log.DebugFormat("[ACCOUNT CONNECTOR]: GetUserAccounts received null or empty reply");
+ return null;
+ }
+ }
+ catch (Exception e)
+ {
+ m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting accounts server: {0}", e.Message);
+ }
+
+ List accounts = new List();
+
+ Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
+
+ if (replyData != null)
+ {
+ if (replyData.ContainsKey("result") && replyData.ContainsKey("result").ToString() == "null")
+ {
+ return accounts;
+ }
+
+ Dictionary.ValueCollection accountList = replyData.Values;
+ //m_log.DebugFormat("[ACCOUNTS CONNECTOR]: GetAgents returned {0} elements", pinfosList.Count);
+ foreach (object acc in accountList)
+ {
+ if (acc is Dictionary)
+ {
+ UserAccount pinfo = new UserAccount((Dictionary)acc);
+ accounts.Add(pinfo);
+ }
+ else
+ m_log.DebugFormat("[ACCOUNT CONNECTOR]: GetUserAccounts received invalid response type {0}",
+ acc.GetType());
+ }
+ }
+ else
+ m_log.DebugFormat("[ACCOUNTS CONNECTOR]: GetUserAccounts received null response");
+
+ return accounts;
+ }
+
+ public bool SetUserAccount(UserAccount data)
+ {
+ Dictionary sendData = new Dictionary();
+ //sendData["SCOPEID"] = scopeID.ToString();
+ sendData["VERSIONMIN"] = ProtocolVersions.ClientProtocolVersionMin.ToString();
+ sendData["VERSIONMAX"] = ProtocolVersions.ClientProtocolVersionMax.ToString();
+ sendData["METHOD"] = "setaccount";
+
+ sendData["account"] = data.ToKeyValuePairs();
+
+ return SendAndGetBoolReply(sendData);
+ }
+
+ public bool CreateUserAccount(UserAccount data)
+ {
+ Dictionary sendData = new Dictionary();
+ //sendData["SCOPEID"] = scopeID.ToString();
+ sendData["VERSIONMIN"] = ProtocolVersions.ClientProtocolVersionMin.ToString();
+ sendData["VERSIONMAX"] = ProtocolVersions.ClientProtocolVersionMax.ToString();
+ sendData["METHOD"] = "createaccount";
+
+ sendData["account"] = data.ToKeyValuePairs();
+
+ return SendAndGetBoolReply(sendData);
+ }
+
+ private UserAccount SendAndGetReply(Dictionary sendData)
+ {
+ string reply = string.Empty;
+ string reqString = ServerUtils.BuildQueryString(sendData);
+ // m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString);
+ try
+ {
+ reply = SynchronousRestFormsRequester.MakeRequest("POST",
+ m_ServerURI + "/accounts",
+ reqString);
+ if (reply == null || (reply != null && reply == string.Empty))
+ {
+ m_log.DebugFormat("[ACCOUNT CONNECTOR]: GetUserAccount received null or empty reply");
+ return null;
+ }
+ }
+ catch (Exception e)
+ {
+ m_log.DebugFormat("[ACCOUNT CONNECTOR]: Exception when contacting user account server: {0}", e.Message);
+ }
+
+ Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
+ UserAccount account = null;
+
+ if ((replyData != null) && replyData.ContainsKey("result") && (replyData["result"] != null))
+ {
+ if (replyData["result"] is Dictionary)
+ {
+ account = new UserAccount((Dictionary)replyData["result"]);
+ }
+ }
+
+ return account;
+
+ }
+
+ private bool SendAndGetBoolReply(Dictionary sendData)
+ {
+ string reqString = ServerUtils.BuildQueryString(sendData);
+ // m_log.DebugFormat("[ACCOUNTS CONNECTOR]: queryString = {0}", reqString);
+ try
+ {
+ string reply = SynchronousRestFormsRequester.MakeRequest("POST",
+ m_ServerURI + "/accounts",
+ reqString);
+ if (reply != string.Empty)
+ {
+ Dictionary replyData = ServerUtils.ParseXmlResponse(reply);
+
+ if (replyData.ContainsKey("result"))
+ {
+ if (replyData["result"].ToString().ToLower() == "success")
+ return true;
+ else
+ return false;
+ }
+ else
+ m_log.DebugFormat("[ACCOUNTS CONNECTOR]: Set or Create UserAccount reply data does not contain result field");
+
+ }
+ else
+ m_log.DebugFormat("[ACCOUNTS CONNECTOR]: Set or Create UserAccount received empty reply");
+ }
+ catch (Exception e)
+ {
+ m_log.DebugFormat("[ACCOUNTS CONNECTOR]: Exception when contacting user account server: {0}", e.Message);
+ }
+
+ return false;
+ }
+
+ }
+}
diff --git a/OpenSim/Services/Interfaces/IUserService.cs b/OpenSim/Services/Interfaces/IUserService.cs
index 1089c6c..e4e4bec 100644
--- a/OpenSim/Services/Interfaces/IUserService.cs
+++ b/OpenSim/Services/Interfaces/IUserService.cs
@@ -48,7 +48,7 @@ namespace OpenSim.Services.Interfaces
public UUID UserID;
public UUID ScopeID;
- public Dictionary ServiceURLs;
+ public Dictionary ServiceURLs;
public DateTime Created;
@@ -67,7 +67,7 @@ namespace OpenSim.Services.Interfaces
if (kvp.ContainsKey("Created"))
DateTime.TryParse(kvp["Created"].ToString(), out Created);
if (kvp.ContainsKey("ServiceURLs") && kvp["ServiceURLs"] != null && (kvp["ServiceURLs"] is Dictionary))
- ServiceURLs = (Dictionary)kvp["ServiceURLs"];
+ ServiceURLs = (Dictionary)kvp["ServiceURLs"];
}
public Dictionary ToKeyValuePairs()
--
cgit v1.1