aboutsummaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
-rw-r--r--OpenSim/Framework/UserManager/UserManagerBase.cs258
-rw-r--r--OpenSim/Grid/UserServer/Main.cs5
-rw-r--r--OpenSim/Grid/UserServer/UserManager.cs57
-rw-r--r--OpenSim/Region/Communications/Local/CommunicationsLocal.cs14
-rw-r--r--OpenSim/Region/Communications/Local/LocalUserServices.cs101
5 files changed, 31 insertions, 404 deletions
diff --git a/OpenSim/Framework/UserManager/UserManagerBase.cs b/OpenSim/Framework/UserManager/UserManagerBase.cs
index 64c3be1..c1084e9 100644
--- a/OpenSim/Framework/UserManager/UserManagerBase.cs
+++ b/OpenSim/Framework/UserManager/UserManagerBase.cs
@@ -339,248 +339,6 @@ namespace OpenSim.Framework.UserManagement
339 #endregion 339 #endregion
340 340
341 /// <summary> 341 /// <summary>
342 /// Checks a user against it's password hash
343 /// </summary>
344 /// <param name="profile">The users profile</param>
345 /// <param name="password">The supplied password</param>
346 /// <returns>Authenticated?</returns>
347 public virtual bool AuthenticateUser(UserProfileData profile, string password)
348 {
349 MainLog.Instance.Verbose(
350 "Authenticating " + profile.username + " " + profile.surname);
351
352 password = password.Remove(0, 3); //remove $1$
353
354 string s = Util.Md5Hash(password + ":" + profile.passwordSalt);
355
356 return profile.passwordHash.Equals(s.ToString(), StringComparison.InvariantCultureIgnoreCase);
357 }
358
359 #region Xml Response
360
361 /// <summary>
362 ///
363 /// </summary>
364 /// <param name="firstname"></param>
365 /// <param name="lastname"></param>
366 /// <returns></returns>
367 public virtual UserProfileData GetTheUser(string firstname, string lastname)
368 {
369 return getUserProfile(firstname, lastname);
370 }
371
372 /// <summary>
373 ///
374 /// </summary>
375 /// <returns></returns>
376 public virtual string GetMessage()
377 {
378 return _config.DefaultStartupMsg;
379 }
380
381 /// <summary>
382 ///
383 /// </summary>
384 /// <returns></returns>
385 protected virtual ArrayList GetInventoryLibrary()
386 {
387 //return new ArrayList();
388 Hashtable TempHash = new Hashtable();
389 TempHash["name"] = "OpenSim Library";
390 TempHash["parent_id"] = LLUUID.Zero.ToStringHyphenated();
391 TempHash["version"] = "1";
392 TempHash["type_default"] = "-1";
393 TempHash["folder_id"] = "00000112-000f-0000-0000-000100bba000";
394 ArrayList temp = new ArrayList();
395 temp.Add(TempHash);
396
397 TempHash = new Hashtable();
398 TempHash["name"] = "Texture Library";
399 TempHash["parent_id"] = "00000112-000f-0000-0000-000100bba000";
400 TempHash["version"] = "1";
401 TempHash["type_default"] = "-1";
402 TempHash["folder_id"] = "00000112-000f-0000-0000-000100bba001";
403 temp.Add(TempHash);
404 return temp;
405 }
406
407 /// <summary>
408 ///
409 /// </summary>
410 /// <returns></returns>
411 protected virtual ArrayList GetLibraryOwner()
412 {
413 //for now create random inventory library owner
414 Hashtable TempHash = new Hashtable();
415 TempHash["agent_id"] = "11111111-1111-0000-0000-000100bba000";
416 ArrayList inventoryLibOwner = new ArrayList();
417 inventoryLibOwner.Add(TempHash);
418 return inventoryLibOwner;
419 }
420
421 protected virtual AgentInventory GetUsersInventory(LLUUID agentID)
422 {
423 AgentInventory userInventory = new AgentInventory();
424 userInventory.CreateRootFolder(agentID, false);
425
426 return userInventory;
427 }
428
429 protected virtual ArrayList CreateInventoryArray(AgentInventory userInventory)
430 {
431 ArrayList AgentInventoryArray = new ArrayList();
432 Hashtable TempHash;
433 foreach (InventoryFolder InvFolder in userInventory.InventoryFolders.Values)
434 {
435 TempHash = new Hashtable();
436 TempHash["name"] = InvFolder.FolderName;
437 TempHash["parent_id"] = InvFolder.ParentID.ToStringHyphenated();
438 TempHash["version"] = (Int32)InvFolder.Version;
439 TempHash["type_default"] = (Int32)InvFolder.DefaultType;
440 TempHash["folder_id"] = InvFolder.FolderID.ToStringHyphenated();
441 AgentInventoryArray.Add(TempHash);
442 }
443 return AgentInventoryArray;
444 }
445
446 /// <summary>
447 /// Customises the login response and fills in missing values.
448 /// </summary>
449 /// <param name="response">The existing response</param>
450 /// <param name="theUser">The user profile</param>
451 public abstract void CustomiseResponse( LoginResponse response, UserProfileData theUser);
452
453 /// <summary>
454 /// Main user login function
455 /// </summary>
456 /// <param name="request">The XMLRPC request</param>
457 /// <returns>The response to send</returns>
458 public XmlRpcResponse XmlRpcLoginMethod(XmlRpcRequest request)
459 {
460
461 System.Console.WriteLine("Attempting login now...");
462 XmlRpcResponse response = new XmlRpcResponse();
463 Hashtable requestData = (Hashtable)request.Params[0];
464
465 bool GoodXML = (requestData.Contains("first") && requestData.Contains("last") && requestData.Contains("passwd"));
466 bool GoodLogin = false;
467 string firstname = "";
468 string lastname = "";
469 string passwd = "";
470
471 UserProfileData userProfile;
472 LoginResponse logResponse = new LoginResponse();
473
474 if (GoodXML)
475 {
476 firstname = (string)requestData["first"];
477 lastname = (string)requestData["last"];
478 passwd = (string)requestData["passwd"];
479
480 userProfile = GetTheUser(firstname, lastname);
481 if (userProfile == null)
482 return logResponse.CreateLoginFailedResponse();
483
484 GoodLogin = AuthenticateUser(userProfile, passwd);
485 }
486 else
487 {
488 return logResponse.CreateGridErrorResponse();
489 }
490
491 if (!GoodLogin)
492 {
493 return logResponse.CreateLoginFailedResponse();
494 }
495 else
496 {
497 // If we already have a session...
498 if (userProfile.currentAgent != null && userProfile.currentAgent.agentOnline)
499 {
500 // Reject the login
501 return logResponse.CreateAlreadyLoggedInResponse();
502 }
503 // Otherwise...
504 // Create a new agent session
505 CreateAgent( userProfile, request);
506
507 try
508 {
509 LLUUID agentID = userProfile.UUID;
510
511 // Inventory Library Section
512 AgentInventory userInventory = this.GetUsersInventory(agentID);
513 ArrayList AgentInventoryArray = this.CreateInventoryArray(userInventory);
514
515 Hashtable InventoryRootHash = new Hashtable();
516 InventoryRootHash["folder_id"] = userInventory.InventoryRoot.FolderID.ToStringHyphenated();
517 ArrayList InventoryRoot = new ArrayList();
518 InventoryRoot.Add(InventoryRootHash);
519 userProfile.rootInventoryFolderID = userInventory.InventoryRoot.FolderID;
520
521 // Circuit Code
522 uint circode = (uint)(Util.RandomClass.Next());
523
524 logResponse.Lastname = userProfile.surname;
525 logResponse.Firstname = userProfile.username;
526 logResponse.AgentID = agentID.ToStringHyphenated();
527 logResponse.SessionID = userProfile.currentAgent.sessionID.ToStringHyphenated();
528 logResponse.SecureSessionID = userProfile.currentAgent.secureSessionID.ToStringHyphenated();
529 logResponse.InventoryRoot = InventoryRoot;
530 logResponse.InventorySkeleton = AgentInventoryArray;
531 logResponse.InventoryLibrary = this.GetInventoryLibrary();
532 logResponse.InventoryLibraryOwner = this.GetLibraryOwner();
533 logResponse.CircuitCode = (Int32)circode;
534 //logResponse.RegionX = 0; //overwritten
535 //logResponse.RegionY = 0; //overwritten
536 logResponse.Home = "!!null temporary value {home}!!"; // Overwritten
537 //logResponse.LookAt = "\n[r" + TheUser.homeLookAt.X.ToString() + ",r" + TheUser.homeLookAt.Y.ToString() + ",r" + TheUser.homeLookAt.Z.ToString() + "]\n";
538 //logResponse.SimAddress = "127.0.0.1"; //overwritten
539 //logResponse.SimPort = 0; //overwritten
540 logResponse.Message = this.GetMessage();
541
542 try
543 {
544 this.CustomiseResponse( logResponse, userProfile);
545 }
546 catch (Exception e)
547 {
548 System.Console.WriteLine(e.ToString());
549 return logResponse.CreateDeadRegionResponse();
550 //return logResponse.ToXmlRpcResponse();
551 }
552 CommitAgent(ref userProfile);
553 return logResponse.ToXmlRpcResponse();
554
555 }
556
557 catch (Exception E)
558 {
559 System.Console.WriteLine(E.ToString());
560 }
561 //}
562 }
563 return response;
564
565 }
566
567 #endregion
568
569 /// <summary>
570 /// Deletes an active agent session
571 /// </summary>
572 /// <param name="request">The request</param>
573 /// <param name="path">The path (eg /bork/narf/test)</param>
574 /// <param name="param">Parameters sent</param>
575 /// <returns>Success "OK" else error</returns>
576 public string RestDeleteUserSessionMethod(string request, string path, string param)
577 {
578 // TODO! Important!
579
580 return "OK";
581 }
582
583 /// <summary>
584 /// 342 ///
585 /// </summary> 343 /// </summary>
586 /// <param name="user"></param> 344 /// <param name="user"></param>
@@ -611,6 +369,22 @@ namespace OpenSim.Framework.UserManagement
611 } 369 }
612 } 370 }
613 371
372 // Rest and XML-RPC methods. (could move them to a sub class in the user server?)
373
374 /// <summary>
375 /// Deletes an active agent session
376 /// </summary>
377 /// <param name="request">The request</param>
378 /// <param name="path">The path (eg /bork/narf/test)</param>
379 /// <param name="param">Parameters sent</param>
380 /// <returns>Success "OK" else error</returns>
381 public string RestDeleteUserSessionMethod(string request, string path, string param)
382 {
383 // TODO! Important!
384
385 return "OK";
386 }
387
614 /// <summary> 388 /// <summary>
615 /// Returns an error message that the user could not be found in the database 389 /// Returns an error message that the user could not be found in the database
616 /// </summary> 390 /// </summary>
diff --git a/OpenSim/Grid/UserServer/Main.cs b/OpenSim/Grid/UserServer/Main.cs
index 04f45b0..82bbd57 100644
--- a/OpenSim/Grid/UserServer/Main.cs
+++ b/OpenSim/Grid/UserServer/Main.cs
@@ -47,6 +47,7 @@ namespace OpenSim.Grid.UserServer
47 private UserConfig Cfg; 47 private UserConfig Cfg;
48 48
49 public UserManager m_userManager; 49 public UserManager m_userManager;
50 public UserLoginService m_loginService;
50 51
51 public Dictionary<LLUUID, UserProfile> UserSessions = new Dictionary<LLUUID, UserProfile>(); 52 public Dictionary<LLUUID, UserProfile> UserSessions = new Dictionary<LLUUID, UserProfile>();
52 53
@@ -92,10 +93,12 @@ namespace OpenSim.Grid.UserServer
92 m_userManager._config = Cfg; 93 m_userManager._config = Cfg;
93 m_userManager.AddPlugin(Cfg.DatabaseProvider); 94 m_userManager.AddPlugin(Cfg.DatabaseProvider);
94 95
96 m_loginService = new UserLoginService(m_userManager, Cfg, Cfg.DefaultStartupMsg);
97
95 MainLog.Instance.Verbose("Main.cs:Startup() - Starting HTTP process"); 98 MainLog.Instance.Verbose("Main.cs:Startup() - Starting HTTP process");
96 BaseHttpServer httpServer = new BaseHttpServer(8002); 99 BaseHttpServer httpServer = new BaseHttpServer(8002);
97 100
98 httpServer.AddXmlRPCHandler("login_to_simulator", m_userManager.XmlRpcLoginMethod); 101 httpServer.AddXmlRPCHandler("login_to_simulator", m_loginService.XmlRpcLoginMethod);
99 102
100 httpServer.AddXmlRPCHandler("get_user_by_name", m_userManager.XmlRPCGetUserMethodName); 103 httpServer.AddXmlRPCHandler("get_user_by_name", m_userManager.XmlRPCGetUserMethodName);
101 httpServer.AddXmlRPCHandler("get_user_by_uuid", m_userManager.XmlRPCGetUserMethodUUID); 104 httpServer.AddXmlRPCHandler("get_user_by_uuid", m_userManager.XmlRPCGetUserMethodUUID);
diff --git a/OpenSim/Grid/UserServer/UserManager.cs b/OpenSim/Grid/UserServer/UserManager.cs
index c459b93..4203ba6 100644
--- a/OpenSim/Grid/UserServer/UserManager.cs
+++ b/OpenSim/Grid/UserServer/UserManager.cs
@@ -41,61 +41,6 @@ namespace OpenSim.Grid.UserServer
41 { 41 {
42 } 42 }
43 43
44 /// <summary> 44
45 /// Customises the login response and fills in missing values.
46 /// </summary>
47 /// <param name="response">The existing response</param>
48 /// <param name="theUser">The user profile</param>
49 public override void CustomiseResponse( LoginResponse response, UserProfileData theUser)
50 {
51 // Load information from the gridserver
52 SimProfileData SimInfo = new SimProfileData();
53 SimInfo = SimInfo.RequestSimProfileData(theUser.currentAgent.currentHandle, _config.GridServerURL, _config.GridSendKey, _config.GridRecvKey);
54
55 // Customise the response
56 // Home Location
57 response.Home = "{'region_handle':[r" + (SimInfo.regionLocX * 256).ToString() + ",r" + (SimInfo.regionLocY * 256).ToString() + "], " +
58 "'position':[r" + theUser.homeLocation.X.ToString() + ",r" + theUser.homeLocation.Y.ToString() + ",r" + theUser.homeLocation.Z.ToString() + "], " +
59 "'look_at':[r" + theUser.homeLocation.X.ToString() + ",r" + theUser.homeLocation.Y.ToString() + ",r" + theUser.homeLocation.Z.ToString() + "]}";
60
61 // Destination
62 Console.WriteLine("CUSTOMISERESPONSE: Region X: " + SimInfo.regionLocX + "; Region Y: " + SimInfo.regionLocY);
63 response.SimAddress = Util.GetHostFromDNS(SimInfo.serverIP).ToString();
64 response.SimPort = (Int32)SimInfo.serverPort;
65 response.RegionX = SimInfo.regionLocX;
66 response.RegionY = SimInfo.regionLocY;
67
68 //Not sure if the + "/CAPS/" should in fact be +"CAPS/" depending if there is already a / as part of httpServerURI
69 string capsPath = Util.GetRandomCapsPath();
70 response.SeedCapability = SimInfo.httpServerURI + "CAPS/" + capsPath + "0000/";
71
72 // Notify the target of an incoming user
73 Console.WriteLine("Notifying " + SimInfo.regionName + " (" + SimInfo.serverURI+ ")");
74
75 // Prepare notification
76 Hashtable SimParams = new Hashtable();
77 SimParams["session_id"] = theUser.currentAgent.sessionID.ToString();
78 SimParams["secure_session_id"] = theUser.currentAgent.secureSessionID.ToString();
79 SimParams["firstname"] = theUser.username;
80 SimParams["lastname"] = theUser.surname;
81 SimParams["agent_id"] = theUser.UUID.ToString();
82 SimParams["circuit_code"] = (Int32)Convert.ToUInt32(response.CircuitCode);
83 SimParams["startpos_x"] = theUser.currentAgent.currentPos.X.ToString();
84 SimParams["startpos_y"] = theUser.currentAgent.currentPos.Y.ToString();
85 SimParams["startpos_z"] = theUser.currentAgent.currentPos.Z.ToString();
86 SimParams["regionhandle"] = theUser.currentAgent.currentHandle.ToString();
87 SimParams["caps_path"] = capsPath;
88 ArrayList SendParams = new ArrayList();
89 SendParams.Add(SimParams);
90
91 // Update agent with target sim
92 theUser.currentAgent.currentRegion = SimInfo.UUID;
93 theUser.currentAgent.currentHandle = SimInfo.regionHandle;
94
95 System.Console.WriteLine("Informing region --> " + SimInfo.httpServerURI);
96 // Send
97 XmlRpcRequest GridReq = new XmlRpcRequest("expect_user", SendParams);
98 XmlRpcResponse GridResp = GridReq.Send(SimInfo.httpServerURI, 3000);
99 }
100 } 45 }
101} 46}
diff --git a/OpenSim/Region/Communications/Local/CommunicationsLocal.cs b/OpenSim/Region/Communications/Local/CommunicationsLocal.cs
index a0bbf6d..3ad33f4 100644
--- a/OpenSim/Region/Communications/Local/CommunicationsLocal.cs
+++ b/OpenSim/Region/Communications/Local/CommunicationsLocal.cs
@@ -37,23 +37,25 @@ namespace OpenSim.Region.Communications.Local
37{ 37{
38 public class CommunicationsLocal : CommunicationsManager 38 public class CommunicationsLocal : CommunicationsManager
39 { 39 {
40 public LocalBackEndServices SandBoxServices = new LocalBackEndServices(); 40 public LocalBackEndServices InstanceServices = new LocalBackEndServices();
41 public LocalUserServices UserServices; 41 public LocalUserServices UserServices;
42 public LocalLoginService LoginServices;
42 43
43 public CommunicationsLocal(NetworkServersInfo serversInfo, BaseHttpServer httpServer, AssetCache assetCache, bool accountsAuthenticate, string welcomeMessage ) 44 public CommunicationsLocal(NetworkServersInfo serversInfo, BaseHttpServer httpServer, AssetCache assetCache, bool accountsAuthenticate, string welcomeMessage )
44 : base(serversInfo, httpServer, assetCache) 45 : base(serversInfo, httpServer, assetCache)
45 { 46 {
46 UserServices = new LocalUserServices(this, serversInfo, accountsAuthenticate, welcomeMessage); 47 UserServices = new LocalUserServices(this, serversInfo);
47 UserServices.AddPlugin("OpenSim.Framework.Data.DB4o.dll"); 48 UserServices.AddPlugin("OpenSim.Framework.Data.DB4o.dll");
48 UserServer = UserServices; 49 UserServer = UserServices;
49 GridServer = SandBoxServices; 50 GridServer = InstanceServices;
50 InterRegion = SandBoxServices; 51 InterRegion = InstanceServices;
51 httpServer.AddXmlRPCHandler("login_to_simulator", UserServices.XmlRpcLoginMethod); 52 LoginServices = new LocalLoginService(UserServices, welcomeMessage, this, serversInfo, accountsAuthenticate);
53 httpServer.AddXmlRPCHandler("login_to_simulator", LoginServices.XmlRpcLoginMethod);
52 } 54 }
53 55
54 internal void InformRegionOfLogin(ulong regionHandle, Login login) 56 internal void InformRegionOfLogin(ulong regionHandle, Login login)
55 { 57 {
56 this.SandBoxServices.AddNewSession(regionHandle, login); 58 this.InstanceServices.AddNewSession(regionHandle, login);
57 } 59 }
58 60
59 public void doCreate(string what) 61 public void doCreate(string what)
diff --git a/OpenSim/Region/Communications/Local/LocalUserServices.cs b/OpenSim/Region/Communications/Local/LocalUserServices.cs
index 63f8c21..65732bd 100644
--- a/OpenSim/Region/Communications/Local/LocalUserServices.cs
+++ b/OpenSim/Region/Communications/Local/LocalUserServices.cs
@@ -15,20 +15,14 @@ namespace OpenSim.Region.Communications.Local
15 private NetworkServersInfo serversInfo; 15 private NetworkServersInfo serversInfo;
16 private uint defaultHomeX ; 16 private uint defaultHomeX ;
17 private uint defaultHomeY; 17 private uint defaultHomeY;
18 private bool authUsers = false;
19 private string welcomeMessage = "Welcome to OpenSim";
20 18
21 public LocalUserServices(CommunicationsLocal parent, NetworkServersInfo serversInfo, bool authenticate, string welcomeMess) 19
20 public LocalUserServices(CommunicationsLocal parent, NetworkServersInfo serversInfo)
22 { 21 {
23 m_Parent = parent; 22 m_Parent = parent;
24 this.serversInfo = serversInfo; 23 this.serversInfo = serversInfo;
25 defaultHomeX = this.serversInfo.DefaultHomeLocX; 24 defaultHomeX = this.serversInfo.DefaultHomeLocX;
26 defaultHomeY = this.serversInfo.DefaultHomeLocY; 25 defaultHomeY = this.serversInfo.DefaultHomeLocY;
27 this.authUsers = authenticate;
28 if (welcomeMess != "")
29 {
30 this.welcomeMessage = welcomeMess;
31 }
32 } 26 }
33 27
34 public UserProfileData GetUserProfile(string firstName, string lastName) 28 public UserProfileData GetUserProfile(string firstName, string lastName)
@@ -46,97 +40,6 @@ namespace OpenSim.Region.Communications.Local
46 return this.getUserProfile(avatarID); 40 return this.getUserProfile(avatarID);
47 } 41 }
48 42
49 /// <summary>
50 ///
51 /// </summary>
52 /// <returns></returns>
53 public override string GetMessage()
54 {
55 return welcomeMessage;
56 }
57
58 public override UserProfileData GetTheUser(string firstname, string lastname)
59 {
60 UserProfileData profile = getUserProfile(firstname, lastname);
61 if (profile != null)
62 {
63
64 return profile;
65 }
66
67 if (!authUsers)
68 {
69 //no current user account so make one
70 Console.WriteLine("No User account found so creating a new one ");
71 this.AddUserProfile(firstname, lastname, "test", defaultHomeX, defaultHomeY);
72
73 profile = getUserProfile(firstname, lastname);
74
75 return profile;
76 }
77 return null;
78 }
79
80 public override bool AuthenticateUser(UserProfileData profile, string password)
81 {
82 if (!authUsers)
83 {
84 //for now we will accept any password in sandbox mode
85 Console.WriteLine("authorising user");
86 return true;
87 }
88 else
89 {
90 Console.WriteLine( "Authenticating " + profile.username + " " + profile.surname);
91
92 password = password.Remove(0, 3); //remove $1$
93
94 string s = Util.Md5Hash(password + ":" + profile.passwordSalt);
95
96 return profile.passwordHash.Equals(s.ToString(), StringComparison.InvariantCultureIgnoreCase);
97 }
98 }
99
100 public override void CustomiseResponse(LoginResponse response, UserProfileData theUser)
101 {
102 ulong currentRegion = theUser.currentAgent.currentHandle;
103 RegionInfo reg = m_Parent.GridServer.RequestNeighbourInfo(currentRegion);
104
105 if (reg != null)
106 {
107 response.Home = "{'region_handle':[r" + (reg.RegionLocX * 256).ToString() + ",r" + (reg.RegionLocY * 256).ToString() + "], " +
108 "'position':[r" + theUser.homeLocation.X.ToString() + ",r" + theUser.homeLocation.Y.ToString() + ",r" + theUser.homeLocation.Z.ToString() + "], " +
109 "'look_at':[r" + theUser.homeLocation.X.ToString() + ",r" + theUser.homeLocation.Y.ToString() + ",r" + theUser.homeLocation.Z.ToString() + "]}";
110 string capsPath = Util.GetRandomCapsPath();
111 response.SimAddress = reg.ExternalEndPoint.Address.ToString();
112 response.SimPort = (Int32)reg.ExternalEndPoint.Port;
113 response.RegionX = reg.RegionLocX ;
114 response.RegionY = reg.RegionLocY ;
115
116 //following port needs changing as we don't want a http listener for every region (or do we?)
117 response.SeedCapability = "http://" + reg.ExternalHostName + ":" + this.serversInfo.HttpListenerPort.ToString() + "/CAPS/" + capsPath + "0000/";
118 theUser.currentAgent.currentRegion = reg.SimUUID;
119 theUser.currentAgent.currentHandle = reg.RegionHandle;
120
121 Login _login = new Login();
122 //copy data to login object
123 _login.First = response.Firstname;
124 _login.Last = response.Lastname;
125 _login.Agent = response.AgentID;
126 _login.Session = response.SessionID;
127 _login.SecureSession = response.SecureSessionID;
128 _login.CircuitCode = (uint)response.CircuitCode;
129 _login.CapsPath = capsPath;
130
131 m_Parent.InformRegionOfLogin(currentRegion, _login);
132 }
133 else
134 {
135 Console.WriteLine("not found region " + currentRegion);
136 }
137
138 }
139
140 public UserProfileData SetupMasterUser(string firstName, string lastName) 43 public UserProfileData SetupMasterUser(string firstName, string lastName)
141 { 44 {
142 return SetupMasterUser(firstName, lastName, ""); 45 return SetupMasterUser(firstName, lastName, "");