Something went wrong. Try again.
A social pastebin built on atproto. morsels.blue
atproto python flask quartz
Something went wrong. Try again.
12345678910111213141516171819202122232425262728293031323334353637import jsonimport osimport timefrom pathlib import Path
from authlib.jose import JsonWebKeyfrom flask import Flask
def _generate_flask_secret() -> str: return os.urandom(32).hex()
def _generate_client_jwk() -> str: key = JsonWebKey.generate_key("EC", "P-256", is_private=True) key_dict = json.loads(key.as_json(is_private=True)) key_dict["kid"] = f"morsel-{int(time.time())}" return json.dumps(key_dict)
def load_config(app: Flask, data_dir: str = ".") -> None: """Load or generate config. Persists secrets to a file so they survive restarts.""" secrets_path = Path(data_dir) / "secrets.json"
if secrets_path.exists(): secrets = json.loads(secrets_path.read_text()) else: secrets = { "flask_secret_key": _generate_flask_secret(), "client_secret_jwk": _generate_client_jwk(), } secrets_path.write_text(json.dumps(secrets, indent=2)) print(f"Generated new secrets at {secrets_path}")
app.secret_key = secrets["flask_secret_key"] app.config["CLIENT_SECRET_JWK"] = secrets["client_secret_jwk"]