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")); }
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)); } }