shjung 1 سال پیش
والد
کامیت
4f732c08ae
71فایلهای تغییر یافته به همراه6792 افزوده شده و 813 حذف شده
  1. BIN
      .vs/AipGateway/v16/.suo
  2. 26 0
      AipGateway.AIP/AbstractManager.cs
  3. 29 0
      AipGateway.AIP/AipConfig.cs
  4. 70 0
      AipGateway.AIP/AipFileInfo.cs
  5. 283 0
      AipGateway.AIP/AipFileManager.cs
  6. 8 1
      AipGateway.AIP/AipGateway.AIP.csproj
  7. 2 1
      AipGateway.AIP/AipLabel.cs
  8. 15 0
      AipGateway.AIP/AipTemplate.cs
  9. 230 45
      AipGateway.AIP/AuthDelegateImplementation.cs
  10. 0 266
      AipGateway.AIP/FileAipManager.cs
  11. 147 0
      AipGateway.AIP/LabelManager.cs
  12. 113 0
      AipGateway.AIP/PolicyManager.cs
  13. 99 0
      AipGateway.AIP/ProtectionManager.cs
  14. BIN
      AipGateway.AIP/bin/Debug/AipGateway.AIP.pdb
  15. BIN
      AipGateway.AIP/obj/Debug/AipGateway.AIP.csproj.AssemblyReference.cache
  16. 1 1
      AipGateway.AIP/obj/Debug/AipGateway.AIP.csproj.CoreCompileInputs.cache
  17. 0 1
      AipGateway.AIP/obj/Debug/AipGateway.AIP.csproj.FileListAbsolute.txt
  18. BIN
      AipGateway.AIP/obj/Debug/AipGateway.AIP.pdb
  19. 10 8
      AipGateway.Test/App.config
  20. 47 12
      AipGateway.Test/Program.cs
  21. BIN
      AipGateway.Test/bin/Debug/AipGateway.AIP.pdb
  22. 10 8
      AipGateway.Test/bin/Debug/AipGateway.Test.exe.config
  23. BIN
      AipGateway.Test/bin/Debug/AipGateway.Test.pdb
  24. 725 462
      AipGateway.Test/bin/Debug/App_Data/mip_data/mip/logs/mip_sdk.miplog
  25. BIN
      AipGateway.Test/bin/Debug/App_Data/mip_data/mip/mip.policies.sqlite3
  26. BIN
      AipGateway.Test/bin/Debug/App_Data/mip_data/mip/mip.protection.sqlite3
  27. BIN
      AipGateway.Test/bin/Debug/App_Data/mip_data/mip/telemetry
  28. BIN
      AipGateway.Test/bin/Debug/App_Data/mip_data/mip/telemetry-wal
  29. BIN
      AipGateway.Test/obj/Debug/AipGateway.Test.csproj.AssemblyReference.cache
  30. 10 8
      AipGateway.Test/obj/Debug/AipGateway.Test.exe.config
  31. BIN
      AipGateway.Test/obj/Debug/AipGateway.Test.pdb
  32. 104 0
      AipGateway.Viewer/AipGateway.Viewer.csproj
  33. 19 0
      AipGateway.Viewer/App.config
  34. 24 0
      AipGateway.Viewer/ComboboxItem.cs
  35. 514 0
      AipGateway.Viewer/FrmMain.Designer.cs
  36. 258 0
      AipGateway.Viewer/FrmMain.cs
  37. 163 0
      AipGateway.Viewer/FrmMain.resx
  38. BIN
      AipGateway.Viewer/LunaXP Administrative Tools.ico
  39. 22 0
      AipGateway.Viewer/Program.cs
  40. 36 0
      AipGateway.Viewer/Properties/AssemblyInfo.cs
  41. 70 0
      AipGateway.Viewer/Properties/Resources.Designer.cs
  42. 117 0
      AipGateway.Viewer/Properties/Resources.resx
  43. 29 0
      AipGateway.Viewer/Properties/Settings.Designer.cs
  44. 7 0
      AipGateway.Viewer/Properties/Settings.settings
  45. BIN
      AipGateway.Viewer/bin/Debug/AipGateway.AIP.pdb
  46. 26 0
      AipGateway.Viewer/bin/Debug/AipGateway.Viewer.exe.config
  47. BIN
      AipGateway.Viewer/bin/Debug/AipGateway.Viewer.pdb
  48. 2138 0
      AipGateway.Viewer/bin/Debug/App_Data/mip_data/mip/logs/mip_sdk.miplog
  49. BIN
      AipGateway.Viewer/bin/Debug/App_Data/mip_data/mip/mip.policies.sqlite3
  50. BIN
      AipGateway.Viewer/bin/Debug/App_Data/mip_data/mip/mip.protection.sqlite3
  51. BIN
      AipGateway.Viewer/bin/Debug/App_Data/mip_data/mip/telemetry
  52. 122 0
      AipGateway.Viewer/obj/AipGateway.Viewer.csproj.nuget.dgspec.json
  53. 19 0
      AipGateway.Viewer/obj/AipGateway.Viewer.csproj.nuget.g.props
  54. 6 0
      AipGateway.Viewer/obj/AipGateway.Viewer.csproj.nuget.g.targets
  55. 4 0
      AipGateway.Viewer/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs
  56. BIN
      AipGateway.Viewer/obj/Debug/AipGateway.Viewer.FrmMain.resources
  57. BIN
      AipGateway.Viewer/obj/Debug/AipGateway.Viewer.Properties.Resources.resources
  58. BIN
      AipGateway.Viewer/obj/Debug/AipGateway.Viewer.csproj.AssemblyReference.cache
  59. 0 0
      AipGateway.Viewer/obj/Debug/AipGateway.Viewer.csproj.CopyComplete
  60. 1 0
      AipGateway.Viewer/obj/Debug/AipGateway.Viewer.csproj.CoreCompileInputs.cache
  61. 64 0
      AipGateway.Viewer/obj/Debug/AipGateway.Viewer.csproj.FileListAbsolute.txt
  62. BIN
      AipGateway.Viewer/obj/Debug/AipGateway.Viewer.csproj.GenerateResource.cache
  63. 26 0
      AipGateway.Viewer/obj/Debug/AipGateway.Viewer.exe.config
  64. BIN
      AipGateway.Viewer/obj/Debug/AipGateway.Viewer.pdb
  65. BIN
      AipGateway.Viewer/obj/Debug/DesignTimeResolveAssemblyReferences.cache
  66. BIN
      AipGateway.Viewer/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
  67. 1174 0
      AipGateway.Viewer/obj/project.assets.json
  68. 18 0
      AipGateway.Viewer/obj/project.nuget.cache
  69. BIN
      AipGateway.Web/obj/Debug/AipGateway.Web.csproj.AssemblyReference.cache
  70. BIN
      AipGateway.Web/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache
  71. 6 0
      AipGateway.sln

BIN
.vs/AipGateway/v16/.suo


+ 26 - 0
AipGateway.AIP/AbstractManager.cs

@@ -0,0 +1,26 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.InformationProtection;
+
+namespace AipGateway.AIP
+{
+    public abstract class AbstractManager : IDisposable
+    {
+        public int LastErrNo { get; internal set; }
+        public string LastErrMsg { get; internal set; }
+
+        protected void SetError(int errNo, string errMsg1, string errMsg2 = "No Exception Message.")
+        {
+            LastErrNo = errNo;
+            LastErrMsg = errMsg1 + "\r\n" + errMsg2;
+            Console.WriteLine("AbstractManager::SetError ==> {0}, {1}, {2}", errNo, errMsg1, errMsg2);
+        }
+
+        public abstract bool CreateProfile(ref MipContext mipContext);
+        public abstract bool CreateEngine(ref Identity identity, ref AuthDelegateImplementation authDelegate);
+        public abstract void Dispose();
+    }
+}

+ 29 - 0
AipGateway.AIP/AipConfig.cs

@@ -0,0 +1,29 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AipGateway.AIP
+{
+    public enum AipAuthLoginType
+    {
+        authLoginId       = 0,      // ID 로그인(로그인 화면으로 로그인)
+        authLoginPassword = 1,      // 비밀번호 로그인(로그인 화면 없음)
+        authLoginCert     = 2,      // 인증서 로그인(로그인 화면 없음)
+    }
+
+    public class AipConfig
+    {
+        public string AppName { get; set; } = string.Empty;         // 어플리케이션 이름
+        public string AppVersion { get; set; } = string.Empty;      // 어플리케이션 버전
+        public string ClientId { get; set; } = string.Empty;        // 어플리케이션 ID(클라이언트 ID)
+        public string TenantId { get; set; } = string.Empty;        // 디렉토리(테넌트) ID
+        public string MipData { get; set; } = string.Empty;         // Mip Data Path
+        public AipAuthLoginType LoginType { get; set; } = AipAuthLoginType.authLoginPassword;
+        public string Domain { get; set; } = string.Empty;          // Domain
+        public string EMail { get; set; } = string.Empty;           // User E-Mail
+        public string SecretValue { get; set; } = string.Empty;     // 인증 비밀번호
+        public string CertThumbPrint { get; set; } = string.Empty;  // 인증서 지문
+    }
+}

+ 70 - 0
AipGateway.AIP/AipFileInfo.cs

@@ -0,0 +1,70 @@
+using System;
+using System.Collections.Generic;
+using System.Collections.ObjectModel;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.InformationProtection;
+
+namespace AipGateway.AIP
+{
+    public enum AipAssignmentMethod
+    {
+        Standard,
+        Privileged,
+        Auto,
+    }
+    public class AipContentLabel
+    {
+        public AipContentLabel(
+            AipLabel label,
+            DateTime creationTime,
+            AipAssignmentMethod assignmentMethod,
+            bool isProtectionAppliedFromLabel)
+        {
+            this.Label = label;
+            this.CreationTime = creationTime;
+            this.AssignmentMethod = assignmentMethod;
+            this.IsProtectionAppliedFromLabel = isProtectionAppliedFromLabel;
+        }
+
+        /// <summary>The actual label object applied on the content.</summary>
+        public AipLabel Label { get; private set; }
+
+        /// <summary>The creation time of the label.</summary>
+        public DateTime CreationTime { get; private set; }
+
+        /// <summary>The assignment method of the label.</summary>
+        public AipAssignmentMethod AssignmentMethod { get; private set; }
+
+        /// <summary>
+        /// Returns true if protection was applied by the label or not.
+        /// </summary>
+        public bool IsProtectionAppliedFromLabel { get; private set; }
+    }
+    public enum AipProtectionType
+    {
+        /// <summary>Protection was created from a template</summary>
+        TemplateBased,
+        /// <summary>Protection was created ad hoc</summary>
+        Custom,
+    }
+
+    public class AipProtectionHandler
+    {
+        ProtectionDescriptor ProtectionDescriptor { get; }
+        string Owner { get; }
+        string IssuedTo { get; }
+        bool IsIssuedToOwner { get; }
+        string ContentId { get; }
+        bool UseDeprecatedAlgorithms { get; }
+        bool AuditedExtractAllowed { get; }
+    }
+
+
+    public class AipFileInfo
+    {
+        public AipContentLabel Label;
+    }
+
+}

+ 283 - 0
AipGateway.AIP/AipFileManager.cs

@@ -0,0 +1,283 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Threading.Tasks;
+using Microsoft.InformationProtection;
+using Microsoft.InformationProtection.File;
+using Microsoft.InformationProtection.Policy;
+using Microsoft.InformationProtection.Protection;
+using LogLevel = Microsoft.InformationProtection.LogLevel;
+
+namespace AipGateway.AIP
+{
+    public class AipFileManager
+    {
+        public int LastErrNo { get; internal set; }
+        public string LastErrMsg { get; internal set; }
+
+        private readonly AipConfig _aipConfig;
+
+        private readonly ApplicationInfo _appInfo;
+        private AuthDelegateImplementation _authDelegate;
+
+        private MipContext _mipContext;
+
+        private readonly LabelManager _labelManager = null;
+        private readonly PolicyManager _policyManager = null;
+        private readonly ProtectionManager _protectionManager = null;
+
+        // public LabelManager GetLabelManager()
+        // {
+        //     return _labelManager;
+        // }
+        // public PolicyManager GetPolicyManager()
+        // {
+        //     return _policyManager;
+        // }
+        // public ProtectionManager GetProtectionManager()
+        // {
+        //     return _protectionManager;
+        // }
+
+        public AipFileManager(AipConfig aipConfig)
+        {
+            _aipConfig = aipConfig;
+            _appInfo = new ApplicationInfo
+            {
+                ApplicationId = aipConfig.ClientId,
+                ApplicationName = aipConfig.AppName,
+                ApplicationVersion = aipConfig.AppVersion
+            };
+            LastErrNo = 0;
+            LastErrMsg = string.Empty;
+
+            _labelManager = new LabelManager();
+            _policyManager = new PolicyManager();
+            _protectionManager = new ProtectionManager();
+        }
+        ~AipFileManager() => this.Dispose(false);
+        public void Dispose()
+        {
+            this.Dispose(true);
+            GC.SuppressFinalize((object)this);
+
+        }
+        protected virtual void Dispose(bool disposing)
+        {
+            lock (this)
+            {
+                if (_labelManager != null)
+                {
+                    _labelManager.Dispose();
+                }
+                if (_policyManager != null)
+                {
+                    _policyManager.Dispose();
+                }
+                if (_protectionManager != null)
+                {
+                    _protectionManager.Dispose();
+                }
+
+                _authDelegate = null;
+            }
+        }
+
+        private void SetError(int errNo, string errMsg1, string errMsg2 = "No Exception Message.")
+        {
+            LastErrNo = errNo;
+            LastErrMsg = errMsg1 + "\r\n" + errMsg2;
+            Console.WriteLine("AipFileManager::SetError ==> {0}, {1}, {2}", errNo, errMsg1, errMsg2);
+        }
+
+
+        public bool Initialize()
+        {
+            _authDelegate = new AuthDelegateImplementation(_aipConfig);
+            try {
+                // Initialize SDK DLLs. If DLLs are missing or wrong type, this will throw an exception
+                MIP.Initialize(MipComponent.File);
+                //MIP.Initialize(MipComponent.Policy);
+                //MIP.Initialize(MipComponent.Protection);    // Protection
+            }
+            catch (Exception ex) {
+                SetError(1, "MIP.Initialize Failed.", ex.Message);
+                return false;
+            }
+
+            // Create MipConfiguration Object
+            var mipConfiguration = new MipConfiguration(_appInfo, _aipConfig.MipData, LogLevel.Trace, false);
+
+            // Create MipContext using MipConfiguration
+            _mipContext = MIP.CreateMipContext(mipConfiguration);
+
+            return true;
+        }
+
+        public bool CreateProfile()
+        {
+            if (!_labelManager.CreateProfile(ref _mipContext))
+            {
+                SetError(11, "AipFileManager::CreateProfile ==> LabelManager::CreateProfile Failed.");
+                return false;
+            }
+            if (!_policyManager.CreateProfile(ref _mipContext))
+            {
+                SetError(12, "AipFileManager::CreateProfile ==> PolicyManager::CreateProfile Failed.");
+                return false;
+            }
+            if (!_protectionManager.CreateProfile(ref _mipContext))
+            {
+                SetError(13, "AipFileManager::CreateProfile ==> ProtectionManager::CreateProfile Failed.");
+                return false;
+            }
+
+            return true;
+        }
+
+        public bool CreateEngine()
+        {
+            Identity identity = new Identity(_aipConfig.EMail);
+
+            if (!_labelManager.CreateEngine(ref identity, ref _authDelegate))
+            {
+                SetError(21, "AipFileManager::CreateEngine ==> LabelManager::CreateEngine Failed.");
+                return false;
+            }
+            if (!_policyManager.CreateEngine(ref identity, ref _authDelegate))
+            {
+                SetError(22, "AipFileManager::CreateEngine ==> PolicyManager::CreateEngine Failed.");
+                return false;
+            }
+            if (!_protectionManager.CreateEngine(ref identity, ref _authDelegate))
+            {
+                SetError(23, "AipFileManager::CreateEngine ==> ProtectionManager::CreateEngine Failed.");
+                return false;
+            }
+
+            return true;
+        }
+
+        public void GetFileInfo(string fileName)
+        {
+            _labelManager.GetFileInfo(fileName);
+        }
+        public List<AipLabel> SensitivityLabels()
+        {
+            var result = new List<AipLabel>();
+            try
+            {
+                var labels = _labelManager.SensitivityLabels();
+                foreach (var label in labels)
+                {
+                    var aipLabel = new AipLabel
+                    {
+                        Id = label.Id,
+                        Name = label.Name,
+                        Sensitivity = label.Sensitivity,
+                        Description = label.Description,
+                        IsActive = label.IsActive,
+                    };
+                    aipLabel.Children = new List<AipLabel>();
+
+                    // If the label has an children, iterate through each. 
+                    if (label.Children.Count > 0)
+                    {
+                        foreach (var child in label.Children)
+                        {
+                            var aipChildLabel = new AipLabel
+                            {
+                                Id = child.Id,
+                                Name = child.Name,
+                                Sensitivity = child.Sensitivity,
+                                Description = child.Description,
+                                IsActive = child.IsActive,
+                            };
+
+                            aipLabel.Children.Add(aipChildLabel);
+                        }
+                    }
+                    result.Add(aipLabel);
+                }
+            }
+            catch (Exception ex)
+            {
+                SetError(31, "AipFileManager::SensitivityLabels Failed.", ex.Message);
+                result = new List<AipLabel>();
+            }
+            return result;
+        }
+
+        public List<AipLabel> ListSensitivityLabels()
+        {
+            var result = new List<AipLabel>();
+            try
+            {
+                var labels = _policyManager.ListSensitivityLabels();
+                foreach (var label in labels)
+                {
+                    var aipLabel = new AipLabel
+                    {
+                        Id = label.Id,
+                        Name = label.Name,
+                        Sensitivity = label.Sensitivity,
+                        Description = label.Description,
+                        IsActive = label.IsActive,
+                    };
+                    aipLabel.Children = new List<AipLabel>();
+
+                    // If the label has an children, iterate through each. 
+                    if (label.Children.Count > 0)
+                    {
+                        foreach (var child in label.Children)
+                        {
+                            var aipChildLabel = new AipLabel
+                            {
+                                Id = child.Id,
+                                Name = child.Name,
+                                Sensitivity = child.Sensitivity,
+                                Description = child.Description,
+                                IsActive = child.IsActive,
+                            };
+
+                            aipLabel.Children.Add(aipChildLabel);
+                        }
+                    }
+                    result.Add(aipLabel);
+                }
+            }
+            catch (Exception ex)
+            {
+                SetError(32, "AipFileManager::ListSensitivityLabels Failed.", ex.Message);
+                result = new List<AipLabel>();
+            }
+            return result;
+        }
+
+        public List<AipTemplate> GetTemplates()
+        {
+            var result = new List<AipTemplate>();
+            try
+            {
+                var labels = _protectionManager.GetTemplates();
+                foreach (var label in labels)
+                {
+                    var aipTemplate = new AipTemplate
+                    {
+                        Id = label.Id,
+                        Name = label.Name,
+                        Description = label.Description
+                    };
+
+                    result.Add(aipTemplate);
+                }
+            }
+            catch (Exception ex)
+            {
+                SetError(33, "AipFileManager::GetTemplates Failed.", ex.Message);
+                result = new List<AipTemplate>();
+            }
+            return result;
+        }
+    }
+}

+ 8 - 1
AipGateway.AIP/AipGateway.AIP.csproj

@@ -41,11 +41,18 @@
     <Reference Include="System.Xml" />
   </ItemGroup>
   <ItemGroup>
+    <Compile Include="AbstractManager.cs" />
+    <Compile Include="AipConfig.cs" />
+    <Compile Include="AipFileInfo.cs" />
     <Compile Include="AipLabel.cs" />
+    <Compile Include="AipTemplate.cs" />
     <Compile Include="AuthDelegateImplementation.cs" />
     <Compile Include="ConsentDelegateImplementation.cs" />
-    <Compile Include="FileAipManager.cs" />
+    <Compile Include="AipFileManager.cs" />
+    <Compile Include="LabelManager.cs" />
+    <Compile Include="PolicyManager.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="ProtectionManager.cs" />
     <Compile Include="Utilities.cs" />
   </ItemGroup>
   <ItemGroup>

+ 2 - 1
AipGateway.AIP/AipLabel.cs

@@ -6,8 +6,9 @@ namespace AipGateway.AIP
     {
         public string Id { get; set; }
         public string Name { get; set; }
-        public List<AipLabel> Children { get; set; }
         public int Sensitivity { get; set; }
         public string Description { get; set; }
+        public bool IsActive { get; set; }
+        public List<AipLabel> Children { get; set; }
     }
 }

+ 15 - 0
AipGateway.AIP/AipTemplate.cs

@@ -0,0 +1,15 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AipGateway.AIP
+{
+    public class AipTemplate
+    {
+        public string Id { get; set; }
+        public string Name { get; set; }
+        public string Description { get; set; }
+    }
+}

+ 230 - 45
AipGateway.AIP/AuthDelegateImplementation.cs

@@ -1,8 +1,5 @@
 using System;
-using System.Collections.Generic;
-using System.Configuration;
 using System.Linq;
-using System.Security.Claims;
 using System.Security.Cryptography.X509Certificates;
 using System.Threading.Tasks;
 using Microsoft.Identity.Client;
