From b63405c1a796b44b58081857d01f726372467628 Mon Sep 17 00:00:00 2001 From: Diva Canto Date: Fri, 8 Jan 2010 10:43:34 -0800 Subject: Inching ahead... This compiles, but very likely does not run. --- .../RemoteController/RemoteAdminPlugin.cs | 433 +++++++++++---------- 1 file changed, 230 insertions(+), 203 deletions(-) (limited to 'OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs') diff --git a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs index 9400788..d6d5700 100644 --- a/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs +++ b/OpenSim/ApplicationPlugins/RemoteController/RemoteAdminPlugin.cs @@ -49,6 +49,8 @@ using OpenSim.Region.CoreModules.World.Terrain; using OpenSim.Region.Framework.Interfaces; using OpenSim.Region.Framework.Scenes; using OpenSim.Services.Interfaces; +using PresenceInfo = OpenSim.Services.Interfaces.PresenceInfo; +using GridRegion = OpenSim.Services.Interfaces.GridRegion; namespace OpenSim.ApplicationPlugins.RemoteController { @@ -1032,30 +1034,37 @@ namespace OpenSim.ApplicationPlugins.RemoteController if (requestData.Contains("user_email")) email = (string)requestData["user_email"]; - CachedUserInfo userInfo = - m_app.CommunicationsManager.UserProfileCacheService.GetUserDetails(firstname, lastname); + UUID scopeID = m_app.SceneManager.CurrentOrFirstScene.RegionInfo.ScopeID; - if (null != userInfo) - throw new Exception(String.Format("Avatar {0} {1} already exists", firstname, lastname)); + UserAccount account = m_app.SceneManager.CurrentOrFirstScene.UserAccountService.GetUserAccount(scopeID, firstname, lastname); - UUID userID = - m_app.CommunicationsManager.UserAdminService.AddUser(firstname, lastname, - passwd, email, regX, regY); + if (null != account) + throw new Exception(String.Format("Account {0} {1} already exists", firstname, lastname)); - if (userID == UUID.Zero) + account = new UserAccount(scopeID, firstname, lastname, email); + // REFACTORING PROBLEM: no method to set the password! + + bool success = m_app.SceneManager.CurrentOrFirstScene.UserAccountService.StoreUserAccount(account); + + if (!success) throw new Exception(String.Format("failed to create new user {0} {1}", firstname, lastname)); + GridRegion home = m_app.SceneManager.CurrentOrFirstScene.GridService.GetRegionByPosition(scopeID, + (int)(regX * Constants.RegionSize), (int)(regY * Constants.RegionSize)); + if (home == null) + m_log.WarnFormat("[RADMIN]: Unable to set home region for newly created user account {0} {1}", firstname, lastname); + // Establish the avatar's initial appearance - updateUserAppearance(responseData, requestData, userID); + updateUserAppearance(responseData, requestData, account.PrincipalID); responseData["success"] = true; - responseData["avatar_uuid"] = userID.ToString(); + responseData["avatar_uuid"] = account.PrincipalID.ToString(); response.Value = responseData; - m_log.InfoFormat("[RADMIN]: CreateUser: User {0} {1} created, UUID {2}", firstname, lastname, userID); + m_log.InfoFormat("[RADMIN]: CreateUser: User {0} {1} created, UUID {2}", firstname, lastname, account.PrincipalID); } catch (Exception e) { @@ -1124,21 +1133,27 @@ namespace OpenSim.ApplicationPlugins.RemoteController string firstname = (string) requestData["user_firstname"]; string lastname = (string) requestData["user_lastname"]; - CachedUserInfo userInfo - = m_app.CommunicationsManager.UserProfileCacheService.GetUserDetails(firstname, lastname); - responseData["user_firstname"] = firstname; responseData["user_lastname"] = lastname; - if (null == userInfo) + UUID scopeID = m_app.SceneManager.CurrentOrFirstScene.RegionInfo.ScopeID; + + UserAccount account = m_app.SceneManager.CurrentOrFirstScene.UserAccountService.GetUserAccount(scopeID, firstname, lastname); + + if (null == account) { responseData["success"] = false; responseData["lastlogin"] = 0; } else { + PresenceInfo[] pinfos = m_app.SceneManager.CurrentOrFirstScene.PresenceService.GetAgents(new string[] { account.PrincipalID.ToString() }); + if (pinfos != null && pinfos.Length >= 1) + responseData["lastlogin"] = pinfos[0].Login; + else + responseData["lastlogin"] = 0; + responseData["success"] = true; - responseData["lastlogin"] = userInfo.UserProfile.LastLogin; } response.Value = responseData; @@ -1200,117 +1215,118 @@ namespace OpenSim.ApplicationPlugins.RemoteController public XmlRpcResponse XmlRpcUpdateUserAccountMethod(XmlRpcRequest request, IPEndPoint remoteClient) { m_log.Info("[RADMIN]: UpdateUserAccount: new request"); + m_log.Warn("[RADMIN]: This method needs update for 0.7"); XmlRpcResponse response = new XmlRpcResponse(); Hashtable responseData = new Hashtable(); - lock (rslock) - { - try - { - Hashtable requestData = (Hashtable) request.Params[0]; - - // check completeness - checkStringParameters(request, new string[] { - "password", "user_firstname", - "user_lastname"}); - - // check password - if (!String.IsNullOrEmpty(m_requiredPassword) && - (string) requestData["password"] != m_requiredPassword) throw new Exception("wrong password"); - - // do the job - string firstname = (string) requestData["user_firstname"]; - string lastname = (string) requestData["user_lastname"]; - - string passwd = String.Empty; - uint? regX = null; - uint? regY = null; - uint? ulaX = null; - uint? ulaY = null; - uint? ulaZ = null; - uint? usaX = null; - uint? usaY = null; - uint? usaZ = null; - string aboutFirstLive = String.Empty; - string aboutAvatar = String.Empty; - - if (requestData.ContainsKey("user_password")) passwd = (string) requestData["user_password"]; - if (requestData.ContainsKey("start_region_x")) - regX = Convert.ToUInt32((Int32) requestData["start_region_x"]); - if (requestData.ContainsKey("start_region_y")) - regY = Convert.ToUInt32((Int32) requestData["start_region_y"]); - - if (requestData.ContainsKey("start_lookat_x")) - ulaX = Convert.ToUInt32((Int32) requestData["start_lookat_x"]); - if (requestData.ContainsKey("start_lookat_y")) - ulaY = Convert.ToUInt32((Int32) requestData["start_lookat_y"]); - if (requestData.ContainsKey("start_lookat_z")) - ulaZ = Convert.ToUInt32((Int32) requestData["start_lookat_z"]); - - if (requestData.ContainsKey("start_standat_x")) - usaX = Convert.ToUInt32((Int32) requestData["start_standat_x"]); - if (requestData.ContainsKey("start_standat_y")) - usaY = Convert.ToUInt32((Int32) requestData["start_standat_y"]); - if (requestData.ContainsKey("start_standat_z")) - usaZ = Convert.ToUInt32((Int32) requestData["start_standat_z"]); - if (requestData.ContainsKey("about_real_world")) - aboutFirstLive = (string)requestData["about_real_world"]; - if (requestData.ContainsKey("about_virtual_world")) - aboutAvatar = (string)requestData["about_virtual_world"]; - - UserProfileData userProfile - = m_app.CommunicationsManager.UserService.GetUserProfile(firstname, lastname); - - if (null == userProfile) - throw new Exception(String.Format("avatar {0} {1} does not exist", firstname, lastname)); - - if (!String.IsNullOrEmpty(passwd)) - { - m_log.DebugFormat("[RADMIN]: UpdateUserAccount: updating password for avatar {0} {1}", firstname, lastname); - string md5PasswdHash = Util.Md5Hash(Util.Md5Hash(passwd) + ":" + String.Empty); - userProfile.PasswordHash = md5PasswdHash; - } - - if (null != regX) userProfile.HomeRegionX = (uint) regX; - if (null != regY) userProfile.HomeRegionY = (uint) regY; - - if (null != usaX) userProfile.HomeLocationX = (uint) usaX; - if (null != usaY) userProfile.HomeLocationY = (uint) usaY; - if (null != usaZ) userProfile.HomeLocationZ = (uint) usaZ; - - if (null != ulaX) userProfile.HomeLookAtX = (uint) ulaX; - if (null != ulaY) userProfile.HomeLookAtY = (uint) ulaY; - if (null != ulaZ) userProfile.HomeLookAtZ = (uint) ulaZ; - - if (String.Empty != aboutFirstLive) userProfile.FirstLifeAboutText = aboutFirstLive; - if (String.Empty != aboutAvatar) userProfile.AboutText = aboutAvatar; - - // User has been created. Now establish gender and appearance. - - updateUserAppearance(responseData, requestData, userProfile.ID); - - if (!m_app.CommunicationsManager.UserService.UpdateUserProfile(userProfile)) - throw new Exception("did not manage to update user profile"); - - responseData["success"] = true; - - response.Value = responseData; - - m_log.InfoFormat("[RADMIN]: UpdateUserAccount: account for user {0} {1} updated, UUID {2}", - firstname, lastname, - userProfile.ID); - } - catch (Exception e) - { - m_log.ErrorFormat("[RADMIN] UpdateUserAccount: failed: {0}", e.Message); - m_log.DebugFormat("[RADMIN] UpdateUserAccount: failed: {0}", e.ToString()); - - responseData["success"] = false; - responseData["error"] = e.Message; - - response.Value = responseData; - } - } + //lock (rslock) + //{ + // try + // { + // Hashtable requestData = (Hashtable) request.Params[0]; + + // // check completeness + // checkStringParameters(request, new string[] { + // "password", "user_firstname", + // "user_lastname"}); + + // // check password + // if (!String.IsNullOrEmpty(m_requiredPassword) && + // (string) requestData["password"] != m_requiredPassword) throw new Exception("wrong password"); + + // // do the job + // string firstname = (string) requestData["user_firstname"]; + // string lastname = (string) requestData["user_lastname"]; + + // string passwd = String.Empty; + // uint? regX = null; + // uint? regY = null; + // uint? ulaX = null; + // uint? ulaY = null; + // uint? ulaZ = null; + // uint? usaX = null; + // uint? usaY = null; + // uint? usaZ = null; + // string aboutFirstLive = String.Empty; + // string aboutAvatar = String.Empty; + + // if (requestData.ContainsKey("user_password")) passwd = (string) requestData["user_password"]; + // if (requestData.ContainsKey("start_region_x")) + // regX = Convert.ToUInt32((Int32) requestData["start_region_x"]); + // if (requestData.ContainsKey("start_region_y")) + // regY = Convert.ToUInt32((Int32) requestData["start_region_y"]); + + // if (requestData.ContainsKey("start_lookat_x")) + // ulaX = Convert.ToUInt32((Int32) requestData["start_lookat_x"]); + // if (requestData.ContainsKey("start_lookat_y")) + // ulaY = Convert.ToUInt32((Int32) requestData["start_lookat_y"]); + // if (requestData.ContainsKey("start_lookat_z")) + // ulaZ = Convert.ToUInt32((Int32) requestData["start_lookat_z"]); + + // if (requestData.ContainsKey("start_standat_x")) + // usaX = Convert.ToUInt32((Int32) requestData["start_standat_x"]); + // if (requestData.ContainsKey("start_standat_y")) + // usaY = Convert.ToUInt32((Int32) requestData["start_standat_y"]); + // if (requestData.ContainsKey("start_standat_z")) + // usaZ = Convert.ToUInt32((Int32) requestData["start_standat_z"]); + // if (requestData.ContainsKey("about_real_world")) + // aboutFirstLive = (string)requestData["about_real_world"]; + // if (requestData.ContainsKey("about_virtual_world")) + // aboutAvatar = (string)requestData["about_virtual_world"]; + + // UserProfileData userProfile + // = m_app.CommunicationsManager.UserService.GetUserProfile(firstname, lastname); + + // if (null == userProfile) + // throw new Exception(String.Format("avatar {0} {1} does not exist", firstname, lastname)); + + // if (!String.IsNullOrEmpty(passwd)) + // { + // m_log.DebugFormat("[RADMIN]: UpdateUserAccount: updating password for avatar {0} {1}", firstname, lastname); + // string md5PasswdHash = Util.Md5Hash(Util.Md5Hash(passwd) + ":" + String.Empty); + // userProfile.PasswordHash = md5PasswdHash; + // } + + // if (null != regX) userProfile.HomeRegionX = (uint) regX; + // if (null != regY) userProfile.HomeRegionY = (uint) regY; + + // if (null != usaX) userProfile.HomeLocationX = (uint) usaX; + // if (null != usaY) userProfile.HomeLocationY = (uint) usaY; + // if (null != usaZ) userProfile.HomeLocationZ = (uint) usaZ; + + // if (null != ulaX) userProfile.HomeLookAtX = (uint) ulaX; + // if (null != ulaY) userProfile.HomeLookAtY = (uint) ulaY; + // if (null != ulaZ) userProfile.HomeLookAtZ = (uint) ulaZ; + + // if (String.Empty != aboutFirstLive) userProfile.FirstLifeAboutText = aboutFirstLive; + // if (String.Empty != aboutAvatar) userProfile.AboutText = aboutAvatar; + + // // User has been created. Now establish gender and appearance. + + // updateUserAppearance(responseData, requestData, userProfile.ID); + + // if (!m_app.CommunicationsManager.UserService.UpdateUserProfile(userProfile)) + // throw new Exception("did not manage to update user profile"); + + // responseData["success"] = true; + + // response.Value = responseData; + + // m_log.InfoFormat("[RADMIN]: UpdateUserAccount: account for user {0} {1} updated, UUID {2}", + // firstname, lastname, + // userProfile.ID); + // } + // catch (Exception e) + // { + // m_log.ErrorFormat("[RADMIN] UpdateUserAccount: failed: {0}", e.Message); + // m_log.DebugFormat("[RADMIN] UpdateUserAccount: failed: {0}", e.ToString()); + + // responseData["success"] = false; + // responseData["error"] = e.Message; + + // response.Value = responseData; + // } + //} m_log.Info("[RADMIN]: UpdateUserAccount: request complete"); return response; @@ -1327,72 +1343,73 @@ namespace OpenSim.ApplicationPlugins.RemoteController private void updateUserAppearance(Hashtable responseData, Hashtable requestData, UUID userid) { m_log.DebugFormat("[RADMIN] updateUserAppearance"); + m_log.Warn("[RADMIN]: This method needs update for 0.7"); - string dmale = m_config.GetString("default_male", "Default Male"); - string dfemale = m_config.GetString("default_female", "Default Female"); - string dneut = m_config.GetString("default_female", "Default Default"); + //string dmale = m_config.GetString("default_male", "Default Male"); + //string dfemale = m_config.GetString("default_female", "Default Female"); + //string dneut = m_config.GetString("default_female", "Default Default"); string model = String.Empty; - // Has a gender preference been supplied? - - if (requestData.Contains("gender")) - { - switch ((string)requestData["gender"]) - { - case "m" : - model = dmale; - break; - case "f" : - model = dfemale; - break; - case "n" : - default : - model = dneut; - break; - } - } - - // Has an explicit model been specified? - - if (requestData.Contains("model")) - { - model = (string)requestData["model"]; - } - - // No appearance attributes were set - - if (model == String.Empty) - { - m_log.DebugFormat("[RADMIN] Appearance update not requested"); - return; - } - - m_log.DebugFormat("[RADMIN] Setting appearance for avatar {0}, using model {1}", userid, model); - - string[] nomens = model.Split(); - if (nomens.Length != 2) - { - m_log.WarnFormat("[RADMIN] User appearance not set for {0}. Invalid model name : <{1}>", userid, model); - // nomens = dmodel.Split(); - return; - } - - UserProfileData mprof = m_app.CommunicationsManager.UserService.GetUserProfile(nomens[0], nomens[1]); - - // Is this the first time one of the default models has been used? Create it if that is the case - // otherwise default to male. - - if (mprof == null) - { - m_log.WarnFormat("[RADMIN] Requested model ({0}) not found. Appearance unchanged", model); - return; - } - - // Set current user's appearance. This bit is easy. The appearance structure is populated with - // actual asset ids, however to complete the magic we need to populate the inventory with the - // assets in question. - - establishAppearance(userid, mprof.ID); + //// Has a gender preference been supplied? + + //if (requestData.Contains("gender")) + //{ + // switch ((string)requestData["gender"]) + // { + // case "m" : + // model = dmale; + // break; + // case "f" : + // model = dfemale; + // break; + // case "n" : + // default : + // model = dneut; + // break; + // } + //} + + //// Has an explicit model been specified? + + //if (requestData.Contains("model")) + //{ + // model = (string)requestData["model"]; + //} + + //// No appearance attributes were set + + //if (model == String.Empty) + //{ + // m_log.DebugFormat("[RADMIN] Appearance update not requested"); + // return; + //} + + //m_log.DebugFormat("[RADMIN] Setting appearance for avatar {0}, using model {1}", userid, model); + + //string[] nomens = model.Split(); + //if (nomens.Length != 2) + //{ + // m_log.WarnFormat("[RADMIN] User appearance not set for {0}. Invalid model name : <{1}>", userid, model); + // // nomens = dmodel.Split(); + // return; + //} + + //UserProfileData mprof = m_app.CommunicationsManager.UserService.GetUserProfile(nomens[0], nomens[1]); + + //// Is this the first time one of the default models has been used? Create it if that is the case + //// otherwise default to male. + + //if (mprof == null) + //{ + // m_log.WarnFormat("[RADMIN] Requested model ({0}) not found. Appearance unchanged", model); + // return; + //} + + //// Set current user's appearance. This bit is easy. The appearance structure is populated with + //// actual asset ids, however to complete the magic we need to populate the inventory with the + //// assets in question. + + //establishAppearance(userid, mprof.ID); m_log.DebugFormat("[RADMIN] Finished setting appearance for avatar {0}, using model {1}", userid, model); @@ -1604,20 +1621,27 @@ namespace OpenSim.ApplicationPlugins.RemoteController passwd = GetStringAttribute(avatar,"password",passwd); string[] nomens = name.Split(); - UI = m_app.CommunicationsManager.UserProfileCacheService.GetUserDetails(nomens[0], nomens[1]); - if (null == UI) + UUID scopeID = m_app.SceneManager.CurrentOrFirstScene.RegionInfo.ScopeID; + UserAccount account = m_app.SceneManager.CurrentOrFirstScene.UserAccountService.GetUserAccount(scopeID, nomens[0], nomens[1]); + if (null == account) { - ID = m_app.CommunicationsManager.UserAdminService.AddUser(nomens[0], nomens[1], - passwd, email, regX, regY); - if (ID == UUID.Zero) + account = new UserAccount(scopeID, nomens[0], nomens[1], email); + bool success = m_app.SceneManager.CurrentOrFirstScene.UserAccountService.StoreUserAccount(account); + if (!success) { m_log.ErrorFormat("[RADMIN] Avatar {0} {1} was not created", nomens[0], nomens[1]); return false; } + // !!! REFACTORING PROBLEM: need to set the password + + GridRegion home = m_app.SceneManager.CurrentOrFirstScene.GridService.GetRegionByPosition(scopeID, + (int)(regX * Constants.RegionSize), (int)(regY * Constants.RegionSize)); + if (home != null) + m_app.SceneManager.CurrentOrFirstScene.PresenceService.SetHomeLocation(account.PrincipalID.ToString(), home.RegionID, new Vector3(128, 128, 0), new Vector3(0, 1, 0)); } else { - ID = UI.UserProfile.ID; + ID = account.PrincipalID; } m_log.DebugFormat("[RADMIN] User {0}[{1}] created or retrieved", name, ID); @@ -2391,17 +2415,18 @@ namespace OpenSim.ApplicationPlugins.RemoteController if (requestData.Contains("users")) { - UserProfileCacheService ups = m_app.CommunicationsManager.UserProfileCacheService; + UUID scopeID = m_app.SceneManager.CurrentOrFirstScene.RegionInfo.ScopeID; + IUserAccountService userService = m_app.SceneManager.CurrentOrFirstScene.UserAccountService; Scene s = m_app.SceneManager.CurrentScene; Hashtable users = (Hashtable) requestData["users"]; List uuids = new List(); foreach (string name in users.Values) { string[] parts = name.Split(); - CachedUserInfo udata = ups.GetUserDetails(parts[0],parts[1]); - if (udata != null) + UserAccount account = userService.GetUserAccount(scopeID, parts[0], parts[1]); + if (account != null) { - uuids.Add(udata.UserProfile.ID); + uuids.Add(account.PrincipalID); m_log.DebugFormat("[RADMIN] adding \"{0}\" to ACL for \"{1}\"", name, s.RegionInfo.RegionName); } } @@ -2477,21 +2502,23 @@ namespace OpenSim.ApplicationPlugins.RemoteController if (requestData.Contains("users")) { - UserProfileCacheService ups = m_app.CommunicationsManager.UserProfileCacheService; + UUID scopeID = m_app.SceneManager.CurrentOrFirstScene.RegionInfo.ScopeID; + IUserAccountService userService = m_app.SceneManager.CurrentOrFirstScene.UserAccountService; + //UserProfileCacheService ups = m_app.CommunicationsManager.UserProfileCacheService; Scene s = m_app.SceneManager.CurrentScene; Hashtable users = (Hashtable) requestData["users"]; List uuids = new List(); - foreach (string name in users.Values) + foreach (string name in users.Values) { string[] parts = name.Split(); - CachedUserInfo udata = ups.GetUserDetails(parts[0],parts[1]); - if (udata != null) + UserAccount account = userService.GetUserAccount(scopeID, parts[0], parts[1]); + if (account != null) { - uuids.Add(udata.UserProfile.ID); + uuids.Add(account.PrincipalID); } } List acl = new List(s.RegionInfo.EstateSettings.EstateAccess); - foreach (UUID uuid in uuids) + foreach (UUID uuid in uuids) { if (acl.Contains(uuid)) { -- cgit v1.1