private Coalite GenerateCoalite(int fullSecondStamp) { var coalid = Guid.NewGuid().ToString(); var payload = new CoalitePayload(new List <CoaliteSignature>()); var serializedPayload = JObject.FromObject(payload).ToString(Newtonsoft.Json.Formatting.None); var coalite = new Coalite(coalid, serializedPayload, fullSecondStamp); coalite.SignCoalite(_rsa, CoaliteAction.EMIT, "", _serverPublicKey, "System"); return(coalite); }
protected override async Task ExecuteAsync(CancellationToken stoppingToken) { do { if (stoppingToken.IsCancellationRequested) { break; } var now = DateTime.UtcNow; var diffSeconds = (now - _baseDate).TotalSeconds; int fullSecondStamp = (int)Math.Floor(diffSeconds); lock (_dblock) { var dbcontext = GetDBConnection(); var coalite = dbcontext.Coalites .Where(c => c.FullSecondStamp == fullSecondStamp) .FirstOrDefault(); if (coalite == null) { _lastCoalite = GenerateCoalite(fullSecondStamp); //previous version which saves all coalites //dbcontext.Add(newCoalite); //dbcontext.SaveChanges(); } } var nextNow = DateTime.UtcNow; var nextDiffSeconds = (nextNow - _baseDate).TotalSeconds; int nextFullSecondStamp = (int)Math.Floor(nextDiffSeconds); double awaitSeconds = 0.0; int fdiff = nextFullSecondStamp - fullSecondStamp; if (fdiff - 1 > 0) { var coalitesLate = fdiff - 1; _logger.LogWarning($"{coalitesLate} Coalites Lost ! Hurrying up..."); continue; } else if (fdiff == 1) { // Already in next second, but don't worry, there's still time. continue; } // still in same second awaitSeconds = 1.0 - (nextDiffSeconds - nextFullSecondStamp); _logger.LogInformation($"Waiting {awaitSeconds}s"); await Task.Delay(TimeSpan.FromSeconds(awaitSeconds), stoppingToken); } while (true); _logger.LogWarning("Execution cancelled"); }
public Coaliter(IConfiguration configuration, ILogger <Coaliter> logger) { _keypath = configuration["PrivateKey"]; _pubKeyPath = configuration["PublicKey"]; _passphrase = configuration["Keypassphrase"]; var keyData = File.ReadAllText(_keypath); _serverPublicKey = File.ReadAllText(_pubKeyPath).Trim(); _rsa = RSA.Create(); _rsa.ImportFromPem(new ReadOnlySpan <char>(keyData.ToCharArray())); _connectionString = configuration["State:ConnectionString"]; _connectionOptionsBuilder = new DbContextOptionsBuilder <CoaliteDBContext>(); _connectionOptionsBuilder.UseSqlite(_connectionString); _dblock = new object(); _logger = logger; var dbcontext = GetDBConnection(); dbcontext.Database.EnsureCreated(); // simple db = simple approach. _lastCoalite = null; }
public string GetAsSignablePayload() { return(Coalite.GetAsSignablePayload($"{SignerPublicKey}{Action.ToString()}{ActionPayload}{SignerId}")); }