diff --git a/app.js b/app.js
index 8b87591..146bd35 100644
--- a/app.js
+++ b/app.js
@@ -1,14 +1,34 @@
import { data } from "./wwwroot/core/appData.js";
import express from "express";
+import {Logger} from "./wwwroot/core/logging/logger.js";
+import {launch} from "./bot.js";
+
+//await launch();
+console.log(data.instagramTokenManager.getOauthUrl());
const app = express();
app.use(express.json());
app.get("/oauth/", async (req, res) => {
const code = req.query.code;
- console.log("Received OAuth code:", code);
- await data.instagramTokenManager.generate(code);
-
+ let resMsg = "";
+ try{
+ const shortLived = await data.instagramTokenManager.generateShortLivedToken(code);
+ const longLived = await data.instagramTokenManager.generateLongLivedToken(shortLived);
+ console.log(longLived);
+ resMsg = "Authentication successful. You can close this tab";
+ } catch(err){
+ console.log(err);
+ await Logger.error(`Unable to generate token from code ${code}`, err);
+ resMsg = "An error occurred. Try again in few minutes.";
+ } finally {
+ res.send(`
+
+
Authentication
+ ${resMsg}
+
+ `);
+ }
});
app.get("/api/health", (req, res) => {
diff --git a/bot.js b/bot.js
index dea0825..8f25e9b 100644
--- a/bot.js
+++ b/bot.js
@@ -2,50 +2,54 @@ import {data} from "./wwwroot/core/appData.js";
import JsonManager from "./wwwroot/core/utils/jsonManager.js";
import {Logger} from "./wwwroot/core/logging/logger.js";
-try{
+const launch = async () => {
+ try{
- data.instagramTokenManager.startWatching();
+ data.instagramTokenManager.startWatching();
- //data.tiktokTokenManager.startWatching();
+ //data.tiktokTokenManager.startWatching();
- data.instagramPoller.on("newPost", async ({permalink, userId}) => {
- const modified = JsonManager.upsertPost("./posts.json", {permalink, userId})
- if(!modified) return;
+ data.instagramPoller.on("newPost", async ({permalink, userId}) => {
+ const modified = JsonManager.upsertPost("./posts.json", {permalink, userId})
+ if(!modified) return;
- const message = `Behold ! Some new awesome content has been posted ! \n\n${permalink}`;
- await data.sender.send(data.socialChannelID, message)
- });
+ const message = `Behold ! Some new awesome content has been posted ! \n\n${permalink}`;
+ await data.sender.send(data.socialChannelID, message)
+ });
- data.client.once('clientReady', async () => {
- await data.sender.send(data.updateChannelID, "I'm now online ! ✅")
- console.log(`✅ Logged in as ${data.client.user.tag}`);
- });
+ data.client.once('clientReady', async () => {
+ await data.sender.send(data.updateChannelID, "I'm now online ! ✅")
+ console.log(`✅ Logged in as ${data.client.user.tag}`);
+ });
- data.client.on('messageCreate', (message) => {
- const isGuildOwner = message.guild && message.author.id === message.guild.ownerId;
- if (message.content === '/login' && isGuildOwner) {
- message.reply(data.instagramTokenManager.getOauthUrl());
- }
- });
+ data.client.on('messageCreate', (message) => {
+ const isGuildOwner = message.guild && message.author.id === message.guild.ownerId;
+ if (message.content === '/login' && isGuildOwner) {
+ message.reply(data.instagramTokenManager.getOauthUrl());
+ }
+ });
- data.client.on('guildMemberAdd', member => {
- const avatar = member.user.avatarURL();
- });
+ data.client.on('guildMemberAdd', member => {
+ const avatar = member.user.avatarURL();
+ });
- process.on('SIGINT', async () => {
- try {
- await data.sender.send(data.updateChannelID, "I'm shutting down, now. Bye! 👋")
- } catch (error) {
- await Logger.error("Error while shutting down", error);
- } finally {
- await data.client.destroy();
- process.exit(0);
- }
- });
+ process.on('SIGINT', async () => {
+ try {
+ await data.sender.send(data.updateChannelID, "I'm shutting down, now. Bye! 👋")
+ } catch (error) {
+ await Logger.error("Error while shutting down", error);
+ } finally {
+ await data.client.destroy();
+ process.exit(0);
+ }
+ });
- await data.client.login(process.env.DISCORD_TOKEN);
- data.instagramPoller.start(600000);
+ await data.client.login(process.env.DISCORD_TOKEN);
+ data.instagramPoller.start(600000);
-} catch(err){
- await Logger.error("Unexpected error", err)
-}
\ No newline at end of file
+ } catch(err){
+ await Logger.error("Unexpected error", err)
+ }
+}
+
+export {launch}
diff --git a/wwwroot/core/instagram/instagramTokenManager.js b/wwwroot/core/instagram/instagramTokenManager.js
index d2124db..c952201 100644
--- a/wwwroot/core/instagram/instagramTokenManager.js
+++ b/wwwroot/core/instagram/instagramTokenManager.js
@@ -24,8 +24,7 @@ export class InstagramTokenManager extends BaseTokenManager {
+ "&response_type=code";
}
- async generate(code) {
-
+ async generateShortLivedToken(code){
let headers = {
"Content-Type": "application/x-www-form-urlencoded"
};
@@ -40,11 +39,14 @@ export class InstagramTokenManager extends BaseTokenManager {
let encodedBody = new URLSearchParams(body);
- let shortLiveAccessTokenData = await Requester.doPostRequest(
+ return await Requester.doPostRequest(
"https://api.instagram.com/oauth/access_token", headers, encodedBody);
+ }
- let userId = shortLiveAccessTokenData.user_id;
- let shortLiveAccessToken = shortLiveAccessTokenData.access_token;
+ async generateLongLivedToken(shortLivedToken) {
+
+ let userId = shortLivedToken.user_id;
+ let shortLiveAccessToken = shortLivedToken.access_token;
let longLiveAccessTokenData = await Requester.doGetRequest(
"https://graph.instagram.com/access_token?grant_type=ig_exchange_token" +
diff --git a/wwwroot/core/logging/logger.js b/wwwroot/core/logging/logger.js
index 27f4bf6..bbabc5b 100644
--- a/wwwroot/core/logging/logger.js
+++ b/wwwroot/core/logging/logger.js
@@ -29,7 +29,7 @@ export class Logger{
await mkdir(logsDir, { recursive: true });
- await appendFile(fullPath, `${time} - ${message} -> ${JSON.stringify(error)} \n`);
+ await appendFile(fullPath, `${time} - ${message} -> ${error.message} \n`);
console.error(`An error occured. The incident has been logged in ${fullPath}`)
} catch (err) {
console.error("Error writing log:", err);
diff --git a/wwwroot/core/utils/requester.js b/wwwroot/core/utils/requester.js
index d4df9b8..800de3c 100644
--- a/wwwroot/core/utils/requester.js
+++ b/wwwroot/core/utils/requester.js
@@ -24,12 +24,18 @@ export class Requester {
headers: headers,
body: body
})
- .then(response => response.json())
+ .then(async response => {
+ if (!response.ok) {
+ throw new Error(`HTTP ${response.status} ${response.statusText} : ${await response.text()}`);
+ }
+ return response.json()
+ })
.then(data => {
return data;
})
.catch(error => {
Logger.error(`Unable to fetch`, error);
+ throw error;
});
}
}
\ No newline at end of file
diff --git a/wwwroot/oauth/index.html b/wwwroot/oauth/index.html
deleted file mode 100644
index 96b7704..0000000
--- a/wwwroot/oauth/index.html
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
-
- The Jailor auth
-
-
-
-
-
-
-
\ No newline at end of file