using System; using System.Collections.Generic; using System.Linq; using System.Security.Claims; using xCommons.Constants; using xCommons.Extensions; using xCommons.Helpers; using xExceptions.Constants; using xIdentityModels.Constants; using xModels.Base; namespace xIdentityModels.Models { public class XUserClaimsInfoDto : XBaseDto { // #region Properties ... public string AccessToken { get; } public string RefreshToken { get; } public long ExpiresAt { get; } public string UserId { get; } public string UserName { get; } public string FirstName { get; } public string LastName { get; } public string Picture { get; } public string Email { get; } public string PhoneNumber { get; } public XGender Gender { get; } public bool IsBanned { get; } public bool IsEnabled { get; } public bool EmailConfirmed { get; } public bool PhoneNumberConfirmed { get; } public string Bio { get; set; } public string CoverImage { get; set; } public bool OpenToSearch { get; set; } public long? ExpiredOn { get; } public long? AuthenticatedOn { get; } public DateTime? BrithDate { get; } public IEnumerable Issuers { get; } = new HashSet(); public IEnumerable Audiences { get; } = new HashSet(); public IEnumerable ClientIds { get; } = new HashSet(); public IEnumerable Scopes { get; } = new HashSet(); public IEnumerable Roles { get; } = new HashSet(); #endregion // public XUserClaimsInfoDto() { } public XUserClaimsInfoDto( string accessToken, string refreshToken, long expiresAt, IEnumerable claims ) { // // refreshToken.IsNullOrEmpty () if (claims.IsNull() || accessToken.IsNullOrEmpty()) { XException.InvalidArgs.Throw(); } // // Attach XLogin Properties ... AccessToken = accessToken; RefreshToken = refreshToken; ExpiresAt = expiresAt; // if (!claims.IsNull()) { // UserId = claims.FirstOrDefault(c => c.Type == XCustomClaims.UserId)?.Value ?? ""; UserName = claims.FirstOrDefault(c => c.Type == XCustomClaims.UserName)?.Value ?? ""; FirstName = claims.FirstOrDefault(c => c.Type == XCustomClaims.FirstName)?.Value ?? ""; LastName = claims.FirstOrDefault(c => c.Type == XCustomClaims.LastName)?.Value ?? ""; Picture = claims.FirstOrDefault(c => c.Type == XCustomClaims.Picture)?.Value ?? ""; Email = claims.FirstOrDefault(c => c.Type == XCustomClaims.Email)?.Value ?? null; PhoneNumber = claims.FirstOrDefault(c => c.Type == XCustomClaims.PhoneNumber)?.Value ?? null; // Bio = claims.FirstOrDefault(c => c.Type == XCustomClaims.Bio)?.Value ?? null; CoverImage = claims.FirstOrDefault(c => c.Type == XCustomClaims.CoverImage)?.Value ?? null; // var openToSearchStr = claims.FirstOrDefault(c => c.Type == XCustomClaims.OpenToSearch)?.Value ?? null; if (openToSearchStr.IsNullOrEmpty()) { OpenToSearch = false; } else { // var openToSearch = false; bool.TryParse(openToSearchStr, out openToSearch); // OpenToSearch = openToSearch; } // // Handle Gender ... var genders = ObjectHelper.ToEnumerableKeys(); var genderStr = claims.FirstOrDefault(c => c.Type == XCustomClaims.Gender).Value ?? null; if (genderStr.IsNullOrEmpty()) { Gender = XGender.Male; } else { Gender = genderStr.GetValue(); } // // Handle IsBanned ... var isBannedStr = claims.FirstOrDefault(c => c.Type == XCustomClaims.IsBanned).Value ?? null; if (isBannedStr.IsNullOrEmpty()) { IsBanned = false; } else { // var isBanned = false; Boolean.TryParse(isBannedStr, out isBanned); // IsBanned = isBanned; } // // Handle IsEnabled ... var isEnabledStr = claims.FirstOrDefault(c => c.Type == XCustomClaims.IsEnabled).Value ?? null; if (isEnabledStr.IsNullOrEmpty()) { IsEnabled = false; } else { // var isEnabled = false; Boolean.TryParse(isEnabledStr, out isEnabled); // IsEnabled = isEnabled; } // // Handle Email Confirmed ... var emailConfirmedStr = claims.FirstOrDefault(c => c.Type == XCustomClaims.EmailVerified).Value ?? null; if (emailConfirmedStr.IsNullOrEmpty()) { EmailConfirmed = false; } else { // var emailConfirmed = false; Boolean.TryParse(emailConfirmedStr, out emailConfirmed); // EmailConfirmed = emailConfirmed; } // // Handle PhoneNumber Confirmed ... var phoneNumberConfirmedStr = claims.FirstOrDefault(c => c.Type == XCustomClaims.PhoneNumberVerified).Value ?? null; if (phoneNumberConfirmedStr.IsNullOrEmpty()) { PhoneNumberConfirmed = false; } else { // var phoneNumberConfirmed = false; Boolean.TryParse(phoneNumberConfirmedStr, out phoneNumberConfirmed); // PhoneNumberConfirmed = phoneNumberConfirmed; } // // Handle ExpiredOn ... var expiredOnStr = claims.FirstOrDefault(c => c.Type == XCustomClaims.ExpiredOn).Value ?? null; if (expiredOnStr.IsNullOrEmpty()) { ExpiredOn = null; } else { // long expiredOn = 0; long.TryParse(expiredOnStr, out expiredOn); // ExpiredOn = expiredOn; } // // Handle AuthenticatedOn ... var authenticatedOnStr = claims.FirstOrDefault(c => c.Type == XCustomClaims.AuthenticatedOn).Value ?? null; if (authenticatedOnStr.IsNullOrEmpty()) { AuthenticatedOn = null; } else { // long authenticatedOn = 0; long.TryParse(authenticatedOnStr, out authenticatedOn); // AuthenticatedOn = authenticatedOn; } // // Handle BrithDate ... var brithDateStr = claims.FirstOrDefault(c => c.Type == XCustomClaims.BrithDate)?.Value ?? ""; if (brithDateStr.IsNullOrEmpty()) { // BrithDate = null; } else { // DateTime bDate; DateTime.TryParse(brithDateStr, out bDate); // BrithDate = bDate; } // // Collections ... Issuers = claims.Where(c => c.Type == XCustomClaims.Issuer)? .Select(c => c.Value) ?? new HashSet(); Audiences = claims.Where(c => c.Type == XCustomClaims.Audience)? .Select(c => c.Value) ?? new HashSet(); ClientIds = claims.Where(c => c.Type == XCustomClaims.ClientId)? .Select(c => c.Value) ?? new HashSet(); Scopes = claims.Where(c => c.Type == XCustomClaims.Scope)? .Select(c => c.Value) ?? new HashSet(); Roles = claims.Where(c => c.Type == XCustomClaims.Role)? .Select(c => c.Value) ?? new HashSet(); } } } }