diff --git a/conversejs/builtin.ts b/conversejs/builtin.ts index 6da5cef3..214faed8 100644 --- a/conversejs/builtin.ts +++ b/conversejs/builtin.ts @@ -17,6 +17,7 @@ function inIframe (): boolean { interface AuthentInfos { jid: string password: string + nickname?: string } async function authenticatedMode (authenticationUrl: string): Promise { try { @@ -61,7 +62,8 @@ async function authenticatedMode (authenticationUrl: string): Promise { + const logger = peertubeHelpers.logger + if (!Number.isInteger(id)) { + logger.error('getUserNickname: Invalid User Id, should be an integer') + return undefined + } + const [results] = await peertubeHelpers.database.query(`SELECT name FROM "account" WHERE "userId" = ${id}`) + if (!Array.isArray(results)) { + logger.error('getUserNickname: query result is not an array.') + return undefined + } + if (!results[0]) { + logger.error(`getUserNickname: no result for id ${id}`) + return undefined + } + if (typeof results[0] !== 'object') { + logger.error('getUserNickname: query result is not an object') + return undefined + } + if (!('name' in results[0])) { + logger.error('getUserNickname: no name field in result') + return undefined + } + return results[0].name as string +} + export { getBaseRouter, getBaseStaticRoute, isUserAdmin, getAuthUser, + getUserNickname, pluginName, pluginShortName } diff --git a/server/lib/routers/api.ts b/server/lib/routers/api.ts index bf751348..686f24bf 100644 --- a/server/lib/routers/api.ts +++ b/server/lib/routers/api.ts @@ -2,7 +2,7 @@ import type { Router, Request, Response, NextFunction } from 'express' import { videoHasWebchat } from '../../../shared/lib/video' import { asyncMiddleware } from '../middlewares/async' import { prosodyCheckUserPassword, prosodyRegisterUser, prosodyUserRegistered } from '../prosody/auth' -import { getAuthUser } from '../helpers' +import { getAuthUser, getUserNickname } from '../helpers' // See here for description: https://modules.prosody.im/mod_muc_http_defaults.html interface RoomDefaults { @@ -92,10 +92,17 @@ async function initApiRouter (options: RegisterServerOptions): Promise { res.sendStatus(403) return } + let userId: number | undefined + if (user.id) { + userId = parseInt(user.id) + if (Number.isNaN(userId)) { userId = undefined } + } const password: string = await prosodyRegisterUser(user.username) + const nickname: string | undefined = userId ? (await getUserNickname(options, userId)) : undefined res.status(200).json({ jid: user.username + '@localhost', - password: password + password: password, + nickname: nickname }) } ))