Esempio n. 1
0
        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);
        }
Esempio n. 2
0
        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);
        }
Esempio n. 3
0
        /// <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);
            }
        }
Esempio n. 4
0
        /// <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);
            }
        }
Esempio n. 5
0
        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";
        }
Esempio n. 6
0
        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);
        }
Esempio n. 7
0
 protected override void Visit_SELF(SELF node)
 {
     /* MOVE CODE HERE */
 }
Esempio n. 8
0
 protected virtual void Visit_SELF(SELF node)
 {
 }