Exemple #1
0
        /// <summary>
        /// Access the state information for a given source control type
        /// </summary>
        /// <param name="type">type of source control to look up</param>
        /// <returns>the state of this control</returns>
        public SourceControlTypeState this[SourceControlTypes type]
        {
            get
            {
                return(dictionary[type]);
            }
            set
            {
                //the only way to leave the Unavailable state is to go to Inactive
                if ((dictionary[type] == SourceControlTypeState.Unavailable) && (value != SourceControlTypeState.Inactive))
                {
                    return;
                }

                //...if we have a control that is not "Unavailable", and we "Enabled" it, we really mean "Inactive"
                if (value == SourceControlTypeState.Enabled)
                {
                    //...also if you are Enabling something, but the state is already Active, it is not changed.
                    if (dictionary[type] == SourceControlTypeState.Active)
                    {
                        return;
                    }
                    else
                    {
                        value = SourceControlTypeState.Inactive;
                    }
                }

                dictionary[type] = value;
                FireStateChanged(type);
            }
        }
Exemple #2
0
 private void FireStateChanged(SourceControlTypes type)
 {
     if (StateChanged != null)
     {
         StateChanged(this, new SourceControlTypeEventArgs(type));
     }
 }
Exemple #3
0
        public ServiceResult DownloadSettingsFileFromGit(
            ILog log,
            string url,
            SourceControlTypes type)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            switch (type)
            {
            case SourceControlTypes.GithubPublic:
                request.UserAgent = "Test";
                request.Accept    = "application/vnd.github.v3.raw";
                break;

            case SourceControlTypes.GithubPrivate:
                request.Accept = "application/vnd.github.v3.raw";
                request.Headers.Add("Authorization", "token " + _gitHubToken);
                break;

            case SourceControlTypes.Bitbucket:
                // we need to be authenticated on bitbucket to get access on repository. so, appending encoded username and password to request headers
                var    credentials = _bitbucketEmail + ":" + _bitbucketPassword;
                string encoded     = Convert.ToBase64String(_encoding.GetBytes(credentials));
                request.Headers.Add("Authorization", "Basic " + encoded);
                break;

            default:
                throw new ArgumentOutOfRangeException(nameof(type), type, null);
            }

            try
            {
                using (var response = request.GetResponse())
                    using (var stream = response.GetResponseStream())
                        using (var reader = new StreamReader(stream))
                        {
                            string result = reader.ReadToEnd();
                            return(new ServiceResult {
                                Success = true, Data = result
                            });
                        }
            }
            catch (Exception ex)
            {
                log.Error(ex, context: url);
                return(new ServiceResult {
                    Success = false, Message = ex.Message
                });
            }
        }
Exemple #4
0
        public string GetGitRepositoryName(string gitUrl, SourceControlTypes type)
        {
            // length of forward slash "/"
            var separatorLength = 1;
            // get git organization or user name. repository name is always after this account name
            var accountStartIndex = gitUrl.IndexOf("/", 8);
            var repoStartIndex    = gitUrl.IndexOf("/", accountStartIndex + separatorLength);
            // get git repository name's endIndex
            var endIndex = gitUrl.IndexOf("/", repoStartIndex + separatorLength);

            // substring repositoryName
            var length = (endIndex > 0 ? endIndex - repoStartIndex : gitUrl.Length - repoStartIndex) - separatorLength;

            return(gitUrl.Substring(repoStartIndex + separatorLength, length).Replace(".git", ""));
        }
Exemple #5
0
        public static string GetGitRepositoryName(string gitUrl, SourceControlTypes type)
        {
            var gitType    = type == SourceControlTypes.Github ? "github.com/" : "bitbucket.org/";
            var startIndex = gitUrl.IndexOf(gitType) + gitType.Length;

            // get git organization or user name. repository name is always after this account name
            var gitAccountEndIndex = gitUrl.IndexOf("/", startIndex);

            // length of forward slash "/"
            var separatorLength = 1;

            // get git repository name's endIndex
            var endIndex = gitUrl.IndexOf("/", gitAccountEndIndex + separatorLength);

            // substring repositoryName
            var length = (endIndex > 0 ? endIndex - gitAccountEndIndex : gitUrl.Length - gitAccountEndIndex) - separatorLength;

            return(gitUrl.Substring(gitAccountEndIndex + separatorLength, length).Replace(".git", ""));
        }
        public ServiceResult DownloadSettingsFileFromGit(
            ILog log,
            string url,
            SourceControlTypes type)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);

            switch (type)
            {
            case SourceControlTypes.Github:
                request.UserAgent = "Test";
                request.Accept    = "application/vnd.github.v3.raw";

                var result = LoadGitData(request, log);
                if (!result.Success && !string.IsNullOrWhiteSpace(_gitHubToken))
                {
                    request           = (HttpWebRequest)WebRequest.Create(url);
                    request.UserAgent = "Test";
                    request.Accept    = "application/vnd.github.v3.raw";
                    request.Headers.Add("Authorization", "token " + _gitHubToken);
                    result = LoadGitData(request, log);
                }

                return(result);

            case SourceControlTypes.Bitbucket:
                // we need to be authenticated on bitbucket to get access on repository. so, appending encoded username and password to request headers
                var    credentials = _bitbucketEmail + ":" + _bitbucketPassword;
                string encoded     = Convert.ToBase64String(_encoding.GetBytes(credentials));
                request.Headers.Add("Authorization", "Basic " + encoded);

                return(LoadGitData(request, log));

            default:
                throw new ArgumentOutOfRangeException(nameof(type), type, null);
            }
        }
