/// <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); }
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(); } }
/// <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; }
/// <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); }