示例#1
0
        /// <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);
        }
示例#2
0
		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
			{

			}
		}
示例#3
0
 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
     {
     }
 }
示例#4
0
        /// <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;
        }