Example #1
0
        /// <summary>
        ///     Saves an update project.
        /// </summary>
        /// <param name="path">The path of the project file.</param>
        /// <param name="project">The project to save.</param>
        public static void SaveProject(string path, UpdateProject project)
        {
            var serializedContent = Serializer.Serialize(project);

            File.WriteAllText(path, serializedContent);
        }
Example #2
0
        private void continueButton_Click(object sender, EventArgs e)
        {
            if (_sender == generalTabPage)
            {
                if (!ValidationManager.Validate(generalPanel))
                {
                    Popup.ShowPopup(this, SystemIcons.Error, "Missing information found.",
                        "All fields need to have a value.", PopupButtons.Ok);
                    return;
                }

                if (!_generalTabPassed)
                {
                    _projectConfiguration =
                        ProjectConfiguration.Load().ToList();
                    if (_projectConfiguration != null)
                    {
                        if (_projectConfiguration.Any(item => item.Name == nameTextBox.Text))
                        {
                            Popup.ShowPopup(this, SystemIcons.Error, "The project is already existing.",
                                String.Format(
                                    "The project \"{0}\" is already existing.",
                                    nameTextBox.Text), PopupButtons.Ok);
                            return;
                        }
                    }
                    else
                    {
                        _projectConfiguration = new List<ProjectConfiguration>();
                    }
                }

                if (!Uri.IsWellFormedUriString(updateUrlTextBox.Text, UriKind.Absolute))
                {
                    Popup.ShowPopup(this, SystemIcons.Error, "Invalid adress.", "The given Update-URL is invalid.",
                        PopupButtons.Ok);
                    return;
                }

                if (!Path.IsPathRooted(localPathTextBox.Text))
                {
                    Popup.ShowPopup(this, SystemIcons.Error, "Invalid path.",
                        "The given local path for the project is invalid.", PopupButtons.Ok);
                    return;
                }

                try
                {
                    Path.GetFullPath(localPathTextBox.Text);
                }
                catch
                {
                    Popup.ShowPopup(this, SystemIcons.Error, "Invalid path.",
                        "The given local path for the project is invalid.", PopupButtons.Ok);
                    return;
                }

                _sender = ftpTabPage;
                backButton.Enabled = true;
                informationCategoriesTabControl.SelectedTab = ftpTabPage;
            }
            else if (_sender == ftpTabPage)
            {
                if (!ValidationManager.Validate(ftpPanel) || String.IsNullOrEmpty(ftpPasswordTextBox.Text))
                {
                    Popup.ShowPopup(this, SystemIcons.Error, "Missing information found.",
                        "All fields need to have a value.", PopupButtons.Ok);
                    return;
                }

                _ftp.Host = ftpHostTextBox.Text;
                _ftp.Port = int.Parse(ftpPortTextBox.Text);
                _ftp.Username = ftpUserTextBox.Text;
                _ftp.Directory = ftpDirectoryTextBox.Text;

                var ftpPassword = new SecureString();
                foreach (var c in ftpPasswordTextBox.Text)
                {
                    ftpPassword.AppendChar(c);
                }
                _ftp.Password = ftpPassword; // Same instance that FtpManager will automatically dispose

                _ftp.UsePassiveMode = ftpModeComboBox.SelectedIndex == 0;
                _ftp.Protocol = (FtpSecurityProtocol) ftpProtocolComboBox.SelectedIndex;

                if (!backButton.Enabled) // If the back-button was disabled, enabled it again
                    backButton.Enabled = true;

                _sender = statisticsServerTabPage;
                informationCategoriesTabControl.SelectedTab = statisticsServerTabPage;
            }
            else if (_sender == statisticsServerTabPage)
            {
                if (useStatisticsServerRadioButton.Checked)
                {
                    if (SqlDatabaseName == null || String.IsNullOrWhiteSpace(sqlPasswordTextBox.Text))
                    {
                        Popup.ShowPopup(this, SystemIcons.Error, "Missing information found.",
                            "All fields need to have a value.", PopupButtons.Ok);
                        return;
                    }
                }

                _sender = proxyTabPage;
                informationCategoriesTabControl.SelectedTab = proxyTabPage;
            }
            else if (_sender == proxyTabPage)
            {
                if (useProxyRadioButton.Checked)
                {
                    if (!ValidationManager.ValidateTabPage(proxyTabPage) && !String.IsNullOrEmpty(proxyUserTextBox.Text) &&
                        !String.IsNullOrEmpty(proxyPasswordTextBox.Text))
                    {
                        Popup.ShowPopup(this, SystemIcons.Error, "Missing information found.",
                            "All fields need to have a value.", PopupButtons.Ok);
                        return;
                    }
                }

                try
                {
                    using (File.Create(localPathTextBox.Text))
                    {
                    }
                    _projectFileCreated = true;
                }
                catch (IOException ex)
                {
                    Popup.ShowPopup(this, SystemIcons.Error, "Failed to create project file.", ex, PopupButtons.Ok);
                    Close();
                }

                var usePassive = ftpModeComboBox.SelectedIndex == 0;

                WebProxy proxy = null;
                string proxyUsername = null;
                string proxyPassword = null;
                if (!String.IsNullOrEmpty(proxyHostTextBox.Text))
                {
                    proxy = new WebProxy(proxyHostTextBox.Text);
                    if (!String.IsNullOrEmpty(proxyUserTextBox.Text) &&
                        !String.IsNullOrEmpty(proxyPasswordTextBox.Text))
                    {
                        proxyUsername = proxyUserTextBox.Text;
                        if (!saveCredentialsCheckBox.Checked)
                            proxyPassword = Convert.ToBase64String(AesManager.Encrypt(proxyPasswordTextBox.Text,
                                ftpPasswordTextBox.Text,
                                ftpUserTextBox.Text));
                        else
                            proxyPassword =
                                Convert.ToBase64String(AesManager.Encrypt(proxyPasswordTextBox.Text,
                                    Program.AesKeyPassword,
                                    Program.AesIvPassword));
                    }
                }

                string sqlPassword = null;
                if (useStatisticsServerRadioButton.Checked)
                {
                    if (!saveCredentialsCheckBox.Checked)
                        sqlPassword = Convert.ToBase64String(AesManager.Encrypt(sqlPasswordTextBox.Text,
                            ftpPasswordTextBox.Text,
                            ftpUserTextBox.Text));
                    else
                        sqlPassword =
                            Convert.ToBase64String(AesManager.Encrypt(sqlPasswordTextBox.Text, Program.AesKeyPassword,
                                Program.AesIvPassword));
                }

                Settings.Default.ApplicationID += 1;
                Settings.Default.Save();
                Settings.Default.Reload();

                string ftpPassword;
                if (!saveCredentialsCheckBox.Checked)
                    ftpPassword = Convert.ToBase64String(AesManager.Encrypt(ftpPasswordTextBox.Text,
                        ftpPasswordTextBox.Text,
                        ftpUserTextBox.Text));
                else
                    ftpPassword =
                        Convert.ToBase64String(AesManager.Encrypt(ftpPasswordTextBox.Text, Program.AesKeyPassword,
                            Program.AesIvPassword));

                // Create a new package...
                var project = new UpdateProject
                {
                    Path = localPathTextBox.Text,
                    Name = nameTextBox.Text,
                    Guid = Guid.NewGuid().ToString(),
                    ApplicationId = Settings.Default.ApplicationID,
                    UpdateUrl = updateUrlTextBox.Text,
                    Packages = null,
                    SaveCredentials = saveCredentialsCheckBox.Checked,
                    FtpHost = ftpHostTextBox.Text,
                    FtpPort = int.Parse(ftpPortTextBox.Text),
                    FtpUsername = ftpUserTextBox.Text,
                    FtpPassword = ftpPassword,
                    FtpDirectory = ftpDirectoryTextBox.Text,
                    FtpProtocol = ftpProtocolComboBox.SelectedIndex,
                    FtpUsePassiveMode = usePassive,
                    FtpTransferAssemblyFilePath = _ftpAssemblyPath,
                    Proxy = proxy,
                    ProxyUsername = proxyUsername,
                    ProxyPassword = proxyPassword,
                    UseStatistics = useStatisticsServerRadioButton.Checked,
                    SqlDatabaseName = SqlDatabaseName,
                    SqlWebUrl = SqlWebUrl,
                    SqlUsername = SqlUsername,
                    SqlPassword = sqlPassword,
                    PrivateKey = PrivateKey,
                    PublicKey = PublicKey,
                    Log = null
                };

                try
                {
                    UpdateProject.SaveProject(localPathTextBox.Text, project); // ... and save it
                }
                catch (IOException ex)
                {
                    Popup.ShowPopup(this, SystemIcons.Error, "Error while saving the project file.", ex, PopupButtons.Ok);
                    _mustClose = true;
                    Reset();
                }

                try
                {
                    var projectDirectoryPath = Path.Combine(Program.Path, "Projects", nameTextBox.Text);
                    Directory.CreateDirectory(projectDirectoryPath);
                }
                catch (Exception ex)
                {
                    Popup.ShowPopup(this, SystemIcons.Error, "Error while creating the project'S directory.", ex,
                        PopupButtons.Ok);
                    _mustClose = true;
                    Reset();
                }

                try
                {
                    _projectConfiguration.Add(new ProjectConfiguration(nameTextBox.Text, localPathTextBox.Text));
                    File.WriteAllText(Program.ProjectsConfigFilePath, Serializer.Serialize(_projectConfiguration));
                    _projectConfigurationEdited = true;
                }
                catch (Exception ex)
                {
                    Popup.ShowPopup(this, SystemIcons.Error,
                        "Error while editing the project confiuration file. Please choose another name for the project.",
                        ex,
                        PopupButtons.Ok);
                    _mustClose = true;
                    Reset();
                }

                if (useStatisticsServerRadioButton.Checked)
                {
                    var phpFilePath = Path.Combine(Program.Path, "Projects", nameTextBox.Text, "statistics.php");
                    try
                    {
                        File.WriteAllBytes(phpFilePath, Resources.statistics);

                        var phpFileContent = File.ReadAllText(phpFilePath);
                        phpFileContent = phpFileContent.Replace("_DBURL", SqlWebUrl);
                        phpFileContent = phpFileContent.Replace("_DBUSER", SqlUsername);
                        phpFileContent = phpFileContent.Replace("_DBNAME", SqlDatabaseName);
                        phpFileContent = phpFileContent.Replace("_DBPASS", sqlPasswordTextBox.Text);
                        File.WriteAllText(phpFilePath, phpFileContent);
                        _phpFileCreated = true;
                    }
                    catch (Exception ex)
                    {
                        Popup.ShowPopup(this, SystemIcons.Error, "Failed to initialize the project-files.", ex,
                            PopupButtons.Ok);
                        _mustClose = true;
                        Reset();
                    }
                }

                _generalTabPassed = true;
                InitializeProject();
            }
        }
