Bump version to 5.4.3

pull/28028/head
Guilherme Gazzo 3 years ago
parent 87f116bab7
commit 22671a9e18
  1. 7
      .github/history-manual.json
  2. 12
      HISTORY.md
  3. 2
      apps/meteor/.docker/Dockerfile.rhel
  4. 6
      apps/meteor/app/2fa/server/loginHandler.ts
  5. 8
      apps/meteor/app/2fa/server/methods/enable.ts
  6. 5
      apps/meteor/app/authentication/server/startup/index.js
  7. 22
      apps/meteor/app/emoji-custom/server/methods/listEmojiCustom.js
  8. 2
      apps/meteor/app/lib/server/methods/sendMessage.js
  9. 12
      apps/meteor/app/lib/server/methods/updateMessage.js
  10. 5
      apps/meteor/app/markdown/lib/markdown.js
  11. 15
      apps/meteor/app/slashcommands-kick/server/server.ts
  12. 16
      apps/meteor/app/slashcommands-mute/server/mute.ts
  13. 14
      apps/meteor/app/slashcommands-mute/server/unmute.ts
  14. 6
      apps/meteor/app/ui-utils/lib/MessageProperties.js
  15. 2
      apps/meteor/app/ui/client/lib/ChatMessages.ts
  16. 5
      apps/meteor/app/ui/client/lib/accounts.js
  17. 2
      apps/meteor/app/utils/rocketchat.info
  18. 13
      apps/meteor/client/components/TwoFactorModal/TwoFactorModal.tsx
  19. 8
      apps/meteor/client/lib/utils/renderMessageBody.ts
  20. 7
      apps/meteor/client/views/account/security/TwoFactorTOTP.tsx
  21. 5
      apps/meteor/lib/utils/safeHtmlDots.ts
  22. 3
      apps/meteor/package.json
  23. 1
      apps/meteor/packages/rocketchat-i18n/i18n/af.i18n.json
  24. 1
      apps/meteor/packages/rocketchat-i18n/i18n/ar.i18n.json
  25. 1
      apps/meteor/packages/rocketchat-i18n/i18n/az.i18n.json
  26. 1
      apps/meteor/packages/rocketchat-i18n/i18n/be-BY.i18n.json
  27. 1
      apps/meteor/packages/rocketchat-i18n/i18n/bg.i18n.json
  28. 1
      apps/meteor/packages/rocketchat-i18n/i18n/bs.i18n.json
  29. 1
      apps/meteor/packages/rocketchat-i18n/i18n/ca.i18n.json
  30. 1
      apps/meteor/packages/rocketchat-i18n/i18n/cs.i18n.json
  31. 1
      apps/meteor/packages/rocketchat-i18n/i18n/cy.i18n.json
  32. 1
      apps/meteor/packages/rocketchat-i18n/i18n/da.i18n.json
  33. 1
      apps/meteor/packages/rocketchat-i18n/i18n/de-AT.i18n.json
  34. 1
      apps/meteor/packages/rocketchat-i18n/i18n/de-IN.i18n.json
  35. 3
      apps/meteor/packages/rocketchat-i18n/i18n/de.i18n.json
  36. 1
      apps/meteor/packages/rocketchat-i18n/i18n/el.i18n.json
  37. 1
      apps/meteor/packages/rocketchat-i18n/i18n/en.i18n.json
  38. 1
      apps/meteor/packages/rocketchat-i18n/i18n/eo.i18n.json
  39. 1
      apps/meteor/packages/rocketchat-i18n/i18n/es.i18n.json
  40. 1
      apps/meteor/packages/rocketchat-i18n/i18n/fa.i18n.json
  41. 1
      apps/meteor/packages/rocketchat-i18n/i18n/fi.i18n.json
  42. 1
      apps/meteor/packages/rocketchat-i18n/i18n/fr.i18n.json
  43. 1
      apps/meteor/packages/rocketchat-i18n/i18n/he.i18n.json
  44. 1
      apps/meteor/packages/rocketchat-i18n/i18n/hr.i18n.json
  45. 1
      apps/meteor/packages/rocketchat-i18n/i18n/hu.i18n.json
  46. 1
      apps/meteor/packages/rocketchat-i18n/i18n/id.i18n.json
  47. 1
      apps/meteor/packages/rocketchat-i18n/i18n/it.i18n.json
  48. 1
      apps/meteor/packages/rocketchat-i18n/i18n/ja.i18n.json
  49. 1
      apps/meteor/packages/rocketchat-i18n/i18n/ka-GE.i18n.json
  50. 1
      apps/meteor/packages/rocketchat-i18n/i18n/km.i18n.json
  51. 1
      apps/meteor/packages/rocketchat-i18n/i18n/ko.i18n.json
  52. 1
      apps/meteor/packages/rocketchat-i18n/i18n/ku.i18n.json
  53. 1
      apps/meteor/packages/rocketchat-i18n/i18n/lo.i18n.json
  54. 1
      apps/meteor/packages/rocketchat-i18n/i18n/lt.i18n.json
  55. 1
      apps/meteor/packages/rocketchat-i18n/i18n/lv.i18n.json
  56. 1
      apps/meteor/packages/rocketchat-i18n/i18n/mn.i18n.json
  57. 1
      apps/meteor/packages/rocketchat-i18n/i18n/ms-MY.i18n.json
  58. 1
      apps/meteor/packages/rocketchat-i18n/i18n/nl.i18n.json
  59. 1
      apps/meteor/packages/rocketchat-i18n/i18n/no.i18n.json
  60. 1
      apps/meteor/packages/rocketchat-i18n/i18n/pl.i18n.json
  61. 1
      apps/meteor/packages/rocketchat-i18n/i18n/pt-BR.i18n.json
  62. 1
      apps/meteor/packages/rocketchat-i18n/i18n/pt.i18n.json
  63. 1
      apps/meteor/packages/rocketchat-i18n/i18n/ro.i18n.json
  64. 1
      apps/meteor/packages/rocketchat-i18n/i18n/ru.i18n.json
  65. 1
      apps/meteor/packages/rocketchat-i18n/i18n/sk-SK.i18n.json
  66. 1
      apps/meteor/packages/rocketchat-i18n/i18n/sl-SI.i18n.json
  67. 1
      apps/meteor/packages/rocketchat-i18n/i18n/sq.i18n.json
  68. 1
      apps/meteor/packages/rocketchat-i18n/i18n/sr.i18n.json
  69. 5
      apps/meteor/packages/rocketchat-i18n/i18n/sv.i18n.json
  70. 1
      apps/meteor/packages/rocketchat-i18n/i18n/ta-IN.i18n.json
  71. 1
      apps/meteor/packages/rocketchat-i18n/i18n/th-TH.i18n.json
  72. 1
      apps/meteor/packages/rocketchat-i18n/i18n/tr.i18n.json
  73. 1
      apps/meteor/packages/rocketchat-i18n/i18n/ug.i18n.json
  74. 1
      apps/meteor/packages/rocketchat-i18n/i18n/uk.i18n.json
  75. 1
      apps/meteor/packages/rocketchat-i18n/i18n/vi-VN.i18n.json
  76. 1
      apps/meteor/packages/rocketchat-i18n/i18n/zh-HK.i18n.json
  77. 1
      apps/meteor/packages/rocketchat-i18n/i18n/zh-TW.i18n.json
  78. 1
      apps/meteor/packages/rocketchat-i18n/i18n/zh.i18n.json
  79. 52
      apps/meteor/tests/end-to-end/api/24-methods.js
  80. 11
      apps/meteor/tests/unit/app/ui-utils/server.tests.js
  81. 2
      package.json
  82. 1
      packages/model-typings/src/models/IUsersModel.ts
  83. 1
      yarn.lock

@ -210,5 +210,12 @@
"contributors": [
"ggazzo"
]
}],
"5.4.3": [{
"title": "[FIX] Security Hotfix (https://docs.rocket.chat/guides/security/security-updates)",
"userLogin": "ggazzo",
"contributors": [
"ggazzo"
]
}]
}

