mirror of
https://github.com/aurora-dot/pastel.codes.git
synced 2025-04-27 21:12:13 +01:00
Compare commits
1 Commits
74670023a0
...
b0e9c8f186
Author | SHA1 | Date | |
---|---|---|---|
|
b0e9c8f186 |
@ -1,15 +0,0 @@
|
|||||||
# EditorConfig is awesome: https://EditorConfig.org
|
|
||||||
|
|
||||||
# top-most EditorConfig file
|
|
||||||
root = true
|
|
||||||
|
|
||||||
[*]
|
|
||||||
indent_style = space
|
|
||||||
indent_size = 2
|
|
||||||
end_of_line = lf
|
|
||||||
charset = utf-8
|
|
||||||
trim_trailing_whitespace = false
|
|
||||||
insert_final_newline = false
|
|
||||||
|
|
||||||
[pug.ts]
|
|
||||||
indent_size = 4
|
|
@ -1,3 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": ["prettier"]
|
|
||||||
}
|
|
2
.gitignore
vendored
2
.gitignore
vendored
@ -201,5 +201,3 @@ notes
|
|||||||
public/stylesheets/style.css
|
public/stylesheets/style.css
|
||||||
ngrok
|
ngrok
|
||||||
.dccache
|
.dccache
|
||||||
|
|
||||||
.DS_store
|
|
1
.husky/.gitignore
vendored
1
.husky/.gitignore
vendored
@ -1 +0,0 @@
|
|||||||
_
|
|
@ -1,4 +0,0 @@
|
|||||||
#!/bin/sh
|
|
||||||
. "$(dirname "$0")/_/husky.sh"
|
|
||||||
|
|
||||||
npx lint-staged
|
|
@ -1,8 +0,0 @@
|
|||||||
{
|
|
||||||
"trailingComma": "es5",
|
|
||||||
"semi": true,
|
|
||||||
"tabWidth": 2,
|
|
||||||
"singleQuote": true,
|
|
||||||
"jsxSingleQuote": true,
|
|
||||||
"plugins": ["prettier-plugin-tailwindcss", "@prettier/plugin-pug"]
|
|
||||||
}
|
|
@ -1,4 +1,4 @@
|
|||||||
FROM node:21-bullseye-slim
|
FROM node:16-bullseye-slim
|
||||||
|
|
||||||
ENV IS_DOCKER=true
|
ENV IS_DOCKER=true
|
||||||
ENV NODE_ENV=production
|
ENV NODE_ENV=production
|
||||||
|
75
app.js
75
app.js
@ -4,7 +4,7 @@ var path = require('path');
|
|||||||
var cookieParser = require('cookie-parser');
|
var cookieParser = require('cookie-parser');
|
||||||
var mLogger = require('morgan');
|
var mLogger = require('morgan');
|
||||||
var logger = require('./config/winston');
|
var logger = require('./config/winston');
|
||||||
const helmet = require('helmet');
|
const helmet = require("helmet");
|
||||||
|
|
||||||
var indexRouter = require('./routes/index');
|
var indexRouter = require('./routes/index');
|
||||||
var aboutRouter = require('./routes/about');
|
var aboutRouter = require('./routes/about');
|
||||||
@ -12,8 +12,7 @@ var contactRouter = require('./routes/contact');
|
|||||||
|
|
||||||
var app = express();
|
var app = express();
|
||||||
|
|
||||||
if (process.env.IS_DOCKER != 'true')
|
if (process.env.IS_DOCKER != 'true') app.set('trust proxy', 'loopback,uniquelocal');
|
||||||
app.set('trust proxy', 'loopback,uniquelocal');
|
|
||||||
app.disable('x-powered-by');
|
app.disable('x-powered-by');
|
||||||
|
|
||||||
// view engine setup
|
// view engine setup
|
||||||
@ -21,72 +20,50 @@ app.set('views', path.join(__dirname, 'views'));
|
|||||||
app.set('view engine', 'pug');
|
app.set('view engine', 'pug');
|
||||||
|
|
||||||
if (process.env.NODE_ENV === 'production') {
|
if (process.env.NODE_ENV === 'production') {
|
||||||
app.use(mLogger('common', { stream: logger.stream }));
|
app.use(mLogger("common", { "stream": logger.stream }));
|
||||||
} else {
|
} else {
|
||||||
app.use(mLogger('dev'));
|
app.use(mLogger('dev'));
|
||||||
}
|
}
|
||||||
|
|
||||||
app.use(helmet());
|
app.use(helmet());
|
||||||
app.use(
|
app.use(
|
||||||
helmet.contentSecurityPolicy({
|
helmet.contentSecurityPolicy({
|
||||||
directives: {
|
directives: {
|
||||||
defaultSrc: ["'self'"],
|
defaultSrc: ["'self'"],
|
||||||
scriptSrc: [
|
scriptSrc: ["'self'", "'unsafe-inline'", "'unsafe-eval'", "https://hcaptcha.com", "https://*.hcaptcha.com", "https://cdn.ravenjs.com/"],
|
||||||
"'self'",
|
imgSrc: ["'self'", "https://blog.pastel.codes", "https://static.ghost.org", "https://secure.gravatar.com"],
|
||||||
"'unsafe-inline'",
|
styleSrc: ["'self'", "'unsafe-inline'", "https://hcaptcha.com", "https://*.hcaptcha.com"],
|
||||||
"'unsafe-eval'",
|
fontSrc: ["'self'", "data:"],
|
||||||
'https://hcaptcha.com',
|
frameSrc: ["https://hcaptcha.com", "https://*.hcaptcha.com"],
|
||||||
'https://*.hcaptcha.com',
|
objectSrc: ["'none'"],
|
||||||
'https://cdn.ravenjs.com/',
|
upgradeInsecureRequests: [],
|
||||||
'https://cdnjs.cloudflare.com/',
|
},
|
||||||
'https://cdn.jsdelivr.net/',
|
})
|
||||||
'https://*.cloudfront.net/',
|
);
|
||||||
],
|
|
||||||
imgSrc: [
|
|
||||||
"'self'",
|
|
||||||
'https://blog.pastel.codes',
|
|
||||||
'https://static.ghost.org',
|
|
||||||
'https://secure.gravatar.com',
|
|
||||||
'data: ',
|
|
||||||
],
|
|
||||||
styleSrc: [
|
|
||||||
"'self'",
|
|
||||||
"'unsafe-inline'",
|
|
||||||
'https://hcaptcha.com',
|
|
||||||
'https://*.hcaptcha.com',
|
|
||||||
],
|
|
||||||
fontSrc: ["'self'", 'data:'],
|
|
||||||
frameSrc: ['https://hcaptcha.com', 'https://*.hcaptcha.com'],
|
|
||||||
objectSrc: ["'none'"],
|
|
||||||
upgradeInsecureRequests: [],
|
|
||||||
},
|
|
||||||
})
|
|
||||||
);
|
|
||||||
|
|
||||||
app.use(express.json());
|
app.use(express.json());
|
||||||
app.use(express.urlencoded({ extended: false }));
|
app.use(express.urlencoded({ extended: false }));
|
||||||
app.use(cookieParser());
|
app.use(cookieParser());
|
||||||
app.use(express.static(path.join(__dirname, 'public')));
|
app.use(express.static(path.join(__dirname, 'public')));
|
||||||
app.use('/obsidian', express.static(path.join(__dirname, 'obsidian')));
|
|
||||||
|
|
||||||
app.use('/', indexRouter);
|
app.use('/', indexRouter);
|
||||||
app.use('/about', aboutRouter);
|
app.use('/about', aboutRouter);
|
||||||
app.use('/contact', contactRouter);
|
app.use('/contact', contactRouter);
|
||||||
|
|
||||||
// catch 404 and forward to error handler
|
// catch 404 and forward to error handler
|
||||||
app.use(function (req, res, next) {
|
app.use(function(req, res, next) {
|
||||||
next(createError(404));
|
next(createError(404));
|
||||||
});
|
});
|
||||||
|
|
||||||
// error handler
|
// error handler
|
||||||
app.use(function (err, req, res, _next) {
|
app.use(function(err, req, res, next) {
|
||||||
// set locals, only providing error in development
|
// set locals, only providing error in development
|
||||||
res.locals.message = err.message;
|
res.locals.message = err.message;
|
||||||
res.locals.error = req.app.get('env') === 'development' ? err : {};
|
res.locals.error = req.app.get('env') === 'development' ? err : {};
|
||||||
|
|
||||||
// render the error page
|
// render the error page
|
||||||
res.status(err.status || 500);
|
res.status(err.status || 500);
|
||||||
res.render('error', { title: 'Error', description: 'Error' });
|
res.render('error', { title: 'Error', description: "Error" });
|
||||||
});
|
});
|
||||||
|
|
||||||
module.exports = app;
|
module.exports = app;
|
||||||
|
64
bin/www
64
bin/www
@ -35,19 +35,19 @@ server.on('listening', onListening);
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
function normalizePort(val) {
|
function normalizePort(val) {
|
||||||
var port = parseInt(val, 10);
|
var port = parseInt(val, 10);
|
||||||
|
|
||||||
if (isNaN(port)) {
|
if (isNaN(port)) {
|
||||||
// named pipe
|
// named pipe
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (port >= 0) {
|
if (port >= 0) {
|
||||||
// port number
|
// port number
|
||||||
return port;
|
return port;
|
||||||
}
|
}
|
||||||
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -55,25 +55,27 @@ function normalizePort(val) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
function onError(error) {
|
function onError(error) {
|
||||||
if (error.syscall !== 'listen') {
|
if (error.syscall !== 'listen') {
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
|
|
||||||
var bind = typeof port === 'string' ? 'Pipe ' + port : 'Port ' + port;
|
var bind = typeof port === 'string'
|
||||||
|
? 'Pipe ' + port
|
||||||
|
: 'Port ' + port;
|
||||||
|
|
||||||
// handle specific listen errors with friendly messages
|
// handle specific listen errors with friendly messages
|
||||||
switch (error.code) {
|
switch (error.code) {
|
||||||
case 'EACCES':
|
case 'EACCES':
|
||||||
console.error(bind + ' requires elevated privileges');
|
console.error(bind + ' requires elevated privileges');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
break;
|
break;
|
||||||
case 'EADDRINUSE':
|
case 'EADDRINUSE':
|
||||||
console.error(bind + ' is already in use');
|
console.error(bind + ' is already in use');
|
||||||
process.exit(1);
|
process.exit(1);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -81,7 +83,9 @@ function onError(error) {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
function onListening() {
|
function onListening() {
|
||||||
var addr = server.address();
|
var addr = server.address();
|
||||||
var bind = typeof addr === 'string' ? 'pipe ' + addr : 'port ' + addr.port;
|
var bind = typeof addr === 'string'
|
||||||
debug('Listening on ' + bind);
|
? 'pipe ' + addr
|
||||||
|
: 'port ' + addr.port;
|
||||||
|
debug('Listening on ' + bind);
|
||||||
}
|
}
|
||||||
|
@ -2,29 +2,29 @@ var winston = require('winston');
|
|||||||
var appRoot = require('app-root-path');
|
var appRoot = require('app-root-path');
|
||||||
|
|
||||||
var logger = new winston.createLogger({
|
var logger = new winston.createLogger({
|
||||||
transports: [
|
transports: [
|
||||||
new winston.transports.File({
|
new winston.transports.File({
|
||||||
level: 'info',
|
level: 'info',
|
||||||
filename: `${appRoot}/logs/app.log`,
|
filename: `${appRoot}/logs/app.log`,
|
||||||
handleExceptions: true,
|
handleExceptions: true,
|
||||||
json: true,
|
json: true,
|
||||||
maxsize: 5242880, //5MB
|
maxsize: 5242880, //5MB
|
||||||
maxFiles: 5,
|
maxFiles: 5,
|
||||||
colorize: false,
|
colorize: false
|
||||||
}),
|
}),
|
||||||
new winston.transports.Console({
|
new winston.transports.Console({
|
||||||
level: 'debug',
|
level: 'debug',
|
||||||
handleExceptions: true,
|
handleExceptions: true,
|
||||||
json: false,
|
json: false,
|
||||||
colorize: true,
|
colorize: true
|
||||||
}),
|
})
|
||||||
],
|
],
|
||||||
exitOnError: false,
|
exitOnError: false
|
||||||
});
|
});
|
||||||
|
|
||||||
logger.stream = {
|
logger.stream = {
|
||||||
write: function (message, _encoding) {
|
write: function(message, encoding){
|
||||||
logger.info(message);
|
logger.info(message);
|
||||||
},
|
}
|
||||||
};
|
};
|
||||||
module.exports = logger;
|
module.exports = logger
|
@ -1,20 +0,0 @@
|
|||||||
import globals from 'globals';
|
|
||||||
import pluginJs from '@eslint/js';
|
|
||||||
|
|
||||||
export default [
|
|
||||||
{ files: ['**/*.js'], languageOptions: { sourceType: 'commonjs' } },
|
|
||||||
{ languageOptions: { globals: { ...globals.browser, ...globals.node } } },
|
|
||||||
pluginJs.configs.recommended,
|
|
||||||
{
|
|
||||||
rules: {
|
|
||||||
'no-unused-vars': [
|
|
||||||
'error',
|
|
||||||
{
|
|
||||||
argsIgnorePattern: '^_',
|
|
||||||
varsIgnorePattern: '^_',
|
|
||||||
caughtErrorsIgnorePattern: '^_',
|
|
||||||
},
|
|
||||||
],
|
|
||||||
},
|
|
||||||
},
|
|
||||||
];
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user