/// <summary>
 /// Validate a user's login credentials and retrieve their info with their roles
 /// </summary>
 /// <param name="auth"></param>
 /// <param name="model"></param>
 /// <param name="log"></param>
 public static Task <Maybe <AuthUserModel> > ValidateUserAsync(IAuthDataProvider auth, SignInModel model, ILog log)
 {
     log.Vrb("Validating credentials for {User}.", model.Email);
     return(from _ in auth.ValidateUserAsync <AuthUserModel>(model.Email, model.Password)
            from user in auth.RetrieveUserWithRolesAsync <AuthUserModel, AuthRoleModel>(model.Email)
            select user);
 }