예제 #1
0
        public async Task <IActionResult> Add(string hash_сustomer, string hash_executor,
                                              string order_sum, string prepaid_expense, string condition, string is_Done, string is_freze)
        {
            var is_Done_bool  = String2Bool.Convert(is_Done);
            var is_freze_bool = String2Bool.Convert(is_Done);

            User         user         = null;
            Transactions transactions = null;

            if (ModelState.IsValid)
            {
                user = await _context.User.FirstOrDefaultAsync(u => u.Login == User.Identity.Name);

                if (user != null)
                {
                    if (user.balance >= Convert.ToDouble(order_sum))
                    {
                        string contract_hash = await ShaEncoder.GenerateSHA256String($"{order_sum}{prepaid_expense}{DateTime.Now}");

                        var contract = new Contract
                        {
                            hash_сustomer   = user.Hash,
                            hash_еxecutor   = hash_executor,
                            order_sum       = Convert.ToInt32(order_sum) - Convert.ToInt32(prepaid_expense),
                            prepaid_expense = prepaid_expense,
                            is_freze        = true,
                            is_Done         = false,
                            contractID      = contract_hash
                        };

                        var json = JsonConvert.SerializeObject(contract);

                        await _blockchainService.AddBlockAsync(await _blockchainService.generateNextBlockAsync(json, user.Hash, hash_executor));

                        transactions = new Transactions
                        {
                            original_wallet    = user.Hash,
                            destination_wallet = hash_executor,
                            info      = json,
                            timestamp = DateTime.Now.ToString()
                        };

                        user.balance = Convert.ToInt16(prepaid_expense);

                        _context.User.Update(user);
                        await _context.Transactions.AddAsync(transactions);

                        await _context.SaveChangesAsync();

                        return(RedirectToAction("Index", "Home"));
                    }

                    return(Content("Недостаточно средств"));
                }

                ModelState.AddModelError("", "Некорректные логин и(или) пароль");
            }

            return(View());
        }
예제 #2
0
        public async Task <IActionResult> Add([FromQuery] string token)
        {
            var user = await _context.User.FirstOrDefaultAsync(u => u.token == token);

            if (user != null)
            {
                var model = new MedicalModel();
                model.Hash = user.Hash;
                user.token = await ShaEncoder.GenerateSHA256String($"{user.Login}{user.Password}{DateTime.Now}");

                _context.User.Update(user);
                await _context.SaveChangesAsync();

                var codeGenerator = new QRCodeGenerator();
                var webRootPath   = _hostingEnvironment.WebRootPath;

                var medicalQRCode = new QRCode(codeGenerator.CreateQrCode(
                                                   $"http://blockchain.whisperq.ru/medical/add?token={user.token}",
                                                   QRCodeGenerator.ECCLevel.Q));

                var medicalQRImage = medicalQRCode.GetGraphic(10, Color.Black, Color.White,
                                                              (Bitmap)Image.FromFile($"{webRootPath}/images/piedPiper.png"));

                medicalQRImage.Save($"{webRootPath}/images/QR/{user.Login}.jpg");

                return(View(model));
            }

            return(RedirectToAction("Index", "Home"));
        }
예제 #3
0
        public async Task <IActionResult> Index(string site, string organisation)
        {
            var user = await _context.User.FirstOrDefaultAsync(u => u.Login == User.Identity.Name);

            var api = new API
            {
                is_active    = true,
                site         = site,
                organisation = organisation,
                timestamp    = DateTime.Now.ToString(),
                token        = await ShaEncoder.GenerateSHA256String($"{site}{organisation}{DateTime.Now}")
            };

            await _context.Api.AddAsync(api);

            await _context.SaveChangesAsync();

            return(Content("Token: " + api.token));
        }
예제 #4
0
        public async Task <IActionResult> Login(LoginModel model)
        {
            if (ModelState.IsValid)
            {
                var pass = await ShaEncoder.GenerateSHA256String(model.password);

                var user = await _context.User
                           .Include(u => u.Role)
                           .FirstOrDefaultAsync(u => u.Login == model.email && u.Password == pass);

                if (user != null)
                {
                    await Authenticate(user);

                    return(RedirectToAction("Index", "Home"));
                }

                ModelState.AddModelError("", "Некорректные логин и(или) пароль");
            }

            return(View(model));
        }
예제 #5
0
        public async Task <IActionResult> Register(RegisterModel model)
        {
            if (ModelState.IsValid)
            {
                var user = await _context.User.FirstOrDefaultAsync(u => u.Login == model.login);

                if (user == null)
                {
                    user = new User
                    {
                        Login         = model.login,
                        Password      = await ShaEncoder.GenerateSHA256String(model.password),
                        type_of_bloud = model.type_of_blood,
                        Hash          = await ShaEncoder.GenerateSHA256String($"{model.login}{model.password}{model.code_phrase}"),
                        token         = await ShaEncoder.GenerateSHA256String($"{model.login}{model.password}{DateTime.Now}")
                    };

                    var userRole = await _context.Roles.FirstOrDefaultAsync(r => r.Name == "User");

                    if (userRole != null)
                    {
                        user.Role = userRole;
                    }

                    _context.User.Add(user);
                    await _context.SaveChangesAsync();

                    GenerateUserQRCodes(user);

                    await Authenticate(user);

                    return(RedirectToAction("Index", "Home"));
                }

                ModelState.AddModelError("", "Некорректные логин и(или) пароль");
            }

            return(View(model));
        }
