# Python scripts voor Google Workspace Admin SDK

De Google Admin SDK geeft programmatische toegang tot vrijwel alle Admin Console functies. Met Python kun je bulk-bewerkingen uitvoeren, rapportages automatiseren en integraties bouwen die in de Admin Console niet mogelijk zijn.

## Setup en installatie

```bash
pip install google-auth google-auth-oauthlib google-auth-httplib2 google-api-python-client
```

**Service Account aanmaken:**

1. console.cloud.google.com > Credentials > Service Account aanmaken
2. Download de JSON-sleutel
3. Activeer Domain-Wide Delegation
4. Autoriseer in Admin Console:

```
Admin Console > Beveiliging > API-besturing > Domain-wide Delegation
Client ID: [Service Account Client ID]
Scopes: admin.directory.user, admin.directory.group, admin.reports.audit.readonly
```

## Authenticatie instellen

```python
from google.oauth2 import service_account
from googleapiclient.discovery import build

SCOPES = ["https://www.googleapis.com/auth/admin.directory.user"]
credentials = service_account.Credentials.from_service_account_file(
    "service-account.json", scopes=SCOPES
).with_subject("admin@jouwdomein.nl")

service = build("admin", "directory_v1", credentials=credentials)
```

## Script 1: Alle gebruikers exporteren naar CSV

```python
def exporteer_gebruikers():
    resultaten, page_token = [], None
    while True:
        resp = service.users().list(
            customer="my_customer", maxResults=500,
            orderBy="email", pageToken=page_token
        ).execute()
        resultaten.extend(resp.get("users", []))
        page_token = resp.get("nextPageToken")
        if not page_token:
            break

    with open("gebruikers.csv", "w") as f:
        f.write("Email,Naam,OE,Aangemaakt\n")
        for u in resultaten:
            f.write(
                f"{u['primaryEmail']},{u['name']['fullName']},"
                f"{u.get('orgUnitPath','/')},"
                f"{u.get('creationTime','onbekend')}\n"
            )
    print(f"{len(resultaten)} gebruikers geexporteerd")
```

## Script 2: Bulk gebruikers aanmaken vanuit CSV

```python
import csv, random, string

def genereer_wachtwoord(n=16):
    return "".join(random.choice(string.ascii_letters + string.digits + "!@#$") for _ in range(n))

def maak_gebruiker(email, voornaam, achternaam, oe="/"):
    pw = genereer_wachtwoord()
    body = {
        "primaryEmail": email,
        "name": {"givenName": voornaam, "familyName": achternaam},
        "password": pw, "changePasswordAtNextLogin": True,
        "orgUnitPath": oe,
    }
    try:
        service.users().insert(body=body).execute()
        print(f"OK: {email} | Wachtwoord: {pw}")
    except Exception as e:
        print(f"Fout {email}: {e}")

with open("nieuwe-gebruikers.csv") as f:
    for r in csv.DictReader(f):
        maak_gebruiker(r["email"], r["voornaam"], r["achternaam"], r.get("oe", "/"))
```

**CSV-formaat:**

```
email,voornaam,achternaam,oe
jan@bedrijf.nl,Jan,Janssen,/Verkoop
```

## Script 3: Aanmeldingsrapporten ophalen

```python
from googleapiclient.discovery import build
from datetime import datetime, timedelta

reports = build("admin", "reports_v1", credentials=credentials)
start = (datetime.now() - timedelta(days=30)).strftime("%Y-%m-%dT%H:%M:%SZ")

resp = reports.activities().list(
    userKey="all", applicationName="login",
    startTime=start, maxResults=1000
).execute()

with open("aanmeldingen.csv", "w") as f:
    f.write("Tijdstip,Gebruiker,IP,Type\n")
    for a in resp.get("items", []):
        for e in a.get("events", []):
            f.write(f"{a['id']['time']},{a['actor']['email']},{a['ipAddress']},{e['name']}\n")
```

## Veelgestelde vragen

**Heb ik altijd een service account nodig?**
Voor server-side scripts en automatisering wel. Voor interactieve scripts gebruik je OAuth 2.0 User Authorization.

**Wat zijn de API-limieten?**
Directory API: 2000 requests per 100 seconden. Reports API: 1500 per 100 seconden. Bouw retry-logica in.

**Hoe beveilig ik het service account JSON-bestand?**
Nooit in Git opslaan. Gebruik omgevingsvariabelen of Google Secret Manager.

**Kan ik via de API e-mails sturen namens gebruikers?**
Ja, via de Gmail API met de scope gmail.send en DWD.

**Hoe handel ik API-fouten af?**
Gebruik exponential backoff bij 429 (rate limit) en 503 (service unavailable) fouten.

**Kan ik rapporten direct naar Google Sheets exporteren?**
Ja, gebruik de Google Sheets API naast de Admin SDK voor directe export.

**Is het mogelijk webhook-notificaties te ontvangen bij directory-wijzigingen?**
Ja, via de Admin SDK Push Notifications API.

**Kan ik via de API Shared Drives beheren?**
Ja, via de Drive API (drives.list, drives.create, drives.delete).

**Wat is het verschil tussen de Admin SDK en GAM?**
GAM is een command-line tool gebouwd bovenop de Admin SDK. GAM is sneller voor ad-hoc beheer; de SDK is beter voor maatwerk automatisering.

**Hoe automatiseer ik periodieke rapportages?**
Via cron (Linux) of Windows Taakplanner. Exporteer output naar Google Sheets voor eenvoudig delen.

## Conclusie

De Google Admin SDK geeft volledige programmatische controle over Workspace. Total Workspace helpt Nederlandse bedrijven bij het automatiseren van Workspace-beheer via de Admin SDK.