Example #3
0
        /// <summary>
        ///     Loads an update project.
        /// </summary>
        /// <param name="path">The path of the project file.</param>
        /// <returns>Returns the read update project.</returns>
        public static UpdateProject LoadProject(string path)
        {
            string jsonString = File.ReadAllText(path);
            JObject jObject = JObject.Parse(jsonString);
            JToken value;
            if (typeof(UpdateProject).GetProperties().All(property => jObject.TryGetValue(property.Name, out value) && property.PropertyType == value.Type.GetType()))
                return Serializer.Deserialize<UpdateProject>(jsonString);

            UpdateProject newProject = null;
            if (!jObject.TryGetValue("ConfigVersion", out value)) // Was before 1.0.0.0 Beta 2 as this property has been added there
            {
                var oldProject = Serializer.Deserialize<OldUpdateProject>(jsonString);
                newProject = new UpdateProject
                {
                    ApplicationId = oldProject.ApplicationId,
                    AssemblyVersionPath = oldProject.AssemblyVersionPath,
                    FtpDirectory = oldProject.FtpDirectory,
                    FtpHost = oldProject.FtpHost,
                    FtpUsername = oldProject.FtpUsername,
                    FtpPassword = oldProject.FtpPassword,
                    FtpPort = oldProject.FtpPort,
                    FtpProtocol = oldProject.FtpProtocol,
                    FtpTransferAssemblyFilePath = oldProject.FtpTransferAssemblyFilePath,
                    FtpUsePassiveMode = oldProject.FtpUsePassiveMode,
                    Guid = oldProject.Guid,
                    Log = oldProject.Log,
                    Name = oldProject.Name,
                    Packages = new List<UpdatePackage>(),
                    Path = oldProject.Path,
                    PrivateKey = oldProject.PrivateKey,
                    PublicKey = oldProject.PublicKey,
                    Proxy = oldProject.Proxy,
                    ProxyPassword = oldProject.ProxyPassword,
                    ProxyUsername = oldProject.ProxyUsername,
                    SaveCredentials = oldProject.SaveCredentials,
                    SqlDatabaseName = oldProject.SqlDatabaseName,
                    SqlPassword = oldProject.SqlPassword,
                    SqlUsername = oldProject.SqlUsername,
                    SqlWebUrl = oldProject.SqlWebUrl,
                    UpdateUrl = oldProject.UpdateUrl,
                    UseStatistics = oldProject.UseStatistics,
                };

                JToken packagesToken;
                jObject.TryGetValue("Packages", out packagesToken);
                if (packagesToken != null)
                {
                    var packages = packagesToken.ToObject<List<OldUpdatePackage>>();
                    for (int i = 0; i <= packages.Count - 1; ++i)
                    {
                        var newPackage = new UpdatePackage
                        {
                            Description = packages[i].Description,
                            IsReleased = packages[i].IsReleased,
                            LocalPackagePath = packages[i].LocalPackagePath
                        };

                        var developmentalStage = (int)packages[i].Version.DevelopmentalStage;
                        switch (developmentalStage)
                        {
                            case 0: // This was release
                                newPackage.Version = packages[i].Version.ToString();
                                break;
                            case 1: // This was Beta
                                newPackage.Version = new UpdateVersion(packages[i].Version.Major,
                                    packages[i].Version.Minor, packages[i].Version.Build, packages[i].Version.Revision,
                                    DevelopmentalStage.Beta, packages[i].Version.DevelopmentBuild).ToString();
                                break;
                            case 2: // This was Alpha
                                newPackage.Version = new UpdateVersion(packages[i].Version.Major,
                                    packages[i].Version.Minor, packages[i].Version.Build, packages[i].Version.Revision,
                                    DevelopmentalStage.Alpha, packages[i].Version.DevelopmentBuild).ToString();
                                break;
                        }

                        newProject.Packages.Add(newPackage);
                    }
                }
            }

            if (newProject == null)
                newProject = Serializer.Deserialize<UpdateProject>(jsonString);
            SaveProject(newProject.Path, newProject);
            return newProject;
        }