@@ -12,73 +9,261 @@ namespace AipGateway.AIP
 {
     public class AuthDelegateImplementation : IAuthDelegate
     {
-        private static string _clientId = "";
-        private static string thumbprint = "";
-        private static bool doCertAuth = false;
-        private static string _clientSecret = "";
+        public int LastErrNo { get; set; }
+        public string LastErrMsg { get; set; }
 
+        private readonly AipConfig _aipConfig;
 
-        private ClaimsPrincipal _claimsPrincipal;
-                
-        public AuthDelegateImplementation(string clientId, string clientSecret, ClaimsPrincipal claimsPrincipal)
+
+        public AuthDelegateImplementation(AipConfig aipConfig)
+        {
+            _aipConfig = aipConfig;
+            LastErrNo = 0;
+            LastErrMsg = String.Empty;
+        }
+
+        public void ResetError()
         {
-            _clientId = clientId;
-            _clientSecret = clientSecret;
-            _claimsPrincipal = claimsPrincipal;
+            LastErrNo = 0;
+            LastErrMsg = string.Empty;
+        }
+        private void SetError(int errNo, string errMsg1, string errMsg2 = "No Exception Message.")
+        {
+            LastErrNo = errNo;
+            LastErrMsg = errMsg1 + "\r\n" + errMsg2;
+            Console.WriteLine("AuthDelegateImplementation::SetError ==> {0}, {1}, {2}", errNo, errMsg1, errMsg2);
         }
 
         public string AcquireToken(Identity identity, string authority, string resource, string claim)
         {
-            var authResult = Task.Run(async () => await GetAccessTokenOnBehalfOfUser(authority, resource));
-            return authResult.Result;
+            Console.WriteLine("AuthDelegateImplementation::AcquireToken ==> LoginType: {0}", _aipConfig.LoginType);
+
+            if (_aipConfig.LoginType == AipAuthLoginType.authLoginPassword)
+            {
+                return AcquireTokenByPassword(identity, authority, resource, claim);
+            }
+            
+            if (_aipConfig.LoginType == AipAuthLoginType.authLoginCert)
+            {
+                return AcquireTokenByCert(identity, authority, resource, claim);
+            }
+
+            return AcquireTokenById(identity, authority, resource, claim);
         }
 
+        private string AcquireTokenByPassword(Identity identity, string authority, string resource, string claims)
+        {
+            Console.WriteLine("AuthDelegateImplementation::AcquireTokenByPassword");
+
+            AuthenticationResult result;
+            var authorityUri = new Uri(authority);
+            authority = $"https://{authorityUri.Host}/{_aipConfig.TenantId}";
+            
+            var app = ConfidentialClientApplicationBuilder.Create(_aipConfig.ClientId)
+                .WithClientSecret(_aipConfig.SecretValue)
+                .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
+                .Build();
 
-        public async Task<string> GetAccessTokenOnBehalfOfUser(string authority, string resource)
+            var scopes = new[] { resource[resource.Length - 1].Equals('/') ? $"{resource}.default" : $"{resource}/.default" };
+
+            //app.AddInMemoryTokenCache();
+
+            try
+            {
+                result = app.AcquireTokenForClient(scopes)
+                .WithTenantId(_aipConfig.TenantId)
+                .ExecuteAsync()
+                .GetAwaiter()
+                .GetResult();
+            }
+            catch (MsalServiceException ex) when (ex.Message.Contains("AADSTS70011"))
+            {
+                // Invalid scope. The scope has to be of the form "https://resourceurl/.default"
+                // Mitigation: change the scope to be as expected
+                SetError(1, "AcquireTokenByPassword.Scope provided is not supported.", ex.Message);
+                return null;
+            }
+
+            return result.AccessToken;
+        }
+
+        private string AcquireTokenByCert(Identity identity, string authority, string resource, string claims)
         {
-            IConfidentialClientApplication _app;
+            Console.WriteLine("AuthDelegateImplementation::AcquireTokenByPassword");
 
             AuthenticationResult result;
+            var authorityUri = new Uri(authority);
+            authority = $"https://{authorityUri.Host}/{_aipConfig.TenantId}";
+
+            // Read cert from local machine
+            //var certificate = ReadCertificateFromStore(certThumb);
+            var myCertificate = X509Certificate2.CreateFromCertFile(_aipConfig.CertThumbPrint);
+            X509Certificate2 certificate = new X509Certificate2(myCertificate);
+
+            // Use cert to build ClientAssertionCertificate
+            var app = ConfidentialClientApplicationBuilder.Create(_aipConfig.ClientId)
+                .WithCertificate(certificate)
+                .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
+                .Build();
 
-            if (doCertAuth)
+            // Append .default to the resource passed in to AcquireToken().
+            var scopes = new[] { resource[resource.Length - 1].Equals('/') ? $"{resource}.default" : $"{resource}/.default" };
+
+            try
+            {
+                result = app.AcquireTokenForClient(scopes).ExecuteAsync().Result;
+            }
+            catch (MsalServiceException ex) when (ex.Message.Contains("AADSTS70011"))
             {
-                // Read X509 cert from local store and build ClientAssertionCertificate.
-                X509Certificate2 cert = Utilities.ReadCertificateFromStore(thumbprint);
-                
-                // Create confidential client using certificate.
-                _app = ConfidentialClientApplicationBuilder.Create(_clientId)
-                                                .WithRedirectUri(resource)
-                                                .WithAuthority(authority)
-                                                .WithCertificate(cert)
-                                                .Build();                               
+                // Invalid scope. The scope has to be of the form "https://resourceurl/.default"
+                // Mitigation: change the scope to be as expected
+                SetError(1, "AcquireTokenByCert.Scope provided is not supported.", ex.Message);
+                return null;
             }
+            return result.AccessToken;
+        }
+
+        private string AcquireTokenById(Identity identity, string authority, string resource, string claims)
+        {
+            Console.WriteLine("AcquireTokenById::AcquireTokenByPassword");
+
+            AuthenticationResult result;
+            var authorityUri = new Uri(authority);
+            authority = $"https://{authorityUri.Host}/{_aipConfig.TenantId}";
+
+            var app = PublicClientApplicationBuilder.Create(_aipConfig.ClientId)
+                .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/nativeclient")
+                .WithAuthority(AzureCloudInstance.AzurePublic, "2e58414a-c6ae-43ff-aaf5-45ab8b78a404")
+                .Build();
+
+            var accounts = (app.GetAccountsAsync()).GetAwaiter().GetResult();
 
-            else
+            // Append .default to the resource passed in to AcquireToken().
+            var scopes = new[] { resource[resource.Length - 1].Equals('/') ? $"{resource}.default" : $"{resource}/.default" };
+            try
+            {
+                result = app.AcquireTokenInteractive(scopes)
+                    .WithAccount(accounts.FirstOrDefault())
+                    .WithPrompt(Prompt.SelectAccount)
+                    .ExecuteAsync()
+                    .ConfigureAwait(false)
+                    .GetAwaiter()
+                    .GetResult();
+            }
+            catch (Exception ex)
             {
-                // Create confidential client using client secret.
-                _app = ConfidentialClientApplicationBuilder.Create(_clientId)
-                                               .WithRedirectUri(resource)
-                                               .WithAuthority(authority)
-                                               .WithClientSecret(_clientSecret)
-                                               .Build();                                
+                SetError(1, "AcquireTokenById.Login Failed.", ex.Message);
+                return null;
             }
 
-            // Store user access token of authenticated user.
-            var ci = (ClaimsIdentity)_claimsPrincipal.Identity;
-            string userAccessToken = (string)ci.BootstrapContext;
+            return result.AccessToken;
+        }
 
+        private static X509Certificate2 ReadCertificateFromStore(string thumbprint)
+        {
+            X509Certificate2 cert = null;
+            X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
+            store.Open(OpenFlags.ReadOnly);
+            X509Certificate2Collection certCollection = store.Certificates;
+
+            // Find unexpired certificates.
+            X509Certificate2Collection currentCerts = certCollection.Find(X509FindType.FindByTimeValid, DateTime.Now, false);
 
-            // Generate a user assertion with the UPN and access token.            
-            UserAssertion userAssertion = new UserAssertion(userAccessToken, "urn:ietf:params:oauth:grant-type:jwt-bearer");
+            // From the collection of unexpired certificates, find the ones with the correct name.
+            X509Certificate2Collection signingCert = currentCerts.Find(X509FindType.FindByThumbprint, thumbprint, false);
+
+            // Return the first certificate in the collection, has the right name and is current.
+            cert = signingCert.OfType<X509Certificate2>().OrderByDescending(c => c.NotBefore).FirstOrDefault();
+            store.Close();
+            return cert;
+        }
+
+        public async Task<AuthenticationResult> AcquireTokenAsync(string authority, string resource, string claims)
+        {
+            AuthenticationResult result = null;
+
+            if (authority.ToLower().Contains("common"))
+            {
+                var authorityUri = new Uri(authority);
+                authority = String.Format("https://{0}/{1}", authorityUri.Host, _aipConfig.TenantId);
+            }
+            
+            var app = PublicClientApplicationBuilder.Create(_aipConfig.ClientId)
+                .WithAuthority(authority)
+                .WithDefaultRedirectUri()
+                .Build();
+
+            var accounts = (app.GetAccountsAsync()).GetAwaiter().GetResult();
 
             // Append .default to the resource passed in to AcquireToken().
-            List<string> scopes = new List<string>() { resource[resource.Length - 1].Equals('/') ? $"{resource}.default" : $"{resource}/.default" };
+            string[] scopes = { resource[resource.Length - 1].Equals('/') ? $"{resource}.default" : $"{resource}/.default" };
 
-            result = await _app.AcquireTokenOnBehalfOf(scopes, userAssertion)
-              .ExecuteAsync();              
+            try
+            {
+                result = await app.AcquireTokenSilent(new[] { "https://aadrm.com/user_impersonation" }, accounts.FirstOrDefault()).ExecuteAsync();
+
+                // result = await _app.AcquireTokenSilent(scopes, 
+                //         accounts.FirstOrDefault())
+                //     .ExecuteAsync();
+            }
+            catch (MsalUiRequiredException)
+            {
+                result = app.AcquireTokenInteractive(scopes)
+                    .WithAccount(accounts.FirstOrDefault())
+                    .WithPrompt(Prompt.SelectAccount)
+                    .ExecuteAsync()
+                    .ConfigureAwait(false)
+                    .GetAwaiter()
+                    .GetResult();
+            }
+
+            // Return the token. The token is sent to the resource.                           
+            return result;
+        }
 
-            // Return the token to the API caller
-            return (result.AccessToken);
-        }      
+        // private async Task<string> GetAccessTokenOnBehalfOfUser(string authority, string resource)
+        // {
+        //     IConfidentialClientApplication app;
+        //     
+        //     if (false)
+        //     {
+        //         // Read X509 cert from local store and build ClientAssertionCertificate.
+        //         X509Certificate2 cert = Utilities.ReadCertificateFromStore(_aipConfig.CertThumbPrint);
+        //         
+        //         // Create confidential client using certificate.
+        //         app = ConfidentialClientApplicationBuilder.Create(_aipConfig.ClientId)
+        //                                         .WithRedirectUri(resource)
+        //                                         .WithAuthority(authority)
+        //                                         .WithCertificate(cert)
+        //                                         .Build();                               
+        //     }
+        //
+        //     else
+        //     {
+        //         // Create confidential client using client secret.
+        //         app = ConfidentialClientApplicationBuilder.Create(_aipConfig.ClientId)
+        //                                        .WithRedirectUri(resource)
+        //                                        .WithAuthority(authority)
+        //                                        .WithClientSecret(_aipConfig.SecretValue)
+        //                                        .Build();                                
+        //     }
+        //
+        //     // Store user access token of authenticated user.
+        //     var ci = (ClaimsIdentity)_claimsPrincipal.Identity;
+        //     string userAccessToken = (string)ci.BootstrapContext;
+        //
+        //
+        //     // Generate a user assertion with the UPN and access token.            
+        //     UserAssertion userAssertion = new UserAssertion(userAccessToken, "urn:ietf:params:oauth:grant-type:jwt-bearer");
+        //
+        //     // Append .default to the resource passed in to AcquireToken().
+        //     List<string> scopes = new List<string>() { resource[resource.Length - 1].Equals('/') ? $"{resource}.default" : $"{resource}/.default" };
+        //
+        //     AuthenticationResult result = await app.AcquireTokenOnBehalfOf(scopes, userAssertion)
+        //       .ExecuteAsync();              
+        //
+        //     // Return the token to the API caller
+        //     return (result.AccessToken);
+        // }      
     }
 }

+ 0 - 266
AipGateway.AIP/FileAipManager.cs

@@ -1,266 +0,0 @@
-using System;
-using System.Collections.Generic;
-using System.IO;
-using System.Linq;
-using System.Security.Claims;
-using System.Text;
-using System.Threading.Tasks;
-using System.Web;
-using Microsoft.Identity.Client;
-using Microsoft.InformationProtection;
-using Microsoft.InformationProtection.File;
-using Microsoft.InformationProtection.Policy;
-using LogLevel = Microsoft.InformationProtection.LogLevel;
-
-namespace AipGateway.AIP
-{
-    public class FileAipManager
-    {
-        private static string _mipData;
-
-        private string _mipPath;
-        private readonly ApplicationInfo _appInfo;
-        private readonly AuthDelegateImplementation _authDelegate;
-        private IFileProfile _fileProfile = null;
-        private IFileEngine _fileEngine = null;
-        private IPolicyProfile _policyProfile = null;
-        private IPolicyEngine _policyEngine = null;
-        private MipContext _mipContext = null;
-
-        public FileAipManager(
-            string clientId, 
-            string applicationName, 
-            string applicationVersion, 
-            string tenantId, 
-            string clientSecret, 
-            string mipData, 
-            string eamil,
-            ClaimsPrincipal claimsPrincipal)
-        {
-            _appInfo = new ApplicationInfo()
-            {
-                ApplicationId = clientId,
-                ApplicationName = applicationName,
-                ApplicationVersion = applicationVersion
-            };
-            _mipData = mipData;
-            _mipPath = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, _mipData);
-
-            _authDelegate = new AuthDelegateImplementation(clientId, clientSecret, claimsPrincipal);
-
-            // var path = Path.Combine(
-            //     Directory.GetParent(Path.GetDirectoryName(new Uri(System.Reflection.Assembly.GetExecutingAssembly().CodeBase).LocalPath)).FullName,
-            //     Environment.Is64BitProcess ? "x64" : "x86");
-            
-            var path = Path.Combine(
-                Directory.GetParent(Path.GetDirectoryName(new Uri(Environment.CurrentDirectory).LocalPath)).FullName,
-                Environment.Is64BitProcess ? "x64" : "x86");
-
-            MIP.Initialize(MipComponent.File);//, path);
-
-            MipConfiguration mipConfiguration = new MipConfiguration(_appInfo, _mipData, LogLevel.Trace, false);
-            _mipContext = MIP.CreateMipContext(mipConfiguration);
-
-            Identity identity = new Identity(eamil);
-
-            // _policyProfile = CreatePolicyProfile(_appInfo, ref _authDelegate);
-            // _policyEngine = CreatePolicyEngine(identity);
-
-            _fileProfile = CreateFileProfile();
-
-            // _fileEngine = CreateFileEngine(ClaimsPrincipal.Current.FindFirst(ClaimTypes.Upn).Value, "", "en-US");
-            _fileEngine = CreateFileEngine(identity, "", "en-US");
-        }
-
-        public void Dispose()
-        {
-            _policyProfile.UnloadEngineAsync(_policyEngine.Settings.Id).Wait();
-            _policyEngine.Dispose();
-            _policyProfile.Dispose();
-            _fileEngine.Dispose();
-            _fileEngine.Dispose();
-            _mipContext.ShutDown();
-            _mipContext.Dispose();
-        }
-
-        private IPolicyProfile CreatePolicyProfile(ApplicationInfo appInfo, ref AuthDelegateImplementation authDelegate)
-        {
-            var profileSettings = new PolicyProfileSettings(_mipContext, CacheStorageType.OnDiskEncrypted);
-            var profile = Task.Run(async () => await MIP.LoadPolicyProfileAsync(profileSettings)).Result;
-            return profile;
-        }
-
-        private IPolicyEngine CreatePolicyEngine(Identity identity)
-        {
-            var engineSettings = new PolicyEngineSettings(identity.Email, _authDelegate, "", "en-US")
-            {
-                Identity = identity
-            };
-
-            var engine = Task.Run(async () => await _policyProfile.AddEngineAsync(engineSettings)).Result;
-            return engine;
-        }
-
-        private IFileProfile CreateFileProfile()
-        {
-            try
-            {
-                var profileSettings = new FileProfileSettings(_mipContext, CacheStorageType.OnDisk, new ConsentDelegateImplementation());
-                // var profileSettings = new FileProfileSettings(_mipContext, CacheStorageType.OnDiskEncrypted, new ConsentDelegateImplementation());
-
-                var fileProfile = Task.Run(async () => await MIP.LoadFileProfileAsync(profileSettings)).Result;
-                return fileProfile;
-            }
-            catch (Exception ex)
-            {
-                //throw ex;
-            }
-            return null;
-        }
-        // public Identity GetUserIdentity()
-        // {
-        //     //AuthenticationResult result = AcquireTokenAsync("https://login.microsoftonline.com/common", "https://graph.microsoft.com", null).Result;
-        //     return new Identity(result.Account.Username);
-        // }
-
-        private IFileEngine CreateFileEngine(Identity identity, string clientData, string locale)
-        {
-            try
-            {
-                var configuredFunctions = new Dictionary<FunctionalityFilterType, bool>();
-                configuredFunctions.Add(FunctionalityFilterType.DoubleKeyProtection, true);
-
-                var engineSettings = new FileEngineSettings(identity.Email, _authDelegate, clientData, locale)
-                {
-                    Identity = identity,
-                    ConfiguredFunctionality = configuredFunctions,
-                    ProtectionOnlyEngine = true
-                };
-
-                var fileEngine = Task.Run(async () => await _fileProfile.AddEngineAsync(engineSettings)).Result;
-                return fileEngine;
-            }
-            catch (Exception ex)
-            {
-                //throw ex;
-            }
-            return null;
-        }
-
-        private IFileHandler CreateFileHandler(Stream stream, string fileName)
-        {
-            IFileHandler handler;
-
-            try
-            {
-                if (stream != null)
-                {
-                    handler = Task.Run(async () => await _fileEngine.CreateFileHandlerAsync(stream, fileName, true)).Result;
-                }
-                else
-                {
-                    handler = Task.Run(async () => await _fileEngine.CreateFileHandlerAsync(fileName, fileName, true)).Result;
-                }
-
-                return handler;
-            }
-            catch (Exception ex)
-            {
-                throw ex;
-            }
-        }
-
-        public bool ApplyLabel(Stream stream, Stream outputStream, string fileName, string labelId, string justificationMessage)
-        {
-            IFileHandler handler;
-
-            try
-            {
-                // Try to create an IFileHandler using private CreateFileHandler().
-                if (stream != null)
-                {
-                    handler = CreateFileHandler(stream, fileName);
-                }
-
-                // Try to create an IFileHandler using private CreateFileHandler().
-                else
-                {
-                    handler = CreateFileHandler(null, fileName);
-                }
-
-                // Applying a label requires LabelingOptions. Hard coded values here, but could be provided by user. 
-                LabelingOptions labelingOptions = new LabelingOptions()
-                {
-                    JustificationMessage = justificationMessage,
-                    AssignmentMethod = AssignmentMethod.Standard,
-                    ExtendedProperties = new List<KeyValuePair<string, string>>()
-                };
-
-                // Set the label on the input stream or file.
-                handler.SetLabel(_fileEngine.GetLabelById(labelId), labelingOptions, new ProtectionSettings());
-
-                // Call CommitAsync to write result to output stream. 
-                // Returns a bool to indicate true or false.
-                var result = Task.Run(async () => await handler.CommitAsync(outputStream)).Result;
-
-                if (result)
-                {
-                    // Submit an audit event if the change was successful.
-                    handler.NotifyCommitSuccessful(fileName);
-                }
-                
-                return result;
-            }
-            catch (Exception ex)
-            {
-                throw ex;
-            }
-        }
-
-        public List<AipLabel> ListAllLabels()
-        {
-            try
-            {
-                //var labels = _policyEngine.ListSensitivityLabels();
-                var labels = _fileEngine.SensitivityLabels;
-                var returnLabels = new List<AipLabel>();
-
-                foreach (var label in labels)
-                {
-                    var _label = new AipLabel()
-                    {
-                        Name = label.Name,
-                        Id = label.Id,
-                        Description = label.Description,
-                        Sensitivity = label.Sensitivity
-                    };
-
-                    _label.Children = new List<AipLabel>();
-
-                    // If the label has an children, iterate through each. 
-                    if (label.Children.Count > 0)
-                    {
-                        foreach (var child in label.Children)
-                        {
-                            var _child = new AipLabel()
-                            {
-                                Name = child.Name,
-                                Id = child.Id,
-                                Description = child.Description,
-                                Sensitivity = child.Sensitivity
-                            };
-                            _label.Children.Add(_child);
-                        }
-                    }
-                    returnLabels.Add(_label);
-                }
-
-                return returnLabels;
-            }
-            catch (Exception ex)
-            {
-                throw ex;
-            }
-        }
-    }
-}

+ 147 - 0
AipGateway.AIP/LabelManager.cs

@@ -0,0 +1,147 @@
+using System;
+using System.Collections.Generic;
+using System.IO;
+using System.Linq;
+using System.Security.Policy;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.InformationProtection;
+using Microsoft.InformationProtection.File;
+
+namespace AipGateway.AIP
+{
+    public class LabelManager : AbstractManager
+    {
+        private IFileProfile _profile = null;
+        private IFileEngine _engine = null;
+
+        public LabelManager()
+        {
+        }
+        ~LabelManager() => this.Dispose(false);
+        public override void Dispose()
+        {
+            this.Dispose(true);
+            GC.SuppressFinalize((object)this);
+            
+        }
+        protected virtual void Dispose(bool disposing)
+        {
+            lock (this)
+            {
+                if (_profile != null & _engine != null)
+                {
+                    //_profile.UnloadEngineAsync(_engine.Settings.EngineId).Wait();
+                }
+                _engine = null;
+                _profile = null;
+            }
+        }
+        public override bool CreateProfile(ref MipContext mipContext)
+        {
+            try
+            {
+                var profileSettings = new FileProfileSettings(mipContext,
+                    CacheStorageType.OnDiskEncrypted,
+                    new ConsentDelegateImplementation());
+
+                // IFileProfile은 특정 애플리케이션에 대한 모든 SDK 작업의 루트입니다.
+                _profile = Task.Run(async () => await MIP.LoadFileProfileAsync(profileSettings)).Result;
+            }
+            catch (Exception e)
+            {
+                SetError(1, "LabelManager::CreateProfile Failed.", e.Message);
+                return false;
+            }
+            return true;
+        }
+
+        public override bool CreateEngine(ref Identity identity, ref AuthDelegateImplementation authDelegate)
+        {
+            try
+            {
+                authDelegate.ResetError();
+                // 보호 엔진 설정 개체를 만듭니다. 첫 번째 매개변수인 엔진 ID에 빈 문자열을 전달하면 SDK가 GUID를 생성합니다.
+                // 이메일 주소나 기타 고유한 값을 전달하면 동일한 사용자에 대해 캐시된 엔진이 매번 로드되도록 하는 데 도움이 됩니다.
+                // 로캘 설정은 지원되며 특히 클라이언트 응용 프로그램의 경우 컴퓨터 로캘을 기반으로 제공되어야 합니다.
+                var engineSettings = new FileEngineSettings(identity.Email, authDelegate, "", "en-US")
+                {
+                    // Provide the identity for service discovery.
+                    Identity = identity,
+                    // Set ProtectionOnlyEngine to true for AD RMS as labeling isn't supported
+                    //ProtectionOnlyEngine = true
+                };
+
+                _engine = Task.Run(async () => await _profile.AddEngineAsync(engineSettings)).Result;
+
+                Console.WriteLine(
+                    "File Engine Sensitivity Labels ======================================================");
+                var labels = _engine.SensitivityLabels;
+                for (int ii = 0; ii < labels.Count; ii++)
+                {
+                    Console.WriteLine("{0}: {1}, {2}", ii.ToString(), labels[ii].Id + " : " + labels[ii].Name,
+                        labels[ii].IsActive);
+                    Label label = _engine.GetLabelById(labels[ii].Id);
+                    if (label.Children.Count > 0)
+                    {
+                        for (int jj = 0; jj < label.Children.Count; jj++)
+                        {
+                            Console.WriteLine("\t{0}: {1}, {2}", jj.ToString(),
+                                label.Children[jj].Id + " : " + label.Children[jj].Name, label.Children[jj].IsActive);
+                        }
+                    }
+                    // Console.WriteLine("{0}: {1}, {2}, {3}, {4}, {5}", ii.ToString(), label.Id + " : " + label.Name, label.IsActive, 
+                    //     label.Sensitivity, label.ActionSource, label.Description);
+                }
+
+                Console.WriteLine("=======================================================================");
+            }
+            catch (Exception e)
+            {
+                if (authDelegate.LastErrNo != 0)
+                {
+                    SetError(authDelegate.LastErrNo, "LabelManager::CreateEngine Failed.", authDelegate.LastErrMsg);
+                }
+                else
+                {
+                    SetError(2, "LabelManager::CreateEngine Failed.", e.Message);
+                }
+                return false;
+            }
+
+            return true;
+        }
+        public IEnumerable<Label> SensitivityLabels()
+        {
+            return _engine.SensitivityLabels;
+        }
+
+        private IFileHandler CreateFileHandler(string inputFile, string outputFile)
+        {
+            try
+            {
+                var handler = Task.Run(async () => await _engine.CreateFileHandlerAsync(inputFile, outputFile, true))
+                    .Result;
+                return handler;
+            }
+            catch (Exception ex)
+            {
+                SetError(91, "LabelManager::CreateFileHandler Failed.", ex.Message);
+            }
+            return null;
+        }
+
+        public AipLabel GetFileInfo(string fileName)
+        {
+            var handler = CreateFileHandler(fileName, fileName);
+            if (handler == null)
+            {
+                return null;
+            }
+
+            return null;
+        }
+
+    }
+
+}

