using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Claims;
namespace gehGassi.Web.Auth
{
///
/// Erweiterungen für ClaimsPrincipal
///
public static class UserExtensions
{
#region Customer
///
/// Gibt die Id des zugeordneten Kunden zurück
///
/// ClaimsPrincipal
/// Id des Kunden oder null wenn nicht zugeordnet
public static long? CustomerId(this ClaimsPrincipal user)
{
var selectedCustomerClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.SelectedCustomerIdClaimType);
if (selectedCustomerClaim != null && !string.IsNullOrWhiteSpace(selectedCustomerClaim.Value))
{
return long.Parse(selectedCustomerClaim.Value);
}
var customerClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.CustomerIdClaimType);
if (customerClaim != null && !string.IsNullOrWhiteSpace(customerClaim.Value))
{
return long.Parse(customerClaim.Value);
}
return null;
}
///
/// Gibt die UniqueId des zugeordneten Kunden zurück
///
/// ClaimsPrincipal
/// Id des Kunden oder null wenn nicht zugeordnet
public static Guid? CustomerUniqueId(this ClaimsPrincipal user)
{
var selectedCustomerClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.SelectedCustomerUniqueIdClaimType);
if (selectedCustomerClaim != null && !string.IsNullOrWhiteSpace(selectedCustomerClaim.Value))
{
return Guid.Parse(selectedCustomerClaim.Value);
}
var customerClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.CustomerUniqueIdClaimType);
if (customerClaim != null && !string.IsNullOrWhiteSpace(customerClaim.Value))
{
return Guid.Parse(customerClaim.Value);
}
return null;
}
///
/// Gibt den Namen des zugeordneten Kunden zurück
///
/// ClaimsPrincipal
/// Name des Kunden
public static string CustomerName(this ClaimsPrincipal user)
{
var selectedCustomerClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.SelectedCustomerNameClaimType);
if (selectedCustomerClaim != null && !string.IsNullOrWhiteSpace(selectedCustomerClaim.Value))
{
return selectedCustomerClaim.Value;
}
var customerClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.CustomerNameClaimType);
if (customerClaim != null && !string.IsNullOrWhiteSpace(customerClaim.Value))
{
return customerClaim.Value;
}
return string.Empty;
}
#endregion
#region App-User
///
/// Gibt die Id des zugeordneten App-Users zurück
///
/// ClaimsPrincipal
/// Id des App-Users oder null wenn nicht zugeordnet
public static string AppUserId(this ClaimsPrincipal user)
{
var selectedAppUserClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.SelectedAppUserIdClaimType);
if (selectedAppUserClaim != null && !string.IsNullOrWhiteSpace(selectedAppUserClaim.Value))
{
return selectedAppUserClaim.Value;
}
var appUserClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.AppUserIdClaimType);
if (appUserClaim != null && !string.IsNullOrWhiteSpace(appUserClaim.Value))
{
return appUserClaim.Value;
}
return null;
}
///
/// Gibt den Namen des zugeordneten App-Users zurück
///
/// ClaimsPrincipal
/// Name des App-Users
public static string AppUserName(this ClaimsPrincipal user)
{
var selectedAppUserClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.SelectedAppUserNameClaimType);
if (selectedAppUserClaim != null && !string.IsNullOrWhiteSpace(selectedAppUserClaim.Value))
{
return selectedAppUserClaim.Value;
}
var appUserClaim = user?.Claims.SingleOrDefault(x => x.Type == ClaimConstants.AppUserNameClaimType);
if (appUserClaim != null && !string.IsNullOrWhiteSpace(appUserClaim.Value))
{
return appUserClaim.Value;
}
return string.Empty;
}
#endregion
///
/// Gibt die Rollen eines Benutzers zurück
///
/// ClaimsPrincipal
/// Rollen des Benutzers
public static List Roles(this ClaimsPrincipal user)
{
var rolesList = new List();
var roleClaims = user?.Claims.Where(x => x.Type == ClaimTypes.Role).ToList();
if (roleClaims != null && roleClaims.Any())
{
rolesList.AddRange(from roleClaim in roleClaims where !string.IsNullOrWhiteSpace(roleClaim.Value) select roleClaim.Value);
}
return rolesList;
}
///
/// Fügt einen Claim zu einem Benutzer hinzu oder aktualisiert diesen, wenn er existiert
///
/// ClaimsPrincipal
/// Key des claims
/// Zu setzender Wert
public static void AddUpdateClaim(this ClaimsPrincipal currentPrincipal, string key, string value)
{
var identity = currentPrincipal.Identity as ClaimsIdentity;
if (identity == null)
return;
// check for existing claim and remove it
var existingClaim = identity.FindFirst(key);
if (existingClaim != null)
identity.RemoveClaim(existingClaim);
// add new claim
identity.AddClaim(new Claim(key, value ?? ""));
}
///
/// Fügt einen Claim zu einem Benutzer hinzu oder aktualisiert diesen, wenn er existiert
///
/// ClaimsIdentity
/// Key des claims
/// Zu setzender Wert
public static void AddUpdateClaim(this ClaimsIdentity identity, string key, string value)
{
// check for existing claim and remove it
var existingClaim = identity.FindFirst(key);
if (existingClaim != null)
identity.RemoveClaim(existingClaim);
// add new claim
identity.AddClaim(new Claim(key, value ?? ""));
}
}
}