示例#1
0
        public async Task <string> ValidateUser(string username, string password)
        {
            if (!await UserStore.ValidateUser(username, password))
            {
                return(null);
            }

            var user = await UserStore.GetUser(username);

            var permissions = await UserStore.GetPermissionsForUser(user.Value.Id);

            return(await TokenCache.Create(permissions, null));
        }
示例#2
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);
    }
示例#3
0
 public void Create(string messageId)
 {
     impl.Create(messageId);
 }
示例#4
0
 public void PrepareMessage(string messageId)
 {
     tokenStore.Create(messageId);
 }