Skip to content

Commit

Permalink
Code refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
strayfade committed Feb 15, 2024
1 parent 6b1ffc6 commit b8f7706
Show file tree
Hide file tree
Showing 120 changed files with 11,559 additions and 6,713 deletions.
39 changes: 19 additions & 20 deletions .github/workflows/node.js.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,27 +4,26 @@
name: Node.js CI

on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
push:
branches: ['main']
pull_request:
branches: ['main']

jobs:
build:
build:
runs-on: ubuntu-latest

runs-on: ubuntu-latest
strategy:
matrix:
node-version: [14.x, 16.x, 18.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/

strategy:
matrix:
node-version: [14.x, 16.x, 18.x]
# See supported Node.js release schedule at https://nodejs.org/en/about/releases/

steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- run: npm ci
- run: node Build --skipobfuscation
steps:
- uses: actions/checkout@v3
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v3
with:
node-version: ${{ matrix.node-version }}
cache: 'npm'
- run: npm ci
- run: node Build --skipobfuscation
8 changes: 8 additions & 0 deletions .prettierrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"tabWidth": 4,
"singleQuote": true,
"semi": false,
"useTabs": false,
"jsxSingleQuote": true,
"printWidth": 120
}
143 changes: 81 additions & 62 deletions App.js
Original file line number Diff line number Diff line change
Expand Up @@ -7,23 +7,26 @@ const express = require('express')
// Imported Functions
const { Log } = require('./Log')
const { SendError } = require('./Error')
const { GeneratePageCached } = require("./generators/Assemble")
const { GeneratePageCached } = require('./generators/Assemble')
const { GetAvailableLanguages, GetLanaguageShort, GetLanguagePath } = require('./Localization')

// Create App
const App = express()

const Languages = GetAvailableLanguages()
const AvailablePages = {
Home: Symbol("Home"),
Dynamic: Symbol("Article"),
R: Symbol("R"),
NonstandardPages: ["R"]
Home: Symbol('Home'),
Dynamic: Symbol('Article'),
R: Symbol('R'),
NonstandardPages: ['R'],
}

const WrapAsync = (Function) => {
return (req, res, next) => { const FunctionOut = Function(req, res, next); return Promise.resolve(FunctionOut).catch(next); }
};
return (req, res, next) => {
const FunctionOut = Function(req, res, next)
return Promise.resolve(FunctionOut).catch(next)
}
}

// Basic Security
require('./security/Security').Setup(App)
Expand All @@ -32,81 +35,97 @@ require('./security/Security').Setup(App)
App.use('/cdn', express.static('cdn'))
App.use('/assets', express.static('assets'))
App.use('/fonts', express.static('fonts'))
App.use('/build', express.static('build'))

// Middleware
const Analytics = require("./middleware/Analytics")
const Analytics = require('./middleware/Analytics')
App.use(Analytics.Middleware)
const RequestBlocking = require("./middleware/RequestBlocking")
const RequestBlocking = require('./middleware/RequestBlocking')
App.use(RequestBlocking.Middleware)

// Sources
App.get('/Production.css', WrapAsync(async function(req, res) {
res.sendFile(__dirname + "/Production/Production.css")
}))
App.get('/Production.js', WrapAsync(async function(req, res) {
res.sendFile(__dirname + "/Production/Production.js")
}))
App.get('/favicon.ico', WrapAsync(async function(req, res) {
res.sendFile(path.resolve(__dirname, 'assets/Icon.ico'))
}))
App.get('/robots.txt', WrapAsync(async function(req, res) {
res.sendFile(path.resolve(__dirname, 'assets/robots.txt'))
}))
App.get(
'/favicon.ico',
WrapAsync(async (req, res) => {
res.sendFile(path.resolve(__dirname, 'assets/Icon.ico'))
}),
)
App.get(
'/robots.txt',
WrapAsync(async (req, res) => {
res.sendFile(path.resolve(__dirname, 'assets/robots.txt'))
}),
)

