diff --git a/src/controllers/PostsController.ts b/src/controllers/PostsController.ts index b519e45..9d8d1d0 100644 --- a/src/controllers/PostsController.ts +++ b/src/controllers/PostsController.ts @@ -1,7 +1,7 @@ import { RequestHandler } from "../entities/RequestHandler"; import { UserHelper } from "../helpers/UserHelper"; import { PostsHelper } from "../helpers/PostsHelper"; -import { Post, PostVisibilityLevel, PostKind, PostAccessLevel, PostPageKind, PostFile } from "../entities/Post"; +import { Post, PostVisibilityLevel, PostKind, PostAccessLevel, PostPageKind, PostFile, PostLink } from "../entities/Post"; import { MoviesController } from "./MoviesController"; import { MoviesHelper } from "../helpers/MoviesHelper"; import { SurveyHelper } from "../helpers/SurveyHelper"; @@ -13,7 +13,7 @@ import { GroupsAccessLevel } from "../entities/Group"; import { GroupsHelper } from "../helpers/GroupsHelper"; import { time } from "../utils/DateUtils"; import { findKey } from "../utils/ArrayUtils"; -import { check_string_before_insert, check_youtube_id } from "../utils/StringUtils"; +import { check_string_before_insert, check_youtube_id, checkURL } from "../utils/StringUtils"; import { pathUserData } from "../utils/UserDataUtils"; import { statSync } from "fs"; import { lookup } from "mime-types"; @@ -215,6 +215,22 @@ export class PostsController { break; + + // Web links + case PostKind.POST_KIND_WEBLINK: + + const url = h.postURL("url"); + + // For now, for safety, we do not fetch page content + newPost.link = new PostLink({ + url: url, + title: undefined, + description: undefined, + image: undefined + }); + + break; + default: h.error(500, "Unsupported kind of post!"); diff --git a/src/entities/RequestHandler.ts b/src/entities/RequestHandler.ts index 4816a4a..80c32b4 100644 --- a/src/entities/RequestHandler.ts +++ b/src/entities/RequestHandler.ts @@ -1,7 +1,7 @@ import { Response, Request } from "express"; import { APIHelper } from "../helpers/APIHelper"; import { APIClient } from "./APIClient"; -import { checkMail, removeHTMLNodes } from "../utils/StringUtils"; +import { checkMail, removeHTMLNodes, checkURL } from "../utils/StringUtils"; import { AccountHelper } from "../helpers/AccountHelper"; import { UploadedFile } from "express-fileupload"; import { prepareFileCreation, generateNewUserDataFileName, pathUserData } from "../utils/UserDataUtils"; @@ -337,6 +337,21 @@ export class RequestHandler { return dir; } + /** + * Get an URL included in a POST request + * + * @param name The name of the POST field containing + * the URL + */ + public postURL(name: string) : string { + const url = this.postString(name); + + if(!checkURL(url)) + this.error(401, "Specified URL in '"+name+"' seems to be invalid!"); + + return url; + } + /** * Get information about an uploaded file *