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:
parent
4278710d5b
commit
3f6d68d967
7 changed files with 246 additions and 16 deletions
|
@ -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()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue