Builtin Prosody: use Peertube domain instead of localhost.
This commit is contained in:
parent
2e7c5b295a
commit
f590cf2c7b
@ -3,6 +3,7 @@ import * as path from 'path'
|
|||||||
import { pluginName, getBaseRouter } from '../helpers'
|
import { pluginName, getBaseRouter } from '../helpers'
|
||||||
import { ProsodyFilePaths } from './config/paths'
|
import { ProsodyFilePaths } from './config/paths'
|
||||||
import { ProsodyConfigContent } from './config/content'
|
import { ProsodyConfigContent } from './config/content'
|
||||||
|
import { getProsodyDomain } from './config/domain'
|
||||||
import { getAPIKey } from '../apikey'
|
import { getAPIKey } from '../apikey'
|
||||||
|
|
||||||
async function getWorkingDir ({ peertubeHelpers, storageManager }: RegisterServerOptions): Promise<string> {
|
async function getWorkingDir ({ peertubeHelpers, storageManager }: RegisterServerOptions): Promise<string> {
|
||||||
@ -92,7 +93,7 @@ async function getProsodyConfig (options: RegisterServerOptions): Promise<Prosod
|
|||||||
if (!/^\d+$/.test(port)) {
|
if (!/^\d+$/.test(port)) {
|
||||||
throw new Error('Invalid port')
|
throw new Error('Invalid port')
|
||||||
}
|
}
|
||||||
const peertubeDomain = 'localhost'
|
const prosodyDomain = await getProsodyDomain(options)
|
||||||
const paths = await getProsodyFilePaths(options)
|
const paths = await getProsodyFilePaths(options)
|
||||||
|
|
||||||
const apikey = await getAPIKey(options)
|
const apikey = await getAPIKey(options)
|
||||||
@ -102,9 +103,9 @@ async function getProsodyConfig (options: RegisterServerOptions): Promise<Prosod
|
|||||||
const authApiUrl = baseApiUrl + 'user' // FIXME: should be protected by apikey, but mod_auth_http cant handle params
|
const authApiUrl = baseApiUrl + 'user' // FIXME: should be protected by apikey, but mod_auth_http cant handle params
|
||||||
const roomApiUrl = baseApiUrl + 'room?apikey=' + apikey + '&jid={room.jid|jid_node}'
|
const roomApiUrl = baseApiUrl + 'room?apikey=' + apikey + '&jid={room.jid|jid_node}'
|
||||||
|
|
||||||
const config = new ProsodyConfigContent(paths)
|
const config = new ProsodyConfigContent(paths, prosodyDomain)
|
||||||
config.useHttpAuthentication(authApiUrl)
|
config.useHttpAuthentication(authApiUrl)
|
||||||
config.usePeertubeBosh(peertubeDomain, port)
|
config.usePeertubeBosh(prosodyDomain, port)
|
||||||
config.useMucHttpDefault(roomApiUrl)
|
config.useMucHttpDefault(roomApiUrl)
|
||||||
config.setArchive('1w') // Remove archived messages after 1 week
|
config.setArchive('1w') // Remove archived messages after 1 week
|
||||||
config.setLog(process.env.NODE_ENV === 'test' ? 'debug' : 'info')
|
config.setLog(process.env.NODE_ENV === 'test' ? 'debug' : 'info')
|
||||||
|
@ -1,7 +1,10 @@
|
|||||||
|
import { getProsodyDomain } from './domain'
|
||||||
|
|
||||||
interface Affiliations { [jid: string]: 'outcast' | 'none' | 'member' | 'admin' | 'owner' }
|
interface Affiliations { [jid: string]: 'outcast' | 'none' | 'member' | 'admin' | 'owner' }
|
||||||
|
|
||||||
async function getVideoAffiliations (options: RegisterServerOptions, video: MVideoThumbnail): Promise<Affiliations> {
|
async function getVideoAffiliations (options: RegisterServerOptions, video: MVideoThumbnail): Promise<Affiliations> {
|
||||||
const peertubeHelpers = options.peertubeHelpers
|
const peertubeHelpers = options.peertubeHelpers
|
||||||
|
const prosodyDomain = await getProsodyDomain(options)
|
||||||
// Get all admins and moderators
|
// Get all admins and moderators
|
||||||
const [results] = await peertubeHelpers.database.query(
|
const [results] = await peertubeHelpers.database.query(
|
||||||
'SELECT "username" FROM "user"' +
|
'SELECT "username" FROM "user"' +
|
||||||
@ -19,7 +22,7 @@ async function getVideoAffiliations (options: RegisterServerOptions, video: MVid
|
|||||||
if (!('username' in result)) {
|
if (!('username' in result)) {
|
||||||
throw new Error('getVideoAffiliations: no username field in result')
|
throw new Error('getVideoAffiliations: no username field in result')
|
||||||
}
|
}
|
||||||
const jid = (result.username as string) + '@localhost'
|
const jid = (result.username as string) + '@' + prosodyDomain
|
||||||
r[jid] = 'owner'
|
r[jid] = 'owner'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -29,7 +32,7 @@ async function getVideoAffiliations (options: RegisterServerOptions, video: MVid
|
|||||||
if (!video.remote) {
|
if (!video.remote) {
|
||||||
// don't add the video owner if it is a remote video!
|
// don't add the video owner if it is a remote video!
|
||||||
const userName = await _getVideoOwnerUsername(options, video)
|
const userName = await _getVideoOwnerUsername(options, video)
|
||||||
const userJid = userName + '@localhost'
|
const userJid = userName + '@' + prosodyDomain
|
||||||
r[userJid] = 'admin'
|
r[userJid] = 'admin'
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
|
@ -103,13 +103,15 @@ class ProsodyConfigContent {
|
|||||||
anon: ProsodyConfigVirtualHost
|
anon: ProsodyConfigVirtualHost
|
||||||
muc: ProsodyConfigComponent
|
muc: ProsodyConfigComponent
|
||||||
log: string
|
log: string
|
||||||
|
prosodyDomain: string
|
||||||
|
|
||||||
constructor (paths: ProsodyFilePaths) {
|
constructor (paths: ProsodyFilePaths, prosodyDomain: string) {
|
||||||
this.paths = paths
|
this.paths = paths
|
||||||
this.global = new ProsodyConfigGlobal()
|
this.global = new ProsodyConfigGlobal()
|
||||||
this.log = ''
|
this.log = ''
|
||||||
this.anon = new ProsodyConfigVirtualHost('anon.localhost')
|
this.prosodyDomain = prosodyDomain
|
||||||
this.muc = new ProsodyConfigComponent('muc', 'room.localhost')
|
this.anon = new ProsodyConfigVirtualHost('anon.' + prosodyDomain)
|
||||||
|
this.muc = new ProsodyConfigComponent('muc', 'room.' + prosodyDomain)
|
||||||
|
|
||||||
this.global.set('daemonize', false)
|
this.global.set('daemonize', false)
|
||||||
this.global.set('allow_registration', false)
|
this.global.set('allow_registration', false)
|
||||||
@ -157,7 +159,7 @@ class ProsodyConfigContent {
|
|||||||
}
|
}
|
||||||
|
|
||||||
useHttpAuthentication (url: string): void {
|
useHttpAuthentication (url: string): void {
|
||||||
this.authenticated = new ProsodyConfigVirtualHost('localhost')
|
this.authenticated = new ProsodyConfigVirtualHost(this.prosodyDomain)
|
||||||
|
|
||||||
this.authenticated.set('authentication', 'http')
|
this.authenticated.set('authentication', 'http')
|
||||||
this.authenticated.set('modules_enabled', ['ping', 'auth_http'])
|
this.authenticated.set('modules_enabled', ['ping', 'auth_http'])
|
||||||
@ -165,7 +167,7 @@ class ProsodyConfigContent {
|
|||||||
this.authenticated.set('http_auth_url', url)
|
this.authenticated.set('http_auth_url', url)
|
||||||
}
|
}
|
||||||
|
|
||||||
usePeertubeBosh (peertubeDomain: string, port: string): void {
|
usePeertubeBosh (prosodyDomain: string, port: string): void {
|
||||||
this.global.set('c2s_require_encryption', false)
|
this.global.set('c2s_require_encryption', false)
|
||||||
this.global.set('interfaces', ['127.0.0.1', '::1'])
|
this.global.set('interfaces', ['127.0.0.1', '::1'])
|
||||||
this.global.set('c2s_ports', [])
|
this.global.set('c2s_ports', [])
|
||||||
@ -183,8 +185,8 @@ class ProsodyConfigContent {
|
|||||||
this.anon.set('allow_anonymous_s2s', false)
|
this.anon.set('allow_anonymous_s2s', false)
|
||||||
this.anon.add('modules_enabled', 'http')
|
this.anon.add('modules_enabled', 'http')
|
||||||
this.anon.add('modules_enabled', 'bosh')
|
this.anon.add('modules_enabled', 'bosh')
|
||||||
this.anon.set('http_host', peertubeDomain)
|
this.anon.set('http_host', prosodyDomain)
|
||||||
this.anon.set('http_external_url', 'http://' + peertubeDomain)
|
this.anon.set('http_external_url', 'http://' + prosodyDomain)
|
||||||
|
|
||||||
this.muc.set('restrict_room_creation', 'local')
|
this.muc.set('restrict_room_creation', 'local')
|
||||||
|
|
||||||
@ -193,8 +195,8 @@ class ProsodyConfigContent {
|
|||||||
this.authenticated.set('allow_anonymous_s2s', false)
|
this.authenticated.set('allow_anonymous_s2s', false)
|
||||||
this.authenticated.add('modules_enabled', 'http')
|
this.authenticated.add('modules_enabled', 'http')
|
||||||
this.authenticated.add('modules_enabled', 'bosh')
|
this.authenticated.add('modules_enabled', 'bosh')
|
||||||
this.authenticated.set('http_host', peertubeDomain)
|
this.authenticated.set('http_host', prosodyDomain)
|
||||||
this.authenticated.set('http_external_url', 'http://' + peertubeDomain)
|
this.authenticated.set('http_external_url', 'http://' + prosodyDomain)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
12
server/lib/prosody/config/domain.ts
Normal file
12
server/lib/prosody/config/domain.ts
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
async function getProsodyDomain (options: RegisterServerOptions): Promise<string> {
|
||||||
|
const url = options.peertubeHelpers.config.getWebserverUrl()
|
||||||
|
const matches = url.match(/^https?:\/\/([^:/]*)(:\d+)?(\/|$)/)
|
||||||
|
if (!matches) {
|
||||||
|
throw new Error(`Cant get a domain name from url '${url}'`)
|
||||||
|
}
|
||||||
|
return matches[1]
|
||||||
|
}
|
||||||
|
|
||||||
|
export {
|
||||||
|
getProsodyDomain
|
||||||
|
}
|
@ -5,6 +5,7 @@ import { getCheckAPIKeyMiddleware } from '../middlewares/apikey'
|
|||||||
import { prosodyCheckUserPassword, prosodyRegisterUser, prosodyUserRegistered } from '../prosody/auth'
|
import { prosodyCheckUserPassword, prosodyRegisterUser, prosodyUserRegistered } from '../prosody/auth'
|
||||||
import { getAuthUser, getUserNickname } from '../helpers'
|
import { getAuthUser, getUserNickname } from '../helpers'
|
||||||
import { Affiliations, getVideoAffiliations } from '../prosody/config/affiliations'
|
import { Affiliations, getVideoAffiliations } from '../prosody/config/affiliations'
|
||||||
|
import { getProsodyDomain } from '../prosody/config/domain'
|
||||||
|
|
||||||
// See here for description: https://modules.prosody.im/mod_muc_http_defaults.html
|
// See here for description: https://modules.prosody.im/mod_muc_http_defaults.html
|
||||||
interface RoomDefaults {
|
interface RoomDefaults {
|
||||||
@ -100,10 +101,11 @@ async function initApiRouter (options: RegisterServerOptions): Promise<Router> {
|
|||||||
res.sendStatus(403)
|
res.sendStatus(403)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
const prosodyDomain = await getProsodyDomain(options)
|
||||||
const password: string = await prosodyRegisterUser(user.username)
|
const password: string = await prosodyRegisterUser(user.username)
|
||||||
const nickname: string | undefined = await getUserNickname(options, user)
|
const nickname: string | undefined = await getUserNickname(options, user)
|
||||||
res.status(200).json({
|
res.status(200).json({
|
||||||
jid: user.username + '@localhost',
|
jid: user.username + '@' + prosodyDomain,
|
||||||
password: password,
|
password: password,
|
||||||
nickname: nickname
|
nickname: nickname
|
||||||
})
|
})
|
||||||
@ -130,10 +132,11 @@ async function initApiRouter (options: RegisterServerOptions): Promise<Router> {
|
|||||||
res.status(200).send('false')
|
res.status(200).send('false')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
const prosodyDomain = await getProsodyDomain(options)
|
||||||
const user = req.query.user
|
const user = req.query.user
|
||||||
const server = req.query.server
|
const server = req.query.server
|
||||||
const pass = req.query.pass
|
const pass = req.query.pass
|
||||||
if (server !== 'localhost') {
|
if (server !== prosodyDomain) {
|
||||||
logger.warn(`Cannot call check_password on user on server ${server as string}.`)
|
logger.warn(`Cannot call check_password on user on server ${server as string}.`)
|
||||||
res.status(200).send('false')
|
res.status(200).send('false')
|
||||||
return
|
return
|
||||||
@ -160,9 +163,10 @@ async function initApiRouter (options: RegisterServerOptions): Promise<Router> {
|
|||||||
res.status(200).send('false')
|
res.status(200).send('false')
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
const prosodyDomain = await getProsodyDomain(options)
|
||||||
const user = req.query.user
|
const user = req.query.user
|
||||||
const server = req.query.server
|
const server = req.query.server
|
||||||
if (server !== 'localhost') {
|
if (server !== prosodyDomain) {
|
||||||
logger.warn(`Cannot call user_exists on user on server ${server as string}.`)
|
logger.warn(`Cannot call user_exists on user on server ${server as string}.`)
|
||||||
res.status(200).send('false')
|
res.status(200).send('false')
|
||||||
return
|
return
|
||||||
|
@ -2,6 +2,7 @@ import type { Router, RequestHandler, Request, Response, NextFunction } from 'ex
|
|||||||
import type { ProxyOptions } from 'express-http-proxy'
|
import type { ProxyOptions } from 'express-http-proxy'
|
||||||
import { getBaseRouter } from '../helpers'
|
import { getBaseRouter } from '../helpers'
|
||||||
import { asyncMiddleware } from '../middlewares/async'
|
import { asyncMiddleware } from '../middlewares/async'
|
||||||
|
import { getProsodyDomain } from '../prosody/config/domain'
|
||||||
import * as path from 'path'
|
import * as path from 'path'
|
||||||
const bodyParser = require('body-parser')
|
const bodyParser = require('body-parser')
|
||||||
|
|
||||||
@ -35,8 +36,9 @@ async function initWebchatRouter (options: RegisterServerOptions): Promise<Route
|
|||||||
let authenticationUrl: string = ''
|
let authenticationUrl: string = ''
|
||||||
let advancedControls: boolean = false
|
let advancedControls: boolean = false
|
||||||
if (settings['chat-use-prosody']) {
|
if (settings['chat-use-prosody']) {
|
||||||
server = 'anon.localhost'
|
const prosodyDomain = await getProsodyDomain(options)
|
||||||
room = '{{VIDEO_UUID}}@room.localhost'
|
server = 'anon.' + prosodyDomain
|
||||||
|
room = '{{VIDEO_UUID}}@room.' + prosodyDomain
|
||||||
boshUri = getBaseRouter() + 'webchat/http-bind'
|
boshUri = getBaseRouter() + 'webchat/http-bind'
|
||||||
wsUri = ''
|
wsUri = ''
|
||||||
authenticationUrl = options.peertubeHelpers.config.getWebserverUrl() +
|
authenticationUrl = options.peertubeHelpers.config.getWebserverUrl() +
|
||||||
|
Loading…
x
Reference in New Issue
Block a user