Aplicatie PHP pentru gestionarea fisierelor din Google Cloud Storage, cu autentificare prin email/parola si OAuth Google.
Cerinte
- PHP 8.1+
- Composer
- Extensia PHP
pdo_sqlite - Cont Google Cloud Platform (pentru GCS si/sau OAuth)
Dependinte Composer
| Pachet | Versiune |
|---|---|
google/apiclient |
^2.15 |
vlucas/phpdotenv |
^5.6 |
Instalare
1. Cloneaza repository-ul
git clone <repo-url> /var/www/html/bucket.webrt.eu
cd /var/www/html/bucket.webrt.eu
2. Instaleaza dependintele
composer install
3. Configureaza .env
cp .env.example .env
Editeaza .env cu valorile tale:
APP_URL=http://localhost:8000
APP_SECRET=un_secret_random_lung
# Cale ABSOLUTA catre fisierul SQLite
DB_PATH=/var/www/html/bucket.webrt.eu/database/database.sqlite
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_CLIENT_CALLBACK=http://localhost:8000/auth/google/callback
GCS_BUCKET_NAME=numele-bucketului-tau
GCS_KEY_FILE=config/gcs-service-account.json
# Optionale (pentru trimitere email)
MAIL_MAILER=smtp
MAIL_HOST=mail.example.com
MAIL_PORT=465
MAIL_USERNAME=no-reply@example.com
MAIL_PASSWORD=parola
MAIL_ENCRYPTION=ssl
MAIL_FROM_ADDRESS=no-reply@example.com
MAIL_FROM_NAME=GCS Browser
Important:
DB_PATHtrebuie sa fie o cale absoluta. O cale relativa va cauza eroare 500 daca serverul nu porneste din directorul proiectului.
4. Initializeaza baza de date
php database/init.php
Creeaza tabela users si userul admin initial:
| Camp | Valoare |
|---|---|
admin@webrt.eu |
|
| Parola | admin |
| Rol | admin |
Schimba parola adminului dupa prima autentificare!
5. Porneste serverul (development)
php -S localhost:8000 -t public/
Configurare Google OAuth
1. Creeaza un proiect in Google Cloud Console
- Mergi la console.cloud.google.com
- Creeaza un proiect nou sau selecteaza unul existent
2. Creeaza credentiale OAuth 2.0
- APIs & Services → Credentials → Create Credentials → OAuth 2.0 Client ID
- Tip aplicatie: Web application
- Adauga Authorized redirect URIs:
http://localhost:8000/auth/google/callback(development)https://bucket.webrt.eu/auth/google/callback(productie)
- Copiaza Client ID si Client Secret in
.envlaGOOGLE_CLIENT_IDsiGOOGLE_CLIENT_SECRET
Configurare Google Cloud Storage
1. Instaleaza gcloud CLI
curl https://sdk.cloud.google.com | bash
exec -l $SHELL
gcloud init
2. Creeaza un bucket
gcloud storage buckets create gs://BUCKET_NAME \
--project=PROJECT_ID \
--location=EU \
--uniform-bucket-level-access
Optiuni pentru --location: EU, US, ASIA, europe-central2, europe-west4.
3. Creeaza un Service Account
gcloud iam service-accounts create bucket-app \
--display-name="Bucket App Service Account" \
--project=PROJECT_ID
4. Acorda permisiuni pe bucket
gcloud storage buckets add-iam-policy-binding gs://BUCKET_NAME \
--member="serviceAccount:bucket-app@PROJECT_ID.iam.gserviceaccount.com" \
--role="roles/storage.objectAdmin"
5. Descarca cheia JSON
gcloud iam service-accounts keys create config/gcs-service-account.json \
--iam-account=bucket-app@PROJECT_ID.iam.gserviceaccount.com
6. Actualizeaza .env
GCS_BUCKET_NAME=BUCKET_NAME
GCS_KEY_FILE=config/gcs-service-account.json
Atentie: Nu comite niciodata
gcs-service-account.jsonsi.envin git! Daca ai comis dejagcs-service-account.json, scoate-l din tracking:git rm --cached config/gcs-service-account.json
Configurare Apache (productie)
DocumentRoot trebuie sa pointeze catre folderul public/:
<VirtualHost *:80>
ServerName bucket.webrt.eu
DocumentRoot /var/www/html/bucket.webrt.eu/public
<Directory /var/www/html/bucket.webrt.eu/public>
AllowOverride All
Require all granted
</Directory>
</VirtualHost>
Activeaza mod_rewrite:
a2enmod rewrite
systemctl restart apache2
Rute disponibile
| Metoda | Ruta | Descriere | Protejat |
|---|---|---|---|
| GET | / |
Pagina principala | Nu |
| GET | /login |
Formular login | Nu |
| POST | /login |
Autentificare | Nu |
| GET | /logout |
Deautentificare | Nu |
| GET | /auth/google |
Redirect OAuth Google | Nu |
| GET | /auth/google/callback |
Callback OAuth Google | Nu |
| GET | /files |
Lista fisiere GCS | Da |
| GET | /files/list |
Lista fisiere (JSON/AJAX) | Da |
| POST | /files/folder |
Creeaza folder | Da |
| POST | /files/upload |
Incarca fisier | Da |
| GET | /files/download |
Descarca fisier | Da |
| POST | /files/delete |
Sterge fisier/folder | Da |
| GET | /profile |
Profil utilizator | Da |
| POST | /profile |
Actualizeaza profil | Da |
| GET | /admin/users |
Lista utilizatori | Admin |
| GET | /admin/users/create |
Formular creare user | Admin |
| POST | /admin/users/create |
Creeaza user | Admin |
| GET | /admin/users/:id/edit |
Formular editare user | Admin |
| POST | /admin/users/:id/edit |
Actualizeaza user | Admin |
| POST | /admin/users/:id/delete |
Sterge user | Admin |
Structura proiect
public/
index.php # entry point, rutare
.htaccess # mod_rewrite pentru Apache
src/
Auth/
AuthController.php # login/logout cu email+parola
GoogleOAuthController.php # OAuth Google
Controllers/
FileController.php # listare, upload, download, stergere GCS
ProfileController.php # profil utilizator
AdminController.php # management utilizatori (admin)
Core/
Router.php # router simplu cu suport parametri dinamici
Database.php # singleton PDO / SQLite
Session.php # sesiuni, CSRF, flash messages
Middleware/
AuthMiddleware.php # verifica autentificarea
AdminMiddleware.php # verifica rolul admin
Models/
User.php # CRUD utilizatori
Services/
GCSService.php # wrapper Google Cloud Storage API
views/
auth/login.php
files/index.php
profile/edit.php
admin/users.php
admin/user_form.php
layout/header.php
layout/footer.php
database/
init.php # initializare schema + seed admin
database.sqlite # fisier SQLite (nu in git)
config/
app.php # incarcare .env si returnare configurare
gcs-service-account.json # cheie service account GCS (nu in git)
.env # variabile de mediu (nu in git)
.env.example # template pentru .env
composer.json
Roluri utilizatori
| Rol | Acces |
|---|---|
user |
Fisiere GCS, profil propriu |
admin |
Tot ce are user + management utilizatori |
Securitate
- Protectie CSRF pe toate formularele POST
- Parole stocate cu
password_hash()(bcrypt) - Session regenerata la login
.envsigcs-service-account.jsonexcluse din git via.gitignore