aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to 'OpenSim')
-rw-r--r--OpenSim/Region/CoreModules/Framework/UserManagement/HGUserManagementModule.cs119
-rw-r--r--OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs102
-rw-r--r--OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml1
3 files changed, 182 insertions, 40 deletions
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/HGUserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/HGUserManagementModule.cs
new file mode 100644
index 0000000..6543bf2
--- /dev/null
+++ b/OpenSim/Region/CoreModules/Framework/UserManagement/HGUserManagementModule.cs
@@ -0,0 +1,119 @@
1/*
2 * Copyright (c) Contributors, http://opensimulator.org/
3 * See CONTRIBUTORS.TXT for a full list of copyright holders.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions are met:
7 * * Redistributions of source code must retain the above copyright
8 * notice, this list of conditions and the following disclaimer.
9 * * Redistributions in binary form must reproduce the above copyright
10 * notice, this list of conditions and the following disclaimer in the
11 * documentation and/or other materials provided with the distribution.
12 * * Neither the name of the OpenSimulator Project nor the
13 * names of its contributors may be used to endorse or promote products
14 * derived from this software without specific prior written permission.
15 *
16 * THIS SOFTWARE IS PROVIDED BY THE DEVELOPERS ``AS IS'' AND ANY
17 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
18 * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
19 * DISCLAIMED. IN NO EVENT SHALL THE CONTRIBUTORS BE LIABLE FOR ANY
20 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
21 * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
22 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
23 * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
24 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
25 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
26 */
27using System;
28using System.Collections.Generic;
29using System.IO;
30using System.Reflection;
31
32using OpenSim.Framework;
33using OpenSim.Framework.Console;
34using OpenSim.Region.Framework;
35using OpenSim.Region.Framework.Interfaces;
36using OpenSim.Region.Framework.Scenes;
37using OpenSim.Services.Interfaces;
38using OpenSim.Services.Connectors.Hypergrid;
39
40using OpenMetaverse;
41using OpenMetaverse.Packets;
42using log4net;
43using Nini.Config;
44
45namespace OpenSim.Region.CoreModules.Framework.UserManagement
46{
47 public class HGUserManagementModule : UserManagementModule, ISharedRegionModule, IUserManagement
48 {
49 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
50
51
52 #region ISharedRegionModule
53
54 public new void Initialise(IConfigSource config)
55 {
56 string umanmod = config.Configs["Modules"].GetString("UserManagementModule", base.Name);
57 if (umanmod == Name)
58 {
59 m_Enabled = true;
60 RegisterConsoleCmds();
61 m_log.DebugFormat("[USER MANAGEMENT MODULE]: {0} is enabled", Name);
62 }
63 }
64
65 public override string Name
66 {
67 get { return "HGUserManagementModule"; }
68 }
69
70 #endregion ISharedRegionModule
71
72 protected override void AddAdditionalUsers(UUID avatarID, string query, List<UserData> users)
73 {
74 string[] words = query.Split(new char[] { ' ' });
75
76 for (int i = 0; i < words.Length; i++)
77 {
78 if (words[i].Length < 3)
79 {
80 if (i != words.Length - 1)
81 Array.Copy(words, i + 1, words, i, words.Length - i - 1);
82 Array.Resize(ref words, words.Length - 1);
83 }
84 }
85
86 if (words.Length == 0 || words.Length > 2)
87 return;
88
89 if (words.Length == 2) // First.Last @foo.com, maybe?
90 {
91 bool found = false;
92 foreach (UserData d in m_UserCache.Values)
93 {
94 if (d.LastName.StartsWith("@") && (d.FirstName.Equals(words[0]) || d.LastName.Equals(words[1])))
95 {
96 users.Add(d);
97 found = true;
98 break;
99 }
100 }
101 if (!found) // This is it! Let's ask the other world
102 {
103 // TODO
104 //UserAgentServiceConnector uasConn = new UserAgentServiceConnector(words[0]);
105 //uasConn.GetUserInfo(...);
106 }
107 }
108 else
109 {
110 foreach (UserData d in m_UserCache.Values)
111 {
112 if (d.LastName.StartsWith("@") && (d.FirstName.StartsWith(query) || d.LastName.StartsWith(query)))
113 users.Add(d);
114 }
115 }
116 }
117
118 }
119} \ No newline at end of file
diff --git a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
index 39e0661..23ef0fc 100644
--- a/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
+++ b/OpenSim/Region/CoreModules/Framework/UserManagement/UserManagementModule.cs
@@ -44,7 +44,7 @@ using Nini.Config;
44 44
45namespace OpenSim.Region.CoreModules.Framework.UserManagement 45namespace OpenSim.Region.CoreModules.Framework.UserManagement
46{ 46{
47 class UserData 47 public class UserData
48 { 48 {
49 public UUID Id { get; set; } 49 public UUID Id { get; set; }
50 public string FirstName { get; set; } 50 public string FirstName { get; set; }
@@ -57,36 +57,23 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
57 { 57 {
58 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); 58 private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType);
59 59
60 private List<Scene> m_Scenes = new List<Scene>(); 60 protected bool m_Enabled;
61 protected List<Scene> m_Scenes = new List<Scene>();
61 62
62 // The cache 63 // The cache
63 Dictionary<UUID, UserData> m_UserCache = new Dictionary<UUID, UserData>(); 64 protected Dictionary<UUID, UserData> m_UserCache = new Dictionary<UUID, UserData>();
64 65
65 #region ISharedRegionModule 66 #region ISharedRegionModule
66 67
67 public void Initialise(IConfigSource config) 68 public void Initialise(IConfigSource config)
68 { 69 {
69 //m_Enabled = config.Configs["Modules"].GetBoolean("LibraryModule", m_Enabled); 70 string umanmod = config.Configs["Modules"].GetString("UserManagementModule", Name);
70 //if (m_Enabled) 71 if (umanmod == Name)
71 //{ 72 {
72 // IConfig libConfig = config.Configs["LibraryService"]; 73 m_Enabled = true;
73 // if (libConfig != null) 74 RegisterConsoleCmds();
74 // { 75 m_log.DebugFormat("[USER MANAGEMENT MODULE]: {0} is enabled", Name);
75 // string dllName = libConfig.GetString("LocalServiceModule", string.Empty); 76 }
76 // m_log.Debug("[LIBRARY MODULE]: Library service dll is " + dllName);
77 // if (dllName != string.Empty)
78 // {
79 // Object[] args = new Object[] { config };
80 // m_Library = ServerUtils.LoadPlugin<ILibraryService>(dllName, args);
81 // }
82 // }
83 //}
84 MainConsole.Instance.Commands.AddCommand("Users", true,
85 "show names",
86 "show names",
87 "Show the bindings between user UUIDs and user names",
88 String.Empty,
89 HandleShowUsers);
90 } 77 }
91 78
92 public bool IsSharedModule 79 public bool IsSharedModule
@@ -94,9 +81,9 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
94 get { return true; } 81 get { return true; }
95 } 82 }
96 83
97 public string Name 84 public virtual string Name
98 { 85 {
99 get { return "UserManagement Module"; } 86 get { return "BasicUserManagementModule"; }
100 } 87 }
101 88
102 public Type ReplaceableInterface 89 public Type ReplaceableInterface
@@ -106,17 +93,23 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
106 93
107 public void AddRegion(Scene scene) 94 public void AddRegion(Scene scene)
108 { 95 {
109 m_Scenes.Add(scene); 96 if (m_Enabled)
97 {
98 m_Scenes.Add(scene);
110 99
111 scene.RegisterModuleInterface<IUserManagement>(this); 100 scene.RegisterModuleInterface<IUserManagement>(this);
112 scene.EventManager.OnNewClient += new EventManager.OnNewClientDelegate(EventManager_OnNewClient); 101 scene.EventManager.OnNewClient += new EventManager.OnNewClientDelegate(EventManager_OnNewClient);
113 scene.EventManager.OnPrimsLoaded += new EventManager.PrimsLoaded(EventManager_OnPrimsLoaded); 102 scene.EventManager.OnPrimsLoaded += new EventManager.PrimsLoaded(EventManager_OnPrimsLoaded);
103 }
114 } 104 }
115 105
116 public void RemoveRegion(Scene scene) 106 public void RemoveRegion(Scene scene)
117 { 107 {
118 scene.UnregisterModuleInterface<IUserManagement>(this); 108 if (m_Enabled)
119 m_Scenes.Remove(scene); 109 {
110 scene.UnregisterModuleInterface<IUserManagement>(this);
111 m_Scenes.Remove(scene);
112 }
120 } 113 }
121 114
122 public void RegionLoaded(Scene s) 115 public void RegionLoaded(Scene s)
@@ -183,16 +176,31 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
183 { 176 {
184 //EventManager.TriggerAvatarPickerRequest(); 177 //EventManager.TriggerAvatarPickerRequest();
185 178
186 List<UserAccount> accounts = m_Scenes[0].UserAccountService.GetUserAccounts(m_Scenes[0].RegionInfo.ScopeID, query); 179 m_log.DebugFormat("[USER MANAGEMENT MODULE]: HandleAvatarPickerRequest for {0}", query);
187 180
188 if (accounts == null) 181 List<UserAccount> accs = m_Scenes[0].UserAccountService.GetUserAccounts(m_Scenes[0].RegionInfo.ScopeID, query);
189 return; 182
183 List<UserData> users = new List<UserData>();
184 if (accs != null)
185 {
186 m_log.DebugFormat("[USER MANAGEMENT MODULE]: Found {0} users", accs.Count);
187 foreach (UserAccount acc in accs)
188 {
189 UserData ud = new UserData();
190 ud.FirstName = acc.FirstName;
191 ud.LastName = acc.LastName;
192 ud.Id = acc.PrincipalID;
193 users.Add(ud);
194 }
195 }
196
197 AddAdditionalUsers(avatarID, query, users);
190 198
191 AvatarPickerReplyPacket replyPacket = (AvatarPickerReplyPacket)PacketPool.Instance.GetPacket(PacketType.AvatarPickerReply); 199 AvatarPickerReplyPacket replyPacket = (AvatarPickerReplyPacket)PacketPool.Instance.GetPacket(PacketType.AvatarPickerReply);
192 // TODO: don't create new blocks if recycling an old packet 200 // TODO: don't create new blocks if recycling an old packet
193 201
194 AvatarPickerReplyPacket.DataBlock[] searchData = 202 AvatarPickerReplyPacket.DataBlock[] searchData =
195 new AvatarPickerReplyPacket.DataBlock[accounts.Count]; 203 new AvatarPickerReplyPacket.DataBlock[users.Count];
196 AvatarPickerReplyPacket.AgentDataBlock agentData = new AvatarPickerReplyPacket.AgentDataBlock(); 204 AvatarPickerReplyPacket.AgentDataBlock agentData = new AvatarPickerReplyPacket.AgentDataBlock();
197 205
198 agentData.AgentID = avatarID; 206 agentData.AgentID = avatarID;
@@ -201,16 +209,16 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
201 //byte[] bytes = new byte[AvatarResponses.Count*32]; 209 //byte[] bytes = new byte[AvatarResponses.Count*32];
202 210
203 int i = 0; 211 int i = 0;
204 foreach (UserAccount item in accounts) 212 foreach (UserData item in users)
205 { 213 {
206 UUID translatedIDtem = item.PrincipalID; 214 UUID translatedIDtem = item.Id;
207 searchData[i] = new AvatarPickerReplyPacket.DataBlock(); 215 searchData[i] = new AvatarPickerReplyPacket.DataBlock();
208 searchData[i].AvatarID = translatedIDtem; 216 searchData[i].AvatarID = translatedIDtem;
209 searchData[i].FirstName = Utils.StringToBytes((string)item.FirstName); 217 searchData[i].FirstName = Utils.StringToBytes((string)item.FirstName);
210 searchData[i].LastName = Utils.StringToBytes((string)item.LastName); 218 searchData[i].LastName = Utils.StringToBytes((string)item.LastName);
211 i++; 219 i++;
212 } 220 }
213 if (accounts.Count == 0) 221 if (users.Count == 0)
214 { 222 {
215 searchData = new AvatarPickerReplyPacket.DataBlock[0]; 223 searchData = new AvatarPickerReplyPacket.DataBlock[0];
216 } 224 }
@@ -232,6 +240,10 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
232 client.SendAvatarPickerReply(agent_data, data_args); 240 client.SendAvatarPickerReply(agent_data, data_args);
233 } 241 }
234 242
243 protected virtual void AddAdditionalUsers(UUID avatarID, string query, List<UserData> users)
244 {
245 }
246
235 #endregion Event Handlers 247 #endregion Event Handlers
236 248
237 private void CacheCreators(SceneObjectGroup sog) 249 private void CacheCreators(SceneObjectGroup sog)
@@ -487,13 +499,23 @@ namespace OpenSim.Region.CoreModules.Framework.UserManagement
487 499
488 #endregion IUserManagement 500 #endregion IUserManagement
489 501
502 protected void RegisterConsoleCmds()
503 {
504 MainConsole.Instance.Commands.AddCommand("Users", true,
505 "show names",
506 "show names",
507 "Show the bindings between user UUIDs and user names",
508 String.Empty,
509 HandleShowUsers);
510 }
511
490 private void HandleShowUsers(string module, string[] cmd) 512 private void HandleShowUsers(string module, string[] cmd)
491 { 513 {
492 lock (m_UserCache) 514 lock (m_UserCache)
493 { 515 {
494 if (m_UserCache.Count == 0) 516 if (m_UserCache.Count == 0)
495 { 517 {
496 MainConsole.Instance.Output("No users not found"); 518 MainConsole.Instance.Output("No users found");
497 return; 519 return;
498 } 520 }
499 521
diff --git a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
index e22fd38..dc6efed 100644
--- a/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
+++ b/OpenSim/Region/CoreModules/Resources/CoreModulePlugin.addin.xml
@@ -9,6 +9,7 @@
9 9
10 <Extension path = "/OpenSim/RegionModules"> 10 <Extension path = "/OpenSim/RegionModules">
11 <RegionModule id="UserManagementModule" type="OpenSim.Region.CoreModules.Framework.UserManagement.UserManagementModule" /> 11 <RegionModule id="UserManagementModule" type="OpenSim.Region.CoreModules.Framework.UserManagement.UserManagementModule" />
12 <RegionModule id="HGUserManagementModule" type="OpenSim.Region.CoreModules.Framework.UserManagement.HGUserManagementModule" />
12 <RegionModule id="EntityTransferModule" type="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule" /> 13 <RegionModule id="EntityTransferModule" type="OpenSim.Region.CoreModules.Framework.EntityTransfer.EntityTransferModule" />
13 <RegionModule id="HGEntityTransferModule" type="OpenSim.Region.CoreModules.Framework.EntityTransfer.HGEntityTransferModule" /> 14 <RegionModule id="HGEntityTransferModule" type="OpenSim.Region.CoreModules.Framework.EntityTransfer.HGEntityTransferModule" />
14 <RegionModule id="InventoryAccessModule" type="OpenSim.Region.CoreModules.Framework.InventoryAccess.BasicInventoryAccessModule" /> 15 <RegionModule id="InventoryAccessModule" type="OpenSim.Region.CoreModules.Framework.InventoryAccess.BasicInventoryAccessModule" />