Files
m365-workingwith/app/auth.py
2026-02-02 12:40:51 +01:00

52 lines
1.6 KiB
Python

import asyncio
import json
from pathlib import Path
from playwright.async_api import async_playwright
AUTH_STATE_FILE = Path("auth_state.json")
async def ensure_login(email: str) -> None:
"""
Öffnet den Browser mit/ohne bestehenden auth_state.
Beim ersten Mal: manueller Login in M365.
Danach wird der Auth-State persistiert.
"""
async with async_playwright() as p:
browser_type = p.chromium
if AUTH_STATE_FILE.exists():
context = await browser_type.launch_persistent_context(
user_data_dir="user_data",
headless=False,
channel="chrome",
)
else:
context = await browser_type.launch_persistent_context(
user_data_dir="user_data",
headless=False,
channel="chrome",
)
page = await context.new_page()
await page.goto("https://m365.cloud.microsoft/search/?auth=2")
print(f"Bitte mit {email} in Microsoft 365 anmelden.")
print("Nach erfolgreichem Login Browser-Fenster schliessen oder Skript abbrechen (Ctrl+C).")
# Langes Warten; in echter Implementierung könnte man Events verwenden
await page.wait_for_load_state("domcontentloaded")
'page.wait_for_timeout(1000 * 1000)'
state = await context.storage_state()
# storage_state() liefert dict -> JSON speichern
AUTH_STATE_FILE.write_text(json.dumps(state), encoding="utf-8")
await context.close()
def ensure_login_sync(email: str) -> None:
asyncio.run(ensure_login(email))