Exemple #7
0
        public string GenerateRepositorySettingsGitUrl(string gitUrl, SourceControlTypes type, string branch = "")
        {
            if (branch == "null")
            {
                branch = "";
            }

            //check for url that ends on ".git" and remove it
            if (gitUrl.EndsWith(".git"))
            {
                gitUrl = gitUrl.Remove(gitUrl.Length - 4, 4);
            }

            // setting json file name
            string settingsFileName;

            if (gitUrl.EndsWith(FILE_FORMAT_ON_GIT))
            {
                settingsFileName = gitUrl.Remove(0, gitUrl.LastIndexOf('/') + 1);
                gitUrl           = gitUrl.Substring(0, gitUrl.IndexOf(settingsFileName));
            }
            else
            {
                settingsFileName = FILENAME + FILE_FORMAT_ON_GIT;
            }

            if (!gitUrl.EndsWith("/"))
            {
                gitUrl += "/";
            }

            // to build url
            var repositoryUrl = string.Empty;

            //checking if file is uploaded on github or bitbucket
            if (type == SourceControlTypes.GithubPublic || type == SourceControlTypes.GithubPrivate)
            {
                var gitAccountStartIndex = gitUrl.IndexOf("/", 8);
                if (type == SourceControlTypes.GithubPublic)
                {
                    repositoryUrl = gitUrl.Insert(gitAccountStartIndex + 1, "repos/");
                    var domainStartIndex = gitUrl.LastIndexOf("/", 8);
                    repositoryUrl = repositoryUrl.Insert(domainStartIndex + 1, "api.");
                }
                else
                {
                    repositoryUrl = gitUrl.Insert(gitAccountStartIndex + 1, "api/v3/repos/");
                }

                var filePath = settingsFileName;

                var blobIndex = gitUrl.IndexOf("blob/", gitAccountStartIndex);
                if (blobIndex != -1)
                {
                    var searchStartIndex = blobIndex + 5;
                    if (searchStartIndex < gitUrl.Length)
                    {
                        var branchIndex = gitUrl.IndexOf("/", searchStartIndex);
                        if (branchIndex != -1)
                        {
                            var path = gitUrl.Substring(branchIndex + 1);
                            if (path != string.Empty)
                            {
                                if (!path.EndsWith(settingsFileName))
                                {
                                    if (path.EndsWith("/"))
                                    {
                                        path += settingsFileName;
                                    }
                                    else
                                    {
                                        path += $"/{settingsFileName}";
                                    }
                                }
                                filePath = path;
                            }
                        }
                    }
                    repositoryUrl = repositoryUrl.Remove(repositoryUrl.IndexOf("blob/"));
                }

                if (repositoryUrl.Contains("tree/" + branch))
                {
                    repositoryUrl = repositoryUrl.Remove(repositoryUrl.IndexOf("tree/" + branch));
                }

                repositoryUrl += "contents/" + filePath;

                if (!string.IsNullOrWhiteSpace(branch))
                {
                    repositoryUrl += "?ref=" + branch;
                }
            }
            else
            {
                //to delete "1230@" from links of type "[email protected]/infrastructuredevelopers/settingsservicev2.git"
                if (gitUrl.Contains("@"))
                {
                    gitUrl = gitUrl.Remove(gitUrl.IndexOf("://") + 3, gitUrl.IndexOf("@") - gitUrl.IndexOf("://") - 2);
                }

                if (!gitUrl.EndsWith((branch + "/")))
                {
                    if (!gitUrl.EndsWith("src/"))
                    {
                        gitUrl += "src/";
                    }
                    gitUrl += branch + "/";
                }

                // to get json in raw format, we need to change bitbucket url from "src" to "raw"
                var bitbucketRawUrl = gitUrl.Replace("src", "raw");

                repositoryUrl += bitbucketRawUrl + settingsFileName;
            }

            return(repositoryUrl);
        }
