using System;
using System.Collections.Generic;
using System.Linq;
using System.IO;
using System.Runtime.InteropServices;
using System.Security.Principal;
using System.Text;
using System.Threading.Tasks;
namespace HRM.BO
{
public class FileAccessWithImpersonation
{
//#region Declaration
//string userName = string.Empty;// "chapal" ;
//string domain = string.Empty;// "CEL";
//string password = string.Empty;// "cpl!@#45";
// //string target = string.Empty;// @"\\CEL02\d$\Images\";
/////
///// This is 9 if There is No Domain Defined and 2 otherwise
/////
//public const int LOGON32_LOGON_INTERACTIVE = 9; //2;
/////
///// This is 3 if There is No Domain Defined and 0 otherwise
/////
//public const int LOGON32_PROVIDER_DEFAULT = 3;//0;
//WindowsImpersonationContext impersonationContext;
//#endregion
//#region Functions
//[DllImport("advapi32.dll")]
//public static extern int LogonUserA(String lpszUserName,
// String lpszDomain,
// String lpszPassword,
// int dwLogonType,
// int dwLogonProvider,
// ref IntPtr phToken);
//[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
//public static extern int DuplicateToken(IntPtr hToken,
// int impersonationLevel,
// ref IntPtr hNewToken);
//[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
//public static extern bool RevertToSelf();
//[DllImport("kernel32.dll", CharSet = CharSet.Auto)]
//public static extern bool CloseHandle(IntPtr handle);
//private bool impersonateValidUser()
//{
// WindowsIdentity tempWindowsIdentity;
// IntPtr token = IntPtr.Zero;
// IntPtr tokenDuplicate = IntPtr.Zero;
// domain = Ease.CoreV35.Utility.ConfigUtility.GetAppSettings("ADDomain");
// userName = Ease.CoreV35.Utility.ConfigUtility.GetAppSettings("ADUser");
// password = Ease.CoreV35.Utility.ConfigUtility.GetAppSettings("ADPassword");
// password = Ease.CoreV35.Utility.Global.CipherFunctions.Decrypt("Cel.Admin", password);
// if (RevertToSelf())
// {
// if (LogonUserA(userName, domain, password, LOGON32_LOGON_INTERACTIVE,
// LOGON32_PROVIDER_DEFAULT, ref token) != 0)
// {
// if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
// {
// tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
// impersonationContext = tempWindowsIdentity.Impersonate();
// if (impersonationContext != null)
// {
// CloseHandle(token);
// CloseHandle(tokenDuplicate);
// return true;
// }
// }
// }
// }
// if (token != IntPtr.Zero)
// CloseHandle(token);
// if (tokenDuplicate != IntPtr.Zero)
// CloseHandle(tokenDuplicate);
// return false;
//}
//private void undoImpersonation()
//{
// if (impersonationContext != null)
// impersonationContext.Undo();
//}
//public void UploadFile(string TargetFolder, string FullFilePath, string NewFileName)
//{
// //System.IO.FileStream fs = null;
// //fs = System.IO.File.Open(FullFilePath , System.IO.FileMode.Open);
// //byte[] bytes = new byte[fs.Length];
// //fs.Read(bytes , 0 , Convert.ToInt32(fs.Length));
// byte[] bytes = File.ReadAllBytes(FullFilePath);
// try
// {
// if (impersonateValidUser())
// {
// //string[] Files = Directory.GetFiles(TargetFolder);
// string fullTargetPath = TargetFolder + "\\" + NewFileName;
// File.WriteAllBytes(fullTargetPath, bytes);
// }
// }
// finally
// {
// undoImpersonation();
// }
//}
//public byte[] GetFileInBytes(string SourceFolder, string FileName)
//{
// byte[] bytes = null;
// try
// {
// if (impersonateValidUser())
// {
// string fullSourcePath = SourceFolder + "\\" + FileName;
// if (File.Exists(fullSourcePath))
// {
// bytes = File.ReadAllBytes(fullSourcePath);
// }
// }
// }
// finally
// {
// undoImpersonation();
// }
// return bytes;
//}
//#endregion
}
}