// ---------------------------------------------------------------------------
-const LAST_MIGRATION_VERSION = 185
+const LAST_MIGRATION_VERSION = 195
// ---------------------------------------------------------------------------
'activitypub-http-broadcast': 5,
'activitypub-http-unicast': 5,
'activitypub-http-fetcher': 5,
- 'video-file': 1
+ 'video-file': 1,
+ 'email': 5
}
const JOB_CONCURRENCY: { [ id in JobType ]: number } = {
'activitypub-http-broadcast': 1,
'activitypub-http-unicast': 5,
'activitypub-http-fetcher': 1,
- 'video-file': 1
+ 'video-file': 1,
+ 'email': 5
}
// 2 days
const JOB_COMPLETED_LIFETIME = 60000 * 60 * 24 * 2
},
REDIS: {
HOSTNAME: config.get<string>('redis.hostname'),
- PORT: config.get<string>('redis.port'),
+ PORT: config.get<number>('redis.port'),
AUTH: config.get<string>('redis.auth')
},
+ SMTP: {
+ HOSTNAME: config.get<string>('smtp.hostname'),
+ PORT: config.get<number>('smtp.port'),
+ USERNAME: config.get<string>('smtp.username'),
+ PASSWORD: config.get<string>('smtp.password'),
+ TLS: config.get<boolean>('smtp.tls'),
+ CA_FILE: config.get<string>('smtp.ca_file'),
+ FROM_ADDRESS: config.get<string>('smtp.from_address')
+ },
STORAGE: {
AVATARS_DIR: buildPath(config.get<string>('storage.avatars')),
LOG_DIR: buildPath(config.get<string>('storage.logs')),
PREVIEWS: {
get SIZE () { return config.get<number>('cache.previews.size') }
}
+ },
+ INSTANCE: {
+ get NAME () { return config.get<string>('instance.name') },
+ get DESCRIPTION () { return config.get<string>('instance.description') },
+ get TERMS () { return config.get<string>('instance.terms') },
+ get DEFAULT_CLIENT_ROUTE () { return config.get<string>('instance.default_client_route') },
+ CUSTOMIZATIONS: {
+ get JAVASCRIPT () { return config.get<string>('instance.customizations.javascript') },
+ get CSS () { return config.get<string>('instance.customizations.css') }
+ }
}
}
USERS: {
USERNAME: { min: 3, max: 20 }, // Length
PASSWORD: { min: 6, max: 255 }, // Length
+ DESCRIPTION: { min: 3, max: 250 }, // Length
VIDEO_QUOTA: { min: -1 }
},
VIDEO_ABUSES: {
VIDEO_CHANNELS: {
NAME: { min: 3, max: 120 }, // Length
DESCRIPTION: { min: 3, max: 250 }, // Length
+ SUPPORT: { min: 3, max: 300 }, // Length
URL: { min: 3, max: 2000 } // Length
},
VIDEOS: {
NAME: { min: 3, max: 120 }, // Length
TRUNCATED_DESCRIPTION: { min: 3, max: 250 }, // Length
- DESCRIPTION: { min: 3, max: 3000 }, // Length
+ DESCRIPTION: { min: 3, max: 10000 }, // Length
+ SUPPORT: { min: 3, max: 300 }, // Length
+ IMAGE: {
+ EXTNAME: [ '.jpg', '.jpeg' ],
+ FILE_SIZE: {
+ max: 2 * 1024 * 1024 // 2MB
+ }
+ },
EXTNAME: [ '.mp4', '.ogv', '.webm' ],
INFO_HASH: { min: 40, max: 40 }, // Length, info hash is 20 bytes length but we represent it in hexadecimal so 20 * 2
DURATION: { min: 1 }, // Number
}
}
+let VIDEO_VIEW_LIFETIME = 60000 * 60 // 1 hour
+const MAX_VIDEO_TRANSCODING_FPS = 30
+
const VIDEO_RATE_TYPES: { [ id: string ]: VideoRateType } = {
LIKE: 'like',
DISLIKE: 'dislike'
'video/mp4': '.mp4'
}
-const AVATAR_MIMETYPE_EXT = {
+const IMAGE_MIMETYPE_EXT = {
'image/png': '.png',
'image/jpg': '.jpg',
'image/jpeg': '.jpg'
// Password encryption
const BCRYPT_SALT_SIZE = 10
+const USER_PASSWORD_RESET_LIFETIME = 60000 * 5 // 5 minutes
+
// ---------------------------------------------------------------------------
// Express static paths (router)
ACTIVITY_PUB.ACTOR_REFRESH_INTERVAL = 10 * 1000 // 10 seconds
CONSTRAINTS_FIELDS.ACTORS.AVATAR.FILE_SIZE.max = 100 * 1024 // 100KB
SCHEDULER_INTERVAL = 10000
+ VIDEO_VIEW_LIFETIME = 1000 // 1 second
}
updateWebserverConfig()
VIDEO_LICENCES,
VIDEO_RATE_TYPES,
VIDEO_MIMETYPE_EXT,
- AVATAR_MIMETYPE_EXT,
+ MAX_VIDEO_TRANSCODING_FPS,
+ USER_PASSWORD_RESET_LIFETIME,
+ IMAGE_MIMETYPE_EXT,
SCHEDULER_INTERVAL,
- JOB_COMPLETED_LIFETIME
+ JOB_COMPLETED_LIFETIME,
+ VIDEO_VIEW_LIFETIME
}
// ---------------------------------------------------------------------------