From 2d90fb7629dbbc9834d38b7d73d44aa08c472605 Mon Sep 17 00:00:00 2001 From: Mylloon Date: Tue, 21 Dec 2021 11:02:43 +0100 Subject: [PATCH] flexible token and login/password support for login --- README.md | 16 +++++++++++++-- src/main.rs | 52 ++++++++++++++++++++++++++++++++++++++++++++--- src/mattermost.rs | 11 ++++++++-- 3 files changed, 72 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index ae2d76d..18425cf 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,23 @@ sudo apt install libssl-dev `.env` placé dans la racine du projet qui contient ses différentes variables : ``` -PSEUDO=votre_pseudo_ici -MOT_DE_PASSE=votre_mot-de-passe_ici +TOKEN=votre_token_ici # pas besoin de token si vous mettez un combo pseudo/mot-de-passe +PSEUDO=votre_pseudo_ici # pas besoin de pseudo si un token est renseigné +MOT_DE_PASSE=votre_mot-de-passe_ici # pas besoin de mot de passe si un token est renseigné URL=url_du_site_ici, ex: https://talk.up8.edu EQUIPE=nom_de_lequipe, ex: etudiant-es ``` +*Note: Si les deux moyens de connexion sont renseignés (token et pseudo/mot-de-passe), le bot ne se lancera pas.* + +Dans le cas ou vous optez pour le token, vous devez ajouter un bot, pour ce faire (d'après la [documentation officielle](https://developers.mattermost.com/integrate/admin-guide/admin-bot-accounts/)) : +- Cliquez sur les 9 carrés en haut a gauche +- Integrations +- Bot Accounts +- Add Bot Account +- Remplissez les champs +- Cochez la case `post:all` pour être sur qu'il n'y aura pas de problèmes de permission (c'est une reccomandation) +- Create Bot Account +- Dans la page suivante, vous aurez votre token --- ### Tests en local diff --git a/src/main.rs b/src/main.rs index 9de5364..912e886 100644 --- a/src/main.rs +++ b/src/main.rs @@ -6,9 +6,55 @@ mod mattermost; #[tokio::main] async fn main() { dotenv().expect("Le fichier .env n'a pas été trouvé..."); // vérification si fichier .env trouvé - let pseudo = env::var("PSEUDO").expect("Pseudo non trouvé dans le fichier .env"); // récupération du pseudo - let mot_de_passe = env::var("MOT_DE_PASSE").expect("Mot de passe non trouvé dans le fichier .env"); // récupération du mot de passe + + // Initialisation des variables token, pseudo et mot de passe + let mut token = "".to_string(); + let mut pseudo = "".to_string(); + let mut mot_de_passe = "".to_string(); + + + // Récupération du token + let mut token_recuperer = false; + match env::var("TOKEN") { + Ok(string) => { + token = string; + token_recuperer = true; + }, + _=> {()} + } + + // Récupération du pseudo + let mut pseudo_ok = false; + match env::var("PSEUDO") { + Ok(string) => { + if token_recuperer { + panic!("Tu as déjà choisie un token, vous ne pouvez pas aussi avoir définie un pseudo."); + } + pseudo_ok = true; + pseudo = string; + }, + Err(_) => { + if !token_recuperer { + panic!("Aucun token ni pseudo trouvé dans le fichier .env"); + } + } + } + + // Récupération du mot de passe + match env::var("MOT_DE_PASSE") { + Ok(string) => { + if token_recuperer { + panic!("Tu as déjà choisie un token, vous ne pouvez pas aussi avoir définie un mot de passe."); + } + mot_de_passe = string; + }, + Err(_) => { + if pseudo_ok { + panic!("Tu as renseigné un pseudo mais pas de mot de passe dans le fichier .env"); + } + } + } let url = env::var("URL").expect("URL non trouvé dans le fichier .env"); // récupération de l'url let equipe = env::var("EQUIPE").expect("Équipe non trouvé dans le fichier .env"); // récupération de l'équipe - mattermost::connexion(&pseudo, &mot_de_passe, &url, &equipe).await; // connexion à mattermost + mattermost::connexion(&token, &pseudo, &mot_de_passe, &url, &equipe).await; // connexion à mattermost } diff --git a/src/mattermost.rs b/src/mattermost.rs index dcc1835..469d103 100644 --- a/src/mattermost.rs +++ b/src/mattermost.rs @@ -1,8 +1,15 @@ use mattermost_api::prelude::*; /// Se connecte à Mattermost depuis Gitlab -pub async fn connexion(pseudo: &str, mot_de_passe: &str, url: &str, equipe: &str) { - let auth = AuthenticationData::from_password(pseudo, mot_de_passe); +pub async fn connexion(token: &str, pseudo: &str, mot_de_passe: &str, url: &str, equipe: &str) { + let auth; + if token.len() > 0 { + auth = AuthenticationData::from_access_token(token); + println!("Login via token"); + } else { + auth = AuthenticationData::from_password(pseudo, mot_de_passe); + println!("Login via pseudo/mot-de-passe"); + } let mut api = Mattermost::new(url, auth); api.store_session_token().await.unwrap(); let team_info = api.get_team_info(equipe).await;