Example #1
0
            public async Task <bool> Handle(IsCorrectPin2Query request, CancellationToken cancellationToken)
            {
                var card = await _context.Cards.FindAsync(_currentUser.CardId);

                if (card is null)
                {
                    throw new EntityNotFoundException("Card", _currentUser.CardId);
                }

                return(_cardManager.VerifyPin2(card, request.Pin2));
            }
Example #2
0
            public async Task <BinaryFile> Handle(SignHashCommand request, CancellationToken cancellationToken)
            {
                var card = await _context.Cards.FindAsync(_currentUser.CardId);

                if (card is null)
                {
                    throw new EntityNotFoundException("Card", _currentUser.CardId);
                }

                if (!_cardManager.VerifyPin2(card, request.Pin2))
                {
                    throw new BadRequestException(new[] { "خطأ رمز PIN2 غير صحيح." });
                }

                var citizen = await _context.CitizenDetails.FindAsync(_currentUser.CitizenId);

                if (citizen is null)
                {
                    throw new EntityNotFoundException("Citizen", card.CitizenId);
                }

                var signature = _digitalSignatureService.SignHash(request.Base64Sha512DataHash, await _cryptoService.DecryptAsync(citizen.PrivateKey));

                var s = citizen.Id + signature;

                var memory = new MemoryStream();
                var writer = new StreamWriter(memory);

                await writer.WriteAsync(s);

                await writer.FlushAsync();

                var name  = Path.GetFileNameWithoutExtension(request.FileName) + ".sign";
                var bytes = memory.ToArray();

                return(new BinaryFile(name, bytes, bytes.Length, "text/plain"));
            }