diff options
Merge branch 'presence-refactor' of melanie@opensimulator.org:/var/git/opensim into presence-refactor
Diffstat (limited to 'OpenSim/Services/UserAccountService/UserAccountService.cs')
-rw-r--r-- | OpenSim/Services/UserAccountService/UserAccountService.cs | 182 |
1 files changed, 132 insertions, 50 deletions
diff --git a/OpenSim/Services/UserAccountService/UserAccountService.cs b/OpenSim/Services/UserAccountService/UserAccountService.cs index dacfa51..90077d8 100644 --- a/OpenSim/Services/UserAccountService/UserAccountService.cs +++ b/OpenSim/Services/UserAccountService/UserAccountService.cs | |||
@@ -26,25 +26,62 @@ | |||
26 | */ | 26 | */ |
27 | 27 | ||
28 | using System; | 28 | using System; |
29 | using System.Collections.Generic; | ||
29 | using System.Reflection; | 30 | using System.Reflection; |
30 | using Nini.Config; | 31 | using Nini.Config; |
31 | using OpenSim.Data; | 32 | using OpenSim.Data; |
32 | using OpenSim.Framework.Console; | ||
33 | using OpenSim.Services.Interfaces; | 33 | using OpenSim.Services.Interfaces; |
34 | using System.Collections.Generic; | 34 | using OpenSim.Framework.Console; |
35 | using GridRegion = OpenSim.Services.Interfaces.GridRegion; | ||
36 | |||
35 | using OpenMetaverse; | 37 | using OpenMetaverse; |
38 | using log4net; | ||
36 | 39 | ||
37 | namespace OpenSim.Services.UserAccountService | 40 | namespace OpenSim.Services.UserAccountService |
38 | { | 41 | { |
39 | public class UserAccountService : UserAccountServiceBase, IUserAccountService | 42 | public class UserAccountService : UserAccountServiceBase, IUserAccountService |
40 | { | 43 | { |
44 | private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); | ||
45 | private static UserAccountService m_RootInstance; | ||
46 | |||
47 | protected IGridService m_GridService; | ||
48 | protected IAuthenticationService m_AuthenticationService; | ||
49 | protected IPresenceService m_PresenceService; | ||
50 | |||
41 | public UserAccountService(IConfigSource config) | 51 | public UserAccountService(IConfigSource config) |
42 | : base(config) | 52 | : base(config) |
43 | { | 53 | { |
44 | MainConsole.Instance.Commands.AddCommand("UserService", false, | 54 | IConfig userConfig = config.Configs["UserAccountService"]; |
45 | "create user", | 55 | if (userConfig == null) |
46 | "create user [<first> [<last> [<pass> [<x> <y> [<email>]]]]]", | 56 | throw new Exception("No UserAccountService configuration"); |
47 | "Create a new user", HandleCreateUser); | 57 | |
58 | // In case there are several instances of this class in the same process, | ||
59 | // the console commands are only registered for the root instance | ||
60 | if (m_RootInstance == null) | ||
61 | { | ||
62 | m_RootInstance = this; | ||
63 | string gridServiceDll = userConfig.GetString("GridService", string.Empty); | ||
64 | if (gridServiceDll != string.Empty) | ||
65 | m_GridService = LoadPlugin<IGridService>(gridServiceDll, new Object[] { config }); | ||
66 | |||
67 | string authServiceDll = userConfig.GetString("AuthenticationService", string.Empty); | ||
68 | if (authServiceDll != string.Empty) | ||
69 | m_AuthenticationService = LoadPlugin<IAuthenticationService>(authServiceDll, new Object[] { config }); | ||
70 | |||
71 | string presenceServiceDll = userConfig.GetString("PresenceService", string.Empty); | ||
72 | if (presenceServiceDll != string.Empty) | ||
73 | m_PresenceService = LoadPlugin<IPresenceService>(presenceServiceDll, new Object[] { config }); | ||
74 | |||
75 | MainConsole.Instance.Commands.AddCommand("UserService", false, | ||
76 | "create user", | ||
77 | "create user [<first> [<last> [<pass> [<email>]]]]", | ||
78 | "Create a new user", HandleCreateUser); | ||
79 | MainConsole.Instance.Commands.AddCommand("UserService", false, "reset user password", | ||
80 | "reset user password [<first> [<last> [<password>]]]", | ||
81 | "Reset a user password", HandleResetUserPassword); | ||
82 | |||
83 | } | ||
84 | |||
48 | } | 85 | } |
49 | 86 | ||
50 | #region IUserAccountService | 87 | #region IUserAccountService |
@@ -202,52 +239,97 @@ namespace OpenSim.Services.UserAccountService | |||
202 | string lastName; | 239 | string lastName; |
203 | string password; | 240 | string password; |
204 | string email; | 241 | string email; |
205 | uint regX = 1000; | 242 | |
206 | uint regY = 1000; | 243 | if (cmdparams.Length < 3) |
207 | 244 | firstName = MainConsole.Instance.CmdPrompt("First name", "Default"); | |
208 | // IConfig standalone; | 245 | else firstName = cmdparams[2]; |
209 | // if ((standalone = m_config.Source.Configs["StandAlone"]) != null) | 246 | |
210 | // { | 247 | if (cmdparams.Length < 4) |
211 | // regX = (uint)standalone.GetInt("default_location_x", (int)regX); | 248 | lastName = MainConsole.Instance.CmdPrompt("Last name", "User"); |
212 | // regY = (uint)standalone.GetInt("default_location_y", (int)regY); | 249 | else lastName = cmdparams[3]; |
213 | // } | 250 | |
214 | 251 | if (cmdparams.Length < 5) | |
215 | 252 | password = MainConsole.Instance.PasswdPrompt("Password"); | |
216 | // if (cmdparams.Length < 3) | 253 | else password = cmdparams[4]; |
217 | // firstName = MainConsole.Instance.CmdPrompt("First name", "Default"); | 254 | |
218 | // else firstName = cmdparams[2]; | 255 | if (cmdparams.Length < 6) |
219 | 256 | email = MainConsole.Instance.CmdPrompt("Email", ""); | |
220 | // if (cmdparams.Length < 4) | 257 | else email = cmdparams[5]; |
221 | // lastName = MainConsole.Instance.CmdPrompt("Last name", "User"); | 258 | |
222 | // else lastName = cmdparams[3]; | 259 | UserAccount account = GetUserAccount(UUID.Zero, firstName, lastName); |
223 | 260 | if (null == account) | |
224 | // if (cmdparams.Length < 5) | 261 | { |
225 | // password = MainConsole.Instance.PasswdPrompt("Password"); | 262 | account = new UserAccount(UUID.Zero, firstName, lastName, email); |
226 | // else password = cmdparams[4]; | 263 | if (StoreUserAccount(account)) |
227 | 264 | { | |
228 | // if (cmdparams.Length < 6) | 265 | bool success = false; |
229 | // regX = Convert.ToUInt32(MainConsole.Instance.CmdPrompt("Start Region X", regX.ToString())); | 266 | if (m_AuthenticationService != null) |
230 | // else regX = Convert.ToUInt32(cmdparams[5]); | 267 | success = m_AuthenticationService.SetPassword(account.PrincipalID, password); |
231 | 268 | if (!success) | |
232 | // if (cmdparams.Length < 7) | 269 | m_log.WarnFormat("[USER ACCOUNT SERVICE]: Unable to set password for account {0} {1}.", |
233 | // regY = Convert.ToUInt32(MainConsole.Instance.CmdPrompt("Start Region Y", regY.ToString())); | 270 | firstName, lastName); |
234 | // else regY = Convert.ToUInt32(cmdparams[6]); | 271 | |
235 | 272 | GridRegion home = null; | |
236 | // if (cmdparams.Length < 8) | 273 | if (m_GridService != null) |
237 | // email = MainConsole.Instance.CmdPrompt("Email", ""); | 274 | { |
238 | // else email = cmdparams[7]; | 275 | List<GridRegion> defaultRegions = m_GridService.GetDefaultRegions(UUID.Zero); |
239 | 276 | if (defaultRegions != null && defaultRegions.Count >= 1) | |
240 | // if (null == m_commsManager.UserProfileCacheService.GetUserDetails(firstName, lastName)) | 277 | home = defaultRegions[0]; |
241 | // { | 278 | |
242 | // m_commsManager.UserAdminService.AddUser(firstName, lastName, password, email, regX, regY); | 279 | if (m_PresenceService != null && home != null) |
243 | // } | 280 | m_PresenceService.SetHomeLocation(account.PrincipalID.ToString(), home.RegionID, new Vector3(128, 128, 0), new Vector3(0, 1, 0)); |
244 | // else | 281 | else |
245 | // { | 282 | m_log.WarnFormat("[USER ACCOUNT SERVICE]: Unable to set home for account {0} {1}.", |
246 | // m_log.ErrorFormat("[CONSOLE]: A user with the name {0} {1} already exists!", firstName, lastName); | 283 | firstName, lastName); |
247 | // } | 284 | |
248 | //} | 285 | } |
286 | else | ||
287 | m_log.WarnFormat("[USER ACCOUNT SERVICE]: Unable to retrieve home region for account {0} {1}.", | ||
288 | firstName, lastName); | ||
289 | |||
290 | m_log.InfoFormat("[USER ACCOUNT SERVICE]: Account {0} {1} created successfully", firstName, lastName); | ||
291 | } | ||
292 | } | ||
293 | else | ||
294 | { | ||
295 | m_log.ErrorFormat("[USER ACCOUNT SERVICE]: A user with the name {0} {1} already exists!", firstName, lastName); | ||
296 | } | ||
249 | 297 | ||
250 | } | 298 | } |
299 | |||
300 | protected void HandleResetUserPassword(string module, string[] cmdparams) | ||
301 | { | ||
302 | string firstName; | ||
303 | string lastName; | ||
304 | string newPassword; | ||
305 | |||
306 | if (cmdparams.Length < 4) | ||
307 | firstName = MainConsole.Instance.CmdPrompt("First name"); | ||
308 | else firstName = cmdparams[3]; | ||
309 | |||
310 | if (cmdparams.Length < 5) | ||
311 | lastName = MainConsole.Instance.CmdPrompt("Last name"); | ||
312 | else lastName = cmdparams[4]; | ||
313 | |||
314 | if (cmdparams.Length < 6) | ||
315 | newPassword = MainConsole.Instance.PasswdPrompt("New password"); | ||
316 | else newPassword = cmdparams[5]; | ||
317 | |||
318 | UserAccount account = GetUserAccount(UUID.Zero, firstName, lastName); | ||
319 | if (account == null) | ||
320 | m_log.ErrorFormat("[USER ACCOUNT SERVICE]: No such user"); | ||
321 | |||
322 | bool success = false; | ||
323 | if (m_AuthenticationService != null) | ||
324 | success = m_AuthenticationService.SetPassword(account.PrincipalID, newPassword); | ||
325 | if (!success) | ||
326 | m_log.ErrorFormat("[USER ACCOUNT SERVICE]: Unable to reset password for account {0} {1}.", | ||
327 | firstName, lastName); | ||
328 | else | ||
329 | m_log.InfoFormat("[USER ACCOUNT SERVICE]: Password reset for user {0} {1}", firstName, lastName); | ||
330 | } | ||
331 | |||
251 | #endregion | 332 | #endregion |
333 | |||
252 | } | 334 | } |
253 | } | 335 | } |