ily.li/src/controllers/URLRedirectController.ts

64 lines
2.7 KiB
TypeScript
Raw Normal View History

2020-07-06 10:49:18 +02:00
import Controller from "wms-core/Controller";
import {NextFunction, Request, Response} from "express";
import URLRedirect from "../models/URLRedirect";
import {REQUIRE_AUTH_MIDDLEWARE} from "wms-core/auth/AuthComponent";
2020-07-06 10:49:18 +02:00
import generateSlug from "../SlugGenerator";
import config from "config";
2020-07-06 10:49:18 +02:00
export default class URLRedirectController extends Controller {
routes(): void {
this.get('/url/shrink', this.getURLShrinker, 'url-shrinker', REQUIRE_AUTH_MIDDLEWARE);
this.get('/url/shrink/script', this.downloadLinuxScript, 'url-linux-script');
this.post('/url/shrink', this.addURLFrontend, 'shrink-url', REQUIRE_AUTH_MIDDLEWARE);
2020-07-06 10:49:18 +02:00
this.get('/urls/:page([0-9]+)?', this.getURLRedirectManager, 'url-manager', REQUIRE_AUTH_MIDDLEWARE);
}
protected async getURLShrinker(req: Request, res: Response): Promise<void> {
const allowedDomains = config.get<string[]>('allowed_url_domains');
res.render('url-shrinker', {
allowed_domains: allowedDomains,
default_domain: allowedDomains[config.get<number>('default_url_domain_for_urls')],
});
2020-07-06 10:49:18 +02:00
}
protected async downloadLinuxScript(req: Request, res: Response): Promise<void> {
res.download('assets/files/shrink_url.sh', 'shrink_url.sh');
2020-07-06 10:49:18 +02:00
}
protected async getURLRedirectManager(req: Request, res: Response): Promise<void> {
res.render('url-manager', {
urls: await URLRedirect.paginateForUser(req, 100, req.models.user!.id!),
});
}
protected async addURLFrontend(req: Request, res: Response, next: NextFunction): Promise<void> {
req.body.type = 'url';
await URLRedirectController.addURL(req, res, next, req.body.autogen_url === undefined && req.body.slug ? req.body.slug : await generateSlug(10));
2020-07-06 10:49:18 +02:00
}
public static async addURL(req: Request, res: Response, next: NextFunction, slug?: string): Promise<void> {
2020-07-06 10:49:18 +02:00
if (req.body.type !== 'url') return next();
slug = slug || req.params.slug || req.body.slug || await generateSlug(10);
const urlRedirect = new URLRedirect({
user_id: req.models.user!.id,
slug: slug,
target_url: req.body.target_url,
});
await urlRedirect.save();
const domain = req.body.url_domain || config.get<string[]>('allowed_url_domains')[config.get<number>('default_url_domain_for_urls')];
2020-07-06 10:49:18 +02:00
res.format({
json: () => res.json({
url: urlRedirect.getURL(domain),
2020-07-06 10:49:18 +02:00
}),
text: () => res.send(urlRedirect.getURL(domain)),
2020-07-06 10:49:18 +02:00
html: () => {
req.flash('success', 'URL shrunk successfully!');
req.flash('url', urlRedirect.getURL(domain));
2020-07-06 10:49:18 +02:00
res.redirectBack('/');
},
});
}
}