Example #4
0
 /// <summary>
 ///     Saves an update project.
 /// </summary>
 /// <param name="path">The path of the project file.</param>
 /// <param name="project">The project to save.</param>
 public static void SaveProject(string path, UpdateProject project)
 {
     var serializedContent = Serializer.Serialize(project);
     File.WriteAllText(path, serializedContent);
 }
Example #5
0
        /// <summary>
        ///     Loads an update project.
        /// </summary>
        /// <param name="path">The path of the project file.</param>
        /// <returns>Returns the read update project.</returns>
        public static UpdateProject LoadProject(string path)
        {
            string  jsonString = File.ReadAllText(path);
            JObject jObject    = JObject.Parse(jsonString);
            JToken  value;

            if (
                typeof(UpdateProject).GetProperties()
                .All(
                    property =>
                    jObject.TryGetValue(property.Name, out value) &&
                    property.PropertyType == value.Type.GetType()))
            {
                return(Serializer.Deserialize <UpdateProject>(jsonString));
            }

            UpdateProject newProject = null;

            if (!jObject.TryGetValue("ConfigVersion", out value))
            // Was before 1.0.0.0 Beta 2 as this property has been added there
            {
                var oldProject = Serializer.Deserialize <OldUpdateProject>(jsonString);
                newProject = new UpdateProject
                {
                    ApplicationId               = oldProject.ApplicationId,
                    AssemblyVersionPath         = oldProject.AssemblyVersionPath,
                    FtpDirectory                = oldProject.FtpDirectory,
                    FtpHost                     = oldProject.FtpHost,
                    FtpUsername                 = oldProject.FtpUsername,
                    FtpPassword                 = oldProject.FtpPassword,
                    FtpPort                     = oldProject.FtpPort,
                    FtpProtocol                 = oldProject.FtpProtocol,
                    FtpTransferAssemblyFilePath = oldProject.FtpTransferAssemblyFilePath,
                    FtpUsePassiveMode           = oldProject.FtpUsePassiveMode,
                    Guid            = oldProject.Guid,
                    Log             = oldProject.Log,
                    Name            = oldProject.Name,
                    Packages        = new List <UpdatePackage>(),
                    Path            = oldProject.Path,
                    PrivateKey      = oldProject.PrivateKey,
                    PublicKey       = oldProject.PublicKey,
                    Proxy           = oldProject.Proxy,
                    ProxyPassword   = oldProject.ProxyPassword,
                    ProxyUsername   = oldProject.ProxyUsername,
                    SaveCredentials = oldProject.SaveCredentials,
                    SqlDatabaseName = oldProject.SqlDatabaseName,
                    SqlPassword     = oldProject.SqlPassword,
                    SqlUsername     = oldProject.SqlUsername,
                    SqlWebUrl       = oldProject.SqlWebUrl,
                    UpdateUrl       = oldProject.UpdateUrl,
                    UseStatistics   = oldProject.UseStatistics
                };

                JToken packagesToken;
                jObject.TryGetValue("Packages", out packagesToken);
                if (packagesToken != null)
                {
                    var packages = packagesToken.ToObject <List <OldUpdatePackage> >();
                    for (int i = 0; i <= packages.Count - 1; ++i)
                    {
                        var newPackage = new UpdatePackage
                        {
                            Description      = packages[i].Description,
                            IsReleased       = packages[i].IsReleased,
                            LocalPackagePath = packages[i].LocalPackagePath
                        };

                        var developmentalStage = (int)packages[i].Version.DevelopmentalStage;
                        switch (developmentalStage)
                        {
                        case 0:     // This was release
                            newPackage.Version = packages[i].Version.ToString();
                            break;

                        case 1:     // This was Beta
                            newPackage.Version = new UpdateVersion(packages[i].Version.Major,
                                                                   packages[i].Version.Minor, packages[i].Version.Build, packages[i].Version.Revision,
                                                                   DevelopmentalStage.Beta, packages[i].Version.DevelopmentBuild).ToString();
                            break;

                        case 2:     // This was Alpha
                            newPackage.Version = new UpdateVersion(packages[i].Version.Major,
                                                                   packages[i].Version.Minor, packages[i].Version.Build, packages[i].Version.Revision,
                                                                   DevelopmentalStage.Alpha, packages[i].Version.DevelopmentBuild).ToString();
                            break;
                        }

                        newProject.Packages.Add(newPackage);
                    }
                }
            }

            if (newProject == null)
            {
                newProject = Serializer.Deserialize <UpdateProject>(jsonString);
            }
            SaveProject(newProject.Path, newProject);
            return(newProject);
        }