/// <summary>
        /// Creates a new account if no account exists with the given username.
        /// </summary>
        /// <param name="username"></param>
        /// <returns></returns>
        public async Task <Account> CreateAccountAsync(string username, string password)
        {
            using var context = GetDatabaseContext();
            var original = await context.Account
                           .SingleOrDefaultAsync(a => a.Username == username);

            if (original == null)
            {
                // Compute password hash and salt value
                var credentials = PasswordSecurity.CreateSecurityCredentials(password);

                original = new Account
                {
                    AccountKey   = Guid.NewGuid(),
                    Username     = username,
                    PasswordHash = credentials.PasswordHash,
                    Salt         = credentials.SaltValue
                };
                context.Add(original);
                await context.SaveChangesAsync();
            }

            return(original);
        }