flexible token and login/password support for login
This commit is contained in:
parent
0b23a04c88
commit
2d90fb7629
3 changed files with 72 additions and 7 deletions
16
README.md
16
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
|
||||
|
|
52
src/main.rs
52
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
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
|
|
Reference in a new issue