public IEnumerable<Project> AppHarborBuilds(string readOnlyToken) { string accessToken = null; using (var db = new CcTrayDbContext()) { Key key = db.Keys.FirstOrDefault(k => k.ReadonlyToken == readOnlyToken); if (key != null) { accessToken = key.AccessToken; } } if (accessToken != null) { IEnumerable<AppHarborApplication> applications = GetApplications(accessToken); foreach (AppHarborApplication app in applications) { bool building = app.GetBuildingBuilds().FirstOrDefault() != null; Build latest = app.Builds.OrderByDescending(b => b.Created).FirstOrDefault(); if(latest!=null) { yield return (new Project { name = app.Name, webUrl = app.Url, activity = building ? "Building" : "Sleeping", lastBuildStatus = latest.IsSuccessful() ? "Success" : "Failure", lastBuildLabel = latest.CommitId.Substring(0, 7) + "...", lastBuildTime = latest.Created.Value.ToString(), });} } } }
public IEnumerable<Project> AzureWebsiteBuilds(string readOnlyToken) { var sites = new AzureSite[0]; using (var db = new CcTrayDbContext()) { sites = db.AzureSites.Where(s => s.ReadOnlyToken == readOnlyToken).ToArray(); } foreach (AzureSite site in sites) { using (var httpClient = new HttpClient()) { httpClient.DefaultRequestHeaders.Accept.Add( new MediaTypeWithQualityHeaderValue("application/json")); string authInfo = string.Format("{0}:{1}", site.Username, site.Password); authInfo = Convert.ToBase64String(Encoding.Default.GetBytes(authInfo)); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", authInfo); string responseBody = string.Empty; try { HttpResponseMessage response = httpClient.GetAsync(string.Format("https://{0}.scm.azurewebsites.net/deployments", site.Name)) .Result; responseBody = response.Content.ReadAsStringAsync().Result; } catch (Exception) { } var json = JsonConvert.DeserializeObject(responseBody) as dynamic; var applicationArray = json as IEnumerable<dynamic>; dynamic build = applicationArray.OrderByDescending(c=>c.start_time).FirstOrDefault(); if (build != null) { yield return (new Project { name = site.Name, webUrl = build.Url, activity = (bool) build.complete ? "Sleeping" : "Building", lastBuildStatus = build.status == 4 ? "Success" : "Failure", lastBuildLabel = build.message, lastBuildTime = build.end_time.ToString(), }); } } } }
public ActionResult Index() { var model = new HomeViewModel(); if (User.Identity.IsAuthenticated) { using (var db = new CcTrayDbContext()) { Key key = db.Keys.Where(k => k.Username == User.Identity.Name).FirstOrDefault(); if (key != null) { model.ReadOnlyToken = key.ReadonlyToken; } } } return View(model); }
public ActionResult Callback(string code) { string accessToken = string.Empty; if (TryGetAccessToken(code, out accessToken)) { string username = GetAppHarborUsername(accessToken); using (var db = new CcTrayDbContext()) { Key key = db.Keys.FirstOrDefault(k => k.AccessToken == accessToken); if (key == null) { key = new Key {AccessToken = accessToken}; key.ReadonlyToken = Guid.NewGuid().ToString(); db.Keys.Add(key); } key.Username = username; db.SaveChanges(); } AppendCookieToResponse(accessToken, username); return RedirectToAction("index", "Home"); } else { return RedirectToAction("index","Home"); } }