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 string[] GetChainData(ParameterClass data)
        {
            MultiChain chain    = new MultiChain();
            var        verified = chain.VerifyMessage(new MessageData {
                address = data.Address, signature = data.Signature, message = data.PhysicianId
            }) == "true";
            var res = chain.GetStreamKeys(data.Streamname);

            var autorisatieStream = this.GetChainName(data.PatientId, data.PhysicianId, authorisation);
            var streamitems       = chain.GetStreamItemByKey(autorisatieStream, authorisation);
            var result            = streamitems == null ? new StreamItem[0] : streamitems.streamitems.ToArray();

            if (result.Any() && this.DeEncryptHexData(result.Last().data).Split(';').Select(f => data.PhysicianId)
                .ToArray().Any())
            {
                var linkarray = new List <string>();
                foreach (var i in res.streamkeys)
                {
                    linkarray.AddRange(chain.GetStreamItemByKey(data.Streamname, i.key).streamitems.Select(f => this.DeEncryptHexData(f.data)).ToArray());
                }

                var datalist = linkarray.Select(f => File.ReadAllText(f.Split('|')[0])).ToArray();

                return(datalist.ToArray());
            }

            return(null);
        }
        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 string[] CrossStreamCommunicationRead(string patientBsn, string transactionId, string signature)
        {
            // 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 = transactionId
            }) == "true";

            if (verified)
            {
                List <string> dataitems = new List <string>();

                var crossStreamName = patientBsn + "-crossstreamcomm";
                var result          = chain.GetStreamItemByKey(crossStreamName, transactionId);

                var data = new List <string>();
                data.AddRange(result.streamitems.Select(f => this.DeEncryptHexData(f.data)).ToArray());

                foreach (var i in data)
                {
                    var TxId    = i.Split('|')[0];
                    var address = i.Split('|')[1];

                    var chainname = this.GetChainName(patientBsn, address, items);
                    var chaindata = chain.GetStreamItemByKey(chainname, TxId);

                    var originaldata = chaindata.streamitems.Select(f => this.DeEncryptHexData(f.data)).ToArray();
                    dataitems.AddRange(originaldata);
                }

                return(dataitems.ToArray());
            }

            return(new string[0]);
        }
        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);
        }
Exemple #6
0
        public bool CrossStreamCommunication(string patientAddress, string address1, string address2, 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(patientAddress, signature, messageToPost) == "true";

            if (verified)
            {
                if (transactionId != null)
                {
                }
                else
                {
                }

                var        result     = chain.GetStreamItemByKey(patientAddress + "-crossstreamcomm", 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(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);
        }
Exemple #8
0
        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);
        }
Exemple #10
0
        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);
        }