@ -1,4 +1,16 @@
# 5.4.3
`2023-02-14 · 1 🐛 · 1 👩💻👨💻`
### 🐛 Bug fixes
- Security Hotfix (https://docs.rocket.chat/guides/security/security-updates)
### 👩💻👨💻 Core Team 🤓
- [@ggazzo](https://github.com/ggazzo)
# 5.4.2
`2023-01-24 · 1 🚀 · 5 🐛 · 6 👩💻👨💻`

@ -1,6 +1,6 @@
FROM registry.access.redhat.com/ubi8/nodejs-12
ENV RC_VERSION 5.4.2
ENV RC_VERSION 5.4.3
MAINTAINER buildmaster@rocket.chat

@ -26,7 +26,11 @@ Accounts.registerLoginHandler('totp', function (options) {
callbacks.add(
'onValidateLogin',
(login) => {
if (login.type === 'resume' || login.type === 'proxy' || login.methodName === 'verifyEmail') {
if (login.methodName === 'verifyEmail') {
throw new Meteor.Error('verify-email', 'E-mail verified');
}
if (login.type === 'resume' || login.type === 'proxy') {
return login;
}
// CAS login doesn't yet support 2FA.

@ -18,6 +18,14 @@ Meteor.methods({
});
}
const hasUnverifiedEmail = user.emails?.some((email) => !email.verified);
if (hasUnverifiedEmail) {
throw new Meteor.Error('error-invalid-user', 'You need to verify your emails before setting up 2FA', {
method: '2fa:enable',
});
}
const secret = TOTP.generateSecret();
Users.disable2FAAndSetTempSecretByUserId(userId, secret.base32);

@ -19,6 +19,7 @@ import { getClientAddress } from '../../../../server/lib/getClientAddress';
import { getNewUserRoles } from '../../../../server/services/user/lib/getNewUserRoles';
import { AppEvents, Apps } from '../../../apps/server/orchestrator';
import { safeGetMeteorUser } from '../../../utils/server/functions/safeGetMeteorUser';
import { safeHtmlDots } from '/lib/utils/safeHtmlDots';
Accounts.config({
forbidClientAccountCreation: true,
@ -91,7 +92,9 @@ Meteor.startup(() => {
});
Accounts.emailTemplates.verifyEmail.html = function (userModel, url) {
return Mailer.replace(verifyEmailTemplate, { Verification_Url: url, name: userModel.name });
const name = safeHtmlDots(userModel.name);
return Mailer.replace(verifyEmailTemplate, { Verification_Url: url, name });
};
Accounts.emailTemplates.verifyEmail.subject = function () {

@ -1,8 +1,30 @@
import { Meteor } from 'meteor/meteor';
import { EmojiCustom } from '@rocket.chat/models';
import { check, Match } from 'meteor/check';
import { methodDeprecationLogger } from '../../../lib/server/lib/deprecationWarningLogger';
/**
* @deprecated Will be removed in future versions.
*/
Meteor.methods({
async listEmojiCustom(options = {}) {
methodDeprecationLogger.warn('listEmojiCustom will be removed in future versions of Rocket.Chat');
const user = Meteor.user();
if (!user) {
throw new Meteor.Error('error-invalid-user', 'Invalid user', {
method: 'listEmojiCustom',
});
}
check(options, {
name: Match.Optional(String),
aliases: Match.Optional([String]),
});
return EmojiCustom.find(options).toArray();
},
});

@ -45,7 +45,7 @@ export function executeSendMessage(uid, message) {
if (message.msg) {
const adjustedMessage = messageProperties.messageWithoutEmojiShortnames(message.msg);
if (messageProperties.length(adjustedMessage) > settings.get('Message_MaxAllowedSize')) {
if (adjustedMessage.length > settings.get('Message_MaxAllowedSize')) {
throw new Meteor.Error('error-message-size-exceeded', 'Message size exceeds Message_MaxAllowedSize', {
method: 'sendMessage',
});

@ -7,6 +7,8 @@ import { settings } from '../../../settings/server';
import { hasPermission, canSendMessage } from '../../../authorization/server';
import { updateMessage } from '../functions';
const allowedEditedFields = ['tshow', 'alias', 'attachments', 'avatar', 'emoji', 'msg'];
Meteor.methods({
updateMessage(message) {
check(message, Match.ObjectIncluding({ _id: String }));
@ -16,13 +18,19 @@ Meteor.methods({
}
const originalMessage = Messages.findOneById(message._id);
if (!originalMessage || !originalMessage._id) {
return;
}
const msgText = originalMessage?.attachments?.[0]?.description ?? originalMessage.msg;
Object.entries(message).forEach(([key, value]) => {
if (!allowedEditedFields.includes(key) && value !== originalMessage[key]) {
throw new Meteor.Error('error-invalid-update-key', `Cannot update the message ${key}`, {
method: 'updateMessage',
});
}
});
const msgText = originalMessage?.attachments?.[0]?.description ?? originalMessage.msg;
if (msgText === message.msg) {
return;
}

@ -107,13 +107,14 @@ export const createMarkdownMessageRenderer = ({ parser, ...options }) => {
}
const parse = typeof parsers[parser] === 'function' ? parsers[parser] : parsers.original;
const markedParser = parsers.marked;
return (message) => {
return (message, useMarkedPaser = false) => {
if (!message?.html?.trim()) {
return message;
}
return parse(message, options);
return useMarkedPaser ? markedParser(message, options) : parse(message, options);
};
};

@ -2,7 +2,7 @@
import { Meteor } from 'meteor/meteor';
import { TAPi18n } from 'meteor/rocketchat:tap-i18n';
import { Users, Subscriptions } from '../../models/server';
import { Users } from '../../models/server';
import { settings } from '../../settings/server';
import { slashCommands } from '../../utils/lib/slashCommand';
import { api } from '../../../server/sdk/api';
@ -31,19 +31,6 @@ slashCommands.add({
return;
}
const subscription = Subscriptions.findOneByRoomIdAndUserId(item.rid, userId, {
fields: { _id: 1 },
});
if (!subscription) {
api.broadcast('notify.ephemeralMessage', userId, item.rid, {
msg: TAPi18n.__('Username_is_not_in_this_room', {
postProcess: 'sprintf',
sprintf: [username],
lng,
}),
});
return;
}
const { rid } = item;
Meteor.call('removeUserFromRoom', { rid, username });
},

@ -3,7 +3,7 @@ import { TAPi18n } from 'meteor/rocketchat:tap-i18n';
import { slashCommands } from '../../utils/lib/slashCommand';
import { settings } from '../../settings/server';
import { Users, Subscriptions } from '../../models/server';
import { Users } from '../../models/server';
import { api } from '../../../server/sdk/api';
/*
@ -29,19 +29,7 @@ slashCommands.add({
}),
});
}
const subscription = Subscriptions.findOneByRoomIdAndUserId(item.rid, mutedUser._id, {
fields: { _id: 1 },
});
if (!subscription) {
api.broadcast('notify.ephemeralMessage', userId, item.rid, {
msg: TAPi18n.__('Username_is_not_in_this_room', {
postProcess: 'sprintf',
sprintf: [username],
lng: settings.get('Language') || 'en',
}),
});
return;
}
Meteor.call('muteUserInRoom', {
rid: item.rid,
username,

@ -2,7 +2,7 @@ import { Meteor } from 'meteor/meteor';
import { TAPi18n } from 'meteor/rocketchat:tap-i18n';
import { slashCommands } from '../../utils/lib/slashCommand';
import { Users, Subscriptions } from '../../models/server';
import { Users } from '../../models/server';
import { settings } from '../../settings/server';
import { api } from '../../../server/sdk/api';
@ -29,18 +29,6 @@ slashCommands.add({
});
}
const subscription = Subscriptions.findOneByRoomIdAndUserId(item.rid, unmutedUser._id, {
fields: { _id: 1 },
});
if (!subscription) {
return api.broadcast('notify.ephemeralMessage', userId, item.rid, {
msg: TAPi18n.__('Username_is_not_in_this_room', {
postProcess: 'sprintf',
sprintf: [username],
lng: settings.get('Language') || 'en',
}),
});
}
Meteor.call('unmuteUserInRoom', {
rid: item.rid,
username,

@ -1,12 +1,6 @@
import GraphemeSplitter from 'grapheme-splitter';
import { emoji } from '../../emoji';
const splitter = new GraphemeSplitter();
export const messageProperties = {
length: (message) => splitter.countGraphemes(message),
messageWithoutEmojiShortnames: (message) =>
message.replace(/:\w+:/gm, (match) => {
if (emoji.list[match] !== undefined) {

@ -463,7 +463,7 @@ export class ChatMessages {
private async processTooLongMessage({ msg, rid, tmid }: Pick<IMessage, 'msg' | 'rid' | 'tmid'>) {
const adjustedMessage = messageProperties.messageWithoutEmojiShortnames(msg);
if (messageProperties.length(adjustedMessage) <= settings.get('Message_MaxAllowedSize') && msg) {
if (adjustedMessage.length <= settings.get('Message_MaxAllowedSize') && msg) {
return false;
}

@ -4,14 +4,13 @@ import { Accounts } from 'meteor/accounts-base';
import { t } from '../../../utils';
import { dispatchToastMessage } from '../../../../client/lib/toast';
Accounts.onEmailVerificationLink(function (token, done) {
Accounts.onEmailVerificationLink(function (token) {
Accounts.verifyEmail(token, function (error) {
if (error == null) {
if (error.error === 'verify-email') {
dispatchToastMessage({ type: 'success', message: t('Email_verified') });
Meteor.call('afterVerifyEmail');
} else {
dispatchToastMessage({ type: 'error', message: error.message });
}
return done();
});
});

@ -1,3 +1,3 @@
{
"version": "5.4.2"
"version": "5.4.3"
}

@ -1,3 +1,4 @@
import { useEndpoint } from '@rocket.chat/ui-contexts';
import React, { ReactElement } from 'react';
import TwoFactorEmail from './TwoFactorEmailModal';
@ -26,18 +27,24 @@ type TwoFactorModalProps = {
);
const TwoFactorModal = ({ onConfirm, onClose, ...props }: TwoFactorModalProps): ReactElement => {
const logoutOtherSessions = useEndpoint('POST', '/v1/users.logoutOtherClients');
const confirm = (code: any, method: Method): void => {
onConfirm(code, method);
logoutOtherSessions();
};
if (props.method === Method.TOTP) {
return <TwoFactorTotp onConfirm={onConfirm} onClose={onClose} />;
return <TwoFactorTotp onConfirm={confirm} onClose={onClose} />;
}
if (props.method === Method.EMAIL) {
const { emailOrUsername } = props;
return <TwoFactorEmail onConfirm={onConfirm} onClose={onClose} emailOrUsername={emailOrUsername} />;
return <TwoFactorEmail onConfirm={confirm} onClose={onClose} emailOrUsername={emailOrUsername} />;
}
if (props.method === Method.PASSWORD) {
return <TwoFactorPassword onConfirm={onConfirm} onClose={onClose} />;
return <TwoFactorPassword onConfirm={confirm} onClose={onClose} />;
}
throw new Error('Invalid Two Factor method');

@ -3,12 +3,14 @@ import { escapeHTML } from '@rocket.chat/string-helpers';
import { callbacks } from '../../../lib/callbacks';
export const renderMessageBody = <T extends Partial<IMessage> & { tokens?: { token: string; text: string }[]; html?: string }>(
export const renderMessageBody = <
T extends Partial<IMessage> & { tokens?: { token: string; text: string }[]; html?: string; actionContext?: string },
>(
message: T,
): string => {
message.html = message.msg?.trim() ? escapeHTML(message.msg.trim()) : '';
const { tokens, html } = callbacks.run('renderMessage', message);
const isSearchMessage = message?.actionContext === 'search';
const { tokens, html } = callbacks.run('renderMessage', message, isSearchMessage);
return (Array.isArray(tokens) ? tokens.reverse() : []).reduce((html, { token, text }) => html.replace(token, () => text), html ?? '');
};

@ -1,6 +1,6 @@
import { Box, Button, TextInput, Margins } from '@rocket.chat/fuselage';
import { useSafely } from '@rocket.chat/fuselage-hooks';
import { useSetModal, useToastMessageDispatch, useUser, useMethod, useTranslation } from '@rocket.chat/ui-contexts';
import { useSetModal, useToastMessageDispatch, useUser, useMethod, useTranslation, useEndpoint } from '@rocket.chat/ui-contexts';
import React, { useState, useCallback, useEffect, ReactElement, ComponentProps } from 'react';
import qrcode from 'yaqrcode';
@ -15,6 +15,7 @@ const TwoFactorTOTP = (props: ComponentProps<typeof Box>): ReactElement => {
const user = useUser();
const setModal = useSetModal();
const logoutOtherSessions = useEndpoint('POST', '/v1/users.logoutOtherClients');
const enableTotpFn = useMethod('2fa:enable');
const disableTotpFn = useMethod('2fa:disable');
const verifyCodeFn = useMethod('2fa:validateTempToken');
@ -85,11 +86,13 @@ const TwoFactorTOTP = (props: ComponentProps<typeof Box>): ReactElement => {
if (!result) {
return dispatchToastMessage({ type: 'error', message: t('Invalid_two_factor_code') });
}
logoutOtherSessions();
setModal(<BackupCodesModal codes={result.codes} onClose={closeModal} />);
} catch (error) {
dispatchToastMessage({ type: 'error', message: error });
}
}, [authCode, closeModal, dispatchToastMessage, setModal, t, verifyCodeFn]);
}, [authCode, closeModal, dispatchToastMessage, logoutOtherSessions, setModal, t, verifyCodeFn]);
const handleRegenerateCodes = useCallback(() => {
const onRegenerate = async (authCode: string): Promise<void> => {

@ -0,0 +1,5 @@
// default email engines - like gmail - will render texts with dots as an anchor tag.
// If we can, we should avoid that.
export const safeHtmlDots = (text: string): string => {
return text.replace(/\./g, '&#8228');
}

@ -1,7 +1,7 @@
{
"name": "@rocket.chat/meteor",
"description": "The Ultimate Open Source WebChat Platform",
"version": "5.4.2",
"version": "5.4.3",
"private": true,
"author": {
"name": "Rocket.Chat",
@ -296,7 +296,6 @@
"filesize": "9.0.11",
"google-libphonenumber": "^3.2.28",
"googleapis": "^104.0.0",
"grapheme-splitter": "^1.0.4",
"he": "^1.2.0",
"highlight.js": "^11.6.0",
"hljs9": "npm:highlight.js@^9.18.5",

@ -2652,7 +2652,6 @@
"Username_ended_the_OTR_session": "__username__ het die OTR-sessie geëindig",
"Username_invalid": "<strong>%s</strong> is nie 'n geldige gebruikersnaam nie,<br/> gebruik slegs letters, syfers, kolletjies, koppeltekens en onderstreeptekens",
"Username_is_already_in_here": "`@%s` is reeds hier.",
"Username_is_not_in_this_room": "Die gebruiker `#%s` is nie in hierdie kamer nie.",
"Username_Placeholder": "Voer asseblief gebruikers name in ...",
"Username_title": "Registreer gebruikersnaam",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ wil OTR begin. Wil jy aanvaar?",

@ -4613,7 +4613,6 @@
"Username_ended_the_OTR_session": "__username__ أنهى جلسة المراسلة خارج نطاق السجل (OTR)",
"Username_invalid": "<strong>%s</strong> ليس اسم مستخدم صالحًا،<br/> استخدم فقط الأحرف والأرقام والنقاط والواصلات والشرطات السفلية",
"Username_is_already_in_here": "سبق وجود `@%s` هنا.",
"Username_is_not_in_this_room": "المستخدم \"#%s\" غير موجود في هذه الغرفة",
"Username_Placeholder": "يرجى إدخال أسماء المستخدمين...",
"Username_title": "تسجيل اسم المستخدم",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ يريد بدء مراسلة خارج نطاق السجل (OTR). هل توافق؟",

@ -2652,7 +2652,6 @@
"Username_ended_the_OTR_session": "__username__ OTR seansını sonlandırdı",
"Username_invalid": "<strong>%s</strong> düzgün bir istifadəçi adı deyil,<br/> yalnız məktublar, nömrələr, nöqtələr, tirelər və altlıqları istifadə edin",
"Username_is_already_in_here": "'@%s` artıq buradadır.",
"Username_is_not_in_this_room": "'#%s` istifadəçisi bu otaqda deyil.",
"Username_Placeholder": "İstifadəçi adlarını daxil edin ...",
"Username_title": "İstifadəçi adını qeyd edin",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ OTR başlamağı istəyir. Qəbul etmək istəyirsinizmi?",

@ -2670,7 +2670,6 @@
"Username_ended_the_OTR_session": "__username__ завяршыў сесію OTR",
"Username_invalid": "<strong>%s</strong>не з'яўляецца дапушчальным імем карыстальніка, <br/>выкарыстоўваць толькі літары, лічбы, кропкі, злучок і падкрэсліванне",
"Username_is_already_in_here": "`@%s` ўжо тут.",
"Username_is_not_in_this_room": "Карыстальнік `#%s` не ў гэтым пакоі.",
"Username_Placeholder": "Калі ласка, увядзіце імёны карыстальнікаў ...",
"Username_title": "рэгістрацыя карыстальніка",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ хоча пачаць OTR. Ці вы хочаце прыняць?",

@ -2648,7 +2648,6 @@
"Username_ended_the_OTR_session": "__username__ завърши сесията OTR",
"Username_invalid": "<strong>%s</strong>не е валидно потребителско име,<br/>използва само букви, цифри, точки, тирета и долни черти",
"Username_is_already_in_here": "`@%s` вече е тук.",
"Username_is_not_in_this_room": "Потребителят \"#%s\" не е в тази стая.",
"Username_Placeholder": "Моля, въведете потребителски имена ...",
"Username_title": "Регистрирайте потребителското име",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ иска да започне OTR. Искате ли да приемете?",

@ -2644,7 +2644,6 @@
"Username_ended_the_OTR_session": "__username__ je završio SP razgovor",
"Username_invalid": "<strong>%s</strong> nije valjano korisničko ime,<br/> koristite samo slova, brojeve, točke, crtice i podvlake",
"Username_is_already_in_here": "`@%s` je već ovdje.",
"Username_is_not_in_this_room": "Korisnik `#%s` nije u ovoj sobi.",
"Username_Placeholder": "Unesite korisnička imena ...",
"Username_title": "Registriraj korisničko ime",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ želi započeti SP. Želite li prihvatiti?",

@ -4531,7 +4531,6 @@
"Username_ended_the_OTR_session": "L'usuari __username__ ha finalitzat la sessió OTR.",
"Username_invalid": "<strong>%s</strong> no és un nom d'usuari vàlid,<br/>feu servir només lletres, números, punts, guions i guions baixos",
"Username_is_already_in_here": "`@%s` ja hi és.",
"Username_is_not_in_this_room": "L'usuari `#%s` no és en aquesta sala.",
"Username_Placeholder": "Sisplau, entra noms d'usuari...",
"Username_title": "Tria un nom d'usuari",
"Username_wants_to_start_otr_Do_you_want_to_accept": "L'usuari __username__ vol iniciar una conversa OTR. L'acceptes?",

@ -3811,7 +3811,6 @@
"Username_ended_the_OTR_session": "__username__ ukončil/a relaci OTR",
"Username_invalid": "<strong>%s</strong> není platné uživatelské jméno, <br/> použijte pouze písmena, číslice, tečky, pomlčky a podtržítka",
"Username_is_already_in_here": "`@%s` už je zde.",
"Username_is_not_in_this_room": "Uživatel `#%s` není v této místnosti.",
"Username_Placeholder": "Zadejte uživatelská jména...",
"Username_title": "Registrovat uživatelské jméno",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ chce spustit OTR (konverzaci mimo záznam). Chcete ji přijmout?",

@ -2646,7 +2646,6 @@
"Username_ended_the_OTR_session": "__username__ daeth y sesiwn OTR i ben",
"Username_invalid": "<strong>Nid yw %s</strong> yn enw defnyddiwr dilys, <br / >defnyddiwch lythyrau yn unig, rhifau, dotiau, cysylltnodau ac islaw",
"Username_is_already_in_here": "Mae `@%s` eisoes yma.",
"Username_is_not_in_this_room": "Nid yw'r defnyddiwr `#%s` yn yr ystafell hon.",
"Username_Placeholder": "Rhowch enwau defnyddwyr ...",
"Username_title": "Cofrestrwch enw defnyddiwr",
"Username_wants_to_start_otr_Do_you_want_to_accept": "Mae __username__ eisiau cychwyn OTR. Ydych chi am dderbyn?",

@ -3833,7 +3833,6 @@
"Username_ended_the_OTR_session": "__username__ afsluttede OTR-sessionen",
"Username_invalid": "<strong>%s</strong> er ikke et gyldigt brugernavn,<br/> Brug kun bogstaver, tal, prikker, bindestreger og understreger",
"Username_is_already_in_here": "'@%s' er allerede herinde.",
"Username_is_not_in_this_room": "Brugeren '#%s' er ikke i dette rum.",
"Username_Placeholder": "Indtast venligst brugernavne ...",
"Username_title": "Tilmeld brugernavn",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ ønsker at starte OTR. Vil du acceptere?",

@ -2653,7 +2653,6 @@
"Username_ended_the_OTR_session": "__username__ hat die OTR-Session beendet.",
"Username_invalid": "<strong>%s</strong> ist kein zulässiger Benutzername.<br/> Verwenden Sie nur Buchstaben, Zahlen, Punkte oder Binde- und Unterstriche.",
"Username_is_already_in_here": "`@%s` wurde bereits hinzugefügt.",
"Username_is_not_in_this_room": "Der Benutzer `#%s` ist nicht in diesem Raum.",
"Username_Placeholder": "Bitte geben Sie Benutzernamen ein ...",
"Username_title": "Benutzernamen festlegen",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ möchte ein OTR-Gespräch starten. Möchten Sie annehmen?",

@ -3022,7 +3022,6 @@
"Username_ended_the_OTR_session": "__username__ hat die OTR-Session beendet",
"Username_invalid": "<strong>%s</strong> ist kein gültiger Benutzername.<br/> Verwende nur Buchstaben, Zahlen, Punkte oder Binde- und Unterstriche.",
"Username_is_already_in_here": "`@%s` wurde bereits hinzugefügt",
"Username_is_not_in_this_room": "Benutzer `#%s` ist nicht in diesem Raum",
"Username_Placeholder": "Bitte gib Benutzernamen ein...",
"Username_title": "Benutzernamen festlegen",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ möchte ein OTR-Gespräch starten. Möchtest Du es annehmen?",

@ -5016,7 +5016,6 @@
"Username_ended_the_OTR_session": "__username__ hat die OTR-Session beendet",
"Username_invalid": "<strong>%s</strong> ist kein gültiger Benutzername.<br/> Verwende nur Buchstaben, Zahlen, Punkte oder Binde- und Unterstriche.",
"Username_is_already_in_here": "`@%s` wurde bereits hinzugefügt",
"Username_is_not_in_this_room": "Benutzer `#%s` ist nicht in diesem Raum",
"Username_Placeholder": "Bitte Benutzernamen eingeben...",
"Username_title": "Benutzernamen regisitrieren",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ möchte ein OTR-Gespräch starten. Möchten Sie es annehmen?",
@ -5469,4 +5468,4 @@
"Toolbox_room_actions": "Primäre Room-Aktionen",
"Theme_light": "Hell",
"Theme_dark": "Dunkel"
}
}

@ -2659,7 +2659,6 @@
"Username_ended_the_OTR_session": "χρήστη __username__ έληξε η συνεδρίαση OTR",
"Username_invalid": "<strong>%s</strong> δεν είναι έγκυρο όνομα χρήστη,<br/> χρησιμοποιείστε μόνο γράμματα, αριθμούς, τελείες και παύλες",
"Username_is_already_in_here": "`@%s` είναι ήδη εδώ.",
"Username_is_not_in_this_room": "Ο χρήστης `#%s` δεν είναι σε αυτό το δωμάτιο.",
"Username_Placeholder": "Εισαγάγετε τα ονόματα χρήστη ...",
"Username_title": "Εγγραφή ονόματος χρήστη",
"Username_wants_to_start_otr_Do_you_want_to_accept": "χρήστη __username__ θέλει να ξεκινήσει OTR. Θέλετε να δεχτεί;",

@ -5071,7 +5071,6 @@
"Username_ended_the_OTR_session": "__username__ ended the OTR session",
"Username_invalid": "<strong>%s</strong> is not a valid username,<br/> use only letters, numbers, dots, hyphens and underscores",
"Username_is_already_in_here": "`@%s` is already in here.",
"Username_is_not_in_this_room": "The user `#%s` is not in this room.",
"Username_Placeholder": "Please enter usernames...",
"Username_title": "Register username",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ wants to start OTR. Do you want to accept?",

@ -2652,7 +2652,6 @@
"Username_ended_the_OTR_session": "__username__ finis la OTR-sesion",
"Username_invalid": "<strong>%s</strong> ne estas valida uzantnomo,<br/> uzu nur literojn, numerojn, punktojn, makzelojn kaj substrekojn",
"Username_is_already_in_here": "`@%s` jam estas ĉi tie.",
"Username_is_not_in_this_room": "La uzanto `#%s` ne estas en ĉi tiu ĉambro.",
"Username_Placeholder": "Bonvolu enmeti domnilojn ...",
"Username_title": "Registru salutnomon",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ volas komenci OTR. Ĉu vi volas akcepti?",

@ -4564,7 +4564,6 @@
"Username_ended_the_OTR_session": "__username__ ha finalizado la sesión OTR",
"Username_invalid": "<strong>%s</strong> no es un nombre de usuario válido.<br/> Usa solo letras, números, puntos y guiones.",
"Username_is_already_in_here": "\"@%s\" ya está aquí.",
"Username_is_not_in_this_room": "El usuario \"#%s\" no está en esta sala.",
"Username_Placeholder": "Introduce nombres de usuario...",
"Username_title": "Registrar nombre de usuario",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ quiere iniciar una sesión OTR. ¿Quieres aceptar?",

@ -2983,7 +2983,6 @@
"Username_ended_the_OTR_session": "__username__ نشست OTR را بست",
"Username_invalid": "<strong>%s</strong> است یک نام کاربری معتبر نیست، <br/> استفاده از تنها حروف، اعداد، نقطه، خط فاصله و زیرین",
"Username_is_already_in_here": "`@%s` در حال حاضر اینجاست.",
"Username_is_not_in_this_room": "`#%s` در این اتاق نیست.",
"Username_Placeholder": "لطفا نام کاربران را وارد کنید...",
"Username_title": "ثبت نام نام کاربری",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ درخواست OTR می دهد. آیا قبل می کنید؟",

@ -5025,7 +5025,6 @@
"Username_ended_the_OTR_session": "__username__ lopetti epävirallisen keskusteluistunnon",
"Username_invalid": "<strong>%s</strong> ei ole kelvollinen käyttäjänimi,<br/> käytä vain kirjaimia, numeroita, pisteitä, yhdysviivoja ja alaviivoja",
"Username_is_already_in_here": "`@%s` on jo täällä.",
"Username_is_not_in_this_room": "Käyttäjä `#%s` ei ole tässä huoneessa.",
"Username_Placeholder": "Syötä käyttäjätunnukset..",
"Username_title": "Rekisteröi käyttäjätunnus",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ haluaa aloittaa Epävirallinen Keskustelu-keskustelun. Haluatko hyväksyä?",

@ -4586,7 +4586,6 @@
"Username_ended_the_OTR_session": "__username__ a mis fin à la session OTR",
"Username_invalid": "<strong>%s</strong> n'est pas un nom d'utilisateur valide,<br/> utilisez uniquement des lettres, des chiffres, des points et des tirets (milieu et bas)",
"Username_is_already_in_here": "`@%s` est déjà présent.",
"Username_is_not_in_this_room": "L'utilisateur `#%s` n'est pas dans ce salon.",
"Username_Placeholder": "Entrez les noms des utilisateurs...",
"Username_title": "Enregistrer un nom d'utilisateur",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ veut démarrer une conversation OTR. Acceptez-vous ?",

@ -1457,7 +1457,6 @@
"Username_ended_the_OTR_session": "__username__ סיים את פגישת ה- OTR",
"Username_invalid": "השם <strong>%s</strong> אינו שם משתמש תקין,<br/> יש להשתמש רק באותיות, מספרים נקודות ומקפים.",
"Username_is_already_in_here": "`@%s` כבר נמצא כאן.",
"Username_is_not_in_this_room": "S` המשתמשים `#% הוא לא בחדר הזה.",
"Username_Placeholder": "הכנס רשימת משתמשים",
"Username_title": "רישום שם משתמש",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ רוצה להתחיל OTR. האם אתה רוצה לקבל?",

@ -2787,7 +2787,6 @@
"Username_ended_the_OTR_session": "__username__ je završio SP razgovor",
"Username_invalid": "<strong>%s</strong> nije valjano korisničko ime,<br/> koristite samo slova, brojeve, točke, crtice i podvlake",
"Username_is_already_in_here": "`@%s` je već ovdje.",
"Username_is_not_in_this_room": "Korisnik `#%s` nije u ovoj sobi.",
"Username_Placeholder": "Unesite korisnička imena ...",
"Username_title": "Registriraj korisničko ime",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ želi započeti SP. Želite li prihvatiti?",

@ -3642,7 +3642,6 @@
"Username_ended_the_OTR_session": "__username__ kilépett az OTR beszélgetésből",
"Username_invalid": "<strong>%s</strong> felhasználónév nem érvényes,<br/> kérlek csak betűket, számokat, pontokat vagy kötőjeleket használj",
"Username_is_already_in_here": "`@%s` már itt van.",
"Username_is_not_in_this_room": "A felhasználó `#%s` nem ebben a szobában.",
"Username_Placeholder": "Írja be a felhasználóneveket...",
"Username_title": "Felhasználónév regisztrálása",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ OTR beszélgetést akar kezdeményezni. El akarod fogadni?",

@ -2660,7 +2660,6 @@
"Username_ended_the_OTR_session": "__username__ mengakhiri sesi OTR",
"Username_invalid": "<strong>%s</strong> bukan merupakan nama pengguna yang valid,<br/> anda hanya dapat menggunakan huruf, angka, titik, garis bawah dan tanda hubung.",
"Username_is_already_in_here": "`@%s` sudah berada di sini.",
"Username_is_not_in_this_room": "Pengguna `#%s` tidak di ruangan ini.",
"Username_Placeholder": "Harap masukkan nama pengguna ...",
"Username_title": "Daftarkan nama pengguna",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ ingin memulai OTR. Apakah Anda ingin menerima?",

@ -2748,7 +2748,6 @@
"Username_ended_the_OTR_session": "__username__ chiude la sessione OTR",
"Username_invalid": "<strong>%s</strong> non è un nome utente valido, <br/> usa solo lettere, numeri, punti, trattini e underscore.",
"Username_is_already_in_here": "`@%s` è già qui.",
"Username_is_not_in_this_room": "L'utente `#%s` non è in questo canale",
"Username_Placeholder": "Si prega di inserire nomi utente ...",
"Username_title": "Registra nome utente",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ vuole iniziare OTR. Vuoi accettare?",

@ -4566,7 +4566,6 @@
"Username_ended_the_OTR_session": "__username__がオフレコセッションを終了しました",
"Username_invalid": "<strong>%s</strong>は有効なユーザー名ではありません。<br/>利用できるのは、英数字、ドット、ハイフン、アンダースコアだけです",
"Username_is_already_in_here": "「@%s」は、すでにここにあります。",
"Username_is_not_in_this_room": "ユーザー「#%s」は、このルームにいません。",
"Username_Placeholder": "ユーザー名を入力してください...",
"Username_title": "ユーザー名を登録",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__がオフレコの開始を希望しています。受け入れますか?",

@ -3536,7 +3536,6 @@
"Username_ended_the_OTR_session": "__username__-მა დაასრულა OTR სესია",
"Username_invalid": "<strong>%s</strong> არ არის სწორი სახელი, <br/> გამოიყენეთ მხოლოდ ასოები, რიცხვები, წერტილები, ტირეები და ქვედა ხაზები",
"Username_is_already_in_here": "`@%s` უკვე აქ არის.",
"Username_is_not_in_this_room": "მომხმარებელი `#%s` არ არის ამ ოთახში.",
"Username_Placeholder": "გთხოვთ, შეიყვანოთ მომხმარებლის სახელი ...",
"Username_title": "მომხმარებლის სახელის რეგისტრაცია",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ სურს OTR-ის დაწყება. გსურთ მიიღოთ?",

@ -2999,7 +2999,6 @@
"Username_ended_the_OTR_session": "__username__ បបញចបសមយបរជរវត",
"Username_invalid": "<strong>%s</strong> គសមវ,<br/> ពនកអកសរ, លខ, ចច នង ដក",
"Username_is_already_in_here": "`@%s` គននចទយ។",
"Username_is_not_in_this_room": "អនកប `#%s` គននងបនទប។",
"Username_Placeholder": "សមបញលឈនកប ...",
"Username_title": "ចសម",
"Username_wants_to_start_otr_Do_you_want_to_accept": "ករចមចងយ __username__ បរវត។ តនកចងទទលយក?",

@ -3874,7 +3874,6 @@
"Username_ended_the_OTR_session": "__username__님이 비밀 대화를 종료했습니다.",
"Username_invalid": "<strong>&s</strong>는 알맞은 사용자명이 아닙니다,<br/> 영문자, 숫자, 마침표와 밑줄만 사용하십시오.",
"Username_is_already_in_here": "`@%s` 사용자 이름이 이미 있습니다.",
"Username_is_not_in_this_room": "`#%s`님은 대화방에 없습니다.",
"Username_Placeholder": "사용자 이름을 입력하세요.",
"Username_title": "사용자명 등록",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ 님이 비밀 대화를 시작하려고 합니다. 수락 하시겠습니까?",

@ -2644,7 +2644,6 @@
"Username_ended_the_OTR_session": "__username__ dawî rûniştina OTR",
"Username_invalid": "<strong>%s</strong> e a navê bikarhêner ne derbasdar e, <br/> bi kar tînin tenê tîp, hejmar, zanyarîyan de, cîwan û xêzikên",
"Username_is_already_in_here": "`@%s` e, jixwe li vê derê.",
"Username_is_not_in_this_room": "The user `#%s` e di vê odeyê ne.",
"Username_Placeholder": "Ji kerema xwe bikarhênerên xwe binivîse ...",
"Username_title": "Register navê bikarhêner",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ dixwaze dest bi OTR. Ma tu dixwazî ku qebûl bike?",

@ -2687,7 +2687,6 @@
"Username_ended_the_OTR_session": "__username__ ສນສດລງໃນກອງປະຊມ OTR",
"Username_invalid": "<strong>%s</strong> ບແມນຊໃຊກຕອງ, <br/> ນາໃຊພຽງແຕວອກສອນ, ຈານວນ, ຈດ, ເຄອງຫມາຍແລະຂດ",
"Username_is_already_in_here": "`@%s` ແມນແລວໃນທ.",
"Username_is_not_in_this_room": "ຜໃຊ `#%s` ບແມນໃນຫອງນ.",
"Username_Placeholder": "ກະລນາໃສໃຊ ...",
"Username_title": "ລງທະບຽນຊໃຊ",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ ຕອງການເພອເລມຕນການ OTR. ທານຕອງການທຈະຍອມຮບ?",

@ -2707,7 +2707,6 @@
"Username_ended_the_OTR_session": "__username__ baigė OTR sesiją",
"Username_invalid": "<strong>%s</strong> nėra tinkamas naudotojo vardas,<br/> naudokite tik raidę, skaičių, taškus, brūkšnelius ir pabraukimus",
"Username_is_already_in_here": "`@%s 'jau yra čia.",
"Username_is_not_in_this_room": "Vartotojas \"#%s\" nėra šiame kambaryje.",
"Username_Placeholder": "Prašome įvesti naudotojo vardus ...",
"Username_title": "Užsiregistruokite vartotojo vardą",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ nori pradėti OTR. Ar norite priimti?",

@ -2651,7 +2651,6 @@
"Username_doesnt_exist": "Lietotājvārds `%s` neeksistē.",
"Username_invalid": "<strong>%s</strong> nav derīgs lietotājvārds,<br/>lietojiet tikai burtus, ciparus, punktus, pārnesumzmes un pasvītras",
"Username_is_already_in_here": "`@%s` jau ir šeit.",
"Username_is_not_in_this_room": "Lietotājs #%s nav šajā istabā.",
"Username_Placeholder": "Lūdzu, ievadiet lietotājvārdus ...",
"Username_title": "Reģistrēt lietotājvārdu",
"Users": "Lietotāji",

@ -2643,7 +2643,6 @@
"Username_doesnt_exist": "Хэрэглэгчийн нэр `%s` байхгүй байна.",
"Username_invalid": "<strong>%s</strong>нь зөв хэрэглэгчийн нэр биш,<br/>зөвхөн үсэг, тоо, цэг, товч болон доогуур зураастай",
"Username_is_already_in_here": "`@%s` аль хэдийн энд байна.",
"Username_is_not_in_this_room": "Хэрэглэгчийн `#%s` энэ өрөөнд байхгүй байна.",
"Username_Placeholder": "Хэрэглэгчийн нэрийг оруулна уу ...",
"Username_title": "Хэрэглэгчийн нэрийг бүртгүүлэх",
"Users": "Хэрэглэгчид",

@ -2657,7 +2657,6 @@
"Username_ended_the_OTR_session": "__username__ mengakhiri sesi OTR yang",
"Username_invalid": "<strong>%s</strong> bukan nama pengguna yang sah,<br/> guna hanya huruf, nombor, titik dan pemisah",
"Username_is_already_in_here": "`@%s` sudah berada di sini.",
"Username_is_not_in_this_room": "Pengguna `#%s` tidak ada di dalam bilik ini.",
"Username_Placeholder": "Sila masukkan nama pengguna ...",
"Username_title": "Daftar nama pengguna",
"Users": "Pengguna",

@ -4586,7 +4586,6 @@
"Username_ended_the_OTR_session": "__username__ eindigde de OTR-sessie",
"Username_invalid": "<strong>%s</strong> is geen geldige gebruikersnaam,<br/> gebruik uitsluitend letters, cijfers, punten, koppeltekens en underscores",
"Username_is_already_in_here": "`@%s` is al hier.",
"Username_is_not_in_this_room": "De gebruiker `#%s` bevindt zich niet in deze kamer.",
"Username_Placeholder": "Voer gebruikersnamen in...",
"Username_title": "Registreer gebruikersnaam",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ wil OTR starten. Wilt u accepteren?",

@ -2752,7 +2752,6 @@
"Username_ended_the_OTR_session": "__username__ endte OTR-sesjonen",
"Username_invalid": "<strong>%s</strong> er ikke et gyldig brukernavn,<br/> bruker bare bokstaver, tall, prikker, bindestreker og understreker",
"Username_is_already_in_here": "`@%s` er allerede her inne.",
"Username_is_not_in_this_room": "Brukeren `#%s` er ikke i dette rommet.",
"Username_Placeholder": "Vennligst skriv inn brukernavn ...",
"Username_title": "Registrer brukernavn",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ vil starte OTR. Ønsker du å godta?",

@ -4949,7 +4949,6 @@
"Username_ended_the_OTR_session": "__username__ zakończył sesję OTR",
"Username_invalid": "<strong>%s</strong> nie jest prawidłową nazwą użytkownika,<br/> dozwolone są jedynie litery, cyfry, kropki i kreski",
"Username_is_already_in_here": "`@%s` już tutaj jest.",
"Username_is_not_in_this_room": "Użytkownik `#%s` nie jest w tym pokoju.",
"Username_Placeholder": "Wprowadź nazwy użytkowników ...",
"Username_title": "Utwórz nazwę użytkownika",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ chce rozpocząć OTR. Czy chcesz zaakceptować?",

@ -4628,7 +4628,6 @@
"Username_ended_the_OTR_session": "__username__ terminou a sessão OTR",
"Username_invalid": "<strong>%s</strong> não é um nome de usuário válido, <br/> use somente letras, números, pontos, hifens e travessão.",
"Username_is_already_in_here": "`@%s` já está aqui.",
"Username_is_not_in_this_room": "O usuário `%s` não está nesta sala.",
"Username_Placeholder": "Digite os nomes de usuário...",
"Username_title": "Cadastre um nome de usuário",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ quer começar OTR. Você aceita?",

@ -3056,7 +3056,6 @@
"Username_ended_the_OTR_session": "__username__ terminou a sessão OTR",
"Username_invalid": "<strong>%s</strong> não é um nome de utilizador válido, <br/> usar somente letras, números, pontos, hífens e underscores",
"Username_is_already_in_here": "`@%s` já se encontra aqui.",
"Username_is_not_in_this_room": "O utilizador `%s` não está nesta sala.",
"Username_Placeholder": "Digite os nomes de utilizador ...",
"Username_title": "Registe um nome de utilizador",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ quer começar OTR. Você aceita?",

@ -2649,7 +2649,6 @@
"Username_ended_the_OTR_session": "__username__ a incheiat sesiunea OTR",
"Username_invalid": "<strong>%s</strong> nu e un nume de utilizator valid,<br/> folosiți doar litere, cifre și cratime",
"Username_is_already_in_here": "`@%s` este deja aici.",
"Username_is_not_in_this_room": "Utilizatorul `#%s` nu este în această cameră.",
"Username_Placeholder": "Introduceți numele de utilizator ...",
"Username_title": "Înregistrează nume de utilizator",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ vrea să înceapă OTR. Doriți să acceptați?",

@ -4730,7 +4730,6 @@
"Username_ended_the_OTR_session": "__username__ завершил конфиденциальную беседу",
"Username_invalid": "<strong>%s</strong> недопустимое имя пользователя, <br/>> используйте только буквы, цифры, точки, дефисы и подчеркивания",
"Username_is_already_in_here": "\"@%s\" уже здесь.",
"Username_is_not_in_this_room": "Пользователь \"#%s\" не в этой комнате.",
"Username_Placeholder": "Пожалуйста, введите логин...",
"Username_title": "Зарегистрировать логин",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ хочет начать конфиденциальную беседу. Принять?",

@ -2660,7 +2660,6 @@
"Username_ended_the_OTR_session": "__username__ ukončil reláciu OTR",
"Username_invalid": "<strong>%s</strong> nie je platné používateľské meno, <br/> použite len písmená, čísla, bodky, pomlčky a podčiarkovníky",
"Username_is_already_in_here": "`@%s` je už tu.",
"Username_is_not_in_this_room": "Používateľ `#%s` nie je v tejto miestnosti.",
"Username_Placeholder": "Zadajte používateľské mená ...",
"Username_title": "Registrovať používateľské meno",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ chce začať OTR. Chcete prijať?",

@ -2640,7 +2640,6 @@
"Username_ended_the_OTR_session": "__username__ je končal sejo OTR",
"Username_invalid": "<strong>%s</strong> ni veljavno uporabniško ime,<br/>uporablja samo črke, številke, pike, vezaje in podčrtaje",
"Username_is_already_in_here": "`@%s` je že tukaj.",
"Username_is_not_in_this_room": "Uporabnika `#%s` ni v tej sobi.",
"Username_Placeholder": "Prosimo, vnesite uporabniška imena ...",
"Username_title": "Registrirajte uporabniško ime",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ želi začeti OTR. Želite sprejeti?",

@ -2650,7 +2650,6 @@
"Username_ended_the_OTR_session": "__username__ përfundoi seancën OTR",
"Username_invalid": "<strong>%s</strong> nuk është një emër përdoruesi të vlefshme, <br/> përdorni vetëm shkronja, numra, pika, hyphens dhe nënvizon",
"Username_is_already_in_here": "`@%s` është tashmë këtu.",
"Username_is_not_in_this_room": "Përdoruesi `#%s` nuk është në këtë dhomë.",
"Username_Placeholder": "Futu emrat e përdoruesve ...",
"Username_title": "Regjistrohu emrin",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ dëshiron të fillojë OTR. A doni të pranoni?",

@ -2449,7 +2449,6 @@
"Username_ended_the_OTR_session": "__username__ завршио ОТР сесију",
"Username_invalid": "<strong>%s</strong> није исправно корисничко име,<br/> користите само слова, бројеве, тачке и повлаке",
"Username_is_already_in_here": "`@%s` је већ овде.",
"Username_is_not_in_this_room": "Корисник `#%s` није у овој соби.",
"Username_Placeholder": "Молимо унесите корисничка имена ...",
"Username_title": "Направите корисничко име",
"Users": "усерс",

@ -4860,8 +4860,7 @@
"Username_ended_the_OTR_session": "__username__ avslutade OTR-session",
"Username_invalid": "<strong>%s</strong> är inte ett giltigt användarnamn,<br/> använd bara bokstäver, siffror, punkter och bindestreck",
"Username_is_already_in_here": "`@%s` är redan här inne.",
"Username_is_not_in_this_room": "Användaren `#%s` är inte i rummet.",
"Username_Placeholder": "Ange användarnamn ...",
"Username_Placeholder": "Vänligen ange användarnamn ...",
"Username_title": "Registrera användarnamn",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ vill starta OTR. Vill du acceptera?",
"Users": "Användare",
@ -5237,4 +5236,4 @@
"Toolbox_room_actions": "Primära åtgärder i rum",
"Theme_light": "Ljus",
"Theme_dark": "Mörk"
}
}

@ -2651,7 +2651,6 @@
"Username_ended_the_OTR_session": "__username__ OTR அமரிவடத",
"Username_invalid": "<strong>%s</strong> தவறனத பயனரயர,<br/>பயனபடத எழகள, எணகள, பிகளகள",
"Username_is_already_in_here": "`@%s` இங ஏறகனவ உளளத.",
"Username_is_not_in_this_room": "பயனர `#%s` இநத அறி இல.",
"Username_Placeholder": "தயவ பயனரயரகள உளிடவ ...",
"Username_title": "பயனரயர பதி",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ OTR தடஙக விிறத. நகள ஏறக விிகள?",

@ -2638,7 +2638,6 @@
"Username_ended_the_OTR_session": "__username__ สนสดเซสชน OTR",
"Username_invalid": "<strong>%s</strong>ไมใชอผใชกตอง<br/>ใชเฉพาะตวอกษรจดจดยงคและเครองหมายขดลาง",
"Username_is_already_in_here": "`@%s` มอยแลวท",
"Username_is_not_in_this_room": "ผใช `#%s` ไมอยในหองน",
"Username_Placeholder": "โปรดปอนชอผใช ...",
"Username_title": "ลงทะเบยนชอผใช",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ ตองการเรมตน OTR คณตองการยอมรบหรอไม?",

@ -3140,7 +3140,6 @@
"Username_ended_the_OTR_session": "__username__ Kayıt Dışı oturumu sonlandırdı",
"Username_invalid": "<strong>%s</strong> geçerli bir kullanıcı adı değil,<br/> Kullanıcı adınızı seçerken yalnızca harfler, sayılar, noktalar, tireler ve alt çizgiler kullanın",
"Username_is_already_in_here": "`@%s` zaten burada.",
"Username_is_not_in_this_room": "`#%s` adlı kullanıcı bu odada değil.",
"Username_Placeholder": "Lütfen kullanıcı adlarını giriniz...",
"Username_title": "Kullanıcı adını kaydet",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ Kayıt Dışı başlatmak istiyor. Kabul etmek istiyor musunuz?",

@ -1166,7 +1166,6 @@
"Username_ended_the_OTR_session": "خاتىرىسىز دىيالوگنى ئاياغلاشتۇردى __username__",
"Username_invalid": "پەقەت ئىنگلىزچە ھەرپ ، ، سان ،ئۇلانما ھەرپ -بەلگە ۋە ئاستى سىزىقچە ئىشلىتىدۇ.<br/> بىر ئىناۋەتلىك ئەزا ئىسمى ئەمەس، <strong>%s</strong>",
"Username_is_already_in_here": "ئاللىبۇرۇن بار `@%s`",
"Username_is_not_in_this_room": "بۇ ئۆيدە ئەمەس`#%s` ئەزا",
"Username_title": "ئەزا ئىسمىنى تىزىملىتىش",
"Username_wants_to_start_otr_Do_you_want_to_accept": "سىز بىلەن خاتىرىسىز دىيالوگ ئېلىپ بارماقچى ، سىز قوبۇل قىلامسىز ؟__username__",
"Users": "ئەزا",

@ -3229,7 +3229,6 @@
"Username_ended_the_OTR_session": "__username__ закінчив сеанс OTR",
"Username_invalid": "<strong>%s</strong> не дійсне ім'я користувача,<br/> використовувати тільки букви, цифри, крапки і тире",
"Username_is_already_in_here": "`@%s` вже тут.",
"Username_is_not_in_this_room": "Користувач `#%s` не в цій кімнаті.",
"Username_Placeholder": "Будь ласка, введіть імена користувачів ...",
"Username_title": "Зареєструйте ім’я користувача",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ хоче почати OTR. Ви хочете прийняти?",

@ -2750,7 +2750,6 @@
"Username_doesnt_exist": "Tên người dùng `%s` không tồn tại.",
"Username_invalid": "<strong>%s</strong> không phải là tên người dùng hợp lệ,<br/> chỉ sử dụng chữ cái, số, dấu chấm, dấu nối và dấu gạch dưới",
"Username_is_already_in_here": "`@%s` đã có ở đây.",
"Username_is_not_in_this_room": "Người dùng `#%s` không ở trong phòng này.",
"Username_Placeholder": "Vui lòng nhập tên người dùng ...",
"Username_title": "Đăng ký tên người dùng",
"Users": "Người dùng",

@ -2668,7 +2668,6 @@
"Username_ended_the_OTR_session": "__username__结束了OTR会话",
"Username_invalid": "<strong>%s</strong>不是一个有效的用户名, <br/>只能使用字母,数字,.和_",
"Username_is_already_in_here": "`@%s`已经在这里了。",
"Username_is_not_in_this_room": "用户`#%s`不在这个房间里。",
"Username_Placeholder": "请输入用户名...",
"Username_title": "注册用户名",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__想要启动OTR。你想接受吗?",

@ -4333,7 +4333,6 @@
"Username_ended_the_OTR_session": "__username__結束了不公開會議",
"Username_invalid": "<strong>%s</strong>不是一個合法的使用者名稱, <br/>只能使用字母,數字,.和_",
"Username_is_already_in_here": "`@%s`已經在這裡了。",
"Username_is_not_in_this_room": "使用者 `#%s` 並不在這個頻道",
"Username_Placeholder": "請輸入使用者名稱...",
"Username_title": "註冊使用者名稱",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__想要啟動不公開。你想接受嗎?",

@ -3972,7 +3972,6 @@
"Username_ended_the_OTR_session": "__username__ 结束了无记录对话",
"Username_invalid": "<strong>%s</strong> 不是一个有效的用户名, <br/>只能使用字母、数字、连字符和下划线",
"Username_is_already_in_here": "`@%s` 已存在于此。",
"Username_is_not_in_this_room": "用户 `#%s` 不在该聊天室中。",
"Username_Placeholder": "请输入用户名...",
"Username_title": "注册用户名",
"Username_wants_to_start_otr_Do_you_want_to_accept": "__username__ 要与您进行无记录对话,您是否接受?",

@ -1665,6 +1665,58 @@ describe('Meteor.methods', function () {
.end(done);
});
});
['tshow', 'alias', 'attachments', 'avatar', 'emoji', 'msg'].forEach((prop) => {
it(`should allow to update a message changing property '${prop}'`, (done) => {
request
.post(methodCall('updateMessage'))
.set(credentials)
.send({
message: JSON.stringify({
method: 'updateMessage',
params: [{ _id: messageId, rid, msg: 'Message updated', [prop]: 'valid' }],
id: 'id',
msg: 'method',
}),
})
.expect('Content-Type', 'application/json')
.expect(200)
.expect((res) => {
expect(res.body).to.have.a.property('success', true);
expect(res.body).to.have.a.property('message').that.is.a('string');
const data = JSON.parse(res.body.message);
expect(data).to.have.a.property('msg').that.is.a('string');
})
.end(done);
});
});
['tmid', '_hidden', 'rid'].forEach((prop) => {
it(`should fail to update a message changing invalid property '${prop}'`, (done) => {
request
.post(methodCall('updateMessage'))
.set(credentials)
.send({
message: JSON.stringify({
method: 'updateMessage',
params: [{ _id: messageId, rid, msg: 'Message updated invalid', [prop]: 'invalid' }],
id: 'id',
msg: 'method',
}),
})
.expect('Content-Type', 'application/json')
.expect(200)
.expect((res) => {
expect(res.body).to.have.a.property('success', true);
expect(res.body).to.have.a.property('message').that.is.a('string');
const data = JSON.parse(res.body.message);
expect(data).to.have.a.property('error').that.is.an('object');
expect(data.error).to.have.a.property('error', 'error-invalid-update-key');
})
.end(done);
});
});
});
describe('[@setUserActiveStatus]', () => {

@ -1,14 +1,5 @@
import proxyquire from 'proxyquire';
import { expect } from 'chai';
const { messageProperties } = proxyquire.noCallThru().load('../../../../app/ui-utils/lib/MessageProperties', {
'../../emoji': {
emoji: {
list: {},
},
},
});
const messages = {
'Sample Message': 14,
'Sample 1 ⛳': 10,
@ -20,7 +11,7 @@ describe('Message Properties', () => {
describe('Check Message Length', () => {
Object.keys(messages).forEach((objectKey) => {
it('should treat emojis as single characters', () => {
expect(messageProperties.length(objectKey)).to.be.equal(messages[objectKey]);
expect(objectKey.length).to.be.equal(messages[objectKey]);
});
});
});

@ -1,6 +1,6 @@
{
"name": "rocket.chat",
"version": "5.4.2",
"version": "5.4.3",
"description": "Rocket.Chat Monorepo",
"main": "index.js",
"private": true,

@ -138,6 +138,7 @@ export interface IUsersModel extends IBaseModel<IUser> {
resetTOTPById(userId: any): any;
unsetLoginTokens(userId: any): any;
unsetOneLoginToken(userId: IUser['_id'], token: string): Promise<UpdateResult>;
removeNonPATLoginTokensExcept(userId: any, authToken: any): any;

@ -6182,7 +6182,6 @@ __metadata:
filesize: 9.0.11
google-libphonenumber: ^3.2.28
googleapis: ^104.0.0
grapheme-splitter: ^1.0.4
he: ^1.2.0
highlight.js: ^11.6.0
hljs9: "npm:highlight.js@^9.18.5"

Loading…
Cancel
Save