---
title: Developing a Secure Messaging App for Telehealth with React Using Virgil Security, Higher-Order Components and React Context API – WebRTC.ventures
description: Security is the most important thing to keep in mind when developing any kind of communications platform. This is especially important when your application processes PHI, or protected health information, because regulatory laws like HIPAA make require this information to be secured in-transit and at-rest.
image: https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/virgil.png
---

[Skip to content](https://blog.webrtc.ventures/2019/06/developing-a-secure-messaging-app-for-telehealth-with-react-using-virgil-security-higher-order-components-and-react-context-api#main-content)

![WebRTC.ventures](https://blog.webrtc.ventures/hubfs/logo-main-light.svg)

- [WebRTC Services](https://webrtc.ventures/webrtc-development-services/)
  
  Show submenu for WebRTC Services 
  
    - [Assess](https://webrtc.ventures/services/assess/)
    - [Build](https://webrtc.ventures/services/build/)
    - [Integrate](https://webrtc.ventures/services/integrate/)
    - [Test](https://webrtc.ventures/services/test/)
    - [Manage](https://webrtc.ventures/services/manage/)
    - [Migrating From Twilio Video](https://webrtc.ventures/twilio-video/)
- Our Partners
  
  Show submenu for Our Partners 
  
    - [Amazon Chime SDK](https://webrtc.ventures/partners/amazon-chime-sdk/)
- Stories of Success
  
  Show submenu for Stories of Success 
  
    - [Remote Video Interpreting Platform with Agent Routing](https://webrtc.ventures/successes/remote-video-translation-platform/)
    - [WebRTC to SIP Gateway for ASL Interpreters](https://webrtc.ventures/successes/webrtc-to-sip-gateway-for-asl-interpreters/)
    - [Audio Listening Device to Improve Surgical Outcomes](https://webrtc.ventures/successes/audio-listening-device-to-improve-surgical-outcomes/)
    - [Albania’s First Telemedicine Platform](https://webrtc.ventures/successes/albanias-first-telemedicine-platform/)
    - [Automated Video Storytelling with the Amazon Chime SDK](https://webrtc.ventures/successes/automated-video-storytelling-with-the-amazon-chime-sdk/)
    - [Large Scale Video Conferencing](https://webrtc.ventures/successes/large-scale-video-conferencing/)
    - [Broadcasting and Webcast Control Room](https://webrtc.ventures/successes/live-video-broadcasting-and-webcast-control-room/)
- WebRTC Resources
  
  Show submenu for WebRTC Resources 
  
    - [WebRTC Live](https://webrtc.ventures/webrtc-live/)
    - [WebRTC Tips](https://www.youtube.com/playlist?list=PLayYqdnyegt3QvxX-Rt6wbFIK8727Z5Oz)
    - [WebRTC.ventures Blog](https://webrtc.ventures/blog/)
    - [Migrating From Twilio Video](https://webrtc.ventures/twilio-video/)
    - [WebRTC.ventures Training Program](https://webrtc.ventures/webrtc-ventures-training-program/)
- [About Us](https://webrtc.ventures/our-team/)
  
  Show submenu for About Us 
  
    - [Blog](https://webrtc.ventures/blog/)
    - [Our Team](https://webrtc.ventures/our-team/)
    - [Jobs](https://webrtc.ventures/jobs/)

Open main navigation

Close main navigation

- [WebRTC Services](https://webrtc.ventures/webrtc-development-services/)
  
  Show submenu for WebRTC Services 
  
    - [Assess](https://webrtc.ventures/services/assess/)
    - [Build](https://webrtc.ventures/services/build/)
    - [Integrate](https://webrtc.ventures/services/integrate/)
    - [Test](https://webrtc.ventures/services/test/)
    - [Manage](https://webrtc.ventures/services/manage/)
    - [Migrating From Twilio Video](https://webrtc.ventures/twilio-video/)
- Our Partners
  
  Show submenu for Our Partners 
  
    - [Amazon Chime SDK](https://webrtc.ventures/partners/amazon-chime-sdk/)
- Stories of Success
  
  Show submenu for Stories of Success 
  
    - [Remote Video Interpreting Platform with Agent Routing](https://webrtc.ventures/successes/remote-video-translation-platform/)
    - [WebRTC to SIP Gateway for ASL Interpreters](https://webrtc.ventures/successes/webrtc-to-sip-gateway-for-asl-interpreters/)
    - [Audio Listening Device to Improve Surgical Outcomes](https://webrtc.ventures/successes/audio-listening-device-to-improve-surgical-outcomes/)
    - [Albania’s First Telemedicine Platform](https://webrtc.ventures/successes/albanias-first-telemedicine-platform/)
    - [Automated Video Storytelling with the Amazon Chime SDK](https://webrtc.ventures/successes/automated-video-storytelling-with-the-amazon-chime-sdk/)
    - [Large Scale Video Conferencing](https://webrtc.ventures/successes/large-scale-video-conferencing/)
    - [Broadcasting and Webcast Control Room](https://webrtc.ventures/successes/live-video-broadcasting-and-webcast-control-room/)
- WebRTC Resources
  
  Show submenu for WebRTC Resources 
  
    - [WebRTC Live](https://webrtc.ventures/webrtc-live/)
    - [WebRTC Tips](https://www.youtube.com/playlist?list=PLayYqdnyegt3QvxX-Rt6wbFIK8727Z5Oz)
    - [WebRTC.ventures Blog](https://webrtc.ventures/blog/)
    - [Migrating From Twilio Video](https://webrtc.ventures/twilio-video/)
    - [WebRTC.ventures Training Program](https://webrtc.ventures/webrtc-ventures-training-program/)
- [About Us](https://webrtc.ventures/our-team/)
  
  Show submenu for About Us 
  
    - [Blog](https://webrtc.ventures/blog/)
    - [Our Team](https://webrtc.ventures/our-team/)
    - [Jobs](https://webrtc.ventures/jobs/)
- [Contact us](https://webrtc.ventures/contact/)

[Contact us](https://webrtc.ventures/contact/)

 Jun 11, 2019 12:00:00 AM

# Developing a Secure Messaging App for Telehealth with React Using Virgil Security, Higher-Order Components and React Context API

[Hector Zelaya](https://blog.webrtc.ventures/author/hector-zelaya)

Share: [linkedin-in icon](http://www.linkedin.com/shareArticle?mini=true&url=https://blog.webrtc.ventures/2019/06/developing-a-secure-messaging-app-for-telehealth-with-react-using-virgil-security-higher-order-components-and-react-context-api) [X Twitter icon](https://twitter.com/intent/tweet?url=https://blog.webrtc.ventures/2019/06/developing-a-secure-messaging-app-for-telehealth-with-react-using-virgil-security-higher-order-components-and-react-context-api) [envelope icon](mailto:?body=https://blog.webrtc.ventures/2019/06/developing-a-secure-messaging-app-for-telehealth-with-react-using-virgil-security-higher-order-components-and-react-context-api)

The most important thing to keep in mind when developing any kind of communications platform is **security**. This is especially important when processing PHI, or protected health information, because HIPAA requires this information to be secured in-transit and at-rest.

Today, we’ll learn about a tool from our partners at Virgil Security that allows us to secure PHI. We’ll also take a look at the React Context APR and higher-order components for the React’s ecosystem.

## Overview of the App

We will build a basic messaging app. While it won’t be production-ready, it will help you understand the basic flow of improving PHI security and protection in a messaging application. After users sign up, they’ll be able to exchange messages with other registered users. User authentication and message storage are handled with Firebase. Messages are encrypted using Virgil Security tools.

## Setting up the Services

You’ll need a Firebase project and a Virgil account.

#### Setting up a Firebase Project

Follow these steps to set up a Firebase project:

1. Log into your Google account. You can’t use Firebase without one.
2. Head to [Firebase console](https://console.firebase.google.com/) and click “Add Project.”
3. Complete the required information and click “Create Project.”
4. After the project is created, go to “Authentication” and click “Set up sign-in method.”
5. Enable “Email/Password” and click “Save.”

Now follow these steps to create a Realtime Database:

1. Click “Database.”
2. Look for “Realtime Database” and click “Create database.”
3. For security rules, select “Start in test mode” and click “Enable.”

Keep this tab open. We’ll come back to it in a minute.

#### Creating a Virgil App

Create an account on the [Virgil Security page](https://dashboard.virgilsecurity.com/signup). Once you log in, it will ask you to create a new application. Give it a name and click “Add end-to-end encryption to product.” Then click “Create Application.”

#### Setting up the Backend

We’ll use Firebase to host the backend of our application. The backend will authorize the requests we make from our client to the Virgil Security platform.

Head over to the [Github repo of the sample app](https://github.com/VirgilSecurity/virgil-e3kit-firebase-func) provided by Virgil and follow the instructions there. After deployment, write down the URL of the new function. You’ll need it later. It will look like this:

**https://YOUR\_FUNCTION\_URL.cloudfunctions.net/api**

#### Get the Sample App

Now, head over to the [Github repo of our application](https://github.com/agilityfeat/secure-messaging-app-client) and clone it locally. We’ll make some changes to it.

First, open the *src/components/EThree/withEThree.js* file and replace the function’s URL with the one you wrote down. Make sure the URL ends with the “/virgil-jwt” prefix.

Next, we need to add our firebase credentials. Go to the Firebase project dashboard and click on “Project Overview.” Then click the icon to add Firebase to web applications. Set a name for the application and copy the credentials.

Now, open the *src/components/Firebase/config.js.sample* and paste the values. Rename the file to *config.js*.

## How Encryption Works

When a user registers in the app, we also need to register them in the Virgil platform. Registration consists of creating a pair of public-private keys on the user’s device. The private key is stored on their device and the public key is uploaded to the platform.

Now let’s imagine a fictional conversation between two users, Sally and Molly. Both of them are registered in the app, so their keys are already created.

Sally hated the Game of Thrones finale and wants to tell Molly, so she writes a message and clicks “Send.” The application sends a request to the platform asking for Molly’s public key, which encrypts the message.

This encryption mechanism ensures that the text stored in Firebase’s database can’t be read by anyone except Molly. Because Molly has the private key that corresponds with the public key used to encrypt the message, she can decrypt Sally’s message and read it.

To make these requests to the platform, we need to create a client, authorize it with the backend, and make it available throughout the React application. This is where the React Context API and higher-order components come in.

## React Context API & Higher-Order Components

**React Context API** allows us to pass Virgil’s client through React’s component tree without having to do so manually. **Higher-order component** is a technique that reuses the required logic to gain access to the client.

#### Context

Let’s review the files that make this possible. We’ll start with *src/components/EThree/context.js*.

![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_50_36-PM-1024x136-1.png?width=1024&height=136&name=Screen-Shot-2019-06-10-at-3_50_36-PM-1024x136-1.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_50_36-PM-1024x136-1.png?width=1024&height=136&name=Screen-Shot-2019-06-10-at-3_50_36-PM-1024x136-1.png)

Here, we simply create a new context called EThreeContext by calling the *createContext* function set to null.

To use this context, we need to define a provider to set the value and a consumer to use it. This definition is required on each React component that would use the value, so instead of repeating code, we will create a higher-order component that implements the logic and passes it to a regular component. The new component will have the required code to consume the value of the context.

#### Providing Value to the Context

Our higher-order component is defined in the *src/components/EThree/withEThree.js* file. Let’s take a look at the steps taken to provide value to the context.

First, see how we comply with the aforementioned definition. Our component is a function that takes another component as a parameter and returns yet another component. We used another higher-order component to provide Firebase’s related logic.

![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_52_19-PM-1024x242.png?width=1024&height=242&name=Screen-Shot-2019-06-10-at-3_52_19-PM-1024x242.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_52_19-PM-1024x242.png?width=1024&height=242&name=Screen-Shot-2019-06-10-at-3_52_19-PM-1024x242.png)

Once a user authenticates within the app, we initialize our client by sending a request to the backend function that contains the user’s identity. The backend returns a JWT token that enables our React application to make requests to the Virgil platform.

The response that the Virgil platform gives is asynchronous, so we create a promise to handle it. This promise is set to the state of the component.

We need to do all of this as soon the component renders. The *componentDidMount* function is the perfect place to do it.

![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_53_06-PM-1024x529-1.png?width=1024&height=529&name=Screen-Shot-2019-06-10-at-3_53_06-PM-1024x529-1.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_53_06-PM-1024x529-1.png?width=1024&height=529&name=Screen-Shot-2019-06-10-at-3_53_06-PM-1024x529-1.png)

The *fetchToken* function makes the request to the backend.

![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_53_51-PM-1024x529-1.png?width=1024&height=529&name=Screen-Shot-2019-06-10-at-3_53_51-PM-1024x529-1.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_53_51-PM-1024x529-1.png?width=1024&height=529&name=Screen-Shot-2019-06-10-at-3_53_51-PM-1024x529-1.png)

Finally, we add a provider in the *render* function so the component can consume the value of the context.

![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_54_36-PM-1024x294.png?width=1024&height=294&name=Screen-Shot-2019-06-10-at-3_54_36-PM-1024x294.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_54_36-PM-1024x294.png?width=1024&height=294&name=Screen-Shot-2019-06-10-at-3_54_36-PM-1024x294.png)

The last thing we need to do is wrap the higher-order component around the app. In the *src/components/App/index.js* file, we also set an additional component that provides our app with authentication capabilities. We’ll use the [recompose module](https://github.com/acdlite/recompose) to set both of our components now.

![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_55_11-PM-1024x289.png?width=1024&height=289&name=Screen-Shot-2019-06-10-at-3_55_11-PM-1024x289.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_55_11-PM-1024x289.png?width=1024&height=289&name=Screen-Shot-2019-06-10-at-3_55_11-PM-1024x289.png)

## Registering Users

Now that we have our client initialized, we can make authenticated requests to the Virgil platform. The first thing we need to do is register users with it. We will do that at sign-up.

In the */src/components/SignUp/index.js* file, we’ll create a consumer of the context and pass its value as a value to be used by the sign-up process.

![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_56_07-PM-1024x372.png?width=1024&height=372&name=Screen-Shot-2019-06-10-at-3_56_07-PM-1024x372.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_56_07-PM-1024x372.png?width=1024&height=372&name=Screen-Shot-2019-06-10-at-3_56_07-PM-1024x372.png)

Then we call the *register* function after the user has been created.

![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_56_41-PM-1024x425.png?width=1024&height=425&name=Screen-Shot-2019-06-10-at-3_56_41-PM-1024x425.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_56_41-PM-1024x425.png?width=1024&height=425&name=Screen-Shot-2019-06-10-at-3_56_41-PM-1024x425.png)

## Encrypting and Decrypting Messages

Now that users are registered, we’re able to encrypt and decrypt messages. To do this, we request the public keys of the users that are currently registered. We’ll use these keys to encrypt and decrypt the messages.

In the *src/components/ChatRoom/index.js* file, we can see the logic that sends messages and retrieves them from Firebase.

![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_57_54-PM-825x1024.png?width=825&height=1024&name=Screen-Shot-2019-06-10-at-3_57_54-PM-825x1024.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_57_54-PM-825x1024.png?width=825&height=1024&name=Screen-Shot-2019-06-10-at-3_57_54-PM-825x1024.png)

## Running the App

Now we’re ready to see our application run. Using a terminal, navigate to the project folder and install Node dependencies. Then execute it.

![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_59_34-PM.png?width=111&height=52&name=Screen-Shot-2019-06-10-at-3_59_34-PM.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-3_59_34-PM.png?width=111&height=52&name=Screen-Shot-2019-06-10-at-3_59_34-PM.png)

Open two different browser windows, register two different users, and try to send a message.

![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-09-at-8_04_30-PM-1024x301-1.png?width=1024&height=301&name=Screen-Shot-2019-06-09-at-8_04_30-PM-1024x301-1.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-09-at-8_04_30-PM-1024x301-1.png?width=1024&height=301&name=Screen-Shot-2019-06-09-at-8_04_30-PM-1024x301-1.png)

Let’s take a look at how these messages are stored on Firebase.

![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-4_01_25-PM-1024x369-1.png?width=438&height=158&name=Screen-Shot-2019-06-10-at-4_01_25-PM-1024x369-1.png) ![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/Screen-Shot-2019-06-10-at-4_01_25-PM-1024x369-1.png?width=438&height=158&name=Screen-Shot-2019-06-10-at-4_01_25-PM-1024x369-1.png)

That’s it! You’ve learned the basic flow for building a secure messaging application for telehealth with React using Virgil Security, higher-order components, and React Context API. Thank you to Robin Wieruch for his [awesome tutorial](https://www.robinwieruch.de/complete-firebase-authentication-react-tutorial/) on Firebase authentication with React.

[Contact us](https://webrtc.ventures/contact/) to learn more about how we can help you with your telehealth needs today!

[CPaaS](https://blog.webrtc.ventures/tag/cpaas), [Managed Services](https://blog.webrtc.ventures/tag/managed-services), [Events](https://blog.webrtc.ventures/tag/events), [Video Conferencing](https://blog.webrtc.ventures/tag/video-conferencing), [Real Time Weekly](https://blog.webrtc.ventures/tag/real-time-weekly), [WebRTC Architecture](https://blog.webrtc.ventures/tag/webrtc-architecture), [Broadcasting](https://blog.webrtc.ventures/tag/broadcasting), [Medical](https://blog.webrtc.ventures/tag/medical), [WebRTC Live](https://blog.webrtc.ventures/tag/webrtc-live), [Showcase](https://blog.webrtc.ventures/tag/showcase), [Thoughts](https://blog.webrtc.ventures/tag/thoughts), [Vonage](https://blog.webrtc.ventures/tag/vonage), [Daily](https://blog.webrtc.ventures/tag/daily), [Jobs](https://blog.webrtc.ventures/tag/jobs), [Contact Centers](https://blog.webrtc.ventures/tag/contact-centers), [Telehealth](https://blog.webrtc.ventures/tag/telehealth), [Education](https://blog.webrtc.ventures/tag/education), [Technical](https://blog.webrtc.ventures/tag/technical), [General](https://blog.webrtc.ventures/tag/general), [Story of success](https://blog.webrtc.ventures/tag/story-of-success), [The WebRTC.ventures Blog](https://blog.webrtc.ventures/tag/the-webrtc-ventures-blog), [Testing](https://blog.webrtc.ventures/tag/testing), [Gaming](https://blog.webrtc.ventures/tag/gaming), [DevOps](https://blog.webrtc.ventures/tag/devops), [Symbl.ai](https://blog.webrtc.ventures/tag/symbl-ai)

## Related posts

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/security_officer.jpg?height=200&name=security_officer.jpg)](https://blog.webrtc.ventures/2016/09/information-security-officer)

## [WebRTC ventures announces Maynor Taisigüe as Information Security Officer](https://blog.webrtc.ventures/2016/09/information-security-officer)

[ArinSime](https://blog.webrtc.ventures/author/arinsime) 

 Sep 9, 2016 12:00:00 AM

Information Security is an increasingly important topic and one that is too often overlooked. This...

[Read more](https://blog.webrtc.ventures/2016/09/information-security-officer)

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/The-Road-to-WebRTC-25.jpg?height=200&name=The-Road-to-WebRTC-25.jpg)](https://blog.webrtc.ventures/2018/08/maynor-taisigue-information-security-officer)

## [Meet the Team: Maynor Taisigüe, WebRTC.ventures' Information Security Officer](https://blog.webrtc.ventures/2018/08/maynor-taisigue-information-security-officer)

[webrtc](https://blog.webrtc.ventures/author/webrtc) 

 Aug 6, 2018 12:00:00 AM

Henry Ford was once quoted as saying, “The two most important things in any company do not appear...

[Read more](https://blog.webrtc.ventures/2018/08/maynor-taisigue-information-security-officer)

[![](https://blog.webrtc.ventures/hs-fs/hubfs/Imported_Blog_Media/The-Road-to-WebRTC-26.jpg?height=200&name=The-Road-to-WebRTC-26.jpg)](https://blog.webrtc.ventures/2018/08/how-to-make-sure-your-telehealth-video-app-is-hipaa-compliant)

## [How to Make Sure Your Telehealth Video App is HIPAA Compliant](https://blog.webrtc.ventures/2018/08/how-to-make-sure-your-telehealth-video-app-is-hipaa-compliant)

[Maynor](https://blog.webrtc.ventures/author/maynor) 

 Aug 10, 2018 12:00:00 AM

It is important to understand how to make sure your telehealth video app is HIPAA compliant so that...

[Read more](https://blog.webrtc.ventures/2018/08/how-to-make-sure-your-telehealth-video-app-is-hipaa-compliant)

### WebRTC.Ventures Services

...

- Assess
- Build
- Integrate
- Test
- Deploy & Manage

### Contact Us

...

**Video should be an opportunity, not a headache.**   
 We’re here to build, integrate, assess and optimize, test, and even deploy and manage your live video application. 

[Contact us](https://blog.webrtc.ventures/2019/06/developing-a-secure-messaging-app-for-telehealth-with-react-using-virgil-security-higher-order-components-and-react-context-api#contact)

### WebRTC Live

...

 View [past episodes](https://blog.webrtc.ventures/webrtc-live/) of our webinar interview series about the latest webRTC use cases and technical updates. Join our mailing list to learn about upcoming episodes! 

![WebRTC Live](https://blog.webrtc.ventures/hs-fs/hubfs/Template%20Images/widged-bannet.webp?height=90&name=widged-bannet.webp)

![logo-main-light](https://blog.webrtc.ventures/hubfs/logo-main-light.svg "logo-main-light")

We’re one of the few agencies in the world dedicated to WebRTC development. This dedication and experience is why so many people trust us to help bring live video application dreams to life.

 

### Let's get started!

###### **[Contact us today](https://webrtc.ventures/contact/)**

**[info@webrtc.ventures](mailto:info@webrtc.ventures)**

<https://www.linkedin.com/company/webrtc-ventures> <https://www.youtube.com/@WebrtcVentures>

### Join our mailing list

We don't e-mail often (a few times a month max), and it will be worth it when we do! Of course, we respect your privacy and will not share your contact information.

© 2023 WebRTC.ventures, an [AgilityFeat](https://agilityfeat.com/) company / [Privacy Policy](https://webrtc.ventures/privacy-policy//)

```json
{
  "@context" : "https://schema.org",
  "@type" : "BlogPosting",
  "author" : {
    "@type" : "Person",
    "name" : "Hector Zelaya",
    "url" : "https://blog.webrtc.ventures/author/hector-zelaya"
  },
  "dateModified" : "2024-04-03T18:39:49.490Z",
  "datePublished" : "2019-06-11T04:00:00.000Z",
  "headline" : "Developing a Secure Messaging App for Telehealth with React Using Virgil Security, Higher-Order Components and React Context API – WebRTC.ventures",
  "image" : [ "https://blog.webrtc.ventures/hubfs/Imported_Blog_Media/virgil.png" ],
  "mainEntityOfPage" : {
    "@id" : "https://blog.webrtc.ventures/2019/06/developing-a-secure-messaging-app-for-telehealth-with-react-using-virgil-security-higher-order-components-and-react-context-api",
    "@type" : "WebPage"
  },
  "publisher" : {
    "@type" : "Organization",
    "logo" : {
      "@type" : "ImageObject",
      "url" : "https://blog.webrtc.ventures/hubfs/logo-main-light.svg"
    }
  }
}
```