agilentics / boiler
"""URL registration.

The guard is installed first, as an allowlist: a route added below is protected
by default rather than by someone remembering to protect it. To make a new route
reachable without a session, add its path to PUBLIC_PATHS in endpoints/crud.py
and say in a comment what defends it instead.
"""
from .endpoints.crud import require_session
from .endpoints.oauth import page_google_callback, page_google_start
from .endpoints.session import (
    api_login,
    api_me,
    api_org_select,
    api_password_change,
    page_login,
    page_logout,
)


def init_app(app):
    app.before_request(require_session)

    # pages
    app.add_url_rule("/login", view_func=page_login, methods=["GET"])
    app.add_url_rule("/logout", view_func=page_logout, methods=["GET"])

    # session
    app.add_url_rule("/api/login", view_func=api_login, methods=["POST"])
    app.add_url_rule("/api/me", view_func=api_me, methods=["GET"])
    app.add_url_rule("/api/org/select", view_func=api_org_select, methods=["POST"])
    app.add_url_rule("/api/password", view_func=api_password_change, methods=["POST"])

    # Google sign-in. Both are no-ops redirecting to /login while
    # GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET are unset.
    app.add_url_rule("/auth/google/start", view_func=page_google_start, methods=["GET"])
    app.add_url_rule("/auth/google/callback", view_func=page_google_callback,
                     methods=["GET"])

    # your routes go here