Ejemplo n.º 1
0
        private ActionResult LogOn(Identifier identifier)
        {
            //Remove the unnecessary portion of the identifier
            string steamIDString = identifier.ToString().Replace("http://steamcommunity.com/openid/id/", "");
            long   steamId64     = long.Parse(steamIDString);

            using (var db = new SprayContext())
            {
                var user = db.Users.FirstOrDefault(x => x.SteamId == steamId64);

                SteamWebAPI.SteamAPISession session = new SteamWebAPI.SteamAPISession();
                session.accessToken = ""; /* CHANGEME - Steam Web API access token */
                var userInfo = session.GetUserInfo(steamId64.ToString());

                if (user == null)
                {
                    //Add the user if they're new
                    user = CreateUser(steamId64, db, userInfo);
                }
                else
                {
                    // Or update the relevant information
                    user.AvatarURI   = userInfo.avatarUrl;
                    user.NickName    = userInfo.nickname;
                    user.LastUpdated = DateTime.Now;
                }

                int recordsAffected = db.SaveChanges();
                FormsAuthentication.SetAuthCookie(steamId64.ToString(), true);
            }

            return(RedirectToAction("Index", "Home"));
        }
Ejemplo n.º 2
0
        public ActionResult ApproveSketchy(string id)
        {
            if (Request.IsAuthenticated && (User.Identity.Name == "76561197999489042")) /* CHANGEME - This is my Steam ID. If I logged in, I got extra admin options */
            {
                Guid providedId;
                if (!Guid.TryParse(id, out providedId))
                {
                    return(View("Error"));
                }

                using (var db = new SprayContext())
                {
                    Spray spray = db.Sprays.Where(s => s.Id == providedId).FirstOrDefault();
                    if (spray != null)
                    {
                        spray.Status   = Status.PUBLIC;
                        spray.Safeness = Safeness.SKETCHY;
                        db.SaveChanges();
                    }

                    return(Json(true));
                }
            }
            else
            {
                return(View("Error"));
            }
        }
Ejemplo n.º 3
0
        public ActionResult Save(string id)
        {
            if (Request.IsAuthenticated)
            {
                Guid providedId;
                if (!Guid.TryParse(id, out providedId))
                {
                    return(View("Error"));
                }

                using (var db = new SprayContext())
                {
                    Spray spray = db.Sprays.Where(s => s.Id == providedId).Where(s => s.Status != Status.DELETED).Where(s => s.DateExpires > DateTime.Now).ToList().FirstOrDefault();
                    if (spray != null)
                    {
                        long steamId64 = long.Parse(User.Identity.Name);
                        User u         = db.Users.FirstOrDefault(x => x.SteamId == steamId64);

                        if (!u.Saved.Contains(spray))
                        {
                            u.Saved.Add(spray);
                            spray.Saves++;

                            db.SaveChanges();
                        }
                    }

                    return(RedirectToRoute("View Spray"));
                }
            }
            else
            {
                return(View("Error"));
            }
        }
Ejemplo n.º 4
0
        public ActionResult Manage(int?after)
        {
            /* CHANGEME - This is my Steam ID. If I logged in, I got extra admin options */
            if (!Request.IsAuthenticated || (User.Identity.Name != "76561197999489042"))
            {
                return(View("Error"));
            }

            ViewBag.CurrentPage = "manage";
            ViewBag.BrowseMode  = "newest";

            // Reset to 0 if negative or null
            int afterSpray = after ?? 0;

            if (afterSpray < 0)
            {
                afterSpray = 0;
            }

            SprayListModel sprays = new SprayListModel();

            sprays.Start = afterSpray;
            sprays.Prev  = afterSpray - SPRAYS_PER_PAGE < 0 ? 0 : afterSpray - SPRAYS_PER_PAGE;

            using (var db = new SprayContext())
            {
                sprays.Sprays = db.Sprays.Where(s => s.Status == Status.UNMODERATED).OrderBy(s => s.DateAdded).Skip(afterSpray).Take(SPRAYS_PER_PAGE).ToList();
            }

            sprays.Next = sprays.Sprays.Count < SPRAYS_PER_PAGE ? afterSpray : afterSpray + SPRAYS_PER_PAGE;

            return(View(sprays));
        }
