This commit is contained in:
Win 2024-07-10 11:08:23 +07:00
parent 56b81eef0e
commit d2a7b41a81
3 changed files with 65 additions and 58 deletions

41
src/api/auth.cjs Normal file
View File

@ -0,0 +1,41 @@
const express = require('express');
const axios = require('axios');
let auth_status = 0;
async function check_auth_status() {
return await new Promise(resolve => {
const check = setInterval(() => {
console.log("Checking auth status...");
if(auth_status == 1) {
console.log("Bot has been authenticated");
resolve(true);
clearInterval(check);
return true;
}
}, 2000);
});
};
function verify_auth_status() {
auth_status = 1;
return true;
}
async function get_access_token(host, session_id) {
axios.post(`${host}/api/miauth/${session_id}/check`)
.then((data) => {
const response = data.json();
if(response.ok == true) {
console.log(response.token);
return response.token;
} else {
return false;
}
});
};
module.exports.check_auth_status = check_auth_status;
module.exports.verify_auth_status = verify_auth_status;
module.exports.get_access_token = get_access_token;

16
src/api/post.cjs Normal file
View File

@ -0,0 +1,16 @@
const axios = require('axios');
async function create_image(host, access_token, file_path) {
axios.post(`${host}/api/drive/files/create`, {
file: fs.createReadStream(file_path)
}, {
headers: {
'Content-Type': 'multipart/form-data',
'Authorization': `Bearer ${access_token}`
}
}).then((data) => {
return data;
});
};
module.exports.create_image = create_image;

View File

@ -1,12 +1,14 @@
import { v4 as uuidv4 } from 'uuid'; import { v4 as uuidv4 } from 'uuid';
import fs, { createReadStream } from 'node:fs'; import fs, { createReadStream } from 'node:fs';
import path from 'node:path'; import path from 'node:path';
import fetch from 'node-fetch';
import express from 'express'; import express from 'express';
import axios from 'axios'; import axios from 'axios';
import { fileFromPath } from 'formdata-node/file-from-path'; import { fileFromPath } from 'formdata-node/file-from-path';
import * as Misskey from 'misskey-js'; import * as Misskey from 'misskey-js';
import * as Post from './api/post.cjs';
import * as Auth from './api/auth.cjs';
const __dirname = path.resolve(); const __dirname = path.resolve();
const config = JSON.parse(fs.readFileSync(path.resolve("config", "config.json"))); const config = JSON.parse(fs.readFileSync(path.resolve("config", "config.json")));
const token_file = JSON.parse(fs.readFileSync(path.resolve("config", "token.json"))); const token_file = JSON.parse(fs.readFileSync(path.resolve("config", "token.json")));
@ -20,13 +22,8 @@ let app_name = config.app.name;
let app_callback = config.app.callback; let app_callback = config.app.callback;
let app_permission = config.app.permission; let app_permission = config.app.permission;
// https://misskey.io/miauth/c1f6d42b-468b-4fd2-8274-e58abdedef6f?name=MyApp&callback=https%3A%2F%2Fmyapp.example.com%2Fcallback&permission=write:notes,write:following,read:drive
let session_id = uuidv4(); let session_id = uuidv4();
let auth_url = `${host}/miauth/${session_id}?name=${app_name}&callback=${app_callback}&permission=${app_permission}`; let auth_url = `${host}/miauth/${session_id}?name=${app_name}&callback=${app_callback}&permission=${app_permission}`;
let auth_status = 0;
console.log(auth_url);
app.get('/callback', function(req, res) { app.get('/callback', function(req, res) {
res.send({ res.send({
@ -34,63 +31,16 @@ app.get('/callback', function(req, res) {
"success": true, "success": true,
}) })
auth_status = 1; Auth.verify_auth_status();
}); });
async function check_auth_status() {
return await new Promise(resolve => {
const check = setInterval(() => {
console.log("Checking auth status...");
if(auth_status == 1) {
console.log("Bot has been authenticated");
resolve(true);
clearInterval(check);
return true;
}
}, 2000);
});
};
async function get_access_token(host, session_id) {
const response = await fetch(`${host}/api/miauth/${session_id}/check`, {
method: 'POST'
});
const data = await response.json();
console.log(data);
const res_status = data.ok;
if(data.ok == true) {
return data.token;
} else {
return false; // error occurred
}
};
async function create_image(access_token, file_path) {
axios.post(`${host}/api/drive/files/create`, {
file: fs.createReadStream(file_path)
}, {
headers: {
'Content-Type': 'multipart/form-data',
'Authorization': `Bearer ${access_token}`
}
}).then((data) => {
return data;
});
// return info:
// https://misskey.winscloud.net/api-doc#tag/drive/operation/drive___files___create
};
(async () => { (async () => {
let access_token = false; let access_token = false;
if(!token_file.token) { // if existing token not exist if(!token_file.token) { // if existing token not exist
await check_auth_status() console.log(auth_url);
access_token = await get_access_token(host, session_id); await Auth.check_auth_status();
access_token = await Auth.get_access_token(host, session_id);
let json_data = { let json_data = {
"token": access_token "token": access_token
@ -110,7 +60,7 @@ async function create_image(access_token, file_path) {
}); });
let static_image_path = path.join(__dirname, '/data/current_radar.jpg'); let static_image_path = path.join(__dirname, '/data/current_radar.jpg');
create_image(access_token, static_image_path); Post.create_image(host, access_token, static_image_path);
})(); })();
app.listen(port); app.listen(port);