Change the name from ResShare-Frontend to app (if you run without changing the name, errors might come)
ResShare is a decentralized file-sharing system built on ResilientDB and IPFS,that allows transferring any types of files with no limit on size of the file. Unlike traditional platforms, ResShare eliminates single points of failure by combining ResilientDB's tamper-proof metadata storage with IPFS's distributed file system. The platform enables secure file uploads, retrievals, and deletions while ensuring efficient management of metadata.
- Files are distributed across the IPFS Cluster network, removing any single points of failure.
- Redundant storage ensures file availability even during network disruptions.
- Metadata such as CIDs and file details are securely stored in ResilientDB.
- Immutability guarantees reliable verification during file retrieval and deletions.
- File integrity is validated by comparing the retrieved file's hash with stored metadata.
- Prevents tampering or corruption in storage and retrieval processes.
- Users can setup their own cluster service and use the ResShare application for private networks.
- Provides real-time insights into uploaded files and their statuses.
- A responsive interface facilitates seamless file uploads, retrievals, and management.
- Real-time feedback enhances usability and transparency.
ResShare integrates two core technologies—ResilientDB for metadata management and IPFS Cluster Service for distributed file storage. The following components constitute the system:
Figure 1: Upload File
Figure 2: Fetch and Download File
- Acts as a key-value store for tamper-proof metadata.
- Ensures high throughput and fault tolerance for metadata operations.
- Provides decentralized, redundant file storage.
- Utilizes pinning to ensure file persistence.
- Developed in Python and Flask for seamless communication between components.
- Implements API endpoints for file management tasks.
- Built using ReactJS and Material-UI for an engaging and user-friendly experience.
- Facilitates interaction with the decentralized system.
- Designed the system architecture integrating ResilientDB and IPFS.
- Deployed ResilientDB for metadata storage with a key-value service.
- Configured an IPFS cluster for distributed file handling.
- Developed backend services to bridge ResilientDB, IPFS, and the front-end.
- Established API endpoints for file upload, retrieval, and deletion.
- Implemented mechanisms for managing file metadata securely.
- Enabled secure uploads to IPFS, generating unique CIDs.
- Stored metadata such as file size and owner details in ResilientDB.
- Implemented secure deletion of files and metadata from IPFS and ResilientDB.
- Built an interactive dashboard showcasing uploaded files and metadata.
- Enhanced the UI for accessibility, responsiveness, and ease of use.
- Deployed the platform for production-level testing.
- Conducted comprehensive testing to ensure performance, fault tolerance, and security.
- Finalized comprehensive project documentation.
- Incorporated user feedback to optimize the platform for usability and performance.
git clone https://github.com/dr-n0g00d/ResShare-Frontend.git
git clone https://github.com/aj3016/ResShare_Backend.git
- GCC and G++
sudo apt install gcc-11
sudo apt install g++-11
- OpenSSL
sudo apt install openssl libssl-dev
- Python 3.8
- Install C++ dependencies:
sudo apt install openssl libssl-dev
- Install Python dependencies:
pip install -r requirements.txt
Set up your own IPFS Cluster Service by following the steps provided on the IPFS Cluster Service Home Page.
After setting up, update the URL in the config/ipfs.config
file.
Note: Share the IPFS Cluster secret key with other nodes that you want to add to the private network.
- For Ubuntu 24:
cd bazel
bazel build //... --action_env=CC=/usr/bin/gcc-11 --action_env=CXX=/usr/bin/g++-11 --cxxopt="-std=c++17"
- For Ubuntu 22:
cd bazel
bazel build //...
- Start the Flask server:
export FLASK_APP=controller.py flask run
OR
python3 controller.py
- Upload a file:
curl -X POST http://localhost:5000/upload -H "Content-Type: application/json" -d '{"file_path": "Specify file path here"}'
- Get all peers:
curl -X GET http://localhost:5000/peers
- Get file status:
curl -X GET http://localhost:5000/file_status/(file_cid)
- Download a file:
curl -X POST http://localhost:5000/download -H "Content-Type: application/json" -d '{"cid": "(file_cid)", "file_path": "Specify file path here""}'
- Get other peer's file structure:
curl -X GET http://localhost:5000/peer_files/(peer_id)
- Get all files:
curl -X GET http://localhost:5000/all_files
- Delete a file:
curl -X POST http://localhost:5000/delete -H "Content-Type: application/json" -d '{"cid": "(file_cid)"}'
-
Rename the downloaded directory to "app"
-
Install dependencies:
`npm i`
- Run the app in development mode:
npm start
Open http://localhost:3000 in your browser.
- Build the app for production:
npm run build
Outputs a minified production build in the build
folder.
Figure 1 : Dashboard Page
Figure 2 : Library Page
Figure 3 : Upload Page
Figure 4 : Favorite Peers Page
ResShare demonstrates the potential of decentralized technologies to transform file sharing by addressing challenges of security, scalability, and user control. With its robust architecture, intuitive UI, and comprehensive features, ResShare offers a reliable solution for modern file-sharing needs, setting a strong foundation for future advancements in decentralized systems.
While ResShare has successfully demonstrated the potential of decentralized technologies for file sharing, there are several areas where the platform can be enhanced to address emerging challenges and further improve its capabilities:
-
End-to-End Encryption:
Implementing end-to-end encryption for files and metadata to enhance security and ensure that only authorized users within the network can access the data. -
Access Control Mechanisms:
Introducing granular access controls, such as role-based permissions, to allow users to specify who can view, download the files. -
Improved Scalability:
Exploring advanced techniques like sharding or dynamic clustering in IPFS to handle larger datasets and increasing numbers of users effectively. -
Mobile Application Development:
Building mobile applications for Android and iOS to expand the accessibility of ResShare and cater to a broader user base. -
Improve Performnace:
Reduce the time required to fetch files from ResilientDB and apply filters to view a specific peer's files.
By addressing these areas, ResShare can evolve into a more secure, scalable, and user-centric platform, unlocking new opportunities in decentralized file sharing and beyond.