using System; using System.Collections.Generic; using System.Linq; using System.Net.Http; using System.Security.Claims; using System.Threading.Tasks; using IdentityModel.Client; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Logging; using xCommons.Providers; using xIdentityModels; using xIdentityModels.Constants; using xIdentityModels.Descriptors; using xIdentityModels.Dtos; using xIdentityModels.Models; using xIdentityModels.Navigations; using xIds.DbContext; using xModels.Dtos; namespace xIds.Interfaces { public interface IXIdentityManager { XIdentityDbContext DbContext { get; } UserManager UserManager { get; } ILogger Logger { get; } SignInManager SignInManager { get; } IXSecurityProvider SecurityProvider { get; } RoleManager RoleManager { get; } XValidationProvider ValidationProvider { get; } // #region Class Getter (s) Methods ... IQueryable GetUsersDbSet( bool containsDetail = false ); IQueryable GetUsersFullDbSet(bool enableTracking = false); #endregion // #region Tools ... string GetUserSelectByParam( XActionRequest model, bool forceNotNull = true, ICollection excludes = null ); Task ValidateUserExistsAndRetrieve( string userSelectByParam, bool containsDetail = false, bool checkCanLoginPolicies = false, bool checkIsBanned = true, bool ignoreDisabledUser = false, bool forceAdmin = false, Exception exception = null ); #endregion // #region Default Identity Preparation Actions ... Task CreateIdentityRoles(); Task CreateUserAsync(XIdentityUserDescriptor user); #endregion // #region Identity Actions ... HttpClient GetHttpClient(); Task RequestScopeAccessToken(string scope); Task RequestDiscoveryDocument(); Task Authenticate(XLoginRequest model); Task Login(XLoginRequest model); Task RefreshTokens(XTokenResponse model); #endregion // #region Role Handlers ... Task IsRoleExistsAsync(string roleName); Task CreateRoleAsync(string roleName); Task GetRoleAsync(string roleName); Task AddUserToRoleAsync(XUser user, string roleName); Task GetRoleNameAsync(string roleId); Task> GetRoleNamesAsync( string userSelectByParam, bool checkCanLoginPolicies = true, bool checkIsBanned = true ); Task RemoveFromRoleAsync(XUser user, string roleName); Task RemoveFromRolesAsync(XUser user, IEnumerable roleNames); #endregion // #region User Handlers ... Task CanRegister(string userSelectByParam); Task IsUserExistsAsync(string userSelectByParam); Task GetUserAsync( string userSelectByParam, bool containsDetail = false); Task CreateUserAsync( XUser user, string password, bool checkCanLoginPolicies = true, bool checkIsBanned = true ); Task UpdateUserAsync( XUser user, bool checkCanLoginPolicies = true, bool checkIsBanned = true ); Task> GetUserNamesAsync( IEnumerable userIds ); Task> GetUserNameIdsAsync( XUserNameIdRequest model ); Task ToJwtClaims( XUser user, bool checkCanLoginPolicies = true, bool checkIsBanned = true ); Task CheckPasswordSignInAsync( XUser user, string password, XDevice device, string language, bool lockoutOnFailure, bool isForced = true ); #endregion // #region User Profile Handlers ... Task GetUserProfileAsync( string userSelectByParam, string requestedUserSelectByParam, bool forceCheckRequestedUser = true, bool checkCanLoginPolicies = true, bool checkIsBanned = true ); Task> QueryUsers( string requestedUserSelectByParam, XQuery query ); Task> QueryInRoleUsers( string requestedUserSelectByParam, string role, XQuery query, bool forceRole = false ); Task> GetUserProfilesAsync( ICollection ids, string requestedUserSelectByParam, bool forceCheckRequestedUser = true, bool checkCanLoginPolicies = true, bool checkIsBanned = true ); Task> QueryAvatars( string userSelectByParam, XQuery query ); Task ProfileUpdateAsync( string userSelectByParam, string requestedUserSelectByParam, XProfileUpdateRequest request ); Task FullProfileUpdateAsync( string userSelectByParam, string requestedUserSelectByParam, XProfileUpdateRequest request ); Task RequestConfirmMobile( string lang, XDevice device, string userSelectByParam, string password, string mobileNumber = null ); Task RequestConfirmEmail( string lang, XDevice device, string userSelectByParam, string password, string emailAddress = null ); Task RequestResetPassword( string lang, XDevice device, string userSelectByParam, string returnUrl ); Task RequestConfirmRegistration( string lang, XDevice device, string userSelectByParam, string password, string returnUrl ); Task ChangePassword( string lang, XDevice device, string userSelectByParam, string password, string newPassword, string returnUrl ); Task ResetPassword( string lang, XDevice device, string actionHash, string newPassword, string returnUrl ); Task AddAvatar( string userSelectByParam, IFormFile file ); Task AddAvatars( string userSelectByParam, IFormFileCollection files ); Task SetAvatar( string userSelectByParam, int profileImageId ); Task RemoveAvatar( string userSelectByParam, ICollection profileImageIds ); Task ConfirmRegistration( string lang, XDevice device, string actionHash, string returnUrl ); Task ConfirmMobileNumber( string lang, XDevice device, string registrationHash, string verificationCode ); Task ConfirmEmailAddress( string lang, XDevice device, string registrationHash, string verificationCode ); Task IsConfirmedEmail(string userSelectByParam); Task IsConfirmedMobile(string userSelectByParam); #endregion // #region Registration Handlers ... Task InviteUser( string lang, XDevice device, string email, string handlerUrl ); Task RequestRegistration( string lang, XDevice device, string invitationHash, string firstName, string lastName, DateTime dateOfBirth, string mobileNumber = null, string emailAddress = null ); Task AddAcountInfo( string lang, XDevice device, string registrationHash, string userName, string password ); Task AttachProfileImage( string tokenHash, IFormFile file ); Task FinishRegistration( string lang, XDevice device, string userSelectByParam, string password, string returnUrl ); #endregion // #region Friendship Handlers ... // #region Actions ... Task Follow( string userSelectByParam, string destUserSelectByParam ); Task Cancel( string userSelectByParam, string destUserSelectByParam ); Task UnFollowFollower( string userSelectByParam, string destUserSelectByParam ); Task UnFollowFollowing( string userSelectByParam, string destUserSelectByParam ); Task Block( string userSelectByParam, string destUserSelectByParam ); Task UnBlock( string userSelectByParam, string destUserSelectByParam ); #endregion // #region Request Handlers ... Task AcceptRequest( string userSelectByParam, string destUserSelectByParam ); Task RejectRequest( string userSelectByParam, string destUserSelectByParam ); #endregion // #region Getters ... Task IsFollower( string userSelectByParam, string destUserSelectByParam, bool checkIsBanned = true, bool checkCanLoginPolicies = true ); Task GetFollowerState( string userSelectByParam, string destUserSelectByParam, bool checkIsBanned = true, bool checkCanLoginPolicies = true ); Task GetFollower( string userSelectByParam, string destUserSelectByParam ); Task> GetFollowers(string userSelectByParam); Task> GetAllFollowers(string userSelectByParam); Task> GetFollowersList(string userSelectByParam); Task> QueryFollowers( XQuery query, string userSelectByParam ); Task IsFollowing( string userSelectByParam, string destUserSelectByParam, bool checkIsBanned = true, bool checkCanLoginPolicies = true ); Task GetFollowingState( string userSelectByParam, string destUserSelectByParam, bool checkIsBanned = true, bool checkCanLoginPolicies = true ); Task GetFollowing( string userSelectByParam, string destUserSelectByParam ); Task> GetFollowings(string userSelectByParam); Task> GetAllFollowings(string userSelectByParam); Task> GetFollowingList(string userSelectByParam); Task> QueryFollowings( XQuery query, string userSelectByParam ); #endregion // Task GetFriendshipInfo( string userSelectByParam, string destUserSelectByParam, bool checkCanLoginPolicies = true, bool checkIsBanned = true ); #endregion // #region Admin Actions ... Task> Ban( string userSelectByParam, XUserNameIdRequest model ); Task> UnBan( string userSelectByParam, XUserNameIdRequest model ); Task IsBanned( string userSelectByParam, string destUserSelectByParam ); #endregion // #region Open Actions ... // #region OpenGet ... Task OpenGet( XOpenActionInnerDto model ); Task OpenGet( string token, string actionRequest ); #endregion Task GetUserInfo( XOpenActionRequestDto dto ); Task> GetUserInfos( XOpenActionRequestDto dto ); #endregion // #region Search ... /// /// Query Open To Search User Profiles ... /// /// requested user's identifier /// how to filter results based on XQuery structure /// an instance of XQueryResult of XUserProfileDto Task> QueryOpenToSearchUsers( string requestedUserSelectByParam, XQuery query ); #endregion // #region Query Service ... /// /// Retrieve Users as Query Model for Query Service ... /// /// /// /// /// /// public Task> QueryUsers( string requestedUserSelectByParam, XQuery query, string role = null, bool forceRole = false ); #endregion } }