示例#1
0
        public IActionResult SignUp(mltSignUpViewModel mltSignUpViewModel)
        {
            string signPrivateKey = null, agreePrivateKey = null, signPublicKey = null, agreePublicKey = null;
            Assets <UserCredAssetData> userAsset = _bigChainDbService.GetUserAssetFromTypeID(AssetType.Doctor, mltSignUpViewModel.CSMLSID);

            if (userAsset != null)
            {
                ModelState.AddModelError("", "A Doctor profile with that MINC already exists");
                return(View(mltSignUpViewModel));
            }
            var passphrase = mltSignUpViewModel.MLTKeyWord;
            var password   = mltSignUpViewModel.Password;

            EncryptionService.getNewBlockchainUser(out signPrivateKey, out signPublicKey, out agreePrivateKey, out agreePublicKey);
            var userAssetData = new UserCredAssetData
            {
                FirstName       = mltSignUpViewModel.FirstName,
                LastName        = mltSignUpViewModel.LastName,
                ID              = mltSignUpViewModel.CSMLSID,
                Email           = mltSignUpViewModel.Email,
                PrivateKeys     = EncryptionService.encryptPrivateKeys(mltSignUpViewModel.CSMLSID, passphrase, signPrivateKey, agreePrivateKey),
                DateOfRecord    = DateTime.Now,
                SignPublicKey   = signPublicKey,
                AgreePublicKey  = agreePublicKey,
                FingerprintData = new List <string>(),
            };
            var userMetadata = new UserCredMetadata
            {
                hashedPassword = EncryptionService.hashPassword(password)
            };
            var asset = new AssetSaved <UserCredAssetData>
            {
                Type     = AssetType.MLT,
                Data     = userAssetData,
                RandomId = _random.Next(0, 100000)
            };
            var metadata = new MetaDataSaved <UserCredMetadata>
            {
                data = userMetadata
            };

            _bigChainDbService.SendCreateTransactionToDataBase(asset, metadata, signPrivateKey);
            return(RedirectToAction("Login"));
        }
示例#2
0
        public IActionResult Login(MLTLoginViewModel indexViewModel)
        {
            ViewBag.DoctorName = HttpContext.Session.GetString(Globals.currentUserName);
            if (!ModelState.IsValid)
            {
                return(View(indexViewModel));
            }
            string signPrivateKey = null, agreePrivateKey = null;
            Assets <UserCredAssetData> userAsset = _bigChainDbService.GetUserAssetFromTypeID(AssetType.MLT, indexViewModel.CSMLSID);

            if (userAsset == null)
            {
                ModelState.AddModelError("", "We could not find a matching user");
                return(View(indexViewModel));
            }
            var hashedKeys = userAsset.data.Data.PrivateKeys;

            try
            {
                EncryptionService.getPrivateKeyFromIDKeyword(indexViewModel.CSMLSID, indexViewModel.MLTKeyword, hashedKeys, out signPrivateKey, out agreePrivateKey);
            }
            catch
            {
                ModelState.AddModelError("", "Keyword may be incorrect");
                return(View(indexViewModel));
            }
            UserCredMetadata userMetadata = _bigChainDbService.GetMetadataFromAssetPublicKey <UserCredMetadata>(userAsset.id, EncryptionService.getSignPublicKeyStringFromPrivate(signPrivateKey));
            var password = indexViewModel.password;

            if (EncryptionService.verifyPassword(password, userMetadata.hashedPassword))
            {
                HttpContext.Session.SetString(Globals.currentDSPriK, signPrivateKey);
                HttpContext.Session.SetString(Globals.currentDAPriK, agreePrivateKey);
                HttpContext.Session.SetString(Globals.currentUserName, $"{userAsset.data.Data.FirstName} {userAsset.data.Data.LastName}");
                HttpContext.Session.SetString(Globals.currentUserID, userAsset.data.Data.ID);
                return(RedirectToAction("PatientLookUp"));
            }
            else
            {
                ModelState.AddModelError("", "Password or Keyword incorrect.");
                return(View(indexViewModel));
            }
        }