/// <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); } }
private void FireStateChanged(SourceControlTypes type) { if (StateChanged != null) { StateChanged(this, new SourceControlTypeEventArgs(type)); } }
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 }); } }
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", "")); }
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); } }
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); }
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 }); } } }
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); }
/// <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; }