Team Members:
- Bethchesman - Beth Chesman
- colevs - Cole Van Steinburg
- DenisGauthier - Denis Gauthier
- lakshaykarnwal - Lakshay Karnwal
- rahulng7963 - Rahul Nagulapally
- Project goal: To create a web application using AWS services for professionals receiving video submissions from users while protecting their privacy.
Target users:
- Senders: An average adult who has created a video of themself, has access to the Internet and phone/computer, and may want to have their face blurred throughout the video for privacy reasons.
- Receivers: Professionals (e.g., doctors, teachers, recruiters/interviewers) who need to review the video submissions for diagnosis or assessment reasons, and have access to the Internet and computer.
Client Information
- At this current time, our platform preforms best on Google Chrome Browsers. Some issues have been noticed on Firefox and Edge.
Before you begin, ensure you have met the following requirements:
- Access to an AWS S3 bucket to store your images.
- Ability to call AWS Rekognition APIs.
- Access to either AWS access keys or AWS CLI installed and working
- NodeJS installed
- Nginx reverse proxy installed to serve your application. (not needed if running locally or preferred way of hosting)
- Gunicorn installed to run your Flask application. (Similar to nginx)
- Access to a database (local or remote) running this schema:
DROP DATABASE IF EXISTS Team4db; /* This name can be changed as long as it is reflected in the .env */
CREATE DATABASE Team4db; /* This name can be changed as long as it is reflected in the .env */
USE Team4db; /* This name can be changed as long as it is reflected in the .env */
CREATE TABLE userprofile (
id INT AUTO_INCREMENT PRIMARY KEY,
email VARCHAR (100) UNIQUE,
password_hash VARCHAR (255),
firstname VARCHAR (50),
lastname VARCHAR (50),
salthash VARBINARY(128),
publickey VARCHAR(500),
verifyKey VARCHAR(10),
verifiedAcc BOOLEAN
);
CREATE TABLE videos (
videoID VARCHAR(100) PRIMARY KEY,
videoName VARCHAR(100),
subDate DATETIME,
retDate DATETIME,
senderEmail VARCHAR(100),
senderFName VARCHAR(50),
senderLName VARCHAR(50),
receiverEmail VARCHAR(100),
senderEncryption VARCHAR(500),
receiverEncryption VARCHAR(500),
FOREIGN KEY (senderEmail) REFERENCES userprofile(email) ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY (receiverEmail) REFERENCES userprofile(email) ON DELETE SET NULL ON UPDATE CASCADE
);
CREATE TABLE chats (
chatName VARCHAR(100) PRIMARY KEY,
timestamp DATETIME,
senderEmail VARCHAR(100),
senderFName VARCHAR(50),
senderLName VARCHAR(50),
receiverEmail VARCHAR(100),
receiverFirstName VARCHAR(100),
receiverLastName VARCHAR(100),
senderEncryption VARCHAR(500),
receiverEncryption VARCHAR(500),
retDate DATETIME,
FOREIGN KEY (senderEmail) REFERENCES userprofile(email) ON DELETE SET NULL ON UPDATE CASCADE,
FOREIGN KEY (receiverEmail) REFERENCES userprofile(email) ON DELETE SET NULL ON UPDATE CASCADE
);
CREATE TABLE tags (
tagName VARCHAR(20),
videoID VARCHAR(100),
FOREIGN KEY (videoID) REFERENCES videos(videoID) ON DELETE CASCADE ON UPDATE CASCADE
);
To start, clone our repo:
git clone https://github.com/COSC-499-W2023/year-long-project-team-4.git
Then install the Python dependencies listed in the requirements.txt file.
cd year-long-project-team4 pip install -r requirements.txt
Then create a .env file in year-long-project-team4/appdirectory following this example structure:
# If not required to SSH into ec2 - this can be blank
SSH = "True"/"False" - This flags if you need to SSH into your database or not.
SSHUSER=User name that your .pem was given - Default appears to be Ubuntu
KEYPATH=Path to your .pem file for ssh'ing into your ec2
EC2_ADDRESS=IP address of your ec2 (Public ipv4)
# Database Information
ADDRESS=Endpoint of your AWS RDS
PORT=For your RDS - the default is 3306
DBUSER=DATABASE USER NAME
PASS= Password for the user
HOST=IP of the database (127.0.0.1)
MYDB=Database name
TESTDB=Test database name (not production)
BUCKETNAME= S3 bucket name
# Test is for test database & avoid using production DB, Local flag is to mimic AWS properties such as S3 bucket, and avoiding Email. However no Face blurring.
TEST=True/False - Uses test database & test options (This assumes you have a development and production database. For simplicity of getting this just running, set Test to False.
LOCAL= True/False - Use this to mimic S3 locally
# Required for AWS calls
ACCESSKEY=''
SECRETKEY=''
SESSTOKEN=''
- If you want to run locally, set the Local flag to True and all of this can be set up to run without AWS access. However, you will lose some functionality namely email & face blurring, and will require you to still have a database connection.
-
Start the Backend Server:
- Navigate to the
year-long-project-team4/appdirectory. - Run
py main.pyorpython3 main.pydepending on your Python environment. - Note: The
requirements.txtfile might become outdated over time, requiring updates to fix any dependency issues.
- Navigate to the
-
Download Frontend Dependencies:
- Open a second console.
- Navigate to
year-long-project-team4/app/client. - Run
npm installto download any required dependencies.
-
Start the Frontend:
- Once dependencies are installed, start the frontend with
npm run start. - The frontend will be running on
localhost:3000by default.
- Once dependencies are installed, start the frontend with
You now have a working local platform if all steps were completed correctly!
Our platform is designed for professionals to have videos safely and securely sent to them, with the ability to discuss further on the platform. Here's how you can use our platform:
-
Upload Videos:
- Users can easily upload or record their videos to the platform.
- Ensure the security of your videos by encrypting all data during transmission and storage.
-
Receive Feedback:
- Once uploaded, professionals can provide feedback or engage in discussions with the client.
- Utilize the chat feature for convenient communication among users.
-
Privacy Protection:
- Prioritize privacy by blurring faces during the video-sending phase.
- Everything sent or received is automatically encrypted to ensure confidentiality.
-
Security Measures:
- Security is our top priority. We implement industry-standard encryption techniques to ensure that your data remains safe and protected at all times.
- Verification of emails on account creation.
Whether you are a professional looking for a simple and secure way to receive sensitive videos or a client looking to share videos with a professional, SafeMov is the right choice.
Contributions to SafeMov are always welcomed and appreciated! As an open-source project, we encourage developers to contribute in various ways:
-
Fork and Develop: Feel free to fork the repository and develop features or enhancements on your own. Once you're ready, submit a pull request, and we'll review it promptly.
-
Clone and Modify: If you have specific customization needs or improvements in mind, you can clone the repository and modify it to suit your requirements.
-
Bug Reporting: If you encounter any bugs or issues while using SafeMov, please report them on our GitHub repository. Before submitting a new issue, we recommend researching to ensure it's not already reported or being addressed. Clear and detailed bug reports help us improve the platform.
-
Feature Requests: Do you have a feature in mind that would enhance SafeMov? Feel free to submit a feature request through GitHub issues. We value your feedback and consider all feature requests for future development.
-
Pull Requests: We accept pull requests for features, improvements, and bug fixes. When submitting a pull request, please ensure that your code adheres to our coding standards and includes appropriate documentation.
SafeMov is licensed under the GNU General Public License v3.0.
This means that you are free to use, modify, and distribute the software as per the terms outlined in the license. You are welcome to study, share, and contribute to the project.
For more details about the permissions and restrictions imposed by the GNU GPL v3.0, please refer to the full text of the license.
Please note that parts of the project contain code derived or copied from the following project: