示例#1
0
        public async Task <IActionResult> Bookmark(int?id = null)
        {
            if (Throttled && !ThrottlingService.CanAccess(User, Request))
            {
                return(StatusCode(429, ThrottleService.Message));
            }
            var team = await DbContext.Teams.SingleOrDefaultAsync(x => x.Id == id);

            if (team == null)
            {
                return(BadRequest("Could not find team."));
            }
            var userId  = User.GetId();
            var profile = await DbContext.UserProfiles.SingleOrDefaultAsync(x => x.Id == userId);

            if (profile == null)
            {
                return(Unauthorized());
            }
            var existed = team.BookmarkedUsers.Any(x => x.Id == userId);

            if (existed)
            {
                team.BookmarkedUsers.Remove(profile);
            }
            else
            {
                team.BookmarkedUsers.Add(profile);
            }
            await DbContext.SaveChangesSafe();

            return(Ok(!existed));
        }
示例#2
0
        public async Task <IActionResult> Vote([FromBody] TeamVoteModel model, int?id = null)
        {
            if (Throttled && !ThrottlingService.CanAccess(User, Request))
            {
                return(StatusCode(429, ThrottleService.Message));
            }
            var teamId = id ?? model.TeamId;
            var userId = User.GetId();
            var vote   = await DbContext.TeamVotes.SingleOrDefaultAsync(x => x.TeamId == model.TeamId && x.UserId == userId);

            var exists = vote != null;

            vote = vote ?? new TeamVote
            {
                TeamId        = teamId,
                UserId        = userId,
                SubmittedDate = DateTimeOffset.Now
            };
            var value = model.Up.HasValue ? (model.Up ?? true) ? 1 : -1 : 0;

            if (!exists)
            {
                DbContext.TeamVotes.Add(vote);
            }
            vote.Value = (short)value;
            await DbContext.SaveChangesSafe();

            await UpdateTeamScores(teamId);

            var returnValue = (await DbContext.TeamScores.SingleOrDefaultAsync(x => x.TeamId == teamId))?.Value ?? 0;

            return(Ok(returnValue));
        }
示例#3
0
        public static void Main(string[] args)
        {
            const int    numberOfAllowedRequests = 10;
            const int    perNumberOfMinutes      = 1;
            const string callerIdentity          = "our-friendly-client";

            using (var service = new ThrottlingService(numberOfAllowedRequests, perNumberOfMinutes))
            {
                // Quick loop to use up all the allowed requests.
                for (var i = 1; i <= numberOfAllowedRequests + 1; i++)
                {
                    var isThrottled = service.IsThrottled(callerIdentity);
                    Console.WriteLine($"Request #{i.ToString().PadLeft(numberOfAllowedRequests.ToString().Length, '0')} is throttled: {isThrottled}");
                }

                // Snooze while the window moves on...
                Thread.Sleep(TimeSpan.FromMinutes(perNumberOfMinutes));

                // Loop over and make more requests.
                for (var i = numberOfAllowedRequests + 2; i <= numberOfAllowedRequests + numberOfAllowedRequests + 2; i++)
                {
                    var isThrottled = service.IsThrottled(callerIdentity);
                    Console.WriteLine($"Request #{i.ToString().PadLeft(numberOfAllowedRequests.ToString().Length, '0')} is throttled: {isThrottled}");
                }
            }

            Console.WriteLine("Test finished, press any key to exit");
            Console.ReadKey();
        }
示例#4
0
 protected override async Task <object> PerformPost(TeamCommentEditorModel model, int?id = null)
 {
     if (Throttled && !ThrottlingService.CanAccess(User, Request, Request.Path, COMMENT_TIMEOUT))
     {
         return(StatusCode(429, ThrottleService.Message));
     }
     return(await base.PerformPost(model, id));
 }
示例#5
0
        public async Task <IActionResult> Reports(int?id = null)
        {
            if (Throttled && !ThrottlingService.CanAccess(User, Request))
            {
                return(StatusCode(429, ThrottleService.Message));
            }
            var reports = await DbContext
                          .TeamReports
                          .Where(x => x.TeamId == id)
                          .OrderBy(x => x.AcknowledgedDate)
                          .ThenBy(x => x.TeamId)
                          .ProjectTo <TeamReportStubModel>(AutoMapper.ConfigurationProvider)
                          .ToArrayAsync();

            return(Ok(reports));
        }
示例#6
0
        public async Task <IActionResult> Report([FromBody] TeamReportModel model, int?id = null)
        {
            if (Throttled && !ThrottlingService.CanAccess(User, Request))
            {
                return(StatusCode(429, ThrottleService.Message));
            }
            var teamId = id ?? model.TeamId;

            DbContext.TeamReports.Add(new TeamReport
            {
                TeamId = teamId,
                Reason = model.Reason
            });
            await DbContext.SaveChangesSafe();

            return(Ok(teamId));
        }
示例#7
0
        public async Task <IActionResult> Report([FromBody] TeamCommentReportModel model, int?id = null)
        {
            if (Throttled && !ThrottlingService.CanAccess(User, Request))
            {
                return(StatusCode(429, ThrottleService.Message));
            }
            var teamCommentId = id ?? model.TeamCommentId;

            var team = DbContext.TeamComments.SingleOrDefault(x => x.Id == teamCommentId);

            if (team != null)
            {
                team.Reported = true;
                await DbContext.SaveChangesSafe();
            }
            return(Ok(teamCommentId));
        }
示例#8
0
        public async Task <IActionResult> Focus(int?id)
        {
            if (Throttled && !ThrottlingService.CanAccess(User, Request, Request.Path))
            {
                return(StatusCode(429, ThrottleService.Message));
            }
            if (id.HasValue && User.IsInRole(RoleConstants.BoxUser))
            {
                await _preferenceService.SetPreference(User.GetId(), UserPreferenceType.BoxId, id?.ToString());

                return(await Detail(id));
            }
            else
            {
                await _preferenceService.ClearPreference(User.GetId(), UserPreferenceType.BoxId);

                return(Ok(1));
            }
        }