Ejemplo n.º 5
0
        public ActionResult Publish(string id)
        {
            if (Request.IsAuthenticated)
            {
                Guid providedId;
                if (!Guid.TryParse(id, out providedId))
                {
                    return(View("Error"));
                }

                using (var db = new SprayContext())
                {
                    Spray spray = db.Sprays.Where(s => s.Id == providedId).FirstOrDefault();
                    if (spray != null)
                    {
                        long steamId64 = long.Parse(User.Identity.Name);

                        /* CHANGEME - This is my Steam ID. If I logged in, I got extra admin options */
                        if ((spray.Creator.SteamId == steamId64 || User.Identity.Name == "76561197999489042") && spray.Status != Status.PUBLIC) // So we don't have to re-moderate
                        {
                            spray.Status = Status.UNMODERATED;
                            db.SaveChanges();
                        }
                    }

                    return(RedirectToRoute("View Spray"));
                }
            }
            else
            {
                return(View("Error"));
            }
        }
Ejemplo n.º 6
0
        public ActionResult Delete(string id)
        {
            if (Request.IsAuthenticated)
            {
                Guid providedId;
                if (!Guid.TryParse(id, out providedId))
                {
                    return(View("Error"));
                }

                using (var db = new SprayContext())
                {
                    Spray spray = db.Sprays.Where(s => s.Id == providedId).FirstOrDefault();
                    if (spray != null)
                    {
                        long steamId64 = long.Parse(User.Identity.Name);

                        if (spray.Creator.SteamId == steamId64 || User.Identity.Name == "76561197999489042") /* CHANGEME - This is my Steam ID. If I logged in, I got extra admin options */
                        {
                            spray.Status = Status.DELETED;
                            db.SaveChanges();
                        }
                    }

                    return(RedirectToAction("Mine", "Browse"));
                }
            }
            else
            {
                return(View("Error"));
            }
        }
Ejemplo n.º 7
0
        public ActionResult Saved(int?after)
        {
            if (!Request.IsAuthenticated)
            {
                return(View("Error"));
            }

            ViewBag.CurrentPage = "saved";

            // Reset to 0 if negative or null
            int afterSpray = after ?? 0;

            if (afterSpray < 0)
            {
                afterSpray = 0;
            }

            SprayListModel sprays = new SprayListModel();

            sprays.Start = afterSpray;
            sprays.Prev  = afterSpray - SPRAYS_PER_PAGE < 0 ? 0 : afterSpray - SPRAYS_PER_PAGE;

            using (var db = new SprayContext())
            {
                long steamId64 = long.Parse(User.Identity.Name);

                sprays.Sprays = db.Users.Where(u => u.SteamId == steamId64).First().Saved.Where(s => s.Status != Status.DELETED).Where(s => s.Status != Status.ACTIVE).OrderByDescending(s => s.DateAdded).Skip(afterSpray).Take(SPRAYS_PER_PAGE).ToList();
            }

            sprays.Next = sprays.Sprays.Count < SPRAYS_PER_PAGE ? afterSpray : afterSpray + SPRAYS_PER_PAGE;

            return(View(sprays));
        }
Ejemplo n.º 8
0
        public ActionResult ViewSpray(string id)
        {
            ViewBag.CurrentPage = "browse";

            Guid providedId;

            if (!Guid.TryParse(id, out providedId))
            {
                return(View("Error"));
            }

            Spray spray;
            bool  saved = false;
            bool  mine  = false;

            using (var db = new SprayContext())
            {
                spray = db.Sprays.Where(s => s.Id == providedId).FirstOrDefault();

                if (Request.IsAuthenticated)
                {
                    long steamId64 = long.Parse(User.Identity.Name);
                    if (spray.SavedBy.Where(u => u.SteamId == steamId64).Count() != 0)
                    {
                        saved = true;
                    }

                    if (spray.Creator != null && spray.Creator.SteamId == steamId64)
                    {
                        mine = true;
                    }
                }

                // Don't show unapproved sprays
                if (spray.Status == Status.ACTIVE && !mine)
                {
                    spray = null;
                }
            }

            if (spray == null)
            {
                return(View("Error"));
            }

            if (spray.Safeness == Safeness.NSFW)
            {
                ViewBag.AdultAds = true;
            }

            return(View("View", new SprayViewModel {
                Spray = spray, SavedByCurrent = saved, IsCurrentUsersSpray = mine
            }));
        }
