Ovo je backend servis za Discord verifikacijski sustav. Omogućuje provjeru korisničkih email adresa na temelju podataka iz Google Sheeta te autentikaciju putem Google OAuth-a. Također koristi PostgreSQL za praćenje pokušaja verifikacije.
- FastAPI REST backend
- Učitavanje podataka iz Google Sheeta (gspread + service account)
- OAuth verifikacija putem Google računa
- Provjera pojedinačnih i višestrukih email adresa
- Redis-style cache s dnevnim osvježavanjem
- PostgreSQL baza za praćenje verifikacijskih pokušaja
fastapi
uvicorn
python-dotenv
google-auth
gspread
psycopg2
requests
pydantic
Instaliraj sve ovisnosti:
pip install -r requirements.txt
GET /oauth/callback
: Primacode
istate
, dohvaća email od Googlea i validira ga protiv Google SheetaPOST /verify-email
: Prima jedan email i traži ga u sheetuPOST /verify-emails
: Prima listu emailova i vraća info za one koji su pronađeniPOST /generate-oauth-link
: Generira OAuth URL s unikatnimstate
GET /oauth/status
: Provjerava status verifikacije na temeljustate
POST /refresh-cache
: Ručno osvježava cache iz Google SheetaPOST /clear-cache
: Briše cache (korisno za testiranje)
uvicorn app:app --reload
Koristi se verification_attempts
tablica:
CREATE TABLE verification_attempts (
state TEXT PRIMARY KEY,
izvor TEXT NOT NULL,
email TEXT,
status TEXT NOT NULL,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT CURRENT_TIMESTAMP,
used_at TIMESTAMP WITH TIME ZONE
);
Statusi mogu biti:
pending
— kreiran pokušaj, čeka na korisnikasuccess
— email je uspješno verificiranfail
— OAuth uspješan, ali email nije pronađenexpired
— link istekao (više od 5 min)
- Discord bot traži
/generate-oauth-link
s unikatnimstate
- Korisnik klikne na link, prolazi kroz Google OAuth
- Nakon
callback
, backend dohvaća email korisnika - Ako se email nalazi u Google Sheet-u, veza se označava kao
success
/oauth/status
endpoint može se koristiti za polling s frontenda
- Verifikacija se temelji na kolumnama:
KSET e-pošta
,Privatna e-pošta
,Ime i prezime
,Matična sekcija
,Trenutna vrsta članstva
- Cache se automatski osvježava jednom dnevno (nakon 06:47)
- Ako je email pronađen u sheetu, prikazuje se korisnički info
Ako želiš ručno osvježiti podatke iz Sheeta:
curl -X POST http://localhost:8000/refresh-cache
Ako želiš očistiti cache:
curl -X POST http://localhost:8000/clear-cache