示例#1
0
        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"));
            }
        }
        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(),
                        });
                    }
                }
            }
        }
示例#3
0
        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 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(),
                        });
                    }
                }
            }
        }