Add support for short download URLs #1875 #1922

- Originally committed on April 3, 2022
- Thanks to @misol @conory
- getDownloadUrl()에서 기존 메소드 형태 최대한 그대로 유지하는 방향으로 작업
  (단, source_filename 파라미터를 전달하지 않으면 긴주소로 강제됨)
- getDirectFileUrl()의 불필요하게 복잡한 코드 정리
- getFileList()에서 이미지가 아닌 파일도 절대경로를 반환하도록 수정
- procFileDownload, procFileOutput에서 URL에 포함된 파일명을 검증하도록 하여
  동일한 첨부파일에서 파일명 부분만 변형한 링크를 무한 생성할 수 없도록 함
- 짧은주소 미사용시 불필요한 module_srl 파라미터 제거
This commit is contained in:
Kijin Sung 2022-12-26 16:23:19 +09:00
parent 0029d1a1ec
commit 17279c264b
6 changed files with 49 additions and 25 deletions

View file

@ -46,6 +46,12 @@ class Router
'vars' => ['mid' => 'any', 'act' => 'word'],
'priority' => 20,
),
'files/download/link/$file_srl/$sid/$filename' => array(
'regexp' => '#^files/download/link/(?<file_srl>[0-9]+)/(?<sid>[0-9a-f]+)/(?<filename>[^/]+)$#',
'vars' => ['file_srl' => 'int', 'sid' => 'hex', 'filename' => 'any'],
'extra_vars' => ['act' => 'procFileDownload'],
'priority' => 0,
),
'files/download/$file_srl/$file_key/$filename' => array(
'regexp' => '#^files/download/(?<file_srl>[0-9]+)/(?<file_key>[a-zA-Z0-9_-]+)/(?<filename>[^/]+)$#',
'vars' => ['file_srl' => 'int', 'file_key' => 'any', 'filename' => 'any'],

View file

@ -183,8 +183,8 @@
else if(/\.(mp4|webm|ogv)$/i.test(result.source_filename) && opt.autoinsertTypes.video) {
if(result.original_type === 'image/gif') {
temp_code += '<video src="' + result.download_url + '" autoplay loop muted playsinline data-file-srl="' + result.file_srl + '" />';
} else if (result.download_url.match(/\bprocFileDownload\b/)) {
if (result.download_url.match(/^\?/)) {
} else if (result.download_url.match(/\b(?:procFileDownload\b|files\/download\/)/)) {
if (!result.download_url.match(/^\//)) {
result.download_url = XE.URI(default_url).pathname() + result.download_url;
}
temp_code += '<video src="' + result.download_url + '" controls preload="none" data-file-srl="' + result.file_srl + '" />';
@ -364,8 +364,8 @@
else if(/\.(mp4|webm|ogv)$/i.test(result.source_filename)) {
if(result.original_type === 'image/gif') {
temp_code += '<video src="' + result.download_url + '" autoplay loop muted playsinline data-file-srl="' + result.file_srl + '" />';
} else if (result.download_url.match(/\bprocFileDownload\b/)) {
if (result.download_url.match(/^\?/)) {
} else if (result.download_url.match(/\b(?:procFileDownload\b|files\/download\/)/)) {
if (!result.download_url.match(/^\//)) {
result.download_url = XE.URI(default_url).pathname() + result.download_url;
}
temp_code += '<video src="' + result.download_url + '" controls preload="none" data-file-srl="' + result.file_srl + '" />';