// Smiiirl Compteur - Entreprise Spirit SA // https://lab.niemes.info/software/spirit_smiirl.git // https://spirit.niemes.info // Copyright Niemeskern Kévin 2021. const path = require('path'); const express = require('express'); const app = express(); const port = process.env.PORT || 8111; const bodyParser = require('body-parser'); const validator = require('validator'); const API = require('./lib/API'); const mail = require('./notification.js') const jsonfile = require('jsonfile') const tokenFile = './token.json' let info = { followers: 99999, companyID: 991997, // spirit_3 company page orgaName: "spirit_3", token: {}, expire: 0, active: true, updateTime: 4000, // 25000 Api call / 24H, error: 0 } jsonfile.readFile(tokenFile, function (err, obj) { if (err) console.error(err) else { console.dir(obj) info.token = obj obj = process.env.access_token } }) function updateTokenEnv(data){ let reqObj = data info.token = reqObj info.authorized = true; info.active = true console.log("[updateTokenEnv] :"); console.log(data); jsonfile.writeFile(tokenFile, reqObj, function (err) { if (err) console.error(err) else console.log("Token File updated") }) } async function watchLinkedin(){ if (info.active){ const getFollowers = API.getCompanyFollowers(info) getFollowers.then( (followersNb) => { if (followersNb.firstDegreeSize) { info.followers = followersNb.firstDegreeSize info.error = 0 // cleanUp error } }).catch( async (err) => { console.log("[DEBUG-LOG][watchLinkedin ERROR]", info.error, err); info.error++ if (info.error > 50) { info.active = false // try refresh token const data = await API.getAccessToken(info.token) if (data.access_token) updateTokenEnv(data) else mail.notif(); } }); } } setInterval(watchLinkedin, info.updateTime) // --- --- --- --- --- --- EXPRESS SERVER app.disable('x-powered-by'); app.use(bodyParser.urlencoded({ extended: true})); app.get('/', (req, res) => { res.json({number: info.followers}) }); app.get('/auth', (req, res) => { res.redirect(API.getAuthorizationUrl()); }); app.get('/callback', async (req, res) => { if(!req.query.code) { res.redirect('/'); return; } try { const data = await API.getAccessToken(req.query.code); if(data.access_token) updateTokenEnv(data) res.redirect('/'); } catch(err) { res.json(err); } }); app.get('/test', async (req, res) => { try { const id = await API.getLinkedinId(info); console.log("[getLinkedinId]", id) res.json(id) } catch(err) { res.send(err); } }); app.get('/company', async (req, res) => { try { await API.getCompanyFollowers(info) .then( (followersNb) => { if (followersNb.firstDegreeSize) { info.followers = followersNb.firstDegreeSize process.env.lastFollowers = info.followers res.json(info.followers) } else res.json({"error": "firstDegreeSize not available"}) }).catch( (err) => { info.error++ if (info.error > 50) mail.notif(process.env.usermail, process.env.pswd, process.env.contact); }) } catch(err) { res.send(err); } }); app.listen(port);