]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blame - server/helpers/core-utils.ts
Add ability to forbid user to upload video
[github/Chocobozzz/PeerTube.git] / server / helpers / core-utils.ts
CommitLineData
1840c2f7
C
1/*
2 Different from 'utils' because we don't not import other PeerTube modules.
3 Useful to avoid circular dependencies.
4*/
5
6import { join } from 'path'
6fcd19ba
C
7import { pseudoRandomBytes } from 'crypto'
8import {
9 readdir,
10 readFile,
11 rename,
12 unlink,
13 writeFile,
40298b02
C
14 access,
15 stat,
16 Stats
6fcd19ba
C
17} from 'fs'
18import * as mkdirp from 'mkdirp'
19import * as bcrypt from 'bcrypt'
20import * as createTorrent from 'create-torrent'
f981dae8 21import * as rimraf from 'rimraf'
6fcd19ba
C
22import * as openssl from 'openssl-wrapper'
23import * as Promise from 'bluebird'
1840c2f7
C
24
25function isTestInstance () {
26 return process.env.NODE_ENV === 'test'
27}
28
29function root () {
fdbda9e3
C
30 // We are in /helpers/utils.js
31 const paths = [ __dirname, '..', '..' ]
32
33 // We are under /dist directory
34 if (process.mainModule.filename.endsWith('.ts') === false) {
35 paths.push('..')
36 }
37
38 return join.apply(null, paths)
1840c2f7
C
39}
40
49347a0a
C
41// Thanks: https://stackoverflow.com/a/12034334
42function escapeHTML (stringParam) {
43 const entityMap = {
44 '&': '&',
45 '<': '&lt;',
46 '>': '&gt;',
47 '"': '&quot;',
48 "'": '&#39;',
49 '/': '&#x2F;',
50 '`': '&#x60;',
51 '=': '&#x3D;'
52 }
53
54 return String(stringParam).replace(/[&<>"'`=\/]/g, s => entityMap[s])
55}
56
6fcd19ba
C
57function promisify0<A> (func: (cb: (err: any, result: A) => void) => void): () => Promise<A> {
58 return function promisified (): Promise<A> {
59 return new Promise<A>((resolve: (arg: A) => void, reject: (err: any) => void) => {
60 func.apply(null, [ (err: any, res: A) => err ? reject(err) : resolve(res) ])
61 })
62 }
63}
64
65// Thanks to https://gist.github.com/kumasento/617daa7e46f13ecdd9b2
66function promisify1<T, A> (func: (arg: T, cb: (err: any, result: A) => void) => void): (arg: T) => Promise<A> {
67 return function promisified (arg: T): Promise<A> {
68 return new Promise<A>((resolve: (arg: A) => void, reject: (err: any) => void) => {
69 func.apply(null, [ arg, (err: any, res: A) => err ? reject(err) : resolve(res) ])
70 })
71 }
72}
73
74function promisify1WithVoid<T> (func: (arg: T, cb: (err: any) => void) => void): (arg: T) => Promise<void> {
75 return function promisified (arg: T): Promise<void> {
76 return new Promise<void>((resolve: () => void, reject: (err: any) => void) => {
77 func.apply(null, [ arg, (err: any) => err ? reject(err) : resolve() ])
78 })
79 }
80}
81
82function promisify2<T, U, A> (func: (arg1: T, arg2: U, cb: (err: any, result: A) => void) => void): (arg1: T, arg2: U) => Promise<A> {
83 return function promisified (arg1: T, arg2: U): Promise<A> {
84 return new Promise<A>((resolve: (arg: A) => void, reject: (err: any) => void) => {
85 func.apply(null, [ arg1, arg2, (err: any, res: A) => err ? reject(err) : resolve(res) ])
86 })
87 }
88}
89
90function promisify2WithVoid<T, U> (func: (arg1: T, arg2: U, cb: (err: any) => void) => void): (arg1: T, arg2: U) => Promise<void> {
91 return function promisified (arg1: T, arg2: U): Promise<void> {
92 return new Promise<void>((resolve: () => void, reject: (err: any) => void) => {
93 func.apply(null, [ arg1, arg2, (err: any) => err ? reject(err) : resolve() ])
94 })
95 }
96}
97
98const readFilePromise = promisify2<string, string, string>(readFile)
99const readFileBufferPromise = promisify1<string, Buffer>(readFile)
100const unlinkPromise = promisify1WithVoid<string>(unlink)
101const renamePromise = promisify2WithVoid<string, string>(rename)
556ddc31 102const writeFilePromise = promisify2WithVoid<string, any>(writeFile)
6fcd19ba
C
103const readdirPromise = promisify1<string, string[]>(readdir)
104const mkdirpPromise = promisify1<string, string>(mkdirp)
105const pseudoRandomBytesPromise = promisify1<number, Buffer>(pseudoRandomBytes)
106const accessPromise = promisify1WithVoid<string|Buffer>(access)
107const opensslExecPromise = promisify2WithVoid<string, any>(openssl.exec)
108const bcryptComparePromise = promisify2<any, string, boolean>(bcrypt.compare)
109const bcryptGenSaltPromise = promisify1<number, string>(bcrypt.genSalt)
110const bcryptHashPromise = promisify2<any, string|number, string>(bcrypt.hash)
111const createTorrentPromise = promisify2<string, any, any>(createTorrent)
f981dae8 112const rimrafPromise = promisify1WithVoid<string>(rimraf)
40298b02 113const statPromise = promisify1<string, Stats>(stat)
6fcd19ba 114
1840c2f7
C
115// ---------------------------------------------------------------------------
116
117export {
118 isTestInstance,
6fcd19ba 119 root,
49347a0a 120 escapeHTML,
6fcd19ba
C
121
122 promisify0,
123 promisify1,
124 readdirPromise,
125 readFilePromise,
126 readFileBufferPromise,
127 unlinkPromise,
128 renamePromise,
129 writeFilePromise,
130 mkdirpPromise,
131 pseudoRandomBytesPromise,
132 accessPromise,
133 opensslExecPromise,
134 bcryptComparePromise,
135 bcryptGenSaltPromise,
136 bcryptHashPromise,
f981dae8 137 createTorrentPromise,
40298b02
C
138 rimrafPromise,
139 statPromise
1840c2f7 140}