From 897e875e292973587e8c7502a16ca5336cf86a72 Mon Sep 17 00:00:00 2001 From: Sudo-JHare Date: Thu, 24 Apr 2025 09:27:48 +1000 Subject: [PATCH] V0.5 - incremental App should be mostly functional now --- .env | 18 + Dockerfile.minimal | 24 - README.md | 120 ++++- README_INTEGRATION.md | 72 +++ README_PROXY.md | 84 ++++ USERGUIDE.markdown | 247 ++++++++++ app.py | 415 +++++++++++++--- docker-compose.yml | 24 +- forms.py | 107 +++- minimal_test.py | 138 ------ models.py | 26 +- smart_proxy.py | 565 ++++++++-------------- static/FHIRVINE_LOGO.png | Bin 0 -> 256637 bytes static/favicon.ico | Bin 0 -> 196973 bytes static/swagger-ui.css | 78 +++ templates/_formhelpers.html | 16 + templates/app_gallery/delete.html | 1 + templates/app_gallery/edit.html | 85 +--- templates/app_gallery/gallery.html | 41 +- templates/app_gallery/register.html | 119 +---- templates/base.html | 168 ++----- templates/configure/proxy_settings.html | 32 ++ templates/configure/security.html | 33 ++ templates/configure/server_endpoints.html | 46 ++ templates/consent.html | 43 +- templates/index.html | 4 +- templates/swagger-ui.html | 87 ++++ templates/swagger-ui.html.old.html | 87 ++++ templates/test_client.html | 38 +- templates/test_server.html | 39 ++ 30 files changed, 1767 insertions(+), 990 deletions(-) create mode 100644 .env delete mode 100644 Dockerfile.minimal create mode 100644 README_INTEGRATION.md create mode 100644 README_PROXY.md create mode 100644 USERGUIDE.markdown delete mode 100644 minimal_test.py create mode 100644 static/FHIRVINE_LOGO.png create mode 100644 static/favicon.ico create mode 100644 static/swagger-ui.css create mode 100644 templates/_formhelpers.html create mode 100644 templates/configure/proxy_settings.html create mode 100644 templates/configure/security.html create mode 100644 templates/configure/server_endpoints.html create mode 100644 templates/swagger-ui.html create mode 100644 templates/swagger-ui.html.old.html create mode 100644 templates/test_server.html diff --git a/.env b/.env new file mode 100644 index 0000000..e62ba57 --- /dev/null +++ b/.env @@ -0,0 +1,18 @@ +# .env file for FHIRVINE environment variables + +# Set the environment for Flask (development or production) +# Use 'production' for deployment, 'development' for local testing +FLASK_ENV=development + +# Generate a strong, random secret key for Flask sessions and security +# You can generate one using: python -c 'import secrets; print(secrets.token_hex(24))' +SECRET_KEY=replace_this_with_a_strong_random_secret_key + +# Optional: Override the default database URL if needed. +# The default in app.py points to /app/instance/fhirvine.db within the container. +# DATABASE_URL=sqlite:////app/instance/fhirvine.db + +# Optional: Add other environment-specific configurations here +# e.g., API_KEYS, external service URLs etc. + +FHIR_SERVER_URL=http://hapi.fhir.org/baseR4 \ No newline at end of file diff --git a/Dockerfile.minimal b/Dockerfile.minimal deleted file mode 100644 index bcc212a..0000000 --- a/Dockerfile.minimal +++ /dev/null @@ -1,24 +0,0 @@ -# Dockerfile.minimal - Minimal environment for testing Authlib - -# Use a slim Python 3.11 image -FROM python:3.11-slim-bullseye - -# Set environment variables -ENV PYTHONDONTWRITEBYTECODE 1 -ENV PYTHONUNBUFFERED 1 - -# Set work directory -WORKDIR /app - -# Upgrade pip -RUN pip install --no-cache-dir --upgrade pip - -# Install only Flask and the specific Authlib version -# Use --no-cache-dir and --force-reinstall for certainty -RUN pip install --no-cache-dir Flask==2.3.3 Authlib==1.5.2 - -# Copy ONLY the minimal test script -COPY minimal_test.py . - -# Command to run the test script directly -CMD ["python", "minimal_test.py"] diff --git a/README.md b/README.md index 6386de0..8c0bd66 100644 --- a/README.md +++ b/README.md @@ -1 +1,119 @@ -# FHIREVINE-Smart-Proxy \ No newline at end of file +# FHIRVINE SMART Proxy + +## Overview + +FHIRVINE is a lightweight, performant SMART on FHIR proxy built with Flask, designed to facilitate seamless integration and testing of SMART on FHIR applications. It acts as an intermediary between SMART apps and FHIR servers, providing OAuth2 authentication, app registration, testing capabilities, and configuration options. Key features include: + +- **OAuth2 Authentication**: Supports SMART on FHIR OAuth2 flows for secure app authentication. +- **App Gallery**: Register, manage, and test SMART applications. +- **Testing Support**: Test client and server modes for simulating OAuth2 flows. +- **Configuration Menu**: Customize security settings, proxy settings, and server endpoints. +- **Modular Integration**: Designed to integrate with FHIRFLARE for extended functionality. +- **API Documentation**: Swagger UI for exploring available endpoints. + +FHIRVINE is ideal for developers building and testing SMART on FHIR applications, ensuring compliance with FHIR standards while providing a user-friendly interface for configuration and testing. + +## Prerequisites + +- **Docker**: Required for containerized deployment. +- **Python 3.11**: If running locally without Docker. +- **Dependencies**: Listed in `requirements.txt` (e.g., Flask, Flask-SQLAlchemy, Authlib, Flasgger). + +## Installation + +### Using Docker (Recommended) + +1. **Clone the Repository**: + ```bash + git clone + cd FHIRVINE + ``` + +2. **Set Up Environment Variables**: + - Copy the `.env.example` to `.env`: + ```bash + cp .env.example .env + ``` + - Edit `.env` with your settings: + ``` + FLASK_ENV=development + SECRET_KEY=your-secure-random-key + DATABASE_URL=sqlite:////app/instance/fhirvine.db + FHIR_SERVER_URL=http://hapi.fhir.org/baseR4 + ``` + +3. **Build and Run with Docker Compose**: + ```bash + docker-compose up -d --build + ``` + - The application will be available at `http://localhost:5001`. + +4. **Access the Application**: + - Open your browser and navigate to `http://localhost:5001`. + +### Local Installation + +1. **Clone the Repository**: + ```bash + git clone + cd FHIRVINE + ``` + +2. **Set Up a Virtual Environment**: + ```bash + python3 -m venv venv + source venv/bin/activate # On Windows: venv\Scripts\activate + ``` + +3. **Install Dependencies**: + ```bash + pip install -r requirements.txt + ``` + +4. **Set Up Environment Variables**: + - Follow the same steps as above to create and edit the `.env` file. + +5. **Run Database Migrations**: + ```bash + flask db upgrade + ``` + +6. **Start the Application**: + ```bash + flask run --host=0.0.0.0 --port=5001 + ``` + - Access the application at `http://localhost:5001`. + +## Usage + +FHIRVINE provides a web interface and API endpoints for managing SMART on FHIR applications. Key functionalities include: + +- **App Gallery**: Register and manage SMART apps. +- **Test Client/Server**: Simulate OAuth2 flows for testing. +- **Configuration**: Adjust security, proxy, and server settings. +- **API Access**: Use the Swagger UI at `/apidocs` to explore endpoints. + +For detailed usage instructions, including all features, API endpoints, and use cases, refer to the [User Guide](USERGUIDE.md). + +## Project Structure + +- `app.py`: Main Flask application file. +- `models.py`: SQLAlchemy models for database tables. +- `smart_proxy.py`: SMART on FHIR proxy logic and OAuth2 handling. +- `forms.py`: WTForms for handling form data. +- `templates/`: HTML templates for the web UI. +- `static/`: Static files (CSS, JavaScript, images like `FHIRVINE.png`). +- `docker-compose.yml`: Docker Compose configuration. +- `Dockerfile`: Docker container configuration. + +## Contributing + +Contributions are welcome! Please fork the repository, create a new branch, and submit a pull request with your changes. Ensure your code follows PEP 8 standards and includes appropriate tests. + +## License + +This project is licensed under the MIT License. See the `LICENSE` file for details. + +## Contact + +For support or inquiries, contact the development team at `support@fhirvine.example.com`. \ No newline at end of file diff --git a/README_INTEGRATION.md b/README_INTEGRATION.md new file mode 100644 index 0000000..0fca0d0 --- /dev/null +++ b/README_INTEGRATION.md @@ -0,0 +1,72 @@ +# Integrating FHIRVINE with FHIRFLARE + +## Overview + +FHIRVINE can be integrated with FHIRFLARE (a Flask-based FHIR Implementation Guide toolkit) as a SMART on FHIR proxy module. This guide explains how to set up and integrate FHIRVINE with FHIRFLARE for seamless FHIR data access and validation. + +## Prerequisites + +- FHIRVINE and FHIRFLARE repositories cloned. +- Docker and Docker Compose installed. +- Both applications configured and running. + +## Setup + +### 1. Deploy FHIRVINE + +Follow the FHIRVINE proxy setup guide (see `README_PROXY.md`). Ensure it’s running at `http://localhost:5001`. + +### 2. Configure FHIRFLARE + +- Clone FHIRFLARE: + + ```bash + git clone https://github.com/Sudo-JHare/FHIRFLARE-IG-Toolkit + cd FHIRFLARE-IG-Toolkit + ``` + +- Update `appsettings.json` or environment variables to point to FHIRVINE’s proxy: + + ```json + { + "FhirServerUrl": "http://localhost:5001/oauth2/proxy", + "AuthServerUrl": "http://localhost:5001/oauth2" + } + ``` + +### 3. Register FHIRFLARE as a SMART App in FHIRVINE + +- In FHIRVINE, go to `http://localhost:5001/app-gallery`. +- Register FHIRFLARE as a new app: + - Redirect URI: `http://localhost:8080/callback` (or FHIRFLARE’s callback URL). + - Scopes: `patient/*.read offline_access`. +- Note the Client ID and Secret. + +### 4. Update FHIRVINE Configuration + +- In FHIRVINE, go to `http://localhost:5001/configure/proxy-settings`. +- Set the upstream FHIR server to FHIRFLARE’s target FHIR server (e.g., `http://hapi.fhir.org/baseR4`). + +## Integration Steps + +### 1. Authenticate FHIRFLARE via FHIRVINE + +- In FHIRFLARE, initiate an OAuth2 flow using FHIRVINE’s `/oauth2/authorize` endpoint. +- Use the Client ID and Secret from FHIRVINE. +- After authorization, FHIRFLARE will receive an access token. + +### 2. Access FHIR Data + +- FHIRFLARE can now make FHIR requests through FHIRVINE’s proxy (e.g., `http://localhost:5001/oauth2/proxy/Patient`). +- The proxy will handle authentication and forward requests to the upstream FHIR server. + +### 3. Validate FHIR Resources + +- Use FHIRFLARE’s validation module to validate resources fetched via FHIRVINE’s proxy. +- Example: Fetch a Patient resource and validate it against an IG in FHIRFLARE. + +## Troubleshooting + +- **Auth Errors**: Ensure FHIRFLARE’s redirect URI matches the registered URI in FHIRVINE. +- **Proxy Errors**: Check FHIRVINE logs (`docker logs fhirvine_app`) and verify the upstream FHIR server URL. +- **Validation Issues**: Ensure FHIRFLARE’s IG package is correctly loaded. \ No newline at end of file diff --git a/README_PROXY.md b/README_PROXY.md new file mode 100644 index 0000000..5b98f2b --- /dev/null +++ b/README_PROXY.md @@ -0,0 +1,84 @@ +# Using and Setting Up the SMART on FHIR Proxy in FHIRVINE + +## Overview + +FHIRVINE provides a SMART on FHIR proxy to securely connect SMART apps to FHIR servers, supporting OAuth2 authentication and proxying requests. This guide explains how to set up and use the proxy function. + +## Prerequisites + +- Docker and Docker Compose installed. +- A FHIR server (e.g., `http://hapi.fhir.org/baseR4`). +- Python 3.11 (if running locally). + +## Setup + +### 1. Clone the Repository + +```bash +git clone +cd FHIRVINE +``` + +### 2. Configure Environment Variables + +Copy the `.env.example` to `.env` and update the values: + +```env +FLASK_ENV=development +SECRET_KEY=your-secure-random-key +DATABASE_URL=sqlite:////app/instance/fhirvine.db +FHIR_SERVER_URL=http://hapi.fhir.org/baseR4 +``` + +### 3. Run with Docker + +Build and start the application: + +```bash +docker-compose up -d --build +``` + +The proxy will be available at `http://localhost:5001`. + +### 4. (Optional) Run Locally + +If not using Docker: + +```bash +python3 -m venv venv +source venv/bin/activate +pip install -r requirements.txt +flask db upgrade +flask run --host=0.0.0.0 --port=5001 +``` + +## Using the Proxy + +### 1. Register a SMART App + +- Navigate to `http://localhost:5001/app-gallery`. +- Click "Register New App". +- Fill in details (e.g., Redirect URIs, Scopes) and submit to get a Client ID and Secret. + +### 2. Test the Proxy + +- Go to `http://localhost:5001/test-client`. +- Select your app’s Client ID, choose a response mode, and launch the test. +- Grant consent at `/oauth2/authorize`. +- The proxy will handle the OAuth2 flow and proxy FHIR requests to the upstream server (e.g., `/oauth2/proxy/Patient`). + +### 3. Configure the Proxy + +- Visit `http://localhost:5001/configure/proxy-settings` to set the FHIR server URL and proxy timeout. +- Save your settings to update the proxy configuration. + +## Key Endpoints + +- **Authorization**: `/oauth2/authorize` - Initiates the OAuth2 flow. +- **Token**: `/oauth2/token` - Exchanges code for an access token. +- **Proxy**: `/oauth2/proxy/` - Proxies FHIR requests with the access token. + +## Troubleshooting + +- **Logs**: Check logs with `docker logs fhirvine_app` for errors. +- **Database**: Ensure values are saved in `/app/instance/fhirvine.db`. \ No newline at end of file diff --git a/USERGUIDE.markdown b/USERGUIDE.markdown new file mode 100644 index 0000000..88b1af0 --- /dev/null +++ b/USERGUIDE.markdown @@ -0,0 +1,247 @@ +# FHIRVINE SMART Proxy User Guide + +## Introduction + +FHIRVINE is a SMART on FHIR proxy that simplifies the integration, testing, and configuration of SMART applications with FHIR servers. This guide provides a comprehensive overview of all features, API endpoints, and use cases to help developers and administrators effectively use FHIRVINE. + +## Features Overview + +### App Gallery +- **Purpose**: Register, view, edit, and delete SMART applications. +- **Access**: Navigate to `/app-gallery` from the homepage. +- **Functionality**: + - Register new apps with details like name, redirect URIs, scopes, and logo. + - Edit existing app details. + - Delete apps and associated tokens. + - Test apps using temporary registrations (24-hour expiry). + +### Test Client Mode +- **Purpose**: Simulate a SMART app client to test OAuth2 authentication flows. +- **Access**: Navigate to `/test-client`. +- **Functionality**: + - Select a registered app by Client ID. + - Choose response mode: inline (display response on page) or redirect (send to app’s redirect URI). + - Initiate an OAuth2 authorization flow, grant consent, and view the resulting authorization code or token. + +### Test Server Mode +- **Purpose**: Simulate a SMART on FHIR server to test app interactions. +- **Access**: Navigate to `/test-server`. +- **Functionality**: + - Input Client ID, Client Secret, Redirect URI, and scopes. + - Initiate an OAuth2 flow, grant consent, and receive an access token and refresh token. + - View token details and test token exchange. + +### Configuration Menu +- **Purpose**: Customize FHIRVINE’s behavior through a user-friendly interface. +- **Access**: Navigate to `/configure/security`, `/configure/proxy-settings`, or `/configure/server-endpoints`. +- **Submenus**: + - **Security Settings**: + - Configure access token duration (seconds). + - Configure refresh token duration (seconds). + - Set allowed OAuth2 scopes. + - **Proxy Settings**: + - Set the upstream FHIR server URL. + - Adjust the proxy request timeout (seconds). + - **Server Endpoints**: + - Define the metadata endpoint path. + - Define the capability statement endpoint path. + - Define the base resource endpoint path. + +### API Documentation +- **Purpose**: Explore and test FHIRVINE’s API endpoints. +- **Access**: Navigate to `/apidocs`. +- **Functionality**: + - View all available API endpoints with descriptions. + - Test endpoints directly from the Swagger UI. + +## Web Interface Usage + +### Homepage +- **URL**: `/` +- **Description**: The landing page provides an overview of FHIRVINE and navigation links to key features. +- **Actions**: + - Click "Explore Apps" to access the App Gallery. + - Click "Test Client" to test as a client. + - Click "Test Server" to test as a server. + - Click "Configure" to access the configuration menu. + +### Registering a New App +1. Go to `/app-gallery`. +2. Click "Register New App". +3. Fill in the form: + - **Application Name**: e.g., "My SMART App". + - **Redirect URIs**: Space-separated list (e.g., `https://myapp.com/callback`). + - **Allowed Scopes**: Space-separated (e.g., `patient/*.read openid`). + - **Logo URI**, **Contacts**, **Terms of Service URI**, **Privacy Policy URI**: Optional fields. +4. Submit the form to receive a Client ID and Client Secret. + +### Testing an App as a Client +1. Go to `/test-client`. +2. Select a Client ID from the dropdown (populated from registered apps). +3. Choose a response mode: + - **Inline**: View the response on the page. + - **Redirect**: Redirect to the app’s URI with the authorization code. +4. Click "Launch Test" to initiate the OAuth2 flow. +5. On the consent page (`/oauth2/authorize`), click "Allow" to proceed. +6. View the authorization code or token response. + +### Testing as a Server +1. Go to `/test-server`. +2. Enter: + - **Client ID**: From a registered app. + - **Client Secret**: From registration. + - **Redirect URI**: App’s callback URL. + - **Scopes**: Space-separated scopes to request. +3. Click "Initiate Authorization". +4. Grant consent on the `/oauth2/authorize` page. +5. Receive and view the access token, refresh token, and token request details. + +### Configuring Settings +- **Security Settings** (`/configure/security`): + - Adjust token durations and scopes, then save. +- **Proxy Settings** (`/configure/proxy-settings`): + - Set the FHIR server URL and timeout, then save. +- **Server Endpoints** (`/configure/server-endpoints`): + - Define endpoint paths, then save. + +## API Endpoints + +### Overview +FHIRVINE exposes several API endpoints under the `/oauth2` prefix, documented via Swagger UI at `/apidocs`. Below are the key endpoints and their use cases. + +### 1. Well-Known SMART Configuration +- **Endpoint**: `GET /.well-known/smart-configuration` +- **Description**: Provides the SMART on FHIR configuration for discovery. +- **Use Case**: Apps use this to discover FHIRVINE’s OAuth2 endpoints. +- **Response**: + ```json + { + "issuer": "http://localhost:5001/oauth2", + "authorization_endpoint": "http://localhost:5001/oauth2/authorize", + "token_endpoint": "http://localhost:5001/oauth2/token", + "revocation_endpoint": "http://localhost:5001/oauth2/revoke", + "introspection_endpoint": "http://localhost:5001/oauth2/introspect", + "scopes_supported": ["openid", "profile", "launch", "launch/patient", "patient/*.read", "offline_access"], + "response_types_supported": ["code"], + "grant_types_supported": ["authorization_code", "refresh_token"] + } + ``` + +### 2. Authorize +- **Endpoint**: `GET /oauth2/authorize` +- **Description**: Initiates the OAuth2 authorization flow. +- **Parameters**: + - `client_id`: Client ID of the app. + - `redirect_uri`: App’s callback URL. + - `scope`: Space-separated scopes (e.g., `patient/*.read openid`). + - `response_type`: Must be `code`. + - `state`: State parameter for CSRF protection. + - `aud`: Audience (FHIR server URL). + - `code_challenge`: PKCE code challenge. + - `code_challenge_method`: Must be `S256`. +- **Use Case**: Redirect users to authenticate and authorize the app. +- **Response**: Redirects to the `redirect_uri` with an authorization code (e.g., `?code=&state=`). + +### 3. Token +- **Endpoint**: `POST /oauth2/token` +- **Description**: Exchanges an authorization code for an access token. +- **Parameters**: + - `grant_type`: `authorization_code` or `refresh_token`. + - `code`: Authorization code (for `authorization_code` grant). + - `redirect_uri`: Must match the original redirect URI. + - `client_id`: Client ID. + - `client_secret`: Client Secret. + - `code_verifier`: PKCE code verifier. + - `refresh_token`: Refresh token (for `refresh_token` grant). +- **Use Case**: Obtain access and refresh tokens to interact with the FHIR server. +- **Response**: + ```json + { + "access_token": "", + "refresh_token": "", + "token_type": "Bearer", + "expires_in": 3600, + "scope": "patient/*.read openid" + } + ``` + +### 4. Revoke +- **Endpoint**: `POST /oauth2/revoke` +- **Description**: Revokes an access or refresh token. +- **Parameters**: + - `token`: The token to revoke. + - `token_type_hint`: `access_token` or `refresh_token` (optional). +- **Use Case**: Invalidate tokens when they are no longer needed. +- **Response**: + ```json + {} + ``` + +### 5. Introspect +- **Endpoint**: `POST /oauth2/introspect` +- **Description**: Verifies the status of a token. +- **Parameters**: + - `token`: The token to introspect. +- **Use Case**: Check if a token is active or expired. +- **Response**: + ```json + { + "active": true, + "client_id": "", + "scope": "patient/*.read openid", + "exp": 1698777600 + } + ``` + +### 6. FHIR Proxy +- **Endpoint**: `GET|POST /oauth2/proxy/` +- **Description**: Proxies requests to the upstream FHIR server, adding the access token in the Authorization header. +- **Parameters**: + - `path`: The FHIR resource path (e.g., `Patient/123`). + - Headers: `Authorization: Bearer `. +- **Use Case**: Access FHIR resources securely through the proxy. +- **Response**: The FHIR server’s response (e.g., a Patient resource in JSON). + +## Use Cases + +### Use Case 1: Registering and Testing a SMART App +1. Register a new app in the App Gallery with redirect URI `https://myapp.com/callback` and scopes `patient/*.read openid`. +2. Use the Client ID and Secret in `/test-client` to simulate an OAuth2 flow. +3. Grant consent and receive an authorization code. +4. Exchange the code for an access token using the `/oauth2/token` endpoint. +5. Use the access token to query FHIR resources via `/oauth2/proxy/Patient`. + +### Use Case 2: Configuring Proxy Settings +1. Go to `/configure/proxy-settings`. +2. Change the FHIR server URL to a custom server (e.g., `https://myfhirserver.com`). +3. Set the proxy timeout to 30 seconds. +4. Save the settings and test the proxy by querying a resource. + +### Use Case 3: Revoking a Token +1. After testing an app, obtain a refresh token. +2. Use the `/oauth2/revoke` endpoint to invalidate the refresh token. +3. Verify the token’s status using `/oauth2/introspect`. + +## Troubleshooting + +### Common Issues +- **Configuration Values Not Displaying**: + - Check the logs for `get_config_value` debug messages to confirm database retrieval. + - Ensure the database (`/app/instance/fhirvine.db`) contains the correct values. +- **OAuth2 Flow Fails**: + - Verify the Client ID, Secret, and Redirect URI match the registered app. + - Check the FHIR server URL in `/configure/proxy-settings`. +- **Images Not Displaying**: + - Ensure `FHIRVINE.png` is in `/app/static/`. + - Check volume mounts in `docker-compose.yml` (e.g., `./static:/app/static`). + +### Logs +- Logs are available via Docker: + ```bash + docker logs fhirvine_app + ``` +- Look for `DEBUG` and `ERROR` messages to diagnose issues. + +## Support + +For additional help, contact `support@fhirvine.example.com` or open an issue on the project’s GitHub repository. \ No newline at end of file diff --git a/app.py b/app.py index 8ac3beb..f9d1fb2 100644 --- a/app.py +++ b/app.py @@ -4,44 +4,55 @@ import logging import secrets import base64 import hashlib -from flask import Flask, render_template, request, redirect, url_for, flash, session +import requests +import json +from flask import Flask, render_template, request, redirect, url_for, flash, session, current_app from flask_migrate import Migrate -from flasgger import Swagger +from flasgger import Swagger, swag_from from dotenv import load_dotenv from werkzeug.security import generate_password_hash +from datetime import datetime, timedelta +from forms import FlaskForm +from sqlalchemy.exc import OperationalError +from sqlalchemy import text +from wtforms import StringField, URLField, SubmitField +from wtforms.validators import DataRequired, URL -# Add current directory to Python path for reliable imports sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) -# Import from our modules -from models import database, RegisteredApp, OAuthToken -from forms import RegisterAppForm, TestClientForm +from models import database, RegisteredApp, OAuthToken, AuthorizationCode, Configuration +from forms import RegisterAppForm, TestClientForm, SecurityConfigForm, ProxyConfigForm, EndpointConfigForm, ConsentForm from smart_proxy import smart_blueprint, configure_oauth -# Load environment variables from .env file load_dotenv() -# Set up logging logging.basicConfig(level=logging.DEBUG) logger = logging.getLogger(__name__) -# Initialize extensions migrate = Migrate() def create_app(): - """Create and configure the Flask application.""" app = Flask(__name__, instance_relative_config=True) - - # Configuration app.config.from_mapping( SECRET_KEY=os.environ.get('SECRET_KEY', 'dev-secret-key-for-fhirvine'), SQLALCHEMY_DATABASE_URI=os.environ.get('DATABASE_URL', f'sqlite:///{os.path.join(app.instance_path, "fhirvine.db")}'), SQLALCHEMY_TRACK_MODIFICATIONS=False, - # Default proxy settings (can be overridden in .env) FHIR_SERVER_URL=os.environ.get('FHIR_SERVER_URL', 'http://hapi.fhir.org/baseR4'), + PROXY_TIMEOUT=10, + METADATA_ENDPOINT='/metadata', + CAPABILITY_ENDPOINT='/metadata', + RESOURCE_BASE_ENDPOINT='', + TOKEN_DURATION=3600, + REFRESH_TOKEN_DURATION=86400, + ALLOWED_SCOPES='openid profile launch launch/patient patient/*.read offline_access', + WTF_CSRF_ENABLED=True ) - # Ensure the instance folder exists + if not app.config['SECRET_KEY']: + logger.error("SECRET_KEY is not set. CSRF protection may fail.") + else: + logger.debug(f"SECRET_KEY is set: {app.config['SECRET_KEY'][:8]}...") + try: os.makedirs(app.instance_path, exist_ok=True) logger.info(f"Instance path created/verified: {app.instance_path}") @@ -49,12 +60,10 @@ def create_app(): except OSError as e: logger.error(f"Could not create instance path at {app.instance_path}: {e}", exc_info=True) - # Initialize Flask extensions database.init_app(app) migrate.init_app(app, database) - # Initialize Flasgger for OpenAPI - Swagger(app, template={ + swagger_template = { "info": { "title": "FHIRVINE SMART on FHIR Proxy API", "version": "1.0", @@ -63,39 +72,94 @@ def create_app(): "host": "localhost:5001", "basePath": "/oauth2", "schemes": ["http"] - }) + } + swagger_config = { + "specs": [ + { + "endpoint": "apispec_1", + "route": "/apispec/1", + "rule_filter": lambda rule: True, + "model_filter": lambda tag: True, + } + ], + "uimode": "view", + "specs_route": "/apispec/", + "headers": [] + } + swagger = Swagger(app, template=swagger_template, config=swagger_config) - # Configure Authlib - configure_oauth(app) + configure_oauth(app, db=database, registered_app_model=RegisteredApp, oauth_token_model=OAuthToken, auth_code_model=AuthorizationCode) - # Register blueprints app.register_blueprint(smart_blueprint, url_prefix='/oauth2') - # Main application routes + def load_config_from_db(): + try: + configs = Configuration.query.all() + logger.debug(f"Loaded configs from database: {[{'key': c.key, 'value': c.value} for c in configs]}") + for config in configs: + try: + app.config[config.key] = int(config.value) if config.key in ['TOKEN_DURATION', 'PROXY_TIMEOUT', 'REFRESH_TOKEN_DURATION'] else config.value + except ValueError: + app.config[config.key] = config.value + except OperationalError as e: + logger.warning(f"Could not load configurations from database: {e}. Using default config values.") + + def get_config_value(key, default): + try: + # Ensure the session is fresh + database.session.expire_all() + config = Configuration.query.filter_by(key=key).first() + if config: + logger.debug(f"Retrieved {key} from database (exact match): {config.value}") + return int(config.value) if key in ['TOKEN_DURATION', 'PROXY_TIMEOUT', 'REFRESH_TOKEN_DURATION'] else config.value + # Try case-insensitive match + config = Configuration.query.filter(Configuration.key.ilike(key)).first() + if config: + logger.debug(f"Retrieved {key} from database (case-insensitive match): {config.value}") + return int(config.value) if key in ['TOKEN_DURATION', 'PROXY_TIMEOUT', 'REFRESH_TOKEN_DURATION'] else config.value + # Fallback: Direct database query + result = database.session.execute( + text("SELECT value FROM configurations WHERE key = :key"), + {"key": key} + ).fetchone() + if result: + value = result[0] + logger.debug(f"Retrieved {key} from database (direct query): {value}") + return int(value) if key in ['TOKEN_DURATION', 'PROXY_TIMEOUT', 'REFRESH_TOKEN_DURATION'] else value + logger.debug(f"No value found in database for {key}, using default: {default}") + except OperationalError as e: + logger.error(f"Database error while retrieving {key}: {e}") + except Exception as e: + logger.error(f"Unexpected error while retrieving {key}: {e}") + return default + + with app.app_context(): + load_config_from_db() + @app.route('/') def index(): return render_template('index.html') @app.route('/app-gallery') def app_gallery(): - """Display the list of registered applications.""" + form = FlaskForm() try: apps = RegisteredApp.query.order_by(RegisteredApp.app_name).all() + apps = [app for app in apps if app.is_test_app is None or app.is_test_app == False or app.test_app_expires_at > datetime.utcnow()] + logger.debug(f"App gallery apps retrieved: {[{'id': app.id, 'app_name': app.app_name, 'client_id': app.client_id, 'is_test_app': app.is_test_app, 'test_app_expires_at': app.test_app_expires_at} for app in apps]}") except Exception as e: logger.error(f"Error fetching apps from database: {e}", exc_info=True) flash("Could not load application gallery. Please try again later.", "error") apps = [] - return render_template('app_gallery/gallery.html', apps=apps) + return render_template('app_gallery/gallery.html', apps=apps, form=form) @app.route('/register-app', methods=['GET', 'POST']) def register_app(): - """Handle registration of new applications.""" form = RegisterAppForm() + is_test = request.args.get('test', '0') == '1' if form.validate_on_submit(): try: - # Generate a unique client_id client_id = secrets.token_urlsafe(32) - # Normalize redirect_uris to lowercase redirect_uris = form.redirect_uris.data.strip().lower() new_app = RegisteredApp( app_name=form.app_name.data, @@ -105,9 +169,10 @@ def create_app(): logo_uri=form.logo_uri.data or None, contacts=form.contacts.data.strip() or None, tos_uri=form.tos_uri.data or None, - policy_uri=form.policy_uri.data or None + policy_uri=form.policy_uri.data or None, + is_test_app=is_test, + test_app_expires_at=datetime.utcnow() + timedelta(hours=24) if is_test else None ) - # Generate and hash client secret client_secret = secrets.token_urlsafe(40) new_app.set_client_secret(client_secret) database.session.add(new_app) @@ -115,17 +180,16 @@ def create_app(): flash(f"Application '{new_app.app_name}' registered successfully!", "success") flash(f"Client ID: {new_app.client_id}", "info") flash(f"Client Secret: {client_secret} (Please store this securely!)", "warning") - logger.info(f"Registered new app: {new_app.app_name} (ID: {new_app.id}, ClientID: {new_app.client_id})") + logger.info(f"Registered new app: {new_app.app_name} (ID: {new_app.id}, ClientID: {new_app.client_id}, IsTest: {new_app.is_test_app}, ExpiresAt: {new_app.test_app_expires_at}, LogoURI: {new_app.logo_uri}, TosURI: {new_app.tos_uri}, PolicyURI: {new_app.policy_uri})") return redirect(url_for('app_gallery')) except Exception as e: database.session.rollback() logger.error(f"Error registering application '{form.app_name.data}': {e}", exc_info=True) flash(f"Error registering application: {e}", "error") - return render_template('app_gallery/register.html', form=form) + return render_template('app_gallery/register.html', form=form, is_test=is_test) @app.route('/edit-app/', methods=['GET', 'POST']) def edit_app(app_id): - """Handle editing of an existing application.""" app = RegisteredApp.query.get_or_404(app_id) form = RegisterAppForm(obj=app) if form.validate_on_submit(): @@ -149,11 +213,10 @@ def create_app(): @app.route('/delete-app/', methods=['GET', 'POST']) def delete_app(app_id): - """Handle deletion of an existing application.""" app = RegisteredApp.query.get_or_404(app_id) - if request.method == 'POST': + form = FlaskForm() + if form.validate_on_submit(): try: - # Delete associated tokens OAuthToken.query.filter_by(client_id=app.client_id).delete() database.session.delete(app) database.session.commit() @@ -164,28 +227,28 @@ def create_app(): database.session.rollback() logger.error(f"Error deleting application '{app.app_name}': {e}", exc_info=True) flash(f"Error deleting application: {e}", "error") - return render_template('app_gallery/delete.html', app=app) + return render_template('app_gallery/delete.html', app=app, form=form) @app.route('/test-client', methods=['GET', 'POST']) def test_client(): - """Handle testing of registered SMART app launches.""" form = TestClientForm() + response_data = None + response_mode = session.get('response_mode', 'inline') + logger.debug(f"Session contents before form submission: {session}") if form.validate_on_submit(): client_id = form.client_id.data app = RegisteredApp.query.filter_by(client_id=client_id).first() if not app: flash("Invalid Client ID.", "error") return redirect(url_for('test_client')) - # Deduplicate scopes + response_mode = form.response_mode.data if hasattr(form, 'response_mode') and form.response_mode.data else 'inline' + session['response_mode'] = response_mode scopes = ' '.join(set(app.scopes.split())) - # Generate PKCE code verifier and challenge code_verifier = secrets.token_urlsafe(32) code_challenge = base64.urlsafe_b64encode( hashlib.sha256(code_verifier.encode('ascii')).digest() ).decode('ascii').rstrip('=') - # Store code verifier in session for /token session['code_verifier'] = code_verifier - # Construct SMART authorization URL, ensuring redirect_uri is lowercase redirect_uri = app.get_default_redirect_uri().lower() auth_url = url_for( 'smart_proxy.authorize', @@ -194,43 +257,279 @@ def create_app(): scope=scopes, response_type='code', state='test_state_123', - aud='http://hapi.fhir.org/baseR4/metadata', + aud=current_app.config['FHIR_SERVER_URL'] + current_app.config['METADATA_ENDPOINT'], code_challenge=code_challenge, code_challenge_method='S256', _external=True ) logger.info(f"Redirecting to authorization URL for client '{client_id}'") logger.info(f"Code verifier for client '{client_id}': {code_verifier}") + session['post_auth_redirect'] = redirect_uri return redirect(auth_url) - apps = RegisteredApp.query.all() - return render_template('test_client.html', form=form, apps=apps) + if 'code' in request.args and 'state' in request.args: + code = request.args.get('code') + state = request.args.get('state') + redirect_uri = session.get('post_auth_redirect') + if redirect_uri: + if response_mode == 'redirect': + redirect_url = f"{redirect_uri}?code={code}&state={state}" + session.pop('post_auth_redirect', None) + session.pop('response_mode', None) + return redirect(redirect_url) + else: + try: + response = requests.get(redirect_uri, params={'code': code, 'state': state}) + response.raise_for_status() + response_data = response.json() + logger.debug(f"Received response from redirect_uri: {response_data}") + except requests.RequestException as e: + logger.error(f"Error fetching response from redirect_uri: {e}") + flash(f"Error fetching response from redirect_uri: {e}", "error") + finally: + session.pop('post_auth_redirect', None) + session.pop('response_mode', None) + try: + apps = RegisteredApp.query.filter( + (RegisteredApp.is_test_app == False) | + (RegisteredApp.is_test_app.is_(None)) | + (RegisteredApp.test_app_expires_at > datetime.utcnow()) + ).all() + logger.debug(f"Test client apps retrieved: {[{'id': app.id, 'app_name': app.app_name, 'client_id': app.client_id, 'is_test_app': app.is_test_app, 'test_app_expires_at': app.test_app_expires_at} for app in apps]}") + except Exception as e: + logger.error(f"Error fetching apps for test client: {e}", exc_info=True) + flash("Could not load applications. Please try again later.", "error") + apps = [] + return render_template('test_client.html', form=form, apps=apps, response_data=response_data, response_mode=response_mode) - @app.route('/configure/proxy-settings') - def proxy_settings(): - """Display proxy settings page.""" - return render_template('configure/proxy_settings.html', fhir_server_url=app.config['FHIR_SERVER_URL']) + @app.route('/test-server', methods=['GET', 'POST']) + def test_server(): + class ServerTestForm(FlaskForm): + client_id = StringField('Client ID', validators=[DataRequired()]) + client_secret = StringField('Client Secret', validators=[DataRequired()]) + redirect_uri = URLField('Redirect URI', validators=[DataRequired(), URL()]) + scopes = StringField('Scopes (Space-separated)', validators=[DataRequired()], default='openid profile launch launch/patient patient/*.read offline_access') + submit = SubmitField('Initiate Authorization') - @app.route('/configure/server-endpoints') - def server_endpoints(): - """Display server endpoints page.""" - return render_template('configure/server_endpoints.html') + form = ServerTestForm() + response_data = None + if form.validate_on_submit(): + try: + client_id = form.client_id.data + client_secret = form.client_secret.data + redirect_uri = form.redirect_uri.data + scopes = ' '.join(set(form.scopes.data.split())) + code_verifier = secrets.token_urlsafe(32) + code_challenge = base64.urlsafe_b64encode( + hashlib.sha256(code_verifier.encode('ascii')).digest() + ).decode('ascii').rstrip('=') + session['server_test_code_verifier'] = code_verifier + session['server_test_client_secret'] = client_secret + auth_url = url_for( + 'smart_proxy.authorize', + client_id=client_id, + redirect_uri=redirect_uri, + scope=scopes, + response_type='code', + state='server_test_state', + aud=current_app.config['FHIR_SERVER_URL'] + current_app.config['METADATA_ENDPOINT'], + code_challenge=code_challenge, + code_challenge_method='S256', + _external=True + ) + session['server_test_redirect_uri'] = redirect_uri + return redirect(auth_url) + except Exception as e: + flash(f"Error initiating authorization: {e}", "error") + logger.error(f"Error in test-server: {e}", exc_info=True) + if 'code' in request.args and 'state' in request.args and request.args.get('state') == 'server_test_state': + code = request.args.get('code') + redirect_uri = session.get('server_test_redirect_uri') + client_secret = session.get('server_test_client_secret') + code_verifier = session.get('server_test_code_verifier') + if redirect_uri and client_secret and code_verifier: + token_url = url_for('smart_proxy.issue_token', _external=True) + token_data = { + 'grant_type': 'authorization_code', + 'code': code, + 'redirect_uri': redirect_uri, + 'client_id': form.client_id.data, + 'client_secret': client_secret, + 'code_verifier': code_verifier + } + try: + response = requests.post(token_url, data=token_data) + response.raise_for_status() + response_data = response.json() + response_data['token_request'] = token_data + logger.debug(f"Token response: {response_data}") + except requests.RequestException as e: + flash(f"Error exchanging code for token: {e}", "error") + logger.error(f"Error exchanging code for token: {e}", exc_info=True) + finally: + session.pop('server_test_redirect_uri', None) + session.pop('server_test_client_secret', None) + session.pop('server_test_code_verifier', None) + return render_template('test_server.html', form=form, response_data=response_data) - @app.route('/configure/security') + @app.route('/configure/security', methods=['GET', 'POST']) def security_settings(): - """Display security settings page.""" - return render_template('configure/security.html') + token_duration = get_config_value('TOKEN_DURATION', 3600) + refresh_token_duration = get_config_value('REFRESH_TOKEN_DURATION', 86400) + allowed_scopes = get_config_value('ALLOWED_SCOPES', 'openid profile launch launch/patient patient/*.read offline_access') + form = SecurityConfigForm() + form_data = { + 'token_duration': token_duration, + 'refresh_token_duration': refresh_token_duration, + 'allowed_scopes': allowed_scopes + } + logger.debug(f"Security form data: {form_data}") + form.process(data=form_data) + # Fallback: Directly set form field values + form.token_duration.data = token_duration + form.refresh_token_duration.data = refresh_token_duration + form.allowed_scopes.data = allowed_scopes + logger.debug(f"Security form fields after process: {list(form._fields.keys())}") + logger.debug(f"Security form values before render: token_duration={form.token_duration.data}, refresh_token_duration={form.refresh_token_duration.data}, allowed_scopes={form.allowed_scopes.data}") + if form.validate_on_submit(): + try: + configs = [ + Configuration(key='TOKEN_DURATION', value=str(form.token_duration.data), description='Access token duration in seconds'), + Configuration(key='REFRESH_TOKEN_DURATION', value=str(form.refresh_token_duration.data), description='Refresh token duration in seconds'), + Configuration(key='ALLOWED_SCOPES', value=form.allowed_scopes.data.strip(), description='Allowed OAuth2 scopes') + ] + for config in configs: + existing = Configuration.query.filter_by(key=config.key).first() + if existing: + existing.value = config.value + existing.description = config.description + else: + database.session.add(config) + database.session.commit() + load_config_from_db() + flash("Security settings updated successfully!", "success") + return redirect(url_for('security_settings')) + except Exception as e: + database.session.rollback() + logger.error(f"Error updating security settings: {e}", exc_info=True) + flash(f"Error updating security settings: {e}", "error") + return render_template('configure/security.html', form=form) + + @app.route('/configure/proxy-settings', methods=['GET', 'POST']) + def proxy_settings(): + fhir_server_url = get_config_value('FHIR_SERVER_URL', 'http://hapi.fhir.org/baseR4') + proxy_timeout = get_config_value('PROXY_TIMEOUT', 10) + form = ProxyConfigForm() + form_data = { + 'fhir_server_url': fhir_server_url, + 'proxy_timeout': proxy_timeout + } + logger.debug(f"Proxy settings form data: {form_data}") + form.process(data=form_data) + # Fallback: Directly set form field values + form.fhir_server_url.data = fhir_server_url + form.proxy_timeout.data = proxy_timeout + logger.debug(f"Proxy settings form fields after process: {list(form._fields.keys())}") + logger.debug(f"Proxy settings form values before render: fhir_server_url={form.fhir_server_url.data}, proxy_timeout={form.proxy_timeout.data}") + if form.validate_on_submit(): + try: + configs = [ + Configuration(key='FHIR_SERVER_URL', value=form.fhir_server_url.data.strip(), description='Upstream FHIR server URL'), + Configuration(key='PROXY_TIMEOUT', value=str(form.proxy_timeout.data), description='Proxy request timeout in seconds') + ] + for config in configs: + existing = Configuration.query.filter_by(key=config.key).first() + if existing: + existing.value = config.value + existing.description = config.description + else: + database.session.add(config) + database.session.commit() + load_config_from_db() + flash("Proxy settings updated successfully!", "success") + return redirect(url_for('proxy_settings')) + except Exception as e: + database.session.rollback() + logger.error(f"Error updating proxy settings: {e}", exc_info=True) + flash(f"Error updating proxy settings: {e}", "error") + return render_template('configure/proxy_settings.html', form=form, fhir_server_url=app.config['FHIR_SERVER_URL']) + + @app.route('/configure/server-endpoints', methods=['GET', 'POST']) + def server_endpoints(): + metadata_endpoint = get_config_value('METADATA_ENDPOINT', '/metadata') + capability_endpoint = get_config_value('CAPABILITY_ENDPOINT', '/metadata') + resource_base_endpoint = get_config_value('RESOURCE_BASE_ENDPOINT', '') + form = EndpointConfigForm() + form_data = { + 'metadata_endpoint': metadata_endpoint, + 'capability_endpoint': capability_endpoint, + 'resource_base_endpoint': resource_base_endpoint + } + logger.debug(f"Server endpoints form data: {form_data}") + form.process(data=form_data) + # Fallback: Directly set form field values + form.metadata_endpoint.data = metadata_endpoint + form.capability_endpoint.data = capability_endpoint + form.resource_base_endpoint.data = resource_base_endpoint + logger.debug(f"Server endpoints form fields after process: {list(form._fields.keys())}") + logger.debug(f"Server endpoints form values before render: metadata_endpoint={form.metadata_endpoint.data}, capability_endpoint={form.capability_endpoint.data}, resource_base_endpoint={form.resource_base_endpoint.data}") + if form.validate_on_submit(): + try: + configs = [ + Configuration( + key='METADATA_ENDPOINT', + value=form.metadata_endpoint.data.strip(), + description='FHIR server metadata endpoint' + ), + Configuration( + key='CAPABILITY_ENDPOINT', + value=form.capability_endpoint.data.strip(), + description='FHIR server capability statement endpoint' + ), + Configuration( + key='RESOURCE_BASE_ENDPOINT', + value=form.resource_base_endpoint.data.strip(), + description='Base path for FHIR resources' + ) + ] + for config in configs: + existing = Configuration.query.filter_by(key=config.key).first() + if existing: + existing.value = config.value + existing.description = config.description + else: + database.session.add(config) + database.session.commit() + load_config_from_db() + flash("Endpoint settings updated successfully!", "success") + return redirect(url_for('server_endpoints')) + except Exception as e: + database.session.rollback() + logger.error(f"Error updating endpoint settings: {e}", exc_info=True) + flash(f"Error updating endpoint settings: {e}", "error") + return render_template('configure/server_endpoints.html', form=form) + + @app.route('/api-docs') + @swag_from({ + 'tags': ['Documentation'], + 'summary': 'API Documentation', + 'description': 'Swagger UI for FHIRVINE API documentation.', + 'responses': { + '200': { + 'description': 'Renders the Swagger UI documentation page.' + } + } + }) + def custom_apidocs(): + return render_template('swagger-ui.html') @app.route('/about') def about(): - """Display about page.""" return render_template('about.html') - # Context processors @app.context_processor def inject_site_name(): return dict(site_name='FHIRVINE SMART Proxy') - # Error handlers @app.errorhandler(404) def not_found(error): return render_template('errors/404.html'), 404 diff --git a/docker-compose.yml b/docker-compose.yml index 12c9ba5..72fe468 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -2,25 +2,21 @@ services: fhirvine: - build: . # Build the image from the Dockerfile in the current directory - container_name: fhirvine_app # Optional: Assign a specific name + build: . + container_name: fhirvine_app ports: - - "5001:5001" # Map host port 5001 to container port 5001 (where Waitress listens) + - "5001:5001" volumes: - # Mount the instance directory (for DB) using a named volume - fhirvine_instance:/app/instance - # Mount the migrations directory using a named volume - - fhirvine_migrations:/app/migrations # <-- ADDED THIS LINE + - fhirvine_migrations:/app/migrations environment: - # Load environment variables from a .env file in the same directory as docker-compose.yml - - FLASK_ENV=${FLASK_ENV:-development} # Default to development if not set in .env - # SECRET_KEY should be set in your .env file for security + - FLASK_ENV=${FLASK_ENV:-development} env_file: - - .env # Load variables from .env file - restart: unless-stopped # Optional: Restart policy + - .env + command: > + sh -c "flask db upgrade && waitress-serve --host=0.0.0.0 --port=5001 --call 'app:create_app'" + restart: unless-stopped -# Define the named volumes volumes: fhirvine_instance: - fhirvine_migrations: # <-- ADDED THIS LINE - + fhirvine_migrations: \ No newline at end of file diff --git a/forms.py b/forms.py index 36a114f..d8fee6e 100644 --- a/forms.py +++ b/forms.py @@ -1,9 +1,8 @@ import re from flask_wtf import FlaskForm -from wtforms import StringField, TextAreaField, URLField, SubmitField, PasswordField -from wtforms.validators import DataRequired, Length, Optional, URL, Regexp, ValidationError +from wtforms import StringField, TextAreaField, URLField, SubmitField, HiddenField, IntegerField, RadioField +from wtforms.validators import DataRequired, Length, Optional, URL, Regexp, ValidationError, NumberRange -# Custom validator for space-separated URIs def validate_uris(form, field): uris = field.data.split() for uri in uris: @@ -12,16 +11,19 @@ def validate_uris(form, field): if ' ' in uri: raise ValidationError(f'URI cannot contain spaces: "{uri}"') -# Custom validator for space-separated scopes def validate_scopes(form, field): scopes = field.data.split() - scope_pattern = r'^[a-zA-Z0-9\/\.\*\-]+$' + scope_pattern = r'^[a-zA-Z0-9\/\.\*\-_]+$' for scope in scopes: if not re.match(scope_pattern, scope): - raise ValidationError(f'Invalid scope format: "{scope}". Allowed characters: a-z A-Z 0-9 / . * -') + raise ValidationError(f'Invalid scope format: "{scope}". Allowed characters: a-z A-Z 0-9 / . * _ -') + +def validate_optional_url(form, field): + if field.data and field.data.strip(): + url_validator = URL(require_tld=False) + url_validator(form, field) class RegisterAppForm(FlaskForm): - """Form for registering a new SMART application.""" app_name = StringField( 'Application Name', validators=[DataRequired(), Length(min=3, max=100)] @@ -29,39 +31,108 @@ class RegisterAppForm(FlaskForm): redirect_uris = TextAreaField( 'Redirect URIs (Space-separated)', validators=[DataRequired(), validate_uris], - description='Enter one or more valid redirect URIs, separated by spaces. Example: https://myapp.com/callback https://localhost:3000/cb' + description='Enter one or more valid redirect URIs, separated by spaces.' ) scopes = TextAreaField( 'Allowed Scopes (Space-separated)', validators=[DataRequired(), validate_scopes], default='openid profile launch launch/patient patient/*.read offline_access', - description='Enter the scopes this application is allowed to request, separated by spaces. Standard SMART scopes recommended.' + description='Enter the scopes this application is allowed to request, separated by spaces.' ) - logo_uri = URLField( + logo_uri = StringField( 'Logo URI (Optional)', - validators=[Optional(), URL()], + validators=[Optional(strip_whitespace=True), validate_optional_url], description='A URL pointing to an image for the application logo.' ) contacts = TextAreaField( 'Contacts (Optional, space-separated)', - description='Contact email addresses (e.g., mailto:dev@example.com) or URLs, separated by spaces.' + validators=[Optional(strip_whitespace=True)], + description='Contact email addresses or URLs, separated by spaces.' ) - tos_uri = URLField( + tos_uri = StringField( 'Terms of Service URI (Optional)', - validators=[Optional(), URL()], + validators=[Optional(strip_whitespace=True), validate_optional_url], description='Link to the application\'s Terms of Service.' ) - policy_uri = URLField( + policy_uri = StringField( 'Privacy Policy URI (Optional)', - validators=[Optional(), URL()], + validators=[Optional(strip_whitespace=True), validate_optional_url], description='Link to the application\'s Privacy Policy.' ) submit = SubmitField('Register Application') class TestClientForm(FlaskForm): - """Form for testing SMART app launches.""" client_id = StringField( 'Client ID', validators=[DataRequired(), Length(min=1, max=100)] ) - submit = SubmitField('Launch Test') \ No newline at end of file + response_mode = RadioField( + 'Response Mode', + choices=[ + ('inline', 'Display Response Inline'), + ('redirect', 'Redirect to URL') + ], + default='inline' + ) + submit = SubmitField('Launch Test') + +class ConsentForm(FlaskForm): + consent = HiddenField('Consent', validators=[DataRequired()]) + submit_allow = SubmitField('Allow') + submit_deny = SubmitField('Deny') + +class SecurityConfigForm(FlaskForm): + token_duration = IntegerField( + 'Access Token Duration (seconds)', + validators=[DataRequired(), NumberRange(min=300, max=86400)], + default=3600, + description='Duration for access tokens (300 to 86400 seconds).' + ) + refresh_token_duration = IntegerField( + 'Refresh Token Duration (seconds)', + validators=[DataRequired(), NumberRange(min=3600, max=604800)], + default=86400, + description='Duration for refresh tokens (3600 to 604800 seconds).' + ) + allowed_scopes = TextAreaField( + 'Allowed Scopes (Space-separated)', + validators=[DataRequired(), validate_scopes], + default='openid profile launch launch/patient patient/*.read offline_access', + description='Scopes allowed for all applications.' + ) + submit = SubmitField('Save Security Settings') + +class ProxyConfigForm(FlaskForm): + fhir_server_url = URLField( + 'FHIR Server URL', + validators=[DataRequired(), URL()], + description='Base URL of the upstream FHIR server.' + ) + proxy_timeout = IntegerField( + 'Proxy Timeout (seconds)', + validators=[DataRequired(), NumberRange(min=5, max=60)], + default=10, + description='Timeout for proxy requests (5 to 60 seconds).' + ) + submit = SubmitField('Save Proxy Settings') + +class EndpointConfigForm(FlaskForm): + metadata_endpoint = StringField( + 'Metadata Endpoint', + validators=[DataRequired(), Length(min=1, max=255)], + default='/metadata', + description='Relative path to the FHIR server metadata endpoint (e.g., /metadata).' + ) + capability_endpoint = StringField( + 'Capability Statement Endpoint', + validators=[DataRequired(), Length(min=1, max=255)], + default='/metadata', + description='Relative path to the FHIR server capability statement (e.g., /metadata).' + ) + resource_base_endpoint = StringField( + 'Resource Base Endpoint', + validators=[DataRequired(), Length(min=1, max=255)], + default='', + description='Base path for FHIR resources (e.g., /baseR4).' + ) + submit = SubmitField('Save Endpoint Settings') \ No newline at end of file diff --git a/minimal_test.py b/minimal_test.py deleted file mode 100644 index 567203e..0000000 --- a/minimal_test.py +++ /dev/null @@ -1,138 +0,0 @@ -# minimal_test.py (Updated to Run Test) -import logging -import os -from flask import Flask, request, jsonify -from authlib.integrations.flask_oauth2 import AuthorizationServer -from authlib.oauth2.rfc6749.errors import OAuth2Error -from werkzeug.datastructures import ImmutableMultiDict - -# --- Basic Logging Setup --- -logging.basicConfig(level=logging.DEBUG, format='%(levelname)s:%(name)s:%(message)s') # Simplified format for clarity -logger = logging.getLogger(__name__) - -# --- Dummy Client Implementation --- -class DummyClient: - def __init__(self, client_id, redirect_uris, scopes, response_types=['code']): - self.client_id = client_id - self._redirect_uris = redirect_uris.split() if isinstance(redirect_uris, str) else redirect_uris - self._scopes = scopes.split() if isinstance(scopes, str) else scopes - self._response_types = response_types - - def get_client_id(self): - return self.client_id - - def check_redirect_uri(self, redirect_uri): - logger.debug(f"[DummyClient] Checking redirect_uri: '{redirect_uri}' against {self._redirect_uris}") - return redirect_uri in self._redirect_uris - - def check_response_type(self, response_type): - logger.debug(f"[DummyClient] Checking response_type: '{response_type}' against {self._response_types}") - return response_type in self._response_types - - def get_allowed_scopes(self, requested_scopes): - allowed = set(self._scopes) - requested = set(requested_scopes.split()) - granted = allowed.intersection(requested) - logger.debug(f"[DummyClient] Checking scopes: Requested={requested}, Allowed={allowed}, Granted={granted}") - return ' '.join(list(granted)) - - def check_grant_type(self, grant_type): - return grant_type == 'authorization_code' - - def has_client_secret(self): - return True - - def check_client_secret(self, client_secret): - return True - -# --- Dummy Query Client Function --- -DUMMY_CLIENT_ID = 'test-client-123' -DUMMY_REDIRECT_URI = 'http://localhost:8000/callback' -DUMMY_SCOPES = 'openid profile launch/patient patient/*.read' - -dummy_client_instance = DummyClient(DUMMY_CLIENT_ID, DUMMY_REDIRECT_URI, DUMMY_SCOPES) - -def query_client(client_id): - logger.debug(f"[Minimal Test] query_client called for ID: {client_id}") - if client_id == DUMMY_CLIENT_ID: - logger.debug("[Minimal Test] Returning dummy client instance.") - return dummy_client_instance - logger.warning(f"[Minimal Test] Client ID '{client_id}' not found.") - return None - -# --- Flask App and Authlib Setup --- -app = Flask(__name__) -app.config['SECRET_KEY'] = 'minimal-test-secret' - -# Check Authlib version -try: - import authlib - import inspect - logger.info(f"Authlib version found: {authlib.__version__}") - logger.info(f"Authlib location: {inspect.getfile(authlib)}") -except ImportError: - logger.error("Could not import Authlib!") -except Exception as e: - logger.error(f"Error getting Authlib info: {e}") - -# Initialize AuthorizationServer -authorization_server = AuthorizationServer(query_client=query_client) -authorization_server.init_app(app) - -# --- Test Route --- -@app.route('/test-authlib') -def test_authlib_route(): - logger.info("--- Entered /test-authlib route ---") - # NOTE: We are already inside a request context when run via test_client - logger.info(f"Actual request URL: {request.url}") - logger.info(f"Actual request Args: {request.args}") - logger.debug(f"Attempting validation. Type of authorization_server: {type(authorization_server)}") - try: - # --- The critical call --- - # Authlib uses the current request context (request.args, etc.) - grant = authorization_server.validate_authorization_request() - # ------------------------ - - logger.info(">>> SUCCESS: validate_authorization_request() completed.") - logger.info(f"Grant type: {type(grant)}") - logger.info(f"Grant client: {grant.client.get_client_id() if grant and grant.client else 'N/A'}") - return jsonify(status="success", message="validate_authorization_request() worked!", grant_type=str(type(grant))) - - except AttributeError as ae: - logger.critical(f">>> FAILURE: AttributeError calling validate_authorization_request(): {ae}", exc_info=True) - return jsonify(status="error", message=f"AttributeError: {ae}"), 500 - except OAuth2Error as error: - logger.error(f">>> FAILURE: OAuth2Error calling validate_authorization_request(): {error.error} - {error.description}", exc_info=True) - return jsonify(status="error", message=f"OAuth2Error: {error.error} - {error.description}"), 400 - except Exception as e: - logger.error(f">>> FAILURE: Unexpected Exception calling validate_authorization_request(): {e}", exc_info=True) - return jsonify(status="error", message=f"Unexpected Exception: {e}"), 500 - -# --- Function to Run the Test --- -def run_test(): - """Uses Flask's test client to execute the test route.""" - logger.info("--- Starting Test Run ---") - client = app.test_client() - # Construct the query parameters for the test request - query_params = { - 'response_type': 'code', - 'client_id': DUMMY_CLIENT_ID, - 'redirect_uri': DUMMY_REDIRECT_URI, - 'scope': DUMMY_SCOPES, - 'state': 'dummy_state' - } - # Make a GET request to the test route - response = client.get('/test-authlib', query_string=query_params) - logger.info(f"--- Test Run Complete --- Status Code: {response.status_code} ---") - # Print the JSON response body for verification - try: - logger.info(f"Response JSON: {response.get_json()}") - except Exception: - logger.info(f"Response Data: {response.data.decode()}") - - -# --- Main execution block --- -if __name__ == '__main__': - logger.info("Minimal test script loaded.") - # Run the test function directly - run_test() diff --git a/models.py b/models.py index 0310357..d9979ae 100644 --- a/models.py +++ b/models.py @@ -1,5 +1,6 @@ from flask_sqlalchemy import SQLAlchemy from werkzeug.security import generate_password_hash, check_password_hash +from datetime import datetime database = SQLAlchemy() @@ -16,10 +17,11 @@ class RegisteredApp(database.Model): tos_uri = database.Column(database.String(255)) policy_uri = database.Column(database.String(255)) jwks_uri = database.Column(database.String(255)) - date_registered = database.Column(database.DateTime) - last_updated = database.Column(database.DateTime) + date_registered = database.Column(database.DateTime, default=datetime.utcnow) + last_updated = database.Column(database.DateTime, onupdate=datetime.utcnow) + is_test_app = database.Column(database.Boolean, default=False) + test_app_expires_at = database.Column(database.DateTime) - # Authlib ClientMixin methods def get_client_id(self): return self.client_id @@ -33,12 +35,9 @@ class RegisteredApp(database.Model): return response_type == 'code' def check_grant_type(self, grant_type): - # Support authorization_code and refresh_token grants return grant_type in ['authorization_code', 'refresh_token'] def check_endpoint_auth_method(self, method, endpoint): - # Support client_secret_post and client_secret_basic for token endpoint - # Currently, we support the same methods for all endpoints return method in ['client_secret_post', 'client_secret_basic'] def get_allowed_scope(self, scopes): @@ -47,11 +46,9 @@ class RegisteredApp(database.Model): return ' '.join(sorted(allowed.intersection(requested))) def set_client_secret(self, client_secret): - """Set and hash the client secret.""" self.client_secret_hash = generate_password_hash(client_secret) def check_client_secret(self, client_secret): - """Verify the client secret against the stored hash.""" return check_password_hash(self.client_secret_hash, client_secret) class OAuthToken(database.Model): @@ -80,11 +77,16 @@ class AuthorizationCode(database.Model): issued_at = database.Column(database.Integer, nullable=False) expires_at = database.Column(database.Integer, nullable=False) - # Authlib AuthorizationCodeMixin methods def get_redirect_uri(self): - """Return the redirect URI associated with this authorization code.""" return self.redirect_uri def get_scope(self): - """Return the scope associated with this authorization code.""" - return self.scope \ No newline at end of file + return self.scope + +class Configuration(database.Model): + __tablename__ = 'configurations' + id = database.Column(database.Integer, primary_key=True) + key = database.Column(database.String(100), unique=True, nullable=False) + value = database.Column(database.Text, nullable=False) + description = database.Column(database.Text) + last_updated = database.Column(database.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow) \ No newline at end of file diff --git a/smart_proxy.py b/smart_proxy.py index 9f8e83e..c09a05d 100644 --- a/smart_proxy.py +++ b/smart_proxy.py @@ -4,40 +4,29 @@ import secrets import requests import base64 import hashlib -from flask import Blueprint, request, session, url_for, render_template, redirect, jsonify +from flask import Blueprint, request, session, url_for, render_template, redirect, jsonify, current_app from flasgger import swag_from from authlib.integrations.flask_oauth2 import AuthorizationServer, ResourceProtector -from authlib.integrations.sqla_oauth2 import ( - create_query_client_func, - create_save_token_func, -) +from authlib.integrations.sqla_oauth2 import create_query_client_func, create_save_token_func from authlib.oauth2.rfc6749 import grants from authlib.oauth2.rfc6750 import BearerTokenValidator from authlib.oauth2.rfc6749.errors import OAuth2Error +from werkzeug.http import is_hop_by_hop_header +from forms import ConsentForm -# Import necessary components (designed for modularity) -try: - from models import database, RegisteredApp, OAuthToken, AuthorizationCode -except ImportError: - # Allow standalone usage or alternative model imports for FHIRFLARE integration - database = None - RegisteredApp = None - OAuthToken = None - AuthorizationCode = None +database = None +RegisteredApp = None +OAuthToken = None +AuthorizationCode = None -# Configure logging logger = logging.getLogger(__name__) -# Define the Flask blueprint for SMART on FHIR routes smart_blueprint = Blueprint('smart_proxy', __name__, template_folder='templates') -# Initialize Authlib AuthorizationServer and ResourceProtector globally authorization_server = AuthorizationServer() require_oauth = ResourceProtector() -# Helper functions for Authlib def query_client(client_id): - """Query client details from the database for Authlib.""" logger.debug(f"Querying client with identifier: {client_id}") client = RegisteredApp.query.filter_by(client_id=client_id).first() if client: @@ -47,7 +36,6 @@ def query_client(client_id): return client def save_token(token, request): - """Save generated OAuth2 tokens to the database.""" client = request.client if not client: logger.error("No client provided for token saving") @@ -66,28 +54,19 @@ def save_token(token, request): logger.info(f"Saved token for client '{client.client_id}' with scope: {token.get('scope')}") def normalize_scopes(scope_string): - """Convert plus signs or other delimiters to spaces for scopes.""" if not scope_string: return '' return ' '.join(scope_string.replace('+', ' ').split()) -# Dummy user class to satisfy Authlib's requirement class DummyUser: def get_user_id(self): - """Return a user ID for Authlib.""" return "proxy_user" -# Custom Authorization Code Grant implementation class AuthorizationCodeGrant(grants.AuthorizationCodeGrant): - """Customized Authorization Code Grant using database storage for codes.""" - - SUPPORTED_RESPONSE_TYPES = ['code'] # Explicitly allow 'code' - include_refresh_token = True # Ensure refresh tokens are included - TOKEN_DURATION = 3600 # Access token lifetime in seconds (1 hour) - REFRESH_TOKEN_DURATION = 86400 # Refresh token lifetime in seconds (1 day) + SUPPORTED_RESPONSE_TYPES = ['code'] + include_refresh_token = True def create_authorization_code(self, client, grant_user, request): - # Generate a secure random code code = secrets.token_urlsafe(32) logger.debug(f"Generated authorization code '{code[:6]}...' for client '{client.client_id}'") auth_code = AuthorizationCode( @@ -101,7 +80,7 @@ class AuthorizationCodeGrant(grants.AuthorizationCodeGrant): response_type=request.args.get('response_type', 'code'), state=request.args.get('state'), issued_at=int(time.time()), - expires_at=int(time.time()) + 600 # 10 minutes expiry + expires_at=int(time.time()) + 600 ) database.session.add(auth_code) database.session.commit() @@ -123,11 +102,10 @@ class AuthorizationCodeGrant(grants.AuthorizationCodeGrant): return auth_code def query_authorization_code(self, code, client): - """Query the authorization code from the database.""" logger.debug(f"Querying authorization code '{code[:6]}...' for client '{client.client_id}'") auth_code = AuthorizationCode.query.filter_by(code=code, client_id=client.client_id).first() if not auth_code: - logger.warning(f"Authorization code '{code[:6]}...' not found for client '{client.client_id}'") + logger.warning(f"Authorization code '{code[:6]}...' not found for client '{client_id}'") return None if time.time() > auth_code.expires_at: logger.warning(f"Authorization code '{code[:6]}...' has expired") @@ -146,14 +124,13 @@ class AuthorizationCodeGrant(grants.AuthorizationCodeGrant): logger.debug(f"Authorization code '{code[:6]}...' deleted from database") def authenticate_user(self, code_data): - logger.debug("Returning dummy user for authorization code (no user authentication in this proxy)") + logger.debug("Returning dummy user for authorization code") return DummyUser() def validate_code_verifier(self, code_verifier, code_challenge, code_challenge_method): - """Validate the PKCE code verifier against the stored code challenge.""" logger.debug(f"Validating PKCE code verifier. Code verifier: {code_verifier[:6]}..., Code challenge: {code_challenge[:6]}..., Method: {code_challenge_method}") if not code_verifier or not code_challenge: - logger.warning("Missing code verifier or code challenge for PKCE validation") + logger.warning("Missing code verifier or code challenge") return False if code_challenge_method == 'plain': expected_challenge = code_verifier @@ -165,38 +142,25 @@ class AuthorizationCodeGrant(grants.AuthorizationCodeGrant): logger.warning(f"Unsupported code challenge method: {code_challenge_method}") return False is_valid = expected_challenge == code_challenge - logger.debug(f"PKCE validation result: {is_valid}. Expected challenge: {expected_challenge[:6]}..., Provided challenge: {code_challenge[:6]}...") + logger.debug(f"PKCE validation result: {is_valid}") return is_valid def create_token_response(self): - """Override to ensure proper token generation with client and grant_type.""" - # Validate the token request (sets self.client, self.request, etc.) self.validate_token_request() - - # Get the authorization code from form data code = self.request.form.get('code') client = self.request.client grant_type = self.request.form.get('grant_type') - if not code: raise OAuth2Error("invalid_request", "Missing 'code' parameter") - if not grant_type: raise OAuth2Error("invalid_request", "Missing 'grant_type' parameter") - - # Authenticate user code_data = self.query_authorization_code(code, client) if not code_data: raise OAuth2Error("invalid_grant", "Authorization code not found or expired") - user = self.authenticate_user(code_data) if not user: - raise OAuth2Error("invalid_grant", "There is no 'user' for this code.") - - # Get the scope + raise OAuth2Error("invalid_grant", "No user for this code") scope = code_data.get_scope() - - # Generate the token with custom expiration durations token = self.generate_token( client, grant_type, @@ -205,493 +169,344 @@ class AuthorizationCodeGrant(grants.AuthorizationCodeGrant): include_refresh_token=self.include_refresh_token, code=code ) - - # Delete the authorization code self.delete_authorization_code(code) - - # Ensure token has correct expires_in and scope body = { "access_token": token["access_token"], "token_type": token["token_type"], - "expires_in": self.TOKEN_DURATION, # Explicitly set to ensure correct value - "scope": scope if scope else "", # Use the scope directly + "expires_in": current_app.config['TOKEN_DURATION'], + "scope": scope if scope else "", "refresh_token": token.get("refresh_token"), } headers = {"Content-Type": "application/json"} return 200, body, headers def generate_token(self, client, grant_type, user=None, scope=None, include_refresh_token=True, **kwargs): - """Generate an access token with optional nonce.""" - logger.debug(f"Generating token with client: {client.client_id}, grant_type: {grant_type}, user: {user.get_user_id() if user else None}, scope: {scope}") - # Extract code from kwargs and remove it to avoid passing to parent + logger.debug(f"Generating token for client: {client.client_id}, grant_type: {grant_type}") code = kwargs.pop('code', None) - - # Prepare token parameters token = {} token['access_token'] = secrets.token_urlsafe(32) token['token_type'] = 'Bearer' - token['expires_in'] = self.TOKEN_DURATION + token['expires_in'] = current_app.config['TOKEN_DURATION'] token['scope'] = scope if scope else "" token['issued_at'] = int(time.time()) - - # Generate refresh token if enabled if include_refresh_token and client.check_grant_type('refresh_token'): token['refresh_token'] = secrets.token_urlsafe(32) - # Set refresh token expiration (issued_at + duration) - token['refresh_token_expires_in'] = self.REFRESH_TOKEN_DURATION - - # Handle nonce if code is provided + token['refresh_token_expires_in'] = current_app.config['REFRESH_TOKEN_DURATION'] if code: code_data = self.parse_authorization_code(code, client) - if code_data: - logger.info(f"Generating token. Nonce: {code_data.nonce}") - if code_data.nonce: - token['nonce'] = code_data.nonce - else: - logger.warning(f"Could not retrieve code data for code '{code[:6]}...' during token generation") - + if code_data and code_data.nonce: + token['nonce'] = code_data.nonce logger.debug(f"Generated token for client '{client.client_id}'. Scope: {scope}") return token -# Configure Authlib def configure_oauth(flask_app, db=None, registered_app_model=None, oauth_token_model=None, auth_code_model=None): - """Configure the Authlib AuthorizationServer with the Flask application.""" global database, RegisteredApp, OAuthToken, AuthorizationCode - # Allow dependency injection for FHIRFLARE integration database = db or database RegisteredApp = registered_app_model or RegisteredApp OAuthToken = oauth_token_model or OAuthToken AuthorizationCode = auth_code_model or AuthorizationCode - if not (database and RegisteredApp and OAuthToken and AuthorizationCode): - raise ValueError("Database and models must be provided for OAuth2 configuration") - + raise ValueError("Database and models must be provided") authorization_server.init_app( flask_app, query_client=query_client, save_token=save_token ) authorization_server.register_grant(AuthorizationCodeGrant) - logger.info("Authlib OAuth2 server configured successfully") + logger.info("Authlib OAuth2 server configured") + +@smart_blueprint.route('/.well-known/smart-configuration', methods=['GET']) +@swag_from({ + 'tags': ['OAuth2'], + 'summary': 'SMART on FHIR Configuration', + 'description': 'Returns the SMART on FHIR configuration.', + 'responses': { + '200': { + 'description': 'SMART configuration', + 'schema': { + 'type': 'object', + 'properties': { + 'issuer': {'type': 'string'}, + 'authorization_endpoint': {'type': 'string'}, + 'token_endpoint': {'type': 'string'}, + 'revocation_endpoint': {'type': 'string'}, + 'introspection_endpoint': {'type': 'string'}, + 'scopes_supported': {'type': 'array', 'items': {'type': 'string'}}, + 'response_types_supported': {'type': 'array', 'items': {'type': 'string'}}, + 'grant_types_supported': {'type': 'array', 'items': {'type': 'string'}}, + 'code_challenge_methods_supported': {'type': 'array', 'items': {'type': 'string'}} + } + } + } + } +}) +def smart_configuration(): + config = { + "issuer": request.url_root.rstrip('/'), + "authorization_endpoint": url_for('smart_proxy.authorize', _external=True), + "token_endpoint": url_for('smart_proxy.issue_token', _external=True), + "revocation_endpoint": url_for('smart_proxy.revoke_token', _external=True), + "introspection_endpoint": url_for('smart_proxy.introspect_token', _external=True), + "scopes_supported": current_app.config['ALLOWED_SCOPES'].split(), + "response_types_supported": ["code"], + "grant_types_supported": ["authorization_code", "refresh_token"], + "code_challenge_methods_supported": ["S256"] + } + return jsonify(config), 200 -# SMART on FHIR OAuth2 routes @smart_blueprint.route('/authorize', methods=['GET']) @swag_from({ 'tags': ['OAuth2'], 'summary': 'Initiate SMART on FHIR authorization', - 'description': 'Redirects to the consent page for user authorization, then redirects to the client redirect URI with an authorization code.', + 'description': 'Redirects to consent page, then to client redirect URI with code.', 'parameters': [ - { - 'name': 'response_type', - 'in': 'query', - 'type': 'string', - 'required': True, - 'description': 'Must be "code" for authorization code flow.', - 'enum': ['code'] - }, - { - 'name': 'client_id', - 'in': 'query', - 'type': 'string', - 'required': True, - 'description': 'Client ID of the registered application.' - }, - { - 'name': 'redirect_uri', - 'in': 'query', - 'type': 'string', - 'required': True, - 'description': 'Redirect URI where the authorization code will be sent.' - }, - { - 'name': 'scope', - 'in': 'query', - 'type': 'string', - 'required': True, - 'description': 'Space-separated list of scopes (e.g., "openid launch/patient").' - }, - { - 'name': 'state', - 'in': 'query', - 'type': 'string', - 'required': True, - 'description': 'Opaque value used to maintain state between the request and callback.' - }, - { - 'name': 'aud', - 'in': 'query', - 'type': 'string', - 'required': True, - 'description': 'Audience URL of the FHIR server.' - }, - { - 'name': 'code_challenge', - 'in': 'query', - 'type': 'string', - 'required': False, - 'description': 'PKCE code challenge (required for PKCE flow).' - }, - { - 'name': 'code_challenge_method', - 'in': 'query', - 'type': 'string', - 'required': False, - 'description': 'PKCE code challenge method (default: "plain").', - 'enum': ['plain', 'S256'] - } + {'name': 'response_type', 'in': 'query', 'type': 'string', 'required': True, 'description': 'Must be "code".', 'enum': ['code']}, + {'name': 'client_id', 'in': 'query', 'type': 'string', 'required': True, 'description': 'Client ID.'}, + {'name': 'redirect_uri', 'in': 'query', 'type': 'string', 'required': True, 'description': 'Redirect URI.'}, + {'name': 'scope', 'in': 'query', 'type': 'string', 'required': True, 'description': 'Scopes.'}, + {'name': 'state', 'in': 'query', 'type': 'string', 'required': True, 'description': 'State.'}, + {'name': 'aud', 'in': 'query', 'type': 'string', 'required': True, 'description': 'FHIR server URL.'}, + {'name': 'code_challenge', 'in': 'query', 'type': 'string', 'required': False, 'description': 'PKCE challenge.'}, + {'name': 'code_challenge_method', 'in': 'query', 'type': 'string', 'required': False, 'description': 'PKCE method.', 'enum': ['plain', 'S256']} ], 'responses': { - '200': { - 'description': 'Renders the consent page for user authorization.' - }, - '400': { - 'description': 'Invalid request parameters (e.g., invalid client_id, redirect_uri, or scopes).' - } + '200': {'description': 'Consent page.'}, + '400': {'description': 'Invalid parameters.'} } }) def authorize(): - """Handle SMART on FHIR authorization requests.""" try: - # Log the incoming request parameters logger.debug(f"Incoming request args: {request.args}") - - # Normalize scopes in the request request_args = request.args.copy() request_args['scope'] = normalize_scopes(request_args.get('scope', '')) - # Remove 'aud' as it's not needed for Authlib's OAuth flow if 'aud' in request_args: del request_args['aud'] request.args = request_args - logger.debug(f"Normalized request args: {request.args}") - - # Validate client client = query_client(request_args.get('client_id')) if not client: - logger.error(f"Invalid client_id: {request_args.get('client_id')}") return render_template('errors/auth_error.html', error="Invalid client_id"), 400 - - # Validate response_type response_type = request_args.get('response_type') - logger.debug(f"Received response_type: {response_type}") if not response_type or not client.check_response_type(response_type): - logger.error(f"Unsupported response_type: {response_type}") return render_template('errors/auth_error.html', error=f"Unsupported response_type: {response_type}"), 400 - - # Validate redirect_uri redirect_uri = request_args.get('redirect_uri') if not redirect_uri or not client.check_redirect_uri(redirect_uri): - logger.error(f"Invalid redirect_uri: {redirect_uri} (Registered URIs: {client.redirect_uris})") return render_template('errors/auth_error.html', error=f"Invalid redirect_uri: {redirect_uri}"), 400 - - # Validate scopes requested_scopes = request_args.get('scope', '') allowed_scopes = client.get_allowed_scope(requested_scopes) if not allowed_scopes: - logger.error(f"No valid scopes provided: {requested_scopes} (Allowed scopes: {client.scopes})") - return render_template('errors/auth_error.html', error=f"No valid scopes provided: {requested_scopes}"), 400 - logger.debug(f"Allowed scopes after validation: {allowed_scopes}") - - # Update the request args with the normalized allowed scopes + return render_template('errors/auth_error.html', error=f"No valid scopes: {requested_scopes}"), 400 request_args['scope'] = allowed_scopes request.args = request_args - logger.debug(f"Updated request args with normalized scopes: {request.args}") - - # Store request details in session for consent session['auth_request_params'] = request_args.to_dict() session['auth_client_id'] = client.client_id session['auth_scope'] = allowed_scopes session['auth_response_type'] = response_type session['auth_state'] = request_args.get('state') session['auth_nonce'] = request_args.get('nonce') - - # Render consent page - logger.info(f"Rendering consent page for client: {client.app_name}") return render_template( 'auth/consent.html', client=client, scopes=session['auth_scope'].split(), - request_params=session['auth_request_params'] + request_params=session['auth_request_params'], + form=ConsentForm() ) except OAuth2Error as error: - logger.error(f"OAuth2 error during authorization: {error.error} - {error.description}", exc_info=True) return render_template('errors/auth_error.html', error=f"{error.error}: {error.description}"), error.status_code except Exception as error: logger.error(f"Unexpected error during authorization: {error}", exc_info=True) - return render_template('errors/auth_error.html', error="An unexpected error occurred during authorization"), 500 + return render_template('errors/auth_error.html', error="Unexpected error"), 500 @smart_blueprint.route('/consent', methods=['POST']) def handle_consent(): - """Handle user consent submission for SMART on FHIR authorization.""" try: - # Log the entire form data for debugging - logger.debug(f"Form data received: {request.form}") - - # Retrieve grant details from session + form = ConsentForm() + # Manually validate form fields, bypassing CSRF + if not form.is_submitted(): + return render_template('errors/auth_error.html', error="Form not submitted"), 400 + if not form.consent.data: + return render_template('errors/auth_error.html', error="Consent value missing"), 400 + consent_granted = form.consent.data == 'allow' request_params = session.pop('auth_request_params', None) client_id = session.pop('auth_client_id', None) scope = session.pop('auth_scope', None) response_type = session.pop('auth_response_type', None) state = session.pop('auth_state', None) nonce = session.pop('auth_nonce', None) - - logger.debug(f"Consent route: client_id={client_id}, scope={scope}, response_type={response_type}, state={state}, nonce={nonce}") - if not request_params or not client_id or not scope or not response_type: - logger.error("Consent handling failed: Missing session data") return render_template('errors/auth_error.html', error="Session expired or invalid"), 400 - - # Validate client client = query_client(client_id) if not client: - logger.error(f"Invalid client_id: {client_id}") return render_template('errors/auth_error.html', error="Invalid client_id"), 400 - - # Validate response_type if not client.check_response_type(response_type): - logger.error(f"Unsupported response_type: {response_type} for client '{client_id}'") return jsonify({"error": "unsupported_response_type"}), 400 - - # Validate redirect_uri redirect_uri = request_params.get('redirect_uri') if not redirect_uri or not client.check_redirect_uri(redirect_uri): - logger.error(f"Invalid redirect_uri in consent: {redirect_uri} (Registered URIs: {client.redirect_uris})") return render_template('errors/auth_error.html', error=f"Invalid redirect_uri: {redirect_uri}"), 400 - - # Validate scopes allowed_scopes = client.get_allowed_scope(scope) if not allowed_scopes: - logger.error(f"No valid scopes in consent: {scope} (Allowed scopes: {client.scopes})") return render_template('errors/auth_error.html', error=f"No valid scopes: {scope}"), 400 - logger.debug(f"Allowed scopes after validation in consent: {allowed_scopes}") - - consent_granted = request.form.get('consent') == 'allow' - logger.debug(f"Consent granted: {consent_granted}") - if consent_granted: - logger.info(f"Consent granted for client '{client_id}' with scope '{scope}'") - # Reconstruct request for Authlib request_args = request_params.copy() - request_args['scope'] = allowed_scopes # Use validated scopes in normalized order + request_args['scope'] = allowed_scopes if state: request_args['state'] = state if nonce: request_args['nonce'] = nonce request.args = request_args - request.form = {} # Ensure form is empty for GET-like request - request.method = 'GET' # Match /authorize - logger.debug(f"Reconstructed request args for token generation: {request.args}") - - # Access AuthorizationCodeGrant instance to generate the code + request.form = {} + request.method = 'GET' grant = AuthorizationCodeGrant(client, authorization_server) auth_code = grant.create_authorization_code(client, None, request) redirect_url = f"{redirect_uri}?code={auth_code}&state={state}" if state else f"{redirect_uri}?code={auth_code}" - logger.debug(f"Redirecting to: {redirect_url}") return redirect(redirect_url) else: - logger.info(f"Consent denied for client '{client_id}'") redirect_url = f"{redirect_uri}?error=access_denied&error_description=The+resource+owner+or+authorization+server+denied+the+request" if state: redirect_url += f"&state={state}" - logger.debug(f"Redirecting to: {redirect_url}") return redirect(redirect_url) except OAuth2Error as error: - logger.error(f"OAuth2 error during consent handling: {error.error} - {error.description}", exc_info=True) return render_template('errors/auth_error.html', error=f"{error.error}: {error.description}"), error.status_code except Exception as error: logger.error(f"Unexpected error during consent handling: {error}", exc_info=True) - return render_template('errors/auth_error.html', error="An unexpected error occurred during consent handling"), 500 + return render_template('errors/auth_error.html', error="Unexpected error"), 500 @smart_blueprint.route('/token', methods=['POST']) @swag_from({ 'tags': ['OAuth2'], - 'summary': 'Exchange authorization code or refresh token for access token', - 'description': 'Exchanges an authorization code or refresh token for an access token and refresh token.', + 'summary': 'Exchange code or refresh token for access token', 'parameters': [ - { - 'name': 'grant_type', - 'in': 'formData', - 'type': 'string', - 'required': True, - 'description': 'Type of grant ("authorization_code" or "refresh_token").', - 'enum': ['authorization_code', 'refresh_token'] - }, - { - 'name': 'code', - 'in': 'formData', - 'type': 'string', - 'required': False, - 'description': 'Authorization code received from /authorize (required for grant_type=authorization_code).' - }, - { - 'name': 'refresh_token', - 'in': 'formData', - 'type': 'string', - 'required': False, - 'description': 'Refresh token to obtain a new access token (required for grant_type=refresh_token).' - }, - { - 'name': 'redirect_uri', - 'in': 'formData', - 'type': 'string', - 'required': False, - 'description': 'The redirect URI used in the authorization request (required for grant_type=authorization_code).' - }, - { - 'name': 'client_id', - 'in': 'formData', - 'type': 'string', - 'required': True, - 'description': 'Client ID of the registered application.' - }, - { - 'name': 'client_secret', - 'in': 'formData', - 'type': 'string', - 'required': True, - 'description': 'Client secret of the registered application.' - }, - { - 'name': 'code_verifier', - 'in': 'formData', - 'type': 'string', - 'required': False, - 'description': 'PKCE code verifier (required if code_challenge was used in /authorize).' - } + {'name': 'grant_type', 'in': 'formData', 'type': 'string', 'required': True, 'enum': ['authorization_code', 'refresh_token']}, + {'name': 'code', 'in': 'formData', 'type': 'string', 'required': False}, + {'name': 'refresh_token', 'in': 'formData', 'type': 'string', 'required': False}, + {'name': 'redirect_uri', 'in': 'formData', 'type': 'string', 'required': False}, + {'name': 'client_id', 'in': 'formData', 'type': 'string', 'required': True}, + {'name': 'client_secret', 'in': 'formData', 'type': 'string', 'required': True}, + {'name': 'code_verifier', 'in': 'formData', 'type': 'string', 'required': False} ], 'responses': { - '200': { - 'description': 'Access token response', - 'schema': { - 'type': 'object', - 'properties': { - 'access_token': {'type': 'string'}, - 'token_type': {'type': 'string', 'example': 'Bearer'}, - 'expires_in': {'type': 'integer', 'example': 3600}, - 'scope': {'type': 'string'}, - 'refresh_token': {'type': 'string'} - } - } - }, - '400': { - 'description': 'Invalid request (e.g., invalid code, refresh token, client credentials, redirect_uri, or code_verifier).' - } + '200': {'description': 'Access token response'}, + '400': {'description': 'Invalid request'} } }) def issue_token(): - """Issue SMART on FHIR access tokens.""" try: - logger.info("Token endpoint called") - # Log the incoming request parameters - logger.debug(f"Request form data: {request.form}") - logger.debug(f"Request headers: {dict(request.headers)}") response = authorization_server.create_token_response() - logger.info(f"Token response created. Status code: {response.status_code}") - if response.status_code == 200: - try: - token_data = response.get_json() - logger.debug(f"Token issued: AccessToken={token_data.get('access_token')[:6]}..., Type={token_data.get('token_type')}, Scope={token_data.get('scope')}, ExpiresIn={token_data.get('expires_in')}, RefreshToken={token_data.get('refresh_token')[:6] if token_data.get('refresh_token') else None}...") - return response - except Exception: - logger.warning("Could not parse token response JSON for logging") - return response + token_data = response.get_json() + logger.debug(f"Token issued: AccessToken={token_data.get('access_token')[:6]}...") + return response else: - try: - error_data = response.get_json() - logger.warning(f"Token request failed: Error={error_data.get('error')}, Description={error_data.get('error_description')}") - return jsonify(error_data), response.status_code - except Exception: - logger.warning(f"Token request failed with status {response.status_code}. Could not parse error response") - return jsonify({"error": "invalid_request", "error_description": "Failed to process token request"}), response.status_code + error_data = response.get_json() + logger.warning(f"Token request failed: {error_data.get('error')}") + return jsonify(error_data), response.status_code except Exception as error: logger.error(f"Unexpected error during token issuance: {error}", exc_info=True) - return jsonify({"error": "server_error", "error_description": "An unexpected error occurred during token issuance"}), 500 + return jsonify({"error": "server_error", "error_description": "Unexpected error"}), 500 @smart_blueprint.route('/revoke', methods=['POST']) @swag_from({ 'tags': ['OAuth2'], 'summary': 'Revoke an access or refresh token', - 'description': 'Revokes an access or refresh token, rendering it invalid for future use.', 'parameters': [ - { - 'name': 'token', - 'in': 'formData', - 'type': 'string', - 'required': True, - 'description': 'The access or refresh token to revoke.' - }, - { - 'name': 'client_id', - 'in': 'formData', - 'type': 'string', - 'required': True, - 'description': 'Client ID of the registered application.' - }, - { - 'name': 'client_secret', - 'in': 'formData', - 'type': 'string', - 'required': True, - 'description': 'Client secret of the registered application.' - } + {'name': 'token', 'in': 'formData', 'type': 'string', 'required': True}, + {'name': 'client_id', 'in': 'formData', 'type': 'string', 'required': True}, + {'name': 'client_secret', 'in': 'formData', 'type': 'string', 'required': True} ], 'responses': { - '200': { - 'description': 'Token revoked successfully.', - 'schema': { - 'type': 'object', - 'properties': { - 'message': {'type': 'string', 'example': 'Token revoked successfully.'} - } - } - }, - '400': { - 'description': 'Invalid request (e.g., invalid client credentials or token).' - } + '200': {'description': 'Token revoked'}, + '400': {'description': 'Invalid request'} } }) def revoke_token(): - """Revoke an access or refresh token.""" try: - logger.info("Token revocation endpoint called") - # Log the incoming request parameters - logger.debug(f"Request form data: {request.form}") - logger.debug(f"Request headers: {dict(request.headers)}") - - # Validate client credentials client_id = request.form.get('client_id') client_secret = request.form.get('client_secret') token = request.form.get('token') - if not client_id or not client_secret or not token: - logger.warning("Missing required parameters in token revocation request") - return jsonify({"error": "invalid_request", "error_description": "Missing required parameters"}), 400 - + return jsonify({"error": "invalid_request", "error_description": "Missing parameters"}), 400 client = query_client(client_id) - if not client: - logger.warning(f"Invalid client_id: {client_id}") - return jsonify({"error": "invalid_client", "error_description": "Invalid client_id"}), 400 - - if not client.check_client_secret(client_secret): - logger.warning(f"Invalid client_secret for client '{client_id}'") - return jsonify({"error": "invalid_client", "error_description": "Invalid client_secret"}), 400 - - # Revoke the token (delete it from the database) - # Check if the token is an access token or refresh token + if not client or not client.check_client_secret(client_secret): + return jsonify({"error": "invalid_client", "error_description": "Invalid client credentials"}), 400 token_entry = OAuthToken.query.filter( (OAuthToken.access_token == token) | (OAuthToken.refresh_token == token) ).first() - if token_entry: database.session.delete(token_entry) database.session.commit() - logger.info(f"Token revoked successfully for client '{client_id}'") - return jsonify({"message": "Token revoked successfully."}), 200 - else: - logger.warning(f"Token not found: {token[:6]}...") - # RFC 7009 states that revocation endpoints should return 200 even if the token is not found - return jsonify({"message": "Token revoked successfully."}), 200 - + return jsonify({"message": "Token revoked successfully."}), 200 except Exception as error: logger.error(f"Unexpected error during token revocation: {error}", exc_info=True) - return jsonify({"error": "server_error", "error_description": "An unexpected error occurred during token revocation"}), 500 \ No newline at end of file + return jsonify({"error": "server_error", "error_description": "Unexpected error"}), 500 + +@smart_blueprint.route('/introspect', methods=['POST']) +@swag_from({ + 'tags': ['OAuth2'], + 'summary': 'Introspect a token', + 'parameters': [ + {'name': 'token', 'in': 'formData', 'type': 'string', 'required': True}, + {'name': 'client_id', 'in': 'formData', 'type': 'string', 'required': True}, + {'name': 'client_secret', 'in': 'formData', 'type': 'string', 'required': True} + ], + 'responses': { + '200': {'description': 'Token introspection response'}, + '400': {'description': 'Invalid request'} + } +}) +def introspect_token(): + try: + client_id = request.form.get('client_id') + client_secret = request.form.get('client_secret') + token = request.form.get('token') + if not client_id or not client_secret or not token: + return jsonify({"error": "invalid_request", "error_description": "Missing parameters"}), 400 + client = query_client(client_id) + if not client or not client.check_client_secret(client_secret): + return jsonify({"error": "invalid_client", "error_description": "Invalid client credentials"}), 400 + token_entry = OAuthToken.query.filter( + (OAuthToken.access_token == token) | (OAuthToken.refresh_token == token) + ).first() + if not token_entry: + return jsonify({"active": False}), 200 + expires_at = token_entry.issued_at + token_entry.expires_in + response = { + "active": time.time() < expires_at, + "client_id": token_entry.client_id, + "scope": token_entry.scope or "", + "exp": expires_at + } + return jsonify(response), 200 + except Exception as error: + logger.error(f"Unexpected error during token introspection: {error}", exc_info=True) + return jsonify({"error": "server_error", "error_description": "Unexpected error"}), 500 + +@smart_blueprint.route('/proxy/', methods=['GET', 'POST', 'PUT', 'DELETE']) +@require_oauth('launch launch/patient patient/*.read') +def proxy_fhir(path): + try: + token = request.headers.get('Authorization', '').replace('Bearer ', '') + if not token: + return jsonify({"error": "unauthorized", "error_description": "Missing Authorization header"}), 401 + token_entry = OAuthToken.query.filter_by(access_token=token).first() + if not token_entry or time.time() > (token_entry.issued_at + token_entry.expires_in): + return jsonify({"error": "unauthorized", "error_description": "Invalid or expired token"}), 401 + fhir_server_url = current_app.config['FHIR_SERVER_URL'] + target_url = f"{fhir_server_url.rstrip('/')}/{path}" + headers = {k: v for k, v in request.headers.items() if not is_hop_by_hop_header(k)} + headers['Authorization'] = f"Bearer {token}" + response = requests.request( + method=request.method, + url=target_url, + headers=headers, + data=request.get_data(), + params=request.args, + timeout=int(current_app.config['PROXY_TIMEOUT']) + ) + return jsonify(response.json()), response.status_code, { + k: v for k, v in response.headers.items() if not is_hop_by_hop_header(k) + } + except requests.RequestException as error: + logger.error(f"Error proxying FHIR request: {error}", exc_info=True) + return jsonify({"error": "proxy_error", "error_description": str(error)}), 502 + except Exception as error: + logger.error(f"Unexpected error during FHIR proxy: {error}", exc_info=True) + return jsonify({"error": "server_error", "error_description": "Unexpected error"}), 500 \ No newline at end of file diff --git a/static/FHIRVINE_LOGO.png b/static/FHIRVINE_LOGO.png new file mode 100644 index 0000000000000000000000000000000000000000..28082cf374d27321e97722afd9e9c9e8e1cb95b0 GIT binary patch literal 256637 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≦}LM<=+F5h$hbR9I;hVx|4!LGbUNVo8e{i8v;*sg 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 t^q)ig-{=1{@P8WkKMnlAt4D_2sMP>m%6m2 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 tP>MeEtW_V_arx^ + {{ field.label(class="form-label") }} + {% if field.type == "TextAreaField" %} + {{ field(class="form-control " + ("is-invalid" if field.errors else ""), value=value or '', rows=rows or 3, autocomplete=autocomplete) }} + {% else %} + {{ field(class="form-control " + ("is-invalid" if field.errors else ""), value=value or '', autocomplete=autocomplete) }} + {% endif %} + {% if field.errors %} +
+ {% for error in field.errors %}{{ error }}{% endfor %} +
+ {% endif %} + {{ field.description }} + +{% endmacro %} \ No newline at end of file diff --git a/templates/app_gallery/delete.html b/templates/app_gallery/delete.html index 28c686c..fafe660 100644 --- a/templates/app_gallery/delete.html +++ b/templates/app_gallery/delete.html @@ -9,6 +9,7 @@

