Package: pypnusershub
UsersHub-authentification-moduleModule Flask (Python) permettant de gérer l'authentification suivant le modèle deUsersHub.Prévu pour être utilisé comme un submodule git.Nécessite le schémautilisateursde UsersHub dans la BDD de l'application l'utilisant. Pour cela installez UsersHub dans la même BDD ou uniquement son schéma :https://github.com/PnX-SI/UsersHub/blob/master/data/usershub.sqlPar défaut le sous-module utilise le mot de passe "pass_plus" (méthode de hashage bcrypt) pour s'authentifier. Si vous souhaitez utiliser le champ "pass" (en md5), il faut passer le paramètrePASS_METHOD = 'md5'à la configuration Flask de l'application parent qui utilise le sous-module.Flask LoginLe sous-module utilise la librairie Flask-Login pour la gestion de l'authentification (https://flask-login.readthedocs.io/en/latest/).Cette librairie offre une méthode standard de gestion de l'authentification via un cookie de session. Le sous-module ajoute la possibilité de s'authentifier via un JWT si notre application utilise une API.Il est possible de surcoucher les vues de redirection ainsi que les callbacks renvoyés suite à une erreur 401. Voirhttps://flask-login.readthedocs.io/en/latest/#customizing-the-login-process.Routeslogin :parametres : login, password, id_applicationreturn : tokenFonction de décorationcheck_authparametres : level = niveau de droitutilise le token passé en cookie de la requêteExemple d'usagePour disposer des routes de login/logout dans votre application Flask, ajoutez dans votre fichier de lancement de l'application (server.pypar exemple) :from pypnusershub.routes import routes
  app.register_blueprint(routes, url_prefix='/auth')Pour protéger une route :#Import de la librairie
  from pypnusershub.routes import routes as fnauth

  #Ajout d'un test d'authentification avec niveau de droit
  @adresses.route('/', methods=['POST', 'PUT'])
  @fnauth.check_auth(4)
  def insertUpdate_bibtaxons(id_taxon=None):
    ...Utilisation de l'APIRoutes définies dans UsersHubcreate_tmp_user :in : {données sur l'utilisateur}return : {token}Création d'un utilisateur temporaire en basevalid_temp_user :in : {token, application_id}return : {role}Création utilisateur en base dans la table t_role et ajout d'un profil avec code 1 pour une l’application donnéecreate_cor_role_token:in : {email}return : {role}Génère un token pour utilisateur ayant l’email indiqué et stoque le token dans cor_role_tokenchange_passwordin: {token, password, password_confirmation}return : {role}Mise à jour du mot de passe de l’utilisateur et suppression du token en basechange_application_rightin : {id_application, id_profil, id_role}return : {id_role, id_profil, id_application, role}Modifie le profil de l’utilisateur pour l’applicationupdate_userin : {id_role, données utilisateur}return : {role}Mise à jour d'un rôleMéthodes définies dans le moduleconnect_admin : décorateur pour la connexion d’un utilisateur type admin a une appli ici usershub. Paramètres à renseigner dans config.pypost_usershub :route générique pour appeler les route usershub en tant qu'administrateur de l'appli en courslance l’action spécifiési une post request est définie pour l’action exécute la fonctionConfigurationParamètres à rajouter dans le fichier de configuration (config.py)Les paramètre concernant la gestion du cookie sont gérés par flask-admin :https://flask-login.readthedocs.io/en/latest/#cookie-settingsREDIRECT_ON_FORBIDDEN: paramètre de redirection utilisé par le décorateurcheck_authlorsque les droits d'accès à une ressource/page sont insuffisants (par défaut lève une erreur 403)URL_USERSHUB="http://usershub-url.ext"

# Administrateur de mon application
ADMIN_APPLICATION_LOGIN="admin-monapplication"
ADMIN_APPLICATION_PASSWORD="monpassword"
ADMIN_APPLICATION_MAIL="admin-monapplication@mail.ext"Appel des routesPour disposer des routes dans votre application Flask, ajoutez dans votre fichier de lancement de l'application (server.pypar exemple) :from pypnusershub import routes_register
app.register_blueprint(routes_register.bp, url_prefix='/pypn/register')Configuration des actions post requestRajouter le paramètreafter_USERSHUB_requestà la configuration. Ce paramètre est un tableau qui définit, pour chaque action, un ensemble d'opérations à réaliser ensuite. Comme par exemple envoyer un email.function_dict = {
    'create_cor_role_token': create_cor_role_token,
    'create_temp_user': create_temp_user,
    'valid_temp_user': valid_temp_user,
    'change_application_right': change_application_right
}Chaque fonction prend un paramètre en argument qui correspond aux données retournées par la route de UsersHub.InstallationCloner le repository ou télécharger une archive, puis dans le dossier :python setup.py installLe driver PostgreSQL Python, "psycopg2", peut avoir besoin d'être compilé. Si
à l'installation vous obtenez un message d'erreur décrivant un fichier de
header manquant (xxxx.h), comme par exemple :fatal error: Python.h: Aucun fichier ou dossier de ce typeAlors il faudra installer au préalable les headers de votre version de Python,
votre version de PostgreSQL et un compilateur.Par exemple, sur Ubuntu avec Python 3.5 et PostgreSQL 9.5 :sudo apt install python3.5-dev build-essential postgresql-server-dev-9.5Il faut ensuite configurer la base de données en étant super-utilisateur.La manière la plus courante pour se connecter à la base de données en ayant les droits super-utilisateur est de se logger avec l'utilisateur 'postgres'. Par exemple sous Ubuntu :sudo su postgresAssurez-vous d'avoir au moins créé une base de données. Par exemple sous Ubuntu :createdb ma_dbIl faut ensuite créer un utilisateur. Par exemple :createuser -P parcnationalPuis donner les droits à cet utilisateur sur la base de données :$ psql
postgres=# GRANT ALL PRIVILEGES ON DATABASE ma_db TO parcnational;SQLAlchemy vous permettra de vous connecter à la base de données avec une URL
de type :postgresql://nom_utilisateur:mot_de_passe@host:port/db_namePar exemple :postgresql://parcnational:secret@127.0.0.1:5432/ma_dbIl vous faudra créer un schema nomméutilisateursqui contient toutes les tables nécessaires.Utilisez le SQL maintenu dans le dépôt de UsersHub :https://github.com/PnX-SI/UsersHub/blob/master/data/usershub.sqlPour l'éxécuter, il faut avoir ajouter l'extension UUID à votre base de données. Pour le faire en ligne de commande en tant que super-utilisateur de PotsgreSQL :sudo -n -u postgres -s psql -d $db_name -c 'CREATE EXTENSION IF NOT EXISTS "uuid-ossp";'.Attention, les commandes qui suivent sont obsolètes, car le script SQL local a été supprimé du dépôt pour utiliser celui de UsersHub.Ce module contient le SQL pour le faire dans le fichierdb/schema.sql. Néanmoins une commande vous permet de le faire automatiquement :python -m pypnusershub init_schema url_de_la_dbExemple :python -m pypnusershub init_schema postgresql://parcnational:secret@127.0.0.1:5432/ma_dbpython -m pypnusershubpermet aussi de supprimer le schema (delete_schema), remettre à zéro (reset_schema) et charger des données de test (load_fixtures). Pour plus d'informations :python -m pypnusershub --helpPlease note that you can only load the fixtures once, as they have UNIQUE constraints.