+ 113 - 0
AipGateway.AIP/PolicyManager.cs

@@ -0,0 +1,113 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.InformationProtection;
+using Microsoft.InformationProtection.Policy;
+
+namespace AipGateway.AIP
+{
+    public class PolicyManager : AbstractManager
+    {
+        private IPolicyProfile _profile = null;
+        private IPolicyEngine _engine = null;
+        public PolicyManager()
+        {
+        }
+        ~PolicyManager() => this.Dispose(false);
+
+        public override void Dispose()
+        {
+            this.Dispose(true);
+            GC.SuppressFinalize((object)this);
+
+        }
+        protected virtual void Dispose(bool disposing)
+        {
+            lock (this)
+            {
+                if (_profile != null && _engine != null)
+                {
+                    //_profile.UnloadEngineAsync(_engine.Settings.Id).Wait();
+                    _profile.Dispose();
+                    _engine.Dispose();
+
+                }
+                _engine = null;
+                _profile = null;
+            }
+        }
+
+        public override bool CreateProfile(ref MipContext mipContext)
+        {
+            try
+            {
+                var profileSettings = new PolicyProfileSettings(mipContext,
+                    CacheStorageType.OnDiskEncrypted);
+
+                // IFileProfile은 특정 애플리케이션에 대한 모든 SDK 작업의 루트입니다.
+                _profile = Task.Run(async () => await MIP.LoadPolicyProfileAsync(profileSettings)).Result;
+            }
+            catch (Exception e)
+            {
+                SetError(1, "PolicyManager::CreateProfile Failed.", e.Message);
+                return false;
+            }
+            return true;
+        }
+
+        public override bool CreateEngine(ref Identity identity, ref AuthDelegateImplementation authDelegate)
+        {
+            try
+            {
+                authDelegate.ResetError();
+                var engineSettings = new PolicyEngineSettings(identity.Email, authDelegate, "", "en-US")
+                {
+                    // Provide the identity for service discovery.
+                    Identity = identity
+                };
+
+                _engine = Task.Run(async () => await _profile.AddEngineAsync(engineSettings)).Result;
+
+                Console.WriteLine("Policy Engine Sensitivity Labels ======================================================");
+                var labels = _engine.ListSensitivityLabels();
+                for (int ii = 0; ii < labels.Count; ii++)
+                {
+                    Console.WriteLine("{0}: {1}, {2}", ii.ToString(), labels[ii].Id + " : " + labels[ii].Name, labels[ii].IsActive);
+                    Label label = _engine.GetLabelById(labels[ii].Id);
+                    if (label.Children.Count > 0)
+                    {
+                        for (int jj = 0; jj < label.Children.Count; jj++)
+                        {
+                            Console.WriteLine("\t{0}: {1}, {2}", jj.ToString(), label.Children[jj].Id + " : " + label.Children[jj].Name, label.Children[jj].IsActive);
+                        }
+                    }
+                }
+                Console.WriteLine("=======================================================================");
+            }
+            catch (Exception e)
+            {
+                if (authDelegate.LastErrNo != 0)
+                {
+                    SetError(authDelegate.LastErrNo, "PolicyManager::CreateEngine Failed.", authDelegate.LastErrMsg);
+                }
+                else
+                {
+                    SetError(2, "PolicyManager::CreateEngine Failed.", e.Message);
+                }
+
+                return false;
+            }
+            return true;
+        }
+
+        public IEnumerable<Label> ListSensitivityLabels()
+        {
+            // 사용자 주체의 경우 이는 사용자별로 다릅니다.
+            // 서비스 주체의 경우 이는 서비스별로 또는 전역적일 수 있습니다.
+            return _engine.ListSensitivityLabels();
+        }
+    }
+
+}

+ 99 - 0
AipGateway.AIP/ProtectionManager.cs

@@ -0,0 +1,99 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using Microsoft.InformationProtection;
+using Microsoft.InformationProtection.Protection;
+
+namespace AipGateway.AIP
+{
+    public class ProtectionManager : AbstractManager
+    {
+        private IProtectionProfile _profile = null;
+        private IProtectionEngine _engine = null;
+        public ProtectionManager()
+        {
+        }
+        ~ProtectionManager() => this.Dispose(false);
+
+        public override void Dispose()
+        {
+            this.Dispose(true);
+            GC.SuppressFinalize((object)this);
+
+        }
+        protected virtual void Dispose(bool disposing)
+        {
+            lock (this)
+            {
+                if (_engine != null) _engine.Dispose();
+                if (_profile != null) _profile.Dispose();
+                _profile = null;
+                _engine = null;
+            }
+        }
+
+        public override bool CreateProfile(ref MipContext mipContext)
+        {
+            try
+            {
+                var profileSettings = new ProtectionProfileSettings(mipContext,
+                    CacheStorageType.OnDisk,
+                    new ConsentDelegateImplementation());
+
+                // IProtectionProfile은 특정 애플리케이션에 대한 모든 SDK 작업의 루트입니다.
+                _profile = MIP.LoadProtectionProfile(profileSettings);
+            }
+            catch (Exception e)
+            {
+                SetError(1, "ProtectionManager::CreateProfile Failed.", e.Message);
+                return false;
+            }
+            return true;
+        }
+
+        public override bool CreateEngine(ref Identity identity, ref AuthDelegateImplementation authDelegate)
+        {
+            try
+            {
+                authDelegate.ResetError();
+                var engineSettings = new ProtectionEngineSettings(identity.Email, authDelegate, "", "")
+                {
+                    Identity = identity
+                };
+
+                _engine = Task.Run(async () => await _profile.AddEngineAsync(engineSettings)).Result;
+
+                Console.WriteLine("Protection Engine Templates ======================================================");
+                var templates = _engine.GetTemplates();
+                for (int ii = 0; ii < templates.Count; ii++)
+                {
+                    Console.WriteLine("{0}: {1}, {2}", ii.ToString(), templates[ii].Id + " : " + templates[ii].Name, templates[ii].Description);
+                }
+                Console.WriteLine("=======================================================================");
+            }
+            catch (Exception e)
+            {
+                if (authDelegate.LastErrNo != 0)
+                {
+                    SetError(authDelegate.LastErrNo, "ProtectionManager::CreateEngine Failed.", authDelegate.LastErrMsg);
+                }
+                else
+                {
+                    SetError(2, "ProtectionManager::CreateEngine Failed.", e.Message);
+                }
+
+                return false;
+            }
+
+            return true;
+        }
+        
+        public List<TemplateDescriptor> GetTemplates()
+        {
+            return _engine.GetTemplates();
+        }
+
+    }
+}

BIN
AipGateway.AIP/bin/Debug/AipGateway.AIP.pdb


BIN
AipGateway.AIP/obj/Debug/AipGateway.AIP.csproj.AssemblyReference.cache


+ 1 - 1
AipGateway.AIP/obj/Debug/AipGateway.AIP.csproj.CoreCompileInputs.cache

@@ -1 +1 @@
-a3bc980eb5be4e8044c4d168c6ba73272917b922
+c45f64a320612d207782f78c65967f8d15e83026

+ 0 - 1
AipGateway.AIP/obj/Debug/AipGateway.AIP.csproj.FileListAbsolute.txt

@@ -53,4 +53,3 @@ C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.AIP\bin\Debug\System.Memory.dll
 C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.AIP\bin\Debug\System.Numerics.Vectors.dll
 C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.AIP\bin\Debug\System.Runtime.CompilerServices.Unsafe.dll
 C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.AIP\obj\Debug\AipGateway.AIP.csproj.CopyComplete
-C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.AIP\obj\Debug\AipGateway.AIP.csproj.AssemblyReference.cache

BIN
AipGateway.AIP/obj/Debug/AipGateway.AIP.pdb


+ 10 - 8
AipGateway.Test/App.config

@@ -5,14 +5,16 @@
     </startup>
 
 	<appSettings>
-		<add key="ApplicationName" value="AIP Gateway RESTFull Service"/>
-		<add key="ApplicationVersion" value="1.0.0.0"/>
+		<add key="AppName" value="AIP Gateway RESTFull Service"/>
+		<add key="AppVersion" value="1.0.0.0"/>
 
-		<add key="ida:Domain" value="AIP.SPA.Files"/>
-		<add key="ida:EMail" value="SeungHo@kangfamily.site"/>
-		<add key="ida:TenantId" value="2e58414a-c6ae-43ff-aaf5-45ab8b78a404"/>
-		<add key="ida:ClientId" value="e627e824-9035-4094-8c10-7b5ab92e23fd"/>
-		<add key="ida:ClientSecret" value="mdK8Q~tEo1ib~sQNxLc4JoNbwUJNPrY1rHLLEbta"/>
-		<add key="MipData" value="App_Data\mip_data"/>
+		<add key="aip:ClientId" value="0e225915-3be3-419c-aa04-284d7de5e16b"/>
+		<add key="aip:TenantId" value="2e58414a-c6ae-43ff-aaf5-45ab8b78a404"/>
+		<add key="aip:MipData" value="App_Data\mip_data"/>
+		<add key="aip:LoginType" value="authLoginPassword"/>
+		<add key="aip:Domain" value="AIP.SPA.Files"/>
+		<add key="aip:EMail" value="SeungHo@kangfamily.site"/>
+		<add key="aip:SecretValue" value="CvW8Q~0iANtLN1Y2EXR_nVyYb_tQTDwjW-Z7Ndg3"/>
+		<add key="aip:CertThumbPrint" value=""/>
 	</appSettings>
 </configuration>

+ 47 - 12
AipGateway.Test/Program.cs

@@ -11,25 +11,37 @@ namespace AipGateway.Test
 {
     class Program
     {
-        private static FileAipManager _aipManager;
-
-        private static string email = ConfigurationManager.AppSettings["ida:EMail"];
-        private static string tenantId = ConfigurationManager.AppSettings["ida:TenantId"];
-        private static string clientId = ConfigurationManager.AppSettings["ida:ClientId"];
-        private static string clientSecret = ConfigurationManager.AppSettings["ida:ClientSecret"];
-        private static string mipData = ConfigurationManager.AppSettings["MipData"];
-        private static string applicationName = ConfigurationManager.AppSettings["ApplicationName"];
-        private static string applicationVersion = ConfigurationManager.AppSettings["ApplicationVersion"];
+        private static AipFileManager _aipFileManager;
 
         static void Main(string[] args)
         {
-            _aipManager = new FileAipManager(clientId, applicationName, applicationVersion, tenantId, clientSecret, mipData, email, ClaimsPrincipal.Current);
+            AipConfig aipConfig = new AipConfig
+            {
+                AppName        = ConfigurationManager.AppSettings["AppName"], // 어플리케이션 이름
+                AppVersion     = ConfigurationManager.AppSettings["AppVersion"], // 어플리케이션 버전
+                ClientId       = ConfigurationManager.AppSettings["aip:ClientId"], // 어플리케이션 ID(클라이언트 ID)
+                TenantId       = ConfigurationManager.AppSettings["aip:TenantId"], // 디렉토리(테넌트) ID
+                MipData        = ConfigurationManager.AppSettings["aip:MipData"], // Mip Data Path
+                Domain         = ConfigurationManager.AppSettings["aip:Domain"], // Domain
+                EMail          = ConfigurationManager.AppSettings["aip:EMail"], // User E-Mail
+                SecretValue    = ConfigurationManager.AppSettings["aip:SecretValue"], // 인증 비밀번호
+                CertThumbPrint = ConfigurationManager.AppSettings["aip:CertThumbPrint"] // 인증서 지문
+            };
+            string tempLoginType = ConfigurationManager.AppSettings["aip:LoginType"];
+            AipAuthLoginType loginType = (AipAuthLoginType)Enum.Parse(typeof(AipAuthLoginType), tempLoginType, true);
+            aipConfig.LoginType = loginType;
+
+            _aipFileManager = new AipFileManager(aipConfig);
+
+            _aipFileManager.Initialize();
+            _aipFileManager.CreateProfile();
+            _aipFileManager.CreateEngine();
 
-            List<AipLabel> aipLabels = _aipManager.ListAllLabels();
+            Console.WriteLine("SensitivityLabels=======================================================================");
+            List<AipLabel> aipLabels = _aipFileManager.SensitivityLabels();
             foreach (var label in aipLabels)
             {
                 Console.WriteLine(string.Format("ID: {0}, NAME: {1}", label.Id, label.Name));
-
                 if (label.Children.Count > 0)
                 {
                     foreach (AipLabel child in label.Children)
@@ -38,6 +50,29 @@ namespace AipGateway.Test
                     }
                 }
             }
+            Console.WriteLine("ListSensitivityLabels=======================================================================");
+
+            List<AipLabel> labels2 = _aipFileManager.ListSensitivityLabels();
+            foreach (var v in labels2)
+            {
+                Console.WriteLine("Label List: {0}, {1}, {2}", v.Id, v.Name, v.IsActive);
+                if (v.Children.Count > 0)
+                {
+                    foreach (AipLabel child in v.Children)
+                    {
+                        Console.WriteLine("\tID: {0}, NAME: {1}", child.Id, child.Name);
+                    }
+                }
+            }
+            Console.WriteLine("GetTemplates=======================================================================");
+            List<AipTemplate> templates = _aipFileManager.GetTemplates();
+            foreach (var v in templates)
+            {
+                Console.WriteLine("Template: {0}, {1}, {2}", v.Id, v.Name, v.Description);
+            }
+            Console.WriteLine("=======================================================================");
+
+            Console.WriteLine("Press a key to continue...");
             Console.ReadKey();
         }
     }

BIN
AipGateway.Test/bin/Debug/AipGateway.AIP.pdb


+ 10 - 8
AipGateway.Test/bin/Debug/AipGateway.Test.exe.config

@@ -4,14 +4,16 @@
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
   </startup>
   <appSettings>
-    <add key="ApplicationName" value="AIP Gateway RESTFull Service" />
-    <add key="ApplicationVersion" value="1.0.0.0" />
-    <add key="ida:Domain" value="AIP.SPA.Files" />
-    <add key="ida:EMail" value="SeungHo@kangfamily.site" />
-    <add key="ida:TenantId" value="2e58414a-c6ae-43ff-aaf5-45ab8b78a404" />
-    <add key="ida:ClientId" value="e627e824-9035-4094-8c10-7b5ab92e23fd" />
-    <add key="ida:ClientSecret" value="mdK8Q~tEo1ib~sQNxLc4JoNbwUJNPrY1rHLLEbta" />
-    <add key="MipData" value="App_Data\mip_data" />
+    <add key="AppName" value="AIP Gateway RESTFull Service" />
+    <add key="AppVersion" value="1.0.0.0" />
+    <add key="aip:ClientId" value="0e225915-3be3-419c-aa04-284d7de5e16b" />
+    <add key="aip:TenantId" value="2e58414a-c6ae-43ff-aaf5-45ab8b78a404" />
+    <add key="aip:MipData" value="App_Data\mip_data" />
+    <add key="aip:LoginType" value="authLoginPassword" />
+    <add key="aip:Domain" value="AIP.SPA.Files" />
+    <add key="aip:EMail" value="SeungHo@kangfamily.site" />
+    <add key="aip:SecretValue" value="CvW8Q~0iANtLN1Y2EXR_nVyYb_tQTDwjW-Z7Ndg3" />
+    <add key="aip:CertThumbPrint" value="" />
   </appSettings>
   <runtime>
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

BIN
AipGateway.Test/bin/Debug/AipGateway.Test.pdb


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 725 - 462
AipGateway.Test/bin/Debug/App_Data/mip_data/mip/logs/mip_sdk.miplog


BIN
AipGateway.Test/bin/Debug/App_Data/mip_data/mip/mip.policies.sqlite3


BIN
AipGateway.Test/bin/Debug/App_Data/mip_data/mip/mip.protection.sqlite3


BIN
AipGateway.Test/bin/Debug/App_Data/mip_data/mip/telemetry


BIN
AipGateway.Test/bin/Debug/App_Data/mip_data/mip/telemetry-wal


BIN
AipGateway.Test/obj/Debug/AipGateway.Test.csproj.AssemblyReference.cache


+ 10 - 8
AipGateway.Test/obj/Debug/AipGateway.Test.exe.config

@@ -4,14 +4,16 @@
     <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
   </startup>
   <appSettings>
-    <add key="ApplicationName" value="AIP Gateway RESTFull Service" />
-    <add key="ApplicationVersion" value="1.0.0.0" />
-    <add key="ida:Domain" value="AIP.SPA.Files" />
-    <add key="ida:EMail" value="SeungHo@kangfamily.site" />
-    <add key="ida:TenantId" value="2e58414a-c6ae-43ff-aaf5-45ab8b78a404" />
-    <add key="ida:ClientId" value="e627e824-9035-4094-8c10-7b5ab92e23fd" />
-    <add key="ida:ClientSecret" value="mdK8Q~tEo1ib~sQNxLc4JoNbwUJNPrY1rHLLEbta" />
-    <add key="MipData" value="App_Data\mip_data" />
+    <add key="AppName" value="AIP Gateway RESTFull Service" />
+    <add key="AppVersion" value="1.0.0.0" />
+    <add key="aip:ClientId" value="0e225915-3be3-419c-aa04-284d7de5e16b" />
+    <add key="aip:TenantId" value="2e58414a-c6ae-43ff-aaf5-45ab8b78a404" />
+    <add key="aip:MipData" value="App_Data\mip_data" />
+    <add key="aip:LoginType" value="authLoginPassword" />
+    <add key="aip:Domain" value="AIP.SPA.Files" />
+    <add key="aip:EMail" value="SeungHo@kangfamily.site" />
+    <add key="aip:SecretValue" value="CvW8Q~0iANtLN1Y2EXR_nVyYb_tQTDwjW-Z7Ndg3" />
+    <add key="aip:CertThumbPrint" value="" />
   </appSettings>
   <runtime>
     <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">

BIN
AipGateway.Test/obj/Debug/AipGateway.Test.pdb


+ 104 - 0
AipGateway.Viewer/AipGateway.Viewer.csproj

@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props" Condition="Exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\Microsoft.Common.props')" />
+  <PropertyGroup>
+    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
+    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
+    <ProjectGuid>{BF3F579D-8540-4A9B-B716-F1787A446C8C}</ProjectGuid>
+    <OutputType>Exe</OutputType>
+    <RootNamespace>AipGateway.Viewer</RootNamespace>
+    <AssemblyName>AipGateway.Viewer</AssemblyName>
+    <TargetFrameworkVersion>v4.8</TargetFrameworkVersion>
+    <FileAlignment>512</FileAlignment>
+    <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
+    <Deterministic>true</Deterministic>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugSymbols>true</DebugSymbols>
+    <DebugType>full</DebugType>
+    <Optimize>false</Optimize>
+    <OutputPath>bin\Debug\</OutputPath>
+    <DefineConstants>DEBUG;TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
+    <PlatformTarget>AnyCPU</PlatformTarget>
+    <DebugType>pdbonly</DebugType>
+    <Optimize>true</Optimize>
+    <OutputPath>bin\Release\</OutputPath>
+    <DefineConstants>TRACE</DefineConstants>
+    <ErrorReport>prompt</ErrorReport>
+    <WarningLevel>4</WarningLevel>
+  </PropertyGroup>
+  <PropertyGroup>
+    <StartupObject />
+  </PropertyGroup>
+  <PropertyGroup>
+    <ApplicationIcon>LunaXP Administrative Tools.ico</ApplicationIcon>
+  </PropertyGroup>
+  <ItemGroup>
+    <Reference Include="System" />
+    <Reference Include="System.Core" />
+    <Reference Include="System.Xml.Linq" />
+    <Reference Include="System.Data.DataSetExtensions" />
+    <Reference Include="Microsoft.CSharp" />
+    <Reference Include="System.Data" />
+    <Reference Include="System.Deployment" />
+    <Reference Include="System.Drawing" />
+    <Reference Include="System.Net.Http" />
+    <Reference Include="System.Windows.Forms" />
+    <Reference Include="System.Xml" />
+  </ItemGroup>
+  <ItemGroup>
+    <Compile Include="ComboboxItem.cs" />
+    <Compile Include="FrmMain.cs">
+      <SubType>Form</SubType>
+    </Compile>
+    <Compile Include="FrmMain.Designer.cs">
+      <DependentUpon>FrmMain.cs</DependentUpon>
+    </Compile>
+    <Compile Include="Program.cs" />
+    <Compile Include="Properties\AssemblyInfo.cs" />
+    <EmbeddedResource Include="FrmMain.resx">
+      <DependentUpon>FrmMain.cs</DependentUpon>
+    </EmbeddedResource>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
+    <None Include="Properties\Settings.settings">
+      <Generator>SettingsSingleFileGenerator</Generator>
+      <LastGenOutput>Settings.Designer.cs</LastGenOutput>
+    </None>
+    <Compile Include="Properties\Settings.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DependentUpon>Settings.settings</DependentUpon>
+      <DesignTimeSharedInput>True</DesignTimeSharedInput>
+    </Compile>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="App.config" />
+  </ItemGroup>
+  <ItemGroup>
+    <ProjectReference Include="..\AipGateway.AIP\AipGateway.AIP.csproj">
+      <Project>{a783fdc9-3028-464b-911b-c0350345c9b3}</Project>
+      <Name>AipGateway.AIP</Name>
+    </ProjectReference>
+  </ItemGroup>
+  <ItemGroup>
+    <PackageReference Include="System.Configuration.ConfigurationManager">
+      <Version>8.0.0</Version>
+    </PackageReference>
+  </ItemGroup>
+  <ItemGroup>
+    <Content Include="LunaXP Administrative Tools.ico" />
+  </ItemGroup>
+  <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
+</Project>