Ejemplo n.º 9
0
        private User CreateUser(long steamID64, SprayContext db, SteamWebAPI.SteamAPISession.User player)
        {
            //Add the user if they're new
            User user = new User
            {
                SteamId     = steamID64,
                NickName    = player.nickname,
                AvatarURI   = player.avatarUrl,
                LastUpdated = DateTime.Now
            };

            db.Users.Add(user);
            return(user);
        }
Ejemplo n.º 10
0
        protected override void Initialize(System.Web.Routing.RequestContext requestContext)
        {
            base.Initialize(requestContext);

            ViewBag.CurrentPage = "default";
            ViewBag.UserName    = "******";
            ViewBag.AvatarUrl   = ""; // TODO Default avatar URI

            if (Request.IsAuthenticated)
            {
                using (var db = new SprayContext())
                {
                    _baseSteamId = long.Parse(User.Identity.Name);
                    _isLoggedIn  = true;
                    var user = db.Users.FirstOrDefault(x => x.SteamId == _baseSteamId);

                    if (user != null)
                    {
                        ViewBag.UserName  = user.NickName;
                        ViewBag.AvatarUrl = user.AvatarURI;
                    }
                }
            }
        }
Ejemplo n.º 11
0
        private void g_Static_ProcessingComplete(object sender, ProcessCompleteEventArgs e)
        {
            Guid g = Guid.NewGuid();

            var context = GlobalHost.ConnectionManager.GetHubContext <ProgressHub>();

            context.Clients.Client(_progressId).changePercent("100", "Processing");

            // UPLOAD NEW SPRAY
            AmazonS3Client   client  = new AmazonS3Client("KEY", "SECRET", RegionEndpoint.USWest1); /* CHANGEME - Amazon S3 Key/Secret */
            PutObjectRequest request = new PutObjectRequest();

            request.PutObjectProgressEvent += request_Static_PutObjectProgressEvent;
            request.BucketName              = _isLoggedIn ? BUCKET_REGISTERED_VTF : BUCKET_ANONYMOUS_VTF;
            request.Key             = string.Format("{0}.vtf", g);
            request.InputStream     = e.outputStream;
            request.CannedACL       = S3CannedACL.PublicRead;
            request.AutoCloseStream = true;
            client.PutObject(request);

            // UPLOAD NEW PREVIEW
            NameValueCollection nvc = Request.Form;
            XDocument           doc = XDocument.Parse(nvc["s3Response"]);
            var location            = UploadToBlitline(g, doc, false);

            // SAVE TO DATABASE
            using (var db = new SprayContext())
            {
                User     u       = null;
                DateTime expires = new DateTime(9999, 12, 31);

                if (_isLoggedIn)
                {
                    u = db.Users.FirstOrDefault(x => x.SteamId == _baseSteamId);
                }
                else
                {
                    expires = DateTime.Now.AddDays(7);
                }

                // Make a new spray object
                Spray spray = new Spray()
                {
                    Animated     = e.Animated,
                    DateAdded    = DateTime.Now,
                    DateExpires  = expires,
                    Fading       = e.Fading,
                    Id           = g,
                    NSFW         = false,
                    Safeness     = Models.Safeness.SFW,
                    PreviewImage = string.Format("https://{0}/{1}{2}", _isLoggedIn ? BUCKET_REGISTERED_GIF : BUCKET_ANONYMOUS_GIF, g, location.ToString().EndsWith(".gif") ? ".gif" : ".png"),
                    Status       = Status.ACTIVE,
                    Saves        = 0,
                    Url          = string.Format("https://{0}/{1}", request.BucketName, request.Key),
                    Creator      = u
                };

                // Tell the client to show the spray
                context.Clients.Client(_progressId).showImage(spray.PreviewImage, spray.Url, "/Create/VMT/" + g.ToString(), spray.Animated, "/Spray/" + g.ToString());

                db.Sprays.Add(spray);
                db.SaveChanges();
            }
        }
