Why Gemfury? Push, build, and install  RubyGems npm packages Python packages Maven artifacts PHP packages Go Modules Debian packages RPM packages NuGet packages

Repository URL to install this package:

Details    
Size: Mime:
using System;
using System.Linq;
using System.Reflection;
using System.Text;
using Fluctio.FluctioSim.EditorUtils.EditorGeneral;
using Fluctio.FluctioSim.Utils.General;
using Fluctio.FluctioSim.Utils.SerializableClasses;
using IdentityModel.OidcClient;
using IdentityModel.OidcClient.Results;
using UnityEngine;

namespace Fluctio.FluctioSim.EditorCore.AccountManagement
{
	[Serializable]
	internal class AccountInfo
	{
		[field: SerializeField] internal string AccessToken { get; private set; }
		[field: SerializeField] internal string IdentityToken { get; private set; }
		[field: SerializeField] internal string RefreshToken { get; private set; }
		[field: SerializeField] internal SerializableDateTime TokensValidTill { get; private set; }
		
		[field: SerializeField] public LicenseType LicenseType { get; private set; }
		[field: SerializeField] public SerializableDateTime LicenseValidTill { get; private set; }
		[field: SerializeField] public string LicenseGiftedBy { get; private set; }
		
		[field: SerializeField] public string Email { get; private set; }
		[field: SerializeField] public string PictureUrl { get; private set; }
		[field: SerializeField] public string GivenName { get; private set; }
		[field: SerializeField] public string FamilyName { get; private set; }
		[field: SerializeField] public bool EnableDebug { get; private set; }
		
		public AccountInfo(LoginResult loginResult)
		{
			AccessToken = loginResult.AccessToken;
			IdentityToken = loginResult.IdentityToken;
			RefreshToken = loginResult.RefreshToken;
			TokensValidTill = loginResult.AccessTokenExpiration.UtcDateTime;
			
			LicenseType = LicenseType.None;
			LicenseValidTill = DateTime.MaxValue;
			LicenseGiftedBy = "";

			var identityTokenClaims = Util.ParseJwt(IdentityToken);
			var accessTokenClaims = Util.ParseJwt(AccessToken);
			
			Email = (string)identityTokenClaims["email"] ?? throw new InvalidOperationException("Login result did not contain user's email");
			PictureUrl = (string)identityTokenClaims["picture"] ?? "";
			GivenName = (string)identityTokenClaims["given_name"] ?? "";
			FamilyName = (string)identityTokenClaims["family_name"] ?? "";
			EnableDebug = accessTokenClaims["permissions"]?.Children().Contains(DebugMode.DebugPermission) ?? false;
		}

		public void SetTokens(RefreshTokenResult refreshTokenResult)
		{
			AccessToken = refreshTokenResult.AccessToken ?? AccessToken;
			IdentityToken = refreshTokenResult.IdentityToken ?? IdentityToken;
			RefreshToken = refreshTokenResult.RefreshToken ?? RefreshToken;
			TokensValidTill = refreshTokenResult.AccessTokenExpiration.UtcDateTime;
		}

		public void SetLicenseInfo(LicenseInfo licenseInfo)
		{
			LicenseType = licenseInfo.Type;
			LicenseValidTill = licenseInfo.ExpirationDate ?? DateTime.MaxValue;
			LicenseGiftedBy = licenseInfo.GiftedBy ?? "";
		}

		public string GetDebugInfo()
		{
			return GetType()
				.GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic)
				.Aggregate(
					new StringBuilder(),
					(stringBuilder, propertyInfo) => stringBuilder.AppendFormat(
						"{0}: {1}\n",
						propertyInfo.GetDescription(),
						propertyInfo.GetValue(this)),
					stringBuilder => stringBuilder.ToString()
				);
		}
	}
}