Upravil jsem Google OAuth tak, že Google uživatel se hledá/vytváří přes email, ukládá auth_provider='google', provider_subject, display_name, avatar_url a po úspěšném loginu last_login_at. První Google uživatel v prázdné users tabulce dostane admin, další noví Google uživatelé viewer.
Přidal jsem AUTH_MODE=google|mixed|local: google: jen Google login, lokální/Gitea nejdou ani přes přímý endpoint mixed: Google + lokální/Gitea fallback local: jen lokální login Správa uživatelů zůstává admin-only, guard posledního admina platí pro odebrání role i deaktivaci. Přidal jsem do ní i přehled oprávnění rolí a zobrazení provider/avatar metadat. DB migrace teď přes PRAGMA table_info(users) doplňuje chybějící sloupce bez mazání/recreate existující tabulky; pokud users vůbec neexistuje, bezpečně ji vytvoří. Podporované sloupce zahrnují email, display_name, role, is_enabled, created_at, updated_at, last_login_at, auth_provider, provider_subject, plus kompatibilní sloupce pro lokální login.
This commit is contained in:
@@ -11,6 +11,7 @@ DEFAULT_GITEA_ORG = "appfactory"
|
||||
INTERNAL_GITEA_URL = "http://appfactory-gitea:3000"
|
||||
|
||||
PORTAL_PREFIX = "/portal"
|
||||
AUTH_MODES = {"google", "mixed", "local"}
|
||||
|
||||
|
||||
def read_env_value(key: str, default: str = "") -> str:
|
||||
@@ -107,6 +108,9 @@ def get_auth_domain_readiness() -> dict[str, bool]:
|
||||
|
||||
return {
|
||||
"portal_public_url_configured": bool(get_portal_public_url()),
|
||||
"auth_mode_google": get_auth_mode() == "google",
|
||||
"auth_mode_mixed": get_auth_mode() == "mixed",
|
||||
"auth_mode_local": get_auth_mode() == "local",
|
||||
"google_oauth_enabled": google_enabled,
|
||||
"google_oauth_configured": bool(google_client_id and google_client_secret and google_redirect_uri),
|
||||
"google_redirect_uri_configured": bool(google_redirect_uri),
|
||||
@@ -114,9 +118,17 @@ def get_auth_domain_readiness() -> dict[str, bool]:
|
||||
}
|
||||
|
||||
|
||||
def get_auth_mode() -> str:
|
||||
mode = read_env_value("AUTH_MODE", "mixed").strip().lower()
|
||||
if mode in AUTH_MODES:
|
||||
return mode
|
||||
return "mixed"
|
||||
|
||||
|
||||
def is_google_oauth_button_enabled() -> bool:
|
||||
return bool(
|
||||
read_env_bool("GOOGLE_OAUTH_ENABLED")
|
||||
and read_env_value("GOOGLE_CLIENT_ID", "")
|
||||
and read_env_value("GOOGLE_CLIENT_SECRET", "")
|
||||
and get_google_redirect_uri()
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user