示例#1
0
 internal static Application CreateFromAPI(AppHarbor.Model.Application app)
 {
     return new Application
     {
         Name = app.Name,
         Slug = app.Slug,
         Url = app.Url
     };
 }
 public ProjectsController(ITweetHarborDbContext database,
     ITweetHarborTwitterService twitterService,
     ITweetHarborTextMessageService textMessageService,
     AppHarbor.Client.IAppHarborClient appHarborClient)
 {
     this.database = database;
     this.twitterService = twitterService;
     this.textMessageService = textMessageService;
     this.appHarborClient = appHarborClient;
 }
        public virtual ActionResult Feed(int?page, int?pageSize)
        {
            var blogRoot = EnsureTrailingSlash(Configuration.GetSiteRoot(AppHarbor.IsSecureConnection(HttpContext))) + "blog";

            var posts = GetPostsByMostRecentFirst();

            if (page != null && pageSize != null)
            {
                int skip = page.GetValueOrDefault() * pageSize.GetValueOrDefault(1);
                posts = posts.Skip(skip).Take(pageSize.GetValueOrDefault(1));
            }
            else if (pageSize != null)
            {
                posts = posts.Take(pageSize.GetValueOrDefault(1));
            }

            var feed = new SyndicationFeed("Chocolatey Blog", "The official blog for Chocolatey, the package manager for Windows!", new Uri(blogRoot));

            feed.Copyright = new TextSyndicationContent("Chocolatey copyright RealDimensions Software, LLC, posts copyright original author or authors.");
            feed.Language  = "en-US";
            feed.Authors.Add(new SyndicationPerson(string.Empty, "The Chocolatey Team", string.Empty));

            var items = new List <SyndicationItem>();

            foreach (var post in posts.OrEmptyListIfNull())
            {
                var blogUrl = blogRoot + "/" + post.UrlPath;
                var item    = new SyndicationItem(post.Title, post.Post, new Uri(blogUrl), post.UrlPath, post.Published.GetValueOrDefault());
                item.PublishDate = post.Published.GetValueOrDefault();
                item.Authors.Add(new SyndicationPerson(string.Empty, post.Author, string.Empty));
                item.Copyright = new TextSyndicationContent("Copyright RealDimensions Software LLC and original author(s).");

                items.Add(item);
            }

            try
            {
                var mostRecent = posts.FirstOrDefault();
                feed.LastUpdatedTime = mostRecent == null ? DateTime.UtcNow : mostRecent.Published.GetValueOrDefault();
            }
            catch (Exception)
            {
                feed.LastUpdatedTime = DateTime.UtcNow;
            }

            feed.Items = items;

            return(new RSSActionResult
            {
                Feed = feed
            });

            //remove a10 - http://stackoverflow.com/a/15971300/18475
        }
        private User AppHarborCreateOrUpdateAccountIfNeeded(string AccessToken, AppHarbor.Client.User user, User returnUser)
        {
            //TODO: must have some kind of AppHb unique id-- username, etc --see twitter approach (screenname) (for now we used emailaddress)
            if (null == returnUser)
            {
                returnUser = (from u in database.Users
                              where u.AuthenticationAccounts.FirstOrDefault(ac => ac.AccountProvider == "appharbor" && ac.UserName == user.UserName) != null
                              select u).FirstOrDefault();
            }
            if (null == returnUser) // CREATE
            {
                var existingUser = (from u in database.Users where u.UserName.ToLower() == user.UserName.ToLower() select u).FirstOrDefault();
                returnUser = new User();
                returnUser.UserName = null == existingUser ? user.UserName : "";
                returnUser.EmailAddress = user.EmailAddress;
                returnUser.UpdateUniqueId();
                database.Users.Add(returnUser);
            }

            var newAppHarborAccount = returnUser.AuthenticationAccounts.FirstOrDefault(ac => ac.AccountProvider == "appharbor" &&
                ac.UserName == user.UserName);

            if (newAppHarborAccount == null)
            {
                newAppHarborAccount = new UserAuthenticationAccount();
                newAppHarborAccount.AccountProvider = "appharbor";
                newAppHarborAccount.UserName = user.UserName;
                newAppHarborAccount.UserName = user.UserName;
                newAppHarborAccount.ProfilePicUrl = "<not implemented>";
                if (null == returnUser.AuthenticationAccounts)
                    returnUser.AuthenticationAccounts = new Collection<UserAuthenticationAccount>();
                returnUser.AuthenticationAccounts.Add(newAppHarborAccount);
            }

            //returnUser.UserProfilePicUrl = user.ProfileImageUrl;
            var appharborAccount = returnUser.AuthenticationAccounts.First(t => t.AccountProvider == "appharbor");
            appharborAccount.OAuthToken = AccessToken;
            //appharborAccount.OAuthTokenSecret = accessToken.TokenSecret;
            //appharborAccount.ProfilePicUrl = user.ProfileImageUrl;

            try
            {
                database.SaveChanges();
            }
            catch (Exception e)
            {
                Trace.WriteLine("Exception: " + e.Message);
                throw e;
            }
            return returnUser;
        }
