Blog   We BRT
General Mar 15, 2026
96 views

Aplicatie PHP de management a unui Google Cloud Bucket

Aplicatie PHP pentru gestionarea fisierelor din Google Cloud Storage, cu autentificare prin email/parola si OAuth Google.

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_PATH trebuie 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
Email 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

  1. Mergi la console.cloud.google.com
  2. Creeaza un proiect nou sau selecteaza unul existent

2. Creeaza credentiale OAuth 2.0

  1. APIs & Services → Credentials → Create Credentials → OAuth 2.0 Client ID
  2. Tip aplicatie: Web application
  3. Adauga Authorized redirect URIs:
    • http://localhost:8000/auth/google/callback (development)
    • https://bucket.webrt.eu/auth/google/callback (productie)
  4. Copiaza Client ID si Client Secret in .env la GOOGLE_CLIENT_ID si GOOGLE_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.json si .env in git! Daca ai comis deja gcs-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
  • .env si gcs-service-account.json excluse din git via .gitignore

GitHub: https://github.com/BrTDevil/bucket.webrt.eu

Ce parere ai?
Distribuie articolul:

Articole asemanatoare

Analiză statică în Laravel cu PHPStan și Larastan

Analiză statică în Laravel cu PHPStan și Larastan

Acest ghid explică utilizarea PHPStan și Larastan pentru analiză statică în aplicațiile Laravel, de la instalare și configurare până la exemple practice și bune practici pentru menținerea calității codului.