Skip to content

KSET/kset-verifikator-2025

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

11 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Discord Verifikator Backend

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.

Kod se pokrece preko nardbe: python -m uvicorn verifikator:app --reload

Značajke

  • 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

Ovisnosti

  • fastapi
  • uvicorn
  • python-dotenv
  • google-auth
  • gspread
  • psycopg2
  • requests
  • pydantic

Instaliraj sve ovisnosti:

pip install -r requirements.txt

Arhitektura

  • GET /oauth/callback: Prima code i state, dohvaća email od Googlea i validira ga protiv Google Sheeta
  • POST /verify-email: Prima jedan email i traži ga u sheetu
  • POST /verify-emails: Prima listu emailova i vraća info za one koji su pronađeni
  • POST /generate-oauth-link: Generira OAuth URL s unikatnim state
  • GET /oauth/status: Provjerava status verifikacije na temelju state
  • POST /refresh-cache: Ručno osvježava cache iz Google Sheeta
  • POST /clear-cache: Briše cache (korisno za testiranje)

Pokretanje lokalno

uvicorn app:app --reload

Baza podataka

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 korisnika
  • success — email je uspješno verificiran
  • fail — OAuth uspješan, ali email nije pronađen
  • expired — link istekao (više od 5 min)

OAuth logika

  1. Discord bot traži /generate-oauth-link s unikatnim state
  2. Korisnik klikne na link, prolazi kroz Google OAuth
  3. Nakon callback, backend dohvaća email korisnika
  4. Ako se email nalazi u Google Sheet-u, veza se označava kao success
  5. /oauth/status endpoint može se koristiti za polling s frontenda

Napomene

  • 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

Debug

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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published