get accessToken and execute callback
parent
b4bca549e1
commit
771974202e
@ -0,0 +1 @@
|
||||
./accessToken.json*
|
@ -0,0 +1,17 @@
|
||||
import fs from "fs";
|
||||
|
||||
export function storeData(data, path) {
|
||||
try {
|
||||
fs.writeFileSync(path, JSON.stringify(data));
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
}
|
||||
}
|
||||
export function loadData(path) {
|
||||
try {
|
||||
return JSON.parse(fs.readFileSync(path, 'utf8'))
|
||||
} catch (err) {
|
||||
console.error(err)
|
||||
return false
|
||||
}
|
||||
}
|
@ -0,0 +1,9 @@
|
||||
import {MastodonHandler} from "./mastodonHandler.js";
|
||||
import {MastodonTokenHandler} from "./mastodonTokenHandler.js"
|
||||
|
||||
const baseUrl = "https://social.cybre.town";
|
||||
|
||||
let tokenHandler = new MastodonTokenHandler(baseUrl);
|
||||
tokenHandler.getAccessToken((accessToken) => {
|
||||
let client = new MastodonHandler(baseUrl, accessToken);
|
||||
});
|
@ -0,0 +1,10 @@
|
||||
import Mastodon from "mastodon-api";
|
||||
|
||||
export class MastodonHandler{
|
||||
constructor(baseUrl, token) {
|
||||
this.client = new Mastodon({
|
||||
api_url: `${baseUrl}/api/v1/`,
|
||||
access_token: token,
|
||||
})
|
||||
}
|
||||
}
|
@ -0,0 +1,53 @@
|
||||
import Mastodon from 'mastodon-api';
|
||||
import readline from 'readline';
|
||||
import {storeData, loadData} from './JSONdataStore.js';
|
||||
|
||||
const rl = readline.createInterface({
|
||||
input: process.stdin,
|
||||
output: process.stdout
|
||||
})
|
||||
|
||||
export class MastodonTokenHandler {
|
||||
constructor(baseUrl) {
|
||||
this.baseUrl = baseUrl;
|
||||
this.clientId;
|
||||
this.clientSecret;
|
||||
this.accessToken = loadData("./accessToken.json");
|
||||
}
|
||||
getAccessToken(_callback){
|
||||
if (!this.accessToken) this.newAccessToken(_callback);
|
||||
else _callback(this.accessToken);
|
||||
return this.accessToken;
|
||||
}
|
||||
newAccessToken(_callback){
|
||||
Mastodon.createOAuthApp(`${this.baseUrl}/api/v1/apps`)
|
||||
.catch((err) => console.error(err))
|
||||
.then((res) => {
|
||||
console.log('Please save \'id\', \'client_id\' and \'client_secret\' in your program and use it from now on!')
|
||||
console.log(res)
|
||||
|
||||
this.clientId = res.client_id
|
||||
this.clientSecret = res.client_secret
|
||||
|
||||
return Mastodon.getAuthorizationUrl(this.clientId, this.clientSecret, this.baseUrl)
|
||||
})
|
||||
.then((url) => {
|
||||
console.log('This is the authorization URL. Open it in your browser and authorize with your account!')
|
||||
console.log(url)
|
||||
return new Promise((resolve) => {
|
||||
rl.question('Please enter the code from the website: ', (code) => {
|
||||
resolve(code)
|
||||
rl.close()
|
||||
})
|
||||
})
|
||||
})
|
||||
.then((code) => Mastodon.getAccessToken(this.clientId, this.clientSecret, code, this.baseUrl))
|
||||
.catch((err) => console.error(err))
|
||||
.then((token) => {
|
||||
this.accessToken = token;
|
||||
console.log(`This is the access token. Save it!\n${this.accessToken}`)
|
||||
storeData(this.accessToken, "./accessToken.json");
|
||||
_callback(this.accessToken);
|
||||
})
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue