flexible token and login/password support for login

This commit is contained in:
Mylloon 2021-12-21 11:02:43 +01:00
parent 0b23a04c88
commit 2d90fb7629
Signed by: Anri
GPG key ID: A82D63DFF8D1317F
3 changed files with 72 additions and 7 deletions

View file

@ -8,11 +8,23 @@ sudo apt install libssl-dev
`.env` placé dans la racine du projet qui contient ses différentes variables : `.env` placé dans la racine du projet qui contient ses différentes variables :
``` ```
PSEUDO=votre_pseudo_ici TOKEN=votre_token_ici # pas besoin de token si vous mettez un combo pseudo/mot-de-passe
MOT_DE_PASSE=votre_mot-de-passe_ici 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 URL=url_du_site_ici, ex: https://talk.up8.edu
EQUIPE=nom_de_lequipe, ex: etudiant-es 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 ### Tests en local

View file

@ -6,9 +6,55 @@ mod mattermost;
#[tokio::main] #[tokio::main]
async fn main() { async fn main() {
dotenv().expect("Le fichier .env n'a pas été trouvé..."); // vérification si fichier .env trouvé 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 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 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
} }

View file

@ -1,8 +1,15 @@
use mattermost_api::prelude::*; use mattermost_api::prelude::*;
/// Se connecte à Mattermost depuis Gitlab /// Se connecte à Mattermost depuis Gitlab
pub async fn connexion(pseudo: &str, mot_de_passe: &str, url: &str, equipe: &str) { pub async fn connexion(token: &str, pseudo: &str, mot_de_passe: &str, url: &str, equipe: &str) {
let auth = AuthenticationData::from_password(pseudo, mot_de_passe); 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); let mut api = Mattermost::new(url, auth);
api.store_session_token().await.unwrap(); api.store_session_token().await.unwrap();
let team_info = api.get_team_info(equipe).await; let team_info = api.get_team_info(equipe).await;