Compare commits
No commits in common. "f9b4174faee8c73ed98fb190a071570f43480e31" and "aa1c63f42d85b3dece3276933d3cc349452ed8ba" have entirely different histories.
f9b4174fae
...
aa1c63f42d
@ -30,8 +30,6 @@
|
||||
<PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="7.0.8" />
|
||||
<PackageReference Include="Npgsql.EntityFrameworkCore.PostgreSQL" Version="7.0.4" />
|
||||
<PackageReference Include="Microsoft.AspNetCore.SpaProxy" Version="7.0.13" />
|
||||
<PackageReference Include="Otp.NET" Version="1.3.0" />
|
||||
<PackageReference Include="PuppeteerSharp" Version="15.1.0" />
|
||||
<PackageReference Include="Swashbuckle.AspNetCore" Version="6.5.0" />
|
||||
<PackageReference Include="System.IdentityModel.Tokens.Jwt" Version="6.35.0" />
|
||||
</ItemGroup>
|
||||
|
@ -0,0 +1,6 @@
|
||||
namespace AAIntegration.SimmonsBank.API.Configs;
|
||||
|
||||
public class EnvelopeFundConfig
|
||||
{
|
||||
public int CheckIntervalInMinutes { get; set; }
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
namespace AAIntegration.SimmonsBank.API.Configs;
|
||||
|
||||
public class PuppeteerConfig
|
||||
{
|
||||
public int KeepAliveIntervalMinutes { get; set; }
|
||||
public int CheckForNewDataIntervalMinutes { get; set; }
|
||||
public int TaskCheckIntervalMinutes { get; set; }
|
||||
public string SimmonsBankBaseUrl { get; set; }
|
||||
public int BrowserOperationTimeoutSeconds { get; set; }
|
||||
public bool Headless { get; set; }
|
||||
}
|
||||
|
||||
public class PuppeteerConfigConstants
|
||||
{
|
||||
public const string KeepAliveIntervalMinutes = "KeepAliveIntervalMinutes";
|
||||
public const string CheckForNewDataIntervalMinutes = "CheckForNewDataIntervalMinutes";
|
||||
public const string TaskCheckIntervalMinutes = "TaskCheckIntervalMinutes";
|
||||
public const string SimmonsBankBaseUrl = "SimmonsBankBaseUrl";
|
||||
public const string BrowserOperationTimeoutSeconds = "BrowserOperationTimeoutSeconds";
|
||||
public const string Headless = "Headless";
|
||||
}
|
||||
|
||||
public class PuppeteerConstants
|
||||
{
|
||||
public const string BROWSER_CACHE_KEY = "BrowserCacheKey";
|
||||
public const string USER_SB_ID = "UserSimmonsBankId";
|
||||
}
|
@ -1,66 +1,91 @@
|
||||
namespace AAIntegration.SimmonsBank.API.Controllers;
|
||||
|
||||
using AutoMapper;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Options;
|
||||
using AAIntegration.SimmonsBank.API.Models.Accounts;
|
||||
using AAIntegration.SimmonsBank.API.Services;
|
||||
using AAIntegration.SimmonsBank.API.Config;
|
||||
using System.Collections.Generic;
|
||||
using AAIntegration.SimmonsBank.API.Entities;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using System.Security.Claims;
|
||||
using System.Threading.Tasks;
|
||||
using AAIntegration.SimmonsBank.API.Models.Transactions;
|
||||
|
||||
[Authorize]
|
||||
[ApiController]
|
||||
[Route("[controller]")]
|
||||
public class AccountsController : ControllerBase
|
||||
{
|
||||
private IAccountService _accountService;
|
||||
private IUserService _userService;
|
||||
private IMapper _mapper;
|
||||
private readonly AppSettings _appSettings;
|
||||
private readonly ILogger<AccountsController> _logger;
|
||||
private IPuppeteerService _puppeteerService;
|
||||
|
||||
public AccountsController(
|
||||
IAccountService accountService,
|
||||
IUserService userService,
|
||||
ILogger<AccountsController> logger,
|
||||
IPuppeteerService puppeteerService)
|
||||
IMapper mapper,
|
||||
IOptions<AppSettings> appSettings,
|
||||
ILogger<AccountsController> logger)
|
||||
{
|
||||
_accountService = accountService;
|
||||
_userService = userService;
|
||||
_mapper = mapper;
|
||||
_appSettings = appSettings.Value;
|
||||
_logger = logger;
|
||||
_puppeteerService = puppeteerService;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public async Task<IActionResult> GetAllAsync()
|
||||
public IActionResult GetAll()
|
||||
{
|
||||
List<AccountDTO> accounts = await _puppeteerService.GetAccounts(GetCurrentUser());
|
||||
return Ok(accounts);
|
||||
List<AccountDTO> accountDtos = new List<AccountDTO>();
|
||||
|
||||
foreach (Account acc in _accountService.GetAll(GetCurrentUserId()))
|
||||
accountDtos.Add(_mapper.Map<Account, AccountDTO>(acc));
|
||||
|
||||
return Ok(accountDtos);
|
||||
}
|
||||
|
||||
[HttpGet("{account_guid}")]
|
||||
public async Task<IActionResult> GetByGUIDAsync(string account_guid)
|
||||
[HttpGet("{id}")]
|
||||
public IActionResult GetById(int id)
|
||||
{
|
||||
return Ok(await GetAccountAsync(account_guid));
|
||||
Account account = _accountService.GetById(id, GetCurrentUserId());
|
||||
return Ok(_mapper.Map<Account, AccountDTO>(account));
|
||||
}
|
||||
|
||||
[HttpGet("{account_guid}/transactions")]
|
||||
public async Task<IActionResult> GetTransactionsAsync(string account_guid, uint offset = 0, uint limit = 500)
|
||||
[HttpPost]
|
||||
public IActionResult Create([FromBody]AccountCreateRequest model)
|
||||
{
|
||||
List<TransactionDTO> transactions = await _puppeteerService.GetTransactions(GetCurrentUser(), (await GetAccountAsync(account_guid)).Id, offset, limit);
|
||||
return Ok(transactions);
|
||||
_accountService.Create(model, GetCurrentUserId());
|
||||
return Ok(new { message = "account created" });
|
||||
}
|
||||
|
||||
[HttpPut("{id}")]
|
||||
public IActionResult Update(int id, [FromBody]AccountUpdateRequest model)
|
||||
{
|
||||
_accountService.Update(id, model, GetCurrentUserId());
|
||||
return Ok(new { message = "account updated" });
|
||||
}
|
||||
|
||||
[HttpDelete("{id}")]
|
||||
public IActionResult Delete(int id)
|
||||
{
|
||||
_accountService.Delete(id, GetCurrentUserId());
|
||||
return Ok(new { message = "account deleted" });
|
||||
}
|
||||
|
||||
// Helpers
|
||||
|
||||
private async Task<AccountDTO> GetAccountAsync(string account_guid)
|
||||
{
|
||||
List<AccountDTO> accounts = await _puppeteerService.GetAccounts(GetCurrentUser());
|
||||
AccountDTO account = accounts.FirstOrDefault(a => a.Id == account_guid) ?? throw new KeyNotFoundException("Account not found");
|
||||
return account;
|
||||
}
|
||||
|
||||
private User GetCurrentUser()
|
||||
private int GetCurrentUserId()
|
||||
{
|
||||
string apiKey = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
return _userService.GetUser(apiKey);
|
||||
|
||||
if (apiKey is null)
|
||||
_logger.LogInformation($"ApiKey: is null");
|
||||
|
||||
_logger.LogInformation($"apiKey: {apiKey}");
|
||||
|
||||
return _userService.GetUser(apiKey).Id;
|
||||
}
|
||||
}
|
@ -0,0 +1,109 @@
|
||||
namespace AAIntegration.SimmonsBank.API.Controllers;
|
||||
|
||||
using AutoMapper;
|
||||
using Microsoft.AspNetCore.Mvc;
|
||||
using Microsoft.Extensions.Options;
|
||||
using AAIntegration.SimmonsBank.API.Models.Transactions;
|
||||
using AAIntegration.SimmonsBank.API.Services;
|
||||
using AAIntegration.SimmonsBank.API.Config;
|
||||
using System.Runtime.InteropServices;
|
||||
using AAIntegration.SimmonsBank.API.Entities;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using System.Security.Claims;
|
||||
|
||||
[Authorize]
|
||||
[ApiController]
|
||||
[Route("[controller]")]
|
||||
public class TransactionsController : ControllerBase
|
||||
{
|
||||
private ITransactionService _transactionService;
|
||||
private IUserService _userService;
|
||||
private IMapper _mapper;
|
||||
private readonly AppSettings _appSettings;
|
||||
private readonly ILogger<TransactionsController> _logger;
|
||||
|
||||
public TransactionsController(
|
||||
ITransactionService transactionService,
|
||||
IUserService userService,
|
||||
IMapper mapper,
|
||||
IOptions<AppSettings> appSettings,
|
||||
ILogger<TransactionsController> logger)
|
||||
{
|
||||
_transactionService = transactionService;
|
||||
_userService = userService;
|
||||
_mapper = mapper;
|
||||
_appSettings = appSettings.Value;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
[HttpGet]
|
||||
public IActionResult GetAll(int? accountId = null)
|
||||
{
|
||||
List<TransactionDto> transactionDtos = new List<TransactionDto>();
|
||||
|
||||
foreach (Transaction tran in _transactionService.GetAll(this.GetCurrentUserId()))
|
||||
{
|
||||
if (accountId.HasValue
|
||||
&& (tran.DebitAccount == null || tran.DebitAccount.Id != accountId)
|
||||
&& (tran.CreditAccount == null || tran.CreditAccount.Id != accountId))
|
||||
continue;
|
||||
|
||||
transactionDtos.Add(_mapper.Map<Transaction, TransactionDto>(tran));
|
||||
}
|
||||
|
||||
// Sort by Date
|
||||
transactionDtos.Sort((t1, t2) => t2.Date.CompareTo(t1.Date));
|
||||
|
||||
return Ok(transactionDtos);
|
||||
}
|
||||
|
||||
[HttpGet("{id}")]
|
||||
public IActionResult GetById(int id)
|
||||
{
|
||||
Transaction tran = _transactionService.GetById(id, this.GetCurrentUserId());
|
||||
return Ok(_mapper.Map<Transaction, TransactionDto>(tran));
|
||||
}
|
||||
|
||||
[HttpPost("BulkAdd")]
|
||||
public IActionResult BulkCreate([FromBody]List<TransactionCreate> model)
|
||||
{
|
||||
List<Transaction> trans = _transactionService.BulkCreate(model, this.GetCurrentUserId()).ToList();
|
||||
return Ok(new { message = $"{trans.Count()} transaction(s) created." });
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
public IActionResult Create([FromBody]TransactionCreate model)
|
||||
{
|
||||
Transaction tran = _transactionService.Create(model, this.GetCurrentUserId());
|
||||
return Ok(new { message = $"transaction '{tran.Description}' created with id '{tran.Id}'." });
|
||||
}
|
||||
|
||||
[HttpPut("{id}")]
|
||||
public IActionResult Update(int id, [FromBody]TransactionUpdateRequest model)
|
||||
{
|
||||
_transactionService.Update(id, model, this.GetCurrentUserId());
|
||||
return Ok(new { message = $"transaction with id '{id}' updated" });
|
||||
}
|
||||
|
||||
[HttpDelete("{id}")]
|
||||
public IActionResult Delete(int id)
|
||||
{
|
||||
_transactionService.Delete(id, this.GetCurrentUserId());
|
||||
return Ok(new { message = "transaction deleted" });
|
||||
}
|
||||
|
||||
// Helpers
|
||||
|
||||
private int GetCurrentUserId()
|
||||
{
|
||||
string apiKey = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
|
||||
if (apiKey is null)
|
||||
_logger.LogInformation($"ApiKey: is null");
|
||||
|
||||
_logger.LogInformation($"apiKey: {apiKey}");
|
||||
|
||||
return _userService.GetUser(apiKey).Id;
|
||||
}
|
||||
}
|
@ -58,6 +58,13 @@ public class UsersController : ControllerBase
|
||||
|
||||
private string GetCurrentUserApiKey()
|
||||
{
|
||||
return User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
string apiKey = User.FindFirstValue(ClaimTypes.NameIdentifier);
|
||||
|
||||
if (apiKey is null)
|
||||
_logger.LogInformation($"ApiKey: is null");
|
||||
|
||||
_logger.LogInformation($"apiKey: {apiKey}");
|
||||
|
||||
return apiKey;
|
||||
}
|
||||
}
|
12
AAIntegration.SimmonsBank.API/Entities/Account.cs
Normal file
12
AAIntegration.SimmonsBank.API/Entities/Account.cs
Normal file
@ -0,0 +1,12 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace AAIntegration.SimmonsBank.API.Entities;
|
||||
|
||||
public class Account
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public decimal Balance { get; set; }
|
||||
public string ExternalAccountNumber { get; set; }
|
||||
public User Owner { get; set; }
|
||||
}
|
19
AAIntegration.SimmonsBank.API/Entities/Transaction.cs
Normal file
19
AAIntegration.SimmonsBank.API/Entities/Transaction.cs
Normal file
@ -0,0 +1,19 @@
|
||||
using System.Collections.Generic;
|
||||
using AAIntegration.SimmonsBank.API.Services;
|
||||
|
||||
namespace AAIntegration.SimmonsBank.API.Entities;
|
||||
|
||||
public class Transaction
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public DateTime Date { get; set; }
|
||||
public DateTime CreatedOn { get; set; }
|
||||
public DateTime UpdatedOn { get; set; }
|
||||
public string ExternalId { get; set; }
|
||||
public string Description { get; set; }
|
||||
public Account? DebitAccount { get; set; }
|
||||
public Account? CreditAccount { get; set; }
|
||||
public decimal Amount { get; set; }
|
||||
public bool IsPending { get; set; }
|
||||
public User Owner { get; set; }
|
||||
}
|
@ -3,9 +3,14 @@ namespace AAIntegration.SimmonsBank.API.Config;
|
||||
using AutoMapper;
|
||||
using AAIntegration.SimmonsBank.API.Entities;
|
||||
using AAIntegration.SimmonsBank.API.Models.Users;
|
||||
using AAIntegration.SimmonsBank.API.Models.Accounts;
|
||||
using AAIntegration.SimmonsBank.API.Services;
|
||||
using System.Runtime.Serialization;
|
||||
using AAIntegration.SimmonsBank.API.Models.Transactions;
|
||||
|
||||
public class AutoMapperProfile : Profile
|
||||
{
|
||||
|
||||
public AutoMapperProfile()
|
||||
{ // UserUpdateRequest -> User
|
||||
CreateMap<UserUpdateRequest, User>()
|
||||
@ -21,5 +26,55 @@ public class AutoMapperProfile : Profile
|
||||
return true;
|
||||
}
|
||||
));
|
||||
|
||||
// AccountUpdateRequest -> Account
|
||||
CreateMap<AccountUpdateRequest, Account>();
|
||||
|
||||
// AccountCreateRequest -> Account
|
||||
CreateMap<AccountCreateRequest, Account>();
|
||||
/*.ForMember(
|
||||
dest => dest.OwnerId,
|
||||
opt => opt.MapFrom(src => src.Owner)
|
||||
);
|
||||
/*.ForAllMembers(x => x.Condition(
|
||||
(src, dest, prop) =>
|
||||
{
|
||||
// ignore both null & empty string properties
|
||||
if (prop == null) return false;
|
||||
if (prop.GetType() == typeof(string) && string.IsNullOrEmpty((string)prop)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
))*/
|
||||
|
||||
// Account -> AccountGet
|
||||
CreateMap<Account, AccountDTO>()
|
||||
.ForAllMembers(x => x.Condition(
|
||||
(src, dest, prop) =>
|
||||
{
|
||||
// ignore both null & empty string properties
|
||||
if (prop == null) return false;
|
||||
if (prop.GetType() == typeof(string) && string.IsNullOrEmpty((string)prop)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
));
|
||||
|
||||
|
||||
// Transaction -> TransactionDto
|
||||
CreateMap<Transaction, TransactionDto>()
|
||||
.ForMember(dest => dest.DebitAccountId, opt => opt.MapFrom(src => src.DebitAccount.Id))
|
||||
.ForMember(dest => dest.CreditAccountId, opt => opt.MapFrom(src => src.CreditAccount.Id))
|
||||
.ForAllMembers(x => x.Condition(
|
||||
(src, dest, prop) =>
|
||||
{
|
||||
// ignore both null & empty string properties
|
||||
if (prop == null) return false;
|
||||
if (prop.GetType() == typeof(string) && string.IsNullOrEmpty((string)prop)) return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
));
|
||||
|
||||
}
|
||||
}
|
@ -31,4 +31,6 @@ public class DataContext : DbContext
|
||||
}*/
|
||||
|
||||
public DbSet<User> Users { get; set; }
|
||||
public DbSet<Account> Accounts { get; set; }
|
||||
public DbSet<Transaction> Transactions { get; set; }
|
||||
}
|
@ -0,0 +1,14 @@
|
||||
namespace AAIntegration.SimmonsBank.API.Models.Accounts;
|
||||
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Runtime.InteropServices;
|
||||
using AAIntegration.SimmonsBank.API.Entities;
|
||||
|
||||
public class AccountCreateRequest
|
||||
{
|
||||
public string Name { get; set; }
|
||||
public string InitialBalance { get; set; }
|
||||
public int Currency { get; set; }
|
||||
public string ExternalAccountNumber { get; set; }
|
||||
public int Owner { get; set; }
|
||||
}
|
@ -7,13 +7,8 @@ namespace AAIntegration.SimmonsBank.API.Models.Accounts;
|
||||
|
||||
public class AccountDTO
|
||||
{
|
||||
public string Id { get; set; }
|
||||
public int Id { get; set; }
|
||||
public string Name { get; set; }
|
||||
public string Numbers { get; set; }
|
||||
public decimal? Balance { get; set; }
|
||||
public decimal? AvailableBalance { get; set; }
|
||||
public string AccountType { get; set; }
|
||||
public string AccountSubType { get; set; }
|
||||
public DateTime? PaymentDueDate { get; set; }
|
||||
public decimal? PaymentDueAmount { get; set; }
|
||||
public decimal Balance { get; set; }
|
||||
public string ExternalAccountNumber { get; set; }
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
namespace AAIntegration.SimmonsBank.API.Models.Accounts;
|
||||
|
||||
public class AccountUpdateRequest
|
||||
{
|
||||
public string? Name { get; set; } = null;
|
||||
public string? Balance { get; set; } = null;
|
||||
public string? ExternalAccountNumber { get; set; } = null;
|
||||
}
|
@ -0,0 +1,16 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime;
|
||||
using AAIntegration.SimmonsBank.API.Services;
|
||||
|
||||
namespace AAIntegration.SimmonsBank.API.Models.Transactions;
|
||||
|
||||
public class TransactionCreate
|
||||
{
|
||||
public DateTime Date { get; set; }
|
||||
public string ExternalId { get; set; }
|
||||
public string Description { get; set; }
|
||||
public int? DebitAccount { get; set; }
|
||||
public int? CreditAccount { get; set; }
|
||||
public decimal Amount { get; set; }
|
||||
public bool IsPending { get; set; }
|
||||
}
|
@ -1,21 +0,0 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime;
|
||||
using AAIntegration.SimmonsBank.API.Services;
|
||||
|
||||
namespace AAIntegration.SimmonsBank.API.Models.Transactions;
|
||||
|
||||
public class TransactionDTO
|
||||
{
|
||||
public string Id { get; set; }
|
||||
public string AccountId { get; set; }
|
||||
public string Type { get; set; }
|
||||
public decimal? Amount { get; set; }
|
||||
public decimal? RunningBalance { get; set; }
|
||||
public DateTime? DatePosted { get; set; }
|
||||
public DateTime? Date { get; set; }
|
||||
public DateTime? LastUpdated { get; set; }
|
||||
public string PendingStatus { get; set; }
|
||||
public string Memo { get; set; }
|
||||
public string FilteredMemo { get; set; }
|
||||
public string DisplayName { get; set; }
|
||||
}
|
@ -0,0 +1,19 @@
|
||||
using System.Collections.Generic;
|
||||
using System.Runtime;
|
||||
using AAIntegration.SimmonsBank.API.Services;
|
||||
|
||||
namespace AAIntegration.SimmonsBank.API.Models.Transactions;
|
||||
|
||||
public class TransactionDto
|
||||
{
|
||||
public int Id { get; set; }
|
||||
public DateTime Date { get; set; }
|
||||
public DateTime CreatedOn { get; set; }
|
||||
public DateTime UpdatedOn { get; set; }
|
||||
public string ExternalId { get; set; }
|
||||
public string Description { get; set; }
|
||||
public int DebitAccountId { get; set; }
|
||||
public int CreditAccountId { get; set; }
|
||||
public decimal Amount { get; set; }
|
||||
public bool IsPending { get; set; }
|
||||
}
|
@ -0,0 +1,15 @@
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using AAIntegration.SimmonsBank.API.Entities;
|
||||
|
||||
namespace AAIntegration.SimmonsBank.API.Models.Transactions;
|
||||
|
||||
public class TransactionUpdateRequest
|
||||
{
|
||||
public DateTime? Date { get; set; } = null;
|
||||
public string? ExternalId { get; set; } = null;
|
||||
public string? Description { get; set; } = null;
|
||||
public int? DebitAccount { get; set; } = null;
|
||||
public int? CreditAccount { get; set; } = null;
|
||||
public decimal? Amount { get; set; } = null;
|
||||
public bool? IsPending { get; set; } = null;
|
||||
}
|
@ -1,12 +0,0 @@
|
||||
using System.Threading.Tasks;
|
||||
using AAIntegration.SimmonsBank.API.Entities;
|
||||
using AAIntegration.SimmonsBank.API.Services;
|
||||
|
||||
namespace AAIntegration.SimmonsBank.API.Processes;
|
||||
|
||||
public interface IPuppeteerProcess
|
||||
{
|
||||
void SetService(IPuppeteerService puppeteerService);
|
||||
void SetStoppingToken(CancellationToken stoppingToken);
|
||||
Task StayLoggedIn(User user);
|
||||
}
|
@ -1,68 +0,0 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Threading.Tasks;
|
||||
using AAIntegration.SimmonsBank.API.Configs;
|
||||
using AAIntegration.SimmonsBank.API.Entities;
|
||||
using AAIntegration.SimmonsBank.API.Models.Transactions;
|
||||
using AAIntegration.SimmonsBank.API.Services;
|
||||
using Internal;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using Microsoft.Extensions.Options;
|
||||
using PuppeteerSharp;
|
||||
using OtpNet;
|
||||
using System.Text;
|
||||
|
||||
namespace AAIntegration.SimmonsBank.API.Processes;
|
||||
|
||||
public class PuppeteerProcess : IPuppeteerProcess
|
||||
{
|
||||
private readonly PuppeteerConfig _config;
|
||||
private readonly ILogger<PuppeteerProcess> _logger;
|
||||
private readonly IMemoryCache _memoryCache;
|
||||
private const string DASHBOARD_SELECTOR = "body > banno-web > bannoweb-layout > bannoweb-dashboard";
|
||||
private CancellationToken _stoppingToken;
|
||||
private IPuppeteerService _puppeteerService;
|
||||
|
||||
public PuppeteerProcess(
|
||||
IOptions<PuppeteerConfig> config,
|
||||
ILogger<PuppeteerProcess> logger,
|
||||
IMemoryCache memoryCache)
|
||||
{
|
||||
_config = config.Value;
|
||||
_logger = logger;
|
||||
_memoryCache = memoryCache;
|
||||
_stoppingToken = new CancellationToken();
|
||||
}
|
||||
|
||||
public void SetService(IPuppeteerService puppeteerService)
|
||||
{
|
||||
_puppeteerService = puppeteerService;
|
||||
}
|
||||
|
||||
public void SetStoppingToken(CancellationToken stoppingToken)
|
||||
{
|
||||
_stoppingToken = stoppingToken;
|
||||
}
|
||||
|
||||
public async Task StayLoggedIn(User user)
|
||||
{
|
||||
string prefix = $"Task::StayLoggedIn - {user.Id} - ";
|
||||
|
||||
if (!await _puppeteerService.IsLoggedIn(user, _stoppingToken))
|
||||
{
|
||||
_logger.LogInformation(prefix + "User is not logged in");
|
||||
await _puppeteerService.Login(user, _stoppingToken);
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.LogInformation(prefix + "User is still logged in");
|
||||
}
|
||||
}
|
||||
|
||||
// Helper Functions
|
||||
|
||||
private async Task Delay(int milliseconds)
|
||||
{
|
||||
await Task.Delay(TimeSpan.FromMilliseconds(milliseconds), _stoppingToken);
|
||||
}
|
||||
}
|
@ -11,8 +11,6 @@ using Microsoft.IdentityModel.Tokens;
|
||||
using System.Text;
|
||||
//using Microsoft.Build.Framework;
|
||||
using Microsoft.AspNetCore.Authorization;
|
||||
using AAIntegration.SimmonsBank.API.Processes;
|
||||
using AAIntegration.SimmonsBank.API.Workers;
|
||||
|
||||
internal class Program
|
||||
{
|
||||
@ -70,7 +68,7 @@ internal class Program
|
||||
|
||||
// Configure strongly typed settings object
|
||||
builder.Services.Configure<AppSettings>(builder.Configuration.GetSection("AppSettings"));
|
||||
builder.Services.Configure<PuppeteerConfig>(builder.Configuration.GetSection("Puppeteer"));
|
||||
builder.Services.Configure<EnvelopeFundConfig>(builder.Configuration.GetSection("EnvelopeFund"));
|
||||
builder.Services.Configure<DatabaseConfig>(builder.Configuration.GetSection("ActiveAllocator:Database"));
|
||||
|
||||
DatabaseConfig dbConfig = builder.Configuration.GetSection("ActiveAllocator:Database").Get<DatabaseConfig>();
|
||||
@ -80,16 +78,13 @@ internal class Program
|
||||
opt.UseNpgsql(dbConfig.GetConnectionString()));
|
||||
|
||||
builder.Services.AddScoped<IUserService, UserService>();
|
||||
builder.Services.AddScoped<IAccountService, AccountService>();
|
||||
builder.Services.AddScoped<ITransactionService, TransactionService>();
|
||||
builder.Services.AddScoped<ICacheService, CacheService>();
|
||||
builder.Services.AddScoped<IVersionService, VersionService>();
|
||||
builder.Services.AddScoped<IPuppeteerService, PuppeteerService>();
|
||||
|
||||
builder.Services.AddScoped<ApiKeyAuthenticationHandler>();
|
||||
|
||||
builder.Services.AddSingleton<IPuppeteerProcess, PuppeteerProcess>();
|
||||
|
||||
builder.Services.AddHostedService<PuppeteerWorker>();
|
||||
|
||||
var app = builder.Build();
|
||||
|
||||
// Apply Database Migrations - This is NOT recommended for multi-node deployment!!!
|
||||
|
132
AAIntegration.SimmonsBank.API/Services/AccountService.cs
Normal file
132
AAIntegration.SimmonsBank.API/Services/AccountService.cs
Normal file
@ -0,0 +1,132 @@
|
||||
namespace AAIntegration.SimmonsBank.API.Services;
|
||||
|
||||
using AutoMapper;
|
||||
using BCrypt.Net;
|
||||
using AAIntegration.SimmonsBank.API.Entities;
|
||||
using AAIntegration.SimmonsBank.API.Config;
|
||||
using AAIntegration.SimmonsBank.API.Models.Accounts;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System;
|
||||
using Internal;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
|
||||
public interface IAccountService
|
||||
{
|
||||
IEnumerable<Account> GetAll(int ownerId);
|
||||
Account GetById(int accountId, int ownerId);
|
||||
void Create(AccountCreateRequest model, int ownerId);
|
||||
void Update(int accountId, AccountUpdateRequest model, int ownerId);
|
||||
void Delete(int accountId, int ownerId);
|
||||
}
|
||||
|
||||
public class AccountService : IAccountService
|
||||
{
|
||||
private DataContext _context;
|
||||
private readonly IMapper _mapper;
|
||||
private IUserService _userService;
|
||||
|
||||
public AccountService(
|
||||
DataContext context,
|
||||
IMapper mapper,
|
||||
IUserService userService)
|
||||
{
|
||||
_context = context;
|
||||
_mapper = mapper;
|
||||
_userService = userService;
|
||||
}
|
||||
|
||||
public IEnumerable<Account> GetAll(int ownerId)
|
||||
{
|
||||
return _context.Accounts
|
||||
.Include(x => x.Owner)
|
||||
.Where(x => x.Owner.Id == ownerId);
|
||||
}
|
||||
|
||||
public Account GetById(int accountId, int ownerId)
|
||||
{
|
||||
return getAccount(accountId, ownerId);
|
||||
}
|
||||
|
||||
public void Create(AccountCreateRequest model, int ownerId)
|
||||
{
|
||||
// Check that account with same name or same external number doesn't exist
|
||||
IEnumerable<Account> accountsWithSameName = _context.Accounts
|
||||
.Include(x => x.Owner)
|
||||
.Where(x => x.Name.ToUpper() == model.Name.ToUpper() && x.Owner.Id == ownerId);
|
||||
|
||||
if (accountsWithSameName.Count() > 0)
|
||||
throw new AppException("Account with name '" + model.Name + "' already exists");
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(model.ExternalAccountNumber))
|
||||
{
|
||||
IEnumerable<Account> matches = _context.Accounts
|
||||
.Include(x => x.Owner)
|
||||
.Where(x => x.ExternalAccountNumber == model.ExternalAccountNumber && x.Owner.Id == ownerId);
|
||||
|
||||
if (matches.Count() > 0)
|
||||
throw new AppException("Account with external account number '" + model.ExternalAccountNumber + "' already exists under account named '" + matches.First().Name + "'");
|
||||
}
|
||||
|
||||
Account account = new Account {
|
||||
Name = model.Name,
|
||||
Balance = Convert.ToDecimal(model.InitialBalance),
|
||||
ExternalAccountNumber = model.ExternalAccountNumber,
|
||||
Owner = getOwner(ownerId)
|
||||
};
|
||||
|
||||
_context.Accounts.Add(account);
|
||||
_context.SaveChanges();
|
||||
}
|
||||
|
||||
public void Update(int accountId, AccountUpdateRequest model, int ownerId)
|
||||
{
|
||||
Account account = getAccount(accountId, ownerId);
|
||||
|
||||
// validate
|
||||
if (model.Name != account.Name && _context.Accounts
|
||||
.Include(x => x.Owner)
|
||||
.Any(x => x.Name == model.Name && x.Owner.Id == ownerId))
|
||||
throw new AppException("Account with the name '" + model.Name + "' already exists");
|
||||
|
||||
// Name
|
||||
if (!string.IsNullOrWhiteSpace(model.Name))
|
||||
account.Name = model.Name;
|
||||
|
||||
// External Account Number
|
||||
if (!string.IsNullOrWhiteSpace(model.ExternalAccountNumber))
|
||||
account.ExternalAccountNumber = model.ExternalAccountNumber;
|
||||
|
||||
_context.Accounts.Update(account);
|
||||
_context.SaveChanges();
|
||||
}
|
||||
|
||||
public void Delete(int accountId, int ownerId)
|
||||
{
|
||||
var account = getAccount(accountId, ownerId);
|
||||
_context.Accounts.Remove(account);
|
||||
_context.SaveChanges();
|
||||
}
|
||||
|
||||
// helper methods
|
||||
|
||||
private Account getAccount(int id, int ownerId)
|
||||
{
|
||||
var account = _context.Accounts
|
||||
.Include(x => x.Owner)
|
||||
.FirstOrDefault(x => x.Id == id && x.Owner.Id == ownerId);
|
||||
if (account == null) throw new KeyNotFoundException("Account not found");
|
||||
return account;
|
||||
}
|
||||
|
||||
private User getOwner(int ownerId)
|
||||
{
|
||||
User? owner = _context.Users.Find(ownerId);
|
||||
|
||||
if (owner == null)
|
||||
throw new AppException($"Owner with ID of '{ownerId}' could not be found");
|
||||
|
||||
return owner;
|
||||
}
|
||||
}
|
@ -1,29 +1,22 @@
|
||||
namespace AAIntegration.SimmonsBank.API.Services;
|
||||
|
||||
using AAIntegration.SimmonsBank.API.Config;
|
||||
using AAIntegration.SimmonsBank.API.Entities;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
|
||||
public interface ICacheService
|
||||
{
|
||||
int GetClientIdFromApiKey(string apiKey);
|
||||
T GetCachedUserValue<T>(User user, string cacheKey, T fallback);
|
||||
void SetCachedUserValue<T>(User user, string cacheKey, T value);
|
||||
}
|
||||
|
||||
public class CacheService : ICacheService
|
||||
{
|
||||
private DataContext _context;
|
||||
private readonly IMemoryCache _memoryCache;
|
||||
private readonly IUserService _userService;
|
||||
private readonly ILogger<ICacheService> _logger;
|
||||
|
||||
public CacheService(
|
||||
DataContext context,
|
||||
IMemoryCache memoryCache,
|
||||
ILogger<ICacheService> logger)
|
||||
public CacheService(IMemoryCache memoryCache, IUserService userService, ILogger<ICacheService> logger)
|
||||
{
|
||||
_context = context;
|
||||
_memoryCache = memoryCache;
|
||||
_userService = userService;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
@ -33,9 +26,7 @@ public class CacheService : ICacheService
|
||||
{
|
||||
_logger.LogInformation($"Could not find API key '{apiKey}' in cache.");
|
||||
|
||||
internalKeys = _context.Users
|
||||
.Where(u => u.ApiKey != null)
|
||||
.ToDictionary(u => u.ApiKey, u => u.Id);
|
||||
internalKeys = _userService.GetAllApiKeys();
|
||||
|
||||
_logger.LogInformation("Updated cache with new key list.");
|
||||
PrintInternalKeys(internalKeys);
|
||||
@ -52,36 +43,6 @@ public class CacheService : ICacheService
|
||||
return clientId;
|
||||
}
|
||||
|
||||
public T GetCachedUserValue<T>(User user, string cacheKey, T fallback)
|
||||
{
|
||||
if (_memoryCache.TryGetValue<Dictionary<int, T>>(cacheKey, out var internalKeys))
|
||||
{
|
||||
internalKeys ??= new Dictionary<int, T>();
|
||||
List<KeyValuePair<int, T>> list = internalKeys.Where(x => x.Key == user.Id).ToList();
|
||||
|
||||
if (list.Count > 0 && list.First().Value != null)
|
||||
{
|
||||
_logger.LogInformation($"Found the '{typeof(T)}' type cached for user with id '{user.Id}' in cache '{cacheKey}'.");
|
||||
return list.First().Value;
|
||||
}
|
||||
}
|
||||
|
||||
return fallback;
|
||||
}
|
||||
|
||||
public void SetCachedUserValue<T>(User user, string cacheKey, T value)
|
||||
{
|
||||
_memoryCache.TryGetValue<Dictionary<int, T>>(cacheKey, out var internalKeys);
|
||||
internalKeys ??= new Dictionary<int, T>();
|
||||
|
||||
if (internalKeys.ContainsKey(user.Id))
|
||||
internalKeys[user.Id] = value;
|
||||
else
|
||||
internalKeys.Add(user.Id, value);
|
||||
|
||||
_memoryCache.Set(cacheKey, internalKeys);
|
||||
}
|
||||
|
||||
// helpers
|
||||
|
||||
private void PrintInternalKeys(Dictionary<string, int> keys)
|
||||
|
@ -1,344 +0,0 @@
|
||||
namespace AAIntegration.SimmonsBank.API.Services;
|
||||
|
||||
using AutoMapper;
|
||||
using BCrypt.Net;
|
||||
using AAIntegration.SimmonsBank.API.Entities;
|
||||
using AAIntegration.SimmonsBank.API.Config;
|
||||
using AAIntegration.SimmonsBank.API.Models.Users;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.EntityFrameworkCore.Internal;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using System.Text;
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.Extensions.Options;
|
||||
using System.Security.Cryptography;
|
||||
using PuppeteerSharp;
|
||||
using AAIntegration.SimmonsBank.API.Configs;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
using OtpNet;
|
||||
using Newtonsoft.Json.Linq;
|
||||
using NuGet.Protocol;
|
||||
using Microsoft.Extensions.Logging;
|
||||
using NuGet.Protocol.Core.Types;
|
||||
using AAIntegration.SimmonsBank.API.Models.Accounts;
|
||||
using AAIntegration.SimmonsBank.API.Models.Transactions;
|
||||
|
||||
public interface IPuppeteerService
|
||||
{
|
||||
Task<bool> Login(User user, CancellationToken cancellationToken);
|
||||
Task<bool> IsLoggedIn(User user, CancellationToken cancellationToken);
|
||||
Task<List<AccountDTO>> GetAccounts(User user);
|
||||
Task<List<TransactionDTO>> GetTransactions(User user, string accountGuid, uint offset = 0, uint limit = 500);
|
||||
}
|
||||
|
||||
public class PuppeteerService : IPuppeteerService
|
||||
{
|
||||
private const string API_BASE_PATH = "/a/consumer/api/v0";
|
||||
private const string DASHBOARD_SELECTOR = "body > banno-web > bannoweb-layout > bannoweb-dashboard";
|
||||
private const string USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/123.0.0.0 Safari/537.36";
|
||||
private readonly PuppeteerConfig _config;
|
||||
private readonly ILogger<PuppeteerService> _logger;
|
||||
private readonly IMemoryCache _memoryCache;
|
||||
private DataContext _context;
|
||||
private readonly IMapper _mapper;
|
||||
private readonly IOptions<AppSettings> _appSettings;
|
||||
private readonly ICacheService _cacheService;
|
||||
|
||||
public PuppeteerService(
|
||||
IOptions<PuppeteerConfig> config,
|
||||
ILogger<PuppeteerService> logger,
|
||||
IMemoryCache memoryCache,
|
||||
DataContext context,
|
||||
IMapper mapper,
|
||||
IOptions<AppSettings> appSettings,
|
||||
ICacheService cacheService)
|
||||
{
|
||||
_config = config.Value;
|
||||
_logger = logger;
|
||||
_memoryCache = memoryCache;
|
||||
_context = context;
|
||||
_mapper = mapper;
|
||||
_appSettings = appSettings;
|
||||
_cacheService = cacheService;
|
||||
}
|
||||
|
||||
public async Task<bool> Login(User user, CancellationToken cancellationToken)
|
||||
{
|
||||
string prefix = $"Task::Login - {user.Id} - ";
|
||||
TimeSpan timeout = TimeSpan.FromSeconds(_config.BrowserOperationTimeoutSeconds);
|
||||
|
||||
// Setup Page
|
||||
IBrowser browser = await GetUserBrowserAsync(user, cancellationToken);
|
||||
await using IPage page = await browser.NewPageAsync();
|
||||
await page.SetUserAgentAsync(USER_AGENT);
|
||||
await page.SetViewportAsync(new ViewPortOptions { Width = 1200, Height = 720 });
|
||||
WaitUntilNavigation[] waitUntils = { WaitUntilNavigation.Networkidle0 };
|
||||
|
||||
// Navigate to login screen
|
||||
await page.GoToAsync(_config.SimmonsBankBaseUrl + "/login");
|
||||
|
||||
try
|
||||
{
|
||||
// Type username
|
||||
string selector = "#username";
|
||||
await page.WaitForSelectorAsync(selector).WaitAsync(timeout, cancellationToken);
|
||||
await page.TypeAsync(selector, user.SimmonsBankUsername);
|
||||
|
||||
// Press 1st Submit Button
|
||||
selector = "jha-button";
|
||||
await page.WaitForSelectorAsync(selector).WaitAsync(timeout, cancellationToken);
|
||||
await page.ClickAsync(selector);
|
||||
|
||||
// Type password
|
||||
selector = "#password";
|
||||
await page.WaitForSelectorAsync(selector).WaitAsync(timeout, cancellationToken);
|
||||
await page.TypeAsync(selector, user.SimmonsBankPassword);
|
||||
|
||||
// Click SignIn button - In Chrome -> JS Path worked well
|
||||
selector = "#login-password-form > bannoweb-flex-wrapper:nth-child(5) > div > jha-button";
|
||||
await page.WaitForSelectorAsync(selector).WaitAsync(timeout, cancellationToken);
|
||||
IElementHandle signInButton = await page.QuerySelectorAsync(selector);
|
||||
|
||||
if (signInButton != null)
|
||||
{
|
||||
await signInButton.ClickAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.LogError(prefix + "Failed to find Sign-In button");
|
||||
return false;
|
||||
}
|
||||
|
||||
await page.WaitForNetworkIdleAsync();
|
||||
|
||||
// Find TOTP input
|
||||
selector = "body > banno-web > bannoweb-login > bannoweb-login-steps > bannoweb-two-factor-verify > jha-slider > jha-slider-content > jha-slider-pane:nth-child(4) > bannoweb-two-factor-enter-code > article > form > jha-form-floating-group > input[type=text]";
|
||||
await page.WaitForSelectorAsync(selector).WaitAsync(timeout, cancellationToken);
|
||||
//await Delay(150);
|
||||
|
||||
// Generate TOTP code
|
||||
Totp totpInstance = new Totp(Base32Encoding.ToBytes(user.MFAKey));
|
||||
string totpCode = totpInstance.ComputeTotp();
|
||||
|
||||
// Type TOTP code
|
||||
IElementHandle totpInput = await page.QuerySelectorAsync(selector);
|
||||
await totpInput.TypeAsync(totpCode);
|
||||
|
||||
// Setup response handling
|
||||
page.Response += LoginResponseHandler;
|
||||
async void LoginResponseHandler(object sender, ResponseCreatedEventArgs args)
|
||||
{
|
||||
//IPage page = sender as IPage;
|
||||
page.Response -= LoginResponseHandler;
|
||||
|
||||
JToken json = await args.Response.JsonAsync<JToken>();
|
||||
string userId = json["id"].Value<string>();
|
||||
_cacheService.SetCachedUserValue<string>(user, PuppeteerConstants.USER_SB_ID, userId);
|
||||
}
|
||||
|
||||
// Click Verify Button
|
||||
selector = "body > banno-web > bannoweb-login > bannoweb-login-steps > bannoweb-two-factor-verify > jha-slider > jha-slider-content > jha-slider-pane:nth-child(4) > bannoweb-two-factor-enter-code > article > form > jha-button";
|
||||
await page.WaitForSelectorAsync(selector).WaitAsync(timeout, cancellationToken);
|
||||
IElementHandle verifyButton = await page.QuerySelectorAsync(selector);
|
||||
if (verifyButton != null)
|
||||
{
|
||||
await verifyButton.ClickAsync();
|
||||
}
|
||||
else
|
||||
{
|
||||
_logger.LogError(prefix + "Failed to find Verify button");
|
||||
return false;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
await page.WaitForSelectorAsync(DASHBOARD_SELECTOR).WaitAsync(timeout, cancellationToken);
|
||||
}
|
||||
catch(TimeoutException)
|
||||
{
|
||||
_logger.LogWarning(prefix + $"Dashboard isn't loading after login");
|
||||
return false;
|
||||
}
|
||||
|
||||
_logger.LogInformation(prefix + $"Login success");
|
||||
return true;
|
||||
|
||||
}
|
||||
catch (TaskCanceledException)
|
||||
{
|
||||
_logger.LogError(prefix + $"Login Task was canceled");
|
||||
}
|
||||
catch (TimeoutException ex)
|
||||
{
|
||||
//_logger.LogWarning($"Login Task timed out for user '{user.Id}' after {timeout} seconds");
|
||||
_logger.LogError(0, ex, prefix + $"Login Task timed out after {timeout} seconds");
|
||||
return false;
|
||||
}
|
||||
finally
|
||||
{
|
||||
await page.CloseAsync();
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public async Task<bool> IsLoggedIn(User user, CancellationToken cancellationToken)
|
||||
{
|
||||
string prefix = $"Task::IsLoggedIn - {user.Id} - ";
|
||||
|
||||
// Get User ID
|
||||
string userSbId = _cacheService.GetCachedUserValue<string>(user, PuppeteerConstants.USER_SB_ID, "");
|
||||
if (string.IsNullOrWhiteSpace(userSbId))
|
||||
{
|
||||
//_logger.LogInformation(prefix + $"User SimmonsBank ID not found. User is not logged in.");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Setup Page
|
||||
IBrowser browser = await GetUserBrowserAsync(user, cancellationToken);
|
||||
await using IPage page = await browser.NewPageAsync();
|
||||
await page.SetUserAgentAsync(USER_AGENT);
|
||||
await page.SetViewportAsync(new ViewPortOptions { Width = 1200, Height = 720 });
|
||||
|
||||
// Fetch accounts
|
||||
string url = _config.SimmonsBankBaseUrl + API_BASE_PATH + "/users/" + userSbId + "/accounts";
|
||||
|
||||
try
|
||||
{
|
||||
IResponse response = await page.GoToAsync(url).WaitAsync(TimeSpan.FromSeconds(_config.BrowserOperationTimeoutSeconds), cancellationToken);
|
||||
//_logger.LogInformation(prefix + $"Request response code '{response.Status}'. Url: '{url}'");
|
||||
return response.Status == System.Net.HttpStatusCode.OK;
|
||||
}
|
||||
catch(TaskCanceledException)
|
||||
{
|
||||
_logger.LogError(prefix + $"Task was canceled");
|
||||
}
|
||||
catch(TimeoutException)
|
||||
{
|
||||
_logger.LogError(prefix + $"Request to '{url}' timed out");
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public async Task<List<AccountDTO>> GetAccounts(User user)
|
||||
{
|
||||
string prefix = $"Task::GetAccounts - {user.Id} - ";
|
||||
|
||||
// Get User ID
|
||||
string userSbId = _cacheService.GetCachedUserValue<string>(user, PuppeteerConstants.USER_SB_ID, "");
|
||||
if (string.IsNullOrWhiteSpace(userSbId))
|
||||
{
|
||||
_logger.LogWarning(prefix + $"User SimmonsBank ID not found. User is not logged in.");
|
||||
return null;
|
||||
}
|
||||
|
||||
// Setup Page
|
||||
IBrowser browser = await GetUserBrowserAsync(user, new CancellationToken());
|
||||
await using IPage page = await browser.NewPageAsync();
|
||||
await page.SetUserAgentAsync(USER_AGENT);
|
||||
await page.SetViewportAsync(new ViewPortOptions { Width = 1200, Height = 720 });
|
||||
|
||||
// Fetch accounts
|
||||
string url = _config.SimmonsBankBaseUrl + API_BASE_PATH + "/users/" + userSbId + "/accounts";
|
||||
|
||||
try
|
||||
{
|
||||
IResponse response = await page.GoToAsync(url).WaitAsync(TimeSpan.FromSeconds(_config.BrowserOperationTimeoutSeconds));
|
||||
//_logger.LogInformation(prefix + $"Request response code '{response.Status}'. Url: '{url}'");
|
||||
|
||||
if (response.Status == System.Net.HttpStatusCode.OK)
|
||||
{
|
||||
JToken accounts = await response.JsonAsync<JToken>();
|
||||
return accounts.SelectToken("accounts").ToObject<List<AccountDTO>>();
|
||||
}
|
||||
else
|
||||
_logger.LogError(prefix + $"Received unexpected status code '{response.Status}'");
|
||||
}
|
||||
catch(TaskCanceledException)
|
||||
{
|
||||
_logger.LogError(prefix + $"Task was canceled");
|
||||
}
|
||||
catch(TimeoutException)
|
||||
{
|
||||
_logger.LogError(prefix + $"Request to '{url}' timed out");
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
public async Task<List<TransactionDTO>> GetTransactions(User user, string accountGuid, uint offset = 0, uint limit = 500)
|
||||
{
|
||||
string prefix = $"Task::GetTransactions - {user.Id} - ";
|
||||
|
||||
// Get User ID
|
||||
string userSbId = _cacheService.GetCachedUserValue<string>(user, PuppeteerConstants.USER_SB_ID, "");
|
||||
if (string.IsNullOrWhiteSpace(userSbId))
|
||||
{
|
||||
_logger.LogWarning(prefix + $"User SimmonsBank ID not found. User is not logged in.");
|
||||
return null;
|
||||
}
|
||||
|
||||
// Setup Page
|
||||
IBrowser browser = await GetUserBrowserAsync(user, new CancellationToken());
|
||||
await using IPage page = await browser.NewPageAsync();
|
||||
await page.SetUserAgentAsync(USER_AGENT);
|
||||
await page.SetViewportAsync(new ViewPortOptions { Width = 1200, Height = 720 });
|
||||
|
||||
// Fetch transactions
|
||||
string url = _config.SimmonsBankBaseUrl + API_BASE_PATH + $"/users/{userSbId}/accounts/{accountGuid}/transactions?offset={offset}&limit={limit}";
|
||||
|
||||
try
|
||||
{
|
||||
IResponse response = await page.GoToAsync(url).WaitAsync(TimeSpan.FromSeconds(_config.BrowserOperationTimeoutSeconds));
|
||||
//_logger.LogInformation(prefix + $"Request response code '{response.Status}'. Url: '{url}'");
|
||||
|
||||
if (response.Status == System.Net.HttpStatusCode.OK)
|
||||
{
|
||||
JToken transactions = await response.JsonAsync<JToken>();
|
||||
return transactions.SelectToken("transactions").ToObject<List<TransactionDTO>>();
|
||||
}
|
||||
else
|
||||
_logger.LogError(prefix + $"Received unexpected status code '{response.Status}'");
|
||||
}
|
||||
catch(TaskCanceledException)
|
||||
{
|
||||
_logger.LogError(prefix + $"Task was canceled");
|
||||
}
|
||||
catch(TimeoutException)
|
||||
{
|
||||
_logger.LogError(prefix + $"Request to '{url}' timed out");
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
// Helper / Private Functions
|
||||
|
||||
private async Task<IBrowser> GetUserBrowserAsync(User user, CancellationToken cancellationToken)
|
||||
{
|
||||
IBrowser cachedBrowser = _cacheService.GetCachedUserValue<IBrowser>(user, PuppeteerConstants.BROWSER_CACHE_KEY, null);
|
||||
|
||||
if (cachedBrowser != null)
|
||||
return cachedBrowser;
|
||||
|
||||
//_logger.LogInformation($"Could NOT find the browser for user with id '{user.Id}'. About to create one...");
|
||||
|
||||
using var browserFetcher = new BrowserFetcher();
|
||||
await browserFetcher.DownloadAsync().WaitAsync(TimeSpan.FromSeconds(_config.BrowserOperationTimeoutSeconds * 20), cancellationToken);
|
||||
|
||||
var options = new LaunchOptions {
|
||||
Headless = _config.Headless,
|
||||
IgnoreHTTPSErrors = true,
|
||||
};
|
||||
|
||||
IBrowser browser = await Puppeteer.LaunchAsync(options).WaitAsync(TimeSpan.FromSeconds(_config.BrowserOperationTimeoutSeconds), cancellationToken);
|
||||
|
||||
_cacheService.SetCachedUserValue<IBrowser>(user, PuppeteerConstants.BROWSER_CACHE_KEY, browser);
|
||||
|
||||
return browser;
|
||||
}
|
||||
}
|
230
AAIntegration.SimmonsBank.API/Services/TransactionService.cs
Normal file
230
AAIntegration.SimmonsBank.API/Services/TransactionService.cs
Normal file
@ -0,0 +1,230 @@
|
||||
namespace AAIntegration.SimmonsBank.API.Services;
|
||||
|
||||
using AutoMapper;
|
||||
using BCrypt.Net;
|
||||
using AAIntegration.SimmonsBank.API.Entities;
|
||||
using AAIntegration.SimmonsBank.API.Config;
|
||||
using AAIntegration.SimmonsBank.API.Models.Transactions;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System;
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Internal;
|
||||
using System.Collections.Immutable;
|
||||
|
||||
public interface ITransactionService
|
||||
{
|
||||
IEnumerable<Transaction> GetAll(int ownerId);
|
||||
Transaction GetById(int id, int ownerId);
|
||||
IEnumerable<Transaction> BulkCreate(List<TransactionCreate> model, int ownerId);
|
||||
Transaction Create(TransactionCreate model, int ownerId, bool errorOnFail = true);
|
||||
void Update(int id, TransactionUpdateRequest model, int ownerId);
|
||||
void Delete(int id, int ownerId);
|
||||
}
|
||||
|
||||
public class TransactionService : ITransactionService
|
||||
{
|
||||
private DataContext _context;
|
||||
private readonly IMapper _mapper;
|
||||
private readonly ILogger<TransactionService> _logger;
|
||||
|
||||
public TransactionService(
|
||||
DataContext context,
|
||||
IMapper mapper,
|
||||
ILogger<TransactionService> logger)
|
||||
{
|
||||
_context = context;
|
||||
_mapper = mapper;
|
||||
_logger = logger;
|
||||
}
|
||||
|
||||
public IEnumerable<Transaction> GetAll(int ownerId)
|
||||
{
|
||||
return _context.Transactions
|
||||
.Include(t => t.DebitAccount)
|
||||
.Include(t => t.CreditAccount)
|
||||
.Include(t => t.Owner)
|
||||
.Where(x => x.Owner.Id == ownerId);
|
||||
}
|
||||
|
||||
public Transaction GetById(int id, int ownerId)
|
||||
{
|
||||
return getTransaction(id, ownerId);
|
||||
}
|
||||
|
||||
private Account prepareAccount(int? accountId)
|
||||
{
|
||||
if (accountId == null || accountId.Value == 0)
|
||||
{
|
||||
return null;
|
||||
}
|
||||
|
||||
Account account = _context.Accounts.Find(accountId.Value);
|
||||
if (account == null)
|
||||
throw new AppException("Could not find account with ID of '" + accountId.Value + "'.");
|
||||
|
||||
return account;
|
||||
}
|
||||
|
||||
public IEnumerable<Transaction> BulkCreate(List<TransactionCreate> model, int ownerId)
|
||||
{
|
||||
List<Transaction> transactions = new List<Transaction>();
|
||||
|
||||
foreach (TransactionCreate tr in model)
|
||||
{
|
||||
var tran = this.Create(tr, ownerId, false);
|
||||
if (tran != null)
|
||||
transactions.Add(tran);
|
||||
}
|
||||
|
||||
return transactions;
|
||||
}
|
||||
|
||||
public Transaction Create(TransactionCreate model, int ownerId, bool errorOnFail = true)
|
||||
{
|
||||
Transaction transaction = new Transaction {
|
||||
Description = model.Description,
|
||||
Date = model.Date.Date.ToUniversalTime(),
|
||||
CreatedOn = DateTime.UtcNow,
|
||||
UpdatedOn = DateTime.UtcNow,
|
||||
ExternalId = string.IsNullOrWhiteSpace(model.ExternalId) ? "" : model.ExternalId,
|
||||
DebitAccount = prepareAccount(model.DebitAccount),
|
||||
CreditAccount = prepareAccount(model.CreditAccount),
|
||||
Amount = Convert.ToDecimal(model.Amount),
|
||||
Owner = this.getOwner(ownerId),
|
||||
IsPending = model.IsPending
|
||||
};
|
||||
|
||||
if (this.ValidateTransaction(transaction, ownerId, errorOnFail) == false)
|
||||
{
|
||||
_logger.LogInformation($"Aborted adding transaction '{transaction.Description}'.");
|
||||
return null;
|
||||
}
|
||||
|
||||
// At this point transaction itself is valid
|
||||
|
||||
_context.Transactions.Add(transaction);
|
||||
_context.SaveChanges();
|
||||
|
||||
_logger.LogInformation("New transaction successfully created.");
|
||||
|
||||
return transaction;
|
||||
}
|
||||
|
||||
public void Update(int id, TransactionUpdateRequest model, int ownerId)
|
||||
{
|
||||
Transaction transaction = getTransaction(id, ownerId);
|
||||
|
||||
// Transaction.Date
|
||||
if (model.Date.HasValue)
|
||||
transaction.Date = model.Date.Value;
|
||||
|
||||
// Transaction.ExternalId
|
||||
if (model.ExternalId != null)
|
||||
transaction.ExternalId = model.ExternalId;
|
||||
|
||||
// Transaction.Description
|
||||
if (model.Description != null)
|
||||
transaction.Description = model.Description;
|
||||
|
||||
// Transaction.DebitAccount
|
||||
if (model.DebitAccount.HasValue)
|
||||
transaction.DebitAccount = prepareAccount(model.DebitAccount);
|
||||
|
||||
// Transaction.CreditAccount
|
||||
if (model.CreditAccount.HasValue)
|
||||
transaction.CreditAccount = prepareAccount(model.CreditAccount.Value);
|
||||
|
||||
// Transaction.Amount
|
||||
if (model.Amount.HasValue)
|
||||
transaction.Amount = model.Amount.Value;
|
||||
|
||||
// Transaction.IsPending
|
||||
if (model.IsPending.HasValue)
|
||||
transaction.IsPending = model.IsPending.Value;
|
||||
|
||||
this.ValidateTransaction(transaction, ownerId);
|
||||
|
||||
transaction.UpdatedOn = DateTime.UtcNow;
|
||||
|
||||
_context.Transactions.Update(transaction);
|
||||
_context.SaveChanges();
|
||||
|
||||
_logger.LogInformation($"Transaction '{id}' successfully updated.");
|
||||
}
|
||||
|
||||
public void Delete(int id, int ownerId)
|
||||
{
|
||||
var transaction = getTransaction(id, ownerId);
|
||||
_context.Transactions.Remove(transaction);
|
||||
_context.SaveChanges();
|
||||
}
|
||||
|
||||
// helpers
|
||||
|
||||
private bool ErrorOrFalse(bool error, string errorMessage)
|
||||
{
|
||||
if (error)
|
||||
throw new AppException(errorMessage);
|
||||
|
||||
_logger.LogWarning(errorMessage);
|
||||
return false;
|
||||
}
|
||||
|
||||
private bool ValidateTransaction(Transaction transaction, int ownerId, bool errorOnFail = true)
|
||||
{
|
||||
// There has to be at least 1 specified account
|
||||
if (transaction.DebitAccount == null && transaction.CreditAccount == null)
|
||||
return ErrorOrFalse(errorOnFail, "There must be an envelope or account chosen for a transaction.");
|
||||
|
||||
// Accounts cannot be the same
|
||||
if (transaction.DebitAccount != null && transaction.CreditAccount != null &&
|
||||
transaction.DebitAccount.Id == transaction.CreditAccount.Id)
|
||||
return ErrorOrFalse(errorOnFail, "The debit and credit accounts of a transaction cannot be the same.");
|
||||
|
||||
// Transaction Duplication Check - External ID
|
||||
if (!string.IsNullOrWhiteSpace(transaction.ExternalId)
|
||||
&& _context.Transactions
|
||||
.Include(x => x.Owner)
|
||||
.Any(x => x.ExternalId == transaction.ExternalId && x.Owner.Id == ownerId))
|
||||
return ErrorOrFalse(errorOnFail, "Transaction with the external ID '" + transaction.ExternalId + "' already exists");
|
||||
|
||||
// Transaction Duplication Check - All other fields
|
||||
/*if (_context.Transactions.Any(x =>
|
||||
x.Description == transaction.Description
|
||||
&& x.Date == transaction.Date
|
||||
&& x.DebitAccount == transaction.DebitAccount
|
||||
&& x.CreditAccount == transaction.CreditAccount
|
||||
&& x.Amount == transaction.Amount))
|
||||
{
|
||||
return ErrorOrFalse(errorOnFail, "Transaction with the same fields already exists");
|
||||
}*/
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
private Transaction getTransaction(int id, int ownerId)
|
||||
{
|
||||
var transaction = _context.Transactions
|
||||
.Include(t => t.DebitAccount)
|
||||
.Include(t => t.CreditAccount)
|
||||
.Include(t => t.Owner)
|
||||
.FirstOrDefault(t => t.Id == id && t.Owner.Id == ownerId);
|
||||
|
||||
if (transaction == null)
|
||||
throw new KeyNotFoundException("Transaction not found");
|
||||
|
||||
return transaction;
|
||||
}
|
||||
|
||||
private User getOwner(int ownerId)
|
||||
{
|
||||
User? owner = _context.Users.Find(ownerId);
|
||||
|
||||
if (owner == null)
|
||||
throw new AppException($"Owner with ID of '{ownerId}' could not be found");
|
||||
|
||||
return owner;
|
||||
}
|
||||
}
|
@ -1,30 +1,58 @@
|
||||
namespace AAIntegration.SimmonsBank.API.Services;
|
||||
|
||||
using AutoMapper;
|
||||
using BCrypt.Net;
|
||||
using AAIntegration.SimmonsBank.API.Entities;
|
||||
using AAIntegration.SimmonsBank.API.Config;
|
||||
using AAIntegration.SimmonsBank.API.Models.Users;
|
||||
using System;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using Microsoft.EntityFrameworkCore.Internal;
|
||||
using Microsoft.IdentityModel.Tokens;
|
||||
using System.Text;
|
||||
using System.IdentityModel.Tokens.Jwt;
|
||||
using System.Security.Claims;
|
||||
using Microsoft.Extensions.Options;
|
||||
using System.Security.Cryptography;
|
||||
|
||||
public interface IUserService
|
||||
{
|
||||
// New Based way
|
||||
string Create(UserCreateRequest model);
|
||||
void Update(string apiKey, UserUpdateRequest model);
|
||||
void Delete(string apiKey);
|
||||
Dictionary<string, int> GetAllApiKeys();
|
||||
User GetUser(string ApiKey);
|
||||
|
||||
/* Other cringe way
|
||||
AuthenticateResponse Authenticate(AuthenticateRequest model);
|
||||
void Register(RegisterRequest model);
|
||||
IEnumerable<User> GetAll();
|
||||
User GetById(int id);
|
||||
void Update(int id, UserUpdateRequest model);
|
||||
void Delete(int id);
|
||||
Dictionary<string, int> GetAllApiKeys();
|
||||
string GetUserApiKey(int id);
|
||||
void InvalidateApiKey(string apiKey);
|
||||
string CreateUserApiKey(int id);
|
||||
*/
|
||||
}
|
||||
|
||||
public class UserService : IUserService
|
||||
{
|
||||
private DataContext _context;
|
||||
private readonly IMapper _mapper;
|
||||
private readonly IOptions<AppSettings> _appSettings;
|
||||
|
||||
public UserService(
|
||||
DataContext context)
|
||||
DataContext context,
|
||||
IMapper mapper,
|
||||
IOptions<AppSettings> appSettings)
|
||||
{
|
||||
_context = context;
|
||||
_mapper = mapper;
|
||||
_appSettings = appSettings;
|
||||
}
|
||||
|
||||
public string Create(UserCreateRequest model)
|
||||
@ -88,11 +116,6 @@ public class UserService : IUserService
|
||||
return user;
|
||||
}
|
||||
|
||||
public IEnumerable<User> GetAll()
|
||||
{
|
||||
return _context.Users;
|
||||
}
|
||||
|
||||
// helper methods
|
||||
|
||||
private User getUser(int id)
|
||||
@ -101,7 +124,7 @@ public class UserService : IUserService
|
||||
return user;
|
||||
}
|
||||
|
||||
private const string _prefix = "SB-";
|
||||
private const string _prefix = "CT-";
|
||||
private const int _numberOfSecureBytesToGenerate = 32;
|
||||
private const int _lengthOfKey = 32;
|
||||
|
||||
|
@ -1,143 +0,0 @@
|
||||
using System;
|
||||
using AAIntegration.SimmonsBank.API.Configs;
|
||||
using Microsoft.Extensions.DependencyInjection;
|
||||
using Microsoft.Extensions.Options;
|
||||
using AAIntegration.SimmonsBank.API.Processes;
|
||||
using AAIntegration.SimmonsBank.API.Services;
|
||||
using AAIntegration.SimmonsBank.API.Entities;
|
||||
using Microsoft.Extensions.Caching.Memory;
|
||||
|
||||
namespace AAIntegration.SimmonsBank.API.Workers;
|
||||
|
||||
public class PuppeteerWorker : BackgroundService
|
||||
{
|
||||
private readonly PuppeteerConfig _config;
|
||||
private readonly IPuppeteerProcess _puppeteerProcess;
|
||||
private readonly ILogger<PuppeteerWorker> _logger;
|
||||
private readonly IMemoryCache _memoryCache;
|
||||
private readonly IServiceScopeFactory _serviceScopeFactory;
|
||||
|
||||
public PuppeteerWorker(
|
||||
IOptions<PuppeteerConfig> config,
|
||||
IPuppeteerProcess puppeteerProcess,
|
||||
ILogger<PuppeteerWorker> logger,
|
||||
IMemoryCache memoryCache,
|
||||
IServiceScopeFactory serviceScopeFactory)
|
||||
{
|
||||
_config = config.Value;
|
||||
_puppeteerProcess = puppeteerProcess;
|
||||
_logger = logger;
|
||||
_memoryCache = memoryCache;
|
||||
_serviceScopeFactory = serviceScopeFactory;
|
||||
}
|
||||
|
||||
private IUserService _userService;
|
||||
private IPuppeteerService _puppeteerService;
|
||||
|
||||
protected override async Task ExecuteAsync(CancellationToken stoppingToken)
|
||||
{
|
||||
DateTime? lastExecutedOn = null;
|
||||
bool operationOccurred = false;
|
||||
|
||||
using (var scope = _serviceScopeFactory.CreateScope())
|
||||
{
|
||||
_userService = scope.ServiceProvider.GetService<IUserService>();
|
||||
_puppeteerService = scope.ServiceProvider.GetService<IPuppeteerService>();
|
||||
_puppeteerProcess.SetStoppingToken(stoppingToken);
|
||||
_puppeteerProcess.SetService(_puppeteerService);
|
||||
|
||||
// This is how we keep the app running (in the background)
|
||||
while (!stoppingToken.IsCancellationRequested)
|
||||
{
|
||||
// Keep Alive processing
|
||||
operationOccurred = await ProcessUsersKeepalive();
|
||||
|
||||
|
||||
_logger.LogInformation($"Operation occurred? {operationOccurred}");
|
||||
|
||||
// If no operation occurred, waits before looping again
|
||||
if (lastExecutedOn != null && operationOccurred == false)
|
||||
{
|
||||
await Task.Delay(TimeSpan.FromMinutes(_config.TaskCheckIntervalMinutes), stoppingToken);
|
||||
}
|
||||
|
||||
lastExecutedOn = DateTime.UtcNow;
|
||||
_logger.LogInformation("PuppeteerWorker executed at: {time}", DateTimeOffset.Now);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private async Task<bool> ProcessUsersKeepalive()
|
||||
{
|
||||
bool operationOccurred = false;
|
||||
|
||||
foreach (User user in _userService.GetAll().ToList())
|
||||
{
|
||||
int ka = _config.KeepAliveIntervalMinutes;
|
||||
int uka = (int)DateTime.UtcNow.Subtract(GetUserLastExecution(PuppeteerConfigConstants.KeepAliveIntervalMinutes, user.Id)).TotalMinutes;
|
||||
|
||||
//_logger.LogInformation($"KeepAlive configured to {ka}. This user hasn't been kept alive in {uka} minute(s).");
|
||||
|
||||
if (_config.KeepAliveIntervalMinutes <= (int)DateTime.UtcNow.Subtract(GetUserLastExecution(PuppeteerConfigConstants.KeepAliveIntervalMinutes, user.Id)).TotalMinutes)
|
||||
{
|
||||
await _puppeteerProcess.StayLoggedIn(user);
|
||||
SetUserLastExecution(PuppeteerConfigConstants.KeepAliveIntervalMinutes, user.Id, DateTime.UtcNow);
|
||||
operationOccurred = true;
|
||||
_logger.LogInformation($"Operation set to true because of user {user.Id}");
|
||||
}
|
||||
}
|
||||
|
||||
return operationOccurred;
|
||||
}
|
||||
|
||||
private DateTime GetUserLastExecution(string cacheKey, int userId)
|
||||
{
|
||||
var internalKeys = GetLastExecutionCachedDictionary(cacheKey);
|
||||
|
||||
if (!internalKeys.TryGetValue(userId, out var lastExecution))
|
||||
{
|
||||
_logger.LogInformation($"Could not find userId in '{cacheKey}' cache. Returning '{DateTime.MinValue}'.");
|
||||
return DateTime.MinValue;
|
||||
}
|
||||
|
||||
_logger.LogInformation($"Just got user {userId} from cache with value {lastExecution}");
|
||||
return lastExecution;
|
||||
}
|
||||
|
||||
private void SetUserLastExecution(string cacheKey, int userId, DateTime lastExecution)
|
||||
{
|
||||
var internalKeys = GetLastExecutionCachedDictionary(cacheKey);
|
||||
|
||||
if (internalKeys.ContainsKey(userId))
|
||||
internalKeys[userId] = lastExecution;
|
||||
else
|
||||
internalKeys.Add(userId, lastExecution);
|
||||
|
||||
_memoryCache.Set(cacheKey, internalKeys);
|
||||
_logger.LogInformation($"Just set user {userId} into cache with value {lastExecution}");
|
||||
}
|
||||
|
||||
private Dictionary<int, DateTime> GetLastExecutionCachedDictionary(string cacheKey)
|
||||
{
|
||||
// Sets cache if no dictionary is found
|
||||
if (!_memoryCache.TryGetValue<Dictionary<int, DateTime>>(cacheKey, out var internalKeys))
|
||||
{
|
||||
internalKeys = _userService.GetAll()
|
||||
.ToDictionary(u => u.Id, u => DateTime.MinValue);
|
||||
_memoryCache.Set(cacheKey, internalKeys);
|
||||
_logger.LogInformation($"Updated users in '{cacheKey}' cache with new id list.");
|
||||
}
|
||||
|
||||
return internalKeys;
|
||||
}
|
||||
|
||||
private void PrintCacheValues(string cacheKey)
|
||||
{
|
||||
_logger.LogInformation($"Printing cache values from '{cacheKey}'");
|
||||
Dictionary<int, DateTime> internalKeys = GetLastExecutionCachedDictionary(cacheKey);
|
||||
foreach (KeyValuePair<int, DateTime> entry in internalKeys)
|
||||
{
|
||||
_logger.LogInformation($" {entry.Key} <=> {entry.Value}");
|
||||
}
|
||||
}
|
||||
}
|
@ -25,12 +25,7 @@
|
||||
"Secret": "5de80277015f9fd564c4d1cc2cf827dbb1774cd66e7d79aa258d9c35a9f67f32fc6cf0dc24244242bd9501288e0fd69e315b",
|
||||
"APIUrl": "https://localhost:7260"
|
||||
},
|
||||
"Puppeteer": {
|
||||
"Headless": true,
|
||||
"BrowserOperationTimeoutSeconds": 5,
|
||||
"TaskCheckIntervalMinutes": 1,
|
||||
"KeepAliveIntervalMinutes": 1,
|
||||
"CheckForNewDataIntervalMinutes": 15,
|
||||
"SimmonsBankBaseUrl": "https://login.simmonsbank.com"
|
||||
"EnvelopeFund": {
|
||||
"CheckIntervalInMinutes": 10
|
||||
}
|
||||
}
|
||||
|
BIN
AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API
Executable file
BIN
AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API
Executable file
Binary file not shown.
@ -0,0 +1,536 @@
|
||||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETCoreApp,Version=v7.0",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v7.0": {
|
||||
"AAIntegration.SimmonsBank.API/1.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Authorization": "7.0.0",
|
||||
"Microsoft.AspNetCore.OpenApi": "7.0.15",
|
||||
"Microsoft.EntityFrameworkCore": "7.0.0",
|
||||
"Microsoft.EntityFrameworkCore.Design": "7.0.0",
|
||||
"Microsoft.IdentityModel.Tokens": "7.0.0",
|
||||
"Npgsql.EntityFrameworkCore.PostgreSQL": "7.0.0",
|
||||
"Swashbuckle.AspNetCore": "6.5.0"
|
||||
},
|
||||
"runtime": {
|
||||
"AAIntegration.SimmonsBank.API.dll": {}
|
||||
}
|
||||
},
|
||||
"Humanizer.Core/2.14.1": {
|
||||
"runtime": {
|
||||
"lib/net6.0/Humanizer.dll": {
|
||||
"assemblyVersion": "2.14.0.0",
|
||||
"fileVersion": "2.14.1.48190"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Authorization/7.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.AspNetCore.Metadata": "7.0.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "7.0.0",
|
||||
"Microsoft.Extensions.Options": "7.0.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.AspNetCore.Metadata/7.0.0": {},
|
||||
"Microsoft.AspNetCore.OpenApi/7.0.15": {
|
||||
"dependencies": {
|
||||
"Microsoft.OpenApi": "1.4.3"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net7.0/Microsoft.AspNetCore.OpenApi.dll": {
|
||||
"assemblyVersion": "7.0.15.0",
|
||||
"fileVersion": "7.0.1523.60110"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore/7.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.EntityFrameworkCore.Abstractions": "7.0.0",
|
||||
"Microsoft.EntityFrameworkCore.Analyzers": "7.0.0",
|
||||
"Microsoft.Extensions.Caching.Memory": "7.0.0",
|
||||
"Microsoft.Extensions.DependencyInjection": "7.0.0",
|
||||
"Microsoft.Extensions.Logging": "7.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.EntityFrameworkCore.dll": {
|
||||
"assemblyVersion": "7.0.0.0",
|
||||
"fileVersion": "7.0.22.51807"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Abstractions/7.0.0": {
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.EntityFrameworkCore.Abstractions.dll": {
|
||||
"assemblyVersion": "7.0.0.0",
|
||||
"fileVersion": "7.0.22.51807"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Analyzers/7.0.0": {},
|
||||
"Microsoft.EntityFrameworkCore.Design/7.0.0": {
|
||||
"dependencies": {
|
||||
"Humanizer.Core": "2.14.1",
|
||||
"Microsoft.EntityFrameworkCore.Relational": "7.0.0",
|
||||
"Microsoft.Extensions.DependencyModel": "7.0.0",
|
||||
"Mono.TextTemplating": "2.2.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.EntityFrameworkCore.Design.dll": {
|
||||
"assemblyVersion": "7.0.0.0",
|
||||
"fileVersion": "7.0.22.51807"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Relational/7.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.EntityFrameworkCore": "7.0.0",
|
||||
"Microsoft.Extensions.Configuration.Abstractions": "7.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.EntityFrameworkCore.Relational.dll": {
|
||||
"assemblyVersion": "7.0.0.0",
|
||||
"fileVersion": "7.0.22.51807"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.ApiDescription.Server/6.0.5": {},
|
||||
"Microsoft.Extensions.Caching.Abstractions/7.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "7.0.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Memory/7.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Caching.Abstractions": "7.0.0",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "7.0.0",
|
||||
"Microsoft.Extensions.Options": "7.0.0",
|
||||
"Microsoft.Extensions.Primitives": "7.0.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Abstractions/7.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Primitives": "7.0.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection/7.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/7.0.0": {},
|
||||
"Microsoft.Extensions.DependencyModel/7.0.0": {
|
||||
"dependencies": {
|
||||
"System.Text.Encodings.Web": "7.0.0",
|
||||
"System.Text.Json": "7.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net7.0/Microsoft.Extensions.DependencyModel.dll": {
|
||||
"assemblyVersion": "7.0.0.0",
|
||||
"fileVersion": "7.0.22.51805"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging/7.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection": "7.0.0",
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
|
||||
"Microsoft.Extensions.Logging.Abstractions": "7.0.0",
|
||||
"Microsoft.Extensions.Options": "7.0.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions/7.0.0": {},
|
||||
"Microsoft.Extensions.Options/7.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions": "7.0.0",
|
||||
"Microsoft.Extensions.Primitives": "7.0.0"
|
||||
}
|
||||
},
|
||||
"Microsoft.Extensions.Primitives/7.0.0": {},
|
||||
"Microsoft.IdentityModel.Abstractions/7.0.0": {
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.IdentityModel.Abstractions.dll": {
|
||||
"assemblyVersion": "7.0.0.0",
|
||||
"fileVersion": "7.0.0.40911"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.IdentityModel.Logging/7.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Abstractions": "7.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.IdentityModel.Logging.dll": {
|
||||
"assemblyVersion": "7.0.0.0",
|
||||
"fileVersion": "7.0.0.40911"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.IdentityModel.Tokens/7.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Logging": "7.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net6.0/Microsoft.IdentityModel.Tokens.dll": {
|
||||
"assemblyVersion": "7.0.0.0",
|
||||
"fileVersion": "7.0.0.40911"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.OpenApi/1.4.3": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Microsoft.OpenApi.dll": {
|
||||
"assemblyVersion": "1.4.3.0",
|
||||
"fileVersion": "1.4.3.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Mono.TextTemplating/2.2.1": {
|
||||
"dependencies": {
|
||||
"System.CodeDom": "4.4.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Mono.TextTemplating.dll": {
|
||||
"assemblyVersion": "2.2.0.0",
|
||||
"fileVersion": "2.2.1.1"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Npgsql/7.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.Logging.Abstractions": "7.0.0",
|
||||
"System.Runtime.CompilerServices.Unsafe": "6.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net7.0/Npgsql.dll": {
|
||||
"assemblyVersion": "7.0.0.0",
|
||||
"fileVersion": "7.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Npgsql.EntityFrameworkCore.PostgreSQL/7.0.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.EntityFrameworkCore": "7.0.0",
|
||||
"Microsoft.EntityFrameworkCore.Abstractions": "7.0.0",
|
||||
"Microsoft.EntityFrameworkCore.Relational": "7.0.0",
|
||||
"Npgsql": "7.0.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net7.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll": {
|
||||
"assemblyVersion": "7.0.0.0",
|
||||
"fileVersion": "7.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Swashbuckle.AspNetCore/6.5.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.Extensions.ApiDescription.Server": "6.0.5",
|
||||
"Swashbuckle.AspNetCore.Swagger": "6.5.0",
|
||||
"Swashbuckle.AspNetCore.SwaggerGen": "6.5.0",
|
||||
"Swashbuckle.AspNetCore.SwaggerUI": "6.5.0"
|
||||
}
|
||||
},
|
||||
"Swashbuckle.AspNetCore.Swagger/6.5.0": {
|
||||
"dependencies": {
|
||||
"Microsoft.OpenApi": "1.4.3"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net7.0/Swashbuckle.AspNetCore.Swagger.dll": {
|
||||
"assemblyVersion": "6.5.0.0",
|
||||
"fileVersion": "6.5.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Swashbuckle.AspNetCore.SwaggerGen/6.5.0": {
|
||||
"dependencies": {
|
||||
"Swashbuckle.AspNetCore.Swagger": "6.5.0"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net7.0/Swashbuckle.AspNetCore.SwaggerGen.dll": {
|
||||
"assemblyVersion": "6.5.0.0",
|
||||
"fileVersion": "6.5.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Swashbuckle.AspNetCore.SwaggerUI/6.5.0": {
|
||||
"runtime": {
|
||||
"lib/net7.0/Swashbuckle.AspNetCore.SwaggerUI.dll": {
|
||||
"assemblyVersion": "6.5.0.0",
|
||||
"fileVersion": "6.5.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.CodeDom/4.4.0": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/System.CodeDom.dll": {
|
||||
"assemblyVersion": "4.0.0.0",
|
||||
"fileVersion": "4.6.25519.3"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe/6.0.0": {},
|
||||
"System.Text.Encodings.Web/7.0.0": {},
|
||||
"System.Text.Json/7.0.0": {
|
||||
"dependencies": {
|
||||
"System.Text.Encodings.Web": "7.0.0"
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"AAIntegration.SimmonsBank.API/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Humanizer.Core/2.14.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-lQKvtaTDOXnoVJ20ibTuSIOf2i0uO0MPbDhd1jm238I+U/2ZnRENj0cktKZhtchBMtCUSRQ5v4xBCUbKNmyVMw==",
|
||||
"path": "humanizer.core/2.14.1",
|
||||
"hashPath": "humanizer.core.2.14.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.AspNetCore.Authorization/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-0O7C7XHj+17Q0geMpnpRC0fnnALH2Yhaa2SAzX00OkeF2NZ/+zWoDymbSnepg1qhueufUivihZiVGtMeq5Zywg==",
|
||||
"path": "microsoft.aspnetcore.authorization/7.0.0",
|
||||
"hashPath": "microsoft.aspnetcore.authorization.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.AspNetCore.Metadata/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ut2azlKz7BQpCKu6AiwKEjMHpRWoD4qu2Ff/n6KagjFsyDAfZY7lgYJ158vr4O0jXet6pV1uF1q3jmXvki0OlA==",
|
||||
"path": "microsoft.aspnetcore.metadata/7.0.0",
|
||||
"hashPath": "microsoft.aspnetcore.metadata.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.AspNetCore.OpenApi/7.0.15": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-5AnwJuy7lBaoDhos9SYzLxsGO/s8LsAnP1DR0JSUp1zGzBGnHJEgT4IafAk24PnveKgkiVwh77t5+dU652rwxA==",
|
||||
"path": "microsoft.aspnetcore.openapi/7.0.15",
|
||||
"hashPath": "microsoft.aspnetcore.openapi.7.0.15.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-9W+IfmAzMrp2ZpKZLhgTlWljSBM9Erldis1us61DAGi+L7Q6vilTbe1G2zDxtYO8F2H0I0Qnupdx5Cp4s2xoZw==",
|
||||
"path": "microsoft.entityframeworkcore/7.0.0",
|
||||
"hashPath": "microsoft.entityframeworkcore.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Abstractions/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-Pfu3Zjj5+d2Gt27oE9dpGiF/VobBB+s5ogrfI9sBsXQE1SG49RqVz5+IyeNnzhyejFrPIQsPDRMchhcojy4Hbw==",
|
||||
"path": "microsoft.entityframeworkcore.abstractions/7.0.0",
|
||||
"hashPath": "microsoft.entityframeworkcore.abstractions.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Analyzers/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-Qkd2H+jLe37o5ku+LjT6qf7kAHY75Yfn2bBDQgqr13DTOLYpEy1Mt93KPFjaZvIu/srEcbfGGMRL7urKm5zN8Q==",
|
||||
"path": "microsoft.entityframeworkcore.analyzers/7.0.0",
|
||||
"hashPath": "microsoft.entityframeworkcore.analyzers.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Design/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-fEEU/zZ/VblZRQxHNZxgGKVtEtOGqEAmuHkACV1i0H031bM8PQKTS7PlKPVOgg0C1v+6yeHoIAGGgbAvG9f7kw==",
|
||||
"path": "microsoft.entityframeworkcore.design/7.0.0",
|
||||
"hashPath": "microsoft.entityframeworkcore.design.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Relational/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-eQiYygtR2xZ0Uy7KtiFRHpoEx/U8xNwbNRgu1pEJgSxbJLtg6tDL1y2YcIbSuIRSNEljXIIHq/apEhGm1QL70g==",
|
||||
"path": "microsoft.entityframeworkcore.relational/7.0.0",
|
||||
"hashPath": "microsoft.entityframeworkcore.relational.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.ApiDescription.Server/6.0.5": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-Ckb5EDBUNJdFWyajfXzUIMRkhf52fHZOQuuZg/oiu8y7zDCVwD0iHhew6MnThjHmevanpxL3f5ci2TtHQEN6bw==",
|
||||
"path": "microsoft.extensions.apidescription.server/6.0.5",
|
||||
"hashPath": "microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Abstractions/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-IeimUd0TNbhB4ded3AbgBLQv2SnsiVugDyGV1MvspQFVlA07nDC7Zul7kcwH5jWN3JiTcp/ySE83AIJo8yfKjg==",
|
||||
"path": "microsoft.extensions.caching.abstractions/7.0.0",
|
||||
"hashPath": "microsoft.extensions.caching.abstractions.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Caching.Memory/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-xpidBs2KCE2gw1JrD0quHE72kvCaI3xFql5/Peb2GRtUuZX+dYPoK/NTdVMiM67Svym0M0Df9A3xyU0FbMQhHw==",
|
||||
"path": "microsoft.extensions.caching.memory/7.0.0",
|
||||
"hashPath": "microsoft.extensions.caching.memory.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Configuration.Abstractions/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-f34u2eaqIjNO9YLHBz8rozVZ+TcFiFs0F3r7nUJd7FRkVSxk8u4OpoK226mi49MwexHOR2ibP9MFvRUaLilcQQ==",
|
||||
"path": "microsoft.extensions.configuration.abstractions/7.0.0",
|
||||
"hashPath": "microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-elNeOmkeX3eDVG6pYVeV82p29hr+UKDaBhrZyWvWLw/EVZSYEkZlQdkp0V39k/Xehs2Qa0mvoCvkVj3eQxNQ1Q==",
|
||||
"path": "microsoft.extensions.dependencyinjection/7.0.0",
|
||||
"hashPath": "microsoft.extensions.dependencyinjection.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.DependencyInjection.Abstractions/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-h3j/QfmFN4S0w4C2A6X7arXij/M/OVw3uQHSOFxnND4DyAzO1F9eMX7Eti7lU/OkSthEE0WzRsfT/Dmx86jzCw==",
|
||||
"path": "microsoft.extensions.dependencyinjection.abstractions/7.0.0",
|
||||
"hashPath": "microsoft.extensions.dependencyinjection.abstractions.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.DependencyModel/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-oONNYd71J3LzkWc4fUHl3SvMfiQMYUCo/mDHDEu76hYYxdhdrPYv6fvGv9nnKVyhE9P0h20AU8RZB5OOWQcAXg==",
|
||||
"path": "microsoft.extensions.dependencymodel/7.0.0",
|
||||
"hashPath": "microsoft.extensions.dependencymodel.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Logging/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-Nw2muoNrOG5U5qa2ZekXwudUn2BJcD41e65zwmDHb1fQegTX66UokLWZkJRpqSSHXDOWZ5V0iqhbxOEky91atA==",
|
||||
"path": "microsoft.extensions.logging/7.0.0",
|
||||
"hashPath": "microsoft.extensions.logging.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Logging.Abstractions/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-kmn78+LPVMOWeITUjIlfxUPDsI0R6G0RkeAMBmQxAJ7vBJn4q2dTva7pWi65ceN5vPGjJ9q/Uae2WKgvfktJAw==",
|
||||
"path": "microsoft.extensions.logging.abstractions/7.0.0",
|
||||
"hashPath": "microsoft.extensions.logging.abstractions.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Options/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-lP1yBnTTU42cKpMozuafbvNtQ7QcBjr/CcK3bYOGEMH55Fjt+iecXjT6chR7vbgCMqy3PG3aNQSZgo/EuY/9qQ==",
|
||||
"path": "microsoft.extensions.options/7.0.0",
|
||||
"hashPath": "microsoft.extensions.options.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Extensions.Primitives/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-um1KU5kxcRp3CNuI8o/GrZtD4AIOXDk+RLsytjZ9QPok3ttLUelLKpilVPuaFT3TFjOhSibUAso0odbOaCDj3Q==",
|
||||
"path": "microsoft.extensions.primitives/7.0.0",
|
||||
"hashPath": "microsoft.extensions.primitives.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.Abstractions/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-7iSWSRR72VKeonFdfDi43Lvkca98Y0F3TmmWhRSuHbkjk/IKUSO0Qd272LQFZpi5eDNQNbUXy3o4THXhOAU6cw==",
|
||||
"path": "microsoft.identitymodel.abstractions/7.0.0",
|
||||
"hashPath": "microsoft.identitymodel.abstractions.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.Logging/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-6I35Kt2/PQZAyUYLo3+QgT/LubZ5/4Ojelkbyo8KKdDgjMbVocAx2B3P5V7iMCz+rsAe/RLr6ql87QKnHtI+aw==",
|
||||
"path": "microsoft.identitymodel.logging/7.0.0",
|
||||
"hashPath": "microsoft.identitymodel.logging.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.Tokens/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-dxYqmmFLsjBQZ6F6a4XDzrZ1CTxBRFVigJvWiNtXiIsT6UlYMxs9ONMaGx9XKzcxmcgEQ2ADuCqKZduz0LR9Hw==",
|
||||
"path": "microsoft.identitymodel.tokens/7.0.0",
|
||||
"hashPath": "microsoft.identitymodel.tokens.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.OpenApi/1.4.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-rURwggB+QZYcSVbDr7HSdhw/FELvMlriW10OeOzjPT7pstefMo7IThhtNtDudxbXhW+lj0NfX72Ka5EDsG8x6w==",
|
||||
"path": "microsoft.openapi/1.4.3",
|
||||
"hashPath": "microsoft.openapi.1.4.3.nupkg.sha512"
|
||||
},
|
||||
"Mono.TextTemplating/2.2.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-KZYeKBET/2Z0gY1WlTAK7+RHTl7GSbtvTLDXEZZojUdAPqpQNDL6tHv7VUpqfX5VEOh+uRGKaZXkuD253nEOBQ==",
|
||||
"path": "mono.texttemplating/2.2.1",
|
||||
"hashPath": "mono.texttemplating.2.2.1.nupkg.sha512"
|
||||
},
|
||||
"Npgsql/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-tOBFksJZ2MiEz8xtDUgS5IG19jVO3nSP15QDYWiiGpXHe0PsLoQBts2Sg3hHKrrLTuw+AjsJz9iKvvGNHyKDIg==",
|
||||
"path": "npgsql/7.0.0",
|
||||
"hashPath": "npgsql.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Npgsql.EntityFrameworkCore.PostgreSQL/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-CyUNlFZmtX2Kmw8XK5Tlx5eVUCzWJ+zJHErxZiMo2Y8zCRuH9+/OMGwG+9Mmp5zD5p3Ifbi5Pp3btsqoDDkSZQ==",
|
||||
"path": "npgsql.entityframeworkcore.postgresql/7.0.0",
|
||||
"hashPath": "npgsql.entityframeworkcore.postgresql.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"Swashbuckle.AspNetCore/6.5.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-FK05XokgjgwlCI6wCT+D4/abtQkL1X1/B9Oas6uIwHFmYrIO9WUD5aLC9IzMs9GnHfUXOtXZ2S43gN1mhs5+aA==",
|
||||
"path": "swashbuckle.aspnetcore/6.5.0",
|
||||
"hashPath": "swashbuckle.aspnetcore.6.5.0.nupkg.sha512"
|
||||
},
|
||||
"Swashbuckle.AspNetCore.Swagger/6.5.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-XWmCmqyFmoItXKFsQSwQbEAsjDKcxlNf1l+/Ki42hcb6LjKL8m5Db69OTvz5vLonMSRntYO1XLqz0OP+n3vKnA==",
|
||||
"path": "swashbuckle.aspnetcore.swagger/6.5.0",
|
||||
"hashPath": "swashbuckle.aspnetcore.swagger.6.5.0.nupkg.sha512"
|
||||
},
|
||||
"Swashbuckle.AspNetCore.SwaggerGen/6.5.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-Y/qW8Qdg9OEs7V013tt+94OdPxbRdbhcEbw4NiwGvf4YBcfhL/y7qp/Mjv/cENsQ2L3NqJ2AOu94weBy/h4KvA==",
|
||||
"path": "swashbuckle.aspnetcore.swaggergen/6.5.0",
|
||||
"hashPath": "swashbuckle.aspnetcore.swaggergen.6.5.0.nupkg.sha512"
|
||||
},
|
||||
"Swashbuckle.AspNetCore.SwaggerUI/6.5.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-OvbvxX+wL8skxTBttcBsVxdh73Fag4xwqEU2edh4JMn7Ws/xJHnY/JB1e9RoCb6XpDxUF3hD9A0Z1lEUx40Pfw==",
|
||||
"path": "swashbuckle.aspnetcore.swaggerui/6.5.0",
|
||||
"hashPath": "swashbuckle.aspnetcore.swaggerui.6.5.0.nupkg.sha512"
|
||||
},
|
||||
"System.CodeDom/4.4.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-2sCCb7doXEwtYAbqzbF/8UAeDRMNmPaQbU2q50Psg1J9KzumyVVCgKQY8s53WIPTufNT0DpSe9QRvVjOzfDWBA==",
|
||||
"path": "system.codedom/4.4.0",
|
||||
"hashPath": "system.codedom.4.4.0.nupkg.sha512"
|
||||
},
|
||||
"System.Runtime.CompilerServices.Unsafe/6.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-/iUeP3tq1S0XdNNoMz5C9twLSrM/TH+qElHkXWaPvuNOt+99G75NrV0OS2EqHx5wMN7popYjpc8oTjC1y16DLg==",
|
||||
"path": "system.runtime.compilerservices.unsafe/6.0.0",
|
||||
"hashPath": "system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Text.Encodings.Web/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-OP6umVGxc0Z0MvZQBVigj4/U31Pw72ITihDWP9WiWDm+q5aoe0GaJivsfYGq53o6dxH7DcXWiCTl7+0o2CGdmg==",
|
||||
"path": "system.text.encodings.web/7.0.0",
|
||||
"hashPath": "system.text.encodings.web.7.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.Text.Json/7.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-DaGSsVqKsn/ia6RG8frjwmJonfos0srquhw09TlT8KRw5I43E+4gs+/bZj4K0vShJ5H9imCuXupb4RmS+dBy3w==",
|
||||
"path": "system.text.json/7.0.0",
|
||||
"hashPath": "system.text.json.7.0.0.nupkg.sha512"
|
||||
}
|
||||
}
|
||||
}
|
Binary file not shown.
Binary file not shown.
@ -0,0 +1,20 @@
|
||||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net7.0",
|
||||
"frameworks": [
|
||||
{
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "7.0.0"
|
||||
},
|
||||
{
|
||||
"name": "Microsoft.AspNetCore.App",
|
||||
"version": "7.0.0"
|
||||
}
|
||||
],
|
||||
"configProperties": {
|
||||
"System.GC.Server": true,
|
||||
"System.Reflection.NullabilityInfoContext.IsSupported": true,
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||
}
|
||||
}
|
||||
}
|
BIN
AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Humanizer.dll
Executable file
BIN
AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Humanizer.dll
Executable file
Binary file not shown.
BIN
AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.AspNetCore.OpenApi.dll
Executable file
BIN
AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.AspNetCore.OpenApi.dll
Executable file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.dll
Executable file
BIN
AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.dll
Executable file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.OpenApi.dll
Executable file
BIN
AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.OpenApi.dll
Executable file
Binary file not shown.
BIN
AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Mono.TextTemplating.dll
Executable file
BIN
AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Mono.TextTemplating.dll
Executable file
Binary file not shown.
Binary file not shown.
BIN
AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Npgsql.dll
Executable file
BIN
AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Npgsql.dll
Executable file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
AAIntegration.SimmonsBank.API/bin/Debug/net7.0/System.CodeDom.dll
Executable file
BIN
AAIntegration.SimmonsBank.API/bin/Debug/net7.0/System.CodeDom.dll
Executable file
Binary file not shown.
@ -0,0 +1,8 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,20 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*",
|
||||
"AppSettings": {
|
||||
"Secret": "5de80277015f9fd564c4d1cc2cf827dbb1774cd66e7d79aa258d9c35a9f67f32fc6cf0dc24244242bd9501288e0fd69e315b",
|
||||
"APIUrl": "https://localhost:5279"
|
||||
},
|
||||
"Database": {
|
||||
"Host": "localhost",
|
||||
"Name": "AAISB_DB",
|
||||
"User": "postgres",
|
||||
"Password": "nqA3UV3CliLLHpLL",
|
||||
"Port": "15432"
|
||||
}
|
||||
}
|
@ -0,0 +1,143 @@
|
||||
{
|
||||
"format": 1,
|
||||
"restore": {
|
||||
"/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/AAIntegration.SimmonsBank.API.csproj": {}
|
||||
},
|
||||
"projects": {
|
||||
"/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/AAIntegration.SimmonsBank.API.csproj": {
|
||||
"version": "1.0.0",
|
||||
"restore": {
|
||||
"projectUniqueName": "/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/AAIntegration.SimmonsBank.API.csproj",
|
||||
"projectName": "AAIntegration.SimmonsBank.API",
|
||||
"projectPath": "/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/AAIntegration.SimmonsBank.API.csproj",
|
||||
"packagesPath": "/home/william/.nuget/packages/",
|
||||
"outputPath": "/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/",
|
||||
"projectStyle": "PackageReference",
|
||||
"configFilePaths": [
|
||||
"/home/william/.nuget/NuGet/NuGet.Config"
|
||||
],
|
||||
"originalTargetFrameworks": [
|
||||
"net7.0"
|
||||
],
|
||||
"sources": {
|
||||
"https://api.nuget.org/v3/index.json": {}
|
||||
},
|
||||
"frameworks": {
|
||||
"net7.0": {
|
||||
"targetAlias": "net7.0",
|
||||
"projectReferences": {}
|
||||
}
|
||||
},
|
||||
"warningProperties": {
|
||||
"warnAsError": [
|
||||
"NU1605"
|
||||
]
|
||||
}
|
||||
},
|
||||
"frameworks": {
|
||||
"net7.0": {
|
||||
"targetAlias": "net7.0",
|
||||
"dependencies": {
|
||||
"AutoMapper": {
|
||||
"target": "Package",
|
||||
"version": "[12.0.1, )"
|
||||
},
|
||||
"AutoMapper.Extensions.Microsoft.DependencyInjection": {
|
||||
"target": "Package",
|
||||
"version": "[12.0.1, )"
|
||||
},
|
||||
"BCrypt.Net": {
|
||||
"target": "Package",
|
||||
"version": "[0.1.0, )"
|
||||
},
|
||||
"Microsoft.AspNetCore.Authentication.JwtBearer": {
|
||||
"target": "Package",
|
||||
"version": "[7.0.16, )"
|
||||
},
|
||||
"Microsoft.AspNetCore.SpaProxy": {
|
||||
"target": "Package",
|
||||
"version": "[7.0.13, )"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore": {
|
||||
"target": "Package",
|
||||
"version": "[7.0.9, )"
|
||||
},
|
||||
"Microsoft.EntityFrameworkCore.Design": {
|
||||
"include": "Runtime, Build, Native, ContentFiles, Analyzers, BuildTransitive",
|
||||
"suppressParent": "All",
|
||||
"target": "Package",
|
||||
"version": "[7.0.9, )"
|
||||
},
|
||||
"Microsoft.IdentityModel.Tokens": {
|
||||
"target": "Package",
|
||||
"version": "[6.35.0, )"
|
||||
},
|
||||
"Microsoft.NET.Build.Containers": {
|
||||
"target": "Package",
|
||||
"version": "[7.0.400, )"
|
||||
},
|
||||
"Microsoft.VisualStudio.Web.CodeGeneration.Design": {
|
||||
"target": "Package",
|
||||
"version": "[7.0.8, )"
|
||||
},
|
||||
"Npgsql.EntityFrameworkCore.PostgreSQL": {
|
||||
"target": "Package",
|
||||
"version": "[7.0.4, )"
|
||||
},
|
||||
"Swashbuckle.AspNetCore": {
|
||||
"target": "Package",
|
||||
"version": "[6.5.0, )"
|
||||
},
|
||||
"System.IdentityModel.Tokens.Jwt": {
|
||||
"target": "Package",
|
||||
"version": "[6.35.0, )"
|
||||
}
|
||||
},
|
||||
"imports": [
|
||||
"net461",
|
||||
"net462",
|
||||
"net47",
|
||||
"net471",
|
||||
"net472",
|
||||
"net48",
|
||||
"net481"
|
||||
],
|
||||
"assetTargetFallback": true,
|
||||
"warn": true,
|
||||
"downloadDependencies": [
|
||||
{
|
||||
"name": "Microsoft.AspNetCore.App.Ref",
|
||||
"version": "[7.0.15, 7.0.15]"
|
||||
},
|
||||
{
|
||||
"name": "Microsoft.AspNetCore.App.Runtime.linux-x64",
|
||||
"version": "[7.0.15, 7.0.15]"
|
||||
},
|
||||
{
|
||||
"name": "Microsoft.NETCore.App.Host.linux-x64",
|
||||
"version": "[7.0.15, 7.0.15]"
|
||||
},
|
||||
{
|
||||
"name": "Microsoft.NETCore.App.Runtime.linux-x64",
|
||||
"version": "[7.0.15, 7.0.15]"
|
||||
}
|
||||
],
|
||||
"frameworkReferences": {
|
||||
"Microsoft.AspNetCore.App": {
|
||||
"privateAssets": "none"
|
||||
},
|
||||
"Microsoft.NETCore.App": {
|
||||
"privateAssets": "all"
|
||||
}
|
||||
},
|
||||
"runtimeIdentifierGraphPath": "/usr/share/dotnet/sdk/7.0.115/RuntimeIdentifierGraph.json"
|
||||
}
|
||||
},
|
||||
"runtimes": {
|
||||
"linux-x64": {
|
||||
"#import": []
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<RestoreSuccess Condition=" '$(RestoreSuccess)' == '' ">True</RestoreSuccess>
|
||||
<RestoreTool Condition=" '$(RestoreTool)' == '' ">NuGet</RestoreTool>
|
||||
<ProjectAssetsFile Condition=" '$(ProjectAssetsFile)' == '' ">$(MSBuildThisFileDirectory)project.assets.json</ProjectAssetsFile>
|
||||
<NuGetPackageRoot Condition=" '$(NuGetPackageRoot)' == '' ">/home/william/.nuget/packages/</NuGetPackageRoot>
|
||||
<NuGetPackageFolders Condition=" '$(NuGetPackageFolders)' == '' ">/home/william/.nuget/packages/</NuGetPackageFolders>
|
||||
<NuGetProjectStyle Condition=" '$(NuGetProjectStyle)' == '' ">PackageReference</NuGetProjectStyle>
|
||||
<NuGetToolVersion Condition=" '$(NuGetToolVersion)' == '' ">6.4.2</NuGetToolVersion>
|
||||
</PropertyGroup>
|
||||
<ItemGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<SourceRoot Include="/home/william/.nuget/packages/" />
|
||||
</ItemGroup>
|
||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.apidescription.server/6.0.5/build/Microsoft.Extensions.ApiDescription.Server.props" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.apidescription.server/6.0.5/build/Microsoft.Extensions.ApiDescription.Server.props')" />
|
||||
<Import Project="$(NuGetPackageRoot)swashbuckle.aspnetcore/6.5.0/build/Swashbuckle.AspNetCore.props" Condition="Exists('$(NuGetPackageRoot)swashbuckle.aspnetcore/6.5.0/build/Swashbuckle.AspNetCore.props')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore/7.0.9/buildTransitive/net6.0/Microsoft.EntityFrameworkCore.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore/7.0.9/buildTransitive/net6.0/Microsoft.EntityFrameworkCore.props')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.net.build.containers/7.0.400/build/Microsoft.NET.Build.Containers.props" Condition="Exists('$(NuGetPackageRoot)microsoft.net.build.containers/7.0.400/build/Microsoft.NET.Build.Containers.props')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.entityframeworkcore.design/7.0.9/build/net6.0/Microsoft.EntityFrameworkCore.Design.props" Condition="Exists('$(NuGetPackageRoot)microsoft.entityframeworkcore.design/7.0.9/build/net6.0/Microsoft.EntityFrameworkCore.Design.props')" />
|
||||
</ImportGroup>
|
||||
<PropertyGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<PkgMicrosoft_Extensions_ApiDescription_Server Condition=" '$(PkgMicrosoft_Extensions_ApiDescription_Server)' == '' ">/home/william/.nuget/packages/microsoft.extensions.apidescription.server/6.0.5</PkgMicrosoft_Extensions_ApiDescription_Server>
|
||||
<PkgMicrosoft_CodeAnalysis_Analyzers Condition=" '$(PkgMicrosoft_CodeAnalysis_Analyzers)' == '' ">/home/william/.nuget/packages/microsoft.codeanalysis.analyzers/3.3.3</PkgMicrosoft_CodeAnalysis_Analyzers>
|
||||
<PkgMicrosoft_CodeAnalysis_AnalyzerUtilities Condition=" '$(PkgMicrosoft_CodeAnalysis_AnalyzerUtilities)' == '' ">/home/william/.nuget/packages/microsoft.codeanalysis.analyzerutilities/3.3.0</PkgMicrosoft_CodeAnalysis_AnalyzerUtilities>
|
||||
</PropertyGroup>
|
||||
</Project>
|
@ -0,0 +1,10 @@
|
||||
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
||||
<Project ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
|
||||
<ImportGroup Condition=" '$(ExcludeRestorePackageImports)' != 'true' ">
|
||||
<Import Project="$(NuGetPackageRoot)system.text.json/7.0.0/buildTransitive/net6.0/System.Text.Json.targets" Condition="Exists('$(NuGetPackageRoot)system.text.json/7.0.0/buildTransitive/net6.0/System.Text.Json.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.apidescription.server/6.0.5/build/Microsoft.Extensions.ApiDescription.Server.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.apidescription.server/6.0.5/build/Microsoft.Extensions.ApiDescription.Server.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.extensions.logging.abstractions/7.0.0/buildTransitive/net6.0/Microsoft.Extensions.Logging.Abstractions.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.extensions.logging.abstractions/7.0.0/buildTransitive/net6.0/Microsoft.Extensions.Logging.Abstractions.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.net.build.containers/7.0.400/build/Microsoft.NET.Build.Containers.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.net.build.containers/7.0.400/build/Microsoft.NET.Build.Containers.targets')" />
|
||||
<Import Project="$(NuGetPackageRoot)microsoft.aspnetcore.spaproxy/7.0.13/build/Microsoft.AspNetCore.SpaProxy.targets" Condition="Exists('$(NuGetPackageRoot)microsoft.aspnetcore.spaproxy/7.0.13/build/Microsoft.AspNetCore.SpaProxy.targets')" />
|
||||
</ImportGroup>
|
||||
</Project>
|
@ -0,0 +1,4 @@
|
||||
// <autogenerated />
|
||||
using System;
|
||||
using System.Reflection;
|
||||
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(".NETCoreApp,Version=v7.0", FrameworkDisplayName = ".NET 7.0")]
|
@ -0,0 +1,22 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: System.Reflection.AssemblyCompanyAttribute("AAIntegration.SimmonsBank.API")]
|
||||
[assembly: System.Reflection.AssemblyConfigurationAttribute("Debug")]
|
||||
[assembly: System.Reflection.AssemblyFileVersionAttribute("1.0.0.0")]
|
||||
[assembly: System.Reflection.AssemblyInformationalVersionAttribute("1.0.0")]
|
||||
[assembly: System.Reflection.AssemblyProductAttribute("AAIntegration.SimmonsBank.API")]
|
||||
[assembly: System.Reflection.AssemblyTitleAttribute("AAIntegration.SimmonsBank.API")]
|
||||
[assembly: System.Reflection.AssemblyVersionAttribute("1.0.0.0")]
|
||||
|
||||
// Generated by the MSBuild WriteCodeFragment class.
|
||||
|
@ -0,0 +1 @@
|
||||
ccf0192c63cd8318a7ee7a5d81133f2750591ae8
|
@ -0,0 +1,17 @@
|
||||
is_global = true
|
||||
build_property.TargetFramework = net7.0
|
||||
build_property.TargetPlatformMinVersion =
|
||||
build_property.UsingMicrosoftNETSdkWeb = true
|
||||
build_property.ProjectTypeGuids =
|
||||
build_property.InvariantGlobalization =
|
||||
build_property.PlatformNeutralAssembly =
|
||||
build_property.EnforceExtendedAnalyzerRules =
|
||||
build_property._SupportedPlatformList = Linux,macOS,Windows
|
||||
build_property.RootNamespace = AAIntegration.SimmonsBank.API
|
||||
build_property.RootNamespace = AAIntegration.SimmonsBank.API
|
||||
build_property.ProjectDir = /home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/
|
||||
build_property.RazorLangVersion = 7.0
|
||||
build_property.SupportLocalizedComponentNames =
|
||||
build_property.GenerateRazorMetadataSourceChecksumAttributes =
|
||||
build_property.MSBuildProjectDirectory = /home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API
|
||||
build_property._RazorSourceGeneratorDebug =
|
@ -0,0 +1,17 @@
|
||||
// <auto-generated/>
|
||||
global using global::Microsoft.AspNetCore.Builder;
|
||||
global using global::Microsoft.AspNetCore.Hosting;
|
||||
global using global::Microsoft.AspNetCore.Http;
|
||||
global using global::Microsoft.AspNetCore.Routing;
|
||||
global using global::Microsoft.Extensions.Configuration;
|
||||
global using global::Microsoft.Extensions.DependencyInjection;
|
||||
global using global::Microsoft.Extensions.Hosting;
|
||||
global using global::Microsoft.Extensions.Logging;
|
||||
global using global::System;
|
||||
global using global::System.Collections.Generic;
|
||||
global using global::System.IO;
|
||||
global using global::System.Linq;
|
||||
global using global::System.Net.Http;
|
||||
global using global::System.Net.Http.Json;
|
||||
global using global::System.Threading;
|
||||
global using global::System.Threading.Tasks;
|
@ -0,0 +1,17 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by a tool.
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost if
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
using System;
|
||||
using System.Reflection;
|
||||
|
||||
[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute("Microsoft.AspNetCore.OpenApi")]
|
||||
[assembly: Microsoft.AspNetCore.Mvc.ApplicationParts.ApplicationPartAttribute("Swashbuckle.AspNetCore.SwaggerGen")]
|
||||
|
||||
// Generated by the MSBuild WriteCodeFragment class.
|
||||
|
Binary file not shown.
Binary file not shown.
@ -0,0 +1 @@
|
||||
bd7d70d00f668e0d8bf64847deff236ad4b0c3cc
|
@ -0,0 +1,46 @@
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/appsettings.Development.json
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/appsettings.json
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.deps.json
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.runtimeconfig.json
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/AAIntegration.SimmonsBank.API.pdb
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Humanizer.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.AspNetCore.OpenApi.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Abstractions.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Design.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.EntityFrameworkCore.Relational.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.Extensions.DependencyModel.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.IdentityModel.Abstractions.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.IdentityModel.Logging.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.IdentityModel.Tokens.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Microsoft.OpenApi.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Mono.TextTemplating.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Npgsql.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Npgsql.EntityFrameworkCore.PostgreSQL.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Swashbuckle.AspNetCore.Swagger.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Swashbuckle.AspNetCore.SwaggerGen.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/Swashbuckle.AspNetCore.SwaggerUI.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/bin/Debug/net7.0/System.CodeDom.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.AssemblyReference.cache
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.GeneratedMSBuildEditorConfig.editorconfig
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.AssemblyInfoInputs.cache
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.AssemblyInfo.cs
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.CoreCompileInputs.cache
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.MvcApplicationPartsAssemblyInfo.cs
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.MvcApplicationPartsAssemblyInfo.cache
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/staticwebassets/msbuild.AAIntegration.SimmonsBank.API.Microsoft.AspNetCore.StaticWebAssets.props
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/staticwebassets/msbuild.build.AAIntegration.SimmonsBank.API.props
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/staticwebassets/msbuild.buildMultiTargeting.AAIntegration.SimmonsBank.API.props
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/staticwebassets/msbuild.buildTransitive.AAIntegration.SimmonsBank.API.props
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/staticwebassets.pack.json
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/staticwebassets.build.json
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/staticwebassets.development.json
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/scopedcss/bundle/AAIntegration.SimmonsBank.API.styles.css
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.csproj.CopyComplete
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/refint/AAIntegration.SimmonsBank.API.dll
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.pdb
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/AAIntegration.SimmonsBank.API.genruntimeconfig.cache
|
||||
/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/obj/Debug/net7.0/ref/AAIntegration.SimmonsBank.API.dll
|
Binary file not shown.
@ -0,0 +1 @@
|
||||
73736abff76b35e69e45e19ba4a468a4281d3a6a
|
Binary file not shown.
BIN
AAIntegration.SimmonsBank.API/obj/Debug/net7.0/apphost
Executable file
BIN
AAIntegration.SimmonsBank.API/obj/Debug/net7.0/apphost
Executable file
Binary file not shown.
18648
AAIntegration.SimmonsBank.API/obj/Debug/net7.0/project.razor.json
Normal file
18648
AAIntegration.SimmonsBank.API/obj/Debug/net7.0/project.razor.json
Normal file
File diff suppressed because it is too large
Load Diff
Binary file not shown.
Binary file not shown.
@ -0,0 +1,11 @@
|
||||
{
|
||||
"Version": 1,
|
||||
"Hash": "E7GbOSG6IO2M9jvlY+QNr8QU/kujs78xuuIJQtIbmH0=",
|
||||
"Source": "AAIntegration.SimmonsBank.API",
|
||||
"BasePath": "_content/AAIntegration.SimmonsBank.API",
|
||||
"Mode": "Default",
|
||||
"ManifestType": "Build",
|
||||
"ReferencedProjectsConfiguration": [],
|
||||
"DiscoveryPatterns": [],
|
||||
"Assets": []
|
||||
}
|
@ -0,0 +1,3 @@
|
||||
<Project>
|
||||
<Import Project="Microsoft.AspNetCore.StaticWebAssets.props" />
|
||||
</Project>
|
@ -0,0 +1,3 @@
|
||||
<Project>
|
||||
<Import Project="../build/AAIntegration.SimmonsBank.API.props" />
|
||||
</Project>
|
@ -0,0 +1,3 @@
|
||||
<Project>
|
||||
<Import Project="../buildMultiTargeting/AAIntegration.SimmonsBank.API.props" />
|
||||
</Project>
|
16346
AAIntegration.SimmonsBank.API/obj/project.assets.json
Normal file
16346
AAIntegration.SimmonsBank.API/obj/project.assets.json
Normal file
File diff suppressed because it is too large
Load Diff
276
AAIntegration.SimmonsBank.API/obj/project.nuget.cache
Normal file
276
AAIntegration.SimmonsBank.API/obj/project.nuget.cache
Normal file
@ -0,0 +1,276 @@
|
||||
{
|
||||
"version": 2,
|
||||
"dgSpecHash": "pU4IZjFuw6ck49MYsMS+1UuAOx/hMvpbrwRe+YEG/+yMX3k4+UAMntT6PNgrQmrU6kLvRLvNkyt8WlX1uYoEtw==",
|
||||
"success": true,
|
||||
"projectFilePath": "/home/william/Git/Integration-TransactionImporter-SimmonsBank/AAIntegration.SimmonsBank.API/AAIntegration.SimmonsBank.API.csproj",
|
||||
"expectedPackageFiles": [
|
||||
"/home/william/.nuget/packages/automapper/12.0.1/automapper.12.0.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/automapper.extensions.microsoft.dependencyinjection/12.0.1/automapper.extensions.microsoft.dependencyinjection.12.0.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/bcrypt.net/0.1.0/bcrypt.net.0.1.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer/2.14.1/humanizer.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core/2.14.1/humanizer.core.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.af/2.14.1/humanizer.core.af.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.ar/2.14.1/humanizer.core.ar.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.az/2.14.1/humanizer.core.az.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.bg/2.14.1/humanizer.core.bg.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.bn-bd/2.14.1/humanizer.core.bn-bd.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.cs/2.14.1/humanizer.core.cs.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.da/2.14.1/humanizer.core.da.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.de/2.14.1/humanizer.core.de.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.el/2.14.1/humanizer.core.el.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.es/2.14.1/humanizer.core.es.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.fa/2.14.1/humanizer.core.fa.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.fi-fi/2.14.1/humanizer.core.fi-fi.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.fr/2.14.1/humanizer.core.fr.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.fr-be/2.14.1/humanizer.core.fr-be.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.he/2.14.1/humanizer.core.he.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.hr/2.14.1/humanizer.core.hr.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.hu/2.14.1/humanizer.core.hu.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.hy/2.14.1/humanizer.core.hy.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.id/2.14.1/humanizer.core.id.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.is/2.14.1/humanizer.core.is.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.it/2.14.1/humanizer.core.it.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.ja/2.14.1/humanizer.core.ja.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.ko-kr/2.14.1/humanizer.core.ko-kr.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.ku/2.14.1/humanizer.core.ku.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.lv/2.14.1/humanizer.core.lv.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.ms-my/2.14.1/humanizer.core.ms-my.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.mt/2.14.1/humanizer.core.mt.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.nb/2.14.1/humanizer.core.nb.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.nb-no/2.14.1/humanizer.core.nb-no.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.nl/2.14.1/humanizer.core.nl.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.pl/2.14.1/humanizer.core.pl.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.pt/2.14.1/humanizer.core.pt.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.ro/2.14.1/humanizer.core.ro.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.ru/2.14.1/humanizer.core.ru.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.sk/2.14.1/humanizer.core.sk.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.sl/2.14.1/humanizer.core.sl.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.sr/2.14.1/humanizer.core.sr.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.sr-latn/2.14.1/humanizer.core.sr-latn.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.sv/2.14.1/humanizer.core.sv.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.th-th/2.14.1/humanizer.core.th-th.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.tr/2.14.1/humanizer.core.tr.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.uk/2.14.1/humanizer.core.uk.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.uz-cyrl-uz/2.14.1/humanizer.core.uz-cyrl-uz.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.uz-latn-uz/2.14.1/humanizer.core.uz-latn-uz.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.vi/2.14.1/humanizer.core.vi.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.zh-cn/2.14.1/humanizer.core.zh-cn.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.zh-hans/2.14.1/humanizer.core.zh-hans.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/humanizer.core.zh-hant/2.14.1/humanizer.core.zh-hant.2.14.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.aspnetcore.authentication.jwtbearer/7.0.16/microsoft.aspnetcore.authentication.jwtbearer.7.0.16.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.aspnetcore.razor.language/6.0.11/microsoft.aspnetcore.razor.language.6.0.11.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.aspnetcore.spaproxy/7.0.13/microsoft.aspnetcore.spaproxy.7.0.13.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.bcl.asyncinterfaces/6.0.0/microsoft.bcl.asyncinterfaces.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.build/17.3.2/microsoft.build.17.3.2.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.build.framework/17.3.2/microsoft.build.framework.17.3.2.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.codeanalysis.analyzers/3.3.3/microsoft.codeanalysis.analyzers.3.3.3.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.codeanalysis.analyzerutilities/3.3.0/microsoft.codeanalysis.analyzerutilities.3.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.codeanalysis.common/4.4.0/microsoft.codeanalysis.common.4.4.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.codeanalysis.csharp/4.4.0/microsoft.codeanalysis.csharp.4.4.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.codeanalysis.csharp.features/4.4.0/microsoft.codeanalysis.csharp.features.4.4.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.codeanalysis.csharp.workspaces/4.4.0/microsoft.codeanalysis.csharp.workspaces.4.4.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.codeanalysis.elfie/1.0.0/microsoft.codeanalysis.elfie.1.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.codeanalysis.features/4.4.0/microsoft.codeanalysis.features.4.4.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.codeanalysis.razor/6.0.11/microsoft.codeanalysis.razor.6.0.11.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.codeanalysis.scripting.common/4.4.0/microsoft.codeanalysis.scripting.common.4.4.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.codeanalysis.workspaces.common/4.4.0/microsoft.codeanalysis.workspaces.common.4.4.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.csharp/4.7.0/microsoft.csharp.4.7.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.diasymreader/1.4.0/microsoft.diasymreader.1.4.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.dotnet.scaffolding.shared/7.0.8/microsoft.dotnet.scaffolding.shared.7.0.8.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.entityframeworkcore/7.0.9/microsoft.entityframeworkcore.7.0.9.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.entityframeworkcore.abstractions/7.0.9/microsoft.entityframeworkcore.abstractions.7.0.9.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.entityframeworkcore.analyzers/7.0.9/microsoft.entityframeworkcore.analyzers.7.0.9.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.entityframeworkcore.design/7.0.9/microsoft.entityframeworkcore.design.7.0.9.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.entityframeworkcore.relational/7.0.9/microsoft.entityframeworkcore.relational.7.0.9.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.extensions.apidescription.server/6.0.5/microsoft.extensions.apidescription.server.6.0.5.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.extensions.caching.abstractions/7.0.0/microsoft.extensions.caching.abstractions.7.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.extensions.caching.memory/7.0.0/microsoft.extensions.caching.memory.7.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.extensions.configuration.abstractions/7.0.0/microsoft.extensions.configuration.abstractions.7.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.extensions.dependencyinjection/7.0.0/microsoft.extensions.dependencyinjection.7.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.extensions.dependencyinjection.abstractions/7.0.0/microsoft.extensions.dependencyinjection.abstractions.7.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.extensions.dependencymodel/7.0.0/microsoft.extensions.dependencymodel.7.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.extensions.logging/7.0.0/microsoft.extensions.logging.7.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.extensions.logging.abstractions/7.0.0/microsoft.extensions.logging.abstractions.7.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.extensions.options/7.0.0/microsoft.extensions.options.7.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.extensions.primitives/7.0.0/microsoft.extensions.primitives.7.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.identitymodel.abstractions/6.35.0/microsoft.identitymodel.abstractions.6.35.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.identitymodel.jsonwebtokens/6.35.0/microsoft.identitymodel.jsonwebtokens.6.35.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.identitymodel.logging/6.35.0/microsoft.identitymodel.logging.6.35.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.identitymodel.protocols/6.35.0/microsoft.identitymodel.protocols.6.35.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.identitymodel.protocols.openidconnect/6.35.0/microsoft.identitymodel.protocols.openidconnect.6.35.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.identitymodel.tokens/6.35.0/microsoft.identitymodel.tokens.6.35.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.net.build.containers/7.0.400/microsoft.net.build.containers.7.0.400.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.net.stringtools/17.3.2/microsoft.net.stringtools.17.3.2.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.netcore.platforms/1.1.0/microsoft.netcore.platforms.1.1.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.netcore.targets/1.1.0/microsoft.netcore.targets.1.1.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.openapi/1.2.3/microsoft.openapi.1.2.3.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.visualstudio.web.codegeneration/7.0.8/microsoft.visualstudio.web.codegeneration.7.0.8.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.visualstudio.web.codegeneration.core/7.0.8/microsoft.visualstudio.web.codegeneration.core.7.0.8.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.visualstudio.web.codegeneration.design/7.0.8/microsoft.visualstudio.web.codegeneration.design.7.0.8.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.visualstudio.web.codegeneration.entityframeworkcore/7.0.8/microsoft.visualstudio.web.codegeneration.entityframeworkcore.7.0.8.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.visualstudio.web.codegeneration.templating/7.0.8/microsoft.visualstudio.web.codegeneration.templating.7.0.8.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.visualstudio.web.codegeneration.utils/7.0.8/microsoft.visualstudio.web.codegeneration.utils.7.0.8.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.visualstudio.web.codegenerators.mvc/7.0.8/microsoft.visualstudio.web.codegenerators.mvc.7.0.8.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.win32.primitives/4.3.0/microsoft.win32.primitives.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.win32.systemevents/6.0.0/microsoft.win32.systemevents.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/mono.texttemplating/2.2.1/mono.texttemplating.2.2.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/netstandard.library/1.6.1/netstandard.library.1.6.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/newtonsoft.json/13.0.1/newtonsoft.json.13.0.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/npgsql/7.0.4/npgsql.7.0.4.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/npgsql.entityframeworkcore.postgresql/7.0.4/npgsql.entityframeworkcore.postgresql.7.0.4.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/nuget.common/6.3.1/nuget.common.6.3.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/nuget.configuration/6.3.1/nuget.configuration.6.3.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/nuget.dependencyresolver.core/6.3.1/nuget.dependencyresolver.core.6.3.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/nuget.frameworks/6.3.1/nuget.frameworks.6.3.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/nuget.librarymodel/6.3.1/nuget.librarymodel.6.3.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/nuget.packaging/6.3.1/nuget.packaging.6.3.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/nuget.projectmodel/6.3.1/nuget.projectmodel.6.3.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/nuget.protocol/6.3.1/nuget.protocol.6.3.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/nuget.versioning/6.3.1/nuget.versioning.6.3.1.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.collections/4.3.0/runtime.any.system.collections.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.diagnostics.tools/4.3.0/runtime.any.system.diagnostics.tools.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.diagnostics.tracing/4.3.0/runtime.any.system.diagnostics.tracing.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.globalization/4.3.0/runtime.any.system.globalization.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.globalization.calendars/4.3.0/runtime.any.system.globalization.calendars.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.io/4.3.0/runtime.any.system.io.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.reflection/4.3.0/runtime.any.system.reflection.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.reflection.extensions/4.3.0/runtime.any.system.reflection.extensions.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.reflection.primitives/4.3.0/runtime.any.system.reflection.primitives.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.resources.resourcemanager/4.3.0/runtime.any.system.resources.resourcemanager.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.runtime/4.3.0/runtime.any.system.runtime.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.runtime.handles/4.3.0/runtime.any.system.runtime.handles.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.runtime.interopservices/4.3.0/runtime.any.system.runtime.interopservices.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.text.encoding/4.3.0/runtime.any.system.text.encoding.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.text.encoding.extensions/4.3.0/runtime.any.system.text.encoding.extensions.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.threading.tasks/4.3.0/runtime.any.system.threading.tasks.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.any.system.threading.timer/4.3.0/runtime.any.system.threading.timer.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.debian.8-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.fedora.23-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.fedora.24-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.native.system/4.3.0/runtime.native.system.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.native.system.io.compression/4.3.0/runtime.native.system.io.compression.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.native.system.net.http/4.3.0/runtime.native.system.net.http.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.native.system.security.cryptography.apple/4.3.0/runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.native.system.security.cryptography.openssl/4.3.0/runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.opensuse.13.2-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.opensuse.42.1-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple/4.3.0/runtime.osx.10.10-x64.runtime.native.system.security.cryptography.apple.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.osx.10.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.rhel.7-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.14.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.16.04-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl/4.3.0/runtime.ubuntu.16.10-x64.runtime.native.system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.unix.microsoft.win32.primitives/4.3.0/runtime.unix.microsoft.win32.primitives.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.unix.system.console/4.3.0/runtime.unix.system.console.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.unix.system.diagnostics.debug/4.3.0/runtime.unix.system.diagnostics.debug.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.unix.system.io.filesystem/4.3.0/runtime.unix.system.io.filesystem.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.unix.system.net.primitives/4.3.0/runtime.unix.system.net.primitives.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.unix.system.net.sockets/4.3.0/runtime.unix.system.net.sockets.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.unix.system.private.uri/4.3.0/runtime.unix.system.private.uri.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/runtime.unix.system.runtime.extensions/4.3.0/runtime.unix.system.runtime.extensions.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/swashbuckle.aspnetcore/6.5.0/swashbuckle.aspnetcore.6.5.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/swashbuckle.aspnetcore.swagger/6.5.0/swashbuckle.aspnetcore.swagger.6.5.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/swashbuckle.aspnetcore.swaggergen/6.5.0/swashbuckle.aspnetcore.swaggergen.6.5.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/swashbuckle.aspnetcore.swaggerui/6.5.0/swashbuckle.aspnetcore.swaggerui.6.5.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.appcontext/4.3.0/system.appcontext.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.buffers/4.3.0/system.buffers.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.codedom/4.4.0/system.codedom.4.4.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.collections/4.3.0/system.collections.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.collections.concurrent/4.3.0/system.collections.concurrent.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.collections.immutable/6.0.0/system.collections.immutable.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.composition/6.0.0/system.composition.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.composition.attributedmodel/6.0.0/system.composition.attributedmodel.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.composition.convention/6.0.0/system.composition.convention.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.composition.hosting/6.0.0/system.composition.hosting.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.composition.runtime/6.0.0/system.composition.runtime.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.composition.typedparts/6.0.0/system.composition.typedparts.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.configuration.configurationmanager/6.0.0/system.configuration.configurationmanager.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.console/4.3.0/system.console.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.data.datasetextensions/4.5.0/system.data.datasetextensions.4.5.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.diagnostics.debug/4.3.0/system.diagnostics.debug.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.diagnostics.diagnosticsource/4.3.0/system.diagnostics.diagnosticsource.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.diagnostics.tools/4.3.0/system.diagnostics.tools.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.diagnostics.tracing/4.3.0/system.diagnostics.tracing.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.drawing.common/6.0.0/system.drawing.common.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.formats.asn1/5.0.0/system.formats.asn1.5.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.globalization/4.3.0/system.globalization.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.globalization.calendars/4.3.0/system.globalization.calendars.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.globalization.extensions/4.3.0/system.globalization.extensions.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.identitymodel.tokens.jwt/6.35.0/system.identitymodel.tokens.jwt.6.35.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.io/4.3.0/system.io.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.io.compression/4.3.0/system.io.compression.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.io.compression.zipfile/4.3.0/system.io.compression.zipfile.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.io.filesystem/4.3.0/system.io.filesystem.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.io.filesystem.primitives/4.3.0/system.io.filesystem.primitives.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.io.pipelines/6.0.3/system.io.pipelines.6.0.3.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.linq/4.3.0/system.linq.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.linq.expressions/4.3.0/system.linq.expressions.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.memory/4.5.5/system.memory.4.5.5.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.net.http/4.3.0/system.net.http.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.net.nameresolution/4.3.0/system.net.nameresolution.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.net.primitives/4.3.0/system.net.primitives.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.net.sockets/4.3.0/system.net.sockets.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.objectmodel/4.3.0/system.objectmodel.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.private.uri/4.3.0/system.private.uri.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.reflection/4.3.0/system.reflection.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.reflection.emit/4.3.0/system.reflection.emit.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.reflection.emit.ilgeneration/4.3.0/system.reflection.emit.ilgeneration.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.reflection.emit.lightweight/4.3.0/system.reflection.emit.lightweight.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.reflection.extensions/4.3.0/system.reflection.extensions.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.reflection.metadata/6.0.0/system.reflection.metadata.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.reflection.metadataloadcontext/6.0.0/system.reflection.metadataloadcontext.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.reflection.primitives/4.3.0/system.reflection.primitives.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.reflection.typeextensions/4.3.0/system.reflection.typeextensions.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.resources.resourcemanager/4.3.0/system.resources.resourcemanager.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.runtime/4.3.0/system.runtime.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.runtime.compilerservices.unsafe/6.0.0/system.runtime.compilerservices.unsafe.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.runtime.extensions/4.3.0/system.runtime.extensions.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.runtime.handles/4.3.0/system.runtime.handles.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.runtime.interopservices/4.3.0/system.runtime.interopservices.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.runtime.interopservices.runtimeinformation/4.3.0/system.runtime.interopservices.runtimeinformation.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.runtime.numerics/4.3.0/system.runtime.numerics.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.security.accesscontrol/6.0.0/system.security.accesscontrol.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.security.cryptography.algorithms/4.3.0/system.security.cryptography.algorithms.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.security.cryptography.cng/5.0.0/system.security.cryptography.cng.5.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.security.cryptography.csp/4.3.0/system.security.cryptography.csp.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.security.cryptography.encoding/4.3.0/system.security.cryptography.encoding.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.security.cryptography.openssl/4.3.0/system.security.cryptography.openssl.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.security.cryptography.pkcs/5.0.0/system.security.cryptography.pkcs.5.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.security.cryptography.primitives/4.3.0/system.security.cryptography.primitives.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.security.cryptography.protecteddata/6.0.0/system.security.cryptography.protecteddata.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.security.cryptography.x509certificates/4.3.0/system.security.cryptography.x509certificates.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.security.permissions/6.0.0/system.security.permissions.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.security.principal.windows/5.0.0/system.security.principal.windows.5.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.text.encoding/4.3.0/system.text.encoding.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.text.encoding.codepages/6.0.0/system.text.encoding.codepages.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.text.encoding.extensions/4.3.0/system.text.encoding.extensions.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.text.encodings.web/7.0.0/system.text.encodings.web.7.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.text.json/7.0.0/system.text.json.7.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.text.regularexpressions/4.3.0/system.text.regularexpressions.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.threading/4.3.0/system.threading.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.threading.tasks/4.3.0/system.threading.tasks.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.threading.tasks.dataflow/6.0.0/system.threading.tasks.dataflow.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.threading.tasks.extensions/4.5.4/system.threading.tasks.extensions.4.5.4.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.threading.threadpool/4.3.0/system.threading.threadpool.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.threading.timer/4.3.0/system.threading.timer.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.windows.extensions/6.0.0/system.windows.extensions.6.0.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.xml.readerwriter/4.3.0/system.xml.readerwriter.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/system.xml.xdocument/4.3.0/system.xml.xdocument.4.3.0.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.netcore.app.runtime.linux-x64/7.0.15/microsoft.netcore.app.runtime.linux-x64.7.0.15.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.aspnetcore.app.ref/7.0.15/microsoft.aspnetcore.app.ref.7.0.15.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.aspnetcore.app.runtime.linux-x64/7.0.15/microsoft.aspnetcore.app.runtime.linux-x64.7.0.15.nupkg.sha512",
|
||||
"/home/william/.nuget/packages/microsoft.netcore.app.host.linux-x64/7.0.15/microsoft.netcore.app.host.linux-x64.7.0.15.nupkg.sha512"
|
||||
],
|
||||
"logs": [
|
||||
{
|
||||
"code": "NU1701",
|
||||
"level": "Warning",
|
||||
"warningLevel": 1,
|
||||
"message": "Package 'BCrypt.Net 0.1.0' was restored using '.NETFramework,Version=v4.6.1, .NETFramework,Version=v4.6.2, .NETFramework,Version=v4.7, .NETFramework,Version=v4.7.1, .NETFramework,Version=v4.7.2, .NETFramework,Version=v4.8, .NETFramework,Version=v4.8.1' instead of the project target framework 'net7.0'. This package may not be fully compatible with your project.",
|
||||
"libraryId": "BCrypt.Net",
|
||||
"targetGraphs": [
|
||||
"net7.0"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
10
README.md
10
README.md
@ -4,16 +4,6 @@ This is an integration for ActiveAllocator.
|
||||
|
||||
The type is Transaction Importer, specifically created for interfacing with SimmonsBank's online banking website.
|
||||
|
||||
## Guides
|
||||
|
||||
[Pass parameters to HTTP GET action](https://code-maze.com/aspnetcore-pass-parameters-to-http-get-action/)
|
||||
|
||||
## Dependencies
|
||||
|
||||
[Otp.NET library](https://github.com/kspearrin/Otp.NET)
|
||||
|
||||
[JToken.SelectToken() quick reference](https://www.newtonsoft.com/json/help/html/SelectToken.htm)
|
||||
|
||||
## Dev Environment Setup
|
||||
|
||||
On Archlinux install the following to use dotnet: ```sudo pacman -Sy dotnet-sdk dotnet-runtime aspnet-runtime```.
|
||||
|
Loading…
x
Reference in New Issue
Block a user