mirror of
https://github.com/Sudo-JHare/FHIRFLARE-IG-Toolkit.git
synced 2025-06-14 16:19:59 +00:00
Create README_INTEGRATION FHIRVINE as Moduel in FLARE.md
This commit is contained in:
parent
ebb691449b
commit
3365255a5b
151
README_INTEGRATION FHIRVINE as Moduel in FLARE.md
Normal file
151
README_INTEGRATION FHIRVINE as Moduel in FLARE.md
Normal file
@ -0,0 +1,151 @@
|
||||
# Integrating FHIRVINE as a Module in FHIRFLARE
|
||||
|
||||
## Overview
|
||||
|
||||
FHIRFLARE is a Flask-based FHIR Implementation Guide (IG) toolkit for managing and validating FHIR packages. This guide explains how to integrate FHIRVINE—a SMART on FHIR proxy—as a module within FHIRFLARE, enabling OAuth2 authentication and FHIR request proxying directly in the application. This modular approach embeds FHIRVINE’s functionality into FHIRFLARE, avoiding the need for a separate proxy service.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- FHIRFLARE repository cloned: `https://github.com/Sudo-JHare/FHIRFLARE-IG-Toolkit`.
|
||||
- FHIRVINE repository cloned: `<fhirvine-repository-url>`.
|
||||
- Python 3.11 and dependencies installed (`requirements.txt` from both projects).
|
||||
- A FHIR server (e.g., `http://hapi.fhir.org/baseR4`).
|
||||
|
||||
## Integration Steps
|
||||
|
||||
### 1. Prepare FHIRFLARE Structure
|
||||
|
||||
Ensure FHIRFLARE’s file structure supports modular integration. It should look like:
|
||||
|
||||
```
|
||||
FHIRFLARE-IG-Toolkit/
|
||||
├── app.py
|
||||
├── services.py
|
||||
├── templates/
|
||||
├── static/
|
||||
└── requirements.txt
|
||||
```
|
||||
|
||||
### 2. Copy FHIRVINE Files into FHIRFLARE
|
||||
|
||||
FHIRVINE’s core functionality (OAuth2 proxy, app registration) will be integrated as a Flask Blueprint.
|
||||
|
||||
- **Copy Files**:
|
||||
|
||||
- Copy `smart_proxy.py`, `forms.py`, `models.py`, and `app.py` (relevant parts) from FHIRVINE into a new `fhirvine/` directory in FHIRFLARE:
|
||||
|
||||
```
|
||||
FHIRFLARE-IG-Toolkit/
|
||||
├── fhirvine/
|
||||
│ ├── smart_proxy.py
|
||||
│ ├── forms.py
|
||||
│ ├── models.py
|
||||
│ └── __init__.py
|
||||
```
|
||||
|
||||
- Copy FHIRVINE’s templates (e.g., `app_gallery/`, `configure/`, `test_client.html`) into `FHIRFLARE-IG-Toolkit/templates/` while maintaining their folder structure.
|
||||
|
||||
- **Add Dependencies**:
|
||||
|
||||
- Add FHIRVINE’s dependencies to `requirements.txt` (e.g., `authlib`, `flasgger`, `flask-sqlalchemy`).
|
||||
|
||||
### 3. Modify FHIRVINE Code as a Module
|
||||
|
||||
- **Create Blueprint in** `fhirvine/__init__.py`:
|
||||
|
||||
```python
|
||||
from flask import Blueprint
|
||||
|
||||
fhirvine_bp = Blueprint('fhirvine', __name__, template_folder='templates')
|
||||
|
||||
from .smart_proxy import *
|
||||
```
|
||||
|
||||
This registers FHIRVINE as a Flask Blueprint.
|
||||
|
||||
- **Update** `smart_proxy.py`:
|
||||
|
||||
- Replace direct `app.route` decorators with `fhirvine_bp.route`. For example:
|
||||
|
||||
```python
|
||||
@fhirvine_bp.route('/authorize', methods=['GET', 'POST'])
|
||||
def authorize():
|
||||
# Existing authorization logic
|
||||
```
|
||||
|
||||
### 4. Integrate FHIRVINE Blueprint into FHIRFLARE
|
||||
|
||||
- **Update** `app.py` **in FHIRFLARE**:
|
||||
|
||||
- Import and register the FHIRVINE Blueprint:
|
||||
|
||||
```python
|
||||
from fhirvine import fhirvine_bp
|
||||
from fhirvine.models import database, RegisteredApp, OAuthToken, AuthorizationCode, Configuration
|
||||
from fhirvine.smart_proxy import configure_oauth
|
||||
|
||||
app = Flask(__name__)
|
||||
app.config.from_mapping(
|
||||
SECRET_KEY='your-secure-random-key',
|
||||
SQLALCHEMY_DATABASE_URI='sqlite:////app/instance/fhirflare.db',
|
||||
SQLALCHEMY_TRACK_MODIFICATIONS=False,
|
||||
FHIR_SERVER_URL='http://hapi.fhir.org/baseR4',
|
||||
PROXY_TIMEOUT=10,
|
||||
TOKEN_DURATION=3600,
|
||||
REFRESH_TOKEN_DURATION=86400,
|
||||
ALLOWED_SCOPES='openid profile launch launch/patient patient/*.read offline_access'
|
||||
)
|
||||
|
||||
database.init_app(app)
|
||||
configure_oauth(app, db=database, registered_app_model=RegisteredApp, oauth_token_model=OAuthToken, auth_code_model=AuthorizationCode)
|
||||
|
||||
app.register_blueprint(fhirvine_bp, url_prefix='/fhirvine')
|
||||
```
|
||||
|
||||
### 5. Update FHIRFLARE Templates
|
||||
|
||||
- **Add FHIRVINE Links to Navbar**:
|
||||
|
||||
- In `templates/base.html`, add links to FHIRVINE features:
|
||||
|
||||
```html
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('fhirvine.app_gallery') }}">App Gallery</a>
|
||||
</li>
|
||||
<li class="nav-item">
|
||||
<a class="nav-link" href="{{ url_for('fhirvine.test_client') }}">Test Client</a>
|
||||
</li>
|
||||
```
|
||||
|
||||
### 6. Run and Test
|
||||
|
||||
- **Install Dependencies**:
|
||||
|
||||
```bash
|
||||
pip install -r requirements.txt
|
||||
```
|
||||
|
||||
- **Run FHIRFLARE**:
|
||||
|
||||
```bash
|
||||
flask db upgrade
|
||||
flask run --host=0.0.0.0 --port=8080
|
||||
```
|
||||
|
||||
- **Access FHIRVINE Features**:
|
||||
|
||||
- App Gallery: `http://localhost:8080/fhirvine/app-gallery`
|
||||
- Test Client: `http://localhost:8080/fhirvine/test-client`
|
||||
- Proxy Requests: Use `/fhirvine/oauth2/proxy/<path>` within FHIRFLARE.
|
||||
|
||||
## Using FHIRVINE in FHIRFLARE
|
||||
|
||||
- **Register Apps**: Use `/fhirvine/app-gallery` to register SMART apps within FHIRFLARE.
|
||||
- **Authenticate**: Use `/fhirvine/oauth2/authorize` for OAuth2 flows.
|
||||
- **Proxy FHIR Requests**: FHIRFLARE can now make FHIR requests via `/fhirvine/oauth2/proxy`, leveraging FHIRVINE’s authentication.
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
- **Route Conflicts**: Ensure no overlapping routes between FHIRFLARE and FHIRVINE.
|
||||
- **Database Issues**: Verify `SQLALCHEMY_DATABASE_URI` points to the same database.
|
||||
- **Logs**: Check `flask run` logs for errors.
|
Loading…
x
Reference in New Issue
Block a user