public async Task<bool> ConfirmEmailAddress(User user, string token) { if (user == null) { throw new ArgumentNullException("user"); } if (String.IsNullOrEmpty(token)) { throw new ArgumentNullException("token"); } if (user.EmailConfirmationToken != token) { return false; } var conflictingUsers = FindAllByEmailAddress(user.UnconfirmedEmailAddress); if (conflictingUsers.AnySafe(u => u.Key != user.Key)) { throw new EntityException(Strings.EmailAddressBeingUsed, user.UnconfirmedEmailAddress); } await Auditing.SaveAuditRecord(new UserAuditRecord(user, UserAuditAction.ConfirmEmail, user.UnconfirmedEmailAddress)); user.ConfirmEmailAddress(); UserRepository.CommitChanges(); return true; }
public virtual async Task<AuthenticatedUser> Register(string username, string emailAddress, Credential credential) { var existingUser = Entities.Users .FirstOrDefault(u => u.Username == username || u.EmailAddress == emailAddress); if (existingUser != null) { if (String.Equals(existingUser.Username, username, StringComparison.OrdinalIgnoreCase)) { throw new EntityException(Strings.UsernameNotAvailable, username); } else { throw new EntityException(Strings.EmailAddressBeingUsed, emailAddress); } } var apiKey = Guid.NewGuid(); var newUser = new User(username) { EmailAllowed = true, UnconfirmedEmailAddress = emailAddress, EmailConfirmationToken = CryptographyService.GenerateToken(), CreatedUtc = DateTime.UtcNow }; // Add a credential for the password and the API Key newUser.Credentials.Add(CredentialBuilder.CreateV1ApiKey(apiKey)); newUser.Credentials.Add(credential); if (!Config.ConfirmEmailAddresses) { newUser.ConfirmEmailAddress(); } // Write an audit record await Auditing.SaveAuditRecord(new UserAuditRecord(newUser, UserAuditAction.Registered)); Entities.Users.Add(newUser); Entities.SaveChanges(); return new AuthenticatedUser(newUser, credential); }