+ 19 - 0
AipGateway.Viewer/App.config

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<configuration>
+    <startup> 
+        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
+    </startup>
+	<appSettings>
+		<add key="AppName" value="AIP Gateway RESTFull Service"/>
+		<add key="AppVersion" value="1.0.0.0"/>
+
+		<add key="aip:ClientId" value="0e225915-3be3-419c-aa04-284d7de5e16b"/>
+		<add key="aip:TenantId" value="2e58414a-c6ae-43ff-aaf5-45ab8b78a404"/>
+		<add key="aip:MipData" value="App_Data\mip_data"/>
+		<add key="aip:LoginType" value="authLoginPassword"/>
+		<add key="aip:Domain" value="AIP.SPA.Files"/>
+		<add key="aip:EMail" value="SeungHo@kangfamily.site"/>
+		<add key="aip:SecretValue" value="CvW8Q~0iANtLN1Y2EXR_nVyYb_tQTDwjW-Z7Ndg3"/>
+		<add key="aip:CertThumbPrint" value=""/>
+	</appSettings>
+</configuration>

+ 24 - 0
AipGateway.Viewer/ComboboxItem.cs

@@ -0,0 +1,24 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+
+namespace AipGateway.Viewer
+{
+    public class ComboboxItem
+    {
+        public string Text { get; set; }
+        public object Value { get; set; }
+
+        public ComboboxItem(string value, string text)
+        {
+            Value = value;
+            Text = text;
+        }
+        public override string ToString()
+        {
+            return Value + ", " + Text;
+        }
+    }
+}

+ 514 - 0
AipGateway.Viewer/FrmMain.Designer.cs

@@ -0,0 +1,514 @@
+
+namespace AipGateway.Viewer
+{
+    partial class FrmMain
+    {
+        /// <summary>
+        /// 필수 디자이너 변수입니다.
+        /// </summary>
+        private System.ComponentModel.IContainer components = null;
+
+        /// <summary>
+        /// 사용 중인 모든 리소스를 정리합니다.
+        /// </summary>
+        /// <param name="disposing">관리되는 리소스를 삭제해야 하면 true이고, 그렇지 않으면 false입니다.</param>
+        protected override void Dispose(bool disposing)
+        {
+            if (disposing && (components != null))
+            {
+                components.Dispose();
+            }
+            base.Dispose(disposing);
+        }
+
+        #region Windows Form 디자이너에서 생성한 코드
+
+        /// <summary>
+        /// 디자이너 지원에 필요한 메서드입니다. 
+        /// 이 메서드의 내용을 코드 편집기로 수정하지 마세요.
+        /// </summary>
+        private void InitializeComponent()
+        {
+            System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(FrmMain));
+            this.CboAuthLoginType = new System.Windows.Forms.ComboBox();
+            this.label1 = new System.Windows.Forms.Label();
+            this.label2 = new System.Windows.Forms.Label();
+            this.label3 = new System.Windows.Forms.Label();
+            this.TxtTenantId = new System.Windows.Forms.TextBox();
+            this.TxtClientId = new System.Windows.Forms.TextBox();
+            this.TxtAppName = new System.Windows.Forms.TextBox();
+            this.TxtAppVer = new System.Windows.Forms.TextBox();
+            this.label5 = new System.Windows.Forms.Label();
+            this.TxtDomain = new System.Windows.Forms.TextBox();
+            this.label6 = new System.Windows.Forms.Label();
+            this.TxtEMail = new System.Windows.Forms.TextBox();
+            this.label7 = new System.Windows.Forms.Label();
+            this.TxtMipData = new System.Windows.Forms.TextBox();
+            this.label8 = new System.Windows.Forms.Label();
+            this.TxtSecretValue = new System.Windows.Forms.TextBox();
+            this.label9 = new System.Windows.Forms.Label();
+            this.TxtCertThumbPrint = new System.Windows.Forms.TextBox();
+            this.label10 = new System.Windows.Forms.Label();
+            this.BtnInitialize = new System.Windows.Forms.Button();
+            this.BtnSingOut = new System.Windows.Forms.Button();
+            this.label4 = new System.Windows.Forms.Label();
+            this.TxtInputFile = new System.Windows.Forms.TextBox();
+            this.BtnFileSelect = new System.Windows.Forms.Button();
+            this.TxtActualFile = new System.Windows.Forms.TextBox();
+            this.label11 = new System.Windows.Forms.Label();
+            this.TxtLog = new System.Windows.Forms.RichTextBox();
+            this.BtnLogClear = new System.Windows.Forms.Button();
+            this.label12 = new System.Windows.Forms.Label();
+            this.CboFileLabel = new System.Windows.Forms.ComboBox();
+            this.CboProtection = new System.Windows.Forms.ComboBox();
+            this.label13 = new System.Windows.Forms.Label();
+            this.CboPolicyLabel = new System.Windows.Forms.ComboBox();
+            this.label14 = new System.Windows.Forms.Label();
+            this.BtnGetInfo = new System.Windows.Forms.Button();
+            this.SuspendLayout();
+            // 
+            // CboAuthLoginType
+            // 
+            this.CboAuthLoginType.Cursor = System.Windows.Forms.Cursors.Hand;
+            this.CboAuthLoginType.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.CboAuthLoginType.FormattingEnabled = true;
+            this.CboAuthLoginType.Items.AddRange(new object[] {
+            "   authLoginId",
+            "   authLoginPassword",
+            "   authLoginCert"});
+            this.CboAuthLoginType.Location = new System.Drawing.Point(787, 68);
+            this.CboAuthLoginType.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+            this.CboAuthLoginType.Name = "CboAuthLoginType";
+            this.CboAuthLoginType.Size = new System.Drawing.Size(202, 23);
+            this.CboAuthLoginType.TabIndex = 9;
+            // 
+            // label1
+            // 
+            this.label1.AutoSize = true;
+            this.label1.Location = new System.Drawing.Point(379, 8);
+            this.label1.Name = "label1";
+            this.label1.Size = new System.Drawing.Size(53, 15);
+            this.label1.TabIndex = 1;
+            this.label1.Text = "TenantId";
+            // 
+            // label2
+            // 
+            this.label2.AutoSize = true;
+            this.label2.Location = new System.Drawing.Point(733, 10);
+            this.label2.Name = "label2";
+            this.label2.Size = new System.Drawing.Size(48, 15);
+            this.label2.TabIndex = 2;
+            this.label2.Text = "ClientId";
+            // 
+            // label3
+            // 
+            this.label3.AutoSize = true;
+            this.label3.Location = new System.Drawing.Point(15, 9);
+            this.label3.Name = "label3";
+            this.label3.Size = new System.Drawing.Size(68, 15);
+            this.label3.TabIndex = 3;
+            this.label3.Text = "Application";
+            // 
+            // TxtTenantId
+            // 
+            this.TxtTenantId.Location = new System.Drawing.Point(439, 6);
+            this.TxtTenantId.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.TxtTenantId.Name = "TxtTenantId";
+            this.TxtTenantId.Size = new System.Drawing.Size(265, 23);
+            this.TxtTenantId.TabIndex = 2;
+            this.TxtTenantId.Text = "0e225915-3be3-419c-aa04-284d7de5e16b";
+            // 
+            // TxtClientId
+            // 
+            this.TxtClientId.Location = new System.Drawing.Point(787, 6);
+            this.TxtClientId.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.TxtClientId.Name = "TxtClientId";
+            this.TxtClientId.Size = new System.Drawing.Size(265, 23);
+            this.TxtClientId.TabIndex = 3;
+            // 
+            // TxtAppName
+            // 
+            this.TxtAppName.Location = new System.Drawing.Point(87, 6);
+            this.TxtAppName.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.TxtAppName.Name = "TxtAppName";
+            this.TxtAppName.Size = new System.Drawing.Size(193, 23);
+            this.TxtAppName.TabIndex = 0;
+            // 
+            // TxtAppVer
+            // 
+            this.TxtAppVer.Location = new System.Drawing.Point(285, 6);
+            this.TxtAppVer.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.TxtAppVer.Name = "TxtAppVer";
+            this.TxtAppVer.Size = new System.Drawing.Size(67, 23);
+            this.TxtAppVer.TabIndex = 1;
+            // 
+            // label5
+            // 
+            this.label5.AutoSize = true;
+            this.label5.Location = new System.Drawing.Point(716, 70);
+            this.label5.Name = "label5";
+            this.label5.Size = new System.Drawing.Size(67, 15);
+            this.label5.TabIndex = 9;
+            this.label5.Text = "Auth Login";
+            // 
+            // TxtDomain
+            // 
+            this.TxtDomain.Location = new System.Drawing.Point(87, 34);
+            this.TxtDomain.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.TxtDomain.Name = "TxtDomain";
+            this.TxtDomain.Size = new System.Drawing.Size(265, 23);
+            this.TxtDomain.TabIndex = 5;
+            // 
+            // label6
+            // 
+            this.label6.AutoSize = true;
+            this.label6.Location = new System.Drawing.Point(31, 38);
+            this.label6.Name = "label6";
+            this.label6.Size = new System.Drawing.Size(50, 15);
+            this.label6.TabIndex = 10;
+            this.label6.Text = "Domain";
+            // 
+            // TxtEMail
+            // 
+            this.TxtEMail.Location = new System.Drawing.Point(787, 38);
+            this.TxtEMail.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.TxtEMail.Name = "TxtEMail";
+            this.TxtEMail.Size = new System.Drawing.Size(265, 23);
+            this.TxtEMail.TabIndex = 4;
+            // 
+            // label7
+            // 
+            this.label7.AutoSize = true;
+            this.label7.Location = new System.Drawing.Point(740, 41);
+            this.label7.Name = "label7";
+            this.label7.Size = new System.Drawing.Size(41, 15);
+            this.label7.TabIndex = 12;
+            this.label7.Text = "E-Mail";
+            // 
+            // TxtMipData
+            // 
+            this.TxtMipData.Location = new System.Drawing.Point(439, 34);
+            this.TxtMipData.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.TxtMipData.Name = "TxtMipData";
+            this.TxtMipData.Size = new System.Drawing.Size(265, 23);
+            this.TxtMipData.TabIndex = 6;
+            // 
+            // label8
+            // 
+            this.label8.AutoSize = true;
+            this.label8.Location = new System.Drawing.Point(376, 38);
+            this.label8.Name = "label8";
+            this.label8.Size = new System.Drawing.Size(57, 15);
+            this.label8.TabIndex = 14;
+            this.label8.Text = "Mip Data";
+            // 
+            // TxtSecretValue
+            // 
+            this.TxtSecretValue.Location = new System.Drawing.Point(87, 64);
+            this.TxtSecretValue.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.TxtSecretValue.Name = "TxtSecretValue";
+            this.TxtSecretValue.Size = new System.Drawing.Size(265, 23);
+            this.TxtSecretValue.TabIndex = 7;
+            // 
+            // label9
+            // 
+            this.label9.AutoSize = true;
+            this.label9.Location = new System.Drawing.Point(7, 68);
+            this.label9.Name = "label9";
+            this.label9.Size = new System.Drawing.Size(74, 15);
+            this.label9.TabIndex = 16;
+            this.label9.Text = "Secret Value";
+            // 
+            // TxtCertThumbPrint
+            // 
+            this.TxtCertThumbPrint.Location = new System.Drawing.Point(439, 65);
+            this.TxtCertThumbPrint.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.TxtCertThumbPrint.Name = "TxtCertThumbPrint";
+            this.TxtCertThumbPrint.Size = new System.Drawing.Size(265, 23);
+            this.TxtCertThumbPrint.TabIndex = 8;
+            // 
+            // label10
+            // 
+            this.label10.AutoSize = true;
+            this.label10.Location = new System.Drawing.Point(362, 69);
+            this.label10.Name = "label10";
+            this.label10.Size = new System.Drawing.Size(71, 15);
+            this.label10.TabIndex = 18;
+            this.label10.Text = "Cert Thumb";
+            // 
+            // BtnInitialize
+            // 
+            this.BtnInitialize.Cursor = System.Windows.Forms.Cursors.Hand;
+            this.BtnInitialize.Location = new System.Drawing.Point(787, 98);
+            this.BtnInitialize.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.BtnInitialize.Name = "BtnInitialize";
+            this.BtnInitialize.Size = new System.Drawing.Size(129, 22);
+            this.BtnInitialize.TabIndex = 19;
+            this.BtnInitialize.Text = "Initialize";
+            this.BtnInitialize.UseVisualStyleBackColor = true;
+            this.BtnInitialize.Click += new System.EventHandler(this.BtnInitialize_Click);
+            // 
+            // BtnSingOut
+            // 
+            this.BtnSingOut.Cursor = System.Windows.Forms.Cursors.Hand;
+            this.BtnSingOut.Enabled = false;
+            this.BtnSingOut.Location = new System.Drawing.Point(923, 98);
+            this.BtnSingOut.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.BtnSingOut.Name = "BtnSingOut";
+            this.BtnSingOut.Size = new System.Drawing.Size(129, 22);
+            this.BtnSingOut.TabIndex = 20;
+            this.BtnSingOut.Text = "Sign Out";
+            this.BtnSingOut.UseVisualStyleBackColor = true;
+            this.BtnSingOut.Click += new System.EventHandler(this.BtnSingOut_Click);
+            // 
+            // label4
+            // 
+            this.label4.AutoSize = true;
+            this.label4.Location = new System.Drawing.Point(26, 191);
+            this.label4.Name = "label4";
+            this.label4.Size = new System.Drawing.Size(57, 15);
+            this.label4.TabIndex = 21;
+            this.label4.Text = "Input File";
+            // 
+            // TxtInputFile
+            // 
+            this.TxtInputFile.Location = new System.Drawing.Point(87, 186);
+            this.TxtInputFile.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.TxtInputFile.Name = "TxtInputFile";
+            this.TxtInputFile.ReadOnly = true;
+            this.TxtInputFile.Size = new System.Drawing.Size(541, 23);
+            this.TxtInputFile.TabIndex = 22;
+            // 
+            // BtnFileSelect
+            // 
+            this.BtnFileSelect.Cursor = System.Windows.Forms.Cursors.Hand;
+            this.BtnFileSelect.Location = new System.Drawing.Point(633, 186);
+            this.BtnFileSelect.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.BtnFileSelect.Name = "BtnFileSelect";
+            this.BtnFileSelect.Size = new System.Drawing.Size(70, 22);
+            this.BtnFileSelect.TabIndex = 23;
+            this.BtnFileSelect.Text = "Select";
+            this.BtnFileSelect.UseVisualStyleBackColor = true;
+            this.BtnFileSelect.Click += new System.EventHandler(this.BtnFileSelect_Click);
+            // 
+            // TxtActualFile
+            // 
+            this.TxtActualFile.Location = new System.Drawing.Point(87, 215);
+            this.TxtActualFile.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.TxtActualFile.Name = "TxtActualFile";
+            this.TxtActualFile.ReadOnly = true;
+            this.TxtActualFile.Size = new System.Drawing.Size(616, 23);
+            this.TxtActualFile.TabIndex = 25;
+            // 
+            // label11
+            // 
+            this.label11.AutoSize = true;
+            this.label11.Location = new System.Drawing.Point(19, 219);
+            this.label11.Name = "label11";
+            this.label11.Size = new System.Drawing.Size(63, 15);
+            this.label11.TabIndex = 24;
+            this.label11.Text = "Actual File";
+            // 
+            // TxtLog
+            // 
+            this.TxtLog.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom) 
+            | System.Windows.Forms.AnchorStyles.Left) 
+            | System.Windows.Forms.AnchorStyles.Right)));
+            this.TxtLog.BackColor = System.Drawing.SystemColors.WindowText;
+            this.TxtLog.Font = new System.Drawing.Font("D2Coding", 11.25F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+            this.TxtLog.ForeColor = System.Drawing.SystemColors.Window;
+            this.TxtLog.Location = new System.Drawing.Point(4, 248);
+            this.TxtLog.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.TxtLog.Name = "TxtLog";
+            this.TxtLog.ReadOnly = true;
+            this.TxtLog.Size = new System.Drawing.Size(1056, 306);
+            this.TxtLog.TabIndex = 26;
+            this.TxtLog.Text = "";
+            // 
+            // BtnLogClear
+            // 
+            this.BtnLogClear.Cursor = System.Windows.Forms.Cursors.Hand;
+            this.BtnLogClear.Location = new System.Drawing.Point(982, 218);
+            this.BtnLogClear.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.BtnLogClear.Name = "BtnLogClear";
+            this.BtnLogClear.Size = new System.Drawing.Size(70, 22);
+            this.BtnLogClear.TabIndex = 27;
+            this.BtnLogClear.Text = "Clear";
+            this.BtnLogClear.UseVisualStyleBackColor = true;
+            this.BtnLogClear.Click += new System.EventHandler(this.BtnLogClear_Click);
+            // 
+            // label12
+            // 
+            this.label12.AutoSize = true;
+            this.label12.Location = new System.Drawing.Point(23, 98);
+            this.label12.Name = "label12";
+            this.label12.Size = new System.Drawing.Size(57, 15);
+            this.label12.TabIndex = 28;
+            this.label12.Text = "File Label";
+            // 
+            // CboFileLabel
+            // 
+            this.CboFileLabel.Cursor = System.Windows.Forms.Cursors.Hand;
+            this.CboFileLabel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.CboFileLabel.FormattingEnabled = true;
+            this.CboFileLabel.Items.AddRange(new object[] {
+            "   authLoginId",
+            "   authLoginPassword",
+            "   authLoginCert"});
+            this.CboFileLabel.Location = new System.Drawing.Point(87, 94);
+            this.CboFileLabel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+            this.CboFileLabel.Name = "CboFileLabel";
+            this.CboFileLabel.Size = new System.Drawing.Size(616, 23);
+            this.CboFileLabel.TabIndex = 29;
+            // 
+            // CboProtection
+            // 
+            this.CboProtection.Cursor = System.Windows.Forms.Cursors.Hand;
+            this.CboProtection.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.CboProtection.FormattingEnabled = true;
+            this.CboProtection.Items.AddRange(new object[] {
+            "   authLoginId",
+            "   authLoginPassword",
+            "   authLoginCert"});
+            this.CboProtection.Location = new System.Drawing.Point(87, 156);
+            this.CboProtection.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+            this.CboProtection.Name = "CboProtection";
+            this.CboProtection.Size = new System.Drawing.Size(616, 23);
+            this.CboProtection.TabIndex = 31;
+            // 
+            // label13
+            // 
+            this.label13.AutoSize = true;
+            this.label13.Location = new System.Drawing.Point(17, 159);
+            this.label13.Name = "label13";
+            this.label13.Size = new System.Drawing.Size(62, 15);
+            this.label13.TabIndex = 30;
+            this.label13.Text = "Protection";
+            // 
+            // CboPolicyLabel
+            // 
+            this.CboPolicyLabel.Cursor = System.Windows.Forms.Cursors.Hand;
+            this.CboPolicyLabel.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
+            this.CboPolicyLabel.FormattingEnabled = true;
+            this.CboPolicyLabel.Items.AddRange(new object[] {
+            "   authLoginId",
+            "   authLoginPassword",
+            "   authLoginCert"});
+            this.CboPolicyLabel.Location = new System.Drawing.Point(87, 125);
+            this.CboPolicyLabel.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+            this.CboPolicyLabel.Name = "CboPolicyLabel";
+            this.CboPolicyLabel.Size = new System.Drawing.Size(616, 23);
+            this.CboPolicyLabel.TabIndex = 33;
+            // 
+            // label14
+            // 
+            this.label14.AutoSize = true;
+            this.label14.Location = new System.Drawing.Point(10, 128);
+            this.label14.Name = "label14";
+            this.label14.Size = new System.Drawing.Size(71, 15);
+            this.label14.TabIndex = 32;
+            this.label14.Text = "Policy Label";
+            // 
+            // BtnGetInfo
+            // 
+            this.BtnGetInfo.Cursor = System.Windows.Forms.Cursors.Hand;
+            this.BtnGetInfo.Location = new System.Drawing.Point(719, 186);
+            this.BtnGetInfo.Margin = new System.Windows.Forms.Padding(3, 2, 3, 2);
+            this.BtnGetInfo.Name = "BtnGetInfo";
+            this.BtnGetInfo.Size = new System.Drawing.Size(70, 22);
+            this.BtnGetInfo.TabIndex = 34;
+            this.BtnGetInfo.Text = "Info";
+            this.BtnGetInfo.UseVisualStyleBackColor = true;
+            this.BtnGetInfo.Click += new System.EventHandler(this.BtnGetInfo_Click);
+            // 
+            // FrmMain
+            // 
+            this.AutoScaleDimensions = new System.Drawing.SizeF(7F, 15F);
+            this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
+            this.ClientSize = new System.Drawing.Size(1063, 555);
+            this.Controls.Add(this.BtnGetInfo);
+            this.Controls.Add(this.CboPolicyLabel);
+            this.Controls.Add(this.label14);
+            this.Controls.Add(this.CboProtection);
+            this.Controls.Add(this.label13);
+            this.Controls.Add(this.CboFileLabel);
+            this.Controls.Add(this.label12);
+            this.Controls.Add(this.BtnLogClear);
+            this.Controls.Add(this.TxtLog);
+            this.Controls.Add(this.TxtActualFile);
+            this.Controls.Add(this.label11);
+            this.Controls.Add(this.BtnFileSelect);
+            this.Controls.Add(this.TxtInputFile);
+            this.Controls.Add(this.label4);
+            this.Controls.Add(this.BtnSingOut);
+            this.Controls.Add(this.BtnInitialize);
+            this.Controls.Add(this.TxtCertThumbPrint);
+            this.Controls.Add(this.label10);
+            this.Controls.Add(this.TxtSecretValue);
+            this.Controls.Add(this.label9);
+            this.Controls.Add(this.TxtMipData);
+            this.Controls.Add(this.label8);
+            this.Controls.Add(this.TxtEMail);
+            this.Controls.Add(this.label7);
+            this.Controls.Add(this.TxtDomain);
+            this.Controls.Add(this.label6);
+            this.Controls.Add(this.label5);
+            this.Controls.Add(this.TxtAppVer);
+            this.Controls.Add(this.TxtAppName);
+            this.Controls.Add(this.TxtClientId);
+            this.Controls.Add(this.TxtTenantId);
+            this.Controls.Add(this.label3);
+            this.Controls.Add(this.label2);
+            this.Controls.Add(this.label1);
+            this.Controls.Add(this.CboAuthLoginType);
+            this.Font = new System.Drawing.Font("맑은 고딕", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(129)));
+            this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon")));
+            this.Margin = new System.Windows.Forms.Padding(3, 4, 3, 4);
+            this.MaximizeBox = false;
+            this.Name = "FrmMain";
+            this.Text = "Azure Information File Viewer";
+            this.ResumeLayout(false);
+            this.PerformLayout();
+
+        }
+
+        #endregion
+
+        private System.Windows.Forms.ComboBox CboAuthLoginType;
+        private System.Windows.Forms.Label label1;
+        private System.Windows.Forms.Label label2;
+        private System.Windows.Forms.Label label3;
+        private System.Windows.Forms.TextBox TxtTenantId;
+        private System.Windows.Forms.TextBox TxtClientId;
+        private System.Windows.Forms.TextBox TxtAppName;
+        private System.Windows.Forms.TextBox TxtAppVer;
+        private System.Windows.Forms.Label label5;
+        private System.Windows.Forms.TextBox TxtDomain;
+        private System.Windows.Forms.Label label6;
+        private System.Windows.Forms.TextBox TxtEMail;
+        private System.Windows.Forms.Label label7;
+        private System.Windows.Forms.TextBox TxtMipData;
+        private System.Windows.Forms.Label label8;
+        private System.Windows.Forms.TextBox TxtSecretValue;
+        private System.Windows.Forms.Label label9;
+        private System.Windows.Forms.TextBox TxtCertThumbPrint;
+        private System.Windows.Forms.Label label10;
+        private System.Windows.Forms.Button BtnInitialize;
+        private System.Windows.Forms.Button BtnSingOut;
+        private System.Windows.Forms.Label label4;
+        private System.Windows.Forms.TextBox TxtInputFile;
+        private System.Windows.Forms.Button BtnFileSelect;
+        private System.Windows.Forms.TextBox TxtActualFile;
+        private System.Windows.Forms.Label label11;
+        private System.Windows.Forms.RichTextBox TxtLog;
+        private System.Windows.Forms.Button BtnLogClear;
+        private System.Windows.Forms.Label label12;
+        private System.Windows.Forms.ComboBox CboFileLabel;
+        private System.Windows.Forms.ComboBox CboProtection;
+        private System.Windows.Forms.Label label13;
+        private System.Windows.Forms.ComboBox CboPolicyLabel;
+        private System.Windows.Forms.Label label14;
+        private System.Windows.Forms.Button BtnGetInfo;
+    }
+}
+

