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
fastapiuvicornpython-dotenvgoogle-authgspreadpsycopg2requestspydantic
Instaliraj sve ovisnosti:
pip install -r requirements.txtGET /oauth/callback: Primacodeistate, 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 unikatnimstateGET /oauth/status: Provjerava status verifikacije na temeljustatePOST /refresh-cache: Ručno osvježava cache iz Google SheetaPOST /clear-cache: Briše cache (korisno za testiranje)
uvicorn app:app --reloadKoristi 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-links 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/statusendpoint 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-cacheAko želiš očistiti cache:
curl -X POST http://localhost:8000/clear-cache