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)); }
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); }
public async Task Delete(string messageId) { await impl.Delete(messageId).ConfigureAwait(false); await barrier("TokenStore.Delete").ConfigureAwait(false); }