mirror of
https://github.com/ether/etherpad-lite.git
synced 2025-05-06 07:07:12 -04:00

* Fixed determining file extension. * Added ts-node * Fixed backend tests. * Fixed frontend test runs. * Fixed tests. * Use script approach for starting etherpad. * Change directory to src. * Fixed env. * Change directory * Fixed build arg. * Fixed docker build. * Fixed. * Fixed cypress file path. * Fixed. * Use latest node container. * Fixed windows workflow. * Use tsx and optimized docker image. * Added workflow for type checks. * Fixed. * Added tsconfig. * Converted more files to typescript. * Removed commented keys. * Typed caching middleware. * Added script for checking the types. * Moved SecretRotator to typescript. * Fixed npm installation and moved to types folder. * Use better scripts for watching typescript changes. * Update windows.yml * Fixed order of npm installation. * Converted i18n. * Added more types. * Added more types. * Fixed import. * Fixed tests. * Fixed tests. * Fixed type checking test. * Fixed stats * Added express types. * fixed.
32 lines
1.2 KiB
TypeScript
32 lines
1.2 KiB
TypeScript
'use strict';
|
|
|
|
import {ArgsExpressType} from "../../types/ArgsExpressType";
|
|
|
|
const padManager = require('../../db/PadManager');
|
|
|
|
exports.expressCreateServer = (hookName:string, args:ArgsExpressType, cb:Function) => {
|
|
// redirects browser to the pad's sanitized url if needed. otherwise, renders the html
|
|
args.app.param('pad', (req:any, res:any, next:Function, padId:string) => {
|
|
(async () => {
|
|
// ensure the padname is valid and the url doesn't end with a /
|
|
if (!padManager.isValidPadId(padId) || /\/$/.test(req.url)) {
|
|
res.status(404).send('Such a padname is forbidden');
|
|
return;
|
|
}
|
|
|
|
const sanitizedPadId = await padManager.sanitizePadId(padId);
|
|
|
|
if (sanitizedPadId === padId) {
|
|
// the pad id was fine, so just render it
|
|
next();
|
|
} else {
|
|
// the pad id was sanitized, so we redirect to the sanitized version
|
|
const realURL =
|
|
encodeURIComponent(sanitizedPadId) + new URL(req.url, 'http://invalid.invalid').search;
|
|
res.header('Location', realURL);
|
|
res.status(302).send(`You should be redirected to <a href="${realURL}">${realURL}</a>`);
|
|
}
|
|
})().catch((err) => next(err || new Error(err)));
|
|
});
|
|
return cb();
|
|
};
|