Exemplo n.º 1
0
        public async Task CrudOne()
        {
            var userId       = 1;
            var tokens       = _container.Resolve <ITokenRegistrationRepository>();
            var registration = new TokenRegistration
            {
                UserId      = userId,
                IssuedAt    = DateTime.UtcNow.AddDays(-1),
                AccessToken = "token",
                ExpiredAt   = DateTime.UtcNow.AddDays(+1)
            };

            // CREATE
            await tokens.Save(registration);

            // READ
            var result = await tokens.FindById(registration.Id);

            result.Should().BeEquivalentTo(registration, CompareOptions);

            // UPDATE
            registration.AccessToken = "new token";
            await tokens.Save(registration);

            result = await tokens.FindById(registration.Id);

            result.Should().BeEquivalentTo(registration, CompareOptions);

            // DELETE
            await tokens.RevokeByUserId(userId);

            result = await tokens.FindById(registration.Id);

            result.Should().BeNull();
        }
Exemplo n.º 2
0
        public async Task Save(TokenRegistration registration)
        {
            if (registration.Id > 0)
            {
                const string query = @"
update dom.""TokenRegistration""
set ""UserId"" = @UserId, ""AccessToken"" = @AccessToken, ""IssuedAt"" = @IssuedAt, ""ExpiredAt"" = @ExpiredAt
where ""Id"" = @Id
";
                using (var con = _connectionProvider.Connection)
                {
                    await con.ExecuteAsync(query, registration);
                }
            }
            else
            {
                const string query = @"
insert into dom.""TokenRegistration""
(""UserId"", ""AccessToken"", ""IssuedAt"", ""ExpiredAt"")
values
(@UserId, @AccessToken, @IssuedAt, @ExpiredAt)
returning ""Id""
";
                using (var con = _connectionProvider.Connection)
                {
                    registration.Id = await con.ExecuteScalarAsync <int>(query, registration);
                }
            }
        }
Exemplo n.º 3
0
        private async Task <TokenCreateResponse> InternalCreateAsync(TokenCreateRequest tokenCreateRequest, CancellationToken cancellationToken = default(CancellationToken))
        {
            //TODO business rule: should we receive a deviceId to "connect" the token with that device?
            var generatedToken = _tokenGenerator.Generate(new Card(tokenCreateRequest.CardNumber, tokenCreateRequest.Cvv), _tokenGeneratorClock.Now());

            var tokenRegistration = new TokenRegistration(generatedToken.Value, tokenCreateRequest.CardNumber, generatedToken.GeneratedAt);

            _databaseContext.TokenRegistrations.Add(tokenRegistration);
            await _databaseContext.SaveChangesAsync(cancellationToken);

            return(new TokenCreateResponse(generatedToken.GeneratedAt, generatedToken.Value));
        }
        public async Task Save(TokenRegistration registration)
        {
            if (registration.Id > 0)
            {
                const string query = @"
UPDATE [dom].[TokenRegistration]
   SET [UserId] = @UserId
      ,[AccessToken] = @AccessToken
      ,[IssuedAt] = @IssuedAt
      ,[ExpiredAt] = @ExpiredAt
 WHERE [Id] = @Id
";
                using (var con = _connectionProvider.Connection)
                {
                    await con.ExecuteAsync(query, registration);
                }
            }
            else
            {
                const string query = @"
INSERT INTO [dom].[TokenRegistration]
           ([UserId]
           ,[AccessToken]
           ,[IssuedAt]
           ,[ExpiredAt])
     VALUES
           (@UserId
           ,@AccessToken
           ,@IssuedAt
           ,@ExpiredAt)
;select SCOPE_IDENTITY() id
";
                using (var con = _connectionProvider.Connection)
                {
                    registration.Id = await con.ExecuteScalarAsync <int>(query, registration);
                }
            }
        }
Exemplo n.º 5
0
        public static void ProcessDeviceToken(DeviceRegistration device, Address address, TokenRegistration token, decimal amount)
        {
            SendResponse sendResponse = null;

            try
            {
                if (string.IsNullOrEmpty(address.Name))
                {
                    sendResponse = FirebaseGateway.SendPush(device.token, token.Token, $"{token.Token} Deposit Received", $"You have received a deposit of {amount.ToString("0.##")} {token.Token}");
                }
                else
                {
                    sendResponse = FirebaseGateway.SendPush(device.token, token.Token, $"{token.Token} Deposit Received", $"{address.Name.ToUpper()} has received a deposit of {amount.ToString("0.##")} {token.Token}");
                }
                //Now update firestore so we dont send the user duplicate messages
                //token.lastBalance = IconGateway.GetBalance(address, token).ToString();
                //token.lastDepositPushSentDate = DateTime.UtcNow;
            }
            catch (Exception ex)
            {
                Console.WriteLine($"[MAIN] EXCEPTION processing Deposit check {ex.Message}");
            }

            if (sendResponse != null && sendResponse.failure > 0)
            {
                if (sendResponse.results.Any(a => a.error == "NotRegistered"))
                {
                    //This token has become stale, need to remove it from firestore
                    FirebaseGateway.DeleteDevice(device);
                }
            }
        }