The code sets up an Express app, importing necessary modules and variables, and defining several routes to handle requests, including token endpoint, root, and directory requests. The app also defines a discordLogin function to handle Discord login requests and generates HTML code using the directoryToHtml function, but does not start the server instance, which is stored in the server variable.
npm run import -- "discord music player server"const {handleDirectory, BASE_DIRECTORY} = importer.import("node express directory handler")
const {DEFAULT_APPLICATION} = importer.import("discord configuration")
const getToken = importer.import("discord express token endpoint")
const path = require('path')
//const {registerInstance, authenticateRoute} = importer.import("discord authenticate instances")
const directoryToHtml = importer.import("directory to html")
const {authenticateRoute} = importer.import("discord authenticate instances")
const INSTANCES = {}
const express = require('express')
const cors = require('cors')
const cookieParser = require('cookie-parser');
const app = express()
const BASE_URI = `https://${DEFAULT_APPLICATION}.discordsays.com/.proxy/`
process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
app.use(cors({
credentials: true,
origin: '*'
}))
app.use(express.json())
app.use(cookieParser())
app.post('/api/token', getToken)
//app.post('/register', registerInstance)
app.get('/', authenticateRoute, discordLogin.bind(null, BASE_URI))
app.get('*', authenticateRoute, handleDirectory)
//app.use('/Music', express.static(path.join(BASE_DIRECTORY, 'Music')))
app.get('/amplitude.js', (req, res) => {
return res.sendFile(path.join(__dirname, '../amplitude.js'))
})
app.get('/amplitude.css', (req, res) => {
return res.sendFile(path.join(__dirname, '../amplitude.css'))
})
// TODO: share the rest of the files but only with logged in user
// return express.static(path.join(__dirname, 'public'));
let server
async function discordLogin(baseURI, req, res, next) {
let basePath = path.resolve(BASE_DIRECTORY)
let combined = path.join(basePath, decodeURIComponent(req.path))
console.log(combined)
if(!fs.existsSync(combined)) {
return next()
}
if(!fs.statSync(combined).isDirectory()) {
return next()
}
// this is exclusively a discord function so it has to be appended somewhere before using the generic directory lister
let htmlCode = await directoryToHtml(combined, req.path.split('/').length > 2, req.authenticated)
htmlCode = htmlCode.replace('<head>', `<head>
<base href="/.proxy/" />
<script type="text/javascript">
${importer.interpret('discord client auth code').code
.replaceAll('{CLIENT_ID}', DEFAULT_APPLICATION)
.replaceAll('{BASE_URI}', baseURI)}
</script>`)
return res.send(htmlCode)
}
async function discordExpress(activity) {
if(!express) {
return false
}
//process.env['NODE_TLS_REJECT_UNAUTHORIZED'] = 0;
if(activity.participants.length == 0 && server) {
server.close()
server = null
}
if(activity.length > 1 || server) {
return
}
return (server = await app.listen(process.env.EXPRESS_PORT || 3001, () => {
console.log('Listening on: ', process.env.EXPRESS_PORT || 3001)
}))
}
function closeExpress(activity) {
if(activity) {
return
}
if(server) {
server.close()
server = null
}
}
module.exports = {
discordExpress,
closeExpress,
INSTANCES
}
// Import required modules and functions
const { importer } = require('./importer');
const { express, path, cors, cookieParser } = require('express');
const { v4: uuidv4 } = require('uuid');
const fs = require('fs');
const directoryToHtml = importer.import('directory to html');
const authenticateRoute = importer.import('discord authenticate instances');
const getToken = importer.import('discord express token endpoint');
// Define constants
const BASE_DIRECTORY = process.env.BASE_DIRECTORY;
const DEFAULT_APPLICATION = importer.import('discord configuration');
const BASE_URI = `https://${DEFAULT_APPLICATION}.discordsays.com/.proxy/`;
const EXPRESS_PORT = process.env.EXPRESS_PORT || 3001;
// Create the Express application
const app = express();
// Enable CORS, JSON parsing, and cookie parsing
app.use(cors({ credentials: true, origin: '*' }));
app.use(express.json());
app.use(cookieParser());
// Set up routes
app.post('/api/token', getToken);
// app.post('/register', registerInstance);
app.get('/', authenticateRoute, discordLogin);
app.get('*', authenticateRoute, handleDirectory);
// Serve static files
// app.use('/Music', express.static(path.join(BASE_DIRECTORY, 'Music')));
app.get('/amplitude.js', (req, res) => {
return res.sendFile(path.join(__dirname, '../amplitude.js'));
});
app.get('/amplitude.css', (req, res) => {
return res.sendFile(path.join(__dirname, '../amplitude.css'));
});
// Create a unique instance for each request
const INSTANCES = {};
// Define the discordLogin function
async function discordLogin(baseURI, req, res, next) {
try {
const basePath = path.resolve(BASE_DIRECTORY);
const combined = path.join(basePath, decodeURIComponent(req.path));
const isDirectory = fs.existsSync(combined) && fs.statSync(combined).isDirectory();
if (!isDirectory) {
return next();
}
const htmlCode = await directoryToHtml(combined, req.path.split('/').length > 2, req.authenticated);
const clientAuthCode = importer.interpret('discord client auth code')
.code
.replaceAll('{CLIENT_ID}', DEFAULT_APPLICATION)
.replaceAll('{BASE_URI}', baseURI);
htmlCode = htmlCode.replace('', `
`);
return res.send(htmlCode);
} catch (error) {
console.error(error);
return next(error);
}
}
// Define the handleDirectory function
async function handleDirectory(req, res, next) {
try {
const basePath = path.resolve(BASE_DIRECTORY);
const combined = path.join(basePath, decodeURIComponent(req.path));
const isDirectory = fs.existsSync(combined) && fs.statSync(combined).isDirectory();
if (!isDirectory) {
return next();
}
const htmlCode = await directoryToHtml(combined, req.path.split('/').length > 2, req.authenticated);
return res.send(htmlCode);
} catch (error) {
console.error(error);
return next(error);
}
}
// Define the discordExpress function
async function discordExpress(activity) {
if (!express) {
return false;
}
if (activity.participants.length === 0 && server) {
server.close();
server = null;
}
if (activity.length > 1 || server) {
return;
}
const server = await app.listen(EXPRESS_PORT, () => {
console.log(`Listening on: ${EXPRESS_PORT}`);
});
return { server };
}
// Define the closeExpress function
function closeExpress(activity) {
if (!activity) {
return;
}
if (server) {
server.close();
server = null;
}
}
module.exports = {
discordExpress,
closeExpress,
INSTANCES,
};Code Breakdown
The code starts by importing various modules and variables using the importer module. The imported modules and variables include:
handleDirectory and BASE_DIRECTORY from node express directory handlerDEFAULT_APPLICATION from discord configurationgetToken from discord express token endpointdirectoryToHtml from directory to htmlauthenticateRoute from discord authenticate instancesThe code then sets up an Express app by:
NODE_TLS_REJECT_UNAUTHORIZED environment variable to 0The code defines several routes for the Express app:
/api/token: Handles token endpoint requests using the getToken function/: Handles root requests and redirects to the Discord login page*: Handles all other requests using the handleDirectory function/amplitude.js and /amplitude.css: Serves the Amplitude JavaScript and CSS filesThe code defines a function called discordLogin which is used to handle Discord login requests. The function:
directoryToHtml function and returns it as a responseThe code creates an instance of the Express server but does not start it. The server instance is stored in the server variable.
The code has several TODO comments indicating areas that need to be implemented, such as sharing files with logged-in users.