Ejemplo n.º 1
0
        public bool SignUp()
        {
            try
            {
                if (!Directory.Exists(DatabaseDir))
                {
                    Directory.CreateDirectory(DatabaseDir);
                }

                if (!IsUserValid())
                {
                    return(false);
                }

                var emailExists = this.CheckUniqueEmail();
                if (emailExists)
                {
                    this.WarningMessage = "This email already exists. Please choose another one!";
                    return(false);
                }

                var isEmailValid = this.isEmailValid();
                if (!isEmailValid)
                {
                    this.WarningMessage = "Please input a valid email!";
                    return(false);
                }

                var emailEncoded = Convert.ToBase64String(Encoding.UTF8.GetBytes(this.User.Email));
                var filePath     = Path.Combine(DatabaseDir, emailEncoded);
                filePath = Path.ChangeExtension(filePath, "xml");

                var keyPair = RSAService.GenerateKeyPair((int)this.KeySize);
                User.Passphrase = HashService.SHA256Hash(User.Passphrase, User.Salt);
                User.IV         = Convert.ToBase64String(SymetricService.RijndaelGenerateIV());
                User.PrivateKey = SymetricService.RijndaelEncryptData(keyPair.PrivateKey,
                                                                      Convert.FromBase64String(User.Passphrase),
                                                                      Convert.FromBase64String(User.IV));
                User.PublicKey = Convert.ToBase64String(Encoding.UTF8.GetBytes(keyPair.PublicKey));

                XmlService.WriteToXml <UserDto>(filePath, User);
                this.InfoMessage = "Sign up successfully";
            }
            catch (Exception ex)
            {
                this.WarningMessage = "There was an error creating your account";
                return(false);
            }

            return(true);
        }