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 :
|
`.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
|
||||||
|
|
52
src/main.rs
52
src/main.rs
|
@ -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
|
||||||
}
|
}
|
||||||
|
|
|
@ -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;
|
||||||
|
|
Reference in a new issue