+ 258 - 0
AipGateway.Viewer/FrmMain.cs

@@ -0,0 +1,258 @@
+using System;
+using System.Collections.Generic;
+using System.ComponentModel;
+using System.Configuration;
+using System.Data;
+using System.Drawing;
+using System.IO;
+using System.Linq;
+using System.Text;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+using AipGateway.AIP;
+
+namespace AipGateway.Viewer
+{
+    public partial class FrmMain : Form
+    {
+        private AipConfig _aipConfig;
+        private AipFileManager _aipFileManager = null;
+        private BindingList<object> fileLabels = new BindingList<object>();
+        private BindingList<object> policyLabels = new BindingList<object>();
+        private BindingList<object> protectTemplates = new BindingList<object>();
+
+        public FrmMain()
+        {
+            InitializeComponent();
+            Initialize();
+        }
+
+        private void Initialize()
+        {
+            TxtLog.Clear();
+        
+            // CboFileLabel.DataSource = fileLabels;
+            // CboFileLabel.DisplayMember = "Display";
+            // CboFileLabel.ValueMember = "Value";
+            //
+            // CboPolicyLabel.DataSource = policyLabels;
+            // CboPolicyLabel.DisplayMember = "Display";
+            // CboPolicyLabel.ValueMember = "Value";
+            //
+            // CboProtection.DataSource = protectTemplates;
+            // CboProtection.DisplayMember = "Display";
+            // CboProtection.ValueMember = "Value";
+            // string value = CboFileLabel.SelectedValue.ToString();
+
+            CboFileLabel.Items.Clear();
+            CboPolicyLabel.Items.Clear();
+            CboProtection.Items.Clear();
+            CboAuthLoginType.SelectedIndex = -1;
+
+            _aipConfig = new AipConfig
+            {
+                AppName = ConfigurationManager.AppSettings["AppName"], // 어플리케이션 이름
+                AppVersion = ConfigurationManager.AppSettings["AppVersion"], // 어플리케이션 버전
+                ClientId = ConfigurationManager.AppSettings["aip:ClientId"], // 어플리케이션 ID(클라이언트 ID)
+                TenantId = ConfigurationManager.AppSettings["aip:TenantId"], // 디렉토리(테넌트) ID
+                MipData = ConfigurationManager.AppSettings["aip:MipData"], // Mip Data Path
+                Domain = ConfigurationManager.AppSettings["aip:Domain"], // Domain
+                EMail = ConfigurationManager.AppSettings["aip:EMail"], // User E-Mail
+                SecretValue = ConfigurationManager.AppSettings["aip:SecretValue"], // 인증 비밀번호
+                CertThumbPrint = ConfigurationManager.AppSettings["aip:CertThumbPrint"] // 인증서 지문
+            };
+            string tempLoginType = ConfigurationManager.AppSettings["aip:LoginType"];
+            AipAuthLoginType loginType = (AipAuthLoginType)Enum.Parse(typeof(AipAuthLoginType), tempLoginType, true);
+            _aipConfig.LoginType = loginType;
+            CboAuthLoginType.SelectedIndex = Convert.ToInt32(loginType);
+
+            TxtAppName.Text = _aipConfig.AppName;
+            TxtAppVer.Text = _aipConfig.AppVersion;
+            TxtClientId.Text = _aipConfig.ClientId;
+            TxtTenantId.Text = _aipConfig.TenantId;
+            TxtMipData.Text = _aipConfig.MipData;
+            TxtDomain.Text = _aipConfig.Domain;
+            TxtEMail.Text = _aipConfig.EMail;
+            TxtSecretValue.Text = _aipConfig.SecretValue;
+            TxtCertThumbPrint.Text = _aipConfig.CertThumbPrint;
+        }
+
+        private void BtnFileSelect_Click(object sender, EventArgs e)
+        {
+            String inputFileName = ShowFileOpenDialog();
+            TxtInputFile.Text = inputFileName;
+            if (inputFileName != "")
+            {
+                string filePath = Path.GetDirectoryName(inputFileName);
+                string fileName = Path.GetFileNameWithoutExtension(inputFileName);
+                string fileExtension = Path.GetExtension(inputFileName);
+
+                TxtActualFile.Text = filePath + Path.DirectorySeparatorChar + fileName + "-out" + fileExtension;
+            }
+            else
+            {
+                TxtActualFile.Text = "";
+            }
+        }
+        private string ShowFileOpenDialog()
+        {
+            //파일오픈창 생성 및 설정
+            OpenFileDialog ofd = new OpenFileDialog();
+            ofd.Title = "AIP 테스트 파일 선택";
+            //ofd.FileName = "test";
+            ofd.Filter = "모든 파일 (*.*) | *.*";
+
+            //파일 오픈창 로드
+            DialogResult dr = ofd.ShowDialog();
+
+            //OK버튼 클릭시
+            if (dr == DialogResult.OK)
+            {
+                // File명과 확장자를 가지고 온다.
+                string fileName = ofd.SafeFileName;
+                // File경로와 File명을 모두 가지고 온다.
+                string fileFullName = ofd.FileName;
+                // File경로만 가지고 온다.
+                string filePath = fileFullName.Replace(fileName, "");
+
+                //File경로 + 파일명 리턴
+                return fileFullName;
+            }
+            //취소버튼 클릭시 또는 ESC키로 파일창을 종료 했을경우
+            else if (dr == DialogResult.Cancel)
+            {
+                return "";
+            }
+
+            return "";
+        }
+
+        private void BtnInitialize_Click(object sender, EventArgs e)
+        {
+            _aipConfig.AppName = TxtAppName.Text.Trim();
+            _aipConfig.AppVersion = TxtAppVer.Text.Trim();
+            _aipConfig.ClientId = TxtClientId.Text.Trim();
+            _aipConfig.TenantId = TxtTenantId.Text.Trim();
+            _aipConfig.MipData = TxtMipData.Text.Trim();
+            _aipConfig.Domain = TxtDomain.Text.Trim();
+            _aipConfig.EMail = TxtEMail.Text.Trim();
+            _aipConfig.SecretValue = TxtSecretValue.Text.Trim();
+            _aipConfig.CertThumbPrint = TxtCertThumbPrint.Text.Trim();
+            int loginType = CboAuthLoginType.SelectedIndex;
+            if (loginType < 0)
+            {
+                MessageBox.Show("인증 로그인 방법을 선택 하세요.", "Initialize Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
+                CboAuthLoginType.Focus();
+                return;
+            }
+            _aipConfig.LoginType = (AipAuthLoginType)Enum.ToObject(typeof(AipAuthLoginType), loginType);
+
+            SignOut();
+            SignIn();
+        }
+
+        private void BtnSingOut_Click(object sender, EventArgs e)
+        {
+            SignOut();
+        }
+
+        private void SignIn()
+        {
+            _aipFileManager = new AipFileManager(_aipConfig);
+
+            _aipFileManager.Initialize();
+            _aipFileManager.CreateProfile();
+            _aipFileManager.CreateEngine();
+
+            StringBuilder sb = new StringBuilder();
+
+            sb.AppendLine("SensitivityLabels=======================================================================");
+        
+            BindingList<object> fileLabelList = new BindingList<object>();
+
+            List<AipLabel> aipLabels = _aipFileManager.SensitivityLabels();
+            foreach (var label in aipLabels)
+            {
+                ComboboxItem item = new ComboboxItem(label.Id, label.Name);
+                CboFileLabel.Items.Add(item);
+
+                sb.AppendLine(string.Format("ID: {0}, NAME: {1}", label.Id, label.Name));
+                if (label.Children.Count > 0)
+                {
+                    foreach (AipLabel child in label.Children)
+                    {
+                        ComboboxItem childItem = new ComboboxItem(child.Id, "\t" + child.Name);
+                        CboFileLabel.Items.Add(childItem);
+                        sb.AppendLine(string.Format("\tID: {0}, NAME: {1}", child.Id, child.Name));
+                    }
+                }
+            }
+
+            sb.AppendLine("ListSensitivityLabels=======================================================================");
+            List<AipLabel> labels2 = _aipFileManager.ListSensitivityLabels();
+            foreach (var v in labels2)
+            {
+                ComboboxItem item = new ComboboxItem(v.Id, v.Name);
+                CboPolicyLabel.Items.Add(item);
+                sb.AppendLine(string.Format("Label List: {0}, {1}, {2}", v.Id, v.Name, v.IsActive));
+                if (v.Children.Count > 0)
+                {
+                    foreach (AipLabel child in v.Children)
+                    {
+                        ComboboxItem childItem = new ComboboxItem(child.Id, "\t" + child.Name);
+                        CboPolicyLabel.Items.Add(childItem);
+                        sb.AppendLine(string.Format("\tID: {0}, NAME: {1}", child.Id, child.Name));
+                    }
+                }
+            }
+
+            sb.AppendLine("GetTemplates=======================================================================");
+            List<AipTemplate> templates = _aipFileManager.GetTemplates();
+            foreach (var v in templates)
+            {
+                ComboboxItem item = new ComboboxItem(v.Id, v.Name);
+                CboProtection.Items.Add(item);
+                sb.AppendLine(string.Format("Template: {0}, {1}, {2}", v.Id, v.Name, v.Description));
+            }
+            sb.AppendLine("=======================================================================");
+            TxtLog.Text = sb.ToString();
+
+            BtnInitialize.Enabled = false;
+            BtnSingOut.Enabled = true;
+        }
+        private void SignOut()
+        {
+            BtnInitialize.Enabled = true;
+            BtnSingOut.Enabled = false;
+
+            CboFileLabel.Items.Clear();
+            CboPolicyLabel.Items.Clear();
+            CboProtection.Items.Clear();
+
+            if (_aipFileManager != null)
+            {
+                _aipFileManager = null;
+            }
+        }
+
+        private void AppendLog(string log)
+        {
+            TxtLog.Text += log + "\r\n";
+        }
+        private void BtnLogClear_Click(object sender, EventArgs e)
+        {
+            TxtLog.Clear();
+        }
+
+        private void BtnGetInfo_Click(object sender, EventArgs e)
+        {
+            TxtLog.Clear();
+            string inputFileName = TxtInputFile.Text.Trim();
+            if (inputFileName.Equals(""))
+            {
+                AppendLog("파일을 선택하세요.");
+                return;
+            }
+        }
+    }
+}

+ 163 - 0
AipGateway.Viewer/FrmMain.resx

@@ -0,0 +1,163 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace" />
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" use="required" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+              <xsd:attribute ref="xml:space" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
+  <data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+    <value>
+        AAABAAEAICAAAAAAAACoCAAAFgAAACgAAAAgAAAAQAAAAAEACAAAAAAAgAQAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAfj88AAA6WAAASnMAg0I+AJVLRwCsVlIArlZSAKthXQC5b2sAv3x5AFmHMwBcjTQAaaA8AHm5
+        RQB6u0UAf7ZRAI3FXwCXyW8AoM56AAAAuQAAYpYAAGedADFqiQAQcKUAAADBAAAA3AAAAP4AAEncAABV
+        /wA5RP4AJVf/AEhI/wBIc/8AOoWsAACBwwASic0AAIvSAACS3AArjMIADZjlABag8QAbo/UAOKjnACWq
+        /wBbqtoAUa/nAGG05wBmvPIAa8b/AKWlpQCmpqYAr6+vALCwsAC3t7cAuLi4AMWGgwDbtbMAxOGtAI6r
+        /wDCwsIAxcXFAM7OzgDy8vIA////AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAxMTEAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAbGhQAAAAAAAAAAAAAAAAAAAAAAA8NCwAA
+        AAAAAAAZGxsaFBQAAAAAAAAAAAAAAAAAAAwPDw0LCwAAAAAAABsbGxoUFBQAAAAAAAAAAAAAAAAADw8P
+        DQsLCwAAAAAAGxsbGhQUFAAAAAAAAAAAAAAAAAAPDw8NCwsLAAAAAAAbHjs7IBQUAAAAAAAAAAAAAAAA
+        AA8SOjoTCwsAAAAAADs7IR8dIBQAAAAAAAAAAAAAAAAAOjoTEQ8TCwAAAAAAAAAaHB8fIAAAAAAAAAAA
+        AAAAAAATERERERETAAAAAAYFAQAaGhwAAAAAAAAAAAAAAAAAAAAREREQDQAAAAQGBgUBAQAAAAAAAAAA
+        AAAAAAAAAEgxMUgQDQAAAAAABgYGBQEBAQAAAAAAAAAAAAAAAEgxMRUVP0hIAAAAAAAGBgYFAQEBAAAA
+        AAAAAAAAAEgxMRUiPz8/FS0AAiYmSAYKOTk4AQEAAAAAAAAAAEgxMRUiPz8/Pz8VL0gjFgNIOTk4CQY4
+        AQAAAAAAAAAxMRUiPz8/Pz8/PxUwSAM3Pkg4CQkJCQk4AAAAAAAAADEVPz8/Pz8/Pz8/FTFIMjY+PkgJ
+        CQkIBQAAAAAAAAAAMRU/Pz8/Pz8/Pz8VMUgyNz4+A0gIBQAAAAAAAAAAAAAxFT8/Pz8/Pz8iFTExSDI9
+        Pj4DLAAAAAAAAAAAAAAAADEVPz8/Pz8iFTExSEgyPT4+PgMsAAAAAAAAAAAAAAAAMRU/Pz8iFTExSEgy
+        Mj0+PhcDLCwAAAAAAAAAAAAAAAAxFT8iFTExSEgyMj0+PhcDLCxIAAAAAAAAAAAAAAAAADEVGDExSEgj
+        Az4+PhcDLCxIAAAAAAAAAAAAAAAAAAAAMTExMUgAACUDPhcDLCxIAAAAAAAAAAAAAAAAAAAAAAAxMTEx
+        AAAAKAMDLCxIAAAAAAAAAAAAAAAAAAAAAAAAADExLicAAAAqLCwsAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        KycCAAAAACwsLCwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAALCwpJgAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAApJAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+        AAAAAAAAAAAAAP///4//+P4H/+B4A/+AOAH/gBgA/4AIAP+ACAD/gAgA/4AAAP+AAAH/AAAB/AAAB/AA
+        AAfAAAAHAAAABwAAAAcAAAAHAAAADwAAAD8AAAD/AAAA/wAAAP8AAAP/AAAP/wAAP/8AAP//AAH//wIB
+        //+OAf///gf///8f////////
+</value>
+  </data>
+</root>

BIN
AipGateway.Viewer/LunaXP Administrative Tools.ico


+ 22 - 0
AipGateway.Viewer/Program.cs

@@ -0,0 +1,22 @@
+using System;
+using System.Collections.Generic;
+using System.Linq;
+using System.Threading.Tasks;
+using System.Windows.Forms;
+
+namespace AipGateway.Viewer
+{
+    static class Program
+    {
+        /// <summary>
+        /// 해당 애플리케이션의 주 진입점입니다.
+        /// </summary>
+        [STAThread]
+        static void Main()
+        {
+            Application.EnableVisualStyles();
+            Application.SetCompatibleTextRenderingDefault(false);
+            Application.Run(new FrmMain());
+        }
+    }
+}

+ 36 - 0
AipGateway.Viewer/Properties/AssemblyInfo.cs

@@ -0,0 +1,36 @@
+using System.Reflection;
+using System.Runtime.CompilerServices;
+using System.Runtime.InteropServices;
+
+// 어셈블리에 대한 일반 정보는 다음 특성 집합을 통해 
+// 제어됩니다. 어셈블리와 관련된 정보를 수정하려면
+// 이러한 특성 값을 변경하세요.
+[assembly: AssemblyTitle("AipGateway.Viewer")]
+[assembly: AssemblyDescription("")]
+[assembly: AssemblyConfiguration("")]
+[assembly: AssemblyCompany("")]
+[assembly: AssemblyProduct("AipGateway.Viewer")]
+[assembly: AssemblyCopyright("Copyright ©  2024")]
+[assembly: AssemblyTrademark("")]
+[assembly: AssemblyCulture("")]
+
+// ComVisible을 false로 설정하면 이 어셈블리의 형식이 COM 구성 요소에 
+// 표시되지 않습니다. COM에서 이 어셈블리의 형식에 액세스하려면
+// 해당 형식에 대해 ComVisible 특성을 true로 설정하세요.
+[assembly: ComVisible(false)]
+
+// 이 프로젝트가 COM에 노출되는 경우 다음 GUID는 typelib의 ID를 나타냅니다.
+[assembly: Guid("bf3f579d-8540-4a9b-b716-f1787a446c8c")]
+
+// 어셈블리의 버전 정보는 다음 네 가지 값으로 구성됩니다.
+//
+//      주 버전
+//      부 버전 
+//      빌드 번호
+//      수정 버전
+//
+// 모든 값을 지정하거나 아래와 같이 '*'를 사용하여 빌드 번호 및 수정 번호를
+// 기본값으로 할 수 있습니다.
+// [assembly: AssemblyVersion("1.0.*")]
+[assembly: AssemblyVersion("1.0.0.0")]
+[assembly: AssemblyFileVersion("1.0.0.0")]

+ 70 - 0
AipGateway.Viewer/Properties/Resources.Designer.cs

@@ -0,0 +1,70 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     이 코드는 도구를 사용하여 생성되었습니다.
+//     런타임 버전:4.0.30319.42000
+//
+//     파일 내용을 변경하면 잘못된 동작이 발생할 수 있으며, 코드를 다시 생성하면
+//     이러한 변경 내용이 손실됩니다.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+
+namespace AipGateway.Viewer.Properties
+{
+    /// <summary>
+    ///   지역화된 문자열 등을 찾기 위한 강력한 형식의 리소스 클래스입니다.
+    /// </summary>
+    // 이 클래스는 ResGen 또는 Visual Studio와 같은 도구를 통해 StronglyTypedResourceBuilder
+    // 클래스에서 자동으로 생성되었습니다.
+    // 멤버를 추가하거나 제거하려면 .ResX 파일을 편집한 다음 /str 옵션을 사용하여
+    // ResGen을 다시 실행하거나 VS 프로젝트를 다시 빌드하십시오.
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")]
+    [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    internal class Resources
+    {
+
+        private static global::System.Resources.ResourceManager resourceMan;
+
+        private static global::System.Globalization.CultureInfo resourceCulture;
+
+        [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
+        internal Resources()
+        {
+        }
+
+        /// <summary>
+        ///   이 클래스에서 사용하는 캐시된 ResourceManager 인스턴스를 반환합니다.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Resources.ResourceManager ResourceManager
+        {
+            get
+            {
+                if ((resourceMan == null))
+                {
+                    global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("AipGateway.Viewer.Properties.Resources", typeof(Resources).Assembly);
+                    resourceMan = temp;
+                }
+                return resourceMan;
+            }
+        }
+
+        /// <summary>
+        ///   이 강력한 형식의 리소스 클래스를 사용하여 모든 리소스 조회에 대해 현재 스레드의 CurrentUICulture 속성을
+        ///   재정의합니다.
+        /// </summary>
+        [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)]
+        internal static global::System.Globalization.CultureInfo Culture
+        {
+            get
+            {
+                return resourceCulture;
+            }
+            set
+            {
+                resourceCulture = value;
+            }
+        }
+    }
+}

+ 117 - 0
AipGateway.Viewer/Properties/Resources.resx

@@ -0,0 +1,117 @@
+<?xml version="1.0" encoding="utf-8"?>
+<root>
+  <!-- 
+    Microsoft ResX Schema 
+    
+    Version 2.0
+    
+    The primary goals of this format is to allow a simple XML format 
+    that is mostly human readable. The generation and parsing of the 
+    various data types are done through the TypeConverter classes 
+    associated with the data types.
+    
+    Example:
+    
+    ... ado.net/XML headers & schema ...
+    <resheader name="resmimetype">text/microsoft-resx</resheader>
+    <resheader name="version">2.0</resheader>
+    <resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
+    <resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
+    <data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
+    <data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
+    <data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
+        <value>[base64 mime encoded serialized .NET Framework object]</value>
+    </data>
+    <data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
+        <value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
+        <comment>This is a comment</comment>
+    </data>
+                
+    There are any number of "resheader" rows that contain simple 
+    name/value pairs.
+    
+    Each data row contains a name, and value. The row also contains a 
+    type or mimetype. Type corresponds to a .NET class that support 
+    text/value conversion through the TypeConverter architecture. 
+    Classes that don't support this are serialized and stored with the 
+    mimetype set.
+    
+    The mimetype is used for serialized objects, and tells the 
+    ResXResourceReader how to depersist the object. This is currently not 
+    extensible. For a given mimetype the value must be set accordingly:
+    
+    Note - application/x-microsoft.net.object.binary.base64 is the format 
+    that the ResXResourceWriter will generate, however the reader can 
+    read any of the formats listed below.
+    
+    mimetype: application/x-microsoft.net.object.binary.base64
+    value   : The object must be serialized with 
+            : System.Serialization.Formatters.Binary.BinaryFormatter
+            : and then encoded with base64 encoding.
+    
+    mimetype: application/x-microsoft.net.object.soap.base64
+    value   : The object must be serialized with 
+            : System.Runtime.Serialization.Formatters.Soap.SoapFormatter
+            : and then encoded with base64 encoding.
+
+    mimetype: application/x-microsoft.net.object.bytearray.base64
+    value   : The object must be serialized into a byte array 
+            : using a System.ComponentModel.TypeConverter
+            : and then encoded with base64 encoding.
+    -->
+  <xsd:schema id="root" xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata">
+    <xsd:element name="root" msdata:IsDataSet="true">
+      <xsd:complexType>
+        <xsd:choice maxOccurs="unbounded">
+          <xsd:element name="metadata">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" />
+              <xsd:attribute name="type" type="xsd:string" />
+              <xsd:attribute name="mimetype" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="assembly">
+            <xsd:complexType>
+              <xsd:attribute name="alias" type="xsd:string" />
+              <xsd:attribute name="name" type="xsd:string" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="data">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+                <xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" msdata:Ordinal="1" />
+              <xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3" />
+              <xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4" />
+            </xsd:complexType>
+          </xsd:element>
+          <xsd:element name="resheader">
+            <xsd:complexType>
+              <xsd:sequence>
+                <xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1" />
+              </xsd:sequence>
+              <xsd:attribute name="name" type="xsd:string" use="required" />
+            </xsd:complexType>
+          </xsd:element>
+        </xsd:choice>
+      </xsd:complexType>
+    </xsd:element>
+  </xsd:schema>
+  <resheader name="resmimetype">
+    <value>text/microsoft-resx</value>
+  </resheader>
+  <resheader name="version">
+    <value>2.0</value>
+  </resheader>
+  <resheader name="reader">
+    <value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+  <resheader name="writer">
+    <value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
+  </resheader>
+</root>

+ 29 - 0
AipGateway.Viewer/Properties/Settings.Designer.cs

@@ -0,0 +1,29 @@
+//------------------------------------------------------------------------------
+// <auto-generated>
+//     This code was generated by a tool.
+//     Runtime Version:4.0.30319.42000
+//
+//     Changes to this file may cause incorrect behavior and will be lost if
+//     the code is regenerated.
+// </auto-generated>
+//------------------------------------------------------------------------------
+
+
+namespace AipGateway.Viewer.Properties
+{
+    [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()]
+    [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")]
+    internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase
+    {
+
+        private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings())));
+
+        public static Settings Default
+        {
+            get
+            {
+                return defaultInstance;
+            }
+        }
+    }
+}

