import * as Bluebird from 'bluebird'
import * as validator from 'validator'
import { ResultList } from '../../shared/models'
-import { Activity, ActivityPubActor } from '../../shared/models/activitypub'
+import { Activity } from '../../shared/models/activitypub'
import { ACTIVITY_PUB } from '../initializers'
import { ActorModel } from '../models/activitypub/actor'
import { signJsonLDObject } from './peertube-crypto'
import { pageToStartAndCount } from './core-utils'
+import { parse } from 'url'
function activityPubContextify <T> (data: T) {
return Object.assign(data, {
sensitive: 'as:sensitive',
language: 'sc:inLanguage',
views: 'sc:Number',
- stats: 'sc:Number',
+ state: 'sc:Number',
size: 'sc:Number',
fps: 'sc:Number',
commentsEnabled: 'sc:Boolean',
}
type ActivityPubCollectionPaginationHandler = (start: number, count: number) => Bluebird<ResultList<any>> | Promise<ResultList<any>>
-async function activityPubCollectionPagination (url: string, handler: ActivityPubCollectionPaginationHandler, page?: any) {
+async function activityPubCollectionPagination (baseUrl: string, handler: ActivityPubCollectionPaginationHandler, page?: any) {
if (!page || !validator.isInt(page)) {
// We just display the first page URL, we only need the total items
const result = await handler(0, 1)
return {
- id: url,
+ id: baseUrl,
type: 'OrderedCollection',
totalItems: result.total,
- first: url + '?page=1'
+ first: baseUrl + '?page=1'
}
}
// There are more results
if (result.total > page * ACTIVITY_PUB.COLLECTION_ITEMS_PER_PAGE) {
- next = url + '?page=' + (page + 1)
+ next = baseUrl + '?page=' + (page + 1)
}
if (page > 1) {
- prev = url + '?page=' + (page - 1)
+ prev = baseUrl + '?page=' + (page - 1)
}
return {
- id: url + '?page=' + page,
+ id: baseUrl + '?page=' + page,
type: 'OrderedCollectionPage',
prev,
next,
- partOf: url,
+ partOf: baseUrl,
orderedItems: result.data,
totalItems: result.total
}
return signJsonLDObject(byActor, activity) as Promise<Activity>
}
-function getActorUrl (activityActor: string | ActivityPubActor) {
- if (typeof activityActor === 'string') return activityActor
+function getAPId (activity: string | { id: string }) {
+ if (typeof activity === 'string') return activity
- return activityActor.id
+ return activity.id
+}
+
+function checkUrlsSameHost (url1: string, url2: string) {
+ const idHost = parse(url1).host
+ const actorHost = parse(url2).host
+
+ return idHost && actorHost && idHost.toLowerCase() === actorHost.toLowerCase()
}
// ---------------------------------------------------------------------------
export {
- getActorUrl,
+ checkUrlsSameHost,
+ getAPId,
activityPubContextify,
activityPubCollectionPagination,
buildSignedActivity