diff --git a/OpenSim/Server/Handlers/UserAccounts/UserAccountServerPostHandler.cs b/OpenSim/Server/Handlers/UserAccounts/UserAccountServerPostHandler.cs index bc12ef9b94..c507e65248 100644 --- a/OpenSim/Server/Handlers/UserAccounts/UserAccountServerPostHandler.cs +++ b/OpenSim/Server/Handlers/UserAccounts/UserAccountServerPostHandler.cs @@ -84,8 +84,7 @@ namespace OpenSim.Server.Handlers.UserAccounts string method = string.Empty; try { - Dictionary request = - ServerUtils.ParseQueryString(body); + Dictionary request = ServerUtils.ParseQueryString(body); if (!request.ContainsKey("METHOD")) return FailureResult(); @@ -128,32 +127,31 @@ namespace OpenSim.Server.Handlers.UserAccounts UUID scopeID = UUID.Zero; Dictionary result = new Dictionary(); - if (request.ContainsKey("ScopeID") && !UUID.TryParse(request["ScopeID"].ToString(), out scopeID)) + object otmp; + if (request.TryGetValue("ScopeID", out otmp) && !UUID.TryParse(otmp.ToString(), out scopeID)) { result["result"] = "null"; return ResultToBytes(result); } - if (request.ContainsKey("UserID") && request["UserID"] != null) + if (request.TryGetValue("UserID", out otmp) && otmp != null) { - UUID userID; - if (UUID.TryParse(request["UserID"].ToString(), out userID)) + if (UUID.TryParse(otmp.ToString(), out UUID userID)) account = m_UserAccountService.GetUserAccount(scopeID, userID); } - else if (request.ContainsKey("PrincipalID") && request["PrincipalID"] != null) + else if (request.TryGetValue("PrincipalID", out otmp) && otmp != null) { - UUID userID; - if (UUID.TryParse(request["PrincipalID"].ToString(), out userID)) + if (UUID.TryParse(otmp.ToString(), out UUID userID)) account = m_UserAccountService.GetUserAccount(scopeID, userID); } - else if (request.ContainsKey("Email") && request["Email"] != null) + else if (request.TryGetValue("Email", out otmp) && otmp != null) { - account = m_UserAccountService.GetUserAccount(scopeID, request["Email"].ToString()); + account = m_UserAccountService.GetUserAccount(scopeID, otmp.ToString()); } - else if (request.ContainsKey("FirstName") && request.ContainsKey("LastName") && - request["FirstName"] != null && request["LastName"] != null) + else if (request.TryGetValue("FirstName", out object ofn) && ofn != null && + request.TryGetValue("LastName", out object oln) && oln != null) { - account = m_UserAccountService.GetUserAccount(scopeID, request["FirstName"].ToString(), request["LastName"].ToString()); + account = m_UserAccountService.GetUserAccount(scopeID, ofn.ToString(), oln.ToString()); } if (account == null) @@ -170,19 +168,20 @@ namespace OpenSim.Server.Handlers.UserAccounts byte[] GetAccounts(Dictionary request) { - if (!request.ContainsKey("query")) + if (!request.TryGetValue("query", out object oquery) || oquery == null) return FailureResult(); UUID scopeID = UUID.Zero; - if (request.ContainsKey("ScopeID") && !UUID.TryParse(request["ScopeID"].ToString(), out scopeID)) + if (request.TryGetValue("ScopeID", out object oscope) && !UUID.TryParse(oscope.ToString(), out scopeID)) return FailureResult(); - string query = request["query"].ToString(); - - List accounts = m_UserAccountService.GetUserAccounts(scopeID, query); + List accounts = null; + string query = oquery.ToString().Trim(); + if(!string.IsNullOrEmpty(query)) + accounts = m_UserAccountService.GetUserAccounts(scopeID, query); Dictionary result = new Dictionary(); - if ((accounts == null) || ((accounts != null) && (accounts.Count == 0))) + if ((accounts == null) || accounts.Count == 0) { result["result"] = "null"; } @@ -206,27 +205,35 @@ namespace OpenSim.Server.Handlers.UserAccounts byte[] GetMultiAccounts(Dictionary request) { UUID scopeID = UUID.Zero; - if (request.ContainsKey("ScopeID") && !UUID.TryParse(request["ScopeID"].ToString(), out scopeID)) + if (request.TryGetValue("ScopeID", out object oscope) && !UUID.TryParse(oscope.ToString(), out scopeID)) return FailureResult(); - if (!request.ContainsKey("IDS")) + if (!request.TryGetValue("IDS", out object oids)) { m_log.DebugFormat("[USER SERVICE HANDLER]: GetMultiAccounts called without required uuids argument"); return FailureResult(); } - if (!(request["IDS"] is List)) + List lids = oids as List; + if (lids == null) { - m_log.DebugFormat("[USER SERVICE HANDLER]: GetMultiAccounts input argument was of unexpected type {0}", request["IDS"].GetType().ToString()); + m_log.DebugFormat("[USER SERVICE HANDLER]: GetMultiAccounts input argument was of unexpected type {0} or null", oids.GetType().ToString()); return FailureResult(); } - List userIDs = (List)request["IDS"]; + List userIDs = new List(lids.Count); + foreach (string s in lids) + { + if(UUID.TryParse(s, out UUID tmpid)) + userIDs.Add(s); + } - List accounts = m_UserAccountService.GetUserAccounts(scopeID, userIDs); + List accounts = null; + if (userIDs.Count > 0) + accounts = m_UserAccountService.GetUserAccounts(scopeID, userIDs); Dictionary result = new Dictionary(); - if ((accounts == null) || ((accounts != null) && (accounts.Count == 0))) + if ((accounts == null) || accounts.Count == 0) { result["result"] = "null"; } @@ -251,43 +258,45 @@ namespace OpenSim.Server.Handlers.UserAccounts byte[] StoreAccount(Dictionary request) { + object otmp; UUID principalID = UUID.Zero; - if (request.ContainsKey("PrincipalID") && !UUID.TryParse(request["PrincipalID"].ToString(), out principalID)) + if (request.TryGetValue("PrincipalID", out otmp) && !UUID.TryParse(otmp.ToString(), out principalID) ) + return FailureResult(); + + if(principalID.IsZero()) return FailureResult(); UUID scopeID = UUID.Zero; - if (request.ContainsKey("ScopeID") && !UUID.TryParse(request["ScopeID"].ToString(), out scopeID)) + if (request.TryGetValue("ScopeID", out otmp) && !UUID.TryParse(otmp.ToString(), out scopeID)) return FailureResult(); UserAccount existingAccount = m_UserAccountService.GetUserAccount(scopeID, principalID); if (existingAccount == null) return FailureResult(); - Dictionary result = new Dictionary(); + if (request.TryGetValue("FirstName", out otmp)) + existingAccount.FirstName = otmp.ToString(); - if (request.ContainsKey("FirstName")) - existingAccount.FirstName = request["FirstName"].ToString(); + if (request.TryGetValue("LastName", out otmp)) + existingAccount.LastName = otmp.ToString(); - if (request.ContainsKey("LastName")) - existingAccount.LastName = request["LastName"].ToString(); - - if (request.ContainsKey("Email")) - existingAccount.Email = request["Email"].ToString(); + if (request.TryGetValue("Email", out otmp)) + existingAccount.Email = otmp.ToString(); int created = 0; - if (request.ContainsKey("Created") && int.TryParse(request["Created"].ToString(), out created)) + if (request.TryGetValue("Created", out otmp) && int.TryParse(otmp.ToString(), out created)) existingAccount.Created = created; int userLevel = 0; - if (request.ContainsKey("UserLevel") && int.TryParse(request["UserLevel"].ToString(), out userLevel)) + if (request.TryGetValue("UserLevel", out otmp) && int.TryParse(otmp.ToString(), out userLevel)) existingAccount.UserLevel = userLevel; int userFlags = 0; - if (request.ContainsKey("UserFlags") && int.TryParse(request["UserFlags"].ToString(), out userFlags)) + if (request.TryGetValue("UserFlags", out otmp) && int.TryParse(otmp.ToString(), out userFlags)) existingAccount.UserFlags = userFlags; - if (request.ContainsKey("UserTitle")) - existingAccount.UserTitle = request["UserTitle"].ToString(); + if (request.TryGetValue("UserTitle", out otmp)) + existingAccount.UserTitle = otmp.ToString(); if (!m_UserAccountService.StoreUserAccount(existingAccount)) { @@ -298,67 +307,65 @@ namespace OpenSim.Server.Handlers.UserAccounts return FailureResult(); } + Dictionary result = new Dictionary(); result["result"] = existingAccount.ToKeyValuePairs(); - return ResultToBytes(result); } byte[] CreateUser(Dictionary request) { - if (! request.ContainsKey("FirstName") - && request.ContainsKey("LastName") - && request.ContainsKey("Password")) + if (!(m_UserAccountService is UserAccountService)) return FailureResult(); - Dictionary result = new Dictionary(); + object otmp; + if (!request.TryGetValue("FirstName", out otmp) || otmp == null) + return FailureResult(); + string firstName = otmp.ToString(); + + if(!request.TryGetValue("LastName", out otmp) || otmp == null) + return FailureResult(); + string lastName = otmp.ToString(); + + if(!request.TryGetValue("Password", out otmp) || otmp == null) + return FailureResult(); + string password = otmp.ToString(); UUID scopeID = UUID.Zero; - if (request.ContainsKey("ScopeID") && !UUID.TryParse(request["ScopeID"].ToString(), out scopeID)) + if (request.TryGetValue("ScopeID", out otmp) && !UUID.TryParse(otmp.ToString(), out scopeID)) return FailureResult(); UUID principalID = UUID.Random(); - if (request.ContainsKey("PrincipalID") && !UUID.TryParse(request["PrincipalID"].ToString(), out principalID)) + if (request.TryGetValue("PrincipalID", out otmp) && !UUID.TryParse(otmp.ToString(), out principalID)) return FailureResult(); - string firstName = request["FirstName"].ToString(); - string lastName = request["LastName"].ToString(); - string password = request["Password"].ToString(); - string email = ""; - if (request.ContainsKey("Email")) - email = request["Email"].ToString(); + if (request.TryGetValue("Email", out otmp)) + email = otmp.ToString(); string model = ""; - if (request.ContainsKey("Model")) - model = request["Model"].ToString(); + if (request.TryGetValue("Model", out otmp)) + model = otmp.ToString(); - UserAccount createdUserAccount = null; - - if (m_UserAccountService is UserAccountService) - createdUserAccount - = ((UserAccountService)m_UserAccountService).CreateUser( + UserAccount createdUserAccount = ((UserAccountService)m_UserAccountService).CreateUser( scopeID, principalID, firstName, lastName, password, email, model); if (createdUserAccount == null) return FailureResult(); + Dictionary result = new Dictionary(); result["result"] = createdUserAccount.ToKeyValuePairs(); - return ResultToBytes(result); } + /* private byte[] SuccessResult() { XmlDocument doc = new XmlDocument(); - XmlNode xmlnode = doc.CreateNode(XmlNodeType.XmlDeclaration, - "", ""); - + XmlNode xmlnode = doc.CreateNode(XmlNodeType.XmlDeclaration, "", ""); doc.AppendChild(xmlnode); - XmlElement rootElement = doc.CreateElement("", "ServerResponse", - ""); - + XmlElement rootElement = doc.CreateElement("", "ServerResponse", ""); doc.AppendChild(rootElement); XmlElement result = doc.CreateElement("", "result", ""); @@ -368,18 +375,20 @@ namespace OpenSim.Server.Handlers.UserAccounts return Util.DocToBytes(doc); } + */ + + private static byte[] ResultFailureBytes = osUTF8.GetASCIIBytes("Failure"); private byte[] FailureResult() { + /* XmlDocument doc = new XmlDocument(); - XmlNode xmlnode = doc.CreateNode(XmlNodeType.XmlDeclaration, - "", ""); + XmlNode xmlnode = doc.CreateNode(XmlNodeType.XmlDeclaration, "", ""); doc.AppendChild(xmlnode); - XmlElement rootElement = doc.CreateElement("", "ServerResponse", - ""); + XmlElement rootElement = doc.CreateElement("", "ServerResponse", ""); doc.AppendChild(rootElement); @@ -389,6 +398,8 @@ namespace OpenSim.Server.Handlers.UserAccounts rootElement.AppendChild(result); return Util.DocToBytes(doc); + */ + return ResultFailureBytes; } private byte[] ResultToBytes(Dictionary result)