Commit f380402a authored by Guillaume Vagner's avatar Guillaume Vagner
Browse files

auto reload of token

parent 018954e7
// REQUESTS.JS : Envoi de requête HTTP vers l'OAuth de VR et vers LinkCS
// Modules extérieurs
const rp = require('request-promise');
......@@ -7,22 +9,27 @@ var { modifyChan, getChanByState } = require('./connection-db');
// Configurations
const config = require('./config');
// Fonction d'envoi d'une requête au GraphQL de LinkCS
async function sendRequest(req, token) {
// ici faire le refresh token
const options = {
headers: { 'Authorization': `Bearer ${token}` },
json: true
}
const url = 'https://gateway.linkcs.fr/v1/graphql';
return rp(`${url}?query=${req}`, options)
// Fonction d'envoi d'une requête au GraphQL de LinkCS
async function sendRequest(req, chan) {
// A chaque requête vérifie si le token est encore valable, sinon va en récupérer un nouveau
return getNewTokenIfNecessary(chan).then(chan => {
const options = {
headers: { 'Authorization': `Bearer ${chan.token}` },
json: true
}
const url = 'https://gateway.linkcs.fr/v1/graphql';
return rp(`${url}?query=${req}`, options)
})
}
// Récupération de tous les personnes et leurs assos ayant leur anniversaire
function getBirthdays(token) {
function getBirthdays(chan) {
const req = 'query getUsersBirthday {users: usersBirthday { ...userData}}fragment userData on User {firstName lastName roles {sector {composition {association {id}}}}}'
return sendRequest(req, token).then(body => {
return sendRequest(req, chan).then(body => {
const users = [];
body.data.users.forEach(user => {
use = {};
......@@ -38,18 +45,18 @@ function getBirthdays(token) {
}
// Récupération de la recherche de groupe
function searchGroups(token, term) {
function searchGroups(chan, term) {
const req = `query {searchAssociations(term: "${term}") {id name code}}`
return sendRequest(req, token).then(body => {
return sendRequest(req, chan).then(body => {
if (!body.data) return;
return body.data.searchAssociations;
}).catch(err => { console.error(err) })
}
// Récupération du nom de l'asso ayant l'ID donnée
function getGroupById(token, id) {
function getGroupById(chan, id) {
const req = `query {association(id: ${id}) {name}}`
return sendRequest(req, token).then(body => {
return sendRequest(req, chan).then(body => {
if (!body.data) return;
return body.data.association.name;
}).catch(err => { console.error(err) })
......@@ -111,4 +118,13 @@ function getNewToken(chan) {
})
};
// Récupère un nouveau token que si besoin
function getNewTokenIfNecessary(chan) {
if (chan.expiration*1000 < Date.now()) {
return getNewToken(chan)
} else {
return Promise.resolve(chan)
}
}
module.exports = { getBirthdays, sendRequest, searchGroups, getGroupById, getFirstToken, getNewToken };
\ No newline at end of file
......@@ -17,7 +17,7 @@ function addSchedule(chan, time, bot) {
schedules[chan.chatId] = schedule.scheduleJob({ hour: hour, minute: minute }, function () {
return getNewToken(chan).then(chan => {
return Promise.all([
getBirthdays(chan.token),
getBirthdays(chan),
getGroups(chan.chatId)
])
}).then(([users, groups]) => {
......
......@@ -45,7 +45,6 @@ bot.onText(/\/reset/, msg => {
})
})
// Si rien n'a été fait avant, propose un lien de connexion à l'OAuth2 de VR
bot.onText(/\/connect/, (msg, _) => {
const chatId = msg.chat.id;
......@@ -98,7 +97,7 @@ bot.onText(/\/allbirthdays/, msg => {
const chatId = msg.chat.id;
// recherche du token du chan actuel
getChanByChatId(chatId).then(chan => {
return getBirthdays(chan.token)
return getBirthdays(chan)
}).then(users => {
var msg = '**Joyeux anniversaire** à :\n'
users.forEach(user => {
......@@ -114,7 +113,7 @@ bot.onText(/\/birthdays/, msg => {
// recherche du token du chan actuel
getChanByChatId(chatId).then(chan => {
return Promise.all([
getBirthdays(chan.token),
getBirthdays(chan),
getGroups(chatId),
])
}).then(([users, groups]) => {
......@@ -134,7 +133,7 @@ bot.onText(/\/search (.+)/, (msg, match) => {
const chatId = msg.chat.id;
const research = match[1];
getChanByChatId(chatId).then(chan => {
return searchGroups(chan.token, research)
return searchGroups(chan, research)
}).then(groups => {
if (groups.length == 0) return bot.sendMessage(chatId, 'Pas de groupe à ce nom...');
var resp = 'Voici les différentes associations. Faites /add XXXX pour ajouter les anniversaires de ses membres. ';
......@@ -154,7 +153,7 @@ bot.onText(/\/add (.+)/, (msg, match) => {
getChanByChatId(chatId).then(chan => {
const id = parseInt(match[1].split(' ')[0]);
return Promise.all([
getGroupById(chan.token, id),
getGroupById(chan, id),
getGroups(chatId),
id
]);
......@@ -175,7 +174,7 @@ bot.onText(/\/del (.+)/, (msg, match) => {
getChanByChatId(chatId).then(chan => {
const id = parseInt(match[1].split(' ')[0]);
return Promise.all([
getGroupById(chan.token, id),
getGroupById(chan, id),
getGroups(chatId),
id
]);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment