-import * as url from 'url'
-
-import { database as db } from '../initializers'
-import { logger } from './logger'
-import { doRequest } from './requests'
-import { isRemoteAccountValid } from './custom-validators'
-import { ActivityPubActor } from '../../shared/models/activitypub/activitypub-actor'
-import { ResultList } from '../../shared/models/result-list.model'
-
-async function fetchRemoteAccountAndCreatePod (accountUrl: string) {
- const options = {
- uri: accountUrl,
- method: 'GET'
- }
-
- let requestResult
- try {
- requestResult = await doRequest(options)
- } catch (err) {
- logger.warning('Cannot fetch remote account %s.', accountUrl, err)
- return undefined
- }
-
- const accountJSON: ActivityPubActor = requestResult.body
- if (isRemoteAccountValid(accountJSON) === false) return undefined
-
- const followersCount = await fetchAccountCount(accountJSON.followers)
- const followingCount = await fetchAccountCount(accountJSON.following)
-
- const account = db.Account.build({
- uuid: accountJSON.uuid,
- name: accountJSON.preferredUsername,
- url: accountJSON.url,
- publicKey: accountJSON.publicKey.publicKeyPem,
- privateKey: null,
- followersCount: followersCount,
- followingCount: followingCount,
- inboxUrl: accountJSON.inbox,
- outboxUrl: accountJSON.outbox,
- sharedInboxUrl: accountJSON.endpoints.sharedInbox,
- followersUrl: accountJSON.followers,
- followingUrl: accountJSON.following
- })
-
- const accountHost = url.parse(account.url).host
- const podOptions = {
- where: {
- host: accountHost
- },
- defaults: {
- host: accountHost
- }
- }
- const pod = await db.Pod.findOrCreate(podOptions)
-
- return { account, pod }
-}
-
-function activityPubContextify (data: object) {
- return Object.assign(data,{
+import * as Bluebird from 'bluebird'
+import * as validator from 'validator'
+import { ResultList } from '../../shared/models'
+import { Activity, ActivityPubActor } from '../../shared/models/activitypub'
+import { ACTIVITY_PUB } from '../initializers'
+import { ActorModel } from '../models/activitypub/actor'
+import { signObject } from './peertube-crypto'
+import { pageToStartAndCount } from './core-utils'
+
+function activityPubContextify <T> (data: T) {
+ return Object.assign(data, {