示例#5
0
        public virtual ActionResult Feed(int?page, int?pageSize)
        {
            var siteRoot = EnsureTrailingSlash(Configuration.GetSiteRoot(AppHarbor.IsSecureConnection(HttpContext)));

            IEnumerable <Package> packageVersions = Cache.Get(string.Format("packageVersions-False"),
                                                              DateTime.UtcNow.AddMinutes(Cache.DEFAULT_CACHE_TIME_MINUTES),
                                                              () => packageSvc.GetPackagesForListing(includePrerelease: false).OrderByDescending(p => p.Published).ToList()
                                                              );

            if (page != null && pageSize != null)
            {
                int skip = page.GetValueOrDefault() * pageSize.GetValueOrDefault(1);
                packageVersions = packageVersions.Skip(skip).Take(pageSize.GetValueOrDefault(1));
            }
            else if (pageSize != null)
            {
                packageVersions = packageVersions.Take(pageSize.GetValueOrDefault(1));
            }

            var feed = new SyndicationFeed("Chocolatey", "Chocolatey Packages", new Uri(siteRoot));

            feed.Copyright = new TextSyndicationContent("Chocolatey copyright RealDimensions Software, LLC, Packages copyright original maintainer(s), Products copyright original author(s).");
            feed.Language  = "en-US";

            var items = new List <SyndicationItem>();

            foreach (Package package in packageVersions.ToList().OrEmptyListIfNull())
            {
                string title      = string.Format("{0} ({1})", package.PackageRegistration.Id, package.Version);
                var    galleryUrl = siteRoot + "packages/" + package.PackageRegistration.Id + "/" + package.Version;
                var    item       = new SyndicationItem(title, package.Summary, new Uri(galleryUrl), package.PackageRegistration.Id + "." + package.Version, package.Published);
                item.PublishDate = package.Published;

                items.Add(item);
            }

            try
            {
                var mostRecentPackage = packageVersions.FirstOrDefault();
                feed.LastUpdatedTime = mostRecentPackage == null ? DateTime.UtcNow : mostRecentPackage.Published;
            } catch (Exception)
            {
                feed.LastUpdatedTime = DateTime.UtcNow;
            }

            feed.Items = items;

            return(new RSSActionResult {
                Feed = feed
            });
        }
示例#6
0
        public static string PackageDownload(this UrlHelper url, int feedVersion, string id, string version)
        {
            string routeName = "v" + feedVersion + RouteName.DownloadPackage;

            string protocol  = AppHarbor.IsSecureConnection(url.RequestContext.HttpContext) ? "https" : "http";
            string returnUrl = url.RouteUrl(
                routeName,
                new
            {
                Id      = id,
                Version = version
            },
                protocol: protocol);

            //hack, replace removing port
            //return Regex.Replace(returnUrl, @"\:\d+\/", "/");

            // Ensure trailing slashes for versionless package URLs, as a fix for package filenames that look like known file extensions
            return(version == null?EnsureTrailingSlash(returnUrl) : returnUrl);
        }
示例#7
0
 protected virtual bool UseHttps()
 {
     return(AppHarbor.IsSecureConnection(HttpContext));
 }
        private void FillTests(List<AppHarbor.Model.Test> list, AppHarbor.Model.Test test)
        {
            if (test.Kind.Equals("Test"))
                list.Add(test);

            if (test.Tests != null && test.Tests.Count > 0)
            {
                foreach (var childTest in test.Tests)
                {
                    FillTests(list, childTest);
                }
            }
        }
示例#9
0
        private void UpdateBuildUI(AppHarbor.Model.Application application, Build build, BuildStatus status)
        {
            currentInfoTabPage.Invoke((Action)delegate
            {
                pictureBoxLoadingSpinner.Hide();
                labelAppName.Text = application.Name;
                labelStatus.Text = build.Status;
                labelTime.Text = build.Created.ToString();
                var isDeployed = (build.Deployed != DateTime.MinValue);
                labelDeployed.Text = isDeployed ? build.Deployed.ToString() : "NOT DEPLOYED";
                labelDeployed.ForeColor = (isDeployed ? Color.Green : Color.Orange);

                SetupUrl(buildUrlLinkLabel, build.Url.AbsoluteUri);
                SetupUrl(applicationUrlLinkLabel, String.Format("http://{0}.apphb.com", application.Name.ToLowerInvariant()));

                labelCommit.Text = build.Commit.Message;

                var colour = GetColourForBuildStatus(status);
                labelStatus.ForeColor = colour;
            });
        }