A secure cloud storage solution leveraging Spring Boot, React, Firebase, and Google Cloud Platform (GCP) services. Store, manage, and share your files securely in the cloud.
- 📁 File Management
- Upload and download files
- Star important files
- View file metadata
- Real-time storage usage tracking
- 🔐 Secure Authentication
- Firebase Authentication
- JWT token validation
- Role-based access control
- ☁️ Cloud Integration
- GCP Cloud Storage for files
- Firebase Realtime Database for metadata
- Real-time updates and sync
- Framework: Spring Boot 3.x
- Build Tool: Maven
- Java Version: 17
- Key Dependencies:
<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>com.google.firebase</groupId> <artifactId>firebase-admin</artifactId> <version>9.2.0</version> </dependency> <dependency> <groupId>com.google.cloud</groupId> <artifactId>google-cloud-storage</artifactId> </dependency> </dependencies>
- Java 17+
- Node.js 16+
- Firebase Project
- GCP Project with Storage enabled
-
Clone Repository
git clone https://github.com/Zyrexam/cloudvault.git cd cloudvault -
Backend Configuration
cd Backend # Copy service account template cp src/main/resources/service-account-key.example.json src/main/resources/service-account-key.json # Update with your credentials
-
Frontend Configuration
cd frontend cp .env.example .env # Update Firebase configuration
-
Start Backend
cd Backend mvn spring-boot:run -
Start Frontend
cd frontend npm install npm run dev
spring:
application:
name: Backend
servlet:
multipart:
max-file-size: 100MB
max-request-size: 100MB
server:
port: 8080
servlet:
context-path: /
firebase:
bucket-name:
image-url: https://storage.googleapis.com/${firebase.bucket-name}/%s
cors:
allowed-origins: http://localhost:5173
allowed-credentials: true
allowed-methods: GET,POST,PUT,DELETE,OPTIONS
allowed-headers: "*"
exposed-headers: "*"
gcp:
project-id:
bucket-name:
credentials:
location: src/main/resources/service-account-key.json
logging:
level:
com.example.CloudVault: DEBUG
com.google.cloud: DEBUG
VITE_FIREBASE_API_KEY=
VITE_FIREBASE_AUTH_DOMAIN=
VITE_FIREBASE_STORAGE_BUCKET=
VITE_FIREBASE_PROJECT_ID=
VITE_FIREBASE_MESSAGING_SENDER_ID=
VITE_FIREBASE_APP_ID=
VITE_FIREBASE_MEASUREMENT_ID=- Service account credentials are never exposed to frontend
- Files are stored in private GCP buckets
- Firebase Authentication handles user management
- CORS is configured for frontend-backend communication
POST /api/files/upload- Upload new fileGET /api/files- List all filesGET /api/files/{fileId}- Download fileDELETE /api/files/{fileId}- Delete filePUT /api/files/{fileId}/star- Toggle star
- Fork the repository
- Create feature branch (
git checkout -b feature/AmazingFeature) - Commit changes (
git commit -m 'Add: Amazing Feature') - Push to branch (
git push origin feature/AmazingFeature) - Open a Pull Request