Jonatan Nilsson
71b1725655
Some checks failed
continuous-integration/appveyor/branch AppVeyor build failed
87 lines
No EOL
2.3 KiB
JavaScript
87 lines
No EOL
2.3 KiB
JavaScript
import { parseArticles, parseArticle } from '../base/article/util.mjs'
|
|
import { parseFiles } from './file/util.mjs'
|
|
import Parent from '../base/article/routes.mjs'
|
|
import { decodeTorrentFile } from './file/torrent.mjs'
|
|
|
|
export default class ArticleRoutes extends Parent {
|
|
register(server) {
|
|
super.register(server)
|
|
server.flaska.post('/api/auth/articles/:id/files', [
|
|
server.authenticate(),
|
|
server.formidable({ maxFileSize: 100 * 1024 * 1024, }),
|
|
], this.auth_addFileToArticle.bind(this))
|
|
server.flaska.delete('/api/auth/articles/:id/files/:fileId', [
|
|
server.authenticate(),
|
|
], this.auth_removeFile.bind(this))
|
|
}
|
|
|
|
getArticle_resOutput(res) {
|
|
return {
|
|
article: parseArticle(res.results[0][0]),
|
|
files: parseFiles(res.results[1]),
|
|
}
|
|
}
|
|
|
|
private_getUpdateArticle_resOutput(res) {
|
|
return {
|
|
article: parseArticle(res.results[0][0] || {}),
|
|
files: parseFiles(res.results[1]),
|
|
staff: res.results[2],
|
|
}
|
|
}
|
|
|
|
/** POST: /api/auth/articles/:id/files */
|
|
async auth_addFileToArticle(ctx) {
|
|
if (!ctx.req.files.file) {
|
|
throw new HttpError(422, 'Missing file in upload')
|
|
}
|
|
|
|
let meta = {}
|
|
if (ctx.req.files.file.name.endsWith('.torrent')) {
|
|
try {
|
|
let torrent = await decodeTorrentFile(ctx.req.files.file.path)
|
|
meta.torrent = {
|
|
name: torrent.name,
|
|
announce: torrent.announce,
|
|
hash: torrent.infoHash,
|
|
files: torrent.files.map(file => ({ name: file.name, size: file.length })),
|
|
}
|
|
} catch (err) {
|
|
ctx.log.error(err)
|
|
}
|
|
}
|
|
let file = await this.uploadFile(ctx.req.files.file)
|
|
|
|
let params = [
|
|
ctx.state.auth_token,
|
|
ctx.params.id,
|
|
file.filename,
|
|
file.type,
|
|
file.path,
|
|
file.size,
|
|
JSON.stringify(meta),
|
|
null,
|
|
0,
|
|
]
|
|
|
|
await ctx.db.safeCallProc('article_auth_file_create_delete', params)
|
|
}
|
|
|
|
/** DELETE: /api/auth/articles/:id/files/:fileId */
|
|
async auth_removeFile(ctx) {
|
|
let params = [
|
|
ctx.state.auth_token,
|
|
ctx.params.id,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
null,
|
|
ctx.params.fileId,
|
|
1,
|
|
]
|
|
|
|
let res = await ctx.db.safeCallProc('article_auth_file_create_delete', params)
|
|
await this.deleteFile(res.first[0].deleted_filename)
|
|
}
|
|
} |