Integrate full instagram oauth

This commit is contained in:
2025-11-09 11:59:36 +01:00
parent d6ba7c595a
commit 8ca2bc9909
6 changed files with 79 additions and 73 deletions

26
app.js
View File

@@ -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(`
<html lang="en">
<head><title>Authentication</title></head>
<body>${resMsg}</body>
</html>
`);
}
});
app.get("/api/health", (req, res) => {

8
bot.js
View File

@@ -2,7 +2,8 @@ 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();
@@ -46,6 +47,9 @@ try{
await data.client.login(process.env.DISCORD_TOKEN);
data.instagramPoller.start(600000);
} catch(err){
} catch(err){
await Logger.error("Unexpected error", err)
}
}
export {launch}

View File

@@ -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" +

View File

@@ -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);

View File

@@ -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;
});
}
}

View File

@@ -1,26 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>The Jailor auth</title>
</head>
<body>
<div id="result-text"></div>
</body>
</html>
<script type="module">
import {data} from "../core/appData.js";
try{
const urlParams = new URLSearchParams(window.location.search);
const code = urlParams.get("code");
await data.instagramTokenManager.generate(code)
document.querySelector("#code").innerText = "Authentication successful. You can close this tab";
} catch(err){
document.querySelector("#code").innerText = "Authentication failed.";
}
</script>