sky-meilin's picture
Create auth.py
3498972 verified
Raw History Blame
2.5 kB
"""
auth.py
SkyOS Google Authentication
Stellt authentifizierte Google Services für alle Module bereit.
Autor: Sky Meilin
Projekt: SkyOS Full Core
"""
from __future__ import annotations
import logging
from googleapiclient.discovery import build
from Module.google.oauth import oauth
logger = logging.getLogger("SkyOS.GoogleAuth")
class GoogleAuth:
"""Zentrale Google-Authentifizierung."""
_credentials = None
_services = {}
@classmethod
def credentials(cls):
"""Liefert gültige OAuth-Credentials."""
if cls._credentials is None:
cls._credentials = oauth.authenticate()
return cls._credentials
@classmethod
def service(
cls,
api_name: str,
api_version: str,
):
"""
Erzeugt oder liefert einen zwischengespeicherten Google-Service.
Beispiel:
GoogleAuth.service("drive", "v3")
"""
key = f"{api_name}:{api_version}"
if key not in cls._services:
logger.info(
"Initialisiere Google Service %s (%s)",
api_name,
api_version,
)
cls._services[key] = build(
api_name,
api_version,
credentials=cls.credentials(),
cache_discovery=False,
)
return cls._services[key]
@classmethod
def reset(cls):
"""Setzt alle gecachten Services zurück."""
cls._services.clear()
cls._credentials = None
# -------------------------------------------------
# Komfortfunktionen
# -------------------------------------------------
def get_credentials():
"""Liefert gültige OAuth-Credentials."""
return GoogleAuth.credentials()
def get_service(
api_name: str,
api_version: str,
):
"""
Liefert einen Google API Service.
Beispiele:
get_service("drive", "v3")
get_service("calendar", "v3")
get_service("gmail", "v1")
"""
return GoogleAuth.service(
api_name,
api_version,
)
# -------------------------------------------------
# Spezielle Kurzfunktionen
# -------------------------------------------------
def drive():
return get_service("drive", "v3")
def docs():
return get_service("docs", "v1")
def sheets():
return get_service("sheets", "v4")
def gmail():
return get_service("gmail", "v1")
def calendar():
return get_service("calendar", "v3")