edf-pystore 4.0.9
Un connecteur python pour authentifier et autoriser des utilisateurs sur les applications de l'HydroStore.

# Pystore V4.0.*
Pystore est une librairie Flask permettant aux développeurs d'applications scientifiques python + Flask de s'interfacer
facilement avec le store d'applications scientifiques du CIH.

## Installation
`pip install edf-pystore`

pystore va ajouter les urls suivantes à votre application, veillez à ce qu'elles ne soient pas déjà définies:

| Url        | Description                                                        |
|------------|--------------------------------------------------------------------|
| /logout    | Déconnecte l'utilisateur connecté et redirige vers /login          |
| /authorize | Route de redirection pour authentifier un utilisateur via OAuth    |
| /config    | Route utilisée par ApiAuth pour récupérer la config OAuth          |

pystore expose le décorateur `@token_required` que vous pouvez ajouter au dessus te toutes les routes à sécuriser.
Ce décorateur s'occupera de rediriger l'utilisateur vers la page de login si il n'est pas connecté.


## Variables d'environment
Pour configurer PyStore, on utilise les variables d'environnement suivantes:
```python
import os

os.environ['PYSTORE_APP_ID']  # L'ID de votre application
os.environ['PYSTORE_CLIENT_ID']  # Le client ID OAuth de votre application
os.environ['PYSTORE_CLIENT_SECRET']  # La clé secrète OAuth de votre application
os.environ['PYSTORE_CLIENT_HOMEPAGE_URL']  # La base url de votre application (exemple: https://monapp.cih.dpih.edf.fr)
os.environ['PYSTORE_CLIENT_AUTHORIZE_URL']  # L'url de redirection de votre application (exemple: https://monapp.cih.dpih.edf.fr/authorize)
os.environ['PYSTORE_AUTH_SERVER_URL']  # La base url du serveur d'authentification (exemple: https://authentication.recette.cih.dpih.edf.fr)
os.environ['PYSTORE_STORE_SERVER_URL']  # La base url du store (exemple: https://hydrostore.recette.cih.dpih.edf.fr)

# Optionnel
# Vérifie la provenance des certificats SSL lors des appels API
os.environ['SSL_CERT_VERIFY'] # True ou False, par défaut à True
```


Si vous ne voulez pas déclarer de variables d'environnement à chaque fois que vous lancez votre application en local,
créez un fichier `.env` à la racine de votre projet. PyStore ira lire les valeurs qu'il contient:
```.env
PYSTORE_APP_ID=123
PYSTORE_CLIENT_ID=123456789
PYSTORE_CLIENT_SECRET=987654321
PYSTORE_CLIENT_HOMEPAGE_URL=https://monapp.recette.cih.dpih.edf.fr
PYSTORE_CLIENT_AUTHORIZE_URL=https://monapp.recette.cih.dpih.edf.fr/authorize
PYSTORE_AUTH_SERVER_URL=https://authentication.recette.cih.dpih.edf.fr
PYSTORE_STORE_SERVER_URL=https://hydrostore.recette.cih.dpih.edf.fr

# Optionnel, par défaut à True
SSL_CERT_VERIFY=True
```


## Usage pour une app HTTP(s)
```python
from flask import Flask, render_template
from pystore.flask import HttpAuth, token_required

# Pour tester en local (car pas de https en local)
# import os
# os.environ['AUTHLIB_INSECURE_TRANSPORT'] = '1'

app = Flask(__name__)

# si ce n'est pas déjà fait, créez une secret_key
app.secret_key = 'UNE CLE ALEATOIRE DE + OU - 20 CARACTERES'

# Créez un objet StoreAuth et passez-lui l'instance de votre application
store_auth = HttpAuth(app)

@app.route('/')
@token_required
def hello():
    return render_template('index.html')
```

## Usage pour une app en mode API REST
```python
from flask import Flask, render_template
from pystore.flask import ApiAuth, api_token_required

# Pour tester en local (car pas de https en local)
# import os
# os.environ['AUTHLIB_INSECURE_TRANSPORT'] = '1'

app = Flask(__name__)

# si ce n'est pas déjà fait, créez une secret_key
app.secret_key = 'UNE CLE ALEATOIRE DE + OU - 20 CARACTERES'

# Créez un objet StoreAuth et passez-lui l'instance de votre application
store_auth = ApiAuth(app)

@app.route('/')
@api_token_required
def hello():
    return render_template('index.html')
```