diff options
Diffstat (limited to 'OpenSim/Services')
4 files changed, 138 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..8f78813 100644 --- a/OpenSim/Services/UserAccountService/UserAccountService.cs +++ b/OpenSim/Services/UserAccountService/UserAccountService.cs | |||
@@ -26,25 +26,58 @@ | |||
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 | } | ||
80 | |||
48 | } | 81 | } |
49 | 82 | ||
50 | #region IUserAccountService | 83 | #region IUserAccountService |
@@ -202,52 +235,64 @@ namespace OpenSim.Services.UserAccountService | |||
202 | string lastName; | 235 | string lastName; |
203 | string password; | 236 | string password; |
204 | string email; | 237 | string email; |
205 | uint regX = 1000; | 238 | |
206 | uint regY = 1000; | 239 | if (cmdparams.Length < 3) |
207 | 240 | firstName = MainConsole.Instance.CmdPrompt("First name", "Default"); | |
208 | // IConfig standalone; | 241 | else firstName = cmdparams[2]; |
209 | // if ((standalone = m_config.Source.Configs["StandAlone"]) != null) | 242 | |
210 | // { | 243 | if (cmdparams.Length < 4) |
211 | // regX = (uint)standalone.GetInt("default_location_x", (int)regX); | 244 | lastName = MainConsole.Instance.CmdPrompt("Last name", "User"); |
212 | // regY = (uint)standalone.GetInt("default_location_y", (int)regY); | 245 | else lastName = cmdparams[3]; |
213 | // } | 246 | |
214 | 247 | if (cmdparams.Length < 5) | |
215 | 248 | password = MainConsole.Instance.PasswdPrompt("Password"); | |
216 | // if (cmdparams.Length < 3) | 249 | else password = cmdparams[4]; |
217 | // firstName = MainConsole.Instance.CmdPrompt("First name", "Default"); | 250 | |
218 | // else firstName = cmdparams[2]; | 251 | if (cmdparams.Length < 6) |
219 | 252 | email = MainConsole.Instance.CmdPrompt("Email", ""); | |
220 | // if (cmdparams.Length < 4) | 253 | else email = cmdparams[5]; |
221 | // lastName = MainConsole.Instance.CmdPrompt("Last name", "User"); | 254 | |
222 | // else lastName = cmdparams[3]; | 255 | UserAccount account = GetUserAccount(UUID.Zero, firstName, lastName); |
223 | 256 | if (null == account) | |
224 | // if (cmdparams.Length < 5) | 257 | { |
225 | // password = MainConsole.Instance.PasswdPrompt("Password"); | 258 | account = new UserAccount(UUID.Zero, firstName, lastName, email); |
226 | // else password = cmdparams[4]; | 259 | if (StoreUserAccount(account)) |
227 | 260 | { | |
228 | // if (cmdparams.Length < 6) | 261 | bool success = false; |
229 | // regX = Convert.ToUInt32(MainConsole.Instance.CmdPrompt("Start Region X", regX.ToString())); | 262 | if (m_AuthenticationService != null) |
230 | // else regX = Convert.ToUInt32(cmdparams[5]); | 263 | success = m_AuthenticationService.SetPassword(account.PrincipalID, password); |
231 | 264 | if (!success) | |
232 | // if (cmdparams.Length < 7) | 265 | 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())); | 266 | firstName, lastName); |
234 | // else regY = Convert.ToUInt32(cmdparams[6]); | 267 | |
235 | 268 | GridRegion home = null; | |
236 | // if (cmdparams.Length < 8) | 269 | if (m_GridService != null) |
237 | // email = MainConsole.Instance.CmdPrompt("Email", ""); | 270 | { |
238 | // else email = cmdparams[7]; | 271 | List<GridRegion> defaultRegions = m_GridService.GetDefaultRegions(UUID.Zero); |
239 | 272 | if (defaultRegions != null && defaultRegions.Count >= 1) | |
240 | // if (null == m_commsManager.UserProfileCacheService.GetUserDetails(firstName, lastName)) | 273 | home = defaultRegions[0]; |
241 | // { | 274 | |
242 | // m_commsManager.UserAdminService.AddUser(firstName, lastName, password, email, regX, regY); | 275 | if (m_PresenceService != null && home != null) |
243 | // } | 276 | m_PresenceService.SetHomeLocation(account.PrincipalID.ToString(), home.RegionID, new Vector3(128, 128, 0), new Vector3(0, 1, 0)); |
244 | // else | 277 | else |
245 | // { | 278 | 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); | 279 | firstName, lastName); |
247 | // } | 280 | |
248 | //} | 281 | } |
282 | else | ||
283 | m_log.WarnFormat("[USER ACCOUNT SERVICE]: Unable to retrieve home region for account {0} {1}.", | ||
284 | firstName, lastName); | ||
285 | |||
286 | m_log.InfoFormat("[USER ACCOUNT SERVICE]: Account {0} {1} created successfully", firstName, lastName); | ||
287 | } | ||
288 | } | ||
289 | else | ||
290 | { | ||
291 | m_log.ErrorFormat("[USER ACCOUNT SERVICE]: A user with the name {0} {1} already exists!", firstName, lastName); | ||
292 | } | ||
249 | 293 | ||
250 | } | 294 | } |
251 | #endregion | 295 | #endregion |
296 | |||
252 | } | 297 | } |
253 | } | 298 | } |