diff options
Diffstat (limited to 'OpenSim/Services')
4 files changed, 175 insertions, 53 deletions
diff --git a/OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs b/OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs index dcf090e..f6dd085 100644 --- a/OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs +++ b/OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs | |||
@@ -32,6 +32,7 @@ using Nini.Config; | |||
32 | using System.Reflection; | 32 | using System.Reflection; |
33 | using OpenSim.Services.Base; | 33 | using OpenSim.Services.Base; |
34 | using OpenSim.Data; | 34 | using OpenSim.Data; |
35 | using OpenSim.Framework; | ||
35 | 36 | ||
36 | namespace OpenSim.Services.AuthenticationService | 37 | namespace OpenSim.Services.AuthenticationService |
37 | { | 38 | { |
@@ -43,9 +44,9 @@ namespace OpenSim.Services.AuthenticationService | |||
43 | // | 44 | // |
44 | public class AuthenticationServiceBase : ServiceBase | 45 | public class AuthenticationServiceBase : ServiceBase |
45 | { | 46 | { |
46 | // private static readonly ILog m_log = | 47 | private static readonly ILog m_log = |
47 | // LogManager.GetLogger( | 48 | LogManager.GetLogger( |
48 | // MethodBase.GetCurrentMethod().DeclaringType); | 49 | MethodBase.GetCurrentMethod().DeclaringType); |
49 | 50 | ||
50 | protected IAuthenticationData m_Database; | 51 | protected IAuthenticationData m_Database; |
51 | 52 | ||
@@ -100,6 +101,27 @@ namespace OpenSim.Services.AuthenticationService | |||
100 | return m_Database.CheckToken(principalID, token, 0); | 101 | return m_Database.CheckToken(principalID, token, 0); |
101 | } | 102 | } |
102 | 103 | ||
104 | public virtual bool SetPassword(UUID principalID, string password) | ||
105 | { | ||
106 | string passwordSalt = Util.Md5Hash(UUID.Random().ToString()); | ||
107 | string md5PasswdHash = Util.Md5Hash(Util.Md5Hash(password) + ":" + passwordSalt); | ||
108 | |||
109 | AuthenticationData auth = new AuthenticationData(); | ||
110 | auth.PrincipalID = principalID; | ||
111 | auth.Data = new System.Collections.Generic.Dictionary<string, object>(); | ||
112 | auth.Data["passwordHash"] = md5PasswdHash; | ||
113 | auth.Data["passwordSalt"] = passwordSalt; | ||
114 | auth.Data["webLoginKey"] = UUID.Zero.ToString(); | ||
115 | if (!m_Database.Store(auth)) | ||
116 | { | ||
117 | m_log.DebugFormat("[AUTHENTICATION DB]: Failed to store authentication data"); | ||
118 | return false; | ||
119 | } | ||
120 | |||
121 | m_log.InfoFormat("[AUTHENTICATION DB]: Set password for principalID {0}", principalID); | ||
122 | return true; | ||
123 | } | ||
124 | |||
103 | protected string GetToken(UUID principalID, int lifetime) | 125 | protected string GetToken(UUID principalID, int lifetime) |
104 | { | 126 | { |
105 | UUID token = UUID.Random(); | 127 | UUID token = UUID.Random(); |
@@ -109,5 +131,6 @@ namespace OpenSim.Services.AuthenticationService | |||
109 | 131 | ||
110 | return String.Empty; | 132 | return String.Empty; |
111 | } | 133 | } |
134 | |||
112 | } | 135 | } |
113 | } | 136 | } |
diff --git a/OpenSim/Services/Connectors/Authentication/AuthenticationServiceConnector.cs b/OpenSim/Services/Connectors/Authentication/AuthenticationServiceConnector.cs index 1250658..f36fe5b 100644 --- a/OpenSim/Services/Connectors/Authentication/AuthenticationServiceConnector.cs +++ b/OpenSim/Services/Connectors/Authentication/AuthenticationServiceConnector.cs | |||
@@ -146,5 +146,11 @@ namespace OpenSim.Services.Connectors | |||
146 | 146 | ||
147 | return true; | 147 | return true; |
148 | } | 148 | } |
149 | |||
150 | public bool SetPassword(UUID principalID, string passwd) | ||
151 | { | ||
152 | // nope, we don't do this | ||
153 | return false; | ||
154 | } | ||
149 | } | 155 | } |
150 | } | 156 | } |
diff --git a/OpenSim/Services/Interfaces/IAuthenticationService.cs b/OpenSim/Services/Interfaces/IAuthenticationService.cs index 9225773..9de261b 100644 --- a/OpenSim/Services/Interfaces/IAuthenticationService.cs +++ b/OpenSim/Services/Interfaces/IAuthenticationService.cs | |||
@@ -66,6 +66,17 @@ namespace OpenSim.Services.Interfaces | |||
66 | bool Release(UUID principalID, string token); | 66 | bool Release(UUID principalID, string token); |
67 | 67 | ||
68 | ////////////////////////////////////////////////////// | 68 | ////////////////////////////////////////////////////// |
69 | // SetPassword for a principal | ||
70 | // | ||
71 | // This method exists for the service, but may or may not | ||
72 | // be served remotely. That is, the authentication | ||
73 | // handlers may not include one handler for this, | ||
74 | // because it's a bit risky. Such handlers require | ||
75 | // authentication/authorization. | ||
76 | // | ||
77 | bool SetPassword(UUID principalID, string passwd); | ||
78 | |||
79 | ////////////////////////////////////////////////////// | ||
69 | // Grid | 80 | // Grid |
70 | // | 81 | // |
71 | // We no longer need a shared secret between grid | 82 | // We no longer need a shared secret between grid |
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 | } |