Esempio n. 1
0
        private async Task PublishUsingToken(string token, params ChatPostMessageRequest[] messages)
        {
            var slackClient = _slackClientBuilder.Build(token);

            foreach (var message in messages)
            {
                try
                {
                    var res = await slackClient.ChatPostMessage(message);

                    if (!res.Ok)
                    {
                        _logger.LogWarning($"Could not post to {message.Channel}. {res.Error}");
                    }
                }
                catch (WellKnownSlackApiException sae)
                {
                    if (sae.Error == "account_inactive")
                    {
                        await _tokenStore.Delete(token);

                        _logger.LogInformation($"Deleted inactive token");
                    }
                    else
                    {
                        _logger.LogWarning(sae, $"Could not post to {message.Channel}. {sae.Error} {sae.ResponseContent}");
                    }
                }
                catch (Exception e)
                {
                    _logger.LogWarning(e, e.Message);
                }
            }
        }
        public string GetRequestTokenAuthorizeUrl(string userId)
        {
            var requestToken = GetRequestToken(_consumer);

            requestToken.UserId = userId;

            var existingToken = _requestTokenStore.Find(userId);

            if (existingToken != null)
            {
                _requestTokenStore.Delete(requestToken);
            }

            _requestTokenStore.Add(requestToken);

            return(GetAuthorizeUrl(requestToken));
        }
Esempio n. 3
0
    public override async Task Invoke(IIncomingLogicalMessageContext context, Func <Task> next)
    {
        var id = getId(context.Message.Instance);

        if (id == null)
        {
            await next();

            return;
        }

        context.Headers.TryGetValue("TokenId", out var tokenId);

        var(entity, version) = await repository.Get(id);

        string tokenVersion = null;

        if (tokenId != null)
        {
            bool tokenExists;
            (tokenExists, tokenVersion) = await tokenStore.Exists(tokenId);

            if (!tokenExists)
            {
                //Cleanup
                if (entity.OutboxState.ContainsKey(context.MessageId))
                {
                    entity.OutboxState.Remove(context.MessageId);
                    await repository.Put(entity, version);
                }

                return; //Duplicate
            }
        }

        if (!entity.OutboxState.TryGetValue(context.MessageId, out var outboxState))
        {
            context.Extensions.Set(entity);
            var messages = await InvokeMessageHandler(context, next);

            outboxState = new OutboxState {
                OutgoingMessages = messages.Serialize()
            };
            entity.OutboxState[context.MessageId] = outboxState;

            version = await repository.Put(entity, version);
        }

        if (!outboxState.TokensGenerated)
        {
            foreach (var message in outboxState.OutgoingMessages)
            {
                message.Headers["TokenId"] = Guid.NewGuid().ToString();
                await tokenStore.Create(message.Headers["TokenId"]);
            }

            outboxState.TokensGenerated = true;
            version = await repository.Put(entity, version);
        }

        var toDispatch = outboxState.OutgoingMessages.Deserialize();

        await Dispatch(toDispatch, context);

        if (tokenId != null)
        {
            await tokenStore.Delete(tokenId, tokenVersion);
        }

        entity.OutboxState.Remove(context.MessageId);
        await repository.Put(entity, version);
    }
Esempio n. 4
0
    public async Task Delete(string messageId)
    {
        await impl.Delete(messageId).ConfigureAwait(false);

        await barrier("TokenStore.Delete").ConfigureAwait(false);
    }