152 lines
4.3 KiB
JavaScript
152 lines
4.3 KiB
JavaScript
|
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 ----**************************/
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
|