/// <summary> /// Submit changed data to the cloud. /// </summary> Exception Execute <T>(CloudAction action) { var ws = new WebServiceClient(); ws.Url = SettingsManager.Options.InternetDatabaseUrl; CloudMessage result = null; try { var citems = data.Where(x => x.Action == action); var items = citems.Select(x => x.Item).OfType <T>().ToList(); if (items.Count > 0) { // Add security. var o = SettingsManager.Options; var command = CloudHelper.NewMessage(action, o.UserRsaPublicKey, o.CloudRsaPublicKey, o.Username, o.Password); command.Values.Add(CloudKey.HashedDiskId, o.HashedDiskId, true); //// Add secure credentials. //var rsa = new JocysCom.ClassLibrary.Security.Encryption("Cloud"); //if (string.IsNullOrEmpty(rsa.RsaPublicKeyValue)) //{ // var username = rsa.RsaEncrypt("username"); // var password = rsa.RsaEncrypt("password"); // ws.SetCredentials(username, password); //} // Add changes. if (typeof(T) == typeof(UserGame)) { command.UserGames = items as List <UserGame>; } else if (typeof(T) == typeof(UserDevice)) { command.UserControllers = items as List <UserDevice>; } result = ws.Execute(command); if (result.ErrorCode > 0) { queueTimer.ChangeSleepInterval(5 * 60 * 1000); return(new Exception(result.ErrorMessage)); } foreach (var item in citems) { data.Remove(item); } } } catch (Exception ex) { // Sleep for 5 minutes; queueTimer.ChangeSleepInterval(5 * 60 * 1000); return(ex); } return(null); }
private void LoginButton_Click(object sender, EventArgs e) { // Secure login over insecure webservices. if (LoginButton.Text == "Log In") { var o = SettingsManager.Options; var saveOptions = false; // If user RSA keys are missing then... if (string.IsNullOrEmpty(o.UserRsaPublicKey)) { // Create new RSA keys which will be used to send encrypted credentials. var rsa = new JocysCom.ClassLibrary.Security.Encryption(CloudKey.User); var keys = rsa.RsaNewKeys(2048); o.UserRsaPublicKey = keys.Public; o.UserRsaPrivateKey = keys.Private; saveOptions = true; } var ws = new WebServiceClient(); var url = MainForm.Current.OptionsPanel.InternetDatabaseUrlComboBox.Text; ws.Url = url; CloudMessage results; // If cloud RSA keys are missing then... if (string.IsNullOrEmpty(o.CloudRsaPublicKey)) { // Step 1: Get Server's Public RSA key for encryption. var msg = CloudHelper.NewMessage(CloudAction.GetPublicRsaKey); msg.Values.Add(CloudKey.RsaPublicKey, o.UserRsaPublicKey); // Retrieve public RSA key. results = ws.Execute(msg); if (results.ErrorCode == 0) { o.CloudRsaPublicKey = results.Values.GetValue<string>(CloudKey.RsaPublicKey); saveOptions = true; } } if (saveOptions) { SettingsManager.OptionsData.Save(); } var cmd2 = CloudHelper.NewMessage(CloudAction.LogIn, o.UserRsaPublicKey, o.CloudRsaPublicKey, UsernameTextBox.Text, PasswordTextBox.Text); cmd2.Values.Add(CloudKey.HashedDiskId, o.HashedDiskId); results = ws.Execute(cmd2); } else { } }
private void LoginButton_Click(object sender, EventArgs e) { // Secure login over insecure webservices. if (LoginButton.Text == "Log In") { var o = SettingsManager.Options; var saveOptions = false; if (o.CheckAndFixUserRsaKeys()) { SettingsManager.OptionsData.Save(); } var ws = new WebServiceClient(); var url = MainForm.Current.OptionsPanel.InternetDatabaseUrlComboBox.Text; ws.Url = url; CloudMessage results; // If cloud RSA keys are missing then... if (string.IsNullOrEmpty(o.CloudRsaPublicKey)) { // Step 1: Get Server's Public RSA key for encryption. var msg = CloudHelper.NewMessage(CloudAction.GetPublicRsaKey); msg.Values.Add(CloudKey.RsaPublicKey, o.UserRsaPublicKey); // Retrieve public RSA key. results = ws.Execute(msg); if (results.ErrorCode == 0) { o.CloudRsaPublicKey = results.Values.GetValue <string>(CloudKey.RsaPublicKey); saveOptions = true; } } if (saveOptions) { SettingsManager.OptionsData.Save(); } var cmd2 = CloudHelper.NewMessage(CloudAction.LogIn, o.UserRsaPublicKey, o.CloudRsaPublicKey, UsernameTextBox.Text, PasswordTextBox.Text); cmd2.Values.Add(CloudKey.ComputerId, o.ComputerId, true); results = ws.Execute(cmd2); } else { } }
/// <summary> /// This function will run on different thread than UI. Make sure to use Invoke for interface update. /// </summary> /// <param name="item"></param> /// <returns></returns> void queueTimer_DoWork(object sender, QueueTimerEventArgs e) { var item = e.Item as CloudItem; if (item == null) { return; } item.Try++; Invoke((Action) delegate() { MainForm.Current.AddTask(TaskName.SaveToCloud); }); Exception error = null; try { var ws = new WebServiceClient(); ws.Url = SettingsManager.Options.InternetDatabaseUrl; CloudMessage result = null; var o = SettingsManager.Options; // Check if user public keys are present. o.CheckAndFixUserRsaKeys(); // If cloud RSA keys are missing then... if (string.IsNullOrEmpty(o.CloudRsaPublicKey)) { // Step 1: Get Server's Public RSA key for encryption. var msg = CloudHelper.NewMessage(CloudAction.GetPublicRsaKey); msg.Values.Add(CloudKey.RsaPublicKey, o.UserRsaPublicKey); // Retrieve public RSA key. var results = ws.Execute(msg); if (results.ErrorCode == 0) { o.CloudRsaPublicKey = results.Values.GetValue <string>(CloudKey.RsaPublicKey); SettingsManager.OptionsData.Save(); } else { error = new Exception(result.ErrorMessage); } } // If no errors till this point then... if (error == null) { // Add security. var command = CloudHelper.NewMessage(item.Action, o.UserRsaPublicKey, o.CloudRsaPublicKey, o.Username, o.Password); command.Values.Add(CloudKey.ComputerId, o.ComputerId, true); // If item is UserGame then... if (item.Item.GetType() == typeof(UserGame)) { command.UserGames = new List <UserGame>() { (UserGame)item.Item }; } // If item is UserDevice then... else if (item.Item.GetType() == typeof(UserDevice)) { command.UserDevices = new List <UserDevice>() { (UserDevice)item.Item }; } result = ws.Execute(command); if (result.ErrorCode > 0) { error = new Exception(result.ErrorMessage); } } ws.Dispose(); } catch (Exception ex) { error = ex; } Invoke((Action) delegate() { MainForm.Current.RemoveTask(TaskName.SaveToCloud); }); item.Error = error; item.State = error == null ? CloudState.Done : CloudState.Error; e.Keep = error != null; e.Break = error != null; }