using System; using System.Collections.Generic; using System.Linq; using Microsoft.AspNetCore.SignalR; using xCommons.Constants; using xCommons.Extensions; using xCommons.Helpers; using xIdentityModels.Constants; using xPushService.Models; namespace xPushService.Extensions { public static class ClaimsPrincipalExtensions { /// /// Generate User Info based on HubCallerContext ... /// /// /// public static XHubUserInfo GetUserInfo(this HubCallerContext source) { // XHubUserInfo result = null; // if (source.IsNull() || source.User.IsNull() || !source.User.Claims.HasChild()) { return result; } // result = new XHubUserInfo { UserId = source.User.Claims.FirstOrDefault(c => c.Type == XCustomClaims.UserId)?.Value ?? "", UserName = source.User.Claims.FirstOrDefault(c => c.Type == XCustomClaims.UserName)?.Value ?? "", FirstName = source.User.Claims.FirstOrDefault(c => c.Type == XCustomClaims.FirstName)?.Value ?? "", LastName = source.User.Claims.FirstOrDefault(c => c.Type == XCustomClaims.LastName)?.Value ?? "", Picture = source.User.Claims.FirstOrDefault(c => c.Type == XCustomClaims.Picture)?.Value ?? "", Email = source.User.Claims.FirstOrDefault(c => c.Type == XCustomClaims.Email)?.Value ?? null, PhoneNumber = source.User.Claims.FirstOrDefault(c => c.Type == XCustomClaims.PhoneNumber)?.Value ?? null, }; // #region Handle Gender ... var genders = ObjectHelper.ToEnumerableKeys(); var genderStr = source.User.Claims.FirstOrDefault(c => c.Type == XCustomClaims.Gender).Value ?? null; if (genderStr.IsNullOrEmpty()) { result.Gender = XGender.Male; } else { result.Gender = genderStr.GetValue(); } #endregion // #region Handle IsBanned ... var isBannedStr = source.User.Claims.FirstOrDefault(c => c.Type == XCustomClaims.IsBanned).Value ?? null; if (isBannedStr.IsNullOrEmpty()) { result.IsBanned = false; } else { // var isBanned = false; Boolean.TryParse(isBannedStr, out isBanned); // result.IsBanned = isBanned; } #endregion // #region Handle IsEnabled ... var isEnabledStr = source.User.Claims.FirstOrDefault(c => c.Type == XCustomClaims.IsEnabled).Value ?? null; if (isEnabledStr.IsNullOrEmpty()) { result.IsEnabled = false; } else { // var isEnabled = false; Boolean.TryParse(isEnabledStr, out isEnabled); // result.IsEnabled = isEnabled; } #endregion // #region Handle Email Confirmed ... var emailConfirmedStr = source.User.Claims.FirstOrDefault(c => c.Type == XCustomClaims.EmailVerified).Value ?? null; if (emailConfirmedStr.IsNullOrEmpty()) { result.EmailConfirmed = false; } else { // var emailConfirmed = false; Boolean.TryParse(emailConfirmedStr, out emailConfirmed); // result.EmailConfirmed = emailConfirmed; } #endregion // #region Handle PhoneNumber Confirmed ... var phoneNumberConfirmedStr = source.User.Claims.FirstOrDefault(c => c.Type == XCustomClaims.PhoneNumberVerified).Value ?? null; if (phoneNumberConfirmedStr.IsNullOrEmpty()) { result.PhoneNumberConfirmed = false; } else { // var phoneNumberConfirmed = false; Boolean.TryParse(phoneNumberConfirmedStr, out phoneNumberConfirmed); // result.PhoneNumberConfirmed = phoneNumberConfirmed; } #endregion // #region Handle ExpiredOn ... var expiredOnStr = source.User.Claims.FirstOrDefault(c => c.Type == XCustomClaims.ExpiredOn).Value ?? null; if (expiredOnStr.IsNullOrEmpty()) { result.ExpiredOn = null; } else { // long expiredOn = 0; long.TryParse(expiredOnStr, out expiredOn); // result.ExpiredOn = expiredOn; } #endregion // #region Handle AuthenticatedOn ... var authenticatedOnStr = source.User.Claims.FirstOrDefault(c => c.Type == XCustomClaims.AuthenticatedOn).Value ?? null; if (authenticatedOnStr.IsNullOrEmpty()) { result.AuthenticatedOn = null; } else { // long authenticatedOn = 0; long.TryParse(authenticatedOnStr, out authenticatedOn); // result.AuthenticatedOn = authenticatedOn; } #endregion // #region Handle BrithDate ... var brithDateStr = source.User.Claims.FirstOrDefault(c => c.Type == XCustomClaims.BrithDate)?.Value ?? ""; if (brithDateStr.IsNullOrEmpty()) { // BrithDate = null; } else { // DateTime bDate; DateTime.TryParse(brithDateStr, out bDate); // result.BrithDate = bDate; } #endregion // result.Issuers = source.User.Claims.Where(c => c.Type == XCustomClaims.Issuer)? .Select(c => c.Value) ?? new HashSet(); result.Audiences = source.User.Claims.Where(c => c.Type == XCustomClaims.Audience)? .Select(c => c.Value) ?? new HashSet(); result.ClientIds = source.User.Claims.Where(c => c.Type == XCustomClaims.ClientId)? .Select(c => c.Value) ?? new HashSet(); result.Scopes = source.User.Claims.Where(c => c.Type == XCustomClaims.Scope)? .Select(c => c.Value) ?? new HashSet(); result.Roles = source.User.Claims.Where(c => c.Type == XCustomClaims.Role)? .Select(c => c.Value) ?? new HashSet(); // return result; } } }