199 lines
6.9 KiB
C#
199 lines
6.9 KiB
C#
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
|
|
{
|
|
/// <summary>
|
|
/// Generate User Info based on HubCallerContext ...
|
|
/// </summary>
|
|
/// <param name="source"></param>
|
|
/// <returns></returns>
|
|
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<XGender>();
|
|
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<XGender>();
|
|
}
|
|
#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<string>();
|
|
result.Audiences = source.User.Claims.Where(c => c.Type == XCustomClaims.Audience)?
|
|
.Select(c => c.Value) ?? new HashSet<string>();
|
|
result.ClientIds = source.User.Claims.Where(c => c.Type == XCustomClaims.ClientId)?
|
|
.Select(c => c.Value) ?? new HashSet<string>();
|
|
result.Scopes = source.User.Claims.Where(c => c.Type == XCustomClaims.Scope)?
|
|
.Select(c => c.Value) ?? new HashSet<string>();
|
|
result.Roles = source.User.Claims.Where(c => c.Type == XCustomClaims.Role)?
|
|
.Select(c => c.Value) ?? new HashSet<string>();
|
|
|
|
//
|
|
return result;
|
|
}
|
|
}
|
|
} |