protected void cancelpendingcmdbutton_Click(object sender, EventArgs e) { using (VendingModelContainer dc = new VendingModelContainer()) { using (var dbContextTransaction = dc.Database.BeginTransaction()) { try { Accounts tmpacc = dc.Accounts.First(x => x.UserID == HttpContext.Current.User.Identity.Name && x.Valid && !x.Suspended); WaterDevices tmpdev = dc.WaterDevices.First(x => x.ID == wvdid && x.Valid && x.AccountID == tmpacc.ID); WaterDeviceCommands cmdtocancel = dc.WaterDeviceCommands.Where(x => x.WaterDeviceID == tmpdev.ID && x.RequestedDatetime == 0).First(); dc.WaterDeviceCommands.Remove(cmdtocancel); dc.SaveChanges(); dbContextTransaction.Commit(); ScriptManager.RegisterClientScriptBlock((sender as Control), this.GetType(), "alert", "alert('Команда успешно отменена.')", true); Logger.AccountLog(Request.UserHostAddress, "отмена команды устройству №" + cmdtocancel.WaterDeviceID, cmdtocancel.Command, cmdtocancel.WaterDeviceID); Logger.SystemLog(Request.UserHostAddress, "отмена команды устройству №" + cmdtocancel.WaterDeviceID, cmdtocancel.Command, "Server"); } catch (Exception ex) { Logger.SystemLog(Request.UserHostAddress, "Ошибка: " + ex.Message, ex.InnerException?.Message, User.Identity.Name); } } } FillTablesWithData(); }
protected void changedevmodetotpbutton_Click(object sender, EventArgs e) { TwoFactorAuth tfa = new TwoFactorAuth(WWWVars.SiteName); Accounts useracc = null; using (VendingModelContainer dc = new VendingModelContainer()) { useracc = dc.Accounts.First(x => x.UserID == HttpContext.Current.User.Identity.Name && x.Valid && !x.Suspended); if (useracc.TOTPSecret != "" && changedevmodetotp.Text != "") { if (tfa.VerifyCode(useracc.TOTPSecret, changedevmodetotp.Text)) { DateTime cdt = DateTime.Now; long cdtlong = Convert.ToInt64(cdt.ToString("yyyyMMddHHmmss")); string cdtstr = cdt.ToString("dd.MM.yyyy HH:mm:ss"); WDCmd tmpwdcmd = null; string cmddescr = ""; switch (devmodecb.SelectedValue) { case "salesmode": { tmpwdcmd = WDCmdSet.GoToSalesMode; cmddescr = "Переход в РЕЖИМ ПРОДАЖ"; break; } case "oosmode": { tmpwdcmd = WDCmdSet.GoToOOSMode; cmddescr = "Переход в режим НЕ ОБСЛУЖИВАЕТ"; break; } case "servicemode": { tmpwdcmd = WDCmdSet.GoToServiceMode; cmddescr = "Переход в СЛУЖЕБНЫЙ РЕЖИМ"; break; } case "shutdown": { tmpwdcmd = WDCmdSet.Shutdown; cmddescr = "ВЫКЛЮЧЕНИЕ"; break; } case "reboot": { tmpwdcmd = WDCmdSet.Reboot; cmddescr = "ПЕРЕЗАГРУЗКА"; break; } case "incasso": { tmpwdcmd = WDCmdSet.Incassation; cmddescr = "ИНКАССАЦИЯ"; break; } case "KKTCloseStage": { tmpwdcmd = WDCmdSet.KKTCloseStage; cmddescr = "ЗАКРЫТИЕ СМЕНЫ"; break; } case "KKTRegistrationMode": { tmpwdcmd = WDCmdSet.KKTRegistrationMode; cmddescr = "ККТ: РЕЖИМ РЕГИСТРАЦИИ"; break; } case "KKTOpenStage": { tmpwdcmd = WDCmdSet.KKTOpenStage; cmddescr = "ККТ: ОТКРЫТЬ СМЕНУ"; break; } case "KKTCancelReceipt": { tmpwdcmd = WDCmdSet.KKTCancelReceipt; cmddescr = "ККТ: ОТМЕНА ТЕКУЩЕГО ЧЕКА"; break; } case "Unregister": { tmpwdcmd = WDCmdSet.Unregister; cmddescr = "Удаление устройства (отмена регистрации)"; break; } } //формируем команду WaterDeviceCommands tmpcmd = new WaterDeviceCommands() { AckDatetime = 0, AckDatetimeStr = "", Command = tmpwdcmd.Command, FormedDatetime = cdtlong, FormedDatetimeStr = cdtstr, WaterDeviceID = wvdid, RequestedDatetime = 0, RequestedDatetimeStr = "", Result = "" }; dc.WaterDeviceCommands.Add(tmpcmd); dc.SaveChanges(); Logger.AccountLog(Request.UserHostAddress, "Новая команда устройству №" + tmpcmd.WaterDeviceID, tmpcmd.Command, tmpcmd.WaterDeviceID); Logger.SystemLog(Request.UserHostAddress, "Новая команда устройству №" + tmpcmd.WaterDeviceID, tmpcmd.Command, "Server"); changedevmodetotpbox.Visible = false; changedevmodebutton.Visible = true; changedevmodemsg.Text = ""; //devmodecb.SelectedIndex = 0; devmodecb.Enabled = true; ScriptManager.RegisterClientScriptBlock((sender as Control), this.GetType(), "alert", "alert('Команда \"" + cmddescr + "\" сформирована. Дождитесь ее выполнения на устройстве.')", true); } else { changedevmodetotpmsg.Text = "Неверный одноразовый пароль"; changedevmodebutton.Visible = false; changedevmodetotpbox.Visible = true; } } } FillTablesWithData(); }
protected void Page_Load(object sender, EventArgs e) { using (VendingModelContainer dc = new VendingModelContainer()) { try { DateTime dt = DateTime.Now; long cdt = Convert.ToInt64(dt.ToString("yyyyMMddHHmmss")); string cdtstr = dt.ToString("dd.MM.yyyy HH:mm:ss"); var waterdevices = dc.WaterDevices; //считываем запрос string encryptedrequest = Request.Form["Request"]; byte[] encryptedrequestbytes = Convert.FromBase64String(encryptedrequest); string signature = Request.Form["Signature"]; byte[] signaturebytes = Convert.FromBase64String(signature); string encryptedaeskey = Request.Form["AData"]; byte[] encryptedaeskeybytes = Convert.FromBase64String(encryptedaeskey); string encryptediv = Request.Form["BData"]; byte[] encryptedivbytes = Convert.FromBase64String(encryptediv); //инициализируем криптодвижок для расшифровки CspParameters cspParams = new CspParameters { ProviderType = 1 }; RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(cspParams); CryptoHelper ch = new CryptoHelper(); //расшифровываем симметричный ключ и вектор инициализации byte[] AESKeyBytes = ch.DecryptData(encryptedaeskeybytes); byte[] AESIVBytes = ch.DecryptData(encryptedivbytes); AesCryptoServiceProvider AESProv = new AesCryptoServiceProvider { Mode = CipherMode.CBC, Padding = PaddingMode.PKCS7, KeySize = 128, Key = AESKeyBytes, IV = AESIVBytes }; //расшифровываем запрос string plaintext = ""; MemoryStream memoryStream = null; try { memoryStream = new MemoryStream(encryptedrequestbytes); using (CryptoStream cryptoStream = new CryptoStream(memoryStream, AESProv.CreateDecryptor(), CryptoStreamMode.Read)) { plaintext = new StreamReader(cryptoStream, Encoding.UTF8).ReadToEnd(); } } finally { if (memoryStream != null) { memoryStream.Dispose(); } } //byte[] plaintextbytes = rsaProvider.Decrypt(encryptedrequestbytes, false); long devid = Deserialize <long>(plaintext); //инициализируем криптодвижок для проверки подписи присланных данных rsaProvider = new RSACryptoServiceProvider(); var tmpdev = dc.WaterDevices.First(x => x.ID == devid && x.Valid); rsaProvider.ImportCspBlob(tmpdev.PublicKey); bool signcorrect = rsaProvider.VerifyData(Encoding.UTF8.GetBytes(plaintext), CryptoConfig.MapNameToOID("SHA512"), signaturebytes); if (signcorrect) { WaterDeviceCommands tmpcmd = dc.WaterDeviceCommands.First(x => x.WaterDeviceID == tmpdev.ID && x.RequestedDatetime == 0); tmpcmd.RequestedDatetime = cdt; tmpcmd.RequestedDatetimeStr = cdtstr; dc.SaveChanges(); if (tmpcmd.Command == "Unregister") { tmpdev.Valid = false; dc.SaveChanges(); } Response.Write(tmpcmd.Command); } } catch /*(Exception ex)*/ { } finally { } } }