1
0
This repository has been archived on 2022-11-26. You can view files and clone it, but cannot push or open issues or pull requests.

152 lines
4.3 KiB
JavaScript
Raw Normal View History

const path = require('path');
//const ping = require('heroku-self-ping').default(`${process.env.HEROKU_URL}/ping`);
const express = require('express');
const packageInfo = require('./package.json');
var app = express();
app.use(express.static(path.join(__dirname, 'public')));
app.set('view engine', 'ejs');
var server = app.listen(process.env.PORT, function () {
console.log(`Обработка страниц в браузере запущена. Порт ${process.env.PORT}`);
setTimeout(ping, 1000);
});
app.get('/', function (req, res) {
res.json({ version: packageInfo.version });
});
/******************--- saveNewUsers ----**************************/
const { Client } = require('pg');
const client = new Client({
connectionString: process.env.DATABASE_URL,
ssl: {
rejectUnauthorized: false
}
})
client.connect();
var queue = new Map();
saveNewUsers();
function saveNewUsers(){
(async () => {
var user = queue.entries().next().value;
while (user){
var add_user = `INSERT INTO USERS(ID, REFRESH_TOKEN) VALUES(${user[0]}, '${user[1]}') ON CONFLICT (ID) DO UPDATE SET REFRESH_TOKEN = EXCLUDED.REFRESH_TOKEN;`;
await client.query(add_user);
queue.delete(user[0]);
user = queue.entries().next().value;
}
setTimeout(saveNewUsers, 1000);
})()
.catch(e => {
console.error(e);
});
}
/******************--- saveNewUsers ----**************************/
/******************--- callback ----**************************/
var SpotifyWebApi = require('spotify-web-api-node');
var spotifyClientId = process.env.SPOTIFY_CLIENT_ID;
var spotifyClientSecret = process.env.SPOTIFY_CLIENT_SECRET;
var spotifyRedirectUri = process.env.SPOTIFY_REDIRECT_URI;
app.get('/callback', (req, res) => {
const error = req.query.error;
const code = req.query.code;
const state = req.query.state;
if (error) {
console.error('Ошибка на странице авторизации:', error);
res.send(`Ошибка авторизации`);
return;
}
var temp_spotifyApi = new SpotifyWebApi({
clientId: spotifyClientId,
clientSecret: spotifyClientSecret,
redirectUri: spotifyRedirectUri
});
var id = parseInt(state);
temp_spotifyApi
.authorizationCodeGrant(code)
.then(data => {
const refresh_token = data.body['refresh_token'];
queue.set(id,refresh_token);
console.log(`Прошла авторизация пользователя (id = ${id}, refreshToken = '${refresh_token}')`);
res.redirect('/auth_completed');
})
.catch(error => {
console.error('Error getting Tokens:', error);
res.send(`Ошибка авторизации: ${error}`);
})
});
app.get('/callback_admin', (req, res) => {
const error = req.query.error;
const code = req.query.code;
const state = req.query.state;
if (error) {
console.error('Ошибка на странице авторизации:', error);
res.send(`Ошибка авторизации`);
return;
}
var options = JSON.parse(decodeURI(state));
var temp_spotifyApi = new SpotifyWebApi(options);
temp_spotifyApi
.authorizationCodeGrant(code)
.then(data => {
const refresh_token = data.body['refresh_token'];
console.log(`Прошла авторизация пользователя (refreshToken = '${refresh_token}')`);
res.send(refresh_token);
})
.catch(error => {
console.error('Error getting Tokens:', error);
res.send(`Ошибка авторизации: ${error}`);
})
});
/******************--- callback ----**************************/
/******************--- auth_completed ----**************************/
app.get('/auth_completed', (req, res) => {
res.render('pages/auth_completed');
});
/******************--- auth_completed ----**************************/
/******************--- Pinging ----**************************/
app.get('/ping', function(req, res, next) {
res.status(200).send("pong");
});
const https = require('https')
const options = {
hostname: 'myspotifytransfer.herokuapp.com',
path: '/ping',
method: 'GET'
}
function ping(){
const req = https.request(options, res => {
console.log(`Server ping - statusCode: ${res.statusCode}`)
}).end()
setTimeout(ping, 1200000);
}
/******************--- Pinging ----**************************/