예제 #6
0
        public async Task <IActionResult> Emergency([FromQuery] string token)
        {
            var user = await _context.User.FirstOrDefaultAsync(u => u.token == token);

            if (user != null)
            {
                user.token = await ShaEncoder.GenerateSHA256String($"{user.Login}{user.Password}{DateTime.Now}");

                _context.User.Update(user);
                await _context.SaveChangesAsync();

                var codeGenerator = new QRCodeGenerator();
                var webRootPath   = _hostingEnvironment.WebRootPath;

                var emergencyQRCode = new QRCode(codeGenerator.CreateQrCode(
                                                     $"http://blockchain.whisperq.ru/medical/Emergency?token={user.token}",
                                                     QRCodeGenerator.ECCLevel.Q));

                var emergencyQRImage = emergencyQRCode.GetGraphic(10, Color.Black, Color.White,
                                                                  (Bitmap)Image.FromFile($"{webRootPath}/images/piedPiper.png"));

                emergencyQRImage.Save($"{webRootPath}/images/QR/{user.Login}_emerg.jpg");

                List <Medical> medicals = new List <Medical>();
                List <Block>   blocks   = _context.Block.Where(u => u.wallet_hash == user.Hash).ToList();

                foreach (var block in blocks)
                {
                    medicals.Add(JsonConvert.DeserializeObject <Medical>(block.data));
                }

                return(View(medicals));
            }

            return(RedirectToAction("Index", "Home"));
        }
예제 #7
0
 /// <summary>
 /// Calculate hash
 /// </summary>
 /// <param name="index"></param>
 /// <param name="previousHash"></param>
 /// <param name="timestamp"></param>
 /// <param name="data"></param>
 /// <returns></returns>
 public async Task <string> CalculateHashAsync(int index, string previousHash, string timestamp, string data) =>
 await ShaEncoder.GenerateSHA256String(index.ToString() + previousHash + timestamp + data);
예제 #8
0
        public async Task <IActionResult> smartcontractadd([FromQuery] string hash_сustomer, [FromQuery] string hash_еxecutor,
                                                           [FromQuery] string order_sum, [FromQuery] string prepaid_expense, [FromQuery] string condition)
        {
            try
            {
                var contract_hash = await ShaEncoder.GenerateSHA256String($"{order_sum}{prepaid_expense}{DateTime.Now}");

                var contract = new Contract
                {
                    hash_сustomer   = hash_сustomer,
                    hash_еxecutor   = hash_еxecutor,
                    order_sum       = Convert.ToInt32(order_sum) - Convert.ToInt32(prepaid_expense),
                    prepaid_expense = prepaid_expense,
                    is_freze        = true,
                    is_Done         = false,
                    contractID      = contract_hash
                };

                var json = JsonConvert.SerializeObject(contract);
                await _blockchainService.AddBlockAsync(await _blockchainService.generateNextBlockAsync(json, hash_сustomer, hash_еxecutor));

                var transactions = new Transactions
                {
                    original_wallet    = hash_сustomer,
                    destination_wallet = hash_еxecutor,
                    info      = json,
                    timestamp = DateTime.Now.ToString()
                };

                var user = await _context.User.FirstOrDefaultAsync(u => u.Hash == hash_еxecutor);

                user.balance = Convert.ToInt16(prepaid_expense);
                _context.User.Update(user);

                await _context.Transactions.AddAsync(transactions);

                await _context.SaveChangesAsync();

                var data_response = new response_api();
                data_response.request_Info        = new request_info();
                data_response.request_Info.answer = "OK";
                data_response.request_Info.code   = "200";
                data_response.send_data           = new send_data();

                List <Block> blocks = _context.Block.Where(u => u.wallet_hash == hash_сustomer && u.destination_wallet_hash == hash_еxecutor).ToList();

                List <Contract> contracts = new List <Contract>();
                foreach (var block in blocks)
                {
                    contracts.Add(JsonConvert.DeserializeObject <Contract>(block.data));
                }

                data_response.send_data.contracts = contracts;

                return(Content(JsonConvert.SerializeObject(data_response), "application/json"));
            }
            catch
            {
                var answ = new response_api();
                answ.request_Info        = new request_info();
                answ.request_Info.code   = "403";
                answ.request_Info.answer = "BadInfo";

                return(Content(JsonConvert.SerializeObject(answ), "application/json"));
            }
        }