async Task <User> FindUserAsync() { string key = null; string email = null; string vanityName = null; if (userKeyRegex.IsMatch(UserIdentifier)) { key = UserIdentifier; } else if (UserIdentifier.IndexOf('@') > 0) { email = UserIdentifier; } else { vanityName = UserIdentifier; } User user = null; if (key != null) { user = await api.GetObjectAsync <User> (key); if (user == null) { vanityName = key; } } if (user == null) { user = await api.FindUserAsync(email, vanityName); if (user == null) { throw new UserNotFoundException(UserIdentifier); } } if (user.IsProtected) { throw new UserIsProtectedException(user); } return(user); }