Spaces:
Running
Running
metadata
title: DocumentVault
emoji: 📁
colorFrom: blue
colorTo: purple
sdk: docker
sdk_version: 0.0.0
app_file: app.py
app_port: 7860
pinned: false
short_description: Document vault with Hugging Face-backed storage
DocVault - Offline-First Document Storage System
Complete document storage system built with Python Flask and Hugging Face Hub-backed persistence. Uploads are committed to a Hugging Face repository, so files remain available after app restarts and across sessions.
🎯 Features
Core Features
- ✅ Create Files and Folders - Including nested directory structures
- ✅ Delete Items - Individual files/folders or bulk deletion
- ✅ Upload Files - Support for 50+ file types
- ✅ List Contents - Browse file/folder hierarchy with metadata
- ✅ Rename Items - Rename files and folders
- ✅ Security - Path traversal prevention, input validation
- ✅ Logging - Comprehensive logging with rotation
- ✅ File Metadata - Size, creation time, modification time
- ✅ Multi-User - Support for multiple users via user IDs
Storage
- Persistent storage in a Hugging Face repository configured by
HF_REPO_ID - Files are written through
huggingface_hubcommit APIs, not the local container filesystem - Automatic marker files (
.gitkeep) preserve folder structure in the repo - Prevents duplicate filenames with auto-numbering
- Maintains clean directory structure
📠Project Structure
.
├── server/
│ ├── app.py # Flask application
│ ├── config.py # Configuration settings
│ ├── requirements.txt # Python dependencies
│ ├── routes/
│ │ └── api.py # API endpoints
│ ├── storage/
│ │ └── manager.py # Storage operations
│ └── utils/
│ ├── logger.py # Logging setup
│ └── validators.py # Path validation & security
├── data/ # Storage directory (auto-created)
├── logs/ # Log files (auto-created)
├── tests/
│ ├── test_docvault.py # Unit tests
│ └── test_api.sh # API test script
├── index.html # Frontend UI
├── app.js # Frontend app logic
├── styles.css # Frontend styles
└── README.md # This file
🚀 Getting Started
Prerequisites
- Python 3.8+
- pip or conda
Installation
Clone the repository
git clone <your-repo-url> cd DocVaultInstall dependencies
pip install -r server/requirements.txtRun the application
python server/app.pyAccess the app
- Open browser to
http://localhost:5000
- Open browser to
📠API Endpoints
File Operations
POST /api/create- Create file or folderDELETE /api/delete- Delete file or folderPUT /api/rename- Rename itemPOST /api/upload- Upload fileGET /api/list/<path>- List directory contents
Request Examples
Create File:
curl -X POST http://localhost:5000/api/create \
-H "Content-Type: application/json" \
-d '{"user_id":"default_user","item_type":"file","name":"test.txt","path":"/"}'
Upload File:
curl -X POST http://localhost:5000/api/upload \
-F "user_id=default_user" \
-F "file=@localfile.txt" \
-F "path=/"
List Contents:
curl http://localhost:5000/api/list/default_user/
🧪 Testing
Run the test suite:
python -m pytest tests/test_docvault.py -v
Or use the included API test script:
bash tests/test_api.sh
🔒 Security Features
- Path Traversal Prevention - Validates all paths to prevent directory escape attacks
- Input Validation - Sanitizes filenames and paths
- User Isolation - Each user has their own data directory
- Error Handling - Comprehensive error messages without exposing system details
📊 Logging
- Logs stored in
logs/directory - Automatic log rotation (10 MB per file, 10 files kept)
- Levels: DEBUG, INFO, WARNING, ERROR, CRITICAL
🚢 Deployment
Docker
docker build -t docvault .
docker run -p 5000:5000 docvault
Hugging Face Spaces
This app is designed to run on Hugging Face Spaces with a Flask backend and persistent Hub storage.
📦 Dependencies
- Flask 2.3.2
- Werkzeug 2.3.6
- Python 3.8+
See server/requirements.txt for full list.
📄 License
MIT License
🤠Contributing
Contributions welcome! Please feel free to submit a Pull Request.
📧 Support
For issues or questions, please open an Issue on GitHub.