public bool CreateNewPatientChain(NawContracts nawcdata) { // Create serveral Objects: // Patient stream -> all physician addresses separated by ; // autorisatie stream wordt gevuld met de autorisatie van de medicus ten opzichte van andere streams anders dan zijn/haar eigen // de streams waarop hij/zij toegang heeft zijn abonnementen // de abonnementen kunnen worden ingenomen/ ongedaan gemaakt worden // de stappen // Create stream client var patientAddress = nawcdata.BsnNumber; MultiChain chain = new MultiChain(); chain.CreateNewStream(true, patientAddress); var xml = new XmlSerializer(typeof(NawContracts)); var reader = new System.IO.StringWriter(); xml.Serialize(reader, nawcdata); var datalocation = this.CreateFileBackup(reader.ToString()); chain.PublishMessage(new PublishMessageData { Key = patientnaw, HexString = this.EncryptHexData(datalocation + "|" + ("NogGeenKey").Replace("-", string.Empty).Replace(" ", string.Empty)), StreamName = patientAddress }); chain.CreateNewStream(true, patientAddress + "-css"); chain.Subscribe(patientAddress); return(true); }
public bool RemovePhysicianRights(string patientBsn, string physicianIdentification, string physicianToRemove, string signature) { MultiChain chain = new MultiChain(); var verified = chain.VerifyMessage(new MessageData { address = patientBsn, signature = signature, message = physicianIdentification }) == "true"; if (verified) { var result = chain.GetStreamItemByKey(patientBsn, authorisation); StreamItem streamitem = new StreamItem(); if (result.streamitems.Any()) { streamitem = result.streamitems.Last(); } var data = streamitem.data.Any() ? this.DeEncryptHexData(streamitem.data) : string.Empty; var res = string.Concat(data.Split(';').Where(f => f != physicianToRemove).Select(f => f + ";").ToArray()); if (res.Any()) { data = this.EncryptHexData(res); } var transactionkey = this.GetTransactionKey(physicianIdentification); var transactionId = chain.PublishMessage(new PublishMessageData { Key = transactionkey, HexString = data, StreamName = authorisation }); } return(false); }
public bool AddPhysicianRights(string patientBsn, string physicianIdentification, string signature) { MultiChain chain = new MultiChain(); var verified = chain.VerifyMessage(new MessageData { address = patientBsn, signature = signature, message = physicianIdentification }) == "true"; var result = chain.GetStreamItemByKey(patientBsn, authorisation); StreamItem streamitem = new StreamItem(); if (result.streamitems.Any()) { streamitem = result.streamitems.Last(); } var data = streamitem.data.Any() ? this.DeEncryptHexData(streamitem.data) : string.Empty; data += this.EncryptHexData((data.Any() ? ";" : string.Empty) + physicianIdentification); var transactionkey = this.GetTransactionKey(physicianIdentification); var transactionId = chain.PublishMessage(new PublishMessageData { Key = authorisation, HexString = data, StreamName = authorisation }); return(true); return(false); }
public bool CrossStreamCommunicationPost(string patientBsn, string physicianIdentification, string physician2Identification, string messageToPost, string signature, string transactionId = null) { // Als wij van chain naar chain willen communiceren, dan moeten beide of alle partijen, inzage hebben in alle chains // Aangezien dit niet wenselijk is, kunnen wij ook de transaction Id's opslaan. // Stel voor: // doc A post een vraag -> insert question in stream van doc A // doc B mag niet lezen in stream van doc A // vraag van doc A is gepost in stream van doc A (eigen stream, geen cross stream posts) // doc A -> krijgt transaction Id van vraag -> wordt opgeslagen in streamPatientAddress-crossstreamcomm // doc B krijgt een melding dat er een 'crossstream' communicatie klaar staat // doc B mag vanwege tijdelijke autorisatie op enkel block TxId data lezen in stream van doc A // doc B geeft antwoord in eigen stream (geen cross stream posts) // doc B krijgt TxId terug van de post -> dit TxId wordt gepost in streamPatientAddress-crossstreamcomm onder de TxId van de vraag (Key is zelfde TxId van vraag) // doc A en doc B kunnen historische vraag en antwoord -> van alle posts gekoppeld aan TxId van vraag teruglezen // wanneer doc A verdere vraag uitzet naar doc C wordt ook die gekoppeld onder zelfde TxId -> doc B kan ook resultaat van doc C lezen // Address1 = addres from -> posts question // Address2 = address to -> receives question // patientAddress = adres van patient -> his steams need to be used MultiChain chain = new MultiChain(); var verified = chain.VerifyMessage(new MessageData { address = patientBsn, signature = signature, message = messageToPost }) == "true"; if (verified) { var crossStreamName = patientBsn + "-crossstreamcomm"; var senderStreamName = this.GetChainName(patientBsn, physicianIdentification, items); var transactionkey = this.GetTransactionKey(physicianIdentification); var hexdata = this.EncryptHexData(messageToPost); var TxId = chain.PublishMessage(new PublishMessageData { Key = transactionkey, HexString = hexdata, StreamName = senderStreamName }); var hexTxId = this.EncryptHexData(TxId + "|" + physicianIdentification); var TxIdCross = chain.PublishMessage(new PublishMessageData { Key = transactionId ?? TxId, HexString = hexTxId, StreamName = crossStreamName }); } return(false); }
public bool AddPhysician(string psysicianAddress, string physicianIdentification, string clientBsn, string signature) { // Create serveral Objects: // Authorisation stream // Items stream // autorisatie stream wordt gevuld met de autorisatie van de medicus ten opzichte van andere streams anders dan zijn/haar eigen // de streams waarop hij/zij toegang heeft zijn abonnementen // de abonnementen kunnen worden ingenomen/ ongedaan gemaakt worden MultiChain chain = new MultiChain(); var verified = chain.VerifyMessage(new MessageData { address = psysicianAddress, signature = signature, message = physicianIdentification }) == "true"; var itemStreamname = this.GetChainName(clientBsn, physicianIdentification, items); var accessStreamname = this.GetChainName(clientBsn, physicianIdentification, access); var authorisationStreamname = this.GetChainName(clientBsn, physicianIdentification, authorisation); chain.CreateNewStream(true, itemStreamname); chain.CreateNewStream(true, accessStreamname); chain.CreateNewStream(true, authorisationStreamname); chain.Subscribe(itemStreamname); chain.Subscribe(accessStreamname); chain.Subscribe(authorisation); // toevoegen authorisatie arts var result = chain.GetStreamItemByKey(authorisationStreamname, authorisation); StreamItem streamitem = new StreamItem { data = string.Empty }; if (result != null && result.streamitems.Any()) { streamitem = result.streamitems.Last(); } var data = streamitem.data.Any() ? this.DeEncryptHexData(streamitem.data) : string.Empty; data += this.EncryptHexData((data.Any() ? ";" : string.Empty) + physicianIdentification); var datalocation = this.CreateFileBackup(data); chain.PublishMessage(new PublishMessageData { Key = authorisation, HexString = this.EncryptHexData(datalocation + "|" + ("NogGeenKey").Replace("-", string.Empty).Replace(" ", string.Empty)), StreamName = authorisationStreamname }); return(true); }
public bool AddPhysician(string patientAddress, string physicianAddress, string signature) { // Create serveral Objects: // Authorisation stream // Items stream // autorisatie stream wordt gevuld met de autorisatie van de medicus ten opzichte van andere streams anders dan zijn/haar eigen // de streams waarop hij/zij toegang heeft zijn abonnementen // de abonnementen kunnen worden ingenomen/ ongedaan gemaakt worden // Create stream client MultiChain chain = new MultiChain(); var verified = chain.VerifyMessage(patientAddress, signature, physicianAddress) == "true"; if (verified) { var itemStreamname = this.GetChainName(patientAddress, physicianAddress, "item"); var accessStreamname = this.GetChainName(patientAddress, physicianAddress, "access"); chain.CreateNewStream(true, patientAddress); chain.CreateNewStream(true, accessStreamname); chain.Subscribe(patientAddress); chain.Subscribe(accessStreamname); // toevoegen authorisatie arts var result = chain.GetStreamItemByKey(patientAddress, authorisation); StreamItem streamitem = new StreamItem(); if (result.streamitems.Any()) { streamitem = result.streamitems.Last(); } var data = streamitem.data.Any() ? this.DeEncryptHexData(streamitem.data) : string.Empty; data += this.EncryptHexData((data.Any() ? ";" : string.Empty) + physicianAddress); var transactionId = chain.PublishMessage(authorisation, data); return(true); } return(false); }
public string[] SetChainData(ParameterClass data) { MultiChain chain = new MultiChain(); var verified = chain.VerifyMessage(new MessageData { address = data.Address, signature = data.Signature, message = data.PhysicianId }) == "true"; var datalocation = this.CreateFileBackup(data.DataToStore); chain.PublishMessage(new PublishMessageData { Key = "entry", HexString = this.EncryptHexData(datalocation + "|" + ("NogGeenKey").Replace("-", string.Empty) .Replace(" ", string.Empty)), StreamName = data.Streamname }); return(null); }
public bool AddPhysicianRights(string patientAddress, string physicianAddress, string physicianToAdd, string signature) { MultiChain chain = new MultiChain(); var verified = chain.VerifyMessage(patientAddress, signature, physicianAddress) == "true"; if (verified) { var result = chain.GetStreamItemByKey(patientAddress, authorisation); StreamItem streamitem = new StreamItem(); if (result.streamitems.Any()) { streamitem = result.streamitems.Last(); } var data = streamitem.data.Any() ? this.DeEncryptHexData(streamitem.data) : string.Empty; data += this.EncryptHexData((data.Any() ? ";" : string.Empty) + physicianAddress); var transactionId = chain.PublishMessage(authorisation, data); return(true); } return(false); }