+ 7 - 0
AipGateway.Viewer/Properties/Settings.settings

@@ -0,0 +1,7 @@
+<?xml version='1.0' encoding='utf-8'?>
+<SettingsFile xmlns="http://schemas.microsoft.com/VisualStudio/2004/01/settings" CurrentProfile="(Default)">
+  <Profiles>
+    <Profile Name="(Default)" />
+  </Profiles>
+  <Settings />
+</SettingsFile>

BIN
AipGateway.Viewer/bin/Debug/AipGateway.AIP.pdb


+ 26 - 0
AipGateway.Viewer/bin/Debug/AipGateway.Viewer.exe.config

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
+  </startup>
+  <appSettings>
+    <add key="AppName" value="AIP Gateway RESTFull Service" />
+    <add key="AppVersion" value="1.0.0.0" />
+    <add key="aip:ClientId" value="0e225915-3be3-419c-aa04-284d7de5e16b" />
+    <add key="aip:TenantId" value="2e58414a-c6ae-43ff-aaf5-45ab8b78a404" />
+    <add key="aip:MipData" value="App_Data\mip_data" />
+    <add key="aip:LoginType" value="authLoginPassword" />
+    <add key="aip:Domain" value="AIP.SPA.Files" />
+    <add key="aip:EMail" value="SeungHo@kangfamily.site" />
+    <add key="aip:SecretValue" value="CvW8Q~0iANtLN1Y2EXR_nVyYb_tQTDwjW-Z7Ndg3" />
+    <add key="aip:CertThumbPrint" value="" />
+  </appSettings>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>

BIN
AipGateway.Viewer/bin/Debug/AipGateway.Viewer.pdb


تفاوت فایلی نمایش داده نمی شود زیرا این فایل بسیار بزرگ است
+ 2138 - 0
AipGateway.Viewer/bin/Debug/App_Data/mip_data/mip/logs/mip_sdk.miplog


BIN
AipGateway.Viewer/bin/Debug/App_Data/mip_data/mip/mip.policies.sqlite3


BIN
AipGateway.Viewer/bin/Debug/App_Data/mip_data/mip/mip.protection.sqlite3


BIN
AipGateway.Test/bin/Debug/App_Data/mip_data/mip/telemetry-shm → AipGateway.Viewer/bin/Debug/App_Data/mip_data/mip/telemetry


+ 122 - 0
AipGateway.Viewer/obj/AipGateway.Viewer.csproj.nuget.dgspec.json

