Ejemplo n.º 1
0
        public override async Task StoreAsync(string key, RefreshToken value)
        {
            var parameters        = new Dictionary <string, object>();
            var dynamicParameters = new DynamicParameters();

            var pg = new PredicateGroup {
                Operator = GroupOperator.And, Predicates = new List <IPredicate>()
            };

            pg.Predicates.Add(Predicates.Field <Entities.Token>(t => t.Key, Operator.Eq, key));
            pg.Predicates.Add(Predicates.Field <Entities.Token>(t => t.TokenType, Operator.Eq, tokenType));

            var sql = options.SqlGenerator.Select(new TokenMapper(options), pg, null, parameters);

            dynamicParameters = new DynamicParameters();
            foreach (var parameter in parameters)
            {
                dynamicParameters.Add(parameter.Key, parameter.Value);
            }

            var token = await options.Connection.QueryFirstOrDefaultAsync <Entities.Token>(sql, dynamicParameters);

            if (token == null)
            {
                token = new Entities.Token
                {
                    Key       = key,
                    SubjectId = value.SubjectId,
                    ClientId  = value.ClientId,
                    TokenType = tokenType,
                    JsonCode  = ConvertToJson(value),
                    Expiry    = value.CreationTime.AddSeconds(value.LifeTime)
                };

                sql = options.SqlGenerator.Insert(new TokenMapper(options));
                await options.Connection.ExecuteAsync(sql, token);
            }
            else
            {
                token.JsonCode = ConvertToJson(value);
                token.Expiry   = value.CreationTime.AddSeconds(value.LifeTime);

                parameters = new Dictionary <string, object>();
                sql        = options.SqlGenerator.Update(new TokenMapper(options), pg, parameters, true);

                dynamicParameters = new DynamicParameters();
                foreach (var parameter in parameters)
                {
                    dynamicParameters.Add(parameter.Key, parameter.Value);
                }
                dynamicParameters.Add("SubjectId", token.SubjectId);
                dynamicParameters.Add("ClientId", token.ClientId);
                dynamicParameters.Add("JsonCode", token.JsonCode);
                dynamicParameters.Add("Expiry", token.Expiry);

                await options.Connection.ExecuteAsync(sql, dynamicParameters);
            }
        }
        public override async Task StoreAsync(string key, AuthorizationCode code)
        {
            var efCode = new Entities.Token
            {
                Key       = key,
                SubjectId = code.SubjectId,
                ClientId  = code.ClientId,
                JsonCode  = ConvertToJson(code),
                Expiry    = DateTimeOffset.UtcNow.AddSeconds(code.Client.AuthorizationCodeLifetime),
                TokenType = this.tokenType
            };

            var sql = options.SqlGenerator.Insert(new TokenMapper(options));
            await options.Connection.ExecuteAsync(sql, efCode);
        }