115 lines
3.0 KiB
C#
115 lines
3.0 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
|
|
namespace DysonNetwork.Common.Models;
|
|
|
|
/// <summary>
|
|
/// Represents user information from an OIDC provider
|
|
/// </summary>
|
|
public class OidcUserInfo
|
|
{
|
|
/// <summary>
|
|
/// The unique identifier for the user from the OIDC provider
|
|
/// </summary>
|
|
public string? UserId { get; set; }
|
|
|
|
/// <summary>
|
|
/// The user's email address
|
|
/// </summary>
|
|
public string? Email { get; set; }
|
|
|
|
/// <summary>
|
|
/// Whether the user's email has been verified by the OIDC provider
|
|
/// </summary>
|
|
public bool EmailVerified { get; set; }
|
|
|
|
/// <summary>
|
|
/// The user's given name (first name)
|
|
/// </summary>
|
|
public string? GivenName { get; set; }
|
|
|
|
/// <summary>
|
|
/// The user's family name (last name)
|
|
/// </summary>
|
|
public string? FamilyName { get; set; }
|
|
|
|
/// <summary>
|
|
/// The user's full name
|
|
/// </summary>
|
|
public string? Name { get; set; }
|
|
|
|
/// <summary>
|
|
/// The user's preferred username
|
|
/// </summary>
|
|
public string? PreferredUsername { get; set; }
|
|
|
|
/// <summary>
|
|
/// URL to the user's profile picture
|
|
/// </summary>
|
|
public string? Picture { get; set; }
|
|
|
|
/// <summary>
|
|
/// The OIDC provider name (e.g., "google", "github")
|
|
/// </summary>
|
|
public string? Provider { get; set; }
|
|
|
|
/// <summary>
|
|
/// OAuth access token from the provider
|
|
/// </summary>
|
|
public string? AccessToken { get; set; }
|
|
|
|
/// <summary>
|
|
/// OAuth refresh token from the provider (if available)
|
|
/// </summary>
|
|
public string? RefreshToken { get; set; }
|
|
|
|
/// <summary>
|
|
/// When the access token expires (if available)
|
|
/// </summary>
|
|
public DateTimeOffset? ExpiresAt { get; set; }
|
|
|
|
/// <summary>
|
|
/// Additional claims from the ID token or user info endpoint
|
|
/// </summary>
|
|
public Dictionary<string, object>? Claims { get; set; }
|
|
|
|
/// <summary>
|
|
/// Converts the user info to a metadata dictionary for storage
|
|
/// </summary>
|
|
public Dictionary<string, object> ToMetadata()
|
|
{
|
|
var metadata = new Dictionary<string, object>();
|
|
|
|
if (!string.IsNullOrWhiteSpace(UserId))
|
|
metadata["user_id"] = UserId;
|
|
|
|
if (!string.IsNullOrWhiteSpace(Email))
|
|
metadata["email"] = Email;
|
|
|
|
metadata["email_verified"] = EmailVerified;
|
|
|
|
if (!string.IsNullOrWhiteSpace(GivenName))
|
|
metadata["given_name"] = GivenName;
|
|
|
|
if (!string.IsNullOrWhiteSpace(FamilyName))
|
|
metadata["family_name"] = FamilyName;
|
|
|
|
if (!string.IsNullOrWhiteSpace(Name))
|
|
metadata["name"] = Name;
|
|
|
|
if (!string.IsNullOrWhiteSpace(PreferredUsername))
|
|
metadata["preferred_username"] = PreferredUsername;
|
|
|
|
if (!string.IsNullOrWhiteSpace(Picture))
|
|
metadata["picture"] = Picture;
|
|
|
|
if (!string.IsNullOrWhiteSpace(Provider))
|
|
metadata["provider"] = Provider;
|
|
|
|
if (ExpiresAt.HasValue)
|
|
metadata["expires_at"] = ExpiresAt.Value;
|
|
|
|
return metadata;
|
|
}
|
|
}
|