mirror of
https://github.com/Chocobozzz/PeerTube.git
synced 2025-10-04 10:19:35 +02:00
Basic video redundancy implementation
This commit is contained in:
parent
a651038487
commit
c48e82b5e0
77 changed files with 1667 additions and 287 deletions
|
@ -1,7 +1,10 @@
|
|||
import * as validator from 'validator'
|
||||
import { Activity, ActivityType } from '../../../../shared/models/activitypub'
|
||||
import {
|
||||
isActorAcceptActivityValid, isActorDeleteActivityValid, isActorFollowActivityValid, isActorRejectActivityValid,
|
||||
isActorAcceptActivityValid,
|
||||
isActorDeleteActivityValid,
|
||||
isActorFollowActivityValid,
|
||||
isActorRejectActivityValid,
|
||||
isActorUpdateActivityValid
|
||||
} from './actor'
|
||||
import { isAnnounceActivityValid } from './announce'
|
||||
|
@ -11,12 +14,13 @@ import { isUndoActivityValid } from './undo'
|
|||
import { isVideoCommentCreateActivityValid, isVideoCommentDeleteActivityValid } from './video-comments'
|
||||
import {
|
||||
isVideoFlagValid,
|
||||
sanitizeAndCheckVideoTorrentCreateActivity,
|
||||
isVideoTorrentDeleteActivityValid,
|
||||
sanitizeAndCheckVideoTorrentCreateActivity,
|
||||
sanitizeAndCheckVideoTorrentUpdateActivity
|
||||
} from './videos'
|
||||
import { isViewActivityValid } from './view'
|
||||
import { exists } from '../misc'
|
||||
import { isCacheFileCreateActivityValid, isCacheFileUpdateActivityValid } from './cache-file'
|
||||
|
||||
function isRootActivityValid (activity: any) {
|
||||
return Array.isArray(activity['@context']) && (
|
||||
|
@ -67,11 +71,13 @@ function checkCreateActivity (activity: any) {
|
|||
isDislikeActivityValid(activity) ||
|
||||
sanitizeAndCheckVideoTorrentCreateActivity(activity) ||
|
||||
isVideoFlagValid(activity) ||
|
||||
isVideoCommentCreateActivityValid(activity)
|
||||
isVideoCommentCreateActivityValid(activity) ||
|
||||
isCacheFileCreateActivityValid(activity)
|
||||
}
|
||||
|
||||
function checkUpdateActivity (activity: any) {
|
||||
return sanitizeAndCheckVideoTorrentUpdateActivity(activity) ||
|
||||
return isCacheFileUpdateActivityValid(activity) ||
|
||||
sanitizeAndCheckVideoTorrentUpdateActivity(activity) ||
|
||||
isActorUpdateActivityValid(activity)
|
||||
}
|
||||
|
||||
|
|
28
server/helpers/custom-validators/activitypub/cache-file.ts
Normal file
28
server/helpers/custom-validators/activitypub/cache-file.ts
Normal file
|
@ -0,0 +1,28 @@
|
|||
import { isActivityPubUrlValid, isBaseActivityValid } from './misc'
|
||||
import { isRemoteVideoUrlValid } from './videos'
|
||||
import { isDateValid, exists } from '../misc'
|
||||
import { CacheFileObject } from '../../../../shared/models/activitypub/objects'
|
||||
|
||||
function isCacheFileCreateActivityValid (activity: any) {
|
||||
return isBaseActivityValid(activity, 'Create') &&
|
||||
isCacheFileObjectValid(activity.object)
|
||||
}
|
||||
|
||||
function isCacheFileUpdateActivityValid (activity: any) {
|
||||
return isBaseActivityValid(activity, 'Update') &&
|
||||
isCacheFileObjectValid(activity.object)
|
||||
}
|
||||
|
||||
function isCacheFileObjectValid (object: CacheFileObject) {
|
||||
return exists(object) &&
|
||||
object.type === 'CacheFile' &&
|
||||
isDateValid(object.expires) &&
|
||||
isActivityPubUrlValid(object.object) &&
|
||||
isRemoteVideoUrlValid(object.url)
|
||||
}
|
||||
|
||||
export {
|
||||
isCacheFileUpdateActivityValid,
|
||||
isCacheFileCreateActivityValid,
|
||||
isCacheFileObjectValid
|
||||
}
|
|
@ -3,7 +3,7 @@ import { CONSTRAINTS_FIELDS } from '../../../initializers'
|
|||
import { isTestInstance } from '../../core-utils'
|
||||
import { exists } from '../misc'
|
||||
|
||||
function isActivityPubUrlValid (url: string) {
|
||||
function isUrlValid (url: string) {
|
||||
const isURLOptions = {
|
||||
require_host: true,
|
||||
require_tld: true,
|
||||
|
@ -17,13 +17,18 @@ function isActivityPubUrlValid (url: string) {
|
|||
isURLOptions.require_tld = false
|
||||
}
|
||||
|
||||
return exists(url) && validator.isURL('' + url, isURLOptions) && validator.isLength('' + url, CONSTRAINTS_FIELDS.ACTORS.URL)
|
||||
return exists(url) && validator.isURL('' + url, isURLOptions)
|
||||
}
|
||||
|
||||
function isActivityPubUrlValid (url: string) {
|
||||
return isUrlValid(url) && validator.isLength('' + url, CONSTRAINTS_FIELDS.ACTORS.URL)
|
||||
}
|
||||
|
||||
function isBaseActivityValid (activity: any, type: string) {
|
||||
return (activity['@context'] === undefined || Array.isArray(activity['@context'])) &&
|
||||
activity.type === type &&
|
||||
isActivityPubUrlValid(activity.id) &&
|
||||
exists(activity.actor) &&
|
||||
(isActivityPubUrlValid(activity.actor) || isActivityPubUrlValid(activity.actor.id)) &&
|
||||
(
|
||||
activity.to === undefined ||
|
||||
|
@ -49,6 +54,7 @@ function setValidAttributedTo (obj: any) {
|
|||
}
|
||||
|
||||
export {
|
||||
isUrlValid,
|
||||
isActivityPubUrlValid,
|
||||
isBaseActivityValid,
|
||||
setValidAttributedTo
|
||||
|
|
|
@ -2,6 +2,7 @@ import { isActorFollowActivityValid } from './actor'
|
|||
import { isBaseActivityValid } from './misc'
|
||||
import { isDislikeActivityValid, isLikeActivityValid } from './rate'
|
||||
import { isAnnounceActivityValid } from './announce'
|
||||
import { isCacheFileCreateActivityValid } from './cache-file'
|
||||
|
||||
function isUndoActivityValid (activity: any) {
|
||||
return isBaseActivityValid(activity, 'Undo') &&
|
||||
|
@ -9,7 +10,8 @@ function isUndoActivityValid (activity: any) {
|
|||
isActorFollowActivityValid(activity.object) ||
|
||||
isLikeActivityValid(activity.object) ||
|
||||
isDislikeActivityValid(activity.object) ||
|
||||
isAnnounceActivityValid(activity.object)
|
||||
isAnnounceActivityValid(activity.object) ||
|
||||
isCacheFileCreateActivityValid(activity.object)
|
||||
)
|
||||
}
|
||||
|
||||
|
|
|
@ -75,6 +75,30 @@ function sanitizeAndCheckVideoTorrentObject (video: any) {
|
|||
video.attributedTo.length !== 0
|
||||
}
|
||||
|
||||
function isRemoteVideoUrlValid (url: any) {
|
||||
// FIXME: Old bug, we used the width to represent the resolution. Remove it in a few release (currently beta.11)
|
||||
if (url.width && !url.height) url.height = url.width
|
||||
|
||||
return url.type === 'Link' &&
|
||||
(
|
||||
ACTIVITY_PUB.URL_MIME_TYPES.VIDEO.indexOf(url.mimeType) !== -1 &&
|
||||
isActivityPubUrlValid(url.href) &&
|
||||
validator.isInt(url.height + '', { min: 0 }) &&
|
||||
validator.isInt(url.size + '', { min: 0 }) &&
|
||||
(!url.fps || validator.isInt(url.fps + '', { min: 0 }))
|
||||
) ||
|
||||
(
|
||||
ACTIVITY_PUB.URL_MIME_TYPES.TORRENT.indexOf(url.mimeType) !== -1 &&
|
||||
isActivityPubUrlValid(url.href) &&
|
||||
validator.isInt(url.height + '', { min: 0 })
|
||||
) ||
|
||||
(
|
||||
ACTIVITY_PUB.URL_MIME_TYPES.MAGNET.indexOf(url.mimeType) !== -1 &&
|
||||
validator.isLength(url.href, { min: 5 }) &&
|
||||
validator.isInt(url.height + '', { min: 0 })
|
||||
)
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
||||
export {
|
||||
|
@ -83,7 +107,8 @@ export {
|
|||
isVideoTorrentDeleteActivityValid,
|
||||
isRemoteStringIdentifierValid,
|
||||
isVideoFlagValid,
|
||||
sanitizeAndCheckVideoTorrentObject
|
||||
sanitizeAndCheckVideoTorrentObject,
|
||||
isRemoteVideoUrlValid
|
||||
}
|
||||
|
||||
// ---------------------------------------------------------------------------
|
||||
|
@ -147,26 +172,4 @@ function setRemoteVideoTruncatedContent (video: any) {
|
|||
return true
|
||||
}
|
||||
|
||||
function isRemoteVideoUrlValid (url: any) {
|
||||
// FIXME: Old bug, we used the width to represent the resolution. Remove it in a few realease (currently beta.11)
|
||||
if (url.width && !url.height) url.height = url.width
|
||||
|
||||
return url.type === 'Link' &&
|
||||
(
|
||||
ACTIVITY_PUB.URL_MIME_TYPES.VIDEO.indexOf(url.mimeType) !== -1 &&
|
||||
isActivityPubUrlValid(url.href) &&
|
||||
validator.isInt(url.height + '', { min: 0 }) &&
|
||||
validator.isInt(url.size + '', { min: 0 }) &&
|
||||
(!url.fps || validator.isInt(url.fps + '', { min: 0 }))
|
||||
) ||
|
||||
(
|
||||
ACTIVITY_PUB.URL_MIME_TYPES.TORRENT.indexOf(url.mimeType) !== -1 &&
|
||||
isActivityPubUrlValid(url.href) &&
|
||||
validator.isInt(url.height + '', { min: 0 })
|
||||
) ||
|
||||
(
|
||||
ACTIVITY_PUB.URL_MIME_TYPES.MAGNET.indexOf(url.mimeType) !== -1 &&
|
||||
validator.isLength(url.href, { min: 5 }) &&
|
||||
validator.isInt(url.height + '', { min: 0 })
|
||||
)
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue