iMonitor desktop application using dotnet 4.8
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.

713 lines
21 KiB

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Net;
using System.Net.Mail;
using System.Net.Mime;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates;
using System.Threading;
using iMonitorApp.Properties;
using _4ELogger;
namespace iMonitorApp
{
// Token: 0x02000020 RID: 32
public class ParseStackAlarms : INotifyPropertyChanged
{
// Token: 0x17000021 RID: 33
// (get) Token: 0x060000F3 RID: 243 RVA: 0x0000A5F1 File Offset: 0x000087F1
// (set) Token: 0x060000F4 RID: 244 RVA: 0x0000A5F9 File Offset: 0x000087F9
private string EncodedText { get; set; }
// Token: 0x17000022 RID: 34
// (get) Token: 0x060000F5 RID: 245 RVA: 0x0000A602 File Offset: 0x00008802
// (set) Token: 0x060000F6 RID: 246 RVA: 0x0000A60A File Offset: 0x0000880A
public string Theme { get; set; }
// Token: 0x17000023 RID: 35
// (get) Token: 0x060000F7 RID: 247 RVA: 0x0000A613 File Offset: 0x00008813
// (set) Token: 0x060000F8 RID: 248 RVA: 0x0000A61B File Offset: 0x0000881B
public string SendingEmailStatus { get; set; }
// Token: 0x14000004 RID: 4
// (add) Token: 0x060000F9 RID: 249 RVA: 0x0000A624 File Offset: 0x00008824
// (remove) Token: 0x060000FA RID: 250 RVA: 0x0000A65C File Offset: 0x0000885C
// [DebuggerBrowsable(DebuggerBrowsableState.Never)]
public event PropertyChangedEventHandler PropertyChanged;
// Token: 0x17000024 RID: 36
// (get) Token: 0x060000FB RID: 251 RVA: 0x0000A691 File Offset: 0x00008891
// (set) Token: 0x060000FC RID: 252 RVA: 0x0000A699 File Offset: 0x00008899
public string Subject { get; set; }
// Token: 0x17000025 RID: 37
// (get) Token: 0x060000FD RID: 253 RVA: 0x0000A6A2 File Offset: 0x000088A2
// (set) Token: 0x060000FE RID: 254 RVA: 0x0000A6AA File Offset: 0x000088AA
public string EmailReplyTo { get; set; }
// Token: 0x17000026 RID: 38
// (get) Token: 0x060000FF RID: 255 RVA: 0x0000A6B3 File Offset: 0x000088B3
// (set) Token: 0x06000100 RID: 256 RVA: 0x0000A6BB File Offset: 0x000088BB
public string EmailBCC { get; set; }
// Token: 0x17000027 RID: 39
// (get) Token: 0x06000101 RID: 257 RVA: 0x0000A6C4 File Offset: 0x000088C4
// (set) Token: 0x06000102 RID: 258 RVA: 0x0000A6CC File Offset: 0x000088CC
public string EmailCC { get; set; }
// Token: 0x17000028 RID: 40
// (get) Token: 0x06000103 RID: 259 RVA: 0x0000A6D5 File Offset: 0x000088D5
// (set) Token: 0x06000104 RID: 260 RVA: 0x0000A6DD File Offset: 0x000088DD
public string Images { get; set; }
// Token: 0x17000029 RID: 41
// (get) Token: 0x06000105 RID: 261 RVA: 0x0000A6E6 File Offset: 0x000088E6
// (set) Token: 0x06000106 RID: 262 RVA: 0x0000A6EE File Offset: 0x000088EE
public string Attachments { get; set; }
// Token: 0x1700002A RID: 42
// (get) Token: 0x06000107 RID: 263 RVA: 0x0000A6F7 File Offset: 0x000088F7
// (set) Token: 0x06000108 RID: 264 RVA: 0x0000A6FF File Offset: 0x000088FF
public bool SayIt { get; set; }
// Token: 0x1700002B RID: 43
// (get) Token: 0x06000109 RID: 265 RVA: 0x0000A708 File Offset: 0x00008908
// (set) Token: 0x0600010A RID: 266 RVA: 0x0000A710 File Offset: 0x00008910
public bool EmailIt { get; set; }
// Token: 0x1700002C RID: 44
// (get) Token: 0x0600010B RID: 267 RVA: 0x0000A719 File Offset: 0x00008919
// (set) Token: 0x0600010C RID: 268 RVA: 0x0000A721 File Offset: 0x00008921
public bool Phoneit { get; set; }
// Token: 0x1700002D RID: 45
// (get) Token: 0x0600010D RID: 269 RVA: 0x0000A72A File Offset: 0x0000892A
// (set) Token: 0x0600010E RID: 270 RVA: 0x0000A732 File Offset: 0x00008932
public bool SmsIt { get; set; }
// Token: 0x1700002E RID: 46
// (get) Token: 0x0600010F RID: 271 RVA: 0x0000A73B File Offset: 0x0000893B
// (set) Token: 0x06000110 RID: 272 RVA: 0x0000A743 File Offset: 0x00008943
public string AlertLevel { get; set; }
// Token: 0x1700002F RID: 47
// (get) Token: 0x06000111 RID: 273 RVA: 0x0000A74C File Offset: 0x0000894C
// (set) Token: 0x06000112 RID: 274 RVA: 0x0000A754 File Offset: 0x00008954
public string PhoneNumbers { get; set; }
// Token: 0x17000030 RID: 48
// (get) Token: 0x06000113 RID: 275 RVA: 0x0000A75D File Offset: 0x0000895D
// (set) Token: 0x06000114 RID: 276 RVA: 0x0000A765 File Offset: 0x00008965
public string Recipients { get; set; }
// Token: 0x17000031 RID: 49
// (get) Token: 0x06000115 RID: 277 RVA: 0x0000A76E File Offset: 0x0000896E
// (set) Token: 0x06000116 RID: 278 RVA: 0x0000A776 File Offset: 0x00008976
public bool YahooMessenger { get; set; }
// Token: 0x17000032 RID: 50
// (get) Token: 0x06000117 RID: 279 RVA: 0x0000A77F File Offset: 0x0000897F
// (set) Token: 0x06000118 RID: 280 RVA: 0x0000A787 File Offset: 0x00008987
public string Escalation { get; set; }
// Token: 0x17000033 RID: 51
// (get) Token: 0x06000119 RID: 281 RVA: 0x0000A790 File Offset: 0x00008990
// (set) Token: 0x0600011A RID: 282 RVA: 0x0000A798 File Offset: 0x00008998
public DateTime ReceivingTime { get; set; }
// Token: 0x17000034 RID: 52
// (get) Token: 0x0600011B RID: 283 RVA: 0x0000A7A1 File Offset: 0x000089A1
// (set) Token: 0x0600011C RID: 284 RVA: 0x0000A7A9 File Offset: 0x000089A9
public string Body { get; set; }
// Token: 0x0600011D RID: 285 RVA: 0x00002AAD File Offset: 0x00000CAD
public ParseStackAlarms()
{
}
// Token: 0x0600011E RID: 286 RVA: 0x0000A7B2 File Offset: 0x000089B2
public ParseStackAlarms(string text) : this(text, new ThemeEmails())
{
}
// Token: 0x0600011F RID: 287 RVA: 0x0000A7C4 File Offset: 0x000089C4
public ParseStackAlarms(string text, ThemeEmails te)
{
try
{
this.ReceivingTime = DateTime.Now;
this.EncodedText = text;
this.EncodedText = this.EncodedText.Replace("<EOF>", "");
this.themeEmails = te;
string[] array = this.EncodedText.Split(new char[]
{
'~'
});
this.dick = new Dictionary<string, string>();
foreach (string text2 in array)
{
string[] array3 = text2.Split(new string[]
{
"$#="
}, StringSplitOptions.RemoveEmptyEntries);
bool flag = this.dick.ContainsKey(array3[0]);
if (!flag)
{
bool flag2 = array3.Count<string>() == 1;
if (flag2)
{
this.dick.Add(array3[0], null);
}
else
{
this.dick.Add(array3[0], array3[1]);
}
}
}
this.Theme = this.GetVal("theme");
this.AlertLevel = this.GetVal("alertlevel");
this.Subject = this.GetVal("subject");
this.Body = this.GetVal("body");
this.Recipients = this.GetVal("recipients");
this.EmailBCC = this.GetVal("emailBCC");
this.EmailCC = this.GetVal("emailCC");
this.Attachments = this.GetVal("emailAttachments");
this.Images = this.GetVal("emailImages");
this.EmailReplyTo = this.GetVal("emailReplyTo");
this.SayIt = Convert.ToBoolean(this.GetVal("sayIt"));
this.EmailIt = Convert.ToBoolean(this.GetVal("emailIt"));
try
{
this.Phoneit = Convert.ToBoolean(this.GetVal("phoneCall"));
}
catch
{
string text3 = this.GetVal("phoneCall");
bool flag3 = text3.StartsWith("AUTO");
if (flag3)
{
text3 = text3.Replace("AUTO-", "");
bool flag4 = this.AlertLevel == text3;
if (flag4)
{
this.Phoneit = true;
}
else
{
this.Phoneit = false;
}
}
}
this.YahooMessenger = Convert.ToBoolean(this.GetVal("ym"));
this.SmsIt = Convert.ToBoolean(this.GetVal("sms"));
this.Escalation = this.GetVal("escalation");
bool flag5 = this.Phoneit || this.SmsIt;
if (flag5)
{
this.PhoneNumbers = this.GetVal("numbers");
}
this.SendingEmailStatus = "";
this.NotifyPropertyChanged("ym");
}
catch (Exception ex)
{
SocketClient.Send(Settings.Default.PhoneIP, Settings.Default.SpeechPort, "Error Parsing Alarm");
Logger.Log(string.Concat(new string[]
{
"Error parsing alarm ",
this.EncodedText,
"Exception:",
ex.Message,
ex.StackTrace
}), "iMonitorApp", "iMonitor");
}
}
// Token: 0x06000120 RID: 288 RVA: 0x0000AB2C File Offset: 0x00008D2C
private void NotifyPropertyChanged(string propertyName = "")
{
bool flag = this.PropertyChanged != null;
if (flag)
{
this.PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
// Token: 0x06000121 RID: 289 RVA: 0x0000AB5C File Offset: 0x00008D5C
public void Process()
{
try
{
bool sayIt = this.SayIt;
if (sayIt)
{
this.Say();
}
}
catch (Exception ex)
{
this.SendingEmailStatus = "Error Saying - " + ex.Message;
}
try
{
bool emailIt = this.EmailIt;
if (emailIt)
{
this.Email(false);
}
}
catch (Exception ex2)
{
bool flag = ex2.Message.Contains("The specified path");
if (flag)
{
this.message.Subject = "Attachment Ignored - " + this.message.Subject;
MailMessage mailMessage = this.message;
mailMessage.Body = mailMessage.Body + "Attachment Ignored because: " + ex2.Message;
try
{
this.Email(true);
}
catch (Exception ex3)
{
this.SendingEmailStatus = "Error sending Email - " + ex3.Message;
}
}
}
try
{
bool phoneit = this.Phoneit;
if (phoneit)
{
this.PhoneCall();
}
}
catch (Exception ex4)
{
this.SendingEmailStatus = "Error sending Phonecall- " + ex4.Message;
}
try
{
bool smsIt = this.SmsIt;
if (smsIt)
{
this.SMS();
}
}
catch (Exception ex5)
{
this.SendingEmailStatus = "Error sending SMS- " + ex5.Message;
}
}
// Token: 0x06000122 RID: 290 RVA: 0x0000ACEC File Offset: 0x00008EEC
private void PhoneCall()
{
SocketClient.Send(Settings.Default.PhoneIP, Settings.Default.PhonePort, this.PhoneNumbers + "<EOF>");
Logger.Log("Phone Call Sent: " + this.PhoneNumbers, "PhoneLogs", "iMonitor");
}
// Token: 0x06000123 RID: 291 RVA: 0x000038AE File Offset: 0x00001AAE
private void SMS()
{
}
// Token: 0x06000124 RID: 292 RVA: 0x0000AD44 File Offset: 0x00008F44
private string GetVal(string key)
{
bool flag = this.dick.ContainsKey(key);
string result;
if (flag)
{
result = this.dick[key];
}
else
{
result = null;
}
return result;
}
// Token: 0x06000125 RID: 293 RVA: 0x0000AD78 File Offset: 0x00008F78
private void Say()
{
SocketClient.Send(Settings.Default.PhoneIP, Settings.Default.SpeechPort, this.Subject.Replace("<EOF>", ""));
Logger.Log("Speech Sent: " + this.Subject.Replace("<EOF>", ""), "SpeechLogs", "iMonitor");
}
// Token: 0x06000126 RID: 294 RVA: 0x0000ADDF File Offset: 0x00008FDF
private void Say(string text)
{
SocketClient.Send(Settings.Default.PhoneIP, Settings.Default.SpeechPort, text);
Logger.Log("Speech Sent: " + text, "SpeechLogs", "iMonitor");
}
// Token: 0x06000127 RID: 295 RVA: 0x0000AE14 File Offset: 0x00009014
private void Email(bool ignoreAttach = false)
{
string firstTheme = this.Theme.Split(new char[]
{
','
})[0];
ThemeEmail themeEmail = (from p in this.themeEmails.EmailList
where p.ThemeName.ToLower() == firstTheme.ToLower()
select p).FirstOrDefault<ThemeEmail>();
bool flag = themeEmail == null;
string text;
string password;
string displayName;
if (flag)
{
text = "iAlarm@4ecap.com";
password = "iAlarm";
displayName = "Theme NA";
}
else
{
text = themeEmail.EmailAddress;
displayName = themeEmail.DisplayName;
password = themeEmail.Password;
}
bool flag2 = firstTheme.ToLower() == "etrading";
if (flag2)
{
text = "etrading@fourelements.sg";
password = "etr4ec2014";
displayName = "E-Trading";
}
bool flag3 = firstTheme.ToLower() == "idstrategy";
if (flag3)
{
text = "idstrategy@fourelements.sg";
password = "idstra4ec2014";
displayName = "ID Strategy";
}
bool flag4 = firstTheme.ToLower() == "port";
if (flag4)
{
text = "portfolio@fourelements.sg";
password = "JaeVKpPF0j8F";
displayName = "Portfolio";
}
bool flag5 = firstTheme.ToLower() == "execution";
if (flag5)
{
text = "execution@fourelements.sg";
password = "n1ngm1KObdbx";
displayName = "Execution";
}
bool flag6 = firstTheme.ToLower() == "bb";
if (flag6)
{
text = "bb@fourelements.sg";
password = "jpUb3Eurer0u";
displayName = themeEmail.DisplayName;
}
bool flag7 = firstTheme.ToLower() == "reporting.external";
if (flag7)
{
text = "info@fourelements.sg";
password = "infoEC2014";
displayName = "Four Elements Capital";
}
bool flag8 = firstTheme.ToLower() == "quantopen";
if (flag8)
{
text = "quantopen@fourelements.sg";
password = "quant2017";
displayName = "QuantOpen";
}
bool flag9 = firstTheme.ToLower() == "alphien";
if (flag9)
{
text = "alphien@fourelements.sg";
password = "alph2017";
displayName = "Alphien";
}
MailAddress from = new MailAddress(text, displayName);
this.message = new MailMessage();
this.message.From = from;
foreach (string text2 in this.Recipients.Split(new char[]
{
','
}))
{
string address = text2.ToLower().Replace("ls@4ecap.com", "lionel@4ecap.com");
this.message.To.Add(new MailAddress(address));
}
bool flag10 = this.EmailCC != null;
if (flag10)
{
foreach (string text3 in this.EmailCC.Split(new char[]
{
','
}))
{
string address2 = text3.ToLower().Replace("ls@4ecap.com", "lionel@4ecap.com");
this.message.CC.Add(new MailAddress(address2));
}
}
bool flag11 = this.EmailBCC != null;
if (flag11)
{
foreach (string address3 in this.EmailBCC.Split(new char[]
{
','
}))
{
this.message.Bcc.Add(new MailAddress(address3));
}
}
bool flag12 = this.EmailReplyTo != null;
if (flag12)
{
foreach (string address4 in this.EmailReplyTo.Split(new char[]
{
','
}))
{
this.message.ReplyToList.Add(new MailAddress(address4));
}
}
this.message.Subject = this.Subject;
bool phoneit = this.Phoneit;
if (phoneit)
{
this.message.Subject = "☎Phone: " + this.Subject;
}
bool flag13 = this.Escalation != null;
if (flag13)
{
bool flag14 = this.Escalation.StartsWith("Override");
if (flag14)
{
}
}
this.message.Body = this.Body;
this.message.IsBodyHtml = true;
bool flag15 = !ignoreAttach;
if (flag15)
{
bool flag16 = this.Attachments != null;
if (flag16)
{
foreach (string text4 in this.Attachments.Split(new char[]
{
','
}))
{
bool flag17 = text4.Trim() != "";
if (flag17)
{
Attachment item = new Attachment(text4);
this.message.Attachments.Add(item);
this.message.Priority = MailPriority.High;
}
}
}
bool flag18 = this.Images != null;
if (flag18)
{
string text5 = "";
int num = 0;
List<string> list = new List<string>();
foreach (string text6 in this.Images.Split(new char[]
{
','
}))
{
bool flag19 = text6.Trim() != "";
if (flag19)
{
Guid guid = Guid.NewGuid();
text5 = text5 + "<img alt='embeddedimage' src=cid:embeddedImage_" + guid.ToString() + ">";
list.Add(guid.ToString());
num++;
}
}
bool flag20 = this.Body.Contains("{{{IMG}}}");
AlternateView alternateView;
if (flag20)
{
alternateView = AlternateView.CreateAlternateViewFromString(this.Body.Replace("{{{IMG}}}", text5), null, "text/html");
}
else
{
alternateView = AlternateView.CreateAlternateViewFromString(this.Body + "<br/>" + text5, null, "text/html");
}
num = 0;
foreach (string text7 in this.Images.Split(new char[]
{
','
}))
{
bool flag21 = text7.Trim() != "";
if (flag21)
{
LinkedResource linkedResource = new LinkedResource(text7);
linkedResource.ContentId = "embeddedImage_" + list[num];
linkedResource.TransferEncoding = TransferEncoding.Base64;
alternateView.LinkedResources.Add(linkedResource);
num++;
}
}
this.message.AlternateViews.Add(alternateView);
}
}
this.sc = new SmtpClient();
this.sc.Host = "smtp.gmail.com";
this.sc.Port = 587;
this.sc.EnableSsl = true;
ServicePointManager.ServerCertificateValidationCallback += (p0, p1, p2, p3) => true;
bool flag22 = firstTheme.ToLower() == "etrading" || firstTheme.ToLower() == "idstrategy" || firstTheme.ToLower() == "port" || firstTheme.ToLower() == "execution" || firstTheme.ToLower() == "bb" || firstTheme.ToLower() == "quantopen" || firstTheme.ToLower() == "alphien";
if (flag22)
{
this.sc.Host = Settings.Default.FourElementsMailServer;
this.sc.Port = Settings.Default.FourElementsMailServerPort;
}
this.sc.Credentials = new NetworkCredential(text, password);
this.sc.SendCompleted += this.sc_SendCompleted;
try
{
this.SendingEmailStatus = "Processing...";
this.sc.Send(this.message);
this.SendingEmailStatus = "Sent - " + this.sc.Host + DateTime.Now.ToShortTimeString();
}
catch (Exception ex)
{
this.SendingEmailStatus = "Error - " + ex.Message;
bool flag23 = themeEmail.BackupEmail != "";
if (flag23)
{
try
{
this.sc.Credentials = new NetworkCredential(themeEmail.BackupEmail, themeEmail.BackupPassword);
this.SendingEmailStatus = "Backup Processing...";
this.sc.Send(this.message);
this.SendingEmailStatus = "Sent Backup- " + DateTime.Now.ToShortTimeString();
}
catch (Exception ex2)
{
this.SendingEmailStatus = "Error Backup - " + ex2.Message;
this.Say("Error sending email: " + this.Subject);
}
}
}
foreach (Attachment attachment in this.message.Attachments)
{
attachment.Dispose();
}
foreach (AlternateView alternateView2 in this.message.AlternateViews)
{
alternateView2.Dispose();
}
this.message.AlternateViews.Dispose();
this.message.Attachments.Dispose();
}
// Token: 0x06000128 RID: 296 RVA: 0x0000B808 File Offset: 0x00009A08
private void CheckSent(object state)
{
bool flag = this.SendingEmailStatus.StartsWith("Sent");
if (flag)
{
this.timer.Dispose();
}
else
{
try
{
this.sc.SendAsyncCancel();
this.SendingEmailStatus = "Retrying - " + DateTime.Now.ToShortTimeString();
this.sc.Send(this.message);
this.SendingEmailStatus = "Sent - " + this.sc.Host + DateTime.Now.ToShortTimeString();
Logger.Log("Sync SendCompleted: " + this.Subject + " Status: Sent", "EmailLogs", "iMonitor");
this.timer.Dispose();
}
catch (Exception ex)
{
this.timer.Dispose();
SocketClient.Send(Settings.Default.PhoneIP, Settings.Default.SpeechPort, "Unable to send emails");
Logger.Log("Error Speech Sent: Unable to send emails", "SpeechLogs", "iMonitor");
this.SendingEmailStatus = "Error - " + ex.Message;
}
}
}
// Token: 0x06000129 RID: 297 RVA: 0x0000B940 File Offset: 0x00009B40
private void sc_SendCompleted(object sender, AsyncCompletedEventArgs e)
{
string text = (string)e.UserState;
Logger.Log("SendCompleted: " + this.Subject + " Status:" + text, "EmailLogs", "iMonitor");
bool cancelled = e.Cancelled;
if (cancelled)
{
this.SendingEmailStatus = "Cancelled - " + text;
}
bool flag = e.Error != null;
if (flag)
{
this.SendingEmailStatus = "Error - " + text;
}
else
{
this.SendingEmailStatus = "Sent - " + DateTime.Now.ToShortTimeString();
}
foreach (Attachment attachment in this.message.Attachments)
{
attachment.Dispose();
}
foreach (AlternateView alternateView in this.message.AlternateViews)
{
alternateView.Dispose();
}
this.message.AlternateViews.Dispose();
this.message.Attachments.Dispose();
}
// Token: 0x0600012A RID: 298 RVA: 0x0000BAA0 File Offset: 0x00009CA0
public static string GetAlarmXML(string subject, List<string> themes, string body, string overridealarmlevel = "NULL", bool say = true, bool email = true, string phone = "AUTO-m", int escalateTicks = 5, int escalateInterval = 15, string uri = "http://4ecappcsg11:5001/Convertor.aspx")
{
string text = "<IMONITOR>";
text = text + "<SUBJECT>" + subject + "</SUBJECT>";
foreach (string str in themes)
{
text = text + "<THEME>" + str + "</THEME>";
}
text = text + "<BODY>" + body + "</BODY>";
text = text + "<OVERRIDEALARMLEVEL>" + overridealarmlevel + "</OVERRIDEALARMLEVEL>";
text = text + "<SAY>" + say.ToString().ToUpper() + "</SAY>";
text = text + "<EMAIL>" + email.ToString().ToUpper() + "</EMAIL>";
text = text + "<PHONE>" + phone + "</PHONE>";
text = text + "<ESCALATETICKS>" + escalateTicks.ToString() + "</ESCALATETICKS>";
text = text + "<ESCALATEINTERVAL>" + escalateInterval.ToString() + "</ESCALATEINTERVAL>";
text += "</IMONITOR>";
Uri address = new Uri(uri);
string result;
using (WebClient webClient = new WebClient())
{
string text2 = webClient.UploadString(address, "POST", text);
result = text2;
}
return result;
}
// Token: 0x040000C9 RID: 201
private ThemeEmails themeEmails;
// Token: 0x040000CA RID: 202
private MailMessage message;
// Token: 0x040000CB RID: 203
private SmtpClient sc;
// Token: 0x040000CC RID: 204
private Dictionary<string, string> dick;
// Token: 0x040000CD RID: 205
private Timer timer;
}
}