internal static ForgeJsonMetadata CreateJsonMetadata(ForgeData forgeData, FilesToPack filesToPack) { if (null == forgeData) { throw new ArgumentNullException("forgeData"); } if (null == filesToPack) { throw new ArgumentNullException("filesToPack"); } ForgeJsonMetadata forgeJsonMetadata = null; if (filesToPack.Count > 0) { var forgeUserName = forgeData[Conatants.PuppetForgeUserName]; var forgeModuleName = forgeData[Conatants.PuppetForgeModuleName]; var forgeModuleVersion = forgeData[Conatants.PuppetForgeModuleVersion]; var forgeModuleDependency = forgeData[Conatants.PuppetForgeModuleDependency]; var forgeModuleSummary = forgeData[Conatants.PuppetForgeModuleSummary]; var forgeModuleDescription = forgeData[Conatants.PuppetForgeModuleDescription]; forgeJsonMetadata = new ForgeJsonMetadata { name = string.Format("{0}-{1}", forgeUserName, forgeModuleName.ToLower()), author = forgeUserName, version = forgeModuleVersion, summary = forgeModuleSummary, description = forgeModuleDescription }; // Parse dependency forgeJsonMetadata.dependencies.Add(SELF.ParseDependency(forgeModuleDependency)); // Add MD5 checksums to json using (var md5 = MD5.Create()) { foreach (var fileToPack in filesToPack) { var fileInfo = fileToPack.Item1; var subdir = fileToPack.Item2; var combinedName = string.IsNullOrWhiteSpace(subdir) ? fileInfo.Name : string.Format("{0}/{1}", subdir.Replace(Path.DirectorySeparatorChar, '/'), fileInfo.Name); using (var stream = File.OpenRead(fileToPack.Item1.FullName)) { var byteArray = md5.ComputeHash(stream); forgeJsonMetadata.checksums.Add(combinedName, string.Join("", byteArray.Select(b => b.ToString("x2")))); } } } } return(forgeJsonMetadata); }
private static void UploadTarball(string accessToken, string owner, string moduleName, string moduleModuleTarballPath) { // Setup the variables necessary to make the Request const string url = "https://forgeapi.puppetlabs.com/v2/releases"; var nvc = new NameValueCollection { { "owner", owner }, { "module", moduleName } }; SELF.HttpUploadFile(accessToken, url, moduleModuleTarballPath, "file", "application/gzip", nvc); }
/// <summary> /// This function is the callback used to execute a command when the a menu item is clicked. /// See the Initialize method to see how the menu item is associated to this function using /// the OleMenuCommandService service and the MenuCommand class. /// </summary> private void CreateTarballAndUploadToPuppetForge(object sender, EventArgs e) { try { PuppetProjectNode puppetProjectNode; var filesToPack = this.GetActiveProjectStruture(out puppetProjectNode); // to simplify unittesting - get rid of PuppetProjectNode and use dict instead var forgeData = SELF.TurnIntoDict(puppetProjectNode); var jsonMetadata = SELF.CreateJsonMetadata(forgeData, filesToPack); var gzFileName = SELF.TarGz(forgeData, filesToPack, jsonMetadata); this.UploadToPuppetForgeAsync(forgeData, gzFileName); } catch (Exception ex) { this.MessageBox(ex.Message, Resources.TarballCreationStatus); } }
/// <summary> /// This function is the callback used to execute a command when the a menu item is clicked. /// See the Initialize method to see how the menu item is associated to this function using /// the OleMenuCommandService service and the MenuCommand class. /// </summary> private void CreateTarballLocally(object sender, EventArgs e) { try { PuppetProjectNode puppetProjectNode; var filesToPack = this.GetActiveProjectStruture(out puppetProjectNode); // to simplify unittesting - get rid of PuppetProjectNode and use dict instead var forgeData = SELF.TurnIntoDict(puppetProjectNode); var jsonMetadata = SELF.CreateJsonMetadata(forgeData, filesToPack); var gzFileName = SELF.TarGz(forgeData, filesToPack, jsonMetadata); var packagesDir = new DirectoryInfo(puppetProjectNode.BaseURI.Directory).CreateSubdirectory("packages"); var destFile = System.IO.Path.Combine(packagesDir.ToString(), gzFileName); File.Copy(gzFileName, destFile, true); this.MessageBox(destFile, Resources.TarballSavedSuccessfully); } catch (Exception ex) { this.MessageBox(ex.Message, Resources.TarballCreationStatus); } }
private async void UploadToPuppetForgeAsync(ForgeData forgeData, string tarballName) { if (null == forgeData) { throw new ArgumentNullException("forgeData"); } if (string.IsNullOrEmpty(tarballName)) { throw new ArgumentNullException("tarballName"); } var cancelationSource = new CancellationTokenSource(); var cancelationToken = cancelationSource.Token; var uploadProgressWindow = new UploadProgressWindow(cancelationSource); try { var username = forgeData[Conatants.PuppetForgeUserName]; var forgeModuleName = forgeData[Conatants.PuppetForgeModuleName]; var modulename = forgeModuleName.ToLower(); var moduleversion = forgeData[Conatants.PuppetForgeModuleVersion];; var forgePublishWindow = new ForgePublishWindow { tbAccountName = { Text = username }, tbModuleName = { Text = modulename }, tbModuleVersion = { Text = moduleversion } }; if (this.password != null && this.password.Length != 0) { forgePublishWindow.pwdAcountPassword.Password = SELF.ConvertToUnsecureString(this.password); forgePublishWindow.btnPublish.IsEnabled = true; } var res = forgePublishWindow.ShowDialog(); if (!res.HasValue || res.Value == false) { return; } this.password = forgePublishWindow.pwdAcountPassword.SecurePassword; uploadProgressWindow.Show(); var accessToken = await System.Threading.Tasks.Task.Run(() => { cancelationToken.ThrowIfCancellationRequested(); return(SELF.GetAccessToken(username, this.password)); }, cancelationToken); await System.Threading.Tasks.Task.Run(() => { cancelationToken.ThrowIfCancellationRequested(); SELF.UploadTarball(accessToken, username, modulename, tarballName); }, cancelationToken); uploadProgressWindow.lblStatus.Content = Resources.PuppetModuleUploadedSuccessfully; uploadProgressWindow.progressBar.Value = 100; } catch (OperationCanceledException) { Debug.WriteLine("Canceled"); uploadProgressWindow.lblStatus.Content = "Canceled by user."; uploadProgressWindow.progressBar.Value = 0; } catch (WebException ex) { // This exception will be raised if the server didn't return 200 - OK // Retrieve more information about the error if (ex.Response != null) { using (var err = (HttpWebResponse)ex.Response) { var info = string.Format(Resources.ServerReturnedTemplate, err.StatusDescription, err.StatusCode, err.StatusCode); uploadProgressWindow.lblStatus.Content = info; } } else { uploadProgressWindow.lblStatus.Content = ex.Message; } uploadProgressWindow.progressBar.Value = 0; } catch (Exception ex) { uploadProgressWindow.lblStatus.Content = ex.Message; uploadProgressWindow.progressBar.Value = 0; } uploadProgressWindow.progressBar.IsIndeterminate = false; uploadProgressWindow.btnCancel.Content = "Close"; }
private static string GetAccessToken(string username, SecureString password) { string result = null; // Setup the variables necessary to make the Request const string url = "http://puppetforgegate.cloudapp.net:8080/api/Token"; HttpWebResponse response = null; try { // Create the data to send var data = new StringBuilder(); data.Append("&username="******"&password="******"POST"; request.ContentType = "application/x-www-form-urlencoded"; request.ContentLength = byteArray.Length; // Write data Stream postStream = request.GetRequestStream(); postStream.Write(byteArray, 0, byteArray.Length); postStream.Close(); // Send Request & Get Response response = (HttpWebResponse)request.GetResponse(); var responseStream = response.GetResponseStream(); if (responseStream == null) { return(null); } using (var reader = new StreamReader(responseStream)) { // Get the Response Stream string json = reader.ReadLine(); // Retrieve and Return the Access Token var ser = new JavaScriptSerializer(); var x = (Dictionary <string, object>)ser.DeserializeObject(json); var accessToken = x["AccessToken"].ToString(); result = accessToken; } } finally { if (response != null) { response.Close(); } } return(result); }
protected override void Visit_SELF(SELF node) { /* MOVE CODE HERE */ }
protected virtual void Visit_SELF(SELF node) { }