public int Register() { int result = 0; if (string.IsNullOrEmpty(UserName)) { result = -1; } else if (string.IsNullOrEmpty(Email)) { result = -2; } else if (string.IsNullOrEmpty(Password)) { result = -3; } else if (string.IsNullOrEmpty(Confirm)) { result = -4; } else { string MatchEmailPattern = @"^(([\w-]+\.)+[\w-]+|([a-zA-Z]{1}|[\w-]{2,}))@" + @"((([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\." + @"([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])\.([0-1]?[0-9]{1,2}|25[0-5]|2[0-4][0-9])){1}|" + @"([a-zA-Z]+[\w-]+\.)+[a-zA-Z]{2,4})$"; bool checkEmail = System.Text.RegularExpressions.Regex.IsMatch(Email, MatchEmailPattern); if (!checkEmail) { result = -5; } else { if (Password != Confirm) { result = -6; } else { string publicKey = ""; string privateKey = ""; CspParameters cspParams = null; RSACryptoServiceProvider rsaProvider = null; cspParams = new CspParameters(); cspParams.ProviderType = 1; cspParams.Flags = CspProviderFlags.UseArchivableKey; cspParams.KeyNumber = (int)KeyNumber.Exchange; rsaProvider = new RSACryptoServiceProvider(cspParams); publicKey = rsaProvider.ToXmlString(false); privateKey = rsaProvider.ToXmlString(true); User us = new User(); us.UserName = UserName; us.Email = Email; us.PrivateKey = privateKey; us.PublicKey = publicKey; us.Path = Path; byte[] salt = new byte[16]; byte[] hashPassword = new byte[16]; Security security = new Security(); security.HashPassword(Password, out salt, out hashPassword); string s = Convert.ToBase64String(salt); string p = Convert.ToBase64String(hashPassword); us.Password = p; us.Salt = s; if (!System.IO.File.Exists(Path)) { security.SaveConnectionConfiguration(Path, "test", "test", "test", "test", "test", "test"); security.SaveMailConfiguration(Path, "test", "test", 0, "test", "test"); security.SaveAccountsConfiguration(Path, "test", "test", "test", "test"); security.SaveUserConfiguration(Path, UserName, Email, p, privateKey, publicKey, s); Login(); result = 1; } else { XmlDocument users = security.ReadUserConfiguration(Path); bool check = CheckUserAndEmailExists(UserName, Email, users); if (!check) { XmlNode node = users.SelectSingleNode("/root/users"); XmlNode userNode = users.CreateElement("user"); node.AppendChild(userNode); XmlNode usernameNode = users.CreateElement("username"); usernameNode.AppendChild(users.CreateTextNode(UserName)); userNode.AppendChild(usernameNode); XmlNode emailNode = users.CreateElement("email"); emailNode.AppendChild(users.CreateTextNode(Email)); userNode.AppendChild(emailNode); XmlNode passNode = users.CreateElement("password"); passNode.AppendChild(users.CreateTextNode(p)); userNode.AppendChild(passNode); XmlNode publickeyNode = users.CreateElement("publickey"); publickeyNode.AppendChild(users.CreateCDataSection(PublicKey)); userNode.AppendChild(publickeyNode); XmlNode privateNode = users.CreateElement("privatekey"); privateNode.AppendChild(users.CreateCDataSection(PrivateKey)); userNode.AppendChild(privateNode); XmlNode saltNode = users.CreateElement("salt"); saltNode.AppendChild(users.CreateCDataSection(s)); userNode.AppendChild(saltNode); security.SaveUserConfiguration(Path, users.InnerXml); Login(); result = 1; } else { result = -7; } } } } } return result; }
public int Update() { int result = 0; if (User.Current != null) { Security security = new Security(); XmlDocument accounts = security.ReadAccountConfiguration(User.Current.Path); XmlNode node = accounts.SelectSingleNode("/root/accounts/account[name='" + Name + "']"); if (node != null) { node.SelectSingleNode("username").InnerText = Username; node.SelectSingleNode("password").InnerText = Password; node.SelectSingleNode("description").InnerText = Description; //node.SelectSingleNode("name").InnerText = Name; security.SaveAccountsConfiguration(User.Current.Path, accounts); result = 1; } else { result = -2; } } else { result = -1; } return result; }
public int Add() { int result = 0; if (User.Current != null) { Security security = new Security(); bool check = CheckExists(Name); if (check) { result = -2; } else { XmlDocument accounts = security.ReadAccountConfiguration(User.Current.Path); XmlNode node = accounts.SelectSingleNode("/root/accounts"); XmlNode accountNode = accounts.CreateElement("account"); node.AppendChild(accountNode); XmlNode nameNode = accounts.CreateElement("name"); nameNode.AppendChild(accounts.CreateTextNode(Name)); accountNode.AppendChild(nameNode); XmlNode userNode = accounts.CreateElement("username"); userNode.AppendChild(accounts.CreateTextNode(Username)); accountNode.AppendChild(userNode); XmlNode passNode = accounts.CreateElement("password"); passNode.AppendChild(accounts.CreateTextNode(Password)); accountNode.AppendChild(passNode); XmlNode desNode = accounts.CreateElement("description"); desNode.AppendChild(accounts.CreateTextNode(Description)); accountNode.AppendChild(desNode); security.SaveAccountsConfiguration(User.Current.Path, accounts); result = 1; } } else { result = -1; } return result; }
public bool Delete() { bool result = false; if (User.Current != null) { ThangDC.Core.Securities.Security security = new ThangDC.Core.Securities.Security(); System.Xml.XmlDocument accounts = security.ReadAccountConfiguration(User.Current.Path); System.Xml.XmlNode node = accounts.SelectSingleNode("/root/accounts/account[name='" + Name + "']"); if (node != null) { node.ParentNode.RemoveChild(node); security.SaveAccountsConfiguration(User.Current.Path, accounts); result = true; } } return result; }