1
0
Fork 0
mirror of https://github.com/Chocobozzz/PeerTube.git synced 2025-10-05 19:42:24 +02:00

adding initial support for nodeinfo

This commit is contained in:
Rigel Kent 2018-07-21 23:00:25 +02:00 committed by Chocobozzz
parent 4278710d5b
commit 3f6d68d967
7 changed files with 246 additions and 16 deletions

View file

@ -1,11 +1,16 @@
import * as cors from 'cors'
import * as express from 'express'
import { CONFIG, STATIC_DOWNLOAD_PATHS, STATIC_MAX_AGE, STATIC_PATHS } from '../initializers'
import { CONFIG, STATIC_DOWNLOAD_PATHS, STATIC_MAX_AGE, STATIC_PATHS, ROUTE_CACHE_LIFETIME } from '../initializers'
import { VideosPreviewCache } from '../lib/cache'
import { cache } from '../middlewares/cache'
import { asyncMiddleware, videosGetValidator } from '../middlewares'
import { VideoModel } from '../models/video/video'
import { VideosCaptionCache } from '../lib/cache/videos-caption-cache'
import { UserModel } from '../models/account/user'
import { VideoCommentModel } from '../models/video/video-comment'
import { HttpNodeinfoDiasporaSoftwareNsSchema20 } from '../models/nodeinfo'
const packageJSON = require('../../../package.json')
const staticRouter = express.Router()
staticRouter.use(cors())
@ -65,10 +70,32 @@ staticRouter.use(
)
// robots.txt service
staticRouter.get('/robots.txt', (req: express.Request, res: express.Response) => {
res.type('text/plain')
return res.send(CONFIG.INSTANCE.ROBOTS)
})
staticRouter.get('/robots.txt',
asyncMiddleware(cache(ROUTE_CACHE_LIFETIME.ROBOTS)),
(_, res: express.Response) => {
res.type('text/plain')
return res.send(CONFIG.INSTANCE.ROBOTS)
}
)
// nodeinfo service
staticRouter.use('/.well-known/nodeinfo',
asyncMiddleware(cache(ROUTE_CACHE_LIFETIME.NODEINFO)),
(_, res: express.Response) => {
return res.json({
links: [
{
rel: 'http://nodeinfo.diaspora.software/ns/schema/2.0',
href: CONFIG.WEBSERVER.URL + '/nodeinfo/2.0.json'
}
]
})
}
)
staticRouter.use('/nodeinfo/:version.json',
asyncMiddleware(cache(ROUTE_CACHE_LIFETIME.NODEINFO)),
asyncMiddleware(generateNodeinfo)
)
// ---------------------------------------------------------------------------
@ -95,6 +122,54 @@ async function getVideoCaption (req: express.Request, res: express.Response) {
return res.sendFile(path, { maxAge: STATIC_MAX_AGE })
}
async function generateNodeinfo (req: express.Request, res: express.Response, next: express.NextFunction) {
const { totalVideos } = await VideoModel.getStats()
const { totalLocalVideoComments } = await VideoCommentModel.getStats()
const { totalUsers } = await UserModel.getStats()
let json = {}
if (req.params.version && (req.params.version === '2.0')) {
json = {
version: '2.0',
software: {
name: 'peertube',
version: packageJSON.version
},
protocols: [
'activitypub'
],
services: {
inbound: [],
outbound: [
'atom1.0',
'rss2.0'
]
},
openRegistrations: CONFIG.SIGNUP.ENABLED,
usage: {
users: {
total: totalUsers
},
localPosts: totalVideos,
localComments: totalLocalVideoComments
},
metadata: {
taxonomy: {
postsName: 'Videos'
},
nodeName: CONFIG.INSTANCE.NAME,
nodeDescription: CONFIG.INSTANCE.SHORT_DESCRIPTION
}
} as HttpNodeinfoDiasporaSoftwareNsSchema20
res.set('Content-Type', 'application/json; profile=http://nodeinfo.diaspora.software/ns/schema/2.0#; charset=utf-8')
} else {
json = { error: 'Nodeinfo schema version not handled' }
res.status(404)
}
return res.end(JSON.stringify(json))
}
async function downloadTorrent (req: express.Request, res: express.Response, next: express.NextFunction) {
const { video, videoFile } = getVideoAndFile(req, res)
if (!videoFile) return res.status(404).end()