GrantFolderPermission.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. using LAPS_XMLQC_Service.App_Data;
  2. using LAPS_XMLQC_Service.Models.Configuration;
  3. using Newtonsoft.Json;
  4. using System;
  5. public class GrantFolderPermission : IDisposable
  6. {
  7. private readonly CommonRepository _commonRepository;
  8. private readonly IImpartunateFactory _impartunateFactory;
  9. private Impartunate _impartunate;
  10. public GrantFolderPermission(CommonRepository commonRepository, IImpartunateFactory impartunateFactory)
  11. {
  12. _commonRepository = commonRepository ?? throw new ArgumentNullException(nameof(commonRepository));
  13. _impartunateFactory = impartunateFactory ?? throw new ArgumentNullException(nameof(impartunateFactory));
  14. }
  15. public void FolderPermission_vlex(string path, string pdefid, string transactionId = "", string lotId = "", string jobId = "")
  16. {
  17. if (string.IsNullOrWhiteSpace(pdefid) && string.IsNullOrWhiteSpace(transactionId) &&
  18. string.IsNullOrWhiteSpace(lotId) && string.IsNullOrWhiteSpace(jobId))
  19. {
  20. throw new ArgumentException("At least one parameter must be provided.");
  21. }
  22. string option = GetOption(pdefid, transactionId, lotId, jobId, out var data);
  23. string inputJson = JsonConvert.SerializeObject(data);
  24. lotmasterModel ds = _commonRepository.ExecuteSP_ReturnListForLot("spusrserverpathinfo", inputJson, option);
  25. if (ds != null)
  26. {
  27. // Example: @"DOMAIN\username"
  28. string user = string.IsNullOrWhiteSpace(ds.domain)
  29. ? ds.username
  30. : $@"{ds.domain}\{ds.username}";
  31. NetworkShareUtility.ConnectToShare(path, user, ds.password);
  32. ConfigureImpartunate(ds);
  33. }
  34. }
  35. public void FolderPermission(string pdefid, string transactionId = "", string lotId = "", string jobId = "")
  36. {
  37. if (string.IsNullOrWhiteSpace(pdefid) && string.IsNullOrWhiteSpace(transactionId) &&
  38. string.IsNullOrWhiteSpace(lotId) && string.IsNullOrWhiteSpace(jobId))
  39. {
  40. throw new ArgumentException("At least one parameter must be provided.");
  41. }
  42. string option = GetOption(pdefid, transactionId, lotId, jobId, out var data);
  43. string inputJson = JsonConvert.SerializeObject(data);
  44. lotmasterModel ds = _commonRepository.ExecuteSP_ReturnListForLot("spusrserverpathinfo", inputJson, option);
  45. if (ds != null)
  46. {
  47. ConfigureImpartunate(ds);
  48. }
  49. }
  50. private static string GetOption(string pdefid, string transactionId, string lotId, string jobId, out object data)
  51. {
  52. if (!string.IsNullOrWhiteSpace(transactionId))
  53. {
  54. data = new { transactionid = transactionId, lotid = 0, option = "logininfo" };
  55. return "logininfo";
  56. }
  57. if (!string.IsNullOrWhiteSpace(pdefid))
  58. {
  59. data = new { transactionid = pdefid, lotid = 0, option = "serverinfo_projid" };
  60. return "serverinfo_projid";
  61. }
  62. if (!string.IsNullOrWhiteSpace(lotId))
  63. {
  64. data = new { transactionid = 0, lotid = lotId, option = "loginlotinfo" };
  65. return "loginlotinfo";
  66. }
  67. if (!string.IsNullOrWhiteSpace(jobId))
  68. {
  69. data = new { transactionid = jobId, lotid = 0, option = "serverinfo_job" };
  70. return "loginlotinfo";
  71. }
  72. throw new ArgumentException("Unable to determine the option for folder permission.");
  73. }
  74. private void ConfigureImpartunate(lotmasterModel ds)
  75. {
  76. _impartunate = _impartunateFactory.Create(ds.username, ds.password, ds.domain);
  77. _impartunate.AllowAccesstoServer();
  78. }
  79. public Impartunate GetImpartunate()
  80. {
  81. return _impartunate;
  82. }
  83. public void Dispose()
  84. {
  85. try
  86. {
  87. _impartunate?.RemoveServerAccess();
  88. _impartunate = null;
  89. GC.SuppressFinalize(this);
  90. }
  91. catch(Exception ex)
  92. {
  93. }
  94. }
  95. }