@@ -0,0 +1,122 @@
+{
+  "format": 1,
+  "restore": {
+    "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.Viewer\\AipGateway.Viewer.csproj": {}
+  },
+  "projects": {
+    "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.AIP\\AipGateway.AIP.csproj": {
+      "version": "1.0.0",
+      "restore": {
+        "projectUniqueName": "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.AIP\\AipGateway.AIP.csproj",
+        "projectName": "AipGateway.AIP",
+        "projectPath": "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.AIP\\AipGateway.AIP.csproj",
+        "packagesPath": "C:\\Users\\OpenValue\\.nuget\\packages\\",
+        "outputPath": "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.AIP\\obj\\",
+        "projectStyle": "PackageReference",
+        "skipContentFileWrite": true,
+        "fallbackFolders": [
+          "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
+        ],
+        "configFilePaths": [
+          "C:\\Users\\OpenValue\\AppData\\Roaming\\NuGet\\NuGet.Config",
+          "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
+          "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+        ],
+        "originalTargetFrameworks": [
+          "net48"
+        ],
+        "sources": {
+          "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+          "https://api.nuget.org/v3/index.json": {}
+        },
+        "frameworks": {
+          "net48": {
+            "projectReferences": {}
+          }
+        }
+      },
+      "frameworks": {
+        "net48": {
+          "dependencies": {
+            "Microsoft.Identity.Client": {
+              "target": "Package",
+              "version": "[4.60.3, )"
+            },
+            "Microsoft.InformationProtection.File": {
+              "target": "Package",
+              "version": "[1.14.128, )"
+            }
+          }
+        }
+      },
+      "runtimes": {
+        "win": {
+          "#import": []
+        },
+        "win-x64": {
+          "#import": []
+        },
+        "win-x86": {
+          "#import": []
+        }
+      }
+    },
+    "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.Viewer\\AipGateway.Viewer.csproj": {
+      "version": "1.0.0",
+      "restore": {
+        "projectUniqueName": "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.Viewer\\AipGateway.Viewer.csproj",
+        "projectName": "AipGateway.Viewer",
+        "projectPath": "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.Viewer\\AipGateway.Viewer.csproj",
+        "packagesPath": "C:\\Users\\OpenValue\\.nuget\\packages\\",
+        "outputPath": "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.Viewer\\obj\\",
+        "projectStyle": "PackageReference",
+        "skipContentFileWrite": true,
+        "fallbackFolders": [
+          "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
+        ],
+        "configFilePaths": [
+          "C:\\Users\\OpenValue\\AppData\\Roaming\\NuGet\\NuGet.Config",
+          "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
+          "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+        ],
+        "originalTargetFrameworks": [
+          "net48"
+        ],
+        "sources": {
+          "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+          "https://api.nuget.org/v3/index.json": {}
+        },
+        "frameworks": {
+          "net48": {
+            "projectReferences": {
+              "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.AIP\\AipGateway.AIP.csproj": {
+                "projectPath": "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.AIP\\AipGateway.AIP.csproj"
+              }
+            }
+          }
+        }
+      },
+      "frameworks": {
+        "net48": {
+          "dependencies": {
+            "System.Configuration.ConfigurationManager": {
+              "target": "Package",
+              "version": "[8.0.0, )"
+            }
+          }
+        }
+      },
+      "runtimes": {
+        "win": {
+          "#import": []
+        },
+        "win-x64": {
+          "#import": []
+        },
+        "win-x86": {
+          "#import": []
+        }
+      }
+    }
+  }
+}

+ 19 - 0
AipGateway.Viewer/obj/AipGateway.Viewer.csproj.nuget.g.props

@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
+    <RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
+    <RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
+    <ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
+    <NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">$(UserProfile)\.nuget\packages\</NuGetPackageRoot>
+    <NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">C:\Users\OpenValue\.nuget\packages\;C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages</NuGetPackageFolders>
+    <NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
+    <NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">5.11.6</NuGetToolVersion>
+  </PropertyGroup>
+  <ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
+    <SourceRoot Include="C:\Users\OpenValue\.nuget\packages\" />
+    <SourceRoot Include="C:\Program Files (x86)\Microsoft Visual Studio\Shared\NuGetPackages\" />
+  </ItemGroup>
+  <PropertyGroup>
+    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
+  </PropertyGroup>
+</Project>

+ 6 - 0
AipGateway.Viewer/obj/AipGateway.Viewer.csproj.nuget.g.targets

@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8" standalone="no"?>
+<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <PropertyGroup>
+    <MSBuildAllProjects>$(MSBuildAllProjects);$(MSBuildThisFileFullPath)</MSBuildAllProjects>
+  </PropertyGroup>
+</Project>

+ 4 - 0
AipGateway.Viewer/obj/Debug/.NETFramework,Version=v4.8.AssemblyAttributes.cs

@@ -0,0 +1,4 @@
+// <autogenerated />
+using System;
+using System.Reflection;
+[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]

BIN
AipGateway.Viewer/obj/Debug/AipGateway.Viewer.FrmMain.resources


BIN
AipGateway.Viewer/obj/Debug/AipGateway.Viewer.Properties.Resources.resources


BIN
AipGateway.Viewer/obj/Debug/AipGateway.Viewer.csproj.AssemblyReference.cache


+ 0 - 0
AipGateway.Viewer/obj/Debug/AipGateway.Viewer.csproj.CopyComplete


+ 1 - 0
AipGateway.Viewer/obj/Debug/AipGateway.Viewer.csproj.CoreCompileInputs.cache

@@ -0,0 +1 @@
+914b89129524baf2ed797084f213f16ca2940a37

+ 64 - 0
AipGateway.Viewer/obj/Debug/AipGateway.Viewer.csproj.FileListAbsolute.txt

@@ -0,0 +1,64 @@
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\mip_dotnet.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\libbz2-1.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\libffi-8.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\libgio-2.0-0.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\libglib-2.0-0.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\libgmodule-2.0-0.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\libgobject-2.0-0.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\libgsf-1-114.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\libiconv-2.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\libintl-8.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\liblzma-5.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\libpcre2-8-0.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\libwinpthread-1.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\libxml2-2.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\mip_ClientTelemetry.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\mip_core.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\mip_file_sdk.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\mip_protection_sdk.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\mip_upe_sdk.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x64\zlib1.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\mip_dotnet.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\libbz2-1.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\libffi-8.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\libgcc_s_dw2-1.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\libgio-2.0-0.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\libglib-2.0-0.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\libgmodule-2.0-0.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\libgobject-2.0-0.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\libgsf-1-114.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\libiconv-2.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\libintl-8.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\liblzma-5.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\libpcre2-8-0.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\libwinpthread-1.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\libxml2-2.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\mip_ClientTelemetry.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\mip_core.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\mip_file_sdk.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\mip_protection_sdk.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\mip_upe_sdk.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\x86\zlib1.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\AipGateway.Viewer.exe.config
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\AipGateway.Viewer.exe
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\AipGateway.Viewer.pdb
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\AipGateway.AIP.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\Microsoft.InformationProtection.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\Microsoft.Identity.Client.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\Microsoft.IdentityModel.Abstractions.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\System.Diagnostics.DiagnosticSource.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\System.Memory.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\System.Runtime.CompilerServices.Unsafe.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\System.Numerics.Vectors.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\System.Buffers.dll
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\AipGateway.AIP.pdb
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\obj\Debug\AipGateway.Viewer.csproj.AssemblyReference.cache
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\obj\Debug\AipGateway.Viewer.exe.config
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\obj\Debug\AipGateway.Viewer.FrmMain.resources
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\obj\Debug\AipGateway.Viewer.Properties.Resources.resources
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\obj\Debug\AipGateway.Viewer.csproj.GenerateResource.cache
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\obj\Debug\AipGateway.Viewer.csproj.CoreCompileInputs.cache
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\obj\Debug\AipGateway.Viewer.csproj.CopyComplete
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\obj\Debug\AipGateway.Viewer.exe
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\obj\Debug\AipGateway.Viewer.pdb
+C:\DEV\SOLUTION\IIS\AipGateway\AipGateway.Viewer\bin\Debug\System.Configuration.ConfigurationManager.dll

BIN
AipGateway.Viewer/obj/Debug/AipGateway.Viewer.csproj.GenerateResource.cache


+ 26 - 0
AipGateway.Viewer/obj/Debug/AipGateway.Viewer.exe.config

@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="utf-8"?>
+<configuration>
+  <startup>
+    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.8" />
+  </startup>
+  <appSettings>
+    <add key="AppName" value="AIP Gateway RESTFull Service" />
+    <add key="AppVersion" value="1.0.0.0" />
+    <add key="aip:ClientId" value="0e225915-3be3-419c-aa04-284d7de5e16b" />
+    <add key="aip:TenantId" value="2e58414a-c6ae-43ff-aaf5-45ab8b78a404" />
+    <add key="aip:MipData" value="App_Data\mip_data" />
+    <add key="aip:LoginType" value="authLoginPassword" />
+    <add key="aip:Domain" value="AIP.SPA.Files" />
+    <add key="aip:EMail" value="SeungHo@kangfamily.site" />
+    <add key="aip:SecretValue" value="CvW8Q~0iANtLN1Y2EXR_nVyYb_tQTDwjW-Z7Ndg3" />
+    <add key="aip:CertThumbPrint" value="" />
+  </appSettings>
+  <runtime>
+    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
+      <dependentAssembly>
+        <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
+        <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
+      </dependentAssembly>
+    </assemblyBinding>
+  </runtime>
+</configuration>

BIN
AipGateway.Viewer/obj/Debug/AipGateway.Viewer.pdb


BIN
AipGateway.Viewer/obj/Debug/DesignTimeResolveAssemblyReferences.cache


BIN
AipGateway.Viewer/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache


+ 1174 - 0
AipGateway.Viewer/obj/project.assets.json

@@ -0,0 +1,1174 @@
+{
+  "version": 3,
+  "targets": {
+    ".NETFramework,Version=v4.8": {
+      "Microsoft.Identity.Client/4.60.3": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.IdentityModel.Abstractions": "6.35.0",
+          "System.Diagnostics.DiagnosticSource": "6.0.1"
+        },
+        "frameworkAssemblies": [
+          "Microsoft.CSharp",
+          "System",
+          "System.Core",
+          "System.Data",
+          "System.Data.DataSetExtensions",
+          "System.Drawing",
+          "System.IdentityModel",
+          "System.Net.Http",
+          "System.Windows.Forms",
+          "System.Xml",
+          "System.Xml.Linq"
+        ],
+        "compile": {
+          "lib/net462/Microsoft.Identity.Client.dll": {}
+        },
+        "runtime": {
+          "lib/net462/Microsoft.Identity.Client.dll": {}
+        }
+      },
+      "Microsoft.IdentityModel.Abstractions/6.35.0": {
+        "type": "package",
+        "compile": {
+          "lib/net472/Microsoft.IdentityModel.Abstractions.dll": {}
+        },
+        "runtime": {
+          "lib/net472/Microsoft.IdentityModel.Abstractions.dll": {}
+        }
+      },
+      "Microsoft.InformationProtection.File/1.14.128": {
+        "type": "package",
+        "compile": {
+          "lib/net40/Microsoft.InformationProtection.dll": {}
+        },
+        "runtime": {
+          "lib/net40/Microsoft.InformationProtection.dll": {}
+        },
+        "build": {
+          "build/net40/_._": {}
+        }
+      },
+      "System.Buffers/4.5.1": {
+        "type": "package",
+        "frameworkAssemblies": [
+          "mscorlib"
+        ],
+        "compile": {
+          "ref/net45/System.Buffers.dll": {}
+        },
+        "runtime": {
+          "lib/net461/System.Buffers.dll": {}
+        }
+      },
+      "System.Configuration.ConfigurationManager/8.0.0": {
+        "type": "package",
+        "frameworkAssemblies": [
+          "System.Configuration"
+        ],
+        "compile": {
+          "lib/net462/System.Configuration.ConfigurationManager.dll": {}
+        },
+        "runtime": {
+          "lib/net462/System.Configuration.ConfigurationManager.dll": {}
+        },
+        "build": {
+          "buildTransitive/net462/_._": {}
+        }
+      },
+      "System.Diagnostics.DiagnosticSource/6.0.1": {
+        "type": "package",
+        "dependencies": {
+          "System.Memory": "4.5.4",
+          "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+        },
+        "compile": {
+          "lib/net461/System.Diagnostics.DiagnosticSource.dll": {}
+        },
+        "runtime": {
+          "lib/net461/System.Diagnostics.DiagnosticSource.dll": {}
+        }
+      },
+      "System.Memory/4.5.4": {
+        "type": "package",
+        "dependencies": {
+          "System.Buffers": "4.5.1",
+          "System.Numerics.Vectors": "4.5.0",
+          "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+        },
+        "frameworkAssemblies": [
+          "System",
+          "mscorlib"
+        ],
+        "compile": {
+          "lib/net461/System.Memory.dll": {}
+        },
+        "runtime": {
+          "lib/net461/System.Memory.dll": {}
+        }
+      },
+      "System.Numerics.Vectors/4.5.0": {
+        "type": "package",
+        "frameworkAssemblies": [
+          "System.Numerics",
+          "mscorlib"
+        ],
+        "compile": {
+          "ref/net46/System.Numerics.Vectors.dll": {}
+        },
+        "runtime": {
+          "lib/net46/System.Numerics.Vectors.dll": {}
+        }
+      },
+      "System.Runtime.CompilerServices.Unsafe/6.0.0": {
+        "type": "package",
+        "frameworkAssemblies": [
+          "mscorlib"
+        ],
+        "compile": {
+          "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": {}
+        },
+        "runtime": {
+          "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": {}
+        }
+      },
+      "AipGateway.AIP/1.0.0": {
+        "type": "project",
+        "framework": ".NETFramework,Version=v4.8",
+        "dependencies": {
+          "Microsoft.Identity.Client": "4.60.3",
+          "Microsoft.InformationProtection.File": "1.14.128"
+        },
+        "compile": {
+          "bin/placeholder/AipGateway.AIP.dll": {}
+        },
+        "runtime": {
+          "bin/placeholder/AipGateway.AIP.dll": {}
+        }
+      }
+    },
+    ".NETFramework,Version=v4.8/win": {
+      "Microsoft.Identity.Client/4.60.3": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.IdentityModel.Abstractions": "6.35.0",
+          "System.Diagnostics.DiagnosticSource": "6.0.1"
+        },
+        "frameworkAssemblies": [
+          "Microsoft.CSharp",
+          "System",
+          "System.Core",
+          "System.Data",
+          "System.Data.DataSetExtensions",
+          "System.Drawing",
+          "System.IdentityModel",
+          "System.Net.Http",
+          "System.Windows.Forms",
+          "System.Xml",
+          "System.Xml.Linq"
+        ],
+        "compile": {
+          "lib/net462/Microsoft.Identity.Client.dll": {}
+        },
+        "runtime": {
+          "lib/net462/Microsoft.Identity.Client.dll": {}
+        }
+      },
+      "Microsoft.IdentityModel.Abstractions/6.35.0": {
+        "type": "package",
+        "compile": {
+          "lib/net472/Microsoft.IdentityModel.Abstractions.dll": {}
+        },
+        "runtime": {
+          "lib/net472/Microsoft.IdentityModel.Abstractions.dll": {}
+        }
+      },
+      "Microsoft.InformationProtection.File/1.14.128": {
+        "type": "package",
+        "compile": {
+          "lib/net40/Microsoft.InformationProtection.dll": {}
+        },
+        "runtime": {
+          "lib/net40/Microsoft.InformationProtection.dll": {}
+        },
+        "build": {
+          "build/net40/_._": {}
+        }
+      },
+      "System.Buffers/4.5.1": {
+        "type": "package",
+        "frameworkAssemblies": [
+          "mscorlib"
+        ],
+        "compile": {
+          "ref/net45/System.Buffers.dll": {}
+        },
+        "runtime": {
+          "lib/net461/System.Buffers.dll": {}
+        }
+      },
+      "System.Configuration.ConfigurationManager/8.0.0": {
+        "type": "package",
+        "frameworkAssemblies": [
+          "System.Configuration"
+        ],
+        "compile": {
+          "lib/net462/System.Configuration.ConfigurationManager.dll": {}
+        },
+        "runtime": {
+          "lib/net462/System.Configuration.ConfigurationManager.dll": {}
+        },
+        "build": {
+          "buildTransitive/net462/_._": {}
+        }
+      },
+      "System.Diagnostics.DiagnosticSource/6.0.1": {
+        "type": "package",
+        "dependencies": {
+          "System.Memory": "4.5.4",
+          "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+        },
+        "compile": {
+          "lib/net461/System.Diagnostics.DiagnosticSource.dll": {}
+        },
+        "runtime": {
+          "lib/net461/System.Diagnostics.DiagnosticSource.dll": {}
+        }
+      },
+      "System.Memory/4.5.4": {
+        "type": "package",
+        "dependencies": {
+          "System.Buffers": "4.5.1",
+          "System.Numerics.Vectors": "4.5.0",
+          "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+        },
+        "frameworkAssemblies": [
+          "System",
+          "mscorlib"
+        ],
+        "compile": {
+          "lib/net461/System.Memory.dll": {}
+        },
+        "runtime": {
+          "lib/net461/System.Memory.dll": {}
+        }
+      },
+      "System.Numerics.Vectors/4.5.0": {
+        "type": "package",
+        "frameworkAssemblies": [
+          "System.Numerics",
+          "mscorlib"
+        ],
+        "compile": {
+          "ref/net46/System.Numerics.Vectors.dll": {}
+        },
+        "runtime": {
+          "lib/net46/System.Numerics.Vectors.dll": {}
+        }
+      },
+      "System.Runtime.CompilerServices.Unsafe/6.0.0": {
+        "type": "package",
+        "frameworkAssemblies": [
+          "mscorlib"
+        ],
+        "compile": {
+          "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": {}
+        },
+        "runtime": {
+          "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": {}
+        }
+      },
+      "AipGateway.AIP/1.0.0": {
+        "type": "project",
+        "framework": ".NETFramework,Version=v4.8",
+        "dependencies": {
+          "Microsoft.Identity.Client": "4.60.3",
+          "Microsoft.InformationProtection.File": "1.14.128"
+        },
+        "compile": {
+          "bin/placeholder/AipGateway.AIP.dll": {}
+        },
+        "runtime": {
+          "bin/placeholder/AipGateway.AIP.dll": {}
+        }
+      }
+    },
+    ".NETFramework,Version=v4.8/win-x64": {
+      "Microsoft.Identity.Client/4.60.3": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.IdentityModel.Abstractions": "6.35.0",
+          "System.Diagnostics.DiagnosticSource": "6.0.1"
+        },
+        "frameworkAssemblies": [
+          "Microsoft.CSharp",
+          "System",
+          "System.Core",
+          "System.Data",
+          "System.Data.DataSetExtensions",
+          "System.Drawing",
+          "System.IdentityModel",
+          "System.Net.Http",
+          "System.Windows.Forms",
+          "System.Xml",
+          "System.Xml.Linq"
+        ],
+        "compile": {
+          "lib/net462/Microsoft.Identity.Client.dll": {}
+        },
+        "runtime": {
+          "lib/net462/Microsoft.Identity.Client.dll": {}
+        }
+      },
+      "Microsoft.IdentityModel.Abstractions/6.35.0": {
+        "type": "package",
+        "compile": {
+          "lib/net472/Microsoft.IdentityModel.Abstractions.dll": {}
+        },
+        "runtime": {
+          "lib/net472/Microsoft.IdentityModel.Abstractions.dll": {}
+        }
+      },
+      "Microsoft.InformationProtection.File/1.14.128": {
+        "type": "package",
+        "compile": {
+          "lib/net40/Microsoft.InformationProtection.dll": {}
+        },
+        "runtime": {
+          "lib/net40/Microsoft.InformationProtection.dll": {}
+        },
+        "build": {
+          "build/net40/_._": {}
+        }
+      },
+      "System.Buffers/4.5.1": {
+        "type": "package",
+        "frameworkAssemblies": [
+          "mscorlib"
+        ],
+        "compile": {
+          "ref/net45/System.Buffers.dll": {}
+        },
+        "runtime": {
+          "lib/net461/System.Buffers.dll": {}
+        }
+      },
+      "System.Configuration.ConfigurationManager/8.0.0": {
+        "type": "package",
+        "frameworkAssemblies": [
+          "System.Configuration"
+        ],
+        "compile": {
+          "lib/net462/System.Configuration.ConfigurationManager.dll": {}
+        },
+        "runtime": {
+          "lib/net462/System.Configuration.ConfigurationManager.dll": {}
+        },
+        "build": {
+          "buildTransitive/net462/_._": {}
+        }
+      },
+      "System.Diagnostics.DiagnosticSource/6.0.1": {
+        "type": "package",
+        "dependencies": {
+          "System.Memory": "4.5.4",
+          "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+        },
+        "compile": {
+          "lib/net461/System.Diagnostics.DiagnosticSource.dll": {}
+        },
+        "runtime": {
+          "lib/net461/System.Diagnostics.DiagnosticSource.dll": {}
+        }
+      },
+      "System.Memory/4.5.4": {
+        "type": "package",
+        "dependencies": {
+          "System.Buffers": "4.5.1",
+          "System.Numerics.Vectors": "4.5.0",
+          "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+        },
+        "frameworkAssemblies": [
+          "System",
+          "mscorlib"
+        ],
+        "compile": {
+          "lib/net461/System.Memory.dll": {}
+        },
+        "runtime": {
+          "lib/net461/System.Memory.dll": {}
+        }
+      },
+      "System.Numerics.Vectors/4.5.0": {
+        "type": "package",
+        "frameworkAssemblies": [
+          "System.Numerics",
+          "mscorlib"
+        ],
+        "compile": {
+          "ref/net46/System.Numerics.Vectors.dll": {}
+        },
+        "runtime": {
+          "lib/net46/System.Numerics.Vectors.dll": {}
+        }
+      },
+      "System.Runtime.CompilerServices.Unsafe/6.0.0": {
+        "type": "package",
+        "frameworkAssemblies": [
+          "mscorlib"
+        ],
+        "compile": {
+          "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": {}
+        },
+        "runtime": {
+          "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": {}
+        }
+      },
+      "AipGateway.AIP/1.0.0": {
+        "type": "project",
+        "framework": ".NETFramework,Version=v4.8",
+        "dependencies": {
+          "Microsoft.Identity.Client": "4.60.3",
+          "Microsoft.InformationProtection.File": "1.14.128"
+        },
+        "compile": {
+          "bin/placeholder/AipGateway.AIP.dll": {}
+        },
+        "runtime": {
+          "bin/placeholder/AipGateway.AIP.dll": {}
+        }
+      }
+    },
+    ".NETFramework,Version=v4.8/win-x86": {
+      "Microsoft.Identity.Client/4.60.3": {
+        "type": "package",
+        "dependencies": {
+          "Microsoft.IdentityModel.Abstractions": "6.35.0",
+          "System.Diagnostics.DiagnosticSource": "6.0.1"
+        },
+        "frameworkAssemblies": [
+          "Microsoft.CSharp",
+          "System",
+          "System.Core",
+          "System.Data",
+          "System.Data.DataSetExtensions",
+          "System.Drawing",
+          "System.IdentityModel",
+          "System.Net.Http",
+          "System.Windows.Forms",
+          "System.Xml",
+          "System.Xml.Linq"
+        ],
+        "compile": {
+          "lib/net462/Microsoft.Identity.Client.dll": {}
+        },
+        "runtime": {
+          "lib/net462/Microsoft.Identity.Client.dll": {}
+        }
+      },
+      "Microsoft.IdentityModel.Abstractions/6.35.0": {
+        "type": "package",
+        "compile": {
+          "lib/net472/Microsoft.IdentityModel.Abstractions.dll": {}
+        },
+        "runtime": {
+          "lib/net472/Microsoft.IdentityModel.Abstractions.dll": {}
+        }
+      },
+      "Microsoft.InformationProtection.File/1.14.128": {
+        "type": "package",
+        "compile": {
+          "lib/net40/Microsoft.InformationProtection.dll": {}
+        },
+        "runtime": {
+          "lib/net40/Microsoft.InformationProtection.dll": {}
+        },
+        "build": {
+          "build/net40/_._": {}
+        }
+      },
+      "System.Buffers/4.5.1": {
+        "type": "package",
+        "frameworkAssemblies": [
+          "mscorlib"
+        ],
+        "compile": {
+          "ref/net45/System.Buffers.dll": {}
+        },
+        "runtime": {
+          "lib/net461/System.Buffers.dll": {}
+        }
+      },
+      "System.Configuration.ConfigurationManager/8.0.0": {
+        "type": "package",
+        "frameworkAssemblies": [
+          "System.Configuration"
+        ],
+        "compile": {
+          "lib/net462/System.Configuration.ConfigurationManager.dll": {}
+        },
+        "runtime": {
+          "lib/net462/System.Configuration.ConfigurationManager.dll": {}
+        },
+        "build": {
+          "buildTransitive/net462/_._": {}
+        }
+      },
+      "System.Diagnostics.DiagnosticSource/6.0.1": {
+        "type": "package",
+        "dependencies": {
+          "System.Memory": "4.5.4",
+          "System.Runtime.CompilerServices.Unsafe": "6.0.0"
+        },
+        "compile": {
+          "lib/net461/System.Diagnostics.DiagnosticSource.dll": {}
+        },
+        "runtime": {
+          "lib/net461/System.Diagnostics.DiagnosticSource.dll": {}
+        }
+      },
+      "System.Memory/4.5.4": {
+        "type": "package",
+        "dependencies": {
+          "System.Buffers": "4.5.1",
+          "System.Numerics.Vectors": "4.5.0",
+          "System.Runtime.CompilerServices.Unsafe": "4.5.3"
+        },
+        "frameworkAssemblies": [
+          "System",
+          "mscorlib"
+        ],
+        "compile": {
+          "lib/net461/System.Memory.dll": {}
+        },
+        "runtime": {
+          "lib/net461/System.Memory.dll": {}
+        }
+      },
+      "System.Numerics.Vectors/4.5.0": {
+        "type": "package",
+        "frameworkAssemblies": [
+          "System.Numerics",
+          "mscorlib"
+        ],
+        "compile": {
+          "ref/net46/System.Numerics.Vectors.dll": {}
+        },
+        "runtime": {
+          "lib/net46/System.Numerics.Vectors.dll": {}
+        }
+      },
+      "System.Runtime.CompilerServices.Unsafe/6.0.0": {
+        "type": "package",
+        "frameworkAssemblies": [
+          "mscorlib"
+        ],
+        "compile": {
+          "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": {}
+        },
+        "runtime": {
+          "lib/net461/System.Runtime.CompilerServices.Unsafe.dll": {}
+        }
+      },
+      "AipGateway.AIP/1.0.0": {
+        "type": "project",
+        "framework": ".NETFramework,Version=v4.8",
+        "dependencies": {
+          "Microsoft.Identity.Client": "4.60.3",
+          "Microsoft.InformationProtection.File": "1.14.128"
+        },
+        "compile": {
+          "bin/placeholder/AipGateway.AIP.dll": {}
+        },
+        "runtime": {
+          "bin/placeholder/AipGateway.AIP.dll": {}
+        }
+      }
+    }
+  },
+  "libraries": {
+    "Microsoft.Identity.Client/4.60.3": {
+      "sha512": "jve1RzmSpBhGlqMzPva6VfRbLMLZZc1Q8WRVZf8+iEruQkBgDTJPq8OeTehcY4GGYG1j6UB1xVofVE+n4BLDdw==",
+      "type": "package",
+      "path": "microsoft.identity.client/4.60.3",
+      "files": [
+        ".nupkg.metadata",
+        ".signature.p7s",
+        "README.md",
+        "lib/monoandroid12.0/Microsoft.Identity.Client.dll",
+        "lib/monoandroid12.0/Microsoft.Identity.Client.xml",
+        "lib/net462/Microsoft.Identity.Client.dll",
+        "lib/net462/Microsoft.Identity.Client.xml",
+        "lib/net6.0-android31.0/Microsoft.Identity.Client.dll",
+        "lib/net6.0-android31.0/Microsoft.Identity.Client.xml",
+        "lib/net6.0-ios15.4/Microsoft.Identity.Client.dll",
+        "lib/net6.0-ios15.4/Microsoft.Identity.Client.xml",
+        "lib/net6.0-windows7.0/Microsoft.Identity.Client.dll",
+        "lib/net6.0-windows7.0/Microsoft.Identity.Client.xml",
+        "lib/net6.0/Microsoft.Identity.Client.dll",
+        "lib/net6.0/Microsoft.Identity.Client.xml",
+        "lib/netstandard2.0/Microsoft.Identity.Client.dll",
+        "lib/netstandard2.0/Microsoft.Identity.Client.xml",
+        "lib/uap10.0.17763/Microsoft.Identity.Client.dll",
+        "lib/uap10.0.17763/Microsoft.Identity.Client.pri",
+        "lib/uap10.0.17763/Microsoft.Identity.Client.xml",
+        "lib/xamarinios10/Microsoft.Identity.Client.dll",
+        "lib/xamarinios10/Microsoft.Identity.Client.xml",
+        "microsoft.identity.client.4.60.3.nupkg.sha512",
+        "microsoft.identity.client.nuspec"
+      ]
+    },
+    "Microsoft.IdentityModel.Abstractions/6.35.0": {
+      "sha512": "xuR8E4Rd96M41CnUSCiOJ2DBh+z+zQSmyrYHdYhD6K4fXBcQGVnRCFQ0efROUYpP+p0zC1BLKr0JRpVuujTZSg==",
+      "type": "package",
+      "path": "microsoft.identitymodel.abstractions/6.35.0",
+      "files": [
+        ".nupkg.metadata",
+        ".signature.p7s",
+        "lib/net45/Microsoft.IdentityModel.Abstractions.dll",
+        "lib/net45/Microsoft.IdentityModel.Abstractions.xml",
+        "lib/net461/Microsoft.IdentityModel.Abstractions.dll",
+        "lib/net461/Microsoft.IdentityModel.Abstractions.xml",
+        "lib/net462/Microsoft.IdentityModel.Abstractions.dll",
+        "lib/net462/Microsoft.IdentityModel.Abstractions.xml",
+        "lib/net472/Microsoft.IdentityModel.Abstractions.dll",
+        "lib/net472/Microsoft.IdentityModel.Abstractions.xml",
+        "lib/net6.0/Microsoft.IdentityModel.Abstractions.dll",
+        "lib/net6.0/Microsoft.IdentityModel.Abstractions.xml",
+        "lib/netstandard2.0/Microsoft.IdentityModel.Abstractions.dll",
+        "lib/netstandard2.0/Microsoft.IdentityModel.Abstractions.xml",
+        "microsoft.identitymodel.abstractions.6.35.0.nupkg.sha512",
+        "microsoft.identitymodel.abstractions.nuspec"
+      ]
+    },
+    "Microsoft.InformationProtection.File/1.14.128": {
+      "sha512": "ZetXGuHtHUra2nOKILuZUTyvFzLmRbWSAfReZCp1ZC7OvkUcHeA8DX+tBlpQL1YZfWj3f5tRdo1xl4f05l6e0Q==",
+      "type": "package",
+      "path": "microsoft.informationprotection.file/1.14.128",
+      "files": [
+        ".nupkg.metadata",
+        ".signature.p7s",
+        "build/native/Microsoft.InformationProtection.File.targets",
+        "build/native/bins/debug/amd64/libbz2-1.dll",
+        "build/native/bins/debug/amd64/libffi-8.dll",
+        "build/native/bins/debug/amd64/libgio-2.0-0.dll",
+        "build/native/bins/debug/amd64/libglib-2.0-0.dll",
+        "build/native/bins/debug/amd64/libgmodule-2.0-0.dll",
+        "build/native/bins/debug/amd64/libgobject-2.0-0.dll",
+        "build/native/bins/debug/amd64/libgsf-1-114.dll",
+        "build/native/bins/debug/amd64/libiconv-2.dll",
+        "build/native/bins/debug/amd64/libintl-8.dll",
+        "build/native/bins/debug/amd64/liblzma-5.dll",
+        "build/native/bins/debug/amd64/libpcre2-8-0.dll",
+        "build/native/bins/debug/amd64/libwinpthread-1.dll",
+        "build/native/bins/debug/amd64/libxml2-2.dll",
+        "build/native/bins/debug/amd64/mip_ClientTelemetry.dll",
+        "build/native/bins/debug/amd64/mip_core.dll",
+        "build/native/bins/debug/amd64/mip_file_sdk.dll",
+        "build/native/bins/debug/amd64/mip_protection_sdk.dll",
+        "build/native/bins/debug/amd64/mip_upe_sdk.dll",
+        "build/native/bins/debug/amd64/zlib1.dll",
+        "build/native/bins/debug/x86/libbz2-1.dll",
+        "build/native/bins/debug/x86/libffi-8.dll",
+        "build/native/bins/debug/x86/libgcc_s_dw2-1.dll",
+        "build/native/bins/debug/x86/libgio-2.0-0.dll",
+        "build/native/bins/debug/x86/libglib-2.0-0.dll",
+        "build/native/bins/debug/x86/libgmodule-2.0-0.dll",
+        "build/native/bins/debug/x86/libgobject-2.0-0.dll",
+        "build/native/bins/debug/x86/libgsf-1-114.dll",
+        "build/native/bins/debug/x86/libiconv-2.dll",
+        "build/native/bins/debug/x86/libintl-8.dll",
+        "build/native/bins/debug/x86/liblzma-5.dll",
+        "build/native/bins/debug/x86/libpcre2-8-0.dll",
+        "build/native/bins/debug/x86/libwinpthread-1.dll",
+        "build/native/bins/debug/x86/libxml2-2.dll",
+        "build/native/bins/debug/x86/mip_ClientTelemetry.dll",
+        "build/native/bins/debug/x86/mip_core.dll",
+        "build/native/bins/debug/x86/mip_file_sdk.dll",
+        "build/native/bins/debug/x86/mip_protection_sdk.dll",
+        "build/native/bins/debug/x86/mip_upe_sdk.dll",
+        "build/native/bins/debug/x86/zlib1.dll",
+        "build/native/bins/release/amd64/libbz2-1.dll",
+        "build/native/bins/release/amd64/libffi-8.dll",
+        "build/native/bins/release/amd64/libgio-2.0-0.dll",
+        "build/native/bins/release/amd64/libglib-2.0-0.dll",
+        "build/native/bins/release/amd64/libgmodule-2.0-0.dll",
+        "build/native/bins/release/amd64/libgobject-2.0-0.dll",
+        "build/native/bins/release/amd64/libgsf-1-114.dll",
+        "build/native/bins/release/amd64/libiconv-2.dll",
+        "build/native/bins/release/amd64/libintl-8.dll",
+        "build/native/bins/release/amd64/liblzma-5.dll",
+        "build/native/bins/release/amd64/libpcre2-8-0.dll",
+        "build/native/bins/release/amd64/libwinpthread-1.dll",
+        "build/native/bins/release/amd64/libxml2-2.dll",
+        "build/native/bins/release/amd64/mip_ClientTelemetry.dll",
+        "build/native/bins/release/amd64/mip_core.dll",
+        "build/native/bins/release/amd64/mip_file_sdk.dll",
+        "build/native/bins/release/amd64/mip_protection_sdk.dll",
+        "build/native/bins/release/amd64/mip_upe_sdk.dll",
+        "build/native/bins/release/amd64/zlib1.dll",
+        "build/native/bins/release/x86/libbz2-1.dll",
+        "build/native/bins/release/x86/libffi-8.dll",
+        "build/native/bins/release/x86/libgcc_s_dw2-1.dll",
+        "build/native/bins/release/x86/libgio-2.0-0.dll",
+        "build/native/bins/release/x86/libglib-2.0-0.dll",
+        "build/native/bins/release/x86/libgmodule-2.0-0.dll",
+        "build/native/bins/release/x86/libgobject-2.0-0.dll",
+        "build/native/bins/release/x86/libgsf-1-114.dll",
+        "build/native/bins/release/x86/libiconv-2.dll",
+        "build/native/bins/release/x86/libintl-8.dll",
+        "build/native/bins/release/x86/liblzma-5.dll",
+        "build/native/bins/release/x86/libpcre2-8-0.dll",
+        "build/native/bins/release/x86/libwinpthread-1.dll",
+        "build/native/bins/release/x86/libxml2-2.dll",
+        "build/native/bins/release/x86/mip_ClientTelemetry.dll",
+        "build/native/bins/release/x86/mip_core.dll",
+        "build/native/bins/release/x86/mip_file_sdk.dll",
+        "build/native/bins/release/x86/mip_protection_sdk.dll",
+        "build/native/bins/release/x86/mip_upe_sdk.dll",
+        "build/native/bins/release/x86/zlib1.dll",
+        "build/native/include/mip/audit_delegate.h",
+        "build/native/include/mip/audit_event.h",
+        "build/native/include/mip/common_types.h",
+        "build/native/include/mip/delegate_response.h",
+        "build/native/include/mip/diagnostic_configuration.h",
+        "build/native/include/mip/diagnostic_delegate.h",
+        "build/native/include/mip/diagnostic_types.h",
+        "build/native/include/mip/dns_redirection.h",
+        "build/native/include/mip/error.h",
+        "build/native/include/mip/event.h",
+        "build/native/include/mip/event_context.h",
+        "build/native/include/mip/event_property.h",
+        "build/native/include/mip/file/file_engine.h",
+        "build/native/include/mip/file/file_error.h",
+        "build/native/include/mip/file/file_execution_state.h",
+        "build/native/include/mip/file/file_export.h",
+        "build/native/include/mip/file/file_handler.h",
+        "build/native/include/mip/file/file_inspector.h",
+        "build/native/include/mip/file/file_profile.h",
+        "build/native/include/mip/file/file_status.h",
+        "build/native/include/mip/file/labeling_options.h",
+        "build/native/include/mip/file/msg_inspector.h",
+        "build/native/include/mip/file/protection_settings.h",
+        "build/native/include/mip/flighting_feature.h",
+        "build/native/include/mip/http_delegate.h",
+        "build/native/include/mip/http_operation.h",
+        "build/native/include/mip/http_request.h",
+        "build/native/include/mip/http_response.h",
+        "build/native/include/mip/json_delegate.h",
+        "build/native/include/mip/json_document.h",
+        "build/native/include/mip/json_value.h",
+        "build/native/include/mip/log_message_data.h",
+        "build/native/include/mip/logger_delegate.h",
+        "build/native/include/mip/mip_configuration.h",
+        "build/native/include/mip/mip_context.h",
+        "build/native/include/mip/mip_export.h",
+        "build/native/include/mip/mip_namespace.h",
+        "build/native/include/mip/protection/delegation_license.h",
+        "build/native/include/mip/protection/delegation_license_settings.h",
+        "build/native/include/mip/protection/get_template_settings.h",
+        "build/native/include/mip/protection/license_application_data.h",
+        "build/native/include/mip/protection/license_connection_info.h",
+        "build/native/include/mip/protection/license_descriptor.h",
+        "build/native/include/mip/protection/license_rights_data.h",
+        "build/native/include/mip/protection/parsed_publishing_license.h",
+        "build/native/include/mip/protection/parsed_publishing_license_builder.h",
+        "build/native/include/mip/protection/protection_common_settings.h",
+        "build/native/include/mip/protection/protection_common_types.h",
+        "build/native/include/mip/protection/protection_descriptor_builder.h",
+        "build/native/include/mip/protection/protection_engine.h",
+        "build/native/include/mip/protection/protection_handler.h",
+        "build/native/include/mip/protection/protection_profile.h",
+        "build/native/include/mip/protection/publishing_use_license_request.h",
+        "build/native/include/mip/protection/rights.h",
+        "build/native/include/mip/protection/roles.h",
+        "build/native/include/mip/protection/template_descriptor.h",
+        "build/native/include/mip/protection/tenant_information.h",
+        "build/native/include/mip/protection_descriptor.h",
+        "build/native/include/mip/storage_delegate.h",
+        "build/native/include/mip/storage_table.h",
+        "build/native/include/mip/stream.h",
+        "build/native/include/mip/stream_utils.h",
+        "build/native/include/mip/task_dispatcher_delegate.h",
+        "build/native/include/mip/telemetry_delegate.h",
+        "build/native/include/mip/telemetry_event.h",
+        "build/native/include/mip/upe/action.h",
+        "build/native/include/mip/upe/add_content_footer_action.h",
+        "build/native/include/mip/upe/add_content_header_action.h",
+        "build/native/include/mip/upe/add_watermark_action.h",
+        "build/native/include/mip/upe/apply_label_action.h",
+        "build/native/include/mip/upe/classification_request.h",
+        "build/native/include/mip/upe/classification_result.h",
+        "build/native/include/mip/upe/content_label.h",
+        "build/native/include/mip/upe/custom_action.h",
+        "build/native/include/mip/upe/detailed_classification_result.h",
+        "build/native/include/mip/upe/execution_state.h",
+        "build/native/include/mip/upe/justify_action.h",
+        "build/native/include/mip/upe/label.h",
+        "build/native/include/mip/upe/metadata_action.h",
+        "build/native/include/mip/upe/metadata_entry.h",
+        "build/native/include/mip/upe/metadata_version.h",
+        "build/native/include/mip/upe/policy_engine.h",
+        "build/native/include/mip/upe/policy_handler.h",
+        "build/native/include/mip/upe/policy_profile.h",
+        "build/native/include/mip/upe/protect_adhoc_action.h",
+        "build/native/include/mip/upe/protect_adhoc_dk_action.h",
+        "build/native/include/mip/upe/protect_by_encrypt_only_action.h",
+        "build/native/include/mip/upe/protect_by_template_action.h",
+        "build/native/include/mip/upe/protect_do_not_forward_action.h",
+        "build/native/include/mip/upe/protect_do_not_forward_dk_action.h",
+        "build/native/include/mip/upe/recommend_label_action.h",
+        "build/native/include/mip/upe/remove_content_footer_action.h",
+        "build/native/include/mip/upe/remove_content_header_action.h",
+        "build/native/include/mip/upe/remove_protection_action.h",
+        "build/native/include/mip/upe/remove_watermark_action.h",
+        "build/native/include/mip/upe/sensitivity_types_rule_package.h",
+        "build/native/include/mip/user_rights.h",
+        "build/native/include/mip/user_roles.h",
+        "build/native/include/mip/version.h",
+        "build/native/include/mip/version.inc",
+        "build/native/include/mip/xml_delegate.h",
+        "build/native/include/mip/xml_document.h",
+        "build/native/include/mip/xml_node.h",
+        "build/native/include/mip/xml_reader.h",
+        "build/native/include/mip_cc/application_info_cc.h",
+        "build/native/include/mip_cc/auth_callback_cc.h",
+        "build/native/include/mip_cc/common_types_cc.h",
+        "build/native/include/mip_cc/consent_callback_cc.h",
+        "build/native/include/mip_cc/dictionary_cc.h",
+        "build/native/include/mip_cc/error_cc.h",
+        "build/native/include/mip_cc/flighting_feature_cc.h",
+        "build/native/include/mip_cc/http_delegate_cc.h",
+        "build/native/include/mip_cc/identity_cc.h",
+        "build/native/include/mip_cc/logger_delegate_cc.h",
+        "build/native/include/mip_cc/mip_context_cc.h",
+        "build/native/include/mip_cc/mip_macros_cc.h",
+        "build/native/include/mip_cc/protection/delegation_license_cc.h",
+        "build/native/include/mip_cc/protection/protection_crypto_types_cc.h",
+        "build/native/include/mip_cc/protection/protection_engine_cc.h",
+        "build/native/include/mip_cc/protection/protection_handler_cc.h",
+        "build/native/include/mip_cc/protection/protection_profile_cc.h",
+        "build/native/include/mip_cc/protection/template_descriptor_cc.h",
+        "build/native/include/mip_cc/protection_descriptor_cc.h",
+        "build/native/include/mip_cc/result_cc.h",
+        "build/native/include/mip_cc/stream_cc.h",
+        "build/native/include/mip_cc/string_list_cc.h",
+        "build/native/include/mip_cc/task_dispatcher_delegate_cc.h",
+        "build/native/include/mip_cc/telemetry_configuration_cc.h",
+        "build/native/include/mip_cc/upe/action_cc.h",
+        "build/native/include/mip_cc/upe/action_result_cc.h",
+        "build/native/include/mip_cc/upe/add_content_footer_action_cc.h",
+        "build/native/include/mip_cc/upe/add_content_header_action_cc.h",
+        "build/native/include/mip_cc/upe/add_watermark_action_cc.h",
+        "build/native/include/mip_cc/upe/application_action_state_cc.h",
+        "build/native/include/mip_cc/upe/content_label_cc.h",
+        "build/native/include/mip_cc/upe/custom_action_cc.h",
+        "build/native/include/mip_cc/upe/document_state_cc.h",
+        "build/native/include/mip_cc/upe/justify_action_cc.h",
+        "build/native/include/mip_cc/upe/label_cc.h",
+        "build/native/include/mip_cc/upe/metadata_action_cc.h",
+        "build/native/include/mip_cc/upe/metadata_dictionary_cc.h",
+        "build/native/include/mip_cc/upe/policy_engine_cc.h",
+        "build/native/include/mip_cc/upe/policy_handler_cc.h",
+        "build/native/include/mip_cc/upe/policy_profile_cc.h",
+        "build/native/include/mip_cc/upe/protect_adhoc_action_cc.h",
+        "build/native/include/mip_cc/upe/protect_adhoc_dk_action_cc.h",
+        "build/native/include/mip_cc/upe/protect_by_encrypt_only_action_cc.h",
+        "build/native/include/mip_cc/upe/protect_by_template_action_cc.h",
+        "build/native/include/mip_cc/upe/protect_do_not_forward_action_cc.h",
+        "build/native/include/mip_cc/upe/protect_do_not_forward_dk_action_cc.h",
+        "build/native/include/mip_cc/upe/remove_content_footer_action_cc.h",
+        "build/native/include/mip_cc/upe/remove_content_header_action_cc.h",
+        "build/native/include/mip_cc/upe/remove_protection_action_cc.h",
+        "build/native/include/mip_cc/upe/remove_watermark_action_cc.h",
+        "build/native/include/mip_cc/upe/sensitivity_type_cc.h",
+        "build/native/lib/debug/amd64/mip_file_sdk.lib",
+        "build/native/lib/debug/amd64/mip_protection_sdk.lib",
+        "build/native/lib/debug/amd64/mip_upe_sdk.lib",
+        "build/native/lib/debug/x86/mip_file_sdk.lib",
+        "build/native/lib/debug/x86/mip_protection_sdk.lib",
+        "build/native/lib/debug/x86/mip_upe_sdk.lib",
+        "build/native/lib/release/amd64/mip_file_sdk.lib",
+        "build/native/lib/release/amd64/mip_protection_sdk.lib",
+        "build/native/lib/release/amd64/mip_upe_sdk.lib",
+        "build/native/lib/release/x86/mip_file_sdk.lib",
+        "build/native/lib/release/x86/mip_protection_sdk.lib",
+        "build/native/lib/release/x86/mip_upe_sdk.lib",
+        "build/net40/Microsoft.InformationProtection.File.targets",
+        "build/netstandard2.0/Microsoft.InformationProtection.File.targets",
+        "dotnet/win7-x64/native/debug/mip_dotnet.dll",
+        "dotnet/win7-x64/native/release/mip_dotnet.dll",
+        "dotnet/win7-x86/native/debug/mip_dotnet.dll",
+        "dotnet/win7-x86/native/release/mip_dotnet.dll",
+        "icon.png",
+        "lib/LICENSE.txt",
+        "lib/LicenseTerms.rtf",
+        "lib/ThirdPartyDependencyVersions-x64.txt",
+        "lib/ThirdPartyDependencyVersions-x86.txt",
+        "lib/ThirdPartyNotice.txt",
+        "lib/net40/Microsoft.InformationProtection.dll",
+        "lib/net40/Microsoft.InformationProtection.xml",
+        "lib/netstandard2.0/Microsoft.InformationProtection.dll",
+        "lib/netstandard2.0/Microsoft.InformationProtection.xml",
+        "lib/readme.md",
+        "lib/redist.txt",
+        "lib/version.txt",
+        "microsoft.informationprotection.file.1.14.128.nupkg.sha512",
+        "microsoft.informationprotection.file.nuspec"
+      ]
+    },
+    "System.Buffers/4.5.1": {
+      "sha512": "Rw7ijyl1qqRS0YQD/WycNst8hUUMgrMH4FCn1nNm27M4VxchZ1js3fVjQaANHO5f3sN4isvP4a+Met9Y4YomAg==",
+      "type": "package",
+      "path": "system.buffers/4.5.1",
+      "files": [
+        ".nupkg.metadata",
+        ".signature.p7s",
+        "LICENSE.TXT",
+        "THIRD-PARTY-NOTICES.TXT",
+        "lib/net461/System.Buffers.dll",
+        "lib/net461/System.Buffers.xml",
+        "lib/netcoreapp2.0/_._",
+        "lib/netstandard1.1/System.Buffers.dll",
+        "lib/netstandard1.1/System.Buffers.xml",
+        "lib/netstandard2.0/System.Buffers.dll",
+        "lib/netstandard2.0/System.Buffers.xml",
+        "lib/uap10.0.16299/_._",
+        "ref/net45/System.Buffers.dll",
+        "ref/net45/System.Buffers.xml",
+        "ref/netcoreapp2.0/_._",
+        "ref/netstandard1.1/System.Buffers.dll",
+        "ref/netstandard1.1/System.Buffers.xml",
+        "ref/netstandard2.0/System.Buffers.dll",
+        "ref/netstandard2.0/System.Buffers.xml",
+        "ref/uap10.0.16299/_._",
+        "system.buffers.4.5.1.nupkg.sha512",
+        "system.buffers.nuspec",
+        "useSharedDesignerContext.txt",
+        "version.txt"
+      ]
+    },
+    "System.Configuration.ConfigurationManager/8.0.0": {
+      "sha512": "JlYi9XVvIREURRUlGMr1F6vOFLk7YSY4p1vHo4kX3tQ0AGrjqlRWHDi66ImHhy6qwXBG3BJ6Y1QlYQ+Qz6Xgww==",
+      "type": "package",
+      "path": "system.configuration.configurationmanager/8.0.0",
+      "files": [
+        ".nupkg.metadata",
+        ".signature.p7s",
+        "Icon.png",
+        "LICENSE.TXT",
+        "PACKAGE.md",
+        "THIRD-PARTY-NOTICES.TXT",
+        "buildTransitive/net461/System.Configuration.ConfigurationManager.targets",
+        "buildTransitive/net462/_._",
+        "buildTransitive/net6.0/_._",
+        "buildTransitive/netcoreapp2.0/System.Configuration.ConfigurationManager.targets",
+        "lib/net462/System.Configuration.ConfigurationManager.dll",
+        "lib/net462/System.Configuration.ConfigurationManager.xml",
+        "lib/net6.0/System.Configuration.ConfigurationManager.dll",
+        "lib/net6.0/System.Configuration.ConfigurationManager.xml",
+        "lib/net7.0/System.Configuration.ConfigurationManager.dll",
+        "lib/net7.0/System.Configuration.ConfigurationManager.xml",
+        "lib/net8.0/System.Configuration.ConfigurationManager.dll",
+        "lib/net8.0/System.Configuration.ConfigurationManager.xml",
+        "lib/netstandard2.0/System.Configuration.ConfigurationManager.dll",
+        "lib/netstandard2.0/System.Configuration.ConfigurationManager.xml",
+        "system.configuration.configurationmanager.8.0.0.nupkg.sha512",
+        "system.configuration.configurationmanager.nuspec",
+        "useSharedDesignerContext.txt"
+      ]
+    },
+    "System.Diagnostics.DiagnosticSource/6.0.1": {
+      "sha512": "KiLYDu2k2J82Q9BJpWiuQqCkFjRBWVq4jDzKKWawVi9KWzyD0XG3cmfX0vqTQlL14Wi9EufJrbL0+KCLTbqWiQ==",
+      "type": "package",
+      "path": "system.diagnostics.diagnosticsource/6.0.1",
+      "files": [
+        ".nupkg.metadata",
+        ".signature.p7s",
+        "Icon.png",
+        "LICENSE.TXT",
+        "THIRD-PARTY-NOTICES.TXT",
+        "buildTransitive/netcoreapp2.0/System.Diagnostics.DiagnosticSource.targets",
+        "buildTransitive/netcoreapp3.1/_._",
+        "lib/net461/System.Diagnostics.DiagnosticSource.dll",
+        "lib/net461/System.Diagnostics.DiagnosticSource.xml",
+        "lib/net5.0/System.Diagnostics.DiagnosticSource.dll",
+        "lib/net5.0/System.Diagnostics.DiagnosticSource.xml",
+        "lib/net6.0/System.Diagnostics.DiagnosticSource.dll",
+        "lib/net6.0/System.Diagnostics.DiagnosticSource.xml",
+        "lib/netstandard2.0/System.Diagnostics.DiagnosticSource.dll",
+        "lib/netstandard2.0/System.Diagnostics.DiagnosticSource.xml",
+        "system.diagnostics.diagnosticsource.6.0.1.nupkg.sha512",
+        "system.diagnostics.diagnosticsource.nuspec",
+        "useSharedDesignerContext.txt"
+      ]
+    },
+    "System.Memory/4.5.4": {
+      "sha512": "1MbJTHS1lZ4bS4FmsJjnuGJOu88ZzTT2rLvrhW7Ygic+pC0NWA+3hgAen0HRdsocuQXCkUTdFn9yHJJhsijDXw==",
+      "type": "package",
+      "path": "system.memory/4.5.4",
+      "files": [
+        ".nupkg.metadata",
+        ".signature.p7s",
+        "LICENSE.TXT",
+        "THIRD-PARTY-NOTICES.TXT",
+        "lib/net461/System.Memory.dll",
+        "lib/net461/System.Memory.xml",
+        "lib/netcoreapp2.1/_._",
+        "lib/netstandard1.1/System.Memory.dll",
+        "lib/netstandard1.1/System.Memory.xml",
+        "lib/netstandard2.0/System.Memory.dll",
+        "lib/netstandard2.0/System.Memory.xml",
+        "ref/netcoreapp2.1/_._",
+        "system.memory.4.5.4.nupkg.sha512",
+        "system.memory.nuspec",
+        "useSharedDesignerContext.txt",
+        "version.txt"
+      ]
+    },
+    "System.Numerics.Vectors/4.5.0": {
+      "sha512": "QQTlPTl06J/iiDbJCiepZ4H//BVraReU4O4EoRw1U02H5TLUIT7xn3GnDp9AXPSlJUDyFs4uWjWafNX6WrAojQ==",
+      "type": "package",
+      "path": "system.numerics.vectors/4.5.0",
+      "files": [
+        ".nupkg.metadata",
+        ".signature.p7s",
+        "LICENSE.TXT",
+        "THIRD-PARTY-NOTICES.TXT",
+        "lib/MonoAndroid10/_._",
+        "lib/MonoTouch10/_._",
+        "lib/net46/System.Numerics.Vectors.dll",
+        "lib/net46/System.Numerics.Vectors.xml",
+        "lib/netcoreapp2.0/_._",
+        "lib/netstandard1.0/System.Numerics.Vectors.dll",
+        "lib/netstandard1.0/System.Numerics.Vectors.xml",
+        "lib/netstandard2.0/System.Numerics.Vectors.dll",
+        "lib/netstandard2.0/System.Numerics.Vectors.xml",
+        "lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.dll",
+        "lib/portable-net45+win8+wp8+wpa81/System.Numerics.Vectors.xml",
+        "lib/uap10.0.16299/_._",
+        "lib/xamarinios10/_._",
+        "lib/xamarinmac20/_._",
+        "lib/xamarintvos10/_._",
+        "lib/xamarinwatchos10/_._",
+        "ref/MonoAndroid10/_._",
+        "ref/MonoTouch10/_._",
+        "ref/net45/System.Numerics.Vectors.dll",
+        "ref/net45/System.Numerics.Vectors.xml",
+        "ref/net46/System.Numerics.Vectors.dll",
+        "ref/net46/System.Numerics.Vectors.xml",
+        "ref/netcoreapp2.0/_._",
+        "ref/netstandard1.0/System.Numerics.Vectors.dll",
+        "ref/netstandard1.0/System.Numerics.Vectors.xml",
+        "ref/netstandard2.0/System.Numerics.Vectors.dll",
+        "ref/netstandard2.0/System.Numerics.Vectors.xml",
+        "ref/uap10.0.16299/_._",
+        "ref/xamarinios10/_._",
+        "ref/xamarinmac20/_._",
+        "ref/xamarintvos10/_._",
+        "ref/xamarinwatchos10/_._",
+        "system.numerics.vectors.4.5.0.nupkg.sha512",
+        "system.numerics.vectors.nuspec",
+        "useSharedDesignerContext.txt",
+        "version.txt"
+      ]
+    },
+    "System.Runtime.CompilerServices.Unsafe/6.0.0": {
+      "sha512": "/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
+      "type": "package",
+      "path": "system.runtime.compilerservices.unsafe/6.0.0",
+      "files": [
+        ".nupkg.metadata",
+        ".signature.p7s",
+        "Icon.png",
+        "LICENSE.TXT",
+        "THIRD-PARTY-NOTICES.TXT",
+        "buildTransitive/netcoreapp2.0/System.Runtime.CompilerServices.Unsafe.targets",
+        "buildTransitive/netcoreapp3.1/_._",
+        "lib/net461/System.Runtime.CompilerServices.Unsafe.dll",
+        "lib/net461/System.Runtime.CompilerServices.Unsafe.xml",
+        "lib/net6.0/System.Runtime.CompilerServices.Unsafe.dll",
+        "lib/net6.0/System.Runtime.CompilerServices.Unsafe.xml",
+        "lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.dll",
+        "lib/netcoreapp3.1/System.Runtime.CompilerServices.Unsafe.xml",
+        "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.dll",
+        "lib/netstandard2.0/System.Runtime.CompilerServices.Unsafe.xml",
+        "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512",
+        "system.runtime.compilerservices.unsafe.nuspec",
+        "useSharedDesignerContext.txt"
+      ]
+    },
+    "AipGateway.AIP/1.0.0": {
+      "type": "project",
+      "path": "../AipGateway.AIP/AipGateway.AIP.csproj",
+      "msbuildProject": "../AipGateway.AIP/AipGateway.AIP.csproj"
+    }
+  },
+  "projectFileDependencyGroups": {
+    ".NETFramework,Version=v4.8": [
+      "AipGateway.AIP >= 1.0.0",
+      "System.Configuration.ConfigurationManager >= 8.0.0"
+    ]
+  },
+  "packageFolders": {
+    "C:\\Users\\OpenValue\\.nuget\\packages\\": {},
+    "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages": {}
+  },
+  "project": {
+    "version": "1.0.0",
+    "restore": {
+      "projectUniqueName": "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.Viewer\\AipGateway.Viewer.csproj",
+      "projectName": "AipGateway.Viewer",
+      "projectPath": "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.Viewer\\AipGateway.Viewer.csproj",
+      "packagesPath": "C:\\Users\\OpenValue\\.nuget\\packages\\",
+      "outputPath": "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.Viewer\\obj\\",
+      "projectStyle": "PackageReference",
+      "skipContentFileWrite": true,
+      "fallbackFolders": [
+        "C:\\Program Files (x86)\\Microsoft Visual Studio\\Shared\\NuGetPackages"
+      ],
+      "configFilePaths": [
+        "C:\\Users\\OpenValue\\AppData\\Roaming\\NuGet\\NuGet.Config",
+        "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.FallbackLocation.config",
+        "C:\\Program Files (x86)\\NuGet\\Config\\Microsoft.VisualStudio.Offline.config"
+      ],
+      "originalTargetFrameworks": [
+        "net48"
+      ],
+      "sources": {
+        "C:\\Program Files (x86)\\Microsoft SDKs\\NuGetPackages\\": {},
+        "https://api.nuget.org/v3/index.json": {}
+      },
+      "frameworks": {
+        "net48": {
+          "projectReferences": {
+            "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.AIP\\AipGateway.AIP.csproj": {
+              "projectPath": "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.AIP\\AipGateway.AIP.csproj"
+            }
+          }
+        }
+      }
+    },
+    "frameworks": {
+      "net48": {
+        "dependencies": {
+          "System.Configuration.ConfigurationManager": {
+            "target": "Package",
+            "version": "[8.0.0, )"
+          }
+        }
+      }
+    },
+    "runtimes": {
+      "win": {
+        "#import": []
+      },
+      "win-x64": {
+        "#import": []
+      },
+      "win-x86": {
+        "#import": []
+      }
+    }
+  }
+}

+ 18 - 0
AipGateway.Viewer/obj/project.nuget.cache

@@ -0,0 +1,18 @@
+{
+  "version": 2,
+  "dgSpecHash": "8c+nCfAxRt34TQKThFhmrHKl7Y4lCymZyPGAJzyWELRbpT4oai9QsxDHbge0pI1k8EiGubB7i+KkZlMNFV8fHg==",
+  "success": true,
+  "projectFilePath": "C:\\DEV\\SOLUTION\\IIS\\AipGateway\\AipGateway.Viewer\\AipGateway.Viewer.csproj",
+  "expectedPackageFiles": [
+    "C:\\Users\\OpenValue\\.nuget\\packages\\microsoft.identity.client\\4.60.3\\microsoft.identity.client.4.60.3.nupkg.sha512",
+    "C:\\Users\\OpenValue\\.nuget\\packages\\microsoft.identitymodel.abstractions\\6.35.0\\microsoft.identitymodel.abstractions.6.35.0.nupkg.sha512",
+    "C:\\Users\\OpenValue\\.nuget\\packages\\microsoft.informationprotection.file\\1.14.128\\microsoft.informationprotection.file.1.14.128.nupkg.sha512",
+    "C:\\Users\\OpenValue\\.nuget\\packages\\system.buffers\\4.5.1\\system.buffers.4.5.1.nupkg.sha512",
+    "C:\\Users\\OpenValue\\.nuget\\packages\\system.configuration.configurationmanager\\8.0.0\\system.configuration.configurationmanager.8.0.0.nupkg.sha512",
+    "C:\\Users\\OpenValue\\.nuget\\packages\\system.diagnostics.diagnosticsource\\6.0.1\\system.diagnostics.diagnosticsource.6.0.1.nupkg.sha512",
+    "C:\\Users\\OpenValue\\.nuget\\packages\\system.memory\\4.5.4\\system.memory.4.5.4.nupkg.sha512",
+    "C:\\Users\\OpenValue\\.nuget\\packages\\system.numerics.vectors\\4.5.0\\system.numerics.vectors.4.5.0.nupkg.sha512",
+    "C:\\Users\\OpenValue\\.nuget\\packages\\system.runtime.compilerservices.unsafe\\6.0.0\\system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
+  ],
+  "logs": []
+}

BIN
AipGateway.Web/obj/Debug/AipGateway.Web.csproj.AssemblyReference.cache


BIN
AipGateway.Web/obj/Debug/DesignTimeResolveAssemblyReferencesInput.cache


+ 6 - 0
AipGateway.sln

@@ -15,6 +15,8 @@ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AipGateway.Web", "AipGatewa
 EndProject
 Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AipGateway.Test", "AipGateway.Test\AipGateway.Test.csproj", "{F589E2D3-2E91-48BC-9538-E82B0ABC6BFE}"
 EndProject
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "AipGateway.Viewer", "AipGateway.Viewer\AipGateway.Viewer.csproj", "{BF3F579D-8540-4A9B-B716-F1787A446C8C}"
+EndProject
 Global
 	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 		Debug|Any CPU = Debug|Any CPU
@@ -45,6 +47,10 @@ Global
 		{F589E2D3-2E91-48BC-9538-E82B0ABC6BFE}.Debug|Any CPU.Build.0 = Debug|Any CPU
 		{F589E2D3-2E91-48BC-9538-E82B0ABC6BFE}.Release|Any CPU.ActiveCfg = Release|Any CPU
 		{F589E2D3-2E91-48BC-9538-E82B0ABC6BFE}.Release|Any CPU.Build.0 = Release|Any CPU
+		{BF3F579D-8540-4A9B-B716-F1787A446C8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+		{BF3F579D-8540-4A9B-B716-F1787A446C8C}.Debug|Any CPU.Build.0 = Debug|Any CPU
+		{BF3F579D-8540-4A9B-B716-F1787A446C8C}.Release|Any CPU.ActiveCfg = Release|Any CPU
+		{BF3F579D-8540-4A9B-B716-F1787A446C8C}.Release|Any CPU.Build.0 = Release|Any CPU
 	EndGlobalSection
 	GlobalSection(SolutionProperties) = preSolution
 		HideSolutionNode = FALSE

برخی فایل ها در این مقایسه diff نمایش داده نمی شوند زیرا تعداد فایل ها بسیار زیاد است