Exemplo n.º 1
0
        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);
        }
Exemplo n.º 2
0
        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");
        }
Exemplo n.º 3
0
        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;
        }
Exemplo n.º 4
0
 public string GetAsSignablePayload()
 {
     return(Coalite.GetAsSignablePayload($"{SignerPublicKey}{Action.ToString()}{ActionPayload}{SignerId}"));
 }