예제 #1
0
        private async Task <IActionResult> DoReport(ReportArgs args)
        {
            var t = await Db.GetTopic(args.Topic);

            if (t == null)
            {
                return(new NotFoundResult());
            }
            else if (!t.WriteToken.Equals(args.WriteToken, StringComparison.OrdinalIgnoreCase))
            {
                return(StatusCode(403));
            }

            if (Timeouts.IsTimedOut(t.TopicId))
            {
                return(StatusCode(StatusCodes.Status429TooManyRequests));
            }

            await Herald.PublishMessage(t, args.Message);

            Timeouts.ApplyCost(t.TopicId, Config.ReportCost);

            return(new OkResult());
        }