Integrate full instagram oauth
This commit is contained in:
26
app.js
26
app.js
@@ -1,14 +1,34 @@
|
|||||||
import { data } from "./wwwroot/core/appData.js";
|
import { data } from "./wwwroot/core/appData.js";
|
||||||
import express from "express";
|
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();
|
const app = express();
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
|
|
||||||
app.get("/oauth/", async (req, res) => {
|
app.get("/oauth/", async (req, res) => {
|
||||||
const code = req.query.code;
|
const code = req.query.code;
|
||||||
console.log("Received OAuth code:", code);
|
let resMsg = "";
|
||||||
await data.instagramTokenManager.generate(code);
|
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) => {
|
app.get("/api/health", (req, res) => {
|
||||||
|
|||||||
4
bot.js
4
bot.js
@@ -2,6 +2,7 @@ import {data} from "./wwwroot/core/appData.js";
|
|||||||
import JsonManager from "./wwwroot/core/utils/jsonManager.js";
|
import JsonManager from "./wwwroot/core/utils/jsonManager.js";
|
||||||
import {Logger} from "./wwwroot/core/logging/logger.js";
|
import {Logger} from "./wwwroot/core/logging/logger.js";
|
||||||
|
|
||||||
|
const launch = async () => {
|
||||||
try{
|
try{
|
||||||
|
|
||||||
data.instagramTokenManager.startWatching();
|
data.instagramTokenManager.startWatching();
|
||||||
@@ -49,3 +50,6 @@ try{
|
|||||||
} catch(err){
|
} catch(err){
|
||||||
await Logger.error("Unexpected error", err)
|
await Logger.error("Unexpected error", err)
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export {launch}
|
||||||
|
|||||||
@@ -24,8 +24,7 @@ export class InstagramTokenManager extends BaseTokenManager {
|
|||||||
+ "&response_type=code";
|
+ "&response_type=code";
|
||||||
}
|
}
|
||||||
|
|
||||||
async generate(code) {
|
async generateShortLivedToken(code){
|
||||||
|
|
||||||
let headers = {
|
let headers = {
|
||||||
"Content-Type": "application/x-www-form-urlencoded"
|
"Content-Type": "application/x-www-form-urlencoded"
|
||||||
};
|
};
|
||||||
@@ -40,11 +39,14 @@ export class InstagramTokenManager extends BaseTokenManager {
|
|||||||
|
|
||||||
let encodedBody = new URLSearchParams(body);
|
let encodedBody = new URLSearchParams(body);
|
||||||
|
|
||||||
let shortLiveAccessTokenData = await Requester.doPostRequest(
|
return await Requester.doPostRequest(
|
||||||
"https://api.instagram.com/oauth/access_token", headers, encodedBody);
|
"https://api.instagram.com/oauth/access_token", headers, encodedBody);
|
||||||
|
}
|
||||||
|
|
||||||
let userId = shortLiveAccessTokenData.user_id;
|
async generateLongLivedToken(shortLivedToken) {
|
||||||
let shortLiveAccessToken = shortLiveAccessTokenData.access_token;
|
|
||||||
|
let userId = shortLivedToken.user_id;
|
||||||
|
let shortLiveAccessToken = shortLivedToken.access_token;
|
||||||
|
|
||||||
let longLiveAccessTokenData = await Requester.doGetRequest(
|
let longLiveAccessTokenData = await Requester.doGetRequest(
|
||||||
"https://graph.instagram.com/access_token?grant_type=ig_exchange_token" +
|
"https://graph.instagram.com/access_token?grant_type=ig_exchange_token" +
|
||||||
|
|||||||
@@ -29,7 +29,7 @@ export class Logger{
|
|||||||
|
|
||||||
await mkdir(logsDir, { recursive: true });
|
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}`)
|
console.error(`An error occured. The incident has been logged in ${fullPath}`)
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
console.error("Error writing log:", err);
|
console.error("Error writing log:", err);
|
||||||
|
|||||||
@@ -24,12 +24,18 @@ export class Requester {
|
|||||||
headers: headers,
|
headers: headers,
|
||||||
body: body
|
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 => {
|
.then(data => {
|
||||||
return data;
|
return data;
|
||||||
})
|
})
|
||||||
.catch(error => {
|
.catch(error => {
|
||||||
Logger.error(`Unable to fetch`, error);
|
Logger.error(`Unable to fetch`, error);
|
||||||
|
throw error;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -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>
|
|
||||||
Reference in New Issue
Block a user