FrmMain.cs 20 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Configuration;
  5. using System.Data;
  6. using System.Drawing;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Text;
  10. using System.Threading.Tasks;
  11. using System.Windows.Forms;
  12. using AipGateway.AIP;
  13. namespace AipGateway.Viewer
  14. {
  15. public partial class FrmMain : Form
  16. {
  17. private AipConfig _aipConfig;
  18. private AipFileManager _aipFileManager = null;
  19. private BindingList<object> fileLabels = new BindingList<object>();
  20. private BindingList<object> policyLabels = new BindingList<object>();
  21. private BindingList<object> protectTemplates = new BindingList<object>();
  22. public FrmMain()
  23. {
  24. InitializeComponent();
  25. Initialize();
  26. }
  27. private void Initialize()
  28. {
  29. TxtLog.Clear();
  30. CboFileLabel.Items.Clear();
  31. CboPolicyLabel.Items.Clear();
  32. CboProtection.Items.Clear();
  33. CboAuthLoginType.SelectedIndex = -1;
  34. BtnEnabled(false);
  35. _aipConfig = new AipConfig
  36. {
  37. AppName = ConfigurationManager.AppSettings["AppName"], // 어플리케이션 이름
  38. AppVersion = ConfigurationManager.AppSettings["AppVersion"], // 어플리케이션 버전
  39. ClientId = ConfigurationManager.AppSettings["aip:ClientId"], // 어플리케이션 ID(클라이언트 ID)
  40. TenantId = ConfigurationManager.AppSettings["aip:TenantId"], // 디렉토리(테넌트) ID
  41. MipData = ConfigurationManager.AppSettings["aip:MipData"], // Mip Data Path
  42. Domain = ConfigurationManager.AppSettings["aip:Domain"], // Domain
  43. EMail = ConfigurationManager.AppSettings["aip:EMail"], // User E-Mail
  44. SecretValue = ConfigurationManager.AppSettings["aip:SecretValue"], // 인증 비밀번호
  45. CertThumbPrint = ConfigurationManager.AppSettings["aip:CertThumbPrint"] // 인증서 지문
  46. };
  47. string tempLoginType = ConfigurationManager.AppSettings["aip:LoginType"];
  48. AipAuthLoginType loginType = (AipAuthLoginType)Enum.Parse(typeof(AipAuthLoginType), tempLoginType, true);
  49. _aipConfig.LoginType = loginType;
  50. CboAuthLoginType.SelectedIndex = Convert.ToInt32(loginType);
  51. TxtAppName.Text = _aipConfig.AppName;
  52. TxtAppVer.Text = _aipConfig.AppVersion;
  53. TxtClientId.Text = _aipConfig.ClientId;
  54. TxtTenantId.Text = _aipConfig.TenantId;
  55. TxtMipData.Text = _aipConfig.MipData;
  56. TxtDomain.Text = _aipConfig.Domain;
  57. TxtEMail.Text = _aipConfig.EMail;
  58. TxtSecretValue.Text = _aipConfig.SecretValue;
  59. TxtCertThumbPrint.Text = _aipConfig.CertThumbPrint;
  60. TxtOwner.Text = _aipConfig.EMail;
  61. }
  62. private void BtnEnabled(bool initialized)
  63. {
  64. BtnInitialize.Enabled = !initialized;
  65. BtnSingOut.Enabled = initialized;
  66. BtnGetInfo.Enabled = initialized;
  67. BtnOutGetInfo.Enabled = initialized;
  68. BtnSetLabel.Enabled = initialized;
  69. BtnSetProtection.Enabled = initialized;
  70. }
  71. private void BtnFileSelect_Click(object sender, EventArgs e)
  72. {
  73. String inputFileName = ShowFileOpenDialog();
  74. TxtInputFile.Text = inputFileName;
  75. if (inputFileName != "")
  76. {
  77. string filePath = Path.GetDirectoryName(inputFileName);
  78. string fileName = Path.GetFileNameWithoutExtension(inputFileName);
  79. string fileExtension = Path.GetExtension(inputFileName);
  80. TxtActualFile.Text = filePath + Path.DirectorySeparatorChar + fileName + "-out" + fileExtension;
  81. }
  82. else
  83. {
  84. TxtActualFile.Text = "";
  85. }
  86. }
  87. private string ShowFileOpenDialog()
  88. {
  89. //파일오픈창 생성 및 설정
  90. OpenFileDialog ofd = new OpenFileDialog();
  91. ofd.Title = "AIP 테스트 파일 선택";
  92. //ofd.FileName = "test";
  93. ofd.Filter = "모든 파일 (*.*) | *.*";
  94. //파일 오픈창 로드
  95. DialogResult dr = ofd.ShowDialog();
  96. //OK버튼 클릭시
  97. if (dr == DialogResult.OK)
  98. {
  99. // File명과 확장자를 가지고 온다.
  100. string fileName = ofd.SafeFileName;
  101. // File경로와 File명을 모두 가지고 온다.
  102. string fileFullName = ofd.FileName;
  103. // File경로만 가지고 온다.
  104. string filePath = fileFullName.Replace(fileName, "");
  105. //File경로 + 파일명 리턴
  106. return fileFullName;
  107. }
  108. //취소버튼 클릭시 또는 ESC키로 파일창을 종료 했을경우
  109. else if (dr == DialogResult.Cancel)
  110. {
  111. return "";
  112. }
  113. return "";
  114. }
  115. private void BtnInitialize_Click(object sender, EventArgs e)
  116. {
  117. _aipConfig.AppName = TxtAppName.Text.Trim();
  118. _aipConfig.AppVersion = TxtAppVer.Text.Trim();
  119. _aipConfig.ClientId = TxtClientId.Text.Trim();
  120. _aipConfig.TenantId = TxtTenantId.Text.Trim();
  121. _aipConfig.MipData = TxtMipData.Text.Trim();
  122. _aipConfig.Domain = TxtDomain.Text.Trim();
  123. _aipConfig.EMail = TxtEMail.Text.Trim();
  124. _aipConfig.SecretValue = TxtSecretValue.Text.Trim();
  125. _aipConfig.CertThumbPrint = TxtCertThumbPrint.Text.Trim();
  126. int loginType = CboAuthLoginType.SelectedIndex;
  127. if (loginType < 0)
  128. {
  129. MessageBox.Show("인증 로그인 방법을 선택 하세요.", "Initialize Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
  130. CboAuthLoginType.Focus();
  131. return;
  132. }
  133. _aipConfig.LoginType = (AipAuthLoginType)Enum.ToObject(typeof(AipAuthLoginType), loginType);
  134. SignOut();
  135. SignIn();
  136. }
  137. private void BtnSingOut_Click(object sender, EventArgs e)
  138. {
  139. SignOut();
  140. }
  141. private void SignIn()
  142. {
  143. _aipFileManager = new AipFileManager(_aipConfig);
  144. _aipFileManager.Initialize();
  145. _aipFileManager.CreateProfile();
  146. _aipFileManager.CreateEngine();
  147. StringBuilder sb = new StringBuilder();
  148. sb.AppendLine("SensitivityLabels(Label)===============================================");
  149. ComboboxItem item1 = new ComboboxItem("", " --- Label ---");
  150. CboFileLabel.Items.Add(item1);
  151. List<AipLabel> aipLabels = _aipFileManager.SensitivityLabels();
  152. foreach (var label in aipLabels)
  153. {
  154. ComboboxItem item = new ComboboxItem(label.Id, label.Name);
  155. CboFileLabel.Items.Add(item);
  156. sb.AppendLine(string.Format("\tID: {0}, {1}, {2}", label.Id, label.Name, label.IsActive));
  157. if (label.Children.Count > 0)
  158. {
  159. foreach (AipLabel child in label.Children)
  160. {
  161. ComboboxItem childItem = new ComboboxItem(child.Id, "\t" + child.Name);
  162. CboFileLabel.Items.Add(childItem);
  163. sb.AppendLine(string.Format("\t\tID: {0}, {1}, {2}", child.Id, child.Name, child.IsActive));
  164. }
  165. }
  166. }
  167. CboFileLabel.SelectedIndex = 0;
  168. sb.AppendLine("ListSensitivityLabels(Policy)==========================================");
  169. ComboboxItem item2 = new ComboboxItem("", " --- Sensitivity ---");
  170. CboPolicyLabel.Items.Add(item2);
  171. List<AipLabel> labels2 = _aipFileManager.ListSensitivityLabels();
  172. foreach (var v in labels2)
  173. {
  174. ComboboxItem item = new ComboboxItem(v.Id, v.Name);
  175. CboPolicyLabel.Items.Add(item);
  176. sb.AppendLine(string.Format("\tID: {0}, {1}, {2}", v.Id, v.Name, v.IsActive));
  177. if (v.Children.Count > 0)
  178. {
  179. foreach (AipLabel child in v.Children)
  180. {
  181. ComboboxItem childItem = new ComboboxItem(child.Id, "\t" + child.Name);
  182. CboPolicyLabel.Items.Add(childItem);
  183. sb.AppendLine(string.Format("\t\tID: {0}, {1}, {2}", child.Id, child.Name, child.IsActive));
  184. }
  185. }
  186. }
  187. CboPolicyLabel.SelectedIndex = 0;
  188. sb.AppendLine("GetTemplates(Protection)===============================================");
  189. ComboboxItem item3 = new ComboboxItem("", " --- Templates ---");
  190. CboProtection.Items.Add(item3);
  191. List<AipTemplate> templates = _aipFileManager.GetTemplates();
  192. foreach (var v in templates)
  193. {
  194. ComboboxItem item = new ComboboxItem(v.Id, v.Name);
  195. CboProtection.Items.Add(item);
  196. sb.AppendLine(string.Format("\tID: {0}, {1}", v.Id, v.Name));
  197. // sb.AppendLine(string.Format("\tID: {0}, {1}, {2}", v.Id, v.Name, v.Description));
  198. }
  199. sb.AppendLine("=======================================================================");
  200. CboProtection.SelectedIndex = 0;
  201. TxtLog.Text = sb.ToString();
  202. BtnEnabled(true);
  203. }
  204. private void SignOut()
  205. {
  206. BtnEnabled(false);
  207. CboFileLabel.Items.Clear();
  208. CboPolicyLabel.Items.Clear();
  209. CboProtection.Items.Clear();
  210. if (_aipFileManager != null)
  211. {
  212. _aipFileManager = null;
  213. }
  214. }
  215. private void AppendLog(string log)
  216. {
  217. TxtLog.Text += log + "\r\n";
  218. }
  219. private void BtnLogClear_Click(object sender, EventArgs e)
  220. {
  221. TxtLog.Clear();
  222. }
  223. private void BtnGetInfo_Click(object sender, EventArgs e)
  224. {
  225. string inputFileName = TxtInputFile.Text.Trim();
  226. if (inputFileName.Equals(""))
  227. {
  228. AppendLog("파일을 선택하세요.");
  229. TxtInputFile.Focus();
  230. return;
  231. }
  232. GetFileInfo(inputFileName);
  233. }
  234. private void BtnOutGetInfo_Click(object sender, EventArgs e)
  235. {
  236. string inputFileName = TxtActualFile.Text.Trim();
  237. if (inputFileName.Equals(""))
  238. {
  239. AppendLog("파일을 선택하세요.");
  240. TxtActualFile.Focus();
  241. return;
  242. }
  243. GetFileInfo(inputFileName);
  244. }
  245. private void GetFileInfo(String fileName)
  246. {
  247. TxtLog.Clear();
  248. if (!File.Exists(fileName))
  249. {
  250. AppendLog("파일이 존재하지 않습니다: " + fileName);
  251. return;
  252. }
  253. AipFileInfo info = _aipFileManager.GetFileInfo(fileName);
  254. if (info == null)
  255. {
  256. AppendLog("파일정보를 읽어 오는데 실패하였습니다.");
  257. AppendLog(_aipFileManager.LastErrNo + ", " + _aipFileManager.LastErrMsg);
  258. return;
  259. }
  260. AppendLog("출력파일명: " + info.OutputFileName);
  261. if (info.Content == null)
  262. {
  263. AppendLog("ContentLabel: 정보없음.");
  264. }
  265. else
  266. {
  267. AppendLog("ContentLabel:......................................................................");
  268. AppendLog(" CreationTime: " + info.Content.CreationTime);
  269. AppendLog(" AssignmentMethod: " + info.Content.AssignmentMethod);
  270. AppendLog(" IsProtected: " + info.Content.IsProtectionAppliedFromLabel);
  271. if (info.Label != null)
  272. {
  273. AppendLog("+Label Id: " + info.Label.Id);
  274. AppendLog(" Name: " + info.Label.Name);
  275. AppendLog(" Sensitivity: " + info.Label.Sensitivity);
  276. AppendLog(" Description: " + info.Label.Description);
  277. AppendLog(" IsActive: " + info.Label.IsActive);
  278. AppendLog(" ActionSource: " + info.Label.ActionSource);
  279. }
  280. else
  281. {
  282. AppendLog("+ Label: 정보없음.");
  283. }
  284. }
  285. if (info.Protection == null)
  286. {
  287. AppendLog("Protection: 정보없음.");
  288. }
  289. else
  290. {
  291. AppendLog("Protection:......................................................................");
  292. AppendLog(" Owner: " + info.Protection.Owner);
  293. AppendLog(" IssuedTo: " + info.Protection.IssuedTo);
  294. AppendLog(" IsIssuedToOwner: " + info.Protection.IsIssuedToOwner);
  295. AppendLog(" ContentId: " + info.Protection.ContentId);
  296. AppendLog("UseDeprecatedAlgorithms: " + info.Protection.UseDeprecatedAlgorithms);
  297. AppendLog(" AuditedExtractAllowed: " + info.Protection.AuditedExtractAllowed);
  298. AppendLog(" BlockSize: " + info.Protection.BlockSize);
  299. if (info.Protection.ProtectionDescriptor != null)
  300. {
  301. AppendLog("+Description ProtectionType: " + info.Protection.ProtectionDescriptor.ProtectionType);
  302. AppendLog(" TemplateId: " + info.Protection.ProtectionDescriptor.TemplateId);
  303. AppendLog(" LabelInformation LabelId: " + info.Protection.ProtectionDescriptor.LabelInformation.LabelId);
  304. AppendLog(" LabelInformation TenantId: " + info.Protection.ProtectionDescriptor.LabelInformation.TenantId);
  305. AppendLog(" LabelId: " + info.Protection.ProtectionDescriptor.LabelId);
  306. AppendLog(" Owner: " + info.Protection.ProtectionDescriptor.Owner);
  307. AppendLog(" ContentId: " + info.Protection.ProtectionDescriptor.ContentId);
  308. AppendLog(" Name: " + info.Protection.ProtectionDescriptor.Name);
  309. AppendLog(" Description: " + info.Protection.ProtectionDescriptor.Description);
  310. AppendLog(" AllowOfflineAccess: " + info.Protection.ProtectionDescriptor.AllowOfflineAccess);
  311. AppendLog(" Referrer: " + info.Protection.ProtectionDescriptor.Referrer);
  312. AppendLog(" ContentValidUntil: " + info.Protection.ProtectionDescriptor.ContentValidUntil);
  313. AppendLog(" DoubleKeyUrl: " + info.Protection.ProtectionDescriptor.DoubleKeyUrl);
  314. }
  315. else
  316. {
  317. AppendLog("+Description: 정보없음.");
  318. }
  319. }
  320. }
  321. private void BtnSetLabel_Click(object sender, EventArgs e)
  322. {
  323. ComboboxItem fileItem = (ComboboxItem)CboFileLabel.SelectedItem;
  324. ComboboxItem policyItem = (ComboboxItem)CboPolicyLabel.SelectedItem;
  325. ComboboxItem protectItem = (ComboboxItem)CboProtection.SelectedItem;
  326. TxtLog.Clear();
  327. String labelId = fileItem == null ? "" : (string)fileItem.Value;
  328. if (labelId == "")
  329. {
  330. AppendLog("레이블을 선택하세요.");
  331. CboFileLabel.Focus();
  332. return;
  333. }
  334. string inputFileName = TxtInputFile.Text.Trim();
  335. if (inputFileName.Equals(""))
  336. {
  337. AppendLog("입력 파일을 선택하세요.");
  338. TxtInputFile.Focus();
  339. return;
  340. }
  341. string outputFileName = TxtActualFile.Text.Trim();
  342. if (outputFileName.Equals(""))
  343. {
  344. AppendLog("출력 파일을 선택하세요.");
  345. TxtActualFile.Focus();
  346. return;
  347. }
  348. SetFileLabel(inputFileName, outputFileName, labelId);
  349. }
  350. private void BtnSetProtection_Click(object sender, EventArgs e)
  351. {
  352. ComboboxItem fileItem = (ComboboxItem)CboFileLabel.SelectedItem;
  353. ComboboxItem policyItem = (ComboboxItem)CboPolicyLabel.SelectedItem;
  354. ComboboxItem protectItem = (ComboboxItem)CboProtection.SelectedItem;
  355. TxtLog.Clear();
  356. String templateId = protectItem == null ? "" : (string)protectItem.Value;
  357. if (templateId == "")
  358. {
  359. AppendLog("프로텍션을 선택하세요.");
  360. CboProtection.Focus();
  361. return;
  362. }
  363. string inputFileName = TxtInputFile.Text.Trim();
  364. if (inputFileName.Equals(""))
  365. {
  366. AppendLog("입력 파일을 선택하세요.");
  367. TxtInputFile.Focus();
  368. return;
  369. }
  370. string outputFileName = TxtActualFile.Text.Trim();
  371. if (outputFileName.Equals(""))
  372. {
  373. AppendLog("출력 파일을 선택하세요.");
  374. TxtActualFile.Focus();
  375. return;
  376. }
  377. SetFileProtection(inputFileName, outputFileName, templateId);
  378. }
  379. private void BtnSetLabelAndProtection_Click(object sender, EventArgs e)
  380. {
  381. ComboboxItem fileItem = (ComboboxItem)CboFileLabel.SelectedItem;
  382. ComboboxItem policyItem = (ComboboxItem)CboPolicyLabel.SelectedItem;
  383. ComboboxItem protectItem = (ComboboxItem)CboProtection.SelectedItem;
  384. TxtLog.Clear();
  385. String labelId = fileItem == null ? "" : (string)fileItem.Value;
  386. if (labelId == "")
  387. {
  388. AppendLog("레이블을 선택하세요.");
  389. CboFileLabel.Focus();
  390. return;
  391. }
  392. String templateId = protectItem == null ? "" : (string)protectItem.Value;
  393. }
  394. private void SetFileLabel(string fileName, string actualFileName, string labelId)
  395. {
  396. if (!File.Exists(fileName))
  397. {
  398. AppendLog("파일이 존재하지 않습니다: " + fileName);
  399. return;
  400. }
  401. _aipFileManager.SetLabel(fileName, actualFileName, "SeungHo@kangfamily.site", labelId, "", "Test");
  402. }
  403. private void SetFileProtection(string fileName, string actualFileName, string templateId)
  404. {
  405. if (!File.Exists(fileName))
  406. {
  407. AppendLog("파일이 존재하지 않습니다: " + fileName);
  408. return;
  409. }
  410. _aipFileManager.SetProtection(fileName, actualFileName, "SeungHo@kangfamily.site", templateId, "Test");
  411. }
  412. private void button1_Click(object sender, EventArgs e)
  413. {
  414. string stringData = TxtLog.Text;
  415. byte[] dataArr = Encoding.UTF8.GetBytes(stringData);
  416. byte[] byteArr = Encoding.Unicode.GetBytes(stringData);
  417. AppendLog("======================================");
  418. AppendLog(Convert.ToBase64String(byteArr));
  419. string base64String = Convert.ToBase64String(dataArr);
  420. AppendLog("======================================");
  421. AppendLog(base64String);
  422. }
  423. }
  424. }