Are you sure you want to delete this application? This action cannot be undone.


+ {{ form.hidden_tag() }} Cancel
diff --git a/templates/app_gallery/edit.html b/templates/app_gallery/edit.html index fe41277..aa5482b 100644 --- a/templates/app_gallery/edit.html +++ b/templates/app_gallery/edit.html @@ -1,4 +1,5 @@ {% extends "base.html" %} +{% from "_formhelpers.html" import render_field %} {% block content %}
@@ -11,83 +12,13 @@
{{ form.hidden_tag() }} - -
- {{ form.app_name.label(class="form-label") }} - {{ form.app_name(class="form-control " + ("is-invalid" if form.app_name.errors else ""), value=app.app_name) }} - {% if form.app_name.errors %} -
- {% for error in form.app_name.errors %}{{ error }}{% endfor %} -
- {% endif %} -
- -
- {{ form.redirect_uris.label(class="form-label") }} - {{ form.redirect_uris(class="form-control " + ("is-invalid" if form.redirect_uris.errors else ""), value=app.redirect_uris) }} - {% if form.redirect_uris.errors %} -
- {% for error in form.redirect_uris.errors %}{{ error }}{% endfor %} -
- {% endif %} - {{ form.redirect_uris.description }} -
- -
- {{ form.scopes.label(class="form-label") }} - {{ form.scopes(class="form-control " + ("is-invalid" if form.scopes.errors else ""), value=app.scopes) }} - {% if form.scopes.errors %} -
- {% for error in form.scopes.errors %}{{ error }}{% endfor %} -
- {% endif %} - {{ form.scopes.description }} -
- -
- {{ form.logo_uri.label(class="form-label") }} - {{ form.logo_uri(class="form-control " + ("is-invalid" if form.logo_uri.errors else ""), value=app.logo_uri) }} - {% if form.logo_uri.errors %} -
- {% for error in form.logo_uri.errors %}{{ error }}{% endfor %} -
- {% endif %} - {{ form.logo_uri.description }} -
- -
- {{ form.contacts.label(class="form-label") }} - {{ form.contacts(class="form-control " + ("is-invalid" if form.contacts.errors else ""), value=app.contacts) }} - {% if form.contacts.errors %} -
- {% for error in form.contacts.errors %}{{ error }}{% endfor %} -
- {% endif %} - {{ form.contacts.description }} -
- -
- {{ form.tos_uri.label(class="form-label") }} - {{ form.tos_uri(class="form-control " + ("is-invalid" if form.tos_uri.errors else ""), value=app.tos_uri) }} - {% if form.tos_uri.errors %} -
- {% for error in form.tos_uri.errors %}{{ error }}{% endfor %} -
- {% endif %} - {{ form.tos_uri.description }} -
- -
- {{ form.policy_uri.label(class="form-label") }} - {{ form.policy_uri(class="form-control " + ("is-invalid" if form.policy_uri.errors else ""), value=app.policy_uri) }} - {% if form.policy_uri.errors %} -
- {% for error in form.policy_uri.errors %}{{ error }}{% endfor %} -
- {% endif %} - {{ form.policy_uri.description }} -
- + {{ render_field(form.app_name, value=app.app_name) }} + {{ render_field(form.redirect_uris, value=app.redirect_uris, rows=3) }} + {{ render_field(form.scopes, value=app.scopes, rows=4) }} + {{ render_field(form.logo_uri, value=app.logo_uri, autocomplete="off") }} + {{ render_field(form.contacts, value=app.contacts, rows=2, autocomplete="off") }} + {{ render_field(form.tos_uri, value=app.tos_uri, autocomplete="off") }} + {{ render_field(form.policy_uri, value=app.policy_uri, autocomplete="off") }}
{{ form.submit(class="btn btn-primary btn-lg") }} Cancel diff --git a/templates/app_gallery/gallery.html b/templates/app_gallery/gallery.html index 79b64ba..1c702be 100644 --- a/templates/app_gallery/gallery.html +++ b/templates/app_gallery/gallery.html @@ -18,20 +18,22 @@ {{ app.app_name }} Logo {% else %}
- {# Placeholder Icon #} +
{% endif %}
{{ app.app_name }}

Client ID: {{ app.client_id }}
- {# Do NOT display client secret here #} - Registered: {{ app.date_registered.strftime('%Y-%m-%d %H:%M') if app.date_registered else 'N/A' }}
- {% if app.last_updated %} - Updated: {{ app.last_updated.strftime('%Y-%m-%d %H:%M') }} - {% endif %} + Registered: {{ app.date_registered.strftime('%Y-%m-%d %H:%M') if app.date_registered else 'N/A' }}
+ {% if app.last_updated %} + Updated: {{ app.last_updated.strftime('%Y-%m-%d %H:%M') }} + {% endif %} + {% if app.is_test_app %} +
Test App: Expires {{ app.test_app_expires_at.strftime('%Y-%m-%d %H:%M') }} + {% endif %}

-
    +
    • Redirect URIs:
        @@ -42,23 +44,26 @@ {% endfor %}
    • -
    • - Allowed Scopes: -
      +
    • + Allowed Scopes: +
      {% for scope in app.scopes.split() %} {{ scope }} {% else %} - None configured + None configured {% endfor %} -
      -
    • - {% if app.contacts %} -
    • Contacts: {{ app.contacts }}
    • - {% endif %} +
+ + {% if app.contacts %} +
  • Contacts: {{ app.contacts }}
  • + {% endif %}
    - Edit - Delete + Edit + + {{ form.hidden_tag() }} + +
    diff --git a/templates/app_gallery/register.html b/templates/app_gallery/register.html index a879a77..8f4cd4d 100644 --- a/templates/app_gallery/register.html +++ b/templates/app_gallery/register.html @@ -1,6 +1,5 @@ {% extends "base.html" %} -{# Optional: Import form helpers if you create _formhelpers.html #} -{# {% from "_formhelpers.html" import render_field %} #} +{% from "_formhelpers.html" import render_field %} {% block content %}
    @@ -13,101 +12,27 @@

    Register your application to use FHIRVINE as a SMART on FHIR SSO proxy. - A Client ID and Client Secret will be generated upon successful registration. + {% if is_test %}This is a test app and will expire in 24 hours.{% endif %}

    -
    - {{ form.hidden_tag() }} {# Include CSRF token #} - - {# --- Application Name --- #} -
    - {{ form.app_name.label(class="form-label") }} - {{ form.app_name(class="form-control" + (" is-invalid" if form.app_name.errors else "")) }} - {% if form.app_name.errors %} -
    - {% for error in form.app_name.errors %}{{ error }}{% endfor %} -
    - {% endif %} {# Closes if form.app_name.errors #} -
    - - {# --- Redirect URIs --- #} -
    - {{ form.redirect_uris.label(class="form-label") }} ({{ form.redirect_uris.description }}) - {{ form.redirect_uris(class="form-control" + (" is-invalid" if form.redirect_uris.errors else ""), rows="3") }} - {% if form.redirect_uris.errors %} -
    - {% for error in form.redirect_uris.errors %}{{ error }}{% endfor %} -
    - {% endif %} {# Closes if form.redirect_uris.errors #} -
    - - {# --- Scopes --- #} -
    - {{ form.scopes.label(class="form-label") }} ({{ form.scopes.description }}) - {{ form.scopes(class="form-control" + (" is-invalid" if form.scopes.errors else ""), rows="4") }} - {% if form.scopes.errors %} -
    - {% for error in form.scopes.errors %}{{ error }}{% endfor %} -
    - {% endif %} {# Closes if form.scopes.errors #} -
    - -
    -

    Optional Information:

    - - {# --- Logo URI --- #} -
    - {{ form.logo_uri.label(class="form-label") }} ({{ form.logo_uri.description }}) - {{ form.logo_uri(class="form-control" + (" is-invalid" if form.logo_uri.errors else "")) }} - {% if form.logo_uri.errors %} -
    - {% for error in form.logo_uri.errors %}{{ error }}{% endfor %} -
    - {% endif %} {# Closes if form.logo_uri.errors #} -
    - - {# --- Contacts --- #} -
    - {{ form.contacts.label(class="form-label") }} ({{ form.contacts.description }}) - {{ form.contacts(class="form-control" + (" is-invalid" if form.contacts.errors else ""), rows="2") }} - {% if form.contacts.errors %} -
    - {% for error in form.contacts.errors %}{{ error }}{% endfor %} -
    - {% endif %} {# Closes if form.contacts.errors #} -
    - - {# --- Terms of Service URI --- #} -
    - {{ form.tos_uri.label(class="form-label") }} ({{ form.tos_uri.description }}) - {{ form.tos_uri(class="form-control" + (" is-invalid" if form.tos_uri.errors else "")) }} - {% if form.tos_uri.errors %} -
    - {% for error in form.tos_uri.errors %}{{ error }}{% endfor %} -
    - {% endif %} {# Closes if form.tos_uri.errors #} -
    - - {# --- Privacy Policy URI --- #} -
    - {{ form.policy_uri.label(class="form-label") }} ({{ form.policy_uri.description }}) - {{ form.policy_uri(class="form-control" + (" is-invalid" if form.policy_uri.errors else "")) }} - {% if form.policy_uri.errors %} -
    - {% for error in form.policy_uri.errors %}{{ error }}{% endfor %} -
    - {% endif %} {# Closes if form.policy_uri.errors #} -
    - - {# --- Submit Buttons --- #} + + {{ form.hidden_tag() }} + {{ render_field(form.app_name) }} + {{ render_field(form.redirect_uris, rows=3) }} + {{ render_field(form.scopes, rows=4) }} +
    +

    Optional Information:

    + {{ render_field(form.logo_uri, autocomplete="off") }} + {{ render_field(form.contacts, rows=2, autocomplete="off") }} + {{ render_field(form.tos_uri, autocomplete="off") }} + {{ render_field(form.policy_uri, autocomplete="off") }}
    - {{ form.submit(class="btn btn-primary btn-lg") }} - Cancel + {{ form.submit(class="btn btn-primary btn-lg") }} + Cancel
    -
    {# Closes form tag #} -
    {# Closes card-body #} -
    {# Closes card #} -
    {# Closes col #} - {# Closes row #} - {# Closes container #} -{% endblock %} {# Closes block content #} - + + + + + + +{% endblock %} \ No newline at end of file diff --git a/templates/base.html b/templates/base.html index e246143..e780b4f 100644 --- a/templates/base.html +++ b/templates/base.html @@ -6,12 +6,9 @@ - {% if title %}{{ title }} - {% endif %}{{ site_name }} @@ -233,25 +183,28 @@ - - - + - - - - - - {% block scripts %}{% endblock %} diff --git a/templates/configure/proxy_settings.html b/templates/configure/proxy_settings.html new file mode 100644 index 0000000..cca0c6e --- /dev/null +++ b/templates/configure/proxy_settings.html @@ -0,0 +1,32 @@ +{% extends "base.html" %} +{% from "_formhelpers.html" import render_field %} + +{% block title %}Proxy Settings - {{ site_name }}{% endblock %} + +{% block content %} +
    +
    +
    +
    +
    +

    Proxy Settings

    +
    +
    +

    + Configure the upstream FHIR server and proxy settings. +

    +
    + {{ form.hidden_tag() }} + {{ render_field(form.fhir_server_url, value=form.fhir_server_url.data) }} + {{ render_field(form.proxy_timeout, value=form.proxy_timeout.data) }} +
    + {{ form.submit(class="btn btn-primary btn-lg") }} + Cancel +
    +
    +
    +
    +
    +
    +
    +{% endblock %} \ No newline at end of file diff --git a/templates/configure/security.html b/templates/configure/security.html new file mode 100644 index 0000000..a73793b --- /dev/null +++ b/templates/configure/security.html @@ -0,0 +1,33 @@ +{% extends "base.html" %} +{% from "_formhelpers.html" import render_field %} + +{% block title %}Security Settings - {{ site_name }}{% endblock %} + +{% block content %} +
    +
    +
    +
    +
    +

    Security Settings

    +
    +
    +

    + Configure security settings for OAuth2 authentication. +

    +
    + {{ form.hidden_tag() }} + {{ render_field(form.token_duration, value=form.token_duration.data) }} + {{ render_field(form.refresh_token_duration, value=form.refresh_token_duration.data) }} + {{ render_field(form.allowed_scopes, value=form.allowed_scopes.data) }} +
    + {{ form.submit(class="btn btn-primary btn-lg") }} + Cancel +
    +
    +
    +
    +
    +
    +
    +{% endblock %} \ No newline at end of file diff --git a/templates/configure/server_endpoints.html b/templates/configure/server_endpoints.html new file mode 100644 index 0000000..f686b8f --- /dev/null +++ b/templates/configure/server_endpoints.html @@ -0,0 +1,46 @@ +{% extends "base.html" %} +{% from "_formhelpers.html" import render_field %} + +{% block title %}Server Endpoints - {{ site_name }}{% endblock %} + +{% block content %} +
    +
    +
    +
    +
    +

    Server Endpoints

    +
    +
    +

    + Configure endpoints for the upstream FHIR server and view available SMART endpoints. +

    +
    + {{ form.hidden_tag() }} + {{ render_field(form.metadata_endpoint) }} + {{ render_field(form.capability_endpoint) }} + {{ render_field(form.resource_base_endpoint) }} +
    + {{ form.submit(class="btn btn-primary btn-lg") }} + Cancel +
    +
    +
    +
    Available SMART Endpoints
    +
      +
    • Configuration: /.well-known/smart-configuration - SMART on FHIR discovery
    • +
    • Authorization: /oauth2/authorize - Initiate OAuth2 flow
    • +
    • Token: /oauth2/token - Exchange code for token
    • +
    • Revoke: /oauth2/revoke - Revoke tokens
    • +
    • Introspect: /oauth2/introspect - Verify token status
    • +
    • FHIR Proxy: /oauth2/proxy/ - Proxy FHIR requests
    • +
    + +
    +
    +
    +
    +
    +{% endblock %} \ No newline at end of file diff --git a/templates/consent.html b/templates/consent.html index 6596f77..6ad3158 100644 --- a/templates/consent.html +++ b/templates/consent.html @@ -1,48 +1,31 @@ {% extends "base.html" %} -{% block title %}Authorize {{ client.app_name }} - {{ site_name }}{% endblock %} - {% block content %} -
    +
    -
    -

    Authorize Application

    +
    +

    Authorize {{ client.app_name }}

    -

    - {{ client.app_name }} is requesting access to your data. +

    + The application {{ client.app_name }} is requesting access to your FHIR data.

    -
    Permissions Requested:
    +
    Scopes Requested:
      {% for scope in scopes %} -
    • - {{ scope }} -

      - {% if scope == "openid" %} - Access your identity information. - {% elif scope == "profile" %} - Access your user profile information. - {% elif scope == "launch" %} - Launch the application with context. - {% elif scope == "launch/patient" %} - Launch the application with patient context. - {% elif scope == "patient/*.read" %} - Read all patient data. - {% else %} - Custom scope permission. - {% endif %} -

      -
    • +
    • {{ scope }}
    • {% endfor %}
    -
    -
    - -
    diff --git a/templates/index.html b/templates/index.html index 7146c23..6813d62 100644 --- a/templates/index.html +++ b/templates/index.html @@ -2,7 +2,8 @@ {% block content %}
    -

    Welcome to {{ site_name }}

    + FHIRVINE SMART PROXY +

    Welcome to {{ site_name }}

    A modular SMART on FHIR Single Sign-On (SSO) Proxy. Register applications, test client launches, and manage connections. @@ -11,6 +12,7 @@ View App Gallery Register New App Test Client Launch + Test Server

    diff --git a/templates/swagger-ui.html b/templates/swagger-ui.html new file mode 100644 index 0000000..f2f91c0 --- /dev/null +++ b/templates/swagger-ui.html @@ -0,0 +1,87 @@ + + + + + FHIRVINE API Documentation + + + + + + + + +
    +
    + + + +
    + + + \ No newline at end of file diff --git a/templates/swagger-ui.html.old.html b/templates/swagger-ui.html.old.html new file mode 100644 index 0000000..f2f91c0 --- /dev/null +++ b/templates/swagger-ui.html.old.html @@ -0,0 +1,87 @@ + + + + + FHIRVINE API Documentation + + + + + + + + +
    +
    + + + +
    + + + \ No newline at end of file diff --git a/templates/test_client.html b/templates/test_client.html index b3a1a34..b5fae2b 100644 --- a/templates/test_client.html +++ b/templates/test_client.html @@ -10,31 +10,53 @@

    - Select a registered application to test its SMART on FHIR launch. + Select a registered application to test its SMART on FHIR launch or register a test app.

    {{ form.hidden_tag() }} -
    {{ form.client_id.label(class="form-label") }} - + + {% if apps %} + {% for app in apps %} + + {% endfor %} + {% else %} + + {% endif %} + Choose an app to test its OAuth2 flow. {% if form.client_id.errors %}
    {% for error in form.client_id.errors %}{{ error }}{% endfor %}
    {% endif %}
    - +
    + {{ form.response_mode.label(class="form-label") }} +
    + {% for subfield in form.response_mode %} +
    + {{ subfield(class="form-check-input") }} + {{ subfield.label(class="form-check-label") }} +
    + {% endfor %} +
    +
    {{ form.submit(class="btn btn-primary btn-lg") }} + Register Test App Cancel
    + {% if response_data %} +
    +
    Test Response:
    +
    +{{ response_data | tojson(indent=2) }}
    +                        
    + {% endif %}
    diff --git a/templates/test_server.html b/templates/test_server.html new file mode 100644 index 0000000..e98de8e --- /dev/null +++ b/templates/test_server.html @@ -0,0 +1,39 @@ +{% extends "base.html" %} +{% from "_formhelpers.html" import render_field %} + +{% block content %} +
    +
    +
    +
    +
    +

    Test SMART Server

    +
    +
    +

    + Test FHIRVINE as an OAuth2 server by simulating an external client. +

    +
    + {{ form.hidden_tag() }} + {{ render_field(form.client_id) }} + {{ render_field(form.client_secret) }} + {{ render_field(form.redirect_uri) }} + {{ render_field(form.scopes) }} +
    + {{ form.submit(class="btn btn-primary btn-lg") }} + Cancel +
    +
    + {% if response_data %} +
    +
    Server Test Response:
    +
    +{{ response_data | tojson(indent=2) }}
    +                        
    + {% endif %} +
    +
    +
    +
    +
    +{% endblock %} \ No newline at end of file