コード例 #1
0
        public async Task <WebhookEntity> GetWebhookEntity(WebhookEntity row)
        {
            TableOperation selOperation = TableOperation.Retrieve <WebhookEntity>(row.PartitionKey, row.RowKey);
            TableResult    result       = await GetClickWebhookTable().ExecuteAsync(selOperation);

            return(result.Result as WebhookEntity);
        }
コード例 #2
0
        public async Task DeleteWebhookEntity(WebhookEntity entity)
        {
            var originalWebhook = await GetWebhookEntity(entity);

            var         deleteOperation = TableOperation.Delete(originalWebhook);
            TableResult result          = await GetClickWebhookTable().ExecuteAsync(deleteOperation);
        }
コード例 #3
0
        public async Task <WebhookEntity> SaveWebhookEntity(WebhookEntity webhookEntity)
        {
            TableOperation insOperation = TableOperation.InsertOrMerge(webhookEntity);
            TableResult    result       = await GetClickWebhookTable().ExecuteAsync(insOperation);

            return(result.Result as WebhookEntity);
        }
コード例 #4
0
        public async Task <WebhookEntity> UpdateWebhookEntity(WebhookEntity entity)
        {
            var originalWebhook = await GetWebhookEntity(entity);

            originalWebhook.Url = entity.Url;

            return(await SaveWebhookEntity(originalWebhook));
        }
コード例 #5
0
        public static async Task SetWebhookAsync(this Telegram telegram, string webhookUrl)
        {
            var webhookRequest = new WebhookEntity()
            {
                Url = webhookUrl
            };

            var url = telegram.GetFullPathUrl("setWebhook");

            var request = new ExternalRequest <ResponseAnswer <object>, WebhookEntity>()
            {
                Method          = POST_METHOD,
                PostContentType = "application/json",
                PostContent     = webhookRequest
            };

            var response = await RequestSender.Execute(DataAccessMode.Server, request, url).ConfigureAwait(false);
        }
コード例 #6
0
        /// <summary>
        /// Creates a model based on the given domain entity.
        /// </summary>
        /// <param name="entity">The domain entity.</param>
        /// <param name="constants">The application constants.</param>
        /// <returns>The domain entity as a model.</returns>
        public static WebhookModel Create(WebhookEntity entity, IApplicationConstants constants)
        {
            if (entity == null)
            {
                return(null);
            }

            return(new WebhookModel
            {
                Id = entity.Id.ToString(),
                CreatedDate = entity.CreatedDate,
                ModifiedDate = entity.ModifiedDate,
                Url = entity.Url,
                ApiVersion = entity.ApiVersion,
                EnabledEvents = string.IsNullOrWhiteSpace(entity.EnabledEvents) ?
                                Array.Empty <string>() : entity.EnabledEvents.Replace(constants.ValueSeparator, string.Empty).Split(','),
                UserId = entity.UserId
            });
        }
コード例 #7
0
        /// <inheritdoc/>
        protected override async Task <WebhookModel> ProtectedHandleAsync(CreateWebhookCommand request, CancellationToken cancellationToken)
        {
            var principal = PrincipalProvider.GetPrincipal();

            if (principal == null)
            {
                throw new ForbiddenException("Not authenticated");
            }

            int webhookLimit;

            if (principal.IsInRole(RoleType.Administrator))
            {
                webhookLimit = 0;
            }
            else
            {
                webhookLimit = apiConfiguration.Options.WebhookLimit;
            }

            processMutex = new Mutex(false, this.GetMethodName());

            return(await processMutex.Execute(new TimeSpan(0, 0, 2), async() =>
            {
                if (webhookLimit > 0)
                {
                    var count = await Context.WebhookRepository.CountAsync(
                        e => e.UserId == principal.Identity.Name, cancellationToken);
                    if (count >= webhookLimit)
                    {
                        throw new AmiException($"The webhook limit of {webhookLimit} has been reached.");
                    }
                }

                Guid guid = idGenerator.GenerateId();

                string enabledEvents = request.EnabledEvents.Contains(constants.WildcardCharacter) ?
                                       constants.WildcardCharacter.Embed(constants.ValueSeparator) :
                                       request.EnabledEvents.ToArray().ToString(",", constants.ValueSeparator);

                var entity = new WebhookEntity()
                {
                    Id = guid,
                    CreatedDate = DateTime.UtcNow,
                    ModifiedDate = DateTime.UtcNow,
                    Url = request.Url,
                    ApiVersion = request.ApiVersion,
                    Secret = request.Secret,
                    EnabledEvents = enabledEvents,
                    UserId = principal.Identity.Name
                };

                Context.WebhookRepository.Add(entity);

                await Context.SaveChangesAsync(cancellationToken);

                var result = WebhookModel.Create(entity, constants);

                return result;
            }));
        }