public IActionResult PatientOverview() { ViewBag.DoctorName = HttpContext.Session.GetString(Globals.currentUserName); if (HttpContext.Session.GetString(Globals.currentDSPriK) == null || HttpContext.Session.GetString(Globals.currentDAPriK) == null) { return(RedirectToAction("Login")); } else if (HttpContext.Session.GetString(Globals.currentPSPubK) == null || HttpContext.Session.GetString(Globals.currentPAPubK) == null) { return(RedirectToAction("PatientLookUp")); } else { Assets <PatientCredAssetData> userAsset = _bigChainDbService.GetPatientAssetFromID(HttpContext.Session.GetString(Globals.currentPPHN)); var doctorSignPrivateKey = HttpContext.Session.GetString(Globals.currentDSPriK); var doctorAgreePrivateKey = HttpContext.Session.GetString(Globals.currentDAPriK); var doctorSignPublicKey = EncryptionService.getSignPublicKeyStringFromPrivate(doctorSignPrivateKey); var patientSignPublicKey = HttpContext.Session.GetString(Globals.currentPSPubK); PatientCredMetadata userMetadata = _bigChainDbService.GetMetadataFromAssetPublicKey <PatientCredMetadata>(userAsset.id, patientSignPublicKey); var patientInfo = userAsset.data.Data; var patientOverviewViewModel = new PatientOverviewViewModel { PatientAsset = patientInfo, PatientMetadata = userMetadata, PatientAge = patientInfo.DateOfBirth.CalculateAge() }; return(View(patientOverviewViewModel)); } }
public IActionResult UploadResult(string transID) { ViewBag.DoctorName = HttpContext.Session.GetString(Globals.currentUserName); if (HttpContext.Session.GetString(Globals.currentDSPriK) == null || HttpContext.Session.GetString(Globals.currentDAPriK) == null) { return(RedirectToAction("Login")); } else if (HttpContext.Session.GetString(Globals.currentPSPubK) == null || HttpContext.Session.GetString(Globals.currentPAPubK) == null) { return(RedirectToAction("PatientLookUp")); } else { ViewBag.DoctorName = HttpContext.Session.GetString(Globals.currentUserName); Assets <PatientCredAssetData> userAsset = _bigChainDbService.GetPatientAssetFromID(HttpContext.Session.GetString(Globals.currentPPHN)); var doctorSignPrivateKey = HttpContext.Session.GetString(Globals.currentDSPriK); var doctorAgreePrivateKey = HttpContext.Session.GetString(Globals.currentDAPriK); var doctorSignPublicKey = EncryptionService.getSignPublicKeyStringFromPrivate(doctorSignPrivateKey); var patientSignPublicKey = HttpContext.Session.GetString(Globals.currentPSPubK); PatientCredMetadata userMetadata = _bigChainDbService.GetMetadataFromAssetPublicKey <PatientCredMetadata>(userAsset.id, patientSignPublicKey); var patientInfo = userAsset.data.Data; patientInfo.FingerprintData = null; var testRequisition = _bigChainDbService.GetMetaDataAndAssetFromTransactionId <string, double>(transID); if (testRequisition.metadata.AccessList.Keys.Contains(doctorSignPublicKey)) { var hashedKey = testRequisition.metadata.AccessList[doctorSignPublicKey]; var dataDecryptionKey = EncryptionService.getDecryptedEncryptionKey(hashedKey, doctorAgreePrivateKey); var data = EncryptionService.getDecryptedAssetData(testRequisition.data.Data, dataDecryptionKey); var asset = JsonConvert.DeserializeObject <TestRequisitionAsset>(data); asset.AttachedFile.Data = null; var viewModel = new UploadResultViewModel() { TestData = new TestRequisitionFullData { assetData = asset, Metadata = testRequisition.metadata.data, assetID = testRequisition.id, transID = testRequisition.transID }, PatientAsset = patientInfo, PatientMetadata = userMetadata }; TempData["viewModel"] = JsonConvert.SerializeObject(viewModel); return(View(viewModel)); } else { return(new EmptyResult()); } } }
public IActionResult PatientRecords() { ViewBag.DoctorName = HttpContext.Session.GetString(Globals.currentUserName); if (HttpContext.Session.GetString(Globals.currentDSPriK) == null || HttpContext.Session.GetString(Globals.currentDAPriK) == null) { return(RedirectToAction("Login")); } else if (HttpContext.Session.GetString(Globals.currentPSPubK) == null || HttpContext.Session.GetString(Globals.currentPAPubK) == null) { return(RedirectToAction("PatientLookUp")); } else { Assets <PatientCredAssetData> userAsset = _bigChainDbService.GetPatientAssetFromID(HttpContext.Session.GetString(Globals.currentPPHN)); var doctorSignPrivateKey = HttpContext.Session.GetString(Globals.currentDSPriK); var doctorAgreePrivateKey = HttpContext.Session.GetString(Globals.currentDAPriK); var doctorSignPublicKey = EncryptionService.getSignPublicKeyStringFromPrivate(doctorSignPrivateKey); var patientSignPublicKey = HttpContext.Session.GetString(Globals.currentPSPubK); PatientCredMetadata userMetadata = _bigChainDbService.GetMetadataFromAssetPublicKey <PatientCredMetadata>(userAsset.id, patientSignPublicKey); var prescriptionsList = _bigChainDbService.GetAllTypeRecordsFromDPublicPPublicKey <string, PrescriptionMetadata> (AssetType.Prescription, doctorSignPublicKey, patientSignPublicKey); var prescriptions = new List <PrescriptionFullData>(); foreach (var prescription in prescriptionsList) { var hashedKey = prescription.metadata.AccessList[doctorSignPublicKey]; var dataDecryptionKey = EncryptionService.getDecryptedEncryptionKey(hashedKey, doctorAgreePrivateKey); var data = EncryptionService.getDecryptedAssetData(prescription.data.Data, dataDecryptionKey); var newEntry = new PrescriptionFullData { assetData = JsonConvert.DeserializeObject <Prescription>(data), Metadata = prescription.metadata.data, transID = prescription.transID, assetID = prescription.id }; prescriptions.Add(newEntry); } var patientInfo = userAsset.data.Data; var patientOverviewViewModel = new PatientOverviewViewModel { PatientAsset = patientInfo, PatientMetadata = userMetadata, PatientAge = patientInfo.DateOfBirth.CalculateAge(), Prescriptions = prescriptions.OrderByDescending(p => p.assetData.PrescribingDate).ToList() }; return(View(patientOverviewViewModel)); } }
public IActionResult FillPrescription(string transID) { ViewBag.DoctorName = HttpContext.Session.GetString(Globals.currentUserName); if (HttpContext.Session.GetString(Globals.currentDSPriK) == null || HttpContext.Session.GetString(Globals.currentDAPriK) == null) { return(RedirectToAction("Login")); } else if (HttpContext.Session.GetString(Globals.currentPSPubK) == null || HttpContext.Session.GetString(Globals.currentPAPubK) == null) { return(RedirectToAction("PatientLookUp")); } else { Assets <PatientCredAssetData> userAsset = _bigChainDbService.GetPatientAssetFromID(HttpContext.Session.GetString(Globals.currentPPHN)); var patientSignPublicKey = HttpContext.Session.GetString(Globals.currentPSPubK); PatientCredMetadata userMetadata = _bigChainDbService.GetMetadataFromAssetPublicKey <PatientCredMetadata>(userAsset.id, patientSignPublicKey); var patientInfo = userAsset.data.Data; patientInfo.FingerprintData = null; var doctorSignPrivateKey = HttpContext.Session.GetString(Globals.currentDSPriK); var doctorAgreePrivateKey = HttpContext.Session.GetString(Globals.currentDAPriK); var doctorSignPublicKey = EncryptionService.getSignPublicKeyStringFromPrivate(doctorSignPrivateKey); var prescriptionData = _bigChainDbService.GetMetaDataAndAssetFromTransactionId <string, PrescriptionMetadata>(transID); var hashedKey = prescriptionData.metadata.AccessList[doctorSignPublicKey]; var dataDecryptionKey = EncryptionService.getDecryptedEncryptionKey(hashedKey, doctorAgreePrivateKey); var data = EncryptionService.getDecryptedAssetData(prescriptionData.data.Data, dataDecryptionKey); var viewModel = new FillPrescriptionViewModel() { PatientAsset = patientInfo, PatientMetadata = userMetadata, PrescriptionData = new PrescriptionFullData { assetData = JsonConvert.DeserializeObject <Prescription>(data), Metadata = prescriptionData.metadata.data, transID = prescriptionData.transID, assetID = prescriptionData.id } }; TempData["viewModel"] = JsonConvert.SerializeObject(viewModel); return(View(viewModel)); } }
public IActionResult Login(PatientLoginViewModel indexViewModel) { ViewBag.UserName = HttpContext.Session.GetString(Globals.currentUserName); if (!ModelState.IsValid) { return(View(indexViewModel)); } string signPrivateKey = null, agreePrivateKey = null; Assets <PatientCredAssetData> userAsset = _bigChainDbService.GetPatientAssetFromID(indexViewModel.PatientPHN); 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.PatientPHN, indexViewModel.PatientKeyword, hashedKeys, out signPrivateKey, out agreePrivateKey); } catch { ModelState.AddModelError("", "Keyword may be incorrect"); return(View(indexViewModel)); } PatientCredMetadata userMetadata = _bigChainDbService.GetMetadataFromAssetPublicKey <PatientCredMetadata>(userAsset.id, userAsset.data.Data.SignPublicKey); var password = indexViewModel.password; if (EncryptionService.verifyPassword(password, userMetadata.hashedPassword)) { HttpContext.Session.SetString(Globals.currentPSPriK, signPrivateKey); HttpContext.Session.SetString(Globals.currentPAPriK, agreePrivateKey); HttpContext.Session.SetString(Globals.currentPSPubK, userAsset.data.Data.SignPublicKey); HttpContext.Session.SetString(Globals.currentPAPubK, userAsset.data.Data.AgreePublicKey); HttpContext.Session.SetString(Globals.currentUserName, $"{userMetadata.FirstName} {userMetadata.LastName}"); HttpContext.Session.SetString(Globals.currentUserID, userAsset.data.Data.ID); return(RedirectToAction("PatientOverview")); } else { ModelState.AddModelError("", "Password or Keyword incorrect."); return(View(indexViewModel)); } }
public IActionResult EditProfile(PatientCredMetadata patientCredMetadata) { Assets <PatientCredAssetData> userAsset = _bigChainDbService.GetPatientAssetFromID(HttpContext.Session.GetString(Globals.currentUserID)); var patientSignPublicKey = HttpContext.Session.GetString(Globals.currentPSPubK); var patientSignPrivateKey = HttpContext.Session.GetString(Globals.currentPSPriK); var transaction = _bigChainDbService.GetMetadataIDFromAssetPublicKey <PatientCredMetadata>(userAsset.id, patientSignPublicKey); var transID = transaction.Id ?? userAsset.id; patientCredMetadata.hashedPassword = transaction.Metadata.data.hashedPassword; var newMetadata = new MetaDataSaved <PatientCredMetadata> { data = patientCredMetadata }; _bigChainDbService.SendTransferTransactionToDataBase(userAsset.id, newMetadata, patientSignPrivateKey, patientSignPublicKey, transID); return(RedirectToAction("PatientOverview")); }
public IActionResult EditProfile() { ViewBag.UserName = HttpContext.Session.GetString(Globals.currentUserName); if (HttpContext.Session.GetString(Globals.currentPSPubK) == null || HttpContext.Session.GetString(Globals.currentPAPubK) == null) { return(RedirectToAction("Login")); } else { Assets <PatientCredAssetData> userAsset = _bigChainDbService.GetPatientAssetFromID(HttpContext.Session.GetString(Globals.currentUserID)); var patientSignPublicKey = HttpContext.Session.GetString(Globals.currentPSPubK); PatientCredMetadata userMetadata = _bigChainDbService.GetMetadataFromAssetPublicKey <PatientCredMetadata>(userAsset.id, patientSignPublicKey); //Description: page where patient can edit their basic personal information return(View(userMetadata)); } }
public IActionResult RequestAccess() { ViewBag.DoctorName = HttpContext.Session.GetString(Globals.currentUserName); if (HttpContext.Session.GetString(Globals.currentDSPriK) == null || HttpContext.Session.GetString(Globals.currentDAPriK) == null) { return(RedirectToAction("Login")); } else if (HttpContext.Session.GetString(Globals.currentPSPubK) == null || HttpContext.Session.GetString(Globals.currentPAPubK) == null) { return(RedirectToAction("PatientLookUp")); } else { Assets <PatientCredAssetData> userAsset = _bigChainDbService.GetPatientAssetFromID(HttpContext.Session.GetString(Globals.currentPPHN)); var patientSignPublicKey = HttpContext.Session.GetString(Globals.currentPSPubK); PatientCredMetadata userMetadata = _bigChainDbService.GetMetadataFromAssetPublicKey <PatientCredMetadata>(userAsset.id, patientSignPublicKey); ViewBag.PatientName = userMetadata.FirstName + " " + userMetadata.LastName; ViewBag.PatientID = userAsset.data.Data.ID; return(View()); } }
public IActionResult PatientRecords() { ViewBag.DoctorName = HttpContext.Session.GetString(Globals.currentUserName); if (HttpContext.Session.GetString(Globals.currentDSPriK) == null || HttpContext.Session.GetString(Globals.currentDAPriK) == null) { return(RedirectToAction("Login")); } else if (HttpContext.Session.GetString(Globals.currentPSPubK) == null || HttpContext.Session.GetString(Globals.currentPAPubK) == null) { return(RedirectToAction("PatientLookUp")); } else { Assets <PatientCredAssetData> userAsset = _bigChainDbService.GetPatientAssetFromID(HttpContext.Session.GetString(Globals.currentPPHN)); var doctorSignPrivateKey = HttpContext.Session.GetString(Globals.currentDSPriK); var doctorAgreePrivateKey = HttpContext.Session.GetString(Globals.currentDAPriK); var doctorSignPublicKey = EncryptionService.getSignPublicKeyStringFromPrivate(doctorSignPrivateKey); var patientSignPublicKey = HttpContext.Session.GetString(Globals.currentPSPubK); PatientCredMetadata userMetadata = _bigChainDbService.GetMetadataFromAssetPublicKey <PatientCredMetadata>(userAsset.id, patientSignPublicKey); var testRequisitionList = _bigChainDbService.GetAllTypeRecordsFromDPublicPPublicKey <string, double> (AssetType.TestRequisition, doctorSignPublicKey, patientSignPublicKey); Dictionary <string, string> testResults = null; if (testRequisitionList.Any()) { testResults = _bigChainDbService.GetAssociatedTestResults(testRequisitionList); } var testRequisitions = new List <TestRequisitionFullData>(); foreach (var testrequisition in testRequisitionList) { var hashedKey = testrequisition.metadata.AccessList[doctorSignPublicKey]; var dataDecryptionKey = EncryptionService.getDecryptedEncryptionKey(hashedKey, doctorAgreePrivateKey); var data = EncryptionService.getDecryptedAssetData(testrequisition.data.Data, dataDecryptionKey); var newEntry = new TestRequisitionFullData { assetData = JsonConvert.DeserializeObject <TestRequisitionAsset>(data), Metadata = testrequisition.metadata.data, assetID = testrequisition.id, transID = testrequisition.transID }; if (testResults != null && testResults.Keys.Contains(testrequisition.id)) { var decryptedResultFile = EncryptionService.getDecryptedAssetData(testResults[testrequisition.id], dataDecryptionKey); newEntry.ResultFile = JsonConvert.DeserializeObject <FileData>(decryptedResultFile); } testRequisitions.Add(newEntry); } var patientInfo = userAsset.data.Data; var patientOverviewViewModel = new PatientOverviewViewModel { PatientAsset = patientInfo, PatientMetadata = userMetadata, PatientAge = patientInfo.DateOfBirth.CalculateAge(), TestRequisitions = testRequisitions.OrderByDescending(p => p.assetData.DateOrdered).ToList() }; return(View(patientOverviewViewModel)); } }
public IActionResult PatientSignUp(PatientSignUpViewModel patientSignUpViewModel) { // Description: Registers a patient up for a MedNet account ViewBag.DoctorName = HttpContext.Session.GetString(Globals.currentUserName); string signPrivateKey = null, agreePrivateKey = null, signPublicKey = null, agreePublicKey = null; Assets <PatientCredAssetData> userAsset = _bigChainDbService.GetPatientAssetFromID(patientSignUpViewModel.PHN); // Check if PHN is already in use if (userAsset != null) { ModelState.AddModelError("", "A Patient profile with that PHN already exists"); return(View(patientSignUpViewModel)); } // Register fingerprint information int numScans = 5; List <Image> fpList = FingerprintService.authenticateFP("24.84.225.22", numScans); List <byte[]> fpdb = new List <byte[]>(); if (fpList.Count > numScans) { ModelState.AddModelError("", "Something went wrong with the fingerprint scan, try again."); return(View(patientSignUpViewModel)); } // Parse the input data for user registration var passphrase = patientSignUpViewModel.KeyWord; var password = patientSignUpViewModel.Password; // Encrypt fingerprint data List <string> encrList = new List <string>(); foreach (var fp in fpList) { byte[] fpByte = FingerprintService.imgToByte(fp); string encrStr = EncryptionService.encryptFingerprintData(patientSignUpViewModel.PHN, passphrase, fpByte); encrList.Add(encrStr); } // Create a user for the Blockchain EncryptionService.getNewBlockchainUser(out signPrivateKey, out signPublicKey, out agreePrivateKey, out agreePublicKey); // Create the user Asset var userAssetData = new PatientCredAssetData { ID = patientSignUpViewModel.PHN, DateOfBirth = patientSignUpViewModel.DateOfBirth, PrivateKeys = EncryptionService.encryptPrivateKeys(patientSignUpViewModel.PHN, passphrase, signPrivateKey, agreePrivateKey), DateOfRecord = DateTime.Now, SignPublicKey = signPublicKey, AgreePublicKey = agreePublicKey, FingerprintData = encrList, }; // Encrypt the user's password in the metadata var userMetadata = new PatientCredMetadata { FirstName = patientSignUpViewModel.FirstName, LastName = patientSignUpViewModel.LastName, Email = patientSignUpViewModel.Email, hashedPassword = EncryptionService.hashPassword(password) }; // Save the user Asset and Metadata var asset = new AssetSaved <PatientCredAssetData> { Type = AssetType.Patient, Data = userAssetData, RandomId = _random.Next(0, 100000) }; var metadata = new MetaDataSaved <PatientCredMetadata> { data = userMetadata }; // Send the user's information to the Blockchain database _bigChainDbService.SendCreateTransactionToDataBase(asset, metadata, signPrivateKey); return(RedirectToAction("PatientLookUp")); }