public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.Null) return null; if (reader.TokenType != JsonToken.StartArray) throw new Exception("Expecting StartArray, received " + reader.TokenType); reader.Read(); string username = (string)reader.Value; reader.Read(); string passwordBase64 = (string)reader.Value; reader.Read(); string password = Encoding.UTF8.GetString(Convert.FromBase64String(passwordBase64)); Credentials res = new Credentials(username, password); return res; }
private WebClient GetWebClient(Credentials credentials) { if (threadWebClient == null) { logger.Info("Creating web client in thread " + Thread.CurrentThread.ManagedThreadId + " (" + Thread.CurrentThread.Name + ")"); threadWebClient = new CookieAwareWebClient(); threadWebClient.Encoding = Encoding.UTF8; } // reinitialize HTTP headers threadWebClient.Headers = new WebHeaderCollection(); // credentials if (credentials != null) { string authentication = "Basic " + Convert.ToBase64String( Encoding.ASCII.GetBytes(credentials.Username + ":" + credentials.Password)); threadWebClient.Headers.Add("Authorization", authentication); } return threadWebClient; }
private BuildDetails GetBuildDetails(Credentials credentials, string buildUrl, bool ignoreUntrustedCertificate) { if (buildUrl == null) return null; String url = NetUtils.ConcatUrls(buildUrl, "/api/xml" , buildDetailsFilter); BuildDetails res = new BuildDetails(); if (logger.IsDebugEnabled) logger.Debug("Getting build details from " + url); String xmlStr = DownloadString(credentials, url, true, ignoreUntrustedCertificate); if (logger.IsTraceEnabled) logger.Trace("XML: " + xmlStr); XmlDocument xml = new XmlDocument(); xml.LoadXml(xmlStr); string number = xml.SelectSingleNode("/*/number").InnerText; string timestamp = xml.SelectSingleNode("/*/timestamp").InnerText; XmlNodeList userNodes = xml.SelectNodes("/*/culprit/fullName"); XmlNodeList changeNodes = xml.SelectNodes("/*/changeSet/item"); TimeSpan ts = TimeSpan.FromSeconds(long.Parse(timestamp) / 1000); DateTime date = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); date = date.Add(ts); int count = changeNodes.Count; if (count == 0) { // No changes were introduced; res.FailureReason = "Server Issue / Other"; } else { // New changeset casued broken build: retrieve a name of the last committer; XmlNode committerNode = changeNodes.Item(count - 1); XmlNodeList childNodes = committerNode.ChildNodes; foreach (XmlNode node in childNodes) { if (node.Name == "author") res.CommitterName = node.LastChild.InnerText; } } ISet<string> users = new HashedSet<string>(); foreach (XmlNode userNode in userNodes) { string userName = StringUtils.ExtractUserName(userNode.InnerText); users.Add(userName); } res.Number = int.Parse(number); res.Time = date; res.Users = users; ClaimService.FillInBuildDetails(res, xml); if (logger.IsDebugEnabled) logger.Debug("Done getting build details"); return res; }
private String DownloadString(Credentials credentials, string url, bool cacheable, bool ignoreUntrustedCertificate) { string res; if (logger.IsTraceEnabled) logger.Trace("Downloading: " + url); if (cacheable) { lock (this) { // mark the URL as visited visitedURLs.Add(url); // perform a lookup in the cache if (cache.TryGetValue(url, out res)) { if (logger.IsTraceEnabled) logger.Trace("Cache hit: " + url); return res; } } if (logger.IsTraceEnabled) logger.Trace("Cache miss: " + url); } // set the thread-static field HudsonService.ignoreUntrustedCertificate = ignoreUntrustedCertificate; WebClient webClient = GetWebClient(credentials); res = webClient.DownloadString(url); if (logger.IsTraceEnabled) logger.Trace("Downloaded: " + res); if (cacheable) { lock (this) { // store in cache cache[url] = res; } } return res; }
private BuildDetails GetBuildDetails(Credentials credentials, string buildUrl, bool ignoreUntrustedCertificate) { if (buildUrl == null) return null; String url = NetUtils.ConcatUrls(buildUrl, "/api/xml"); if (logger.IsDebugEnabled) logger.Debug("Getting build details from " + url); String xmlStr = DownloadString(credentials, url, true, ignoreUntrustedCertificate); if (logger.IsTraceEnabled) logger.Trace("XML: " + xmlStr); XmlDocument xml = new XmlDocument(); xml.LoadXml(xmlStr); string number = xml.SelectSingleNode("/*/number").InnerText; string timestamp = xml.SelectSingleNode("/*/timestamp").InnerText; XmlNodeList userNodes = xml.SelectNodes("/*/culprit/fullName"); TimeSpan ts = TimeSpan.FromSeconds(long.Parse(timestamp) / 1000); DateTime date = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); date = date.Add(ts); ISet<string> users = new HashedSet<string>(); foreach (XmlNode userNode in userNodes) { string userName = StringUtils.ExtractUserName(userNode.InnerText); users.Add(userName); } BuildDetails res = new BuildDetails(); res.Number = int.Parse(number); res.Time = date; res.Users = users; ClaimService.FillInBuildDetails(res, xml); if (logger.IsDebugEnabled) logger.Debug("Done getting build details"); return res; }