diff --git a/src/backend/routes/PublicRouter.ts b/src/backend/routes/PublicRouter.ts
index 01ae8396..3ad32efa 100644
--- a/src/backend/routes/PublicRouter.ts
+++ b/src/backend/routes/PublicRouter.ts
@@ -12,6 +12,7 @@ import {ServerTimeEntry} from '../middlewares/ServerTimingMWs';
import {ClientConfig, TAGS} from '../../common/config/public/ClientConfig';
import {QueryParams} from '../../common/QueryParams';
import {PhotoProcessing} from '../model/fileaccess/fileprocessing/PhotoProcessing';
+import {Utils} from '../../common/Utils';
declare global {
// eslint-disable-next-line @typescript-eslint/no-namespace
@@ -35,7 +36,7 @@ export class PublicRouter {
let selectedLocale = req.locale;
if (req.cookies && req.cookies[CookieNames.lang]) {
if (
- Config.Server.languages.indexOf(req.cookies[CookieNames.lang]) !== -1
+ Config.Server.languages.indexOf(req.cookies[CookieNames.lang]) !== -1
) {
selectedLocale = req.cookies[CookieNames.lang];
}
@@ -48,14 +49,14 @@ export class PublicRouter {
// index.html should not be cached as it contains template that can change
const renderIndex = (req: Request, res: Response, next: NextFunction) => {
ejs.renderFile(
- path.join(ProjectPath.FrontendFolder, req.localePath, 'index.html'),
- res.tpl,
- (err, str) => {
- if (err) {
- return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, err.message));
- }
- res.send(str);
+ path.join(ProjectPath.FrontendFolder, req.localePath, 'index.html'),
+ res.tpl,
+ (err, str) => {
+ if (err) {
+ return next(new ErrorDTO(ErrorCodes.GENERAL_ERROR, err.message));
}
+ res.send(str);
+ }
);
};
@@ -64,7 +65,7 @@ export class PublicRouter {
if (Config.Server.languages.indexOf(locale) !== -1) {
res.cookie(CookieNames.lang, locale);
}
- res.redirect('/?ln=' + locale);
+ res.redirect(Utils.concatUrls('/' + Config.Server.urlBase) + '/?ln=' + locale);
};
};
@@ -94,12 +95,12 @@ export class PublicRouter {
}) as unknown as ClientConfig;
// Escaping html tags, like
confCopy.Server.customHTMLHead =
- confCopy.Server.customHTMLHead
- .replace(/&/g, '&')
- .replace(//g, '>')
- .replace(/"/g, '"')
- .replace(/'/g, ''');
+ confCopy.Server.customHTMLHead
+ .replace(/&/g, '&')
+ .replace(//g, '>')
+ .replace(/"/g, '"')
+ .replace(/'/g, ''');
res.tpl.Config = confCopy;
res.tpl.customHTMLHead = Config.Server.customHTMLHead;
const selectedTheme = Config.Gallery.Themes.availableThemes.find(th => th.name === Config.Gallery.Themes.selectedTheme)?.theme || '';
@@ -140,7 +141,7 @@ export class PublicRouter {
'photo'
],
start_url:
- Config.Server.publicUrl === '' ? '.' : Config.Server.publicUrl,
+ Config.Server.publicUrl === '' ? '.' : Config.Server.publicUrl,
background_color: '#000000',
theme_color: '#000000',
});
@@ -185,40 +186,40 @@ export class PublicRouter {
y: vBs[1]
};
return '';
+ ' xmlns="http://www.w3.org/2000/svg"' +
+ ' viewBox="' + vBs.join(' ') + '">' +
+ (theme === 'auto' ? ('') :
+ (theme != null ?
+ ('')
+ : '')) +
+ `` +
+ Config.Server.svgIcon.items + '';
};
app.get('/icon.svg', (req: Request, res: Response) => {
@@ -276,44 +277,44 @@ export class PublicRouter {
});
app.get(
- [
- '/',
- '/login',
- '/gallery*',
- '/share/:' + QueryParams.gallery.sharingKey_params,
- '/shareLogin',
- '/admin',
- '/duplicates',
- '/faces',
- '/albums',
- '/search*',
- ],
- AuthenticationMWs.tryAuthenticate,
- addTPl, // add template after authentication was successful
- setLocale,
- renderIndex
+ [
+ '/',
+ '/login',
+ '/gallery*',
+ '/share/:' + QueryParams.gallery.sharingKey_params,
+ '/shareLogin',
+ '/admin',
+ '/duplicates',
+ '/faces',
+ '/albums',
+ '/search*',
+ ],
+ AuthenticationMWs.tryAuthenticate,
+ addTPl, // add template after authentication was successful
+ setLocale,
+ renderIndex
);
Config.Server.languages.forEach((l) => {
app.get(
- [
- '/' + l + '/',
- '/' + l + '/login',
- '/' + l + '/gallery*',
- '/' + l + '/share*',
- '/' + l + '/admin',
- '/' + l + '/search*',
- ],
- redirectToBase(l)
+ [
+ '/' + l + '/',
+ '/' + l + '/login',
+ '/' + l + '/gallery*',
+ '/' + l + '/share*',
+ '/' + l + '/admin',
+ '/' + l + '/search*',
+ ],
+ redirectToBase(l)
);
});
const renderFile = (subDir = '') => {
return (req: Request, res: Response) => {
const file = path.join(
- ProjectPath.FrontendFolder,
- req.localePath,
- subDir,
- req.params.file
+ ProjectPath.FrontendFolder,
+ req.localePath,
+ subDir,
+ req.params.file
);
if (!fs.existsSync(file)) {
return res.sendStatus(404);
@@ -326,16 +327,16 @@ export class PublicRouter {
};
app.get(
- '/assets/:file(*)',
- setLocale,
- AuthenticationMWs.normalizePathParam('file'),
- renderFile('assets')
+ '/assets/:file(*)',
+ setLocale,
+ AuthenticationMWs.normalizePathParam('file'),
+ renderFile('assets')
);
app.get(
- '/:file',
- setLocale,
- AuthenticationMWs.normalizePathParam('file'),
- renderFile()
+ '/:file',
+ setLocale,
+ AuthenticationMWs.normalizePathParam('file'),
+ renderFile()
);
}
}
diff --git a/test/common/unit/Utils.spec.ts b/test/common/unit/Utils.spec.ts
index 160a5db6..01367ad7 100644
--- a/test/common/unit/Utils.spec.ts
+++ b/test/common/unit/Utils.spec.ts
@@ -10,7 +10,9 @@ describe('Utils', () => {
expect(Utils.concatUrls('abc\\', 'cde')).to.be.equal('abc/cde');
expect(Utils.concatUrls('abc/', 'cde/')).to.be.equal('abc/cde');
expect(Utils.concatUrls('./abc\\', 'cde/')).to.be.equal('./abc/cde');
+ expect(Utils.concatUrls('/abc\\', 'cde/')).to.be.equal('/abc/cde');
expect(Utils.concatUrls('abc/', '\\cde/')).to.be.equal('abc/cde');
+ expect(Utils.concatUrls('/abc/', '\\cde/')).to.be.equal('/abc/cde');
expect(Utils.concatUrls('abc\\', '\\cde/')).to.be.equal('abc/cde');
expect(Utils.concatUrls('abc\\', '/cde/')).to.be.equal('abc/cde');
expect(Utils.concatUrls('abc/', '/cde/')).to.be.equal('abc/cde');