:drunk: No idea what did AI did
This commit is contained in:
114
DysonNetwork.Common/Models/OidcUserInfo.cs
Normal file
114
DysonNetwork.Common/Models/OidcUserInfo.cs
Normal file
@ -0,0 +1,114 @@
|
||||
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;
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user