using Oqtane.Models;
using System.Collections.Generic;
using System.Threading.Tasks;
namespace Oqtane.Services
{
///
/// Manage (get / update) user information
///
public interface IUserService
{
///
/// Get a of a specific site
///
/// ID of a
/// ID of a
///
Task GetUserAsync(int userId, int siteId);
///
/// Get a of a specific site
///
/// Username / login of a
/// ID of a
///
Task GetUserAsync(string username, int siteId);
///
/// Get a of a specific site
///
/// Username / login of a
/// email address of a
/// ID of a
///
Task GetUserAsync(string username, string email, int siteId);
///
/// Save a user to the Database.
/// The object contains all the information incl. what it belongs to.
///
///
///
Task AddUserAsync(User user);
///
/// Update an existing user in the database.
///
///
///
Task UpdateUserAsync(User user);
///
/// Delete / remove a user in the database
///
/// ID-reference to the
/// ID-reference to the
///
Task DeleteUserAsync(int userId, int siteId);
///
/// Will login the specified .
///
/// Note that this will probably not be a real User, but a user object where the `Username` and `Password` have been filled.
///
/// A object which should have at least the and set.
/// Determines if the login cookie should be set (only relevant for Hybrid scenarios)
/// Determines if the login cookie should be persisted for a long time.
///
Task LoginUserAsync(User user, bool setCookie, bool isPersistent);
///
/// Logout a
///
///
///
Task LogoutUserAsync(User user);
///
/// Logout a
///
///
///
Task LogoutUserEverywhereAsync(User user);
///
/// Update e-mail verification status of a user.
///
/// The we're verifying
/// A Hash value in the URL which verifies this user got the e-mail (containing this token)
///
Task VerifyEmailAsync(User user, string token);
///
/// Trigger a forgot-password e-mail for this .
///
///
///
Task ForgotPasswordAsync(User user);
///
/// Reset the password of this
///
///
///
///
Task ResetPasswordAsync(User user, string token);
///
/// Verify the two factor verification code
///
///
///
///
Task VerifyTwoFactorAsync(User user, string token);
///
/// Validate identity user info.
///
///
///
///
///
Task ValidateUserAsync(string username, string email, string password);
///
/// Validate a users password against the password policy
///
///
///
Task ValidatePasswordAsync(string password);
///
/// Get token for current user
///
///
Task GetTokenAsync();
///
/// Get personal access token for current user (administrators only)
///
///
Task GetPersonalAccessTokenAsync();
///
/// Link an external login with a local user account
///
/// The we're verifying
/// A Hash value in the URL which verifies this user got the e-mail (containing this token)
/// External Login provider type
/// External Login provider key
/// External Login provider display name
///
Task LinkUserAsync(User user, string token, string type, string key, string name);
///
/// Get password requirements for site
///
/// ID of a
///
Task GetPasswordRequirementsAsync(int siteId);
///
/// Bulk import of users
///
/// ID of a
/// ID of a
/// Indicates if new users should be notified by email
///
Task> ImportUsersAsync(int siteId, int fileId, bool notify);
}
}