// Default Routing
App.get('/', WrapAsync(async function (req, res) {
const Article = await fs.readFile('./posts/_None.md', {encoding: "utf-8"})
let Lang = require(GetLanguagePath(req))
let Page = await GeneratePageCached(req, Article, Lang, AvailablePages, AvailablePages.Home, "")
res.send(Page)
}))
App.get('/:path', WrapAsync(async function (req, res) {
res.redirect("/" + GetLanaguageShort(req) + "/" + req.params.path)
}))
App.get('/:localization/:path', WrapAsync(async function (req, res) {
App.get(
'/',
WrapAsync(async (req, res) => {
const Article = await fs.readFile('./posts/_None.md', { encoding: 'utf-8' })
let Lang = require(GetLanguagePath(req))
let Page = await GeneratePageCached(req, Article, Lang, AvailablePages, AvailablePages.Home, '')
res.send(Page)
}),
)
App.get(
'/:path',
WrapAsync(async (req, res) => {
res.redirect('/' + GetLanaguageShort(req) + '/' + req.params.path)
}),
)
App.get(
'/:localization/:path',
WrapAsync(async (req, res) => {
let Lang = {}
if (Languages.includes(req.params.localization))
Lang = require('./localization/' + req.params.localization + '.json')
else Lang = require(GetLanguagePath(req))

var Lang = {}
if (Languages.includes(req.params.localization))
Lang = require('./localization/' + req.params.localization + '.json')
else
Lang = require(GetLanguagePath(req))

let IsNotArticle = AvailablePages.NonstandardPages.includes(req.params.path.toUpperCase());
if (IsNotArticle) {
switch (req.params.path.toUpperCase()) {
case "R":
var Article = await fs.readFile('./posts/_None.md', {encoding: "utf-8"})
var Page = await GeneratePageCached(req, Article, Lang, AvailablePages, AvailablePages.R, "");
res.send(Page)
break;
}
} else {
let ArticlePath = './posts/' + req.params.path + '.md'
if (fsdir.existsSync(ArticlePath) && req.params.path != "_None") {
let Article = await fs.readFile('./posts/' + req.params.path + '.md', {encoding: "utf-8"})
let Page = await GeneratePageCached(req, Article, Lang, AvailablePages, AvailablePages.Dynamic, "", req.params.path + '.md')
res.send(Page)
let IsNotArticle = AvailablePages.NonstandardPages.includes(req.params.path.toUpperCase())
if (IsNotArticle) {
switch (req.params.path.toUpperCase()) {
case 'R':
let Article = await fs.readFile('./posts/_None.md', { encoding: 'utf-8' })
let Page = await GeneratePageCached(req, Article, Lang, AvailablePages, AvailablePages.R, '')
res.send(Page)
break
}
} else {
Log("Requested page not found (404): " + req.path)
await SendError(404, req, res, AvailablePages, AvailablePages.Dynamic, "", Languages);
let ArticlePath = './posts/' + req.params.path + '.md'
if (fsdir.existsSync(ArticlePath) && req.params.path != '_None') {
let Article = await fs.readFile('./posts/' + req.params.path + '.md', { encoding: 'utf-8' })
let Page = await GeneratePageCached(
req,
Article,
Lang,
AvailablePages,
AvailablePages.Dynamic,
'',
req.params.path + '.md',
)
res.send(Page)
} else {
Log('Requested page not found (404): ' + req.path)
await SendError(404, req, res, AvailablePages, AvailablePages.Dynamic, '', Languages)
}
}
}
}))
}),
)

// Error Handling Middleware
async function ErrorLogger(error, req, res, next) {
Log("ERROR: " + error)
const ErrorLogger = async (error, req, res, next) => {
Log('ERROR: ' + error)
next(error)
}
async function ErrorHandler(error, req, res, next) {
await SendError(500, req, res, AvailablePages, AvailablePages.Dynamic, error, Languages);
const ErrorHandler = async (error, req, res, next) => {
await SendError(500, req, res, AvailablePages, AvailablePages.Dynamic, error, Languages)
}
App.use(ErrorLogger)
App.use(ErrorHandler)

// Start Server
var Port = process.env.PORT || parseInt(process.argv[2]);
let Port = process.env.PORT || parseInt(process.argv[2])
App.listen(Port, () => {
Log('Listening on port ' + Port)
Log('Link: http://localhost:' + Port)
})
})
90 changes: 46 additions & 44 deletions Build.js
Original file line number Diff line number Diff line change
@@ -1,74 +1,76 @@
const fs = require('fs')
const Log = require('./Log').Log
const Obfuscator = require('js-obfuscator');
var ObfuscatorOptions = {
const Obfuscator = require('js-obfuscator')
const ObfuscatorOptions = {
keepLinefeeds: false,
keepIndentations: false,
encodeStrings: true,
encodeNumbers: true,
moveStrings: true,
replaceNames: true,
variableExclusions: ['^_get_', '^_set_', '^_mtd_']
};
const Obfuscate = !process.argv[2] || !process.argv[2].includes("--skipobfuscation");
variableExclusions: ['^_get_', '^_set_', '^_mtd_'],
}
const Obfuscate = !process.argv[2] || !process.argv[2].includes('--skipobfuscation')

async function PackStylesheets() {
Log("[BUILD] - Merging CSS files...")
let Stylesheet = "";
let filenames = fs.readdirSync(__dirname + "/css");
for (var x = 0; x < filenames.length; x++) {
filenames[x] = __dirname + "/css/" + filenames[x];
const PackStylesheets = async () => {
Log('[BUILD] - Merging CSS files...')
let Stylesheet = ''
let filenames = fs.readdirSync(__dirname + '/css')
for (let x = 0; x < filenames.length; x++) {
filenames[x] = __dirname + '/css/' + filenames[x]
}
for (var x = 0; x < filenames.length; x++) {
if (filenames[x].endsWith(".css")) {
Stylesheet += fs.readFileSync(filenames[x], { encoding: 'utf8', flag: 'r' }) + "\n\n";
for (let x = 0; x < filenames.length; x++) {
if (filenames[x].endsWith('.css')) {
Stylesheet += fs.readFileSync(filenames[x], { encoding: 'utf8', flag: 'r' }) + '\n\n'
}
}

for (var x = 0; x < Stylesheet.length; x++) {
Stylesheet = Stylesheet.replace("\n", "");
Stylesheet = Stylesheet.replace(" ", "");
for (let x = 0; x < Stylesheet.length; x++) {
Stylesheet = Stylesheet.replace('\n', '')
Stylesheet = Stylesheet.replace(' ', '')
}

fs.mkdir("./Production", (err) => { });
let p = __dirname + "/Production/Production.css";
fs.mkdir('./build', (err) => {})
let p = __dirname + '/build/production.css'
fs.writeFileSync(p, Stylesheet)

Log("[BUILD] - Finished file: " + p)
Log('[BUILD] - Finished file: ' + p)
}

async function PackScripts() {
Log("[BUILD] - Merging Javascript files...")
let Script = "";
let filenames = fs.readdirSync(__dirname + "/scripts");
for (var x = 0; x < filenames.length; x++) {
filenames[x] = __dirname + "/scripts/" + filenames[x];
const PackScripts = async () => {
Log('[BUILD] - Merging Javascript files...')
let Script = ''
let filenames = fs.readdirSync(__dirname + '/scripts')
for (let x = 0; x < filenames.length; x++) {
filenames[x] = __dirname + '/scripts/' + filenames[x]
}
for (var x = 0; x < filenames.length; x++) {
if (filenames[x].endsWith(".js")) {
Script += fs.readFileSync(filenames[x], { encoding: 'utf8', flag: 'r' }) + "\n\n";
for (let x = 0; x < filenames.length; x++) {
if (filenames[x].endsWith('.js')) {
Script += fs.readFileSync(filenames[x], { encoding: 'utf8', flag: 'r' }) + '\n\n'
}
}

if (Obfuscate) {
Obfuscator(Script, ObfuscatorOptions).then(function (obfuscated) {
let p = __dirname + "/Production/Production.js";
Log("[BUILD] - Obfuscated file: " + p)
fs.mkdir("./Production", (err) => { });
fs.writeFileSync(p, obfuscated, { recursive: true })
Obfuscator(Script, ObfuscatorOptions).then(
(ObfuscatedContent) => {
let p = __dirname + '/build/production.js'
Log('[BUILD] - Obfuscated file: ' + p)
fs.mkdir('./Production', (err) => {})
fs.writeFileSync(p, ObfuscatedContent, { recursive: true })

Log("[BUILD] - Finished file: " + p)
}, function (err) {
console.error(err);
});
}
else {
Log("[BUILD] - Skipping obfuscation")
fs.mkdir("./Production", (err) => { });
let p = __dirname + "/Production/Production.js";
Log('[BUILD] - Finished file: ' + p)
},
(Error) => {
console.error(Error)
},
)
} else {
Log('[BUILD] - Skipping obfuscation')
fs.mkdir('./Production', (err) => {})
let p = __dirname + '/build/production.js'
fs.writeFileSync(p, Script, { recursive: true })
}
}

PackStylesheets()
PackScripts();
PackScripts()
15 changes: 7 additions & 8 deletions Error.js
Original file line number Diff line number Diff line change
Expand Up @@ -2,17 +2,16 @@ const { GetLanguagePath } = require('./Localization')
const { GeneratePage } = require('./generators/Assemble')
const fs = require('fs/promises')

async function SendError(errNum = 500, req, res, AvailablePages, AvailablePageSelection, CustomError, Languages) {
const ArticlePath = __dirname + '/posts/' + errNum + '.md';
const Article = await fs.readFile(ArticlePath, {encoding: "utf-8"})
const SendError = async (errNum = 500, req, res, AvailablePages, AvailablePageSelection, CustomError, Languages) => {
const ArticlePath = __dirname + '/posts/' + errNum + '.md'
const Article = await fs.readFile(ArticlePath, { encoding: 'utf-8' })

let Lang = {}
if (Languages.includes(req.params.localization))
Lang = require('./localization/' + req.params.localization + '.json')
else
Lang = require(GetLanguagePath(req))
else Lang = require(GetLanguagePath(req))

let Page = await GeneratePage(Article, Lang, AvailablePages, AvailablePageSelection, CustomError, null);
let Page = await GeneratePage(Article, Lang, AvailablePages, AvailablePageSelection, CustomError, null)
res.send(Page)
}
module.exports = { SendError }
module.exports = { SendError }
Loading

0 comments on commit b8f7706

Please sign in to comment.