aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/OpenSim
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--OpenSim/Region/Application/OpenSim.cs74
-rw-r--r--OpenSim/Region/CoreModules/ServiceConnectorsOut/Authentication/LocalAuthenticationServiceConnector.cs5
-rw-r--r--OpenSim/Services/AuthenticationService/AuthenticationServiceBase.cs29
-rw-r--r--OpenSim/Services/Connectors/Authentication/AuthenticationServiceConnector.cs6
-rw-r--r--OpenSim/Services/Interfaces/IAuthenticationService.cs11
-rw-r--r--OpenSim/Services/UserAccountService/UserAccountService.cs145
6 files changed, 143 insertions, 127 deletions
diff --git a/OpenSim/Region/Application/OpenSim.cs b/OpenSim/Region/Application/OpenSim.cs
index 82b2fd4..787d025 100644
--- a/OpenSim/Region/Application/OpenSim.cs
+++ b/OpenSim/Region/Application/OpenSim.cs
@@ -349,9 +349,6 @@ namespace OpenSim
349 349
350 if (ConfigurationSettings.Standalone) 350 if (ConfigurationSettings.Standalone)
351 { 351 {
352 m_console.Commands.AddCommand("region", false, "create user",
353 "create user [<first> [<last> [<pass> [<x> <y> [<email>]]]]]",
354 "Create a new user", HandleCreateUser);
355 352
356 m_console.Commands.AddCommand("region", false, "reset user password", 353 m_console.Commands.AddCommand("region", false, "reset user password",
357 "reset user password [<first> [<last> [<password>]]]", 354 "reset user password [<first> [<last> [<password>]]]",
@@ -813,22 +810,6 @@ namespace OpenSim
813 } 810 }
814 811
815 /// <summary> 812 /// <summary>
816 /// Execute switch for some of the create commands
817 /// </summary>
818 /// <param name="args"></param>
819 private void HandleCreateUser(string module, string[] cmd)
820 {
821 if (ConfigurationSettings.Standalone)
822 {
823 CreateUser(cmd);
824 }
825 else
826 {
827 m_log.Info("Create user is not available in grid mode, use the user server.");
828 }
829 }
830
831 /// <summary>
832 /// Execute switch for some of the reset commands 813 /// Execute switch for some of the reset commands
833 /// </summary> 814 /// </summary>
834 /// <param name="args"></param> 815 /// <param name="args"></param>
@@ -1076,61 +1057,6 @@ namespace OpenSim
1076 } 1057 }
1077 1058
1078 /// <summary> 1059 /// <summary>
1079 /// Create a new user
1080 /// </summary>
1081 /// <param name="cmdparams">string array with parameters: firstname, lastname, password, locationX, locationY, email</param>
1082 protected void CreateUser(string[] cmdparams)
1083 {
1084 string firstName;
1085 string lastName;
1086 string password;
1087 string email;
1088 uint regX = 1000;
1089 uint regY = 1000;
1090
1091 IConfig standalone;
1092 if ((standalone = m_config.Source.Configs["StandAlone"]) != null)
1093 {
1094 regX = (uint)standalone.GetInt("default_location_x", (int)regX);
1095 regY = (uint)standalone.GetInt("default_location_y", (int)regY);
1096 }
1097
1098
1099 if (cmdparams.Length < 3)
1100 firstName = MainConsole.Instance.CmdPrompt("First name", "Default");
1101 else firstName = cmdparams[2];
1102
1103 if (cmdparams.Length < 4)
1104 lastName = MainConsole.Instance.CmdPrompt("Last name", "User");
1105 else lastName = cmdparams[3];
1106
1107 if (cmdparams.Length < 5)
1108 password = MainConsole.Instance.PasswdPrompt("Password");
1109 else password = cmdparams[4];
1110
1111 if (cmdparams.Length < 6)
1112 regX = Convert.ToUInt32(MainConsole.Instance.CmdPrompt("Start Region X", regX.ToString()));
1113 else regX = Convert.ToUInt32(cmdparams[5]);
1114
1115 if (cmdparams.Length < 7)
1116 regY = Convert.ToUInt32(MainConsole.Instance.CmdPrompt("Start Region Y", regY.ToString()));
1117 else regY = Convert.ToUInt32(cmdparams[6]);
1118
1119 if (cmdparams.Length < 8)
1120 email = MainConsole.Instance.CmdPrompt("Email", "");
1121 else email = cmdparams[7];
1122
1123 if (null == m_commsManager.UserProfileCacheService.GetUserDetails(firstName, lastName))
1124 {
1125 m_commsManager.UserAdminService.AddUser(firstName, lastName, password, email, regX, regY);
1126 }
1127 else
1128 {
1129 m_log.ErrorFormat("[CONSOLE]: A user with the name {0} {1} already exists!", firstName, lastName);
1130 }
1131 }
1132
1133 /// <summary>
1134 /// Reset a user password. 1060 /// Reset a user password.
1135 /// </summary> 1061 /// </summary>
1136 /// <param name="cmdparams"></param> 1062 /// <param name="cmdparams"></param>
diff --git a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authentication/LocalAuthenticationServiceConnector.cs b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authentication/LocalAuthenticationServiceConnector.cs
index 4c65722..acc362b 100644
--- a/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authentication/LocalAuthenticationServiceConnector.cs
+++ b/OpenSim/Region/CoreModules/ServiceConnectorsOut/Authentication/LocalAuthenticationServiceConnector.cs
@@ -153,6 +153,11 @@ namespace OpenSim.Region.CoreModules.ServiceConnectorsOut.Authentication
153 return m_AuthenticationService.Release(principalID, token); 153 return m_AuthenticationService.Release(principalID, token);
154 } 154 }
155 155
156 public bool SetPassword(UUID principalID, string passwd)
157 {
158 return m_AuthenticationService.SetPassword(principalID, passwd);
159 }
160
156 #endregion 161 #endregion
157 162
158 } 163 }
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;
32using System.Reflection; 32using System.Reflection;
33using OpenSim.Services.Base; 33using OpenSim.Services.Base;
34using OpenSim.Data; 34using OpenSim.Data;
35using OpenSim.Framework;
35 36
36namespace OpenSim.Services.AuthenticationService 37namespace 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
28using System; 28using System;
29using System.Collections.Generic;
29using System.Reflection; 30using System.Reflection;
30using Nini.Config; 31using Nini.Config;
31using OpenSim.Data; 32using OpenSim.Data;
32using OpenSim.Framework.Console;
33using OpenSim.Services.Interfaces; 33using OpenSim.Services.Interfaces;
34using System.Collections.Generic; 34using OpenSim.Framework.Console;
35using GridRegion = OpenSim.Services.Interfaces.GridRegion;
36
35using OpenMetaverse; 37using OpenMetaverse;
38using log4net;
36 39
37namespace OpenSim.Services.UserAccountService 40namespace 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}