You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

140 lines
4.4 KiB

1 year ago
  1. using CircleSDK.Model;
  2. using Newtonsoft.Json;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.ComponentModel;
  6. using System.Data;
  7. using System.Drawing;
  8. using System.IO;
  9. using System.Linq;
  10. using System.Text;
  11. using System.Threading.Tasks;
  12. using System.Windows.Forms;
  13. using CDPShared;
  14. using static System.Net.Mime.MediaTypeNames;
  15. using static System.Windows.Forms.VisualStyles.VisualStyleElement;
  16. namespace CircleViewer
  17. {
  18. public partial class SecureFileDlg : Form
  19. {
  20. private CDPWorker _cdp;
  21. public SecureFileDlg(CDPWorker cdp)
  22. {
  23. _cdp = cdp;
  24. InitializeComponent();
  25. }
  26. async private void SecureFileDlg_Load(object sender, EventArgs e)
  27. {
  28. cbCircles.DataSource = _cdp.Circles;
  29. cbCircles.DisplayMember = "CircleName";
  30. SetStatus("Idle");
  31. }
  32. async private void cbCircles_SelectedValueChanged(object sender, EventArgs e)
  33. {
  34. CircleInfo ci = (CircleInfo) cbCircles.SelectedItem;
  35. if (ci != null)
  36. {
  37. cbTopics.Enabled = false;
  38. lblDescription.Text = ci.CircleDescription;
  39. List<TopicInfo> topics = await _cdp.EnumTopics(ci.CircleId);
  40. cbTopics.DataSource = topics;
  41. cbTopics.DisplayMember = "TopicName";
  42. cbTopics.Enabled = true;
  43. }
  44. else
  45. lblDescription.Text = "";
  46. }
  47. private void cbTopics_SelectedValueChanged(object sender, EventArgs e)
  48. {
  49. TopicInfo ti = (TopicInfo)cbTopics.SelectedItem;
  50. if (ti != null)
  51. lblTopicDescription.Text = ti.TopicDescription;
  52. else
  53. lblTopicDescription.Text = "";
  54. }
  55. private void pnDropArea_DragEnter(object sender, DragEventArgs e)
  56. {
  57. if (e.Data.GetDataPresent(DataFormats.FileDrop))
  58. e.Effect = DragDropEffects.Copy;
  59. else
  60. e.Effect = DragDropEffects.None;
  61. }
  62. void SetStatus(string txt)
  63. {
  64. if (lblStatus.InvokeRequired)
  65. lblStatus.Invoke((MethodInvoker)delegate { lblStatus.Text = txt; });
  66. else
  67. lblStatus.Text = txt;
  68. }
  69. private async void pnDropArea_DragDrop(object sender, DragEventArgs e)
  70. {
  71. CircleInfo ci = (CircleInfo)cbCircles.SelectedItem;
  72. TopicInfo ti = (TopicInfo)cbTopics.SelectedItem;
  73. string[] s = (string[])e.Data.GetData(DataFormats.FileDrop, false);
  74. for (int i = 0; i < s.Length; i++)
  75. {
  76. if (File.Exists(s[i]))
  77. await ProcessFile(s[i]);
  78. if (Directory.Exists(s[i]))
  79. await ProcessFolder(s[i]);
  80. }
  81. }
  82. private async Task ProcessFile(string fileName)
  83. {
  84. string ext = Path.GetExtension(fileName);
  85. if (!Constants.SupportedFiles.Contains(ext.ToLower()))
  86. {
  87. SetStatus("File type not supported");
  88. return;
  89. }
  90. CircleInfo ci = (CircleInfo)cbCircles.SelectedItem;
  91. TopicInfo ti = (TopicInfo)cbTopics.SelectedItem;
  92. SetStatus("Securing " + Path.GetFileName(fileName));
  93. byte[] encryptedBuf = await _cdp.EncryptFile(ci.CircleId, ti.TopicId, fileName);
  94. string outPath = fileName + ".cir";
  95. SetStatus("Saving " + Path.GetFileName(fileName));
  96. File.WriteAllBytes(outPath, encryptedBuf);
  97. lblStatus.Invoke((MethodInvoker)delegate { lblStatus.Text = "Idle " + Path.GetFileName(fileName); });
  98. SetStatus("Idle");
  99. }
  100. private async Task ProcessFolder(string folder)
  101. {
  102. string[] lFiles = Directory.GetFiles(folder);
  103. foreach (string fileName in lFiles)
  104. {
  105. await ProcessFile(fileName);
  106. }
  107. }
  108. private async void bnBrowse_Click(object sender, EventArgs e)
  109. {
  110. OpenFileDialog ofd = new OpenFileDialog();
  111. ofd.Filter = "Supported Files(*.jpg; *.jpeg; *.gif; *.bmp; *.png; *.pdf; *.mp4)|*.jpg; *.jpeg; *.gif; *.bmp; *.png; *.pdf; *.mp4";
  112. if (ofd.ShowDialog() == DialogResult.OK)
  113. {
  114. await ProcessFile(ofd.FileName);
  115. }
  116. }
  117. }
  118. }