Exemple #8
0
        public static ServiceResult DownloadSettingsFileFromGit(
            ILog log,
            string url,
            SourceControlTypes type,
            string bitbutcketEmail,
            string bitbucketPassword)
        {
            // checking source control type
            if (type == SourceControlTypes.Github)
            {
                HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
                request.UserAgent = "Test";
                request.Accept    = "application/vnd.github.v3.raw";
                try
                {
                    using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
                    {
                        StreamReader reader = new StreamReader(response.GetResponseStream());
                        var          json   = reader.ReadToEnd();
                        return(new ServiceResult {
                            Success = true, Data = json
                        });
                    }
                }
                catch (Exception ex)
                {
                    log.Error(ex, context: url);
                    return(new ServiceResult {
                        Success = false, Message = ex.Message
                    });
                }
            }
            else
            {
                // we need to be authenticated on bitbucket to get access on repository. so, appending encoded username and password to request headers
                var            uri     = new Uri(url);
                HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
                String         encoded = Convert.ToBase64String(Encoding.GetEncoding("ISO-8859-1").GetBytes(bitbutcketEmail + ":" + bitbucketPassword));
                request.Headers.Add("Authorization", "Basic " + encoded);

                try
                {
                    string result;
                    using (var response = request.GetResponse())
                        using (var stream = response.GetResponseStream())
                            using (var reader = new StreamReader(stream))
                            {
                                result = reader.ReadToEnd();
                            }

                    return(new ServiceResult {
                        Success = true, Data = result
                    });
                }
                catch (Exception ex)
                {
                    log.Error(ex, context: url);
                    return(new ServiceResult {
                        Success = false, Message = ex.Message
                    });
                }
            }
        }
Exemple #9
0
        public static string GenerateRepositorySettingsGitUrl(string gitUrl, SourceControlTypes type, string branch = "")
        {
            if (branch == "null")
            {
                branch = "";
            }

            //check for url that ends on ".git" and remove it
            if (gitUrl.EndsWith(".git"))
            {
                gitUrl = gitUrl.Remove(gitUrl.Length - 4, 4);
            }

            // setting json file name
            string settingsFileName;

            if (gitUrl.EndsWith(FILE_FORMAT_ON_GIT))
            {
                settingsFileName = gitUrl.Remove(0, gitUrl.LastIndexOf('/') + 1);
                gitUrl           = gitUrl.Substring(0, gitUrl.IndexOf(settingsFileName));
            }
            else
            {
                settingsFileName = FILENAME + FILE_FORMAT_ON_GIT;
            }

            if (!gitUrl.EndsWith("/"))
            {
                gitUrl += "/";
            }

            // to build url
            var repositoryUrl = string.Empty;

            //checking if file is uploaded on github or bitbucket
            if (type == SourceControlTypes.Github)
            {
                repositoryUrl = gitUrl.Replace("github.com/", "api.github.com/repos/");

                if (repositoryUrl.Contains("blob/"))
                {
                    repositoryUrl = repositoryUrl.Remove(repositoryUrl.IndexOf("blob/"));
                }

                if (repositoryUrl.Contains("tree/" + branch))
                {
                    repositoryUrl = repositoryUrl.Remove(repositoryUrl.IndexOf("tree/" + branch));
                }

                repositoryUrl += "contents/" + settingsFileName;

                if (!string.IsNullOrWhiteSpace(branch))
                {
                    repositoryUrl += "?ref=" + branch;
                }
            }
            else
            {
                //to delete "1230@" from links of type "[email protected]/infrastructuredevelopers/settingsservicev2.git"
                if (gitUrl.Contains("@"))
                {
                    gitUrl = gitUrl.Remove(gitUrl.IndexOf("://") + 3, gitUrl.IndexOf("@") - gitUrl.IndexOf("://") - 2);
                }

                if (!gitUrl.EndsWith((branch + "/")))
                {
                    if (!gitUrl.EndsWith("src/"))
                    {
                        gitUrl += "src/";
                    }
                    gitUrl += branch + "/";
                }

                // to get json in raw format, we need to change bitbucket url from "src" to "raw"
                var bitbucketRawUrl = gitUrl.Replace("src", "raw");

                repositoryUrl += bitbucketRawUrl + settingsFileName;
            }

            return(repositoryUrl);
        }
Exemple #10
0
 /// <summary>
 /// Creates an instance of the SourceControlTypeEventArgs regarding a specific SourceControlType
 /// </summary>
 /// <param name="type">type of control this event is in regard to</param>
 public SourceControlTypeEventArgs(SourceControlTypes type)
 {
     this.ControlType = type;
 }