Ejemplo n.º 12
0
        public ActionResult Index()
        {
            DateTime lastGenerated;
            long     totalSprays;
            long     publishedSprays;
            long     pendingSprays;
            long     unlistedSprays;
            long     privateSprays;

            long regularSprays;
            long nsfwSprays;
            long animatedSprays;
            long fadingSprays;

            long anonymousSprays;
            long loggedInSprays;

            List <ThingsOverTime> lastWeekSprays;

            long numUsers;

            if (cache.Contains("LastGenerated"))
            {
                lastGenerated = (DateTime)cache.Get("LastGenerated");

                totalSprays     = (long)cache.Get("TotalSprays");
                publishedSprays = (long)cache.Get("PublishedSprays");
                pendingSprays   = (long)cache.Get("PendingSprays");
                unlistedSprays  = (long)cache.Get("UnlistedSprays");
                privateSprays   = (long)cache.Get("PrivateSprays");

                regularSprays  = (long)cache.Get("RegularSprays");
                nsfwSprays     = (long)cache.Get("NSFWSprays");
                animatedSprays = (long)cache.Get("AnimatedSprays");
                fadingSprays   = (long)cache.Get("FadingSprays");

                anonymousSprays = (long)cache.Get("AnonymousSprays");
                loggedInSprays  = (long)cache.Get("LoggedInSprays");

                lastWeekSprays = (List <ThingsOverTime>)cache.Get("LastWeekSprays");

                numUsers = (long)cache.Get("NumUsers");
            }
            else
            {
                using (var db = new SprayContext())
                {
                    totalSprays = db.Sprays.LongCount(s => s.Status != Status.DELETED);

                    anonymousSprays = db.Sprays.LongCount(s => s.Creator == null);
                    loggedInSprays  = totalSprays - anonymousSprays;

                    publishedSprays = db.Sprays.LongCount(s => s.Status == Status.PUBLIC);
                    pendingSprays   = db.Sprays.LongCount(s => s.Status == Status.UNMODERATED);
                    unlistedSprays  = db.Sprays.LongCount(s => s.Status == Status.UNLISTED);
                    privateSprays   = totalSprays - publishedSprays - unlistedSprays - anonymousSprays;

                    regularSprays  = db.Sprays.LongCount(s => !s.NSFW && !s.Animated && !s.Fading && s.Status != Status.DELETED && s.Creator != null);
                    nsfwSprays     = db.Sprays.LongCount(s => s.NSFW && s.Status != Status.DELETED && s.Creator != null);
                    animatedSprays = db.Sprays.LongCount(s => s.Animated && s.Status != Status.DELETED && s.Creator != null);
                    fadingSprays   = db.Sprays.LongCount(s => s.Fading && s.Status != Status.DELETED && s.Creator != null);

                    DateTime oldestDate = DateTime.Now.Date.Subtract(TimeSpan.FromDays(30));

                    var a = db.Sprays.Where(s => s.DateAdded >= oldestDate).OrderBy(s => s.DateAdded).ToList();
                    var b = a.GroupBy(x => x.DateAdded.Date);
                    var c = b.Select(y => new ThingsOverTime {
                        Date = y.Key.Date, SprayCount = y.LongCount()
                    });
                    lastWeekSprays = c.ToList();

                    numUsers = db.Users.LongCount();
                }

                lastGenerated = DateTime.Now;

                // Remake the cache
                CacheItemPolicy slidingExpires = new CacheItemPolicy {
                    SlidingExpiration = TimeSpan.FromMinutes(10)
                };

                cache.Add("LastGenerated", lastGenerated, slidingExpires);

                cache.Add("TotalSprays", totalSprays, slidingExpires);
                cache.Add("PublishedSprays", publishedSprays, slidingExpires);
                cache.Add("PendingSprays", pendingSprays, slidingExpires);
                cache.Add("UnlistedSprays", unlistedSprays, slidingExpires);
                cache.Add("PrivateSprays", privateSprays, slidingExpires);

                cache.Add("RegularSprays", regularSprays, slidingExpires);
                cache.Add("NSFWSprays", nsfwSprays, slidingExpires);
                cache.Add("AnimatedSprays", animatedSprays, slidingExpires);
                cache.Add("FadingSprays", fadingSprays, slidingExpires);

                cache.Add("AnonymousSprays", anonymousSprays, slidingExpires);
                cache.Add("LoggedInSprays", loggedInSprays, slidingExpires);

                cache.Add("LastWeekSprays", lastWeekSprays, slidingExpires);

                cache.Add("NumUsers", numUsers, slidingExpires);
            }


            /*
             * Charts
             */

            #region publishedChart
            Highcharts publishedChart = new Highcharts("publishedStatus")
                                        .InitChart(new Chart {
                PlotShadow = false
            })
                                        .SetTitle(new Title {
                Text = "Spray Status"
            })
                                        .SetSubtitle(new Subtitle {
                Text = "(Does not include anonymous sprays)"
            })
                                        .SetTooltip(new Tooltip {
                Formatter = "function() { return '<b>'+ this.point.name +'</b>: '+ this.y; }"
            })
                                        .SetPlotOptions(new PlotOptions
            {
                Pie = new PlotOptionsPie
                {
                    AllowPointSelect = true,
                    Cursor           = Cursors.Pointer,
                    DataLabels       = new PlotOptionsPieDataLabels
                    {
                        Color          = ColorTranslator.FromHtml("#000000"),
                        ConnectorColor = ColorTranslator.FromHtml("#000000"),
                        Formatter      = "function() { return '<b>'+ this.point.name +'</b>: '+ Math.round(this.percentage) +' %'; }"
                    }
                }
            })
                                        .SetCredits(new Credits {
                Enabled = false
            })
                                        .SetSeries(new Series
            {
                Type = ChartTypes.Pie,
                Name = "Percent of Each Status",
                Data = new Data(new object[]
                {
                    new object[] { "Published", publishedSprays },
                    new object[] { "Pending Moderation", pendingSprays },
                    new object[] { "Unlisted", unlistedSprays },
                    new object[] { "Private", privateSprays }
                })
            });
            #endregion

            #region creatorChart
            Highcharts anonymousChart = new Highcharts("creatorStatus")
                                        .InitChart(new Chart {
                PlotShadow = false
            })
                                        .SetTitle(new Title {
                Text = "Spray Creators"
            })
                                        .SetTooltip(new Tooltip {
                Formatter = "function() { return '<b>'+ this.point.name +'</b>: '+ this.y; }"
            })
                                        .SetPlotOptions(new PlotOptions
            {
                Pie = new PlotOptionsPie
                {
                    AllowPointSelect = true,
                    Cursor           = Cursors.Pointer,
                    DataLabels       = new PlotOptionsPieDataLabels
                    {
                        Color          = ColorTranslator.FromHtml("#000000"),
                        ConnectorColor = ColorTranslator.FromHtml("#000000"),
                        Formatter      = "function() { return '<b>'+ this.point.name +'</b>: '+ Math.round(this.percentage) +' %'; }"
                    }
                }
            })
                                        .SetCredits(new Credits {
                Enabled = false
            })
                                        .SetSeries(new Series
            {
                Type = ChartTypes.Pie,
                Data = new Data(new object[]
                {
                    new object[] { "Anonymous", anonymousSprays },
                    new object[] { "Logged In", loggedInSprays },
                })
            });
            #endregion

            #region sprayTypesChart
            Highcharts sprayTypes = new Highcharts("sprayTypes")
                                    .InitChart(new Chart {
                PlotShadow = false
            })
                                    .SetTitle(new Title {
                Text = "Spray Types"
            })
                                    .SetXAxis(new XAxis
            {
                Categories = new[] { "Animated", "Fading", "NSFW", "(Plain)" },
                Title      = new XAxisTitle {
                    Text = String.Empty
                }
            })
                                    .SetYAxis(new YAxis
            {
                Min   = 0,
                Title = new YAxisTitle
                {
                    Text  = "# of Sprays",
                    Align = AxisTitleAligns.High
                }
            })
                                    .SetTooltip(new Tooltip {
                Formatter = "function() { return '<b>'+ this.point.name +'</b>: '+ this.y; }"
            })
                                    .SetPlotOptions(new PlotOptions
            {
                Bar = new PlotOptionsBar
                {
                    DataLabels = new PlotOptionsBarDataLabels
                    {
                        Enabled = true,
                    }
                }
            })
                                    .SetLegend(new Legend
            {
                Enabled = false
            })
                                    .SetCredits(new Credits {
                Enabled = false
            })
                                    .SetSeries(new Series
            {
                Type = ChartTypes.Bar,
                Data = new Data(new object[]
                {
                    new object[] { "Animated", animatedSprays },
                    new object[] { "Fading", fadingSprays },
                    new object[] { "NSFW", nsfwSprays },
                    new object[] { "(Plain)", regularSprays }
                })
            });
            #endregion

            #region createdChart
            var cats = lastWeekSprays.Select(x => x.Date.ToShortDateString()).Take(30).ToList();
            cats.Add("Today (so far)");

            Highcharts weeklySprayChart = new Highcharts("weeklySprays")
                                          .InitChart(new Chart
            {
                DefaultSeriesType = ChartTypes.Line,
                ClassName         = "chart"
            })
                                          .SetTitle(new Title
            {
                Text = "Sprays Added Over the Last Month",
                X    = -20
            })
                                          .SetXAxis(new XAxis
            {
                Categories = cats.ToArray(),
                Title      = new XAxisTitle {
                    Text = "Date"
                },
                Labels = new XAxisLabels
                {
                    Rotation = -45,
                    Step     = 7
                },
                Max = 31
            })
                                          .SetYAxis(new YAxis
            {
                Title = new YAxisTitle {
                    Text = "# of Sprays Created"
                },
                PlotLines = new[]
                {
                    new XAxisPlotLines
                    {
                        Value = 0,
                        Width = 1,
                        Color = ColorTranslator.FromHtml("#808080")
                    }
                },
                Min = 0
            })
                                          .SetTooltip(new Tooltip
            {
                Formatter = @"function() {
                                        return '<b>'+ this.series.name +'</b><br/>'+
                                    this.x +': '+ this.y;
                                }"
            })
                                          .SetLegend(new Legend
            {
                Enabled = false
            })
                                          .SetCredits(new Credits {
                Enabled = false
            })
                                          .SetSeries(new[]
            {
                new Series {
                    Name = "Sprays Created", Data = new Data(lastWeekSprays.Select(x => x.SprayCount).Cast <object>().ToArray())
                },
            }
                                                     );

            #endregion

            Stats stats = new Stats
            {
                AnimatedSprays  = animatedSprays,
                AnonymousSprays = anonymousSprays,
                FadingSprays    = fadingSprays,
                LastGenerated   = lastGenerated,
                LoggedInSprays  = loggedInSprays,
                NSFWSprays      = nsfwSprays,
                NumUsers        = numUsers,
                PendingSprays   = pendingSprays,
                PublishedSprays = publishedSprays,
                PrivateSprays   = privateSprays,
                TotalSprays     = totalSprays,
                UnlistedSprays  = unlistedSprays,

                PublishedChart = publishedChart,
                AnonymousChart = anonymousChart,
                SprayTypeChart = sprayTypes,
                WeeklyChart    = weeklySprayChart
            };

            return(View(stats));
        }