Merge branch 'develop' into livechat-videocall

pull/4095/head
Diego Sampaio 9 years ago
commit 10019b9509
No known key found for this signature in database
GPG Key ID: E060152B30502562
  1. 2
      .docker/latest/Dockerfile
  2. 7
      .eslintignore
  3. 3
      .eslintrc
  4. 1
      .gitignore
  5. 2
      .lgtm
  6. 65
      .meteor/packages
  7. 40
      .meteor/versions
  8. 6
      .sandstorm/build.sh
  9. 4
      .sandstorm/sandstorm-pkgdef.capnp
  10. 4
      .sandstorm/setup.sh
  11. 27
      .snapcraft/edge/snapcraft.yaml
  12. 33
      .snapcraft/stable/snapcraft.yaml
  13. 20
      .travis.yml
  14. 1
      .travis/docker.sh
  15. 2
      .travis/snap.sh
  16. 125
      HISTORY.md
  17. 9
      README.md
  18. 4
      client/lib/handleError.js
  19. 2
      client/routes/router.coffee
  20. 47
      docker-compose.yml
  21. 61
      package.json
  22. 4
      packages/autoupdate/package.js
  23. 1
      packages/rocketchat-autolinker/.npm/package/.gitignore
  24. 7
      packages/rocketchat-autolinker/.npm/package/README
  25. 503
      packages/rocketchat-autolinker/.npm/package/npm-shrinkwrap.json
  26. 49
      packages/rocketchat-autolinker/autolinker.coffee
  27. 64
      packages/rocketchat-autolinker/client.js
  28. 10
      packages/rocketchat-autolinker/lib/Autolinker.min.js
  29. 17
      packages/rocketchat-autolinker/package.js
  30. 8
      packages/rocketchat-autolinker/settings.coffee
  31. 9
      packages/rocketchat-autolinker/settings.js
  32. 4
      packages/rocketchat-channel-settings-mail-messages/server/methods/mailMessages.coffee
  33. 17
      packages/rocketchat-colors/client.coffee
  34. 18
      packages/rocketchat-colors/client.js
  35. 7
      packages/rocketchat-colors/package.js
  36. 7
      packages/rocketchat-colors/settings.js
  37. 24
      packages/rocketchat-colors/style.css
  38. 3
      packages/rocketchat-cors/cors.coffee
  39. 3
      packages/rocketchat-crowd/server/crowd.js
  40. 5
      packages/rocketchat-crowd/server/settings.js
  41. 36
      packages/rocketchat-emoji-custom/client/lib/emojiCustom.js
  42. 17
      packages/rocketchat-error-handler/package.js
  43. 63
      packages/rocketchat-error-handler/server/lib/RocketChat.ErrorHandler.js
  44. 3
      packages/rocketchat-error-handler/server/startup/settings.js
  45. 19
      packages/rocketchat-file-upload/.npm/package/npm-shrinkwrap.json
  46. 15
      packages/rocketchat-file-upload/client/lib/FileUploadAmazonS3.js
  47. 23
      packages/rocketchat-file-upload/client/lib/FileUploadFileSystem.js
  48. 23
      packages/rocketchat-file-upload/client/lib/FileUploadGridFS.js
  49. 4
      packages/rocketchat-file-upload/client/lib/fileUploadHandler.js
  50. 4
      packages/rocketchat-file-upload/globalFileRestrictions.js
  51. 14
      packages/rocketchat-file-upload/lib/FileUpload.js
  52. 2
      packages/rocketchat-file-upload/lib/FileUploadBase.js
  53. 3
      packages/rocketchat-file-upload/package.js
  54. 15
      packages/rocketchat-file-upload/server/config/configFileUploadFileSystem.js
  55. 2
      packages/rocketchat-i18n/i18n/ar.i18n.json
  56. 2
      packages/rocketchat-i18n/i18n/ca.i18n.json
  57. 2
      packages/rocketchat-i18n/i18n/de-AT.i18n.json
  58. 2
      packages/rocketchat-i18n/i18n/de.i18n.json
  59. 2
      packages/rocketchat-i18n/i18n/el.i18n.json
  60. 35
      packages/rocketchat-i18n/i18n/en.i18n.json
  61. 2
      packages/rocketchat-i18n/i18n/es.i18n.json
  62. 2
      packages/rocketchat-i18n/i18n/fa.i18n.json
  63. 2
      packages/rocketchat-i18n/i18n/fi.i18n.json
  64. 2
      packages/rocketchat-i18n/i18n/fr.i18n.json
  65. 2
      packages/rocketchat-i18n/i18n/he.i18n.json
  66. 2
      packages/rocketchat-i18n/i18n/hr.i18n.json
  67. 2
      packages/rocketchat-i18n/i18n/hu.i18n.json
  68. 2
      packages/rocketchat-i18n/i18n/id.i18n.json
  69. 2
      packages/rocketchat-i18n/i18n/it.i18n.json
  70. 5
      packages/rocketchat-i18n/i18n/ja.i18n.json
  71. 2
      packages/rocketchat-i18n/i18n/km.i18n.json
  72. 2
      packages/rocketchat-i18n/i18n/ku.i18n.json
  73. 2
      packages/rocketchat-i18n/i18n/lo.i18n.json
  74. 2
      packages/rocketchat-i18n/i18n/ms-MY.i18n.json
  75. 2
      packages/rocketchat-i18n/i18n/nl.i18n.json
  76. 2
      packages/rocketchat-i18n/i18n/pl.i18n.json
  77. 8
      packages/rocketchat-i18n/i18n/pt.i18n.json
  78. 2
      packages/rocketchat-i18n/i18n/ro.i18n.json
  79. 2
      packages/rocketchat-i18n/i18n/ru.i18n.json
  80. 2
      packages/rocketchat-i18n/i18n/sq.i18n.json
  81. 2
      packages/rocketchat-i18n/i18n/sv.i18n.json
  82. 2
      packages/rocketchat-i18n/i18n/ta-IN.i18n.json
  83. 2
      packages/rocketchat-i18n/i18n/tr.i18n.json
  84. 2
      packages/rocketchat-i18n/i18n/ug.i18n.json
  85. 2
      packages/rocketchat-i18n/i18n/uk.i18n.json
  86. 2
      packages/rocketchat-i18n/i18n/zh-TW.i18n.json
  87. 2
      packages/rocketchat-i18n/i18n/zh.i18n.json
  88. 23
      packages/rocketchat-iframe-login/iframe_client.js
  89. 2
      packages/rocketchat-importer/server/startup/setImportsToInvalid.coffee
  90. 8
      packages/rocketchat-integrations/server/api/api.coffee
  91. 2
      packages/rocketchat-integrations/server/processWebhookMessage.js
  92. 72
      packages/rocketchat-integrations/server/triggers.coffee
  93. 4
      packages/rocketchat-internal-hubot/hubot.coffee
  94. 8
      packages/rocketchat-internal-hubot/package.js
  95. 11
      packages/rocketchat-ldap/server/loginHandler.js
  96. 21
      packages/rocketchat-ldap/server/sync.js
  97. 11
      packages/rocketchat-lib/client/lib/Layout.js
  98. 5
      packages/rocketchat-lib/client/lib/openRoom.coffee
  99. 7
      packages/rocketchat-lib/client/lib/roomTypes.coffee
  100. 1
      packages/rocketchat-lib/package.js
  101. Some files were not shown because too many files have changed in this diff Show More

@ -1,4 +1,4 @@
FROM rocketchat/base:0.10
FROM rocketchat/base:4
ENV RC_VERSION latest

@ -1,14 +1,11 @@
lib/ua-parser.min.js
node_modules
packages/autoupdate/
packages/meteor-streams/
packages/meteor-timesync/
packages/rocketchat-autolinker/lib/Autolinker.min.js
packages/rocketchat-emoji-emojione/generateEmojiIndex.js
packages/rocketchat-favico/favico.js
packages/rocketchat-katex/client/katex/katex.min.js
packages/rocketchat-livechat/app/client/lib/Autolinker.min.js
packages/rocketchat-livechat/client/lib/ua-parser.js
packages/rocketchat-livechat/lib/ua-parser.js
packages/rocketchat-livechat/app/node_modules
packages/rocketchat-livechat/public/external.js
packages/rocketchat-livechat/public/livechat.js
packages/rocketchat-migrations/

@ -67,7 +67,7 @@
"curly": [2, "all"],
"eqeqeq": [2, "allow-null"],
"new-cap": [2, {
"capIsNewExceptions": ["Match.Optional"]
"capIsNewExceptions": ["Match.Optional", "Match.Maybe"]
}],
"use-isnan": 2,
"valid-typeof": 2,
@ -84,6 +84,7 @@
"Assets" : false,
"Blaze" : false,
"BlazeLayout" : false,
"browser" : false,
"ChatMessage" : false,
"ChatMessages" : false,
"ChatRoom" : false,

1
.gitignore vendored

@ -69,3 +69,4 @@ ecosystem.json
pm2.json
settings.json
build.sh
/public/livechat

@ -1,2 +0,0 @@
approvals = 2
pattern = "(?i)LGTM"

@ -4,39 +4,39 @@
# but you can also edit it by hand.
rocketchat:cors
accounts-facebook@1.0.10
accounts-github@1.0.10
accounts-google@1.0.10
accounts-meteor-developer@1.0.10
accounts-password@1.3.0
accounts-twitter@1.1.11
blaze-html-templates@1.0.4
check@1.2.3
coffeescript@1.2.4_1
ddp-rate-limiter@1.0.5
ecmascript@0.5.8
ejson@1.0.12
email@1.1.17
fastclick@1.0.12
http@1.2.9
jquery@1.11.9
less@2.7.5
logging@1.1.15
meteor-base@1.0.4
mobile-experience@1.0.4
mongo@1.1.12
random@1.0.10
rate-limit@1.0.5
reactive-dict@1.1.8
reactive-var@1.0.10
reload@1.1.10
service-configuration@1.0.10
session@1.1.6
accounts-facebook
accounts-github
accounts-google
accounts-meteor-developer
accounts-password
accounts-twitter
blaze-html-templates
check
coffeescript
ddp-rate-limiter
ecmascript
ejson
email
fastclick
http
jquery
less
logging
meteor-base
mobile-experience
mongo
random
rate-limit
reactive-dict
reactive-var
reload
service-configuration
session
shell-server
spacebars@1.0.12
standard-minifier-css@1.2.0
standard-minifier-js@1.2.0
tracker@1.1.0
spacebars
standard-minifier-css
standard-minifier-js
tracker
rocketchat:action-links
rocketchat:api
@ -49,6 +49,7 @@ rocketchat:channel-settings-mail-messages
rocketchat:colors
rocketchat:crowd
rocketchat:custom-oauth
rocketchat:error-handler
rocketchat:emoji
rocketchat:emoji-custom
rocketchat:emoji-emojione

@ -13,17 +13,16 @@ babel-compiler@6.9.1
babel-runtime@0.1.11
base64@1.0.9
binary-heap@1.0.9
blaze@2.1.8
blaze-html-templates@1.0.4
blaze-tools@1.0.9
boilerplate-generator@1.0.9
blaze@2.1.9
blaze-html-templates@1.0.5
blaze-tools@1.0.10
boilerplate-generator@1.0.10
caching-compiler@1.1.7
caching-html-compiler@1.0.6
caching-html-compiler@1.0.7
callback-hook@1.0.9
cfs:http-methods@0.0.32
check@1.2.3
chrismbeckett:toastr@2.1.2_1
chuangbo:cookie@1.1.0
coffeescript@1.2.4_1
dandv:caret-position@2.1.1
ddp@1.2.5
@ -47,13 +46,13 @@ geojson-utils@1.0.9
github@1.1.8
google@1.1.14
hot-code-push@1.0.4
html-tools@1.0.10
htmljs@1.0.10
html-tools@1.0.11
htmljs@1.0.11
http@1.2.9
id-map@1.0.8
jalik:ufs@0.6.7
jalik:ufs-gridfs@0.1.1
jalik:ufs-local@0.2.5
jalik:ufs@0.6.9_1
jalik:ufs-gridfs@0.1.2
jalik:ufs-local@0.2.6
jparker:crypto-core@0.1.0
jparker:crypto-md5@0.1.1
jparker:gravatar@0.5.1
@ -77,11 +76,7 @@ mdg:validation-error@0.5.1
meteor@1.2.17
meteor-base@1.0.4
meteor-developer@1.1.9
meteorhacks:fast-render@2.16.0
meteorhacks:inject-data@2.0.0
meteorhacks:inject-initial@1.0.4
meteorhacks:meteorx@1.4.1
meteorhacks:picker@1.0.3
meteorspark:util@0.2.0
minifier-css@1.2.14
minifier-js@1.2.14
@ -92,7 +87,7 @@ mobile-experience@1.0.4
mobile-status-bar@1.0.12
modules@0.7.6
modules-runtime@0.7.6
momentjs:moment@2.15.0
momentjs:moment@2.15.1
monbro:mongodb-mapreduce-aggregation@1.0.1
mongo@1.1.12
mongo-id@1.0.5
@ -145,6 +140,7 @@ rocketchat:custom-oauth@1.0.0
rocketchat:emoji@1.0.0
rocketchat:emoji-custom@1.0.0
rocketchat:emoji-emojione@0.0.1
rocketchat:error-handler@1.0.0
rocketchat:favico@0.0.1
rocketchat:file@0.0.1
rocketchat:file-upload@0.0.1
@ -223,21 +219,23 @@ shell-server@0.2.1
simple:highlight.js@1.2.0
simple:json-routes@2.1.0
smoral:sweetalert@1.1.1
spacebars@1.0.12
spacebars-compiler@1.0.12
spacebars@1.0.13
spacebars-compiler@1.0.13
srp@1.0.9
standard-minifier-css@1.2.0
standard-minifier-js@1.2.0
steffo:meteor-accounts-saml@0.0.1
tap:i18n@1.8.2
templating@1.2.14
templating-tools@1.0.4
templating@1.2.15
templating-compiler@1.2.15
templating-runtime@1.2.15
templating-tools@1.0.5
tmeasday:crypto-base@3.1.2
tmeasday:crypto-md5@3.1.2
todda00:friendly-slugs@0.6.0
tracker@1.1.0
twitter@1.1.12
ui@1.0.11
ui@1.0.12
underscore@1.0.9
underscorestring:underscore.string@3.3.4
url@1.0.10

@ -3,13 +3,9 @@ set -x
set -euvo pipefail
# Make meteor bundle
METEOR_WAREHOUSE_DIR="${METEOR_WAREHOUSE_DIR:-$HOME/.meteor}"
METEOR_DEV_BUNDLE=$(dirname $(readlink -f "$METEOR_WAREHOUSE_DIR/meteor"))/dev_bundle
cd /opt/app
meteor build --directory /home/vagrant/
(cd /home/vagrant/bundle/programs/server && "$METEOR_DEV_BUNDLE/bin/npm" install)
(cd /home/vagrant/bundle/programs/server && meteor npm install)
# Copy our launcher script into the bundle so the grain can start up.
mkdir -p /home/vagrant/bundle/opt/app/.sandstorm/

@ -19,9 +19,9 @@ const pkgdef :Spk.PackageDefinition = (
appTitle = (defaultText = "Rocket.Chat"),
appVersion = 39, # Increment this for every release.
appVersion = 41, # Increment this for every release.
appMarketingVersion = (defaultText = "0.39.0"),
appMarketingVersion = (defaultText = "0.42.0-develop"),
# Human-readable representation of appVersion. Should match the way you
# identify versions of your app in documentation and marketing.

@ -4,7 +4,7 @@ set -euvo pipefail
cd /opt/
PACKAGE=meteor-spk-0.2.1
PACKAGE=meteor-spk-0.3.0
PACKAGE_FILENAME="$PACKAGE.tar.xz"
CACHE_TARGET="/host-dot-sandstorm/caches/${PACKAGE_FILENAME}"
@ -28,7 +28,7 @@ cp -a /lib/x86_64-linux-gnu/libtinfo.so.* /opt/meteor-spk/meteor-spk.deps/lib/x8
# Unfortunately, Meteor does not explicitly make it easy to cache packages, but
# we know experimentally that the package is mostly directly extractable to a
# user's $HOME/.meteor directory.
METEOR_RELEASE=1.2.1
METEOR_RELEASE=1.4.1.1
METEOR_PLATFORM=os.linux.x86_64
METEOR_TARBALL_FILENAME="meteor-bootstrap-${METEOR_PLATFORM}.tar.gz"
METEOR_TARBALL_URL="https://d3sqy0vbqsdhku.cloudfront.net/packages-bootstrap/${METEOR_RELEASE}/${METEOR_TARBALL_FILENAME}"

@ -7,7 +7,7 @@
# 5. `snapcraft snap`
name: rocketchat-server
version: develop
version: 0.42.0-develop
summary: Rocket.Chat server
description: Have your own Slack like online chat, built with Meteor. https://rocket.chat/
confinement: strict
@ -25,25 +25,11 @@ parts:
plugin: nodejs
node-engine: 4.5.0
node-packages:
- amdefine
- ansi-regex
- ansi-styles
- asap
- chalk
- eachline
- escape-string-regexp
- has-ansi
- promise
- fibers
- underscore
- strip-ansi
- source-map
- source-map-support
- semver
- supports-color
- type-of
- babel-compiler
- meteor-promise
build-packages:
# For fibers
- python
@ -54,13 +40,22 @@ parts:
rocketchat-server:
plugin: dump
after: [mongodb]
source: https://cdn-download.rocket.chat/build/rocket.chat-develop.tgz
source: https://rocket.chat/releases/develop/download
source-type: tar
stage-packages:
- imagemagick
organize:
usr/bin/convert-im6: usr/bin/convert
stage:
- programs
- main.js
- usr
- lib
snap:
- programs
- main.js
- usr
- lib
mongodb:
source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.7.tgz
plugin: dump

@ -1,5 +1,13 @@
#
# Easiest way to work with this file, from an updated Ubuntu 16.04 LTS image
# 1. create a non-root user with sudo priv and perform following steps as non-root
# 2. `sudo apt-get update`
# 3. `sudo apt-get install snapcraft python build-essential`
# 4. `snapcraft stage`
# 5. `snapcraft snap`
name: rocketchat-server
version: 0.39.0
version: 0.41.0
summary: Rocket.Chat server
description: Have your own Slack like online chat, built with Meteor. https://rocket.chat/
confinement: strict
@ -17,25 +25,11 @@ parts:
plugin: nodejs
node-engine: 4.5.0
node-packages:
- amdefine
- ansi-regex
- ansi-styles
- asap
- chalk
- eachline
- escape-string-regexp
- has-ansi
- promise
- fibers
- underscore
- strip-ansi
- source-map
- source-map-support
- semver
- supports-color
- type-of
- babel-compiler
- meteor-promise
build-packages:
# For fibers
- python
@ -47,12 +41,21 @@ parts:
plugin: dump
after: [mongodb]
source: https://rocket.chat/releases/latest/download
source-type: tar
stage-packages:
- imagemagick
organize:
usr/bin/convert-im6: usr/bin/convert
stage:
- programs
- main.js
- usr
- lib
snap:
- programs
- main.js
- usr
- lib
mongodb:
source: https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-ubuntu1604-3.2.7.tgz
plugin: dump

@ -15,11 +15,23 @@ addons:
- ubuntu-toolchain-r-test
packages:
- g++-4.8
before_cache:
- rm -rf $HOME/build/RocketChat/Rocket.Chat/.meteor/local/log
- rm -rf $HOME/build/RocketChat/Rocket.Chat/.meteor/local/run
- rm -rf $HOME/build/RocketChat/Rocket.Chat/.meteor/local/db
cache:
directories:
- "~/.meteor"
- "$HOME/node_modules"
- "$HOME/.meteor"
- "$HOME/.npm"
- "$HOME/.node-gyp"
- "$HOME/build/RocketChat/Rocket.Chat/node_modules"
- "$HOME/build/RocketChat/Rocket.Chat/.meteor/local"
- "$HOME/build/RocketChat/Rocket.Chat/packages/rocketchat-livechat/.npm"
- "$HOME/build/RocketChat/Rocket.Chat/packages/rocketchat-livechat/app/node_modules"
- "$HOME/build/RocketChat/Rocket.Chat/packages/rocketchat-livechat/app/.meteor/local"
before_install:
- if [ ! -e "$HOME/.meteor/meteor" ]; then curl https://install.meteor.com | /bin/sh; fi
- if [ ! -e "$HOME/.meteor/meteor" ]; then curl https://install.meteor.com | sed s/--progress-bar/-sL/g | /bin/sh; fi
install:
- export PATH="$HOME/.meteor:$PATH"
before_script:
@ -27,7 +39,7 @@ before_script:
- npm install
- npm run lint
script:
- meteor build /tmp/build
- travis_retry travis_wait 15 meteor build /tmp/build
before_deploy:
- source ".travis/setartname.sh"
- source ".travis/setdeploydir.sh"
@ -48,8 +60,10 @@ deploy:
after_deploy:
- ".travis/docker.sh"
- ".travis/update-releases.sh"
- ".travis/snap.sh"
env:
global:
- CXX=g++-4.8
- METEOR_PRETTY_OUTPUT=0
- secure: HrPOM5sBibYkMcf9aeQThYPCDiXeLkg0Xgv0HvH88/ku/gphDpNEjHNReHZM3cyfm9y3RhHpVdD+Zzy38S2goKyewRzpXJsuyerOYkjND0v3tivhs9CAX8PAUxj1U5zllTyH4bgW2ZwRtNnwnmtIM/JJlnySMpKVDqIZBpbhn3ph9bJ2J+BW3D3Jw8meQ1vCX8szIibyJK/5QX6HG2RBFXJGYoQ8DmR8jQv0aJQvT1Az5DO4yImk8tX4NP95qOc19Jywr1DsbaSBZeJ8lFJAmBpIGx7KAmUVCcxSxfbXGRhs2K4iEYb3rJ/dU6KiyPsKGUG4aYNGgbvcX0ZxX/BZ6ZU9ff0E4IIf43IxoN3ElrOqOFk5msJAXbrJEreINSzDqKOy8NFYtCQ49E2gwzfage4ZXkhFyx3wMPa5bzpr3ncsTceMjMVz03uL781X6NLuCkUmXv+n8K2MNhJU9Xinpdx1GRJm+0lXJspNNJ1ruHeJtls4epj4bmCwKmmZbFKPXqa5e8xVcMIkwt1LMiHduhE+WgKNHdOMhXrCcTxF62ybLlsHXmyLLJeNjTeKS8QG2XSoonClDAz/1R41I1DsMPblcgz9uvYCf7UtyftbhJ83bnJeEmOYQiwijLG0+QMq+B2+mmZan3Z7Hl7O53dnwuLxz7EO7EhQhY+CqHVgc6s=
- secure: w55v/9dmQ9wKbc+fhkZdWfaXIGi+5Qo365J0/IEZRCle2jFWUMBSzEghUuubw9Pys56uAcivOzKozT7+qozVaQW9kSgTLK4bSUSWKeSuynF7Too0CNdzt8CWgjcxGvYVWP0vlp+2eTI0x9+HJlFZn1hP+3v9C+ASH6+sqXvi24kNOPANsUvlbwIC7+T3kOdOOFzrA/tNLkXp2NGs9OaHVnvOVrZlHIn0TL8kGV1HyW4k4KLPgAcwgDq8DRWQBWk+E59HyTGXMyt/GxAJkjEebcJ/TnrbCiExbrTY+OmHjwk8Yfp9CbWsEtEYWSdLoNaFMhUrJRGGKjtansqQWktfkrN/Ro6Scl+lorQQ3eBu+ZVdmx3BXj8TRyqkhh6sqbola5XGhffp61fKxLcbYFE6Ph7g9twvFArCt2/zifmKYxH/NniCKGir5eZZnfFwTE6y2b+m37gjd7jd4t8SEcbFKH7tvOVRNm79VDqBQo0rNieCM5fPKsZkYD7sjB9G7cuZaZLAKUJf1K/FYqCeGeNV0Wcxi95nBh5usenm88xdajShxxKJedi1n77qqj03KxW7ictDnt/sEzz6vHjyf1O2pFUuPZ2eVwenpa0utDOvBTYd10OSlqlWaG/ldNJ8ofl/fawm0of4xp0rY3UNaTYdCZsPm6qfq7NIocefb/qeAJ4=

@ -1,5 +1,4 @@
#!/bin/bash
set -x
set -euvo pipefail
IFS=$'\n\t'

@ -22,6 +22,8 @@ else
SNAP_FOLDER=$PWD/.snapcraft/edge
fi
echo "snapping release for $CHANNEL channel"
docker run -v $HOME:/root -v $SNAP_FOLDER:/cwd snapcore/snapcraft sh -c 'cd /cwd; apt update && snapcraft'
docker run -v $HOME:/root -v $SNAP_FOLDER:/cwd -e CHANNEL=$CHANNEL snapcore/snapcraft sh -c "cd /cwd; snapcraft push *.snap --release $CHANNEL"

@ -1,4 +1,127 @@
## NEXT
# History
## 0.41.0, 2016-Sep-27
- Add ability to close open livechats if an agent goes offline
- Add basic channels tests
- Add Error Handler to send uncaught exceptions to a room
- Add filter to current livechats screen
- Add login tests
- Add migration to remove old Crowd setting
- Add new global events
- Allow webhook to decide if message is groupable
- Catch errors sending mail
- Fix auto complete issues with users and emoji
- Fix error CodeMirror undefined when leaving admin
- Fix ignore JSON.parse errors
- Fix jitsiTimeout errors
- Fix list of user auto complete from server
- Fix open a new window if on embedded view mode
- Fix stop registration if mail fails
- Fix variable name in webhook (#4439)
- Flip user video
- Made Accounts_UseDNSDomainCheck false by default
- Prevent edited messaged breaking line
- Prevent empty username suggestion
- Prevent error when parsing oembed meta
- Remove colon from users autocomplete
- Removed fast-render
- Removed the word BY from the edited description title
- Rename atlassian crowd url to remove space
- Replace autocomplte popups subscriptions with methods
- Trigger global event to embedded images
## 0.40.1, 2016-Sep-21
- Allow Iframe login with default tokens
- Fix embedded layout message box auto-resize
- Fix for the new return of findAndModify
- Fix mesaage search to use users' timezone when searching on dates
- Fix popout mode for livechat
- Fix to update custom emojis in real time
- Replace fontello by svg icons on LiveChat
- Show file type on file upload error (#3217)
- Use the npm package of UAParser on LiveChat
## 0.40.0, 2016-Sep-20
### IMPORTANT: Upgraded to meteor 1.4.1.1 - Now uses NodeJS 4.5
- Add a minimalistic view for embedded layout
- Add a setting to disable system notifications
- Add a setting to make the timezone configurable in the Smarsh Connector
- Add ability of multiple users invitation to slash command `invite`
- Add API endpoint to create users
- Add API endpoint to edit users
- Add chimp to package.json dev dependencies to start our e2e tests
- Add database migration script to remove invalid subscriptions records
- Add Hex Color Preview Setting
- Add imagemagick to the snaps
- Add load more button to permissions manager
- Add localforage and clipboard via NPM
- Add method to get files in sync way
- Add more logs for outgoing webhook
- Add option to hide a custom field from the register form
- Add package rocketchat-custom-emoji
- Add package rocketchat-emoji-base: a base package for adding new sets of emoji
- Add replica set and automatic SSL to docker-compose
- Add reply button to message actions
- Add setting to allow the sending of unrecognized slash commands for handling by bots
- Add snap package yaml for Rocket.Chat
- Add TAPi18n.__ to slashcommand params
- Added readOnly option to channel settings panel
- Added roomTypesClient method to check if room is readOnly
- Allow consecutive large emojis in a message where only emoji is present
- Allow use empty/wrong LDAP_Username_Field (#4259)
- Any users present when a read-only channel is created are muted
- Auto hide scrollbars on windows
- Autolinker: Use npm module and convert from CoffeeScript (#4293)
- Avoid darh-n-drops to the side-nav result in opening the files in the browser
- Change post-read-only to post-readonly and create set-readonly
- Check if the user being removed is the last owner of the room
- Check mention-all permisson with message creator rather than current user
- Clarify the descriotion of the keep history setting
- Fix /open with an invalid name
- Fix Can't Change a Room's Name (#4173) (#4226)
- Fix count of unread messages on rtl
- Fix error when typing on a recently opened room
- Fix Exception while invoking method sendForgotPasswordEmail (#4203)
- Fix insert of Default Custom SAML
- Fix IP regular expression for clickable link
- Fix rtl spotlight and prevent line break
- Fix Translations for slashcommands
- HTML-escape user data when storing in Meteor Error
- Improve incoming webhook logs
- Improve look and feel of upload and unread bars
- Improve message day divider
- Improve outgoing webhook logs
- Improve scroll look of textarea
- Improve search options
- Improve spotlight to search in subscriptions (#4269)
- Improve upload bars layout
- Improve upload error messages
- Include all public rooms and users on spotlight search
- Incorrect avatar image on Chrome 53 (#4325)
- Limit message box height
- Make the CSS for the loading animation inline to avoid blank screen
- Markdown url links that point to server url should not open in blank
- MessageBox hidden and dropzone disabled for read-only room if user doesn't have permission to post
- Migration for statistics installedAt and settings createdAt
- Move livechat bundled assets to root app
- Only show textarea scroll if necessary
- Only try to auto orient jpeg, png and bmp files
- Open new direct rooms correctly (#4322)
- Open new rooms for direct messages correctly via spotlight
- Reactive the rate limiter of method `sendMessage`
- Refactored to remove unnecessary addUsernameByIdAndMute method
- Remove particlesjs
- Renamed users-typing class to stream-info, added 'this room is read only' message
- Set subscriptions archived when user is deactivated
- SetReadOnlyById now removes empty muted array from room record
- Speed improvement on theme compilation
- Standardised channel info icon
- Using faster npm bcrypt module
- Verify permissions on spotlight list
## 0.39.0, 2016-Sep-05

@ -378,17 +378,15 @@ A lot of work has already gone into Rocket.Chat, but we have much bigger plans f
# Credits
Thanks to
Thanks to our core team
[Aaron Ogle](https://github.com/geekgonecrazy),
[Bradley Hilton](https://github.com/Graywolf336),
[Diego Sampaio](https://github.com/sampaiodiego),
[Gabriel Engel](https://github.com/engelgabriel),
[George Secrieru](https://github.com/gmsecrieru),
[Marcelo Schmidt](https://github.com/marceloschmidt),
[Rafael Caferati](https://github.com/rcaferati),
[Rodrigo Nascimento](https://github.com/rodrigok),
[Sing Li](https://github.com/Sing-Li),
and many others.
and to hundreds of awesome [contributors](https://github.com/RocketChat/Rocket.Chat/graphs/contributors).
Emoji provided free by [Emoji One](http://emojione.com)
@ -402,4 +400,7 @@ Rocket.Chat will be free forever, but you can help us speed-up the development!
[![Donate](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=ZL94ZE6LGVUSN)
[![Bitcoins](https://github.com/RocketChat/Rocket.Chat.Docs/blob/master/1.%20Contributing/Donating/coinbase.png?raw=true)](https://www.coinbase.com/checkouts/ac2fa967efca7f6fc1201d46bdccb875)
[BountySource](https://www.bountysource.com/teams/rocketchat)

@ -9,7 +9,7 @@ this.handleError = function(error, useToastr = true) {
if (useToastr) {
return toastr.error(TAPi18n.__(error.error, error.details), error.details && error.details.errorTitle ? TAPi18n.__(error.details.errorTitle) : null);
} else {
return TAPi18n.__(error.error, error.details);
}
return TAPi18n.__(error.error, error.details);
};

@ -14,7 +14,7 @@ FlowRouter.route '/',
name: 'index'
action: ->
BlazeLayout.render 'main', {center: 'loading'}
BlazeLayout.render 'main', { modal: RocketChat.Layout.isEmbedded(), center: 'loading' }
if not Meteor.userId()
return FlowRouter.go 'home'

@ -1,18 +1,12 @@
mongo:
image: mongo
# volumes:
# - ./data/runtime/db:/data/db
# - ./data/dump:/dump
command: mongod --smallfiles --oplogSize 128
rocketchat:
image: rocketchat/rocket.chat:latest
# volumes:
# - ./uploads:/app/uploads
volumes:
- ./uploads:/app/uploads
environment:
- PORT=3000
- ROOT_URL=http://yourhost:3000
- ROOT_URL=http://localhost:3000
- MONGO_URL=mongodb://mongo:27017/rocketchat
- MONGO_OPLOG_URL=mongodb://mongo:27017/local
- MAIL_URL=smtp://smtp.email
- HTTP_PROXY=http://proxy.domain.com
- HTTPS_PROXY=http://proxy.domain.com
@ -20,10 +14,28 @@ rocketchat:
- mongo:mongo
ports:
- 3000:3000
labels:
- "traefik.backend=rocketchat"
- "traefik.frontend.rule=Host: your.domain.tld"
mongo:
image: mongo:3.2
volumes:
- ./data/db:/data/db
# - ./data/dump:/dump
command: mongod --smallfiles --oplogSize 128 --replSet rs0
labels:
- "traefik.enable=false"
mongo-init-replica:
image: mongo:3.2
command: 'mongo mongo/rocketchat --eval "rs.initiate({ _id: ''rs0'', members: [ { _id: 0, host: ''localhost:27017'' } ]})"'
links:
- mongo:mongo
# hubot, the popular chatbot (add the bot user first and change the password before starting this image)
hubot:
image: rocketchat/hubot-rocketchat:v0.1.4
image: rocketchat/hubot-rocketchat:latest
environment:
- ROCKETCHAT_URL=rocketchat:3000
- ROCKETCHAT_ROOM=GENERAL
@ -34,6 +46,19 @@ hubot:
- EXTERNAL_SCRIPTS=hubot-help,hubot-seen,hubot-links,hubot-diagnostics
links:
- rocketchat:rocketchat
labels:
- "traefik.enable=false"
volumes:
- ./scripts:/home/hubot/scripts
# this is used to expose the hubot port for notifications on the host on port 3001, e.g. for hubot-jenkins-notifier
ports:
- 3001:8080
#traefik:
# image: traefik:latest
# command: traefik --docker --acme=true --acme.domains='your.domain.tld' --acme.email='your@email.tld' --acme.entrypoint=https --acme.storagefile=acme.json --defaultentrypoints=http --defaultentrypoints=https --entryPoints='Name:http Address::80 Redirect.EntryPoint:https' --entryPoints='Name:https Address::443 TLS.Certificates:'
# ports:
# - 80:80
# - 443:443
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock

@ -1,33 +1,41 @@
{
"name": "Rocket.Chat",
"description": "The Ultimate Open Source WebChat Platform",
"version": "0.39.0",
"version": "0.42.0-develop",
"author": {
"name": "Rocket.Chat",
"url": "http://rocket.chat/"
"url": "https://rocket.chat/"
},
"contributors": [{
"name": "Aaron Ogle",
"email": "aaron.olge@rocket.chat"
}, {
"name": "Bradley Hilton",
"email": "bradley.hilton@rocket.chat"
}, {
"name": "Diego Sampaio",
"email": "diego.sampaio@rocket.chat"
}, {
"name": "Gabriel Engel",
"email": "gabriel.engel@rocket.chat"
}, {
"name": "Marcelo Schmidt",
"email": "marcelo.schmidt@rocket.chat"
}, {
"name": "Rodrigo Nascimento",
"email": "rodrigo.nascimento@rocket.chat"
}, {
"name": "Sing Li",
"email": "sing.li@rocket.chat"
}],
"contributors": [
{
"name": "Aaron Ogle",
"email": "aaron.olge@rocket.chat"
},
{
"name": "Bradley Hilton",
"email": "bradley.hilton@rocket.chat"
},
{
"name": "Diego Sampaio",
"email": "diego.sampaio@rocket.chat"
},
{
"name": "Gabriel Engel",
"email": "gabriel.engel@rocket.chat"
},
{
"name": "Marcelo Schmidt",
"email": "marcelo.schmidt@rocket.chat"
},
{
"name": "Rodrigo Nascimento",
"email": "rodrigo.nascimento@rocket.chat"
},
{
"name": "Sing Li",
"email": "sing.li@rocket.chat"
}
],
"keywords": [
"rocketchat",
"rocket",
@ -36,7 +44,9 @@
"scripts": {
"start": "meteor run",
"lint": "eslint .",
"deploy": "npm run build && pm2 startOrRestart pm2.json"
"deploy": "npm run build && pm2 startOrRestart pm2.json",
"chimp-watch": "chimp --ddp=http://localhost:3000 --watch --mocha --path=tests",
"chimp-test": "chimp --mocha --path=tests --mochaSlow=0"
},
"license": "MIT",
"repository": {
@ -48,6 +58,7 @@
"email": "support@rocket.chat"
},
"devDependencies": {
"chimp": "^0.40.7",
"eslint": "^3.1.1"
},
"dependencies": {

@ -4,8 +4,8 @@ Package.describe({
});
Cordova.depends({
'cordova-plugin-file': '2.1.0',
'cordova-plugin-file-transfer': '1.2.0'
'cordova-plugin-file': '4.1.1',
'cordova-plugin-file-transfer': '1.5.1'
});
Package.onUse(function (api) {

@ -0,0 +1,7 @@
This directory and the files immediately inside it are automatically generated
when you change this package's NPM dependencies. Commit the files in this
directory (npm-shrinkwrap.json, .gitignore, and this README) to source control
so that others run the same versions of sub-dependencies.
You should NOT check in the node_modules directory that Meteor automatically
creates; if you are using git, the .gitignore file tells git to ignore it.

@ -0,0 +1,503 @@
{
"dependencies": {
"ansi-regex": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.0.0.tgz",
"from": "ansi-regex@>=2.0.0 <3.0.0"
},
"ansi-styles": {
"version": "2.2.1",
"resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz",
"from": "ansi-styles@>=2.2.1 <3.0.0"
},
"array-differ": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/array-differ/-/array-differ-1.0.0.tgz",
"from": "array-differ@>=1.0.0 <2.0.0"
},
"array-find-index": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.1.tgz",
"from": "array-find-index@>=1.0.1 <2.0.0"
},
"array-uniq": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz",
"from": "array-uniq@>=1.0.2 <2.0.0"
},
"autolinker": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/autolinker/-/autolinker-1.1.0.tgz",
"from": "autolinker@1.1.0"
},
"beeper": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/beeper/-/beeper-1.1.0.tgz",
"from": "beeper@>=1.0.0 <2.0.0"
},
"builtin-modules": {
"version": "1.1.1",
"resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-1.1.1.tgz",
"from": "builtin-modules@>=1.0.0 <2.0.0"
},
"camelcase": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz",
"from": "camelcase@>=2.0.0 <3.0.0"
},
"camelcase-keys": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz",
"from": "camelcase-keys@>=2.0.0 <3.0.0"
},
"chalk": {
"version": "1.1.3",
"resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz",
"from": "chalk@>=1.0.0 <2.0.0"
},
"clone": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz",
"from": "clone@>=1.0.0 <2.0.0"
},
"clone-stats": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-0.0.1.tgz",
"from": "clone-stats@>=0.0.1 <0.0.2"
},
"concat-with-sourcemaps": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/concat-with-sourcemaps/-/concat-with-sourcemaps-1.0.4.tgz",
"from": "concat-with-sourcemaps@*"
},
"core-util-is": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz",
"from": "core-util-is@>=1.0.0 <1.1.0"
},
"currently-unhandled": {
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz",
"from": "currently-unhandled@>=0.4.1 <0.5.0"
},
"dateformat": {
"version": "1.0.12",
"resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz",
"from": "dateformat@>=1.0.11 <2.0.0"
},
"decamelize": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz",
"from": "decamelize@>=1.1.2 <2.0.0"
},
"duplexer2": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz",
"from": "duplexer2@0.0.2"
},
"error-ex": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.0.tgz",
"from": "error-ex@>=1.2.0 <2.0.0"
},
"escape-string-regexp": {
"version": "1.0.5",
"resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz",
"from": "escape-string-regexp@>=1.0.2 <2.0.0"
},
"fancy-log": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/fancy-log/-/fancy-log-1.2.0.tgz",
"from": "fancy-log@>=1.1.0 <2.0.0"
},
"find-up": {
"version": "1.1.2",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz",
"from": "find-up@>=1.0.0 <2.0.0"
},
"get-stdin": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz",
"from": "get-stdin@>=4.0.1 <5.0.0"
},
"glogg": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/glogg/-/glogg-1.0.0.tgz",
"from": "glogg@>=1.0.0 <2.0.0"
},
"graceful-fs": {
"version": "4.1.6",
"resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.6.tgz",
"from": "graceful-fs@>=4.1.2 <5.0.0"
},
"gulp-header": {
"version": "1.8.8",
"resolved": "https://registry.npmjs.org/gulp-header/-/gulp-header-1.8.8.tgz",
"from": "gulp-header@>=1.7.1 <2.0.0"
},
"gulp-util": {
"version": "3.0.7",
"resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.7.tgz",
"from": "gulp-util@*",
"dependencies": {
"object-assign": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-3.0.0.tgz",
"from": "object-assign@>=3.0.0 <4.0.0"
}
}
},
"gulplog": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/gulplog/-/gulplog-1.0.0.tgz",
"from": "gulplog@>=1.0.0 <2.0.0"
},
"has-ansi": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz",
"from": "has-ansi@>=2.0.0 <3.0.0"
},
"has-gulplog": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/has-gulplog/-/has-gulplog-0.1.0.tgz",
"from": "has-gulplog@>=0.1.0 <0.2.0"
},
"hosted-git-info": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.1.5.tgz",
"from": "hosted-git-info@>=2.1.4 <3.0.0"
},
"indent-string": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz",
"from": "indent-string@>=2.1.0 <3.0.0"
},
"inherits": {
"version": "2.0.3",
"resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz",
"from": "inherits@>=2.0.1 <2.1.0"
},
"is-arrayish": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz",
"from": "is-arrayish@>=0.2.1 <0.3.0"
},
"is-builtin-module": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-1.0.0.tgz",
"from": "is-builtin-module@>=1.0.0 <2.0.0"
},
"is-finite": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.1.tgz",
"from": "is-finite@>=1.0.0 <2.0.0"
},
"is-utf8": {
"version": "0.2.1",
"resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz",
"from": "is-utf8@>=0.2.0 <0.3.0"
},
"isarray": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
"from": "isarray@0.0.1"
},
"load-json-file": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz",
"from": "load-json-file@>=1.0.0 <2.0.0"
},
"lodash._basecopy": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/lodash._basecopy/-/lodash._basecopy-3.0.1.tgz",
"from": "lodash._basecopy@>=3.0.0 <4.0.0"
},
"lodash._basetostring": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/lodash._basetostring/-/lodash._basetostring-3.0.1.tgz",
"from": "lodash._basetostring@>=3.0.0 <4.0.0"
},
"lodash._basevalues": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/lodash._basevalues/-/lodash._basevalues-3.0.0.tgz",
"from": "lodash._basevalues@>=3.0.0 <4.0.0"
},
"lodash._getnative": {
"version": "3.9.1",
"resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz",
"from": "lodash._getnative@>=3.0.0 <4.0.0"
},
"lodash._isiterateecall": {
"version": "3.0.9",
"resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz",
"from": "lodash._isiterateecall@>=3.0.0 <4.0.0"
},
"lodash._reescape": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/lodash._reescape/-/lodash._reescape-3.0.0.tgz",
"from": "lodash._reescape@>=3.0.0 <4.0.0"
},
"lodash._reevaluate": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/lodash._reevaluate/-/lodash._reevaluate-3.0.0.tgz",
"from": "lodash._reevaluate@>=3.0.0 <4.0.0"
},
"lodash._reinterpolate": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz",
"from": "lodash._reinterpolate@>=3.0.0 <4.0.0"
},
"lodash._root": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/lodash._root/-/lodash._root-3.0.1.tgz",
"from": "lodash._root@>=3.0.0 <4.0.0"
},
"lodash.escape": {
"version": "3.2.0",
"resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-3.2.0.tgz",
"from": "lodash.escape@>=3.0.0 <4.0.0"
},
"lodash.isarguments": {
"version": "3.1.0",
"resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz",
"from": "lodash.isarguments@>=3.0.0 <4.0.0"
},
"lodash.isarray": {
"version": "3.0.4",
"resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz",
"from": "lodash.isarray@>=3.0.0 <4.0.0"
},
"lodash.keys": {
"version": "3.1.2",
"resolved": "https://registry.npmjs.org/lodash.keys/-/lodash.keys-3.1.2.tgz",
"from": "lodash.keys@>=3.0.0 <4.0.0"
},
"lodash.restparam": {
"version": "3.6.1",
"resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
"from": "lodash.restparam@>=3.0.0 <4.0.0"
},
"lodash.template": {
"version": "3.6.2",
"resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-3.6.2.tgz",
"from": "lodash.template@>=3.0.0 <4.0.0"
},
"lodash.templatesettings": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-3.1.1.tgz",
"from": "lodash.templatesettings@>=3.0.0 <4.0.0"
},
"loud-rejection": {
"version": "1.6.0",
"resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz",
"from": "loud-rejection@>=1.0.0 <2.0.0"
},
"map-obj": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz",
"from": "map-obj@>=1.0.1 <2.0.0"
},
"meow": {
"version": "3.7.0",
"resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz",
"from": "meow@>=3.3.0 <4.0.0"
},
"minimist": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz",
"from": "minimist@>=1.1.0 <2.0.0"
},
"multipipe": {
"version": "0.1.2",
"resolved": "https://registry.npmjs.org/multipipe/-/multipipe-0.1.2.tgz",
"from": "multipipe@>=0.1.2 <0.2.0"
},
"normalize-package-data": {
"version": "2.3.5",
"resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.3.5.tgz",
"from": "normalize-package-data@>=2.3.4 <3.0.0"
},
"number-is-nan": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.0.tgz",
"from": "number-is-nan@>=1.0.0 <2.0.0"
},
"object-assign": {
"version": "4.1.0",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.0.tgz",
"from": "object-assign@*"
},
"parse-json": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
"from": "parse-json@>=2.2.0 <3.0.0"
},
"path-exists": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz",
"from": "path-exists@>=2.0.0 <3.0.0"
},
"path-type": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz",
"from": "path-type@>=1.0.0 <2.0.0"
},
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"from": "pify@>=2.0.0 <3.0.0"
},
"pinkie": {
"version": "2.0.4",
"resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz",
"from": "pinkie@>=2.0.0 <3.0.0"
},
"pinkie-promise": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz",
"from": "pinkie-promise@>=2.0.0 <3.0.0"
},
"process-nextick-args": {
"version": "1.0.7",
"resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz",
"from": "process-nextick-args@>=1.0.6 <1.1.0"
},
"read-pkg": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz",
"from": "read-pkg@>=1.0.0 <2.0.0"
},
"read-pkg-up": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz",
"from": "read-pkg-up@>=1.0.1 <2.0.0"
},
"readable-stream": {
"version": "1.1.14",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
"from": "readable-stream@>=1.1.9 <1.2.0"
},
"redent": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz",
"from": "redent@>=1.0.0 <2.0.0"
},
"repeating": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz",
"from": "repeating@>=2.0.0 <3.0.0"
},
"replace-ext": {
"version": "0.0.1",
"resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-0.0.1.tgz",
"from": "replace-ext@0.0.1"
},
"semver": {
"version": "5.3.0",
"resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz",
"from": "semver@>=2.0.0 <3.0.0||>=3.0.0 <4.0.0||>=4.0.0 <5.0.0||>=5.0.0 <6.0.0"
},
"signal-exit": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.1.tgz",
"from": "signal-exit@>=3.0.0 <4.0.0"
},
"source-map": {
"version": "0.5.6",
"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz",
"from": "source-map@>=0.5.1 <0.6.0"
},
"sparkles": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/sparkles/-/sparkles-1.0.0.tgz",
"from": "sparkles@>=1.0.0 <2.0.0"
},
"spdx-correct": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-1.0.2.tgz",
"from": "spdx-correct@>=1.0.0 <1.1.0"
},
"spdx-expression-parse": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-1.0.3.tgz",
"from": "spdx-expression-parse@>=1.0.0 <1.1.0"
},
"spdx-license-ids": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-1.2.2.tgz",
"from": "spdx-license-ids@>=1.0.2 <2.0.0"
},
"string_decoder": {
"version": "0.10.31",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
"from": "string_decoder@>=0.10.0 <0.11.0"
},
"strip-ansi": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz",
"from": "strip-ansi@>=3.0.0 <4.0.0"
},
"strip-bom": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz",
"from": "strip-bom@>=2.0.0 <3.0.0"
},
"strip-indent": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz",
"from": "strip-indent@>=1.0.1 <2.0.0"
},
"supports-color": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz",
"from": "supports-color@>=2.0.0 <3.0.0"
},
"through2": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/through2/-/through2-2.0.1.tgz",
"from": "through2@>=2.0.0 <3.0.0",
"dependencies": {
"isarray": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz",
"from": "isarray@>=1.0.0 <1.1.0"
},
"readable-stream": {
"version": "2.0.6",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz",
"from": "readable-stream@>=2.0.0 <2.1.0"
}
}
},
"time-stamp": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/time-stamp/-/time-stamp-1.0.1.tgz",
"from": "time-stamp@>=1.0.0 <2.0.0"
},
"trim-newlines": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz",
"from": "trim-newlines@>=1.0.0 <2.0.0"
},
"util-deprecate": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz",
"from": "util-deprecate@>=1.0.1 <1.1.0"
},
"validate-npm-package-license": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.1.tgz",
"from": "validate-npm-package-license@>=3.0.1 <4.0.0"
},
"vinyl": {
"version": "0.5.3",
"resolved": "https://registry.npmjs.org/vinyl/-/vinyl-0.5.3.tgz",
"from": "vinyl@>=0.5.0 <0.6.0"
},
"xtend": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.1.tgz",
"from": "xtend@>=4.0.0 <4.1.0"
}
}
}

@ -1,49 +0,0 @@
###
# AutoLinker is a named function that will replace links on messages
# @param {Object} message - The message object
###
class AutoLinker
constructor: (message) ->
if _.trim message.html
regUrls = new RegExp(RocketChat.settings.get 'AutoLinker_UrlsRegExp')
autolinker = new Autolinker
stripPrefix: RocketChat.settings.get 'AutoLinker_StripPrefix'
urls:
schemeMatches: RocketChat.settings.get 'AutoLinker_Urls_Scheme'
wwwMatches: RocketChat.settings.get 'AutoLinker_Urls_www'
tldMatches: RocketChat.settings.get 'AutoLinker_Urls_TLD'
email: RocketChat.settings.get 'AutoLinker_Email'
phone: RocketChat.settings.get 'AutoLinker_Phone'
twitter: false
replaceFn: (autolinker, match) ->
if match.getType() is 'url'
if regUrls.test match.matchedText
if match.matchedText.indexOf(Meteor.absoluteUrl()) is 0
tag = match.buildTag() # returns an `Autolinker.HtmlTag` instance for an <a> tag
tag.setAttr('target', '' ); # sets target to empty, instead of _blank
return tag
return true
return null
regNonAutoLink = /(```\w*[\n ]?[\s\S]*?```+?)|(`(?:[^`]+)`)/
if RocketChat.settings.get 'Katex_Enabled'
regNonAutoLink = /(```\w*[\n ]?[\s\S]*?```+?)|(`(?:[^`]+)`)|(\\\(\w*[\n ]?[\s\S]*?\\\)+?)/
# Separate text in code blocks and non code blocks
msgParts = message.html.split regNonAutoLink
for part, index in msgParts
if part?.length? > 0
# Verify if this part is code
codeMatch = part.match regNonAutoLink
if not codeMatch?
msgParts[index] = autolinker.link part
# Re-mount message
message.html = msgParts.join('')
return message
RocketChat.callbacks.add 'renderMessage', AutoLinker

@ -0,0 +1,64 @@
//
// AutoLinker is a named function that will replace links on messages
// @param {Object} message - The message object
//
import Autolinker from 'autolinker';
function AutoLinker(message) {
if (_.trim(message.html)) {
const regUrls = new RegExp(RocketChat.settings.get('AutoLinker_UrlsRegExp'));
const autolinker = new Autolinker({
stripPrefix: RocketChat.settings.get('AutoLinker_StripPrefix'),
urls: {
schemeMatches: RocketChat.settings.get('AutoLinker_Urls_Scheme'),
wwwMatches: RocketChat.settings.get('AutoLinker_Urls_www'),
tldMatches: RocketChat.settings.get('AutoLinker_Urls_TLD')
},
email: RocketChat.settings.get('AutoLinker_Email'),
phone: RocketChat.settings.get('AutoLinker_Phone'),
twitter: false,
replaceFn(match) {
if (match.getType() === 'url') {
if (regUrls.test(match.matchedText)) {
if (match.matchedText.indexOf(Meteor.absoluteUrl()) === 0) {
const tag = match.buildTag(); // returns an `Autolinker.HtmlTag` instance for an <a> tag
tag.setAttr('target', ''); // sets target to empty, instead of _blank
return tag;
}
return true;
}
}
return null;
}
});
let regNonAutoLink = /(```\w*[\n ]?[\s\S]*?```+?)|(`(?:[^`]+)`)/;
if (RocketChat.settings.get('Katex_Enabled')) {
regNonAutoLink = /(```\w*[\n ]?[\s\S]*?```+?)|(`(?:[^`]+)`)|(\\\(\w*[\n ]?[\s\S]*?\\\)+?)/;
}
// Separate text in code blocks and non code blocks
const msgParts = message.html.split(regNonAutoLink);
msgParts.forEach((part, index) => {
if (part && part.length > 0) {
// Verify if this part is code
const codeMatch = part.match(regNonAutoLink);
if (!codeMatch) {
msgParts[index] = autolinker.link(part);
}
}
});
// Re-mount message
message.html = msgParts.join('');
}
return message;
}
RocketChat.callbacks.add('renderMessage', AutoLinker);

File diff suppressed because one or more lines are too long

@ -5,16 +5,15 @@ Package.describe({
git: ''
});
Npm.depends({
autolinker: '1.1.0'
});
Package.onUse(function(api) {
api.use([
'coffeescript',
'rocketchat:lib'
]);
api.use('ecmascript');
api.use('rocketchat:lib');
api.addFiles([
'autolinker.coffee',
'lib/Autolinker.min.js'
], ['client']);
api.addFiles('client.js', 'client');
api.addFiles('settings.coffee', ['server']);
api.addFiles('settings.js', 'server');
});

@ -1,8 +0,0 @@
Meteor.startup ->
RocketChat.settings.add 'AutoLinker_StripPrefix', false, {type: 'boolean', group: 'Message', section: 'AutoLinker', public: true, i18nDescription: 'AutoLinker_StripPrefix_Description'}
RocketChat.settings.add 'AutoLinker_Urls_Scheme', true, {type: 'boolean', group: 'Message', section: 'AutoLinker', public: true}
RocketChat.settings.add 'AutoLinker_Urls_www', true, {type: 'boolean', group: 'Message', section: 'AutoLinker', public: true}
RocketChat.settings.add 'AutoLinker_Urls_TLD', true, {type: 'boolean', group: 'Message', section: 'AutoLinker', public: true}
RocketChat.settings.add 'AutoLinker_UrlsRegExp', '(://|www\\.).+', {type: 'string', group: 'Message', section: 'AutoLinker', public: true}
RocketChat.settings.add 'AutoLinker_Email', true, {type: 'boolean', group: 'Message', section: 'AutoLinker', public: true}
RocketChat.settings.add 'AutoLinker_Phone', true, {type: 'boolean', group: 'Message', section: 'AutoLinker', public: true, i18nDescription: 'AutoLinker_Phone_Description'}

@ -0,0 +1,9 @@
Meteor.startup(function() {
RocketChat.settings.add('AutoLinker_StripPrefix', false, {type: 'boolean', group: 'Message', section: 'AutoLinker', public: true, i18nDescription: 'AutoLinker_StripPrefix_Description'});
RocketChat.settings.add('AutoLinker_Urls_Scheme', true, {type: 'boolean', group: 'Message', section: 'AutoLinker', public: true});
RocketChat.settings.add('AutoLinker_Urls_www', true, {type: 'boolean', group: 'Message', section: 'AutoLinker', public: true});
RocketChat.settings.add('AutoLinker_Urls_TLD', true, {type: 'boolean', group: 'Message', section: 'AutoLinker', public: true});
RocketChat.settings.add('AutoLinker_UrlsRegExp', '(://|www\\.).+', {type: 'string', group: 'Message', section: 'AutoLinker', public: true});
RocketChat.settings.add('AutoLinker_Email', true, {type: 'boolean', group: 'Message', section: 'AutoLinker', public: true});
RocketChat.settings.add('AutoLinker_Phone', true, {type: 'boolean', group: 'Message', section: 'AutoLinker', public: true, i18nDescription: 'AutoLinker_Phone_Description'});
});

@ -23,7 +23,9 @@ Meteor.methods
emails.push user.emails[0].address
else
missing.push username
console.log emails
console.log 'Sending messages to e-mails: ', emails
for email in emails
unless rfcMailPatternWithName.test email.trim()
throw new Meteor.Error('error-invalid-email', "Invalid email #{email}", { method: 'mailMessages', email: email })

@ -1,17 +0,0 @@
###
# Colors is a named function that will process Colors
# @param {Object} message - The message object
###
class ColorsClient
constructor: (message) ->
if _.trim message.html
msg = message.html
msg = msg.replace /(?:^|\s|\n)(#[A-Fa-f0-9]{3}([A-Fa-f0-9]{3})?)\b/g, (match, completeColor) ->
return match.replace completeColor, "<div class=\"message-color\"><div class=\"message-color-sample\" style=\"background-color:#{completeColor}\"></div>#{completeColor.toUpperCase()}</div>"
message.html = msg
return message
RocketChat.callbacks.add 'renderMessage', ColorsClient, RocketChat.callbacks.priority.MEDIUM

@ -0,0 +1,18 @@
//
// HexColorPreview is a named function that will process Colors
// @param {Object} message - The message object
//
function HexColorPreview(message) {
var msg;
if (_.trim(message.html) && RocketChat.settings.get('HexColorPreview_Enabled')) {
msg = message.html;
msg = msg.replace(/(?:^|\s|\n)(#[A-Fa-f0-9]{3}([A-Fa-f0-9]{3})?)\b/g, function(match, completeColor) {
return match.replace(completeColor, '<div class="message-color"><div class="message-color-sample" style="background-color:' + completeColor + '"></div>' + (completeColor.toUpperCase()) + '</div>');
});
message.html = msg;
}
return message;
}
RocketChat.callbacks.add('renderMessage', HexColorPreview, RocketChat.callbacks.priority.MEDIUM);

@ -7,10 +7,9 @@ Package.describe({
Package.onUse(function(api) {
api.use([
'coffeescript',
'rocketchat:lib'
]);
api.addFiles('client.coffee', 'client');
api.addFiles('style.css', 'client');
api.addFiles('client.js', ['client']);
api.addFiles('style.css', ['client']);
api.addFiles('settings.js', ['server']);
});

@ -0,0 +1,7 @@
RocketChat.settings.add('HexColorPreview_Enabled', true, {
type: 'boolean',
i18nLabel: 'Enabled',
group: 'Message',
section: 'Hex Color Preview',
public: true
});

@ -1,16 +1,16 @@
.message-color {
display: inline-block;
font-weight: 100;
display: inline-block;
font-weight: 100;
}
.message-color-sample {
width: 14px;
height: 14px;
display: inline-block;
border-radius: 3px;
margin-right: 3px;
margin-left: 2px;
border: 1px solid rgba(0,0,0,.2);
position: relative;
top: 2px;
}
width: 14px;
height: 14px;
display: inline-block;
border-radius: 3px;
margin-right: 3px;
margin-left: 2px;
border: 1px solid rgba(0, 0, 0, .2);
position: relative;
top: 2px;
}

@ -11,6 +11,9 @@ WebApp.rawConnectHandlers.use (req, res, next) ->
if req.headers['content-type'] not in ['', undefined]
return next()
if req.url.indexOf('/ufs/') is 0
return next()
buf = ''
req.setEncoding('utf8')
req.on 'data', (chunk) -> buf += chunk

@ -42,7 +42,8 @@ const CROWD = class CROWD {
application: {
name: RocketChat.settings.get('CROWD_APP_USERNAME'),
password: RocketChat.settings.get('CROWD_APP_PASSWORD')
}
},
rejectUnauthorized: RocketChat.settings.get('CROWD_Reject_Unauthorized')
};
this.crowdClient = new AtlassianCrowd(this.options);

@ -1,10 +1,11 @@
Meteor.startup(function() {
RocketChat.settings.addGroup('Atlassian Crowd', function() {
RocketChat.settings.addGroup('AtlassianCrowd', function() {
const enableQuery = {_id: 'CROWD_Enable', value: true};
this.add('CROWD_Enable', false, { type: 'boolean', public: true, i18nLabel: 'Enabled' });
this.add('CROWD_URL', '', { type: 'string', enableQuery: enableQuery, i18nLabel: 'URL' });
this.add('CROWD_Reject_Unauthorized', true, { type: 'boolean', enableQuery: enableQuery });
this.add('CROWD_APP_USERNAME', '', { type: 'string', enableQuery: enableQuery, i18nLabel: 'Username' });
this.add('CROWD_APP_PASSWORD', '', { type: 'string', enableQuery: enableQuery, i18nLabel: 'Password' });
this.add('CROWD_APP_PASSWORD', '', { type: 'password', enableQuery: enableQuery, i18nLabel: 'Password' });
this.add('CROWD_Sync_User_Data', false, { type: 'boolean', enableQuery: enableQuery, i18nLabel: 'Sync_Users' });
this.add('CROWD_Test_Connection', 'crowd_test_connection', { type: 'action', actionText: 'Test_Connection', i18nLabel: 'Test_Connection' });
});

@ -2,16 +2,15 @@
RocketChat.emoji.packages.emojiCustom = {
emojiCategories: { rocket: TAPi18n.__('Custom') },
toneList: {},
list: [],
render: function(html) {
let emojiList = RocketChat.emoji.packages.emojiCustom.emojisByCategory.rocket.map((emoji) => ':' + emoji + ':');
let regShortNames = new RegExp('<object[^>]*>.*?<\/object>|<span[^>]*>.*?<\/span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|(' + emojiList.join('|') + ')', 'gi');
let regShortNames = new RegExp('<object[^>]*>.*?<\/object>|<span[^>]*>.*?<\/span>|<(?:object|embed|svg|img|div|span|p|a)[^>]*>|(' + RocketChat.emoji.packages.emojiCustom.list.join('|') + ')', 'gi');
// replace regular shortnames first
html = html.replace(regShortNames, function(shortname) {
// console.log('shortname (preif) ->', shortname, html);
if ((typeof shortname === 'undefined') || (shortname === '') || (emojiList.indexOf(shortname) === -1)) {
if ((typeof shortname === 'undefined') || (shortname === '') || (RocketChat.emoji.packages.emojiCustom.list.indexOf(shortname) === -1)) {
// if the shortname doesnt exist just return the entire match
return shortname;
} else {
@ -66,9 +65,17 @@ deleteEmojiCustom = function(emojiData) {
if (arrayIndex !== -1) {
RocketChat.emoji.packages.emojiCustom.emojisByCategory.rocket.splice(arrayIndex, 1);
}
let arrayIndexList = RocketChat.emoji.packages.emojiCustom.list.indexOf(`:${emojiData.name}:`);
if (arrayIndexList !== -1) {
RocketChat.emoji.packages.emojiCustom.list.splice(arrayIndexList, 1);
}
if (isSetNotNull(() => emojiData.aliases)) {
for (let alias of emojiData.aliases) {
delete RocketChat.emoji.list[`:${alias}:`];
let aliasIndex = RocketChat.emoji.packages.emojiCustom.list.indexOf(`:${alias}:`);
if (aliasIndex !== -1) {
RocketChat.emoji.packages.emojiCustom.list.splice(aliasIndex, 1);
}
}
}
updateEmojiPickerList();
@ -84,6 +91,10 @@ updateEmojiCustom = function(emojiData) {
if (previousExists && isSetNotNull(() => RocketChat.emoji.list[`:${emojiData.previousName}:`].aliases)) {
for (let alias of RocketChat.emoji.list[`:${emojiData.previousName}:`].aliases) {
delete RocketChat.emoji.list[`:${alias}:`];
let aliasIndex = RocketChat.emoji.packages.emojiCustom.list.indexOf(`:${alias}:`);
if (aliasIndex !== -1) {
RocketChat.emoji.packages.emojiCustom.list.splice(aliasIndex, 1);
}
}
}
@ -92,16 +103,22 @@ updateEmojiCustom = function(emojiData) {
if (arrayIndex !== -1) {
RocketChat.emoji.packages.emojiCustom.emojisByCategory.rocket.splice(arrayIndex, 1);
}
let arrayIndexList = RocketChat.emoji.packages.emojiCustom.list.indexOf(`:${emojiData.previousName}:`);
if (arrayIndexList !== -1) {
RocketChat.emoji.packages.emojiCustom.list.splice(arrayIndexList, 1);
}
delete RocketChat.emoji.list[`:${emojiData.previousName}:`];
}
let categoryIndex = RocketChat.emoji.packages.emojiCustom.emojisByCategory.rocket.indexOf(`${emojiData.name}`);
if (categoryIndex === -1) {
RocketChat.emoji.packages.emojiCustom.emojisByCategory.rocket.push(`${emojiData.name}`);
RocketChat.emoji.packages.emojiCustom.list.push(`:${emojiData.name}:`);
}
RocketChat.emoji.list[`:${emojiData.name}:`] = Object.assign({ emojiPackage: 'emojiCustom' }, RocketChat.emoji.list[`:${emojiData.name}:`], emojiData);
if (currentAliases) {
for (let alias of emojiData.aliases) {
RocketChat.emoji.packages.emojiCustom.list.push(`:${alias}:`);
RocketChat.emoji.list[`:${alias}:`] = {};
RocketChat.emoji.list[`:${alias}:`].emojiPackage = 'emojiCustom';
RocketChat.emoji.list[`:${alias}:`].aliasOf = emojiData.name;
@ -144,13 +161,16 @@ Meteor.startup(() =>
Meteor.call('listEmojiCustom', (error, result) => {
RocketChat.emoji.packages.emojiCustom.emojisByCategory = { rocket: [] };
for (let emoji of result) {
RocketChat.emoji.packages.emojiCustom.emojisByCategory.rocket.push(`${emoji.name}`);
RocketChat.emoji.packages.emojiCustom.emojisByCategory.rocket.push(emoji.name);
RocketChat.emoji.packages.emojiCustom.list.push(`:${emoji.name}:`);
RocketChat.emoji.list[`:${emoji.name}:`] = emoji;
RocketChat.emoji.list[`:${emoji.name}:`].emojiPackage = 'emojiCustom';
for (let alias of emoji['aliases']) {
RocketChat.emoji.list[`:${alias}:`] = {};
RocketChat.emoji.list[`:${alias}:`].emojiPackage = 'emojiCustom';
RocketChat.emoji.list[`:${alias}:`].aliasOf = emoji.name;
RocketChat.emoji.packages.emojiCustom.list.push(`:${alias}:`);
RocketChat.emoji.list[`:${alias}:`] = {
emojiPackage: 'emojiCustom',
aliasOf: emoji.name
};
}
}
})

@ -0,0 +1,17 @@
Package.describe({
name: 'rocketchat:error-handler',
version: '1.0.0',
summary: 'Rocket.Chat Error Handler',
git: ''
});
Package.onUse(function(api) {
api.use([
'ecmascript',
'rocketchat:lib',
'templating'
]);
api.addFiles('server/lib/RocketChat.ErrorHandler.js', 'server');
api.addFiles('server/startup/settings.js', 'server');
});

@ -0,0 +1,63 @@
class ErrorHandler {
constructor() {
this.reporting = false;
this.rid = null;
this.lastError = null;
this.registerHandlers();
RocketChat.settings.get('Log_Exceptions_to_Channel', (key, value) => {
if (value.trim()) {
this.reporting = true;
this.rid = this.getRoomId(value);
} else {
this.reporting = false;
this.rid = '';
}
});
}
registerHandlers() {
process.on('uncaughtException', Meteor.bindEnvironment((error) => {
if (!this.reporting) {
return;
}
this.trackError(error.message, error.stack);
}));
const self = this;
let originalMeteorDebug = Meteor._debug;
Meteor._debug = function(message, stack) {
if (!self.reporting) {
return originalMeteorDebug.call(this, message, stack);
}
self.trackError(message, stack);
return originalMeteorDebug.apply(this, arguments);
};
}
getRoomId(roomName) {
roomName = roomName.replace('#');
let room = RocketChat.models.Rooms.findOneByName(roomName, { fields: { _id: 1, t: 1 } });
if (room && (room.t === 'c' || room.t === 'p')) {
return room._id;
} else {
this.reporting = false;
}
}
trackError(message, stack) {
if (this.reporting && this.rid && this.lastError !== message) {
this.lastError = message;
let user = RocketChat.models.Users.findOneById('rocket.cat');
if (stack) {
message = message + '\n```\n' + stack + '\n```';
}
RocketChat.sendMessage(user, { msg: message }, { _id: this.rid });
}
}
}
RocketChat.ErrorHandler = new ErrorHandler;

@ -0,0 +1,3 @@
RocketChat.settings.addGroup('Logs', function() {
this.add('Log_Exceptions_to_Channel', '', { type: 'string' });
});

@ -1,16 +1,19 @@
{
"dependencies": {
"filesize": {
"version": "3.3.0",
"resolved": "https://registry.npmjs.org/filesize/-/filesize-3.3.0.tgz",
"from": "filesize@3.3.0"
},
"mime-db": {
"version": "1.23.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz",
"from": "mime-db@>=1.23.0 <1.24.0"
},
"mime-types": {
"version": "2.1.11",
"resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.11.tgz",
"from": "mime-types@2.1.11",
"dependencies": {
"mime-db": {
"version": "1.23.0",
"resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.23.0.tgz",
"from": "mime-db@1.23.0"
}
}
"from": "mime-types@2.1.11"
}
}
}

@ -1,14 +1,17 @@
/* globals FileUpload, FileUploadBase, Slingshot */
FileUpload.AmazonS3 = class FileUploadAmazonS3 extends FileUploadBase {
constructor(meta, file, data) {
super(meta, file, data);
constructor(meta, file) {
super(meta, file);
this.uploader = new Slingshot.Upload('rocketchat-uploads', { rid: meta.rid });
}
start() {
this.uploader.send(this.file, (error, downloadUrl) => {
var file, item, uploading;
this.computation.stop();
if (error) {
uploading = Session.get('uploading');
if (uploading !== null) {
@ -39,12 +42,14 @@ FileUpload.AmazonS3 = class FileUploadAmazonS3 extends FileUploadBase {
});
}
});
}
getProgress() {
return this.uploader.progress();
this.computation = Tracker.autorun(() => {
this.onProgress(this.uploader.progress());
});
}
onProgress() {}
stop() {
if (this.uploader && this.uploader.xhr) {
this.uploader.xhr.abort();

@ -9,11 +9,11 @@ FileSystemStore = new UploadFS.store.Local({
});
FileUpload.FileSystem = class FileUploadFileSystem extends FileUploadBase {
constructor(meta, file, data) {
super(meta, file, data);
constructor(meta, file) {
super(meta, file);
this.handler = new UploadFS.Uploader({
store: FileSystemStore,
data: data,
data: file,
file: meta,
onError: (err) => {
var uploading = Session.get('uploading');
@ -46,14 +46,25 @@ FileUpload.FileSystem = class FileUploadFileSystem extends FileUploadBase {
});
}
});
this.handler.onProgress = (file, progress) => {
this.onProgress(progress);
};
}
start() {
const uploading = Session.get('uploading') || [];
const item = {
id: this.id,
name: this.getFileName(),
percentage: 0
};
uploading.push(item);
Session.set('uploading', uploading);
return this.handler.start();
}
getProgress() {
return this.handler.getProgress();
}
onProgress() {}
stop() {
return this.handler.stop();

@ -1,10 +1,10 @@
/* globals FileUploadBase, UploadFS, FileUpload:true */
FileUpload.GridFS = class FileUploadGridFS extends FileUploadBase {
constructor(meta, file, data) {
super(meta, file, data);
constructor(meta, file) {
super(meta, file);
this.handler = new UploadFS.Uploader({
store: Meteor.fileStore,
data: data,
data: file,
file: meta,
onError: (err) => {
var uploading = Session.get('uploading');
@ -37,14 +37,25 @@ FileUpload.GridFS = class FileUploadGridFS extends FileUploadBase {
});
}
});
this.handler.onProgress = (file, progress) => {
this.onProgress(progress);
};
}
start() {
const uploading = Session.get('uploading') || [];
const item = {
id: this.id,
name: this.getFileName(),
percentage: 0
};
uploading.push(item);
Session.set('uploading', uploading);
return this.handler.start();
}
getProgress() {
return this.handler.getProgress();
}
onProgress() {}
stop() {
return this.handler.stop();

@ -1,10 +1,10 @@
/* globals FileUpload, fileUploadHandler:true */
/* exported fileUploadHandler */
fileUploadHandler = (meta, file, data) => {
fileUploadHandler = (meta, file) => {
var storageType = RocketChat.settings.get('FileUpload_Storage_Type');
if (FileUpload[storageType] !== undefined) {
return new FileUpload[storageType](meta, file, data);
return new FileUpload[storageType](meta, file);
}
};

@ -1,5 +1,7 @@
/* globals Slingshot */
import filesize from 'filesize';
Slingshot.fileRestrictions('rocketchat-uploads', {
authorize: function(file/*, metaContext*/) {
if (!RocketChat.fileUploadIsValidContentType(file.type)) {
@ -9,7 +11,7 @@ Slingshot.fileRestrictions('rocketchat-uploads', {
var maxFileSize = RocketChat.settings.get('FileUpload_MaxFileSize');
if (maxFileSize && maxFileSize < file.size) {
throw new Meteor.Error(TAPi18n.__('File_exceeds_allowed_size_of_bytes', { size: maxFileSize }));
throw new Meteor.Error(TAPi18n.__('File_exceeds_allowed_size_of_bytes', { size: filesize(maxFileSize) }));
}
//Deny uploads if user is not logged in.

@ -1,16 +1,24 @@
/* globals FileUpload:true */
/* exported FileUpload */
var maxFileSize = 0;
import filesize from 'filesize';
let maxFileSize = 0;
FileUpload = {
validateFileUpload(file) {
if (file.size > maxFileSize) {
throw new Meteor.Error('error-file-too-large', 'File is too large');
const user = Meteor.user();
const reason = TAPi18n.__('File_exceeds_allowed_size_of_bytes', {
size: filesize(maxFileSize)
}, user.language);
throw new Meteor.Error('error-file-too-large', reason);
}
if (!RocketChat.fileUploadIsValidContentType(file.type)) {
throw new Meteor.Error('error-invalid-file-type', 'File type is not accepted');
const user = Meteor.user();
const reason = TAPi18n.__('File_type_is_not_accepted', user.language);
throw new Meteor.Error('error-invalid-file-type', reason);
}
return true;

@ -2,7 +2,7 @@
/* exported FileUploadBase */
FileUploadBase = class FileUploadBase {
constructor(meta, file/*, data*/) {
constructor(meta, file) {
this.id = Random.id();
this.meta = meta;
this.file = file;

@ -47,5 +47,6 @@ Package.onUse(function(api) {
});
Npm.depends({
'mime-types': '2.1.11'
'mime-types': '2.1.11',
'filesize': '3.3.0'
});

@ -17,26 +17,29 @@ let createFileSystemStore = _.debounce(function() {
onCheck: FileUpload.validateFileUpload
}),
transformWrite: function(readStream, writeStream, fileId, file) {
var identify, stream;
if (RocketChatFile.enabled === false || !/^image\/.+/.test(file.type)) {
if (RocketChatFile.enabled === false || !/^image\/((x-windows-)?bmp|p?jpeg|png)$/.test(file.type)) {
return readStream.pipe(writeStream);
}
stream = void 0;
identify = function(err, data) {
var ref;
let stream = void 0;
const identify = function(err, data) {
if (err != null) {
return stream.pipe(writeStream);
}
file.identify = {
format: data.format,
size: data.size
};
if ((data.Orientation != null) && ((ref = data.Orientation) !== '' && ref !== 'Unknown' && ref !== 'Undefined')) {
if ([null, undefined, '', 'Unknown', 'Undefined'].indexOf(data.Orientation) === -1) {
return RocketChatFile.gm(stream).autoOrient().stream().pipe(writeStream);
} else {
return stream.pipe(writeStream);
}
};
stream = RocketChatFile.gm(readStream).identify(identify).stream();
return;
}

@ -570,7 +570,7 @@
"LDAP_Custom_Domain_Search" : "البحث المجال مخصص",
"LDAP_Custom_Domain_Search_Description" : "قطعة من JSON الذي يحكم ربط واتصال من المعلومات وهو النموذج: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "المجال الافتراضي",
"LDAP_Description" : "LDAP هي قاعدة بيانات هرمية التي تستخدم العديد من الشركات لتقديم إشارة واحدة على - مرفق لتقاسم كلمة مرور واحدة بين المواقع وخدمات متعددة. للحصول على معلومات التكوين المتقدمة والأمثلة، يرجى الرجوع لدينا ويكي: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP هي قاعدة بيانات هرمية التي تستخدم العديد من الشركات لتقديم إشارة واحدة على - مرفق لتقاسم كلمة مرور واحدة بين المواقع وخدمات متعددة. للحصول على معلومات التكوين المتقدمة والأمثلة، يرجى الرجوع لدينا ويكي: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "قاعدة المجال",
"LDAP_Domain_Base_Description" : "اسم المؤهل بالكامل المميز (DN) من الشجرة الفرعية LDAP تريد البحث للمستخدمين والمجموعات. يمكنك إضافة ما تريد. ومع ذلك، يجب أن تحدد كل مجموعة في قاعدة نطاق نفس المستخدمين التي تنتمي إليها. إذا قمت بتحديد مجموعات المستخدمين المحظورة، وفقط للمستخدمين الذين ينتمون لتلك الجماعات أن يكون في نطاق. نوصي تحديد المستوى الخاص بك شجرة دليل LDAP كقاعدة المجال الخاص بك واستخدام فلتر البحث للتحكم في الوصول.",
"LDAP_Domain_Search_Filter" : "نطاق البحث تصفية",

@ -611,7 +611,7 @@
"LDAP_Custom_Domain_Search" : "Domini de cerca personalitzat",
"LDAP_Custom_Domain_Search_Description" : "Objecte JSON per definir el bind i la informació de connexió, segons el format:<br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Domini predeterminat",
"LDAP_Description" : "LDAP és una base de dades jeràrquica que moltes empreses utilitzen per proporcionar un inici de sessió únic –una eina per tenir una sola contrasenya a múltiples llocs web i serveis. Per a exemples i informació sobre configuracions més avançades, consulteu la nostra wiki: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP és una base de dades jeràrquica que moltes empreses utilitzen per proporcionar un inici de sessió únic –una eina per tenir una sola contrasenya a múltiples llocs web i serveis. Per a exemples i informació sobre configuracions més avançades, consulteu la nostra wiki: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "Domini base",
"LDAP_Domain_Base_Description" : "Nom distingit (Distinguished Name, DN), complet i qualificat d'una branca LDAP on voleu cercar usuaris i grups. Se'n poden afegir tants com es vulgui, però cada grup s'ha de definir al mateix domini base que els usuaris que hi pertanyen. Si especifica grups d'usuaris restringits, només els usuaris que pertanyen a aquests grups seran considerats. Recomanem que s'especifici el nivell superior de l'arbre de directoris LDAP com a domini base i que s'utilitzi el filtre de cerca per controlar l'accés.",
"LDAP_Domain_Search_Filter" : "Filtre de cerca al domini",

@ -563,7 +563,7 @@
"LDAP_Custom_Domain_Search" : "Benutzerdefinierte Domainsuche",
"LDAP_Custom_Domain_Search_Description" : "Ein Teil aus JSON, welches Bindungs- und Verbindungsinformationen regelt und folgende Struktur besitzt: <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Standard-Domain",
"LDAP_Description" : "LDAP ist ein Frontend zu hierarchischen Datenbanken, die viele Unternehmen nutzen, um eine eine Einmalanmeldung (SSO) zu ermöglichen. Über SSO kann \"ein Benutzer nach einer einmaligen Authentifizierung an einem Arbeitsplatz auf alle Rechner und Dienste, für die er lokal berechtigt ist, am selben Arbeitsplatz zugreifen kann, ohne sich jedes Mal neu anmelden zu müssen\". Genauere Informationen zur Konfiguration von LDAP mit Konfigurationsbeispielen erhalten Sie unter folgendem Link: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication",
"LDAP_Description" : "LDAP ist ein Frontend zu hierarchischen Datenbanken, die viele Unternehmen nutzen, um eine eine Einmalanmeldung (SSO) zu ermöglichen. Über SSO kann \"ein Benutzer nach einer einmaligen Authentifizierung an einem Arbeitsplatz auf alle Rechner und Dienste, für die er lokal berechtigt ist, am selben Arbeitsplatz zugreifen kann, ohne sich jedes Mal neu anmelden zu müssen\". Genauere Informationen zur Konfiguration von LDAP mit Konfigurationsbeispielen erhalten Sie unter folgendem Link: https://rocket.chat/docs/administrator-guides/authentication/ldap/",
"LDAP_Domain_Base" : "Domainbasis",
"LDAP_Domain_Base_Description" : "Der volle Distinguished Name (DN) von einem LDAP-Unterverzeichnis, den Sie nach Benutzern und Gruppen durchsuchen möchten. SIe können so viele hinzufügen wie sie möchten. Jede Gruppe muss aber der selben Domainbasis angehören, in der sich die Benutzer befindet. Wenn Sie beschränkte Nutzergruppen angeben, werden nur Benutzer, die diesen Gruppen angehören, im Anwendungsbereich liegen. Wir empfehlen, die oberste Ebene des LDAP-Verzeichnisbaums als Domainbasis anzugeben und Suchfilter zu verwenden, um den Zugriff zu kontrollieren.",
"LDAP_Domain_Search_Filter" : "Filter der Domainsuche",

@ -597,7 +597,7 @@
"LDAP_Custom_Domain_Search" : "Benutzerdefinierte Domainsuche",
"LDAP_Custom_Domain_Search_Description" : "Ein Teil aus JSON, welches Bindungs- und Verbindungsinformationen regelt und folgende Struktur besitzt: <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Standard-Domain",
"LDAP_Description" : "LDAP ist ein Frontend zu hierarchischen Datenbanken, die viele Unternehmen nutzen, um eine eine Einmalanmeldung (SSO) zu ermöglichen. Über SSO kann \"ein Benutzer nach einer einmaligen Authentifizierung an einem Arbeitsplatz auf alle Rechner und Dienste, für die er lokal berechtigt ist, am selben Arbeitsplatz zugreifen kann, ohne sich jedes Mal neu anmelden zu müssen\". Genauere Informationen zur Konfiguration von LDAP mit Konfigurationsbeispielen erhalten Sie unter folgendem Link: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication",
"LDAP_Description" : "LDAP ist ein Frontend zu hierarchischen Datenbanken, die viele Unternehmen nutzen, um eine eine Einmalanmeldung (SSO) zu ermöglichen. Über SSO kann \"ein Benutzer nach einer einmaligen Authentifizierung an einem Arbeitsplatz auf alle Rechner und Dienste, für die er lokal berechtigt ist, am selben Arbeitsplatz zugreifen kann, ohne sich jedes Mal neu anmelden zu müssen\". Genauere Informationen zur Konfiguration von LDAP mit Konfigurationsbeispielen erhalten Sie unter folgendem Link: https://rocket.chat/docs/administrator-guides/authentication/ldap/",
"LDAP_Domain_Base" : "Domainbasis",
"LDAP_Domain_Base_Description" : "Der volle Distinguished Name (DN) von einem LDAP-Unterverzeichnis, den Sie nach Benutzern und Gruppen durchsuchen möchten. SIe können so viele hinzufügen wie sie möchten. Jede Gruppe muss aber der selben Domainbasis angehören, in der sich die Benutzer befindet. Wenn Sie beschränkte Nutzergruppen angeben, werden nur Benutzer, die diesen Gruppen angehören, im Anwendungsbereich liegen. Wir empfehlen, die oberste Ebene des LDAP-Verzeichnisbaums als Domainbasis anzugeben und Suchfilter zu verwenden, um den Zugriff zu kontrollieren.",
"LDAP_Domain_Search_Filter" : "Filter der Domainsuche",

@ -574,7 +574,7 @@
"LDAP_Custom_Domain_Search" : "Αναζήτηση προσαρμοσμένο τομέα",
"LDAP_Custom_Domain_Search_Description" : "Ένα κομμάτι του JSON που διέπει δεσμεύουν και σύνδεση πληροφορίες και είναι της μορφής: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "default Domain",
"LDAP_Description" : "LDAP είναι μια ιεραρχική βάση δεδομένων που πολλές εταιρείες χρησιμοποιούν για να παρέχουν Single Sign On - μια εγκατάσταση για την κοινή χρήση ενός κωδικού πρόσβασης από πολλαπλές τοποθεσίες και υπηρεσίες. Για προχωρημένους πληροφορίες διαμόρφωσης και παραδείγματα, συμβουλευτείτε wiki μας: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP είναι μια ιεραρχική βάση δεδομένων που πολλές εταιρείες χρησιμοποιούν για να παρέχουν Single Sign On - μια εγκατάσταση για την κοινή χρήση ενός κωδικού πρόσβασης από πολλαπλές τοποθεσίες και υπηρεσίες. Για προχωρημένους πληροφορίες διαμόρφωσης και παραδείγματα, συμβουλευτείτε wiki μας: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "τομέα Βάσης",
"LDAP_Domain_Base_Description" : "Το πλήρως αναγνωρισμένο αποκλειστικό όνομα (DN) του υποδένδρο LDAP που θέλετε να αναζητήσετε χρήστες και ομάδες. Μπορείτε να προσθέσετε όσες θέλετε? Ωστόσο, κάθε ομάδα πρέπει να ορίζεται στην ίδια βάση τομέα με τους χρήστες που ανήκουν σε αυτήν. Εάν καθορίσετε κλειστές ομάδες χρηστών, μόνο οι χρήστες που ανήκουν σε αυτές τις ομάδες θα είναι στο πεδίο. Σας συνιστούμε να καθορίσετε το ανώτερο επίπεδο του δέντρου καταλόγου LDAP σας ως βάση το domain σας και να χρησιμοποιήσετε το φίλτρο αναζήτησης για να ελέγξετε την πρόσβαση.",
"LDAP_Domain_Search_Filter" : "Αναζήτηση Domain Φίλτρο",

@ -2,7 +2,7 @@
"#channel" : "#channel",
"0_Errors_Only" : "0 - Errors Only",
"1_Errors_and_Information" : "1 - Errors and Information",
"2_Erros_Information_and_Debug" : "2 - Erros, Information and Debug",
"2_Erros_Information_and_Debug" : "2 - Errors, Information and Debug",
"403" : "Forbidden",
"500" : "Internal Server Error",
"@username" : "@username",
@ -33,7 +33,7 @@
"Accounts_BlockedDomainsList_Description" : "Comma-separated list of blocked domains",
"Accounts_BlockedUsernameList" : "Blocked Username List",
"Accounts_BlockedUsernameList_Description" : "Comma-separated list of blocked usernames (case-insensitive)",
"Accounts_CustomFields_Description" : "Should be a valid JSON where keys are the field names containing a dictinary of field settings. Example:</br><code>{\n\t\"role\": {\n\t\t\"type\": \"select\",\n\t\t\"defaultValue\": \"student\",\n\t\t\"options\": [\"teacher\", \"student\"],\n\t\t\"required\": true,\n\t\t\"modifyRecordField\": {\n\t\t\t\"array\": true,\n\t\t\t\"field\": \"roles\"\n\t\t}\n\t},\n\t\"twitter\": {\n\t\t\"type\": \"text\",\n\t\t\"required\": true,\n\t\t\"minLength\": 2,\n\t\t\"maxLength\": 10\n\t}\n}</code> ",
"Accounts_CustomFields_Description" : "Should be a valid JSON where keys are the field names containing a dictionary of field settings. Example:</br><code>{\n\t\"role\": {\n\t\t\"type\": \"select\",\n\t\t\"defaultValue\": \"student\",\n\t\t\"options\": [\"teacher\", \"student\"],\n\t\t\"required\": true,\n\t\t\"modifyRecordField\": {\n\t\t\t\"array\": true,\n\t\t\t\"field\": \"roles\"\n\t\t}\n\t},\n\t\"twitter\": {\n\t\t\"type\": \"text\",\n\t\t\"required\": true,\n\t\t\"minLength\": 2,\n\t\t\"maxLength\": 10\n\t}\n}</code> ",
"Accounts_denyUnverifiedEmail" : "Deny unverified email",
"Accounts_EmailVerification" : "Email Verification",
"Accounts_EmailVerification_Description" : "Make sure you have correct SMTP settings to use this feature",
@ -178,6 +178,7 @@
"Are_you_sure_you_want_to_delete_your_account" : "Are you sure you want to delete your account?",
"Assign_admin" : "Assigning admin",
"at" : "at",
"AtlassianCrowd" : "Atlassian Crowd",
"Attachment_File_Uploaded" : "File Uploaded",
"Auth_Token" : "Auth Token",
"Author" : "Author",
@ -263,6 +264,7 @@
"Collapse_Embedded_Media_By_Default" : "Collapse embedded media by default",
"Color" : "Color",
"Commands" : "Commands",
"Comment_to_leave_on_closing_session" : "Comment to leave on closing session",
"Compact" : "Compact",
"Confirm_password" : "Confirm your password",
"Conversation" : "Conversation",
@ -279,6 +281,7 @@
"Create_new" : "Create new",
"Created_at" : "Created at",
"Created_at_s_by_s" : "Created at <strong>%s</strong> by <strong>%s</strong>",
"CROWD_Reject_Unauthorized" : "Reject Unauthorized",
"Current_Chats" : "Current Chats",
"Custom" : "Custom",
"Custom_Emoji" : "Custom Emoji",
@ -296,7 +299,7 @@
"Custom_Script_Logged_In" : "Custom Script for logged in users",
"Custom_Script_Logged_Out" : "Custom Script for logged out users",
"Custom_Translations" : "Custom Translations",
"Custom_Translations_Description" : "Should be a valid JSON where keys are languages containing a dictinary of key and translations. Example:</br><code>{\n\t\"en\": {\n\t\t\"key\": \"translation\"\n\t},\n\t\"pt\": {\n\t\t\"key\": \"tradução\"\n\t}\n}</code> ",
"Custom_Translations_Description" : "Should be a valid JSON where keys are languages containing a dictionary of key and translations. Example:</br><code>{\n\t\"en\": {\n\t\t\"key\": \"translation\"\n\t},\n\t\"pt\": {\n\t\t\"key\": \"tradução\"\n\t}\n}</code> ",
"Dashboard" : "Dashboard",
"Date" : "Date",
"days" : "days",
@ -385,6 +388,7 @@
"error-department-not-found" : "Department not found",
"error-duplicate-channel-name" : "A channel with name '__channel_name__' exists",
"error-email-domain-blacklisted" : "The email domain is blacklisted",
"error-email-send-failed" : "Error trying to send email: __message__",
"error-field-unavailable" : "<strong>__field__</strong> is already in use :(",
"error-file-too-large" : "File is too large",
"error-importer-not-defined" : "The importer was not defined correctly, it is missing the Import class.",
@ -454,7 +458,8 @@
"Field" : "Field",
"Field_removed" : "Field removed",
"Field_required" : "Field required",
"File_exceeds_allowed_size_of_bytes" : "File exceeds allowed size of __size__ bytes",
"File_exceeds_allowed_size_of_bytes" : "File exceeds allowed size of __size__.",
"File_type_is_not_accepted": "File type is not accepted.",
"FileUpload" : "File Upload",
"FileUpload_Enabled" : "File Uploads Enabled",
"FileUpload_File_Empty" : "File empty",
@ -520,8 +525,10 @@
"Hours" : "Hours",
"How_friendly_was_the_chat_agent" : "How friendly was the chat agent?",
"How_knowledgeable_was_the_chat_agent" : "How knowledgeable was the chat agent?",
"How_long_to_wait_after_agent_goes_offline" : "How long to wait after agent goes offline",
"How_responsive_was_the_chat_agent" : "How responsive was the chat agent?",
"How_satisfied_were_you_with_this_chat" : "How satisfied were you with this chat?",
"How_to_handle_open_sessions_when_agent_goes_offline" : "How to handle open sessions when agent goes offline",
"If_you_are_sure_type_in_your_password" : "If you are sure type in your password:",
"If_you_are_sure_type_in_your_username" : "If you are sure type in your username:",
"Iframe_Integration_receive_enable" : "Enable Receive",
@ -537,7 +544,7 @@
"Importer_finishing" : "Finishing up the import.",
"Importer_From_Description" : "Imports __from__'s data into Rocket.Chat.",
"Importer_import_cancelled" : "Import cancelled.",
"Importer_import_failed" : "An error occured while running the import.",
"Importer_import_failed" : "An error occurred while running the import.",
"Importer_importing_channels" : "Importing the channels.",
"Importer_importing_messages" : "Importing the messages.",
"Importer_importing_started" : "Starting the import.",
@ -548,7 +555,7 @@
"Importer_Prepare_Uncheck_Archived_Channels" : "Uncheck Archived Channels",
"Importer_Prepare_Uncheck_Deleted_Users" : "Uncheck Deleted Users",
"Importer_progress_error" : "Failed to get the progress for the import.",
"Importer_setup_error" : "An error occured while setting up the importer.",
"Importer_setup_error" : "An error occurred while setting up the importer.",
"Incoming_Livechats" : "Incoming Livechats",
"inline_code" : "inline_code",
"Install_Extension" : "Install Extension",
@ -634,7 +641,7 @@
"LDAP_Custom_Domain_Search" : "Custom Domain Search",
"LDAP_Custom_Domain_Search_Description" : "A piece of JSON that governs bind and connection info and is of the form:<br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Default Domain",
"LDAP_Description" : "LDAP is a hierarchical database that many companies use to provide single sign on - a facility for sharing one password between multiple sites and services. For advanced configuration information and examples, please consult our wiki: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP is a hierarchical database that many companies use to provide single sign on - a facility for sharing one password between multiple sites and services. For advanced configuration information and examples, please consult our wiki: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "Domain Base",
"LDAP_Domain_Base_Description" : "The fully qualified Distinguished Name (DN) of an LDAP subtree you want to search for users and groups. You can add as many as you like; however, each group must be defined in the same domain base as the users that belong to it. If you specify restricted user groups, only users that belong to those groups will be in scope. We recommend that you specify the top level of your LDAP directory tree as your domain base and use search filter to control access.",
"LDAP_Domain_Search_Filter" : "Domain Search Filter",
@ -658,7 +665,7 @@
"LDAP_Import_Users" : "Import LDAP users",
"LDAP_Import_Users_Description" : "It True sync process will be import all LDAP users <br/> *Caution!* Specify search filter to not import excess users.",
"LDAP_Login_Fallback" : "Login Fallback",
"LDAP_Login_Fallback_Description" : "If the login on LDAP is not successfull try to login in default/local account system. Helps when the LDAP is down for some reason.",
"LDAP_Login_Fallback_Description" : "If the login on LDAP is not successful try to login in default/local account system. Helps when the LDAP is down for some reason.",
"LDAP_Merge_Existing_Users" : "Merge existing users",
"LDAP_Merge_Existing_Users_Description" : "*Caution!* When importing an user from LDAP and an user with same username already exists the LDAP info and password will be set into the existing user.",
"LDAP_Port" : "Port",
@ -708,6 +715,8 @@
"Loading_more_from_history" : "Loading more from history",
"Loading_suggestion" : "Loading suggestions...",
"Localization" : "Localization",
"Log_Exceptions_to_Channel" : "Log Exceptions to Channel",
"Log_Exceptions_to_Channel_Description" : "A channel that will receive all captured exceptions. Leave empty to ignore exceptions.",
"Log_File" : "Show File and Line",
"Log_Level" : "Log Level",
"Log_Package" : "Show Package",
@ -749,6 +758,7 @@
"Message_AllowDeleting" : "Allow Message Deleting",
"Message_AllowDeleting_BlockDeleteInMinutes" : "Block Message Deleting After (n) Minutes",
"Message_AllowDeleting_BlockDeleteInMinutes_Description" : "Enter 0 to disable blocking.",
"Message_AllowUnrecognizedSlashCommand" : "Allow Unrecognized Slash Commands",
"Message_AllowEditing" : "Allow Message Editing",
"Message_AllowEditing_BlockEditInMinutes" : "Block Message Editing After (n) Minutes",
"Message_AllowEditing_BlockEditInMinutesDescription" : "Enter 0 to disable blocking.",
@ -840,6 +850,7 @@
"No_user_with_username_%s_was_found" : "No user with username <strong>\"%s\"</strong> was found!",
"Nobody_available" : "Nobody available",
"Node_version" : "Node version",
"None" : "None",
"Normal" : "Normal",
"Not_authorized" : "Not authorized",
"Not_Available" : "Not Available",
@ -1073,6 +1084,7 @@
"Send_welcome_email" : "Send welcome email",
"Send_your_JSON_payloads_to_this_URL" : "Send your JSON payloads to this URL.",
"Sending" : "Sending...",
"Served_By" : "Served By",
"Service" : "Service",
"Set_as_moderator" : "Set as moderator",
"Set_as_owner" : "Set as owner",
@ -1136,6 +1148,7 @@
"Statistics" : "Statistics",
"Statistics_reporting" : "Send statistics to Rocket.Chat",
"Statistics_reporting_Description" : "By sending your statistics, you'll help us identify how many instances of Rocket.Chat are deployed, as well as how good the system is behaving, so we can further improve it. Don't worry, as no user information is sent and all the information we receive is kept confidential.",
"Status" : "Status",
"Stats_Active_Users" : "Active Users",
"Stats_Avg_Channel_Users" : "Average Channel Users",
"Stats_Avg_Private_Group_Users" : "Average Private Group Users",
@ -1194,7 +1207,7 @@
"theme-color-info-font-color" : "Info Font Color",
"theme-color-input-font-color" : "Input Font Color",
"theme-color-link-font-color" : "Link Font Color",
"theme-color-message-hover-background-color" : "Message Hover BG Color",
"theme-color-message-hover-background-color" : "Message Hover Backgrounds Color",
"theme-color-primary-background-color" : "Primary Background Color",
"theme-color-primary-font-color" : "Primary Font Color",
"theme-color-quaternary-font-color" : "Quaternary Font Color",
@ -1217,7 +1230,7 @@
"This_conversation_is_already_closed" : "This conversation is already closed.",
"This_email_has_already_been_used_and_has_not_been_verified__Please_change_your_password" : "This email has already been used and has not been verified. Please change your password.",
"This_is_a_desktop_notification" : "This is a desktop notification",
"This_is_a_push_test_messsage" : "This is a push test messsage",
"This_is_a_push_test_messsage" : "This is a push test message",
"This_room_has_been_archived_by__username_" : "This room has been archived by __username__",
"This_room_has_been_unarchived_by__username_" : "This room has been unarchived by __username__",
"Thursday" : "Thursday",
@ -1377,7 +1390,7 @@
"You_need_to_change_your_password" : "You need to change your password",
"You_need_to_type_in_your_password_in_order_to_do_this" : "You need to type in your password in order to do this!",
"You_need_to_type_in_your_username_in_order_to_do_this" : "You need to type in your username in order to do this!",
"You_need_to_verifiy_your_email_address_to_get_notications" : "You need to verifiy your email address to get notifications",
"You_need_to_verifiy_your_email_address_to_get_notications" : "You need to verify your email address to get notifications",
"You_need_to_write_something" : "You need to write something!",
"You_should_inform_one_url_at_least" : "You should define at least one URL.",
"You_should_name_it_to_easily_manage_your_integrations" : "You should name it to easily manage your integrations.",

@ -592,7 +592,7 @@
"LDAP_Custom_Domain_Search" : "Dominio Personalizado de Busqueda",
"LDAP_Custom_Domain_Search_Description" : "Un pedazo de JSON que gobierna se unen y la conexión y la información es de la forma: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "dominio predeterminado",
"LDAP_Description" : "LDAP es una base de datos jerárquica que muchas empresas utilizan para proporcionar inicio de sesión único - una instalación para compartir una contraseña entre múltiples sitios y servicios. Para obtener información avanzada de configuración y ejemplos, consulte nuestra wiki: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP es una base de datos jerárquica que muchas empresas utilizan para proporcionar inicio de sesión único - una instalación para compartir una contraseña entre múltiples sitios y servicios. Para obtener información avanzada de configuración y ejemplos, consulte nuestra wiki: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "Dominio Base",
"LDAP_Domain_Base_Description" : "El nombre completo (DN) de un sub-árbol LDAP que desea buscar usuarios y grupos. Se pueden añadir tantos como quiera; sin embargo, cada grupo se debe definir en la misma base de dominio que los usuarios que pertenecen a la misma. Si especifica los grupos de usuarios restringidos, sólo los usuarios que pertenecen a esos grupos serán de alcance. Recomendamos que se especifica el nivel superior del árbol de directorios LDAP como su base de dominio y utiliza filtro de búsqueda para controlar el acceso.",
"LDAP_Domain_Search_Filter" : "Filtro del Dominio de Busqueda",

@ -570,7 +570,7 @@
"LDAP_Custom_Domain_Search" : "جستجو سفارشی دامنه",
"LDAP_Custom_Domain_Search_Description" : "قطعه ای از JSON که بر اتصال و اتصال اطلاعات و فرم: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "به طور پیش فرض دامنه",
"LDAP_Description" : "یک مرکز برای به اشتراک گذاری یک رمز عبور بین سایت و خدمات مختلف - LDAP یک پایگاه داده سلسله مراتبی است که بسیاری از شرکت ها برای ارائه یکبار ورود به سیستم است. https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication: برای کسب اطلاعات پیکربندی پیشرفته و نمونه، لطفا ویکی ما مشورت کنید.",
"LDAP_Description" : "یک مرکز برای به اشتراک گذاری یک رمز عبور بین سایت و خدمات مختلف - LDAP یک پایگاه داده سلسله مراتبی است که بسیاری از شرکت ها برای ارائه یکبار ورود به سیستم است. https://rocket.chat/docs/administrator-guides/authentication/ldap/: برای کسب اطلاعات پیکربندی پیشرفته و نمونه، لطفا ویکی ما مشورت کنید.",
"LDAP_Domain_Base" : "پایه دامنه",
"LDAP_Domain_Base_Description" : "نام کامل برجسته (DN) از یک زیر درخت LDAP شما می خواهید به جستجو برای کاربران و گروه. شما می توانید به عنوان بسیاری از شما می خواهم اضافه کنید. با این حال، هر گروه باید در پایه دامنه به عنوان کاربران که متعلق به آن تعریف شود. اگر شما گروه های کاربری محدود مشخص، تنها کاربران که متعلق به آن گروه در دامنه باشد. ما توصیه می کنیم که شما در سطح بالا از LDAP درخت دایرکتوری خود را مشخص کنید به عنوان پایه دامنه خود و استفاده از فیلتر جستجو برای کنترل دسترسی.",
"LDAP_Domain_Search_Filter" : "دامنه جستجو فیلتر",

@ -582,7 +582,7 @@
"LDAP_Custom_Domain_Search" : "Mukautettu domain-haku",
"LDAP_Custom_Domain_Search_Description" : "JSONin palanen, joka säätelee bindin ja yhteyden tietoja ja on muotoa: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Oletusverkkotunnus",
"LDAP_Description" : "LDAP on laajasti käytössä oleva hierarkinen tietokantapalvelu, jolla organisaatioiden palveluille mahdollistetaan kertakirjautuminen (SSO).\nMääritystiedot ja esimerkit, katso wiki: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication",
"LDAP_Description" : "LDAP on laajasti käytössä oleva hierarkinen tietokantapalvelu, jolla organisaatioiden palveluille mahdollistetaan kertakirjautuminen (SSO).\nMääritystiedot ja esimerkit, katso wiki: https://rocket.chat/docs/administrator-guides/authentication/ldap/",
"LDAP_Domain_Base" : "Domain Base",
"LDAP_Domain_Base_Description" : "The fully qualified Distinguished Name (DN) of an LDAP subtree you want to search for users and groups. You can add as many as you like; however, each group must be defined in the same domain base as the users that belong to it. If you specify restricted user groups, only users that belong to those groups will be in scope. We recommend that you specify the top level of your LDAP directory tree as your domain base and use search filter to control access.",
"LDAP_Domain_Search_Filter" : "Verkkotunnusten hakusuodatin",

@ -611,7 +611,7 @@
"LDAP_Custom_Domain_Search" : "Domaine de recherche personnalisé",
"LDAP_Custom_Domain_Search_Description" : "Un bout de JSON qui contrôle la liaison et la connexion et qui a le format :<br/><code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Domaine par défaut",
"LDAP_Description" : "Un LDAP est une base de données hiérarchique que de nombreuses entreprises utilisent pour fournir une authentification unique à travers leurs services - l'utilisateur partage un mot de passe entre plusieurs sites et services. Pour avoir plus d'informations sur la configuration avancée et voir des exemples, consulter notre wiki: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication .",
"LDAP_Description" : "Un LDAP est une base de données hiérarchique que de nombreuses entreprises utilisent pour fournir une authentification unique à travers leurs services - l'utilisateur partage un mot de passe entre plusieurs sites et services. Pour avoir plus d'informations sur la configuration avancée et voir des exemples, consulter notre wiki: https://rocket.chat/docs/administrator-guides/authentication/ldap/ .",
"LDAP_Domain_Base" : "Domaine de base",
"LDAP_Domain_Base_Description" : "Le chemin complet du Distinguished Name (DN) d'un sous arbre LDAP dans lequel vous souhaitez chercher les utilisateurs et les groupes. Vous pouvez en ajouter autant que vous voulez ; cependant, chaque groupe doit être défini dans le même domaine de base que les utilisateurs qui le composent. Si vous spécifiez des restrictions sur des groupes d'utilisateurs, seuls les utilisateurs appartenant à ces groupes seront dans le périmètre de la recherche. Nous recommandons de spécifier le top level de votre arbre LDAP en tant que domaine de base et d'utiliser le filtre de recherche pour contrôler l'accès.",
"LDAP_Domain_Search_Filter" : "Filtre pour la recherche dans le domaine",

@ -570,7 +570,7 @@
"LDAP_Custom_Domain_Search" : "חיפוש הדומיין המותאם אישית",
"LDAP_Custom_Domain_Search_Description" : "חתיכת JSON, השולטת מידע לאגד וחיבור והוא מהצורה: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "ברירת המחדל של תחום",
"LDAP_Description" : "LDAP הוא מסד נתונים היררכיים כי חברות רבות להשתמש בו כדי לספק כניסה יחידה - מתקן לשיתוף סיסמא אחת בין אתרים ושירותים רבים. לקבלת מידע תצורה מתקדמת ודוגמאות, היועץ wiki שלנו: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP הוא מסד נתונים היררכיים כי חברות רבות להשתמש בו כדי לספק כניסה יחידה - מתקן לשיתוף סיסמא אחת בין אתרים ושירותים רבים. לקבלת מידע תצורה מתקדמת ודוגמאות, היועץ wiki שלנו: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "מאגר דומיין",
"LDAP_Domain_Base_Description" : "השם הייחודי מלא (DN) של עץ משנה LDAP אתה רוצה לחפש משתמשים וקבוצות. אתה יכול להוסיף כמה שאתה רוצה; עם זאת, כל קבוצה חייבת להיות מוגדרת באותו הבסיס מושלם בתור המשתמשים ששייכים אליו. אם תציין קבוצות משתמש מוגבלות, רק משתמשים השייכים לקבוצות אלו יהיו בהיקפה. אנו ממליצים לציין את הרמה העליונה של ספריית עץ LDAP שלך כבסיס התחום שלך ולהשתמש במסנן חיפוש כדי לשלוט בגישה.",
"LDAP_Domain_Search_Filter" : "סנן חיפוש דומיין",

@ -611,7 +611,7 @@
"LDAP_Custom_Domain_Search" : "Custom Domain Search",
"LDAP_Custom_Domain_Search_Description" : "Komad JSONa koji upravlja vezama je u obliku: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Zadana domena",
"LDAP_Description" : "LDAP je hijerarhijska baza podataka koja mnoge tvrtke koriste za pružanje jedinstvene prijave - usluge za dijeljenje jedne lozinke između više web-mjesta i usluga. Za napredne podatke o konfiguraciji i primjere, obratite se našem wiki: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP je hijerarhijska baza podataka koja mnoge tvrtke koriste za pružanje jedinstvene prijave - usluge za dijeljenje jedne lozinke između više web-mjesta i usluga. Za napredne podatke o konfiguraciji i primjere, obratite se našem wiki: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "Osnova domene",
"LDAP_Domain_Base_Description" : "Potpuno kvalificirana Distinguished Name (DN) u LDAP podstablo koje želite pretražiti za korisnike i grupe. Možete dodati koliko god želite; Međutim, svaka grupa mora biti definirana u istoj bazi domeni kao korisnici koji pripadaju njemu. Ako navedete ograničene grupe korisnika, samo korisnici koji pripadaju tim skupinama će biti u opsegu. Preporučujemo da odredite gornju razinu svoje LDAP direktorija stablo kao svoju bazu domene i korištenje filtra za pretraživanje za kontrolu pristupa.",
"LDAP_Domain_Search_Filter" : "Domain Search Filter",

@ -570,7 +570,7 @@
"LDAP_Custom_Domain_Search" : "Egyéni Domain Search",
"LDAP_Custom_Domain_Search_Description" : "Egy darab JSON, amely szabályozza kötődnek és a kapcsolat adatainak és a forma: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Default Domain",
"LDAP_Description" : "Az LDAP hierarchikus adatbázis sok cég használja, hogy single sign on - a létesítmény megosztása egy jelszót a több oldalak és szolgáltatások. Speciális konfigurációs információkat és példákat, kérjük forduljon a wiki: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "Az LDAP hierarchikus adatbázis sok cég használja, hogy single sign on - a létesítmény megosztása egy jelszót a több oldalak és szolgáltatások. Speciális konfigurációs információkat és példákat, kérjük forduljon a wiki: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "Domain Base",
"LDAP_Domain_Base_Description" : "A teljesen minősített elkülönítő neve (DN) LDAP részfa szeretne keresni felhasználókat és csoportokat. Akkor adjunk hozzá annyi, amennyit akar; azonban minden csoport kell meghatározni ugyanabban a tartományban bázis a felhasználók számára, hogy tartozik hozzá. Ha megadod korlátozott felhasználói csoportok, csak azok a felhasználók, hogy tartoznak azok a csoportok lesznek hatálya alá. Javasoljuk, hogy adja meg a felső szint a LDAP fa, mint a domain bázis és használja keresési szűrő a hozzáférés szabályozására.",
"LDAP_Domain_Search_Filter" : "Domain Search Filter",

@ -570,7 +570,7 @@
"LDAP_Custom_Domain_Search" : "Cari Domain",
"LDAP_Custom_Domain_Search_Description" : "Sepotong JSON yang mengatur mengikat dan koneksi info dan adalah dalam bentuk: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "default Domain",
"LDAP_Description" : "LDAP adalah basis data hirarki yang banyak digunakan perusahaan untuk menyediakan fasilitas single sing on untuk berbagi satu kata sandi diantara beberapa situs dan services. Untuk informasi dan contoh konfigurasi lebih lanjut, silahkan berkonsultasi di wiki kami:\nhttps://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP adalah basis data hirarki yang banyak digunakan perusahaan untuk menyediakan fasilitas single sing on untuk berbagi satu kata sandi diantara beberapa situs dan services. Untuk informasi dan contoh konfigurasi lebih lanjut, silahkan berkonsultasi di wiki kami:\nhttps://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "domain Basis",
"LDAP_Domain_Base_Description" : "Nama yang memenuhi syarat Distinguished (DN) dari subtree LDAP Anda ingin mencari pengguna dan kelompok. Anda dapat menambahkan sebanyak yang Anda inginkan; Namun, masing-masing kelompok harus didefinisikan dalam basis domain sama dengan pengguna milik itu. Jika Anda menentukan kelompok pengguna terbatas, hanya pengguna yang termasuk kelompok-kelompok akan di lingkup. Kami menyarankan Anda menentukan tingkat atas pohon direktori LDAP sebagai basis domain Anda dan gunakan filter pencarian untuk mengontrol akses.",
"LDAP_Domain_Search_Filter" : "Domain Cari Filter",

@ -611,7 +611,7 @@
"LDAP_Custom_Domain_Search" : "Ricerca dominio personalizzato",
"LDAP_Custom_Domain_Search_Description" : "Un pezzo di JSON che lega e collega informazioni di questo tipo: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Dominio Predefinito",
"LDAP_Description" : "LDAP è un database gerarchico che molte aziende utilizzano per fornire single sign on - per la condivisione di una sola password tra più siti e servizi. Per informazioni sulla configurazione avanzata ed esempi, consulta il nostro wiki: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP è un database gerarchico che molte aziende utilizzano per fornire single sign on - per la condivisione di una sola password tra più siti e servizi. Per informazioni sulla configurazione avanzata ed esempi, consulta il nostro wiki: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "Dominio Base",
"LDAP_Domain_Base_Description" : "Il nome Distinguished Name (DN) di una sottostruttura LDAP in cui vuoi cercare utenti e gruppi. È possibile aggiungere quanti ne vuoi; Tuttavia, ogni gruppo deve essere definito nella stessa base dominio degli utenti che ne fanno parte. Se specifichi gruppi di utenti con restrizioni, solo gli utenti che appartengono a questi gruppi saranno raggiungibili. Si consiglia di specificare il livello superiore nell'albero della directory LDAP come base di dominio e utilizzare il filtro di ricerca per controllare l'accesso.",
"LDAP_Domain_Search_Filter" : "Filtro di ricerca del dominio ",

@ -412,7 +412,8 @@
"Features_Enabled" : "有効な機能",
"Field" : "フィールド",
"Field_removed" : "フィールド削除",
"File_exceeds_allowed_size_of_bytes" : "ファイルが許可されているサイズ __size__ バイトを超過しています。",
"File_exceeds_allowed_size_of_bytes" : "ファイルが許可されているサイズ __size__ を超過しています。",
"File_type_is_not_accepted": "許可されていないファイルタイプです。",
"FileUpload" : "ファイルアップロード",
"FileUpload_Enabled" : "ファイルアップロードを有効にする",
"FileUpload_File_Empty" : "ファイルが空です",
@ -574,7 +575,7 @@
"LDAP_Custom_Domain_Search" : "カスタムドメイン検索",
"LDAP_Custom_Domain_Search_Description" : "バインドと接続情報を管理し、フォームのあるJSONの作品: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "既定ドメイン",
"LDAP_Description" : "LDAP は、多くの企業でシングルサインオンを提供する為に使用している階層構造データベースで、 1 つのパスワードを複数サイトやサービスで共有できる手法です。高度な設定情報や例示は、私達の wiki で相談してください: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication",
"LDAP_Description" : "LDAP は、多くの企業でシングルサインオンを提供する為に使用している階層構造データベースで、 1 つのパスワードを複数サイトやサービスで共有できる手法です。高度な設定情報や例示は、私達の wiki で相談してください: https://rocket.chat/docs/administrator-guides/authentication/ldap/",
"LDAP_Domain_Base" : "ドメインベース",
"LDAP_Domain_Base_Description" : "検索したいユーザーやグループが LDAP サブツリーとして属す完全修飾の Distinguished Name (DN) 。 それぞれのグループは、そこに属すユーザーと同じドメインベースに定義されていなければなりません。特定のユーザーグループを制限した場合、そのグループに属したユーザーのみ対象になります。LDAP ディレクトリーのトップレベルドメインをドメインベースとし、アクセス制御には検索フィルターを使用することを推奨します。",
"LDAP_Domain_Search_Filter" : "ドメイン検索フィルター",

@ -570,7 +570,7 @@
"LDAP_Custom_Domain_Search" : "សងរកដនផន",
"LDAP_Custom_Domain_Search_Description" : "បកមយន JSON បលគរបរង info ចងនងករតភងជបបទន: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "ដនលម",
"LDAP_Description" : "LDAP គងទកទននយដលផកពនកមហនជនដលបរ Authentication ដយប Username នង Password រវង Site ជន នងសកមមផងៗ។ ពនអរកណតកមតខពសងឧទហរណមចលទ https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication",
"LDAP_Description" : "LDAP គងទកទននយដលផកពនកមហនជនដលបរ Authentication ដយប Username នង Password រវង Site ជន នងសកមមផងៗ។ ពនអរកណតកមតខពសងឧទហរណមចលទ https://rocket.chat/docs/administrator-guides/authentication/ldap/",
"LDAP_Domain_Base" : "មលដនដន",
"LDAP_Domain_Base_Description" : "ឈលមនសមតថភពយងពញលញកយស (DN) នកធងរបស LDAP មយដលអនកចងនដងរកអនកបងកម។ អនកអចបនមជនដចជនកចង; ទងណ, កមនយតវតវបនកណតងមលដនដនដចគនកបលជកមមសរបស។ បរសនបនកបញមអនកបនដនតនកបលជរបសមទងនងមននងវលភព។ យងផដលអនសននកបញងកមតកលរបសថត LDAP របសនកដមឈលដនដនរបសនកហយបតមរងសងរកដរបរងករចលប។",
"LDAP_Domain_Search_Filter" : "តមរងសងរកដន",

@ -570,7 +570,7 @@
"LDAP_Custom_Domain_Search" : "Search Custom Domain",
"LDAP_Custom_Domain_Search_Description" : "A perçek ji JSON ku rê bind û girêdana info e û yên ku forma: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Default Domain",
"LDAP_Description" : "hesanîyekî ji bo parvekirina yek nasnavê di navbera sites û xizmetên piralî - LDAP a nav HTMLê da heye hiyerarşîk ku gelek kompaniyên bi kar ji bo ne yek nîşanek li ser e. https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication: Ji bo agahiyên Mîhengên pêşketî û wergerandî, ji kerema xwe ve wiki me bişêwirin.",
"LDAP_Description" : "hesanîyekî ji bo parvekirina yek nasnavê di navbera sites û xizmetên piralî - LDAP a nav HTMLê da heye hiyerarşîk ku gelek kompaniyên bi kar ji bo ne yek nîşanek li ser e. https://rocket.chat/docs/administrator-guides/authentication/ldap/: Ji bo agahiyên Mîhengên pêşketî û wergerandî, ji kerema xwe ve wiki me bişêwirin.",
"LDAP_Domain_Base" : "Base Domain",
"LDAP_Domain_Base_Description" : "The Name bi temamî bi kalîte Hêja (DN) ya subtree LDAP hûn jî dixwazin ku ji bo lêgerîna bikarhênerên û komên. Hûn dikarin wek gelek wek ku hûn dixwazin lê zêde bike; Lê belê, her kom, divê li ser bingeha domain eynî wek ku bikarhênerên ku ji bo ev were terîf kirin. Ger tu komên user dibî diyar bike, tenê bikarhênerên ku endamên wan koman dê di çarçoveya be. Em tewsiye dikin ku tu di asta herî bilind de ji LDAP dara pêristeke xwe diyar bike, wek bingeha Domaina xwe û bi kar tînin Parzûna lêgerîn ji bo kontrolkirina access.",
"LDAP_Domain_Search_Filter" : "Domain Search Filter",

@ -570,7 +570,7 @@
"LDAP_Custom_Domain_Search" : "ຄນຫາ Domain Custom",
"LDAP_Custom_Domain_Search_Description" : "A ສນຂອງ JSON ທຄວບຄມຂນຕດແລະການເຊອມຕແລະເປນຮບແບບ: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Domain ມາດຕະຖານ",
"LDAP_Description" : "LDAP ເປນຖານຂນລາດບຊນທາຍບດນາໃຊເພອສະຫນອງການເຂາສລະບບໃນ - ສະຖານທາລບການແລກປຽນລະຫດຜານຫນງລະຫວາງສະຖານທແລະບການທາກຫາຍ. ສາລບຂນການຕງຄາຂນສງແລະຕວຢາງ, ກະລນາປກສາຫາລ wiki ຂອງພວກເຮາ: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP ເປນຖານຂນລາດບຊນທາຍບດນາໃຊເພອສະຫນອງການເຂາສລະບບໃນ - ສະຖານທາລບການແລກປຽນລະຫດຜານຫນງລະຫວາງສະຖານທແລະບການທາກຫາຍ. ສາລບຂນການຕງຄາຂນສງແລະຕວຢາງ, ກະລນາປກສາຫາລ wiki ຂອງພວກເຮາ: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "Base ໂດເມນ",
"LDAP_Domain_Base_Description" : "ຄນສມບດຢາງເຕມສວນຊເພາະ (DN) ຂອງຍອຍ LDAP ທານຕອງການຄນຫາສາລບຜໃຊແລະກມ. ທານສາມາດເພມເປນຈານວນຫາຍຕາມທານຕອງການ; ຢາງໃດກຕາມ, ໃນແຕລະກມຈະຕອງໄດບການການດໄວໃນຖານໂດເມນດຽວກນຜມໃຊເປນຂອງມນ. ຖາຫາກວາທານລະບມຜໃຊາກດ, ມພຽງແຕໃຊນກບກມຄນເຫານນຈະຢໃນຂອບເຂດ. ພວກເຮາແນະນາໃຫານການດລະດບເທງຂອງຕນໄມ directory LDAP ຂອງທານເປນພນຖານໂດເມນຂອງທານແລະການນາໃຊການກນຕອງການຊອກຫາທຈະຄວບຄມການເຂາເຖງ.",
"LDAP_Domain_Search_Filter" : "ໂດເມນຜນການຄນຫາ",

@ -570,7 +570,7 @@
"LDAP_Custom_Domain_Search" : "Custom Domain Search",
"LDAP_Custom_Domain_Search_Description" : "Sekeping JSON yang mentadbir maklumat mengikat dan sambungan dan dalam bentuk: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Domain lalai",
"LDAP_Description" : "LDAP adalah pangkalan data hierarki bahawa banyak syarikat gunakan untuk menyediakan single sign on - kemudahan untuk berkongsi satu kata laluan antara beberapa tapak dan perkhidmatan. Untuk maklumat konfigurasi lanjutan dan contoh, sila rujuk wiki kami: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP adalah pangkalan data hierarki bahawa banyak syarikat gunakan untuk menyediakan single sign on - kemudahan untuk berkongsi satu kata laluan antara beberapa tapak dan perkhidmatan. Untuk maklumat konfigurasi lanjutan dan contoh, sila rujuk wiki kami: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "Base domain",
"LDAP_Domain_Base_Description" : "Nama pertama layak sepenuhnya Cemerlang (DN) seorang anak pohon LDAP anda ingin mencari pengguna-pengguna dan kumpulan. Anda boleh menambah seberapa banyak yang anda suka; Walau bagaimanapun, setiap kumpulan mesti ditakrifkan dalam asas domain yang sama dengan pengguna yang menjadi miliknya. Jika anda menentukan kumpulan pengguna terhad, hanya pengguna yang di dalam kumpulan-kumpulan akan berada dalam skop. Kami mengesyorkan bahawa anda menentukan tahap bahagian atas pokok direktori LDAP anda sebagai asas domain anda dan menggunakan penapis carian untuk mengawal akses.",
"LDAP_Domain_Search_Filter" : "Domain Search Filter",

@ -570,7 +570,7 @@
"LDAP_Custom_Domain_Search" : "Custom Domain Search",
"LDAP_Custom_Domain_Search_Description" : "Een stuk van JSON die regeert binden en de aansluiting info en is van de vorm: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Default Domain",
"LDAP_Description" : "LDAP is a hierarchical database that many companies use to provide single sign on - a facility for sharing one password between multiple sites and services. For advanced configuration information and examples, please consult our wiki: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP is a hierarchical database that many companies use to provide single sign on - a facility for sharing one password between multiple sites and services. For advanced configuration information and examples, please consult our wiki: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "Domain Base",
"LDAP_Domain_Base_Description" : "De volledig gekwalificeerde Distinguished Name (DN) van een LDAP subtree u wilt zoeken voor gebruikers en groepen. U kunt zoveel als je wilt toevoegen; echter, moet elke groep worden gedefinieerd in hetzelfde domein basis als de gebruikers die behoren. Als u beperkte gebruikersgroepen geven, zullen alleen gebruikers die behoren tot die groepen in scope. Wij raden u aan het hoogste niveau van de LDAP-directory tree opgeven als uw domein basis en gebruiken zoekfilter om toegang te controleren.",
"LDAP_Domain_Search_Filter" : "Domain Zoek Filter",

@ -579,7 +579,7 @@
"LDAP_Custom_Domain_Search" : "Szukaj Domena niestandardowa",
"LDAP_Custom_Domain_Search_Description" : "Kawałek JSON, który reguluje powiązania i połączenia informacji i ma postać: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Domyślna domena",
"LDAP_Description" : "LDAP to hierarchiczna baza danych wykorzystywana przez wiele firm w celu udostępniania pojedynczej usługi autoryzacji użytkowników pomiędzy wieloma serwisami. Aby uzyskać dodatkowe informacje i przykłady konfiguracji, odwiedź nasze wiki: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP to hierarchiczna baza danych wykorzystywana przez wiele firm w celu udostępniania pojedynczej usługi autoryzacji użytkowników pomiędzy wieloma serwisami. Aby uzyskać dodatkowe informacje i przykłady konfiguracji, odwiedź nasze wiki: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "Baza domeny",
"LDAP_Domain_Base_Description" : "W pełni kwalifikowana nazwa wyróżniająca (DN) w poddrzewie LDAP chcesz wyszukać użytkowników i grup. Możesz dodać tyle, ile zechcesz; Jednakże, każda grupa musi być określona w ten sam bazie domeny jako użytkowników należących do niego. Jeśli podasz niewielkich grup użytkowników, tylko użytkownicy należący do tych grup będzie w zasięgu. Zaleca się, aby określić górny poziom drzewa katalogów LDAP jako baza domeny i użyć filtru wyszukiwania w celu kontroli dostępu.",
"LDAP_Domain_Search_Filter" : "Domeny Filtr wyszukiwania",

@ -253,6 +253,7 @@
"Collapse_Embedded_Media_By_Default" : "Esconder mídia por padrão",
"Color" : "Cor",
"Commands" : "Comandos",
"Comment_to_leave_on_closing_session" : "Comentário ao fechar sessão",
"Compact" : "Compacto",
"Confirm_password" : "Confirmar a senha",
"Conversation" : "Conversa",
@ -488,8 +489,10 @@
"hours" : "horas",
"How_friendly_was_the_chat_agent" : "Quão amigável foi o agente de bate-papo?",
"How_knowledgeable_was_the_chat_agent" : "O agente bate-papo possuía conhecimentos suficientes?",
"How_long_to_wait_after_agent_goes_offline" : "Quanto tempo esperar após agente ficar offline",
"How_responsive_was_the_chat_agent" : "Quão responsivo foi o agente de bate-papo?",
"How_satisfied_were_you_with_this_chat" : "Ficou satisfeito com este bate-papo?",
"How_to_handle_open_sessions_when_agent_goes_offline" : "O que fazer com sessões abertas quando agente ficar offline",
"If_you_are_sure_type_in_your_password" : "Se você tem certeza, digite sua senha:",
"If_you_are_sure_type_in_your_username" : "Se você tem certeza, digite seu nome de usuário:",
"Importer_Archived" : "Arquivado",
@ -593,7 +596,7 @@
"LDAP_Custom_Domain_Search" : "Pesquisa de Domínio Personalizado",
"LDAP_Custom_Domain_Search_Description" : "Um pedaço de JSON que governa informações de conexão e ligação e é da forma: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Domínio Padrão",
"LDAP_Description" : "LDAP é um banco de dados hierárquico que muitas empresas usam para fornecer single sign on - uma facilidade para compartilhar uma senha entre múltiplos sites e serviços. Para exemplos e informações de configurações avançadas, por favor consulte nosso wiki: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication",
"LDAP_Description" : "LDAP é um banco de dados hierárquico que muitas empresas usam para fornecer single sign on - uma facilidade para compartilhar uma senha entre múltiplos sites e serviços. Para exemplos e informações de configurações avançadas, por favor consulte nosso wiki: https://rocket.chat/docs/administrator-guides/authentication/ldap/",
"LDAP_Domain_Base" : "Base de Domínio",
"LDAP_Domain_Base_Description" : "O nome distinto (DN) de uma sub-árvore LDAP em que você deseja procurar por usuários e grupos. Você pode adicionar tantos quantos quiser; no entanto, cada grupo deve ser definido na mesma base de domínio que os usuários que pertencem a ele. Se você especificar grupos de usuários restritos, somente os usuários que pertencem a esses grupos estarão no escopo. Recomendamos que você especifique o nível mais alto de seu diretório LDAP como a sua base de domínio e use o filtro de pesquisa para controlar o acesso.",
"LDAP_Domain_Search_Filter" : "Filtro da Pesquisa de Domínio",
@ -778,6 +781,7 @@
"No_user_with_username_%s_was_found" : "Nenhum usuário com nome de usuário <strong>\"%s\"</strong> foi encontrado!",
"Nobody_available" : "Ninguém disponível",
"Node_version" : "Versão do Node",
"None" : "Nada",
"Not_authorized" : "Não autorizado",
"Not_Available" : "Não Disponível",
"Not_found_or_not_allowed" : "Não encontrado ou não permitido",
@ -991,6 +995,7 @@
"Send_welcome_email" : "Enviar e-mail de boas-vindas",
"Send_your_JSON_payloads_to_this_URL" : "Envie seu payload JSON para esta URL.",
"Sending" : "Enviando ...",
"Served_By" : "Atendido Por",
"Service" : "Serviço",
"Set_as_moderator" : "Definir como moderador",
"Set_as_owner" : "Definir como proprietário",
@ -1041,6 +1046,7 @@
"Statistics" : "Estatísticas",
"Statistics_reporting" : "Enviar estatísticas para Rocket.Chat",
"Statistics_reporting_Description" : "Ao enviar suas estatísticas, você vai nos ajudar a identificar quantas instâncias de Rocket.Chat são implantadas, bem como o quão bom o sistema está se comportando, para que possamos melhorar ainda mais isso. Não se preocupe, pois nenhuma informação de usuário é enviado e toda a informação que recebemos é mantida em sigilo.",
"Status" : "Situação",
"Stats_Active_Users" : "Usuários Ativos",
"Stats_Avg_Channel_Users" : "Média de Usuários por Canal",
"Stats_Avg_Private_Group_Users" : "Média de Usuários por Grupo Privado",

@ -570,7 +570,7 @@
"LDAP_Custom_Domain_Search" : "Căutare în domeniu personalizat",
"LDAP_Custom_Domain_Search_Description" : "O bucată de JSON care guvernează leagă și conexiunea info și este de forma: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Domeniu implicit",
"LDAP_Description" : "LDAP este o bază de date ierarhică pe care multe companii o folosesc pentru a oferi osingură  parolă pe mai multe site-uri și servicii. Pentru informații și exemple de configurare avansate, vă rugăm să consultați wiki nostru: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP este o bază de date ierarhică pe care multe companii o folosesc pentru a oferi osingură  parolă pe mai multe site-uri și servicii. Pentru informații și exemple de configurare avansate, vă rugăm să consultați wiki nostru: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "Baza domeniului",
"LDAP_Domain_Base_Description" : "Numele complet calificat distinctiv (DN) al unui subramificație LDAP pe care doriți să căutați utilizatori și grupuri. Puteți adăuga oricât de multe doriți; cu toate acestea, fiecare grup trebuie să fie definite în același domeniu de bază ca și utilizatorii care îi aparțin. Dacă precizați grupurile de utilizatori sunt restricționate, numai utilizatorii care fac parte din aceste grupuri vor fi în domeniul de aplicare. Vă recomandăm să specificați nivelul superior al arborelui dvs. de director LDAP ca baza domeniului dvs. și utilizați filtrul de căutare pentru a controla accesul.",
"LDAP_Domain_Search_Filter" : "Filtru Căutare Domeniu",

@ -573,7 +573,7 @@
"LDAP_Custom_Domain_Search" : "Пользовательский домен поиска",
"LDAP_Custom_Domain_Search_Description" : "Часть протокола JSON, которая регулирует привязку и подключение информации, имеет форму: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Домен по умолчанию",
"LDAP_Description" : "Протокол LDAP - это иерархическая база данных, которую используют многие компании для обеспечения единой регистрации - средство для совместного использования одного пароля для разных сайтов и сервисов. Для подробной информации по конфигурации читайте нашу wiki-страницу: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "Протокол LDAP - это иерархическая база данных, которую используют многие компании для обеспечения единой регистрации - средство для совместного использования одного пароля для разных сайтов и сервисов. Для подробной информации по конфигурации читайте нашу wiki-страницу: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "Доменная база",
"LDAP_Domain_Base_Description" : "Полностью соответствующее Отличительное Имя (ОМ) поддерева протокола LDAP, которое вы хотите найти для пользователей и групп. Вы можете добавлять столько, сколько желаете; однако, каждая группа должна быть определена в одной и той же доменной базе, как и пользователи, относящиеся к ней. Если вы укажете ограниченные группы пользователей, в пределах этих групп будут лишь те пользователи, относящиеся к ним. Вы рекомендуем вам указать верхний уровень дерева каталогов LDAP в качестве доменной базы и использовать фильтр поиска для контроля доступа.",
"LDAP_Domain_Search_Filter" : "Фильтр доменного поиска",

@ -570,7 +570,7 @@
"LDAP_Custom_Domain_Search" : "Custom Domain Kërko",
"LDAP_Custom_Domain_Search_Description" : "Një pjesë e JSON që rregullon lidh dhe lidhje info dhe është i formës: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Domain Default",
"LDAP_Description" : "LDAP është një bazë të dhënash hierarkike se shumë kompani përdorin për të dhënë shenjë të vetme në - një strukturë për të ndarë një fjalëkalim në mes të vendeve të shumta dhe të shërbimeve. Për informacion të avancuara konfigurimi dhe shembuj, ju lutem konsultoni wiki tonë: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP është një bazë të dhënash hierarkike se shumë kompani përdorin për të dhënë shenjë të vetme në - një strukturë për të ndarë një fjalëkalim në mes të vendeve të shumta dhe të shërbimeve. Për informacion të avancuara konfigurimi dhe shembuj, ju lutem konsultoni wiki tonë: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "domain Base",
"LDAP_Domain_Base_Description" : "Plotësisht të kualifikuar nderuar Emri (DN) e një subtree LDAP që ju doni të kërkoni për përdoruesit dhe grupet. Ju mund të shtoni sa më shumë që ju pëlqen; Megjithatë, secili grup duhet të përcaktohen në të njëjtën bazë domain si përdoruesit që i përket. Nëse ju specifikoni grupet e kufizuara të përdoruesve, vetëm përdoruesit që i përkasin këtyre grupeve do të jetë në fushë. Ne ju rekomandojmë që të përcaktojë nivelin e lartë të LDAP pemë tuaj directory si bazë domain dhe përdorimin e kërkimit filtër për të kontrolluar hyrje.",
"LDAP_Domain_Search_Filter" : "Domain Kërko Filter",

@ -571,7 +571,7 @@
"LDAP_Custom_Domain_Search" : "Anpassad Domain Search",
"LDAP_Custom_Domain_Search_Description" : "En bit av JSON som styr binder och anslutningsinfo och har formen: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Standarddomän",
"LDAP_Description" : "LDAP är en hierarkisk databas som många företag använder för att tillhandahålla enkel inloggning - en anläggning för att dela ett lösenord mellan flera webbplatser och tjänster. För avancerad konfiguration. information och exempel, kontakta vår wiki: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP är en hierarkisk databas som många företag använder för att tillhandahålla enkel inloggning - en anläggning för att dela ett lösenord mellan flera webbplatser och tjänster. För avancerad konfiguration. information och exempel, kontakta vår wiki: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "domän Base",
"LDAP_Domain_Base_Description" : "Den fullständiga unika namn (DN) på en LDAP träd som du vill söka efter användare och grupper. Du kan lägga till så många som du vill, emellertid måste definieras varje grupp i samma domän basen som de användare som hör till den. Om du anger begränsade användargrupper, kommer endast användare som tillhör dessa grupper vara i omfattning. Vi rekommenderar att du anger den översta nivån i LDAP-katalogträd som domänen bas och använda sökfunktionen filter för att kontrollera åtkomsten.",
"LDAP_Domain_Search_Filter" : "Domän Filter",

@ -570,7 +570,7 @@
"LDAP_Custom_Domain_Search" : "விப இணய தடல",
"LDAP_Custom_Domain_Search_Description" : "ஜிய மற இண தகவலிவகிிறத மற அநத வடிவம JSON ஒர: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "இயலி களப",
"LDAP_Description" : "பல தளஙகள மறகள இட ஒர கடவ பகி ஒர வசதி - LDAP, பல நிவனஙகள ஒற அடளம வழஙக பயனபடத என ஒர படிி தரவதள உளளத. https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication: மபடட கடடம தகவல மற உதரணஙகள, எஙகளிி கலநிகவ.",
"LDAP_Description" : "பல தளஙகள மறகள இட ஒர கடவ பகி ஒர வசதி - LDAP, பல நிவனஙகள ஒற அடளம வழஙக பயனபடத என ஒர படிி தரவதள உளளத. https://rocket.chat/docs/administrator-guides/authentication/ldap/: மபடட கடடம தகவல மற உதரணஙகள, எஙகளிி கலநிகவ.",
"LDAP_Domain_Base" : "இணய தளம",
"LDAP_Domain_Base_Description" : "பயனரகள மறகளட வ ஒர LDAP உபபடிிவத தகின டிிகஷ (DN). நகளற பல சக மி; எனி, ஒவதவ என பயனரகள அத அடிபட வரயறகபபடிக வ. நகள கடபடதபபடட பயனரகளிி, அநத ககளதவ என பயனரகள மடகம இர. நகள உஙகள தளமக LDAP அடிிிிிட மற அணகல கடபடத தடல வடிகடி பயனபடத பரிி.",
"LDAP_Domain_Search_Filter" : "இணய தடல வடிகடி",

@ -604,7 +604,7 @@
"LDAP_Custom_Domain_Search" : "Özel Alan Arama",
"LDAP_Custom_Domain_Search_Description" : "bağlama ve bağlantı bilgileri yönetir ve form olan JSON bir parça: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "varsayılan Etki Alanı",
"LDAP_Description" : "Birden çok site ve hizmetler arasında bir parola paylaşımı için bir tesis - LDAP birçok şirket üzerinde tek oturum sağlamak için kullanmak hiyerarşik veritabanı. https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication: gelişmiş yapılandırma bilgi ve örnekler için, bizim wiki danışın.",
"LDAP_Description" : "Birden çok site ve hizmetler arasında bir parola paylaşımı için bir tesis - LDAP birçok şirket üzerinde tek oturum sağlamak için kullanmak hiyerarşik veritabanı. https://rocket.chat/docs/administrator-guides/authentication/ldap/: gelişmiş yapılandırma bilgi ve örnekler için, bizim wiki danışın.",
"LDAP_Domain_Base" : "Alan Bankası",
"LDAP_Domain_Base_Description" : "Eğer kullanıcılar ve gruplar için aramak istediğiniz bir LDAP alt ağacının tam ayırt edici ad (DN). İstediğiniz kadar ekleyebilirsiniz; Ancak, her grup kendisine ait kullanıcılarıyla aynı etki tabanı tanımlanmış olmalıdır. Eğer kısıtlı kullanıcı grupları belirtirseniz, bu gruplara ait sadece kullanıcıların kapsamında olacak. Size etki temel olarak LDAP dizin ağacının üst düzeyini belirlemek ve erişim kontrolü için arama filtresi kullanmanızı öneririz.",
"LDAP_Domain_Search_Filter" : "Domain Arama Filtresi",

@ -570,7 +570,7 @@
"LDAP_Custom_Domain_Search" : "ئۆزى بېكىتكەن تورنامى ئىزدەش شەرتى",
"LDAP_Custom_Domain_Search_Description" : "<br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>:سانلىق مەلۇماتنى مۇنداق باشقۇرىمىزJSONئۇچۇر باغلانغان ۋە ئۇلانغان",
"LDAP_Default_Domain" : "بەلگىلەنگەن تور نامى",
"LDAP_Description" : "ئادەتتە شىركەتلەر تەرىپىدىن ئاددىي نۇقتا كىرىش مېخانىزىمى قىلىپ قوللىنىدۇ .بۇ خىلمېخانىزىم بىر ئەزانى ئوخشاش بىر يۈرۈش ھېسابات نومۇرى ۋە مەخپىي نومۇر ئارقىلىق كۆپلىگەن تور بەت ۋەمۇلازىمەتكە كىرگىلى بولىدۇ.كۆپلىگەن LDAPگۇۋاھنامىسىنى تەڭشەش ۋە مىساللىرىنى ئىچكىرى چۈشەنمەكچى بولسىڭىز بىزنىڭ wikiتور بېتىمىزدىن پايدىلانسىڭىز بولىدۇ https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication (ېنىك مۇندەرىجىنى زىيارەت قىلىش كېلىشىمى)LDAP",
"LDAP_Description" : "ئادەتتە شىركەتلەر تەرىپىدىن ئاددىي نۇقتا كىرىش مېخانىزىمى قىلىپ قوللىنىدۇ .بۇ خىلمېخانىزىم بىر ئەزانى ئوخشاش بىر يۈرۈش ھېسابات نومۇرى ۋە مەخپىي نومۇر ئارقىلىق كۆپلىگەن تور بەت ۋەمۇلازىمەتكە كىرگىلى بولىدۇ.كۆپلىگەن LDAPگۇۋاھنامىسىنى تەڭشەش ۋە مىساللىرىنى ئىچكىرى چۈشەنمەكچى بولسىڭىز بىزنىڭ wikiتور بېتىمىزدىن پايدىلانسىڭىز بولىدۇ https://rocket.chat/docs/administrator-guides/authentication/ldap/ (ېنىك مۇندەرىجىنى زىيارەت قىلىش كېلىشىمى)LDAP",
"LDAP_Domain_Base" : "ئاساس تور بەت نامى",
"LDAP_Domain_Base_Description" : ".تىكى يۇقىرى دەرىجىلىك مۇندەرىجىنى ئاساسىي تورنامى قىلىپ ئىشلىتىشنى تەكلىپ قىلىمىز .تۆۋەنكى 'بەلگىلەنگەن تورنامى ئىزدەش'تاللاش شەرتىگە ئاساسەن ئەزا چەكلەش ئېلىپ بېرىڭ. .LDAP .ئاستىدىكى ئەزانىلا ئىزدىيەلەيدۇ.DNنىڭ ئاساسىي تور نامى بولىشىنى ئەگەر سىز چەكلىگەن بولسىڭىز بۇ ۋاقىتتا پەقەت بۇ DN.نى سىز كۆپرەپ قاتسىڭىز بولىدۇ لېكىن گۇرۇپپا ۋە گۇرۇپپا ئىچىدە ئەزا نامى چوقۇم بىر تورنامى ئاستىدا بولىشى كېرەك DN .نىڭ تارماق دەرىخى ئىچىدىن ئەزا ۋە گۇرۇپ ئىزدىشىگە قولايلىق بولىدۇ .LDAP نىڭ DNبۇنداق بولغاندا (Domain Base)نى تولدۇرۇپ ئۇنى ئاساسى توربەت نامىد قىددلىڭ ،DNئىناۋەتلىك",
"LDAP_Domain_Search_Filter" : "تاللاش شەرتى",

@ -570,7 +570,7 @@
"LDAP_Custom_Domain_Search" : "Пошук Персональний домен",
"LDAP_Custom_Domain_Search_Description" : "Шматок JSON, який регулює прив'язку і підключення до інформації і має вигляд: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "Домен за замовчуванням",
"LDAP_Description" : "LDAP є ієрархічною базу даних, що багато компаній використовують для забезпечення єдиного входу - об'єкта для спільного використання одного пароля між декількома сайтами і послугами. Для отримання попередньої інформації про конфігурацію і приклади, будь ласка, зверніться до нашої вікі: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP є ієрархічною базу даних, що багато компаній використовують для забезпечення єдиного входу - об'єкта для спільного використання одного пароля між декількома сайтами і послугами. Для отримання попередньої інформації про конфігурацію і приклади, будь ласка, зверніться до нашої вікі: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "базовий домен",
"LDAP_Domain_Base_Description" : "Повний відмітна ім'я (DN) з поддерева LDAP, який потрібно для пошуку користувачів і груп. Ви можете додати стільки, скільки вам подобається; Проте, кожна група повинна бути визначена в тому ж домені, що і базою користувачів, які належать до нього. Якщо вказати обмежені групи користувачів, тільки користувачі, що належать до цих груп буде знаходитися в області видимості. Ми рекомендуємо вам вказати верхній рівень вашого LDAP дерева каталогів в якості домену бази і використовувати фільтр пошуку для управління доступом.",
"LDAP_Domain_Search_Filter" : "Фільтр пошуку домену",

@ -570,7 +570,7 @@
"LDAP_Custom_Domain_Search" : "自定義域搜索",
"LDAP_Custom_Domain_Search_Description" : "一塊JSON的管轄綁定和連接信息,並為下面的形式: <br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "默認域",
"LDAP_Description" : "LDAP is a hierarchical database that many companies use to provide single sign on - a facility for sharing one password between multiple sites and services. For advanced configuration information and examples, please consult our wiki: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication.",
"LDAP_Description" : "LDAP is a hierarchical database that many companies use to provide single sign on - a facility for sharing one password between multiple sites and services. For advanced configuration information and examples, please consult our wiki: https://rocket.chat/docs/administrator-guides/authentication/ldap/.",
"LDAP_Domain_Base" : "域基",
"LDAP_Domain_Base_Description" : "要搜索用戶和組的LDAP子樹的完全合格的名稱(DN)。您可以添加你喜歡的盡可能多的;然而,每一組必須在相同的域中鹼作為屬於它的用戶來定義。如果指定了受限制的用戶群體,只有屬於這些組的用戶將在範圍內。我們建議您指定的LDAP目錄樹的頂層為您的域名基地,並使用搜索過濾器來控制訪問。",
"LDAP_Domain_Search_Filter" : "域搜索過濾器",

@ -582,7 +582,7 @@
"LDAP_Custom_Domain_Search" : "自定义域搜索条件",
"LDAP_Custom_Domain_Search_Description" : "这样管理信息绑定和连接的 JSON 数据:<br/> <code>{\"filter\": \"(&(objectCategory=person)(objectclass=user)(memberOf=CN=ROCKET_ACCESS,CN=Users,DC=domain,DC=com)(sAMAccountName=#{username}))\", \"scope\": \"sub\", \"userDN\": \"rocket.service@domain.com\", \"password\": \"urpass\"}</code>",
"LDAP_Default_Domain" : "默认域名",
"LDAP_Description" : "LDAP(轻量目录访问协议)是一种层次数据库,常被企业用于提供单点登录机制——该机制允许用户使用同一套帐号密码登录多个网站或服务。想要了解LDAP认证的设置及示例,可参考我们的wiki页: https://github.com/RocketChat/Rocket.Chat/wiki/LDAP-Authentication",
"LDAP_Description" : "LDAP(轻量目录访问协议)是一种层次数据库,常被企业用于提供单点登录机制——该机制允许用户使用同一套帐号密码登录多个网站或服务。想要了解LDAP认证的设置及示例,可参考我们的wiki页: https://rocket.chat/docs/administrator-guides/authentication/ldap/",
"LDAP_Domain_Base" : "基础域",
"LDAP_Domain_Base_Description" : "请填写有效的 DN 作为基础域(Domain Base),以便在该DN指向的 LDAP 子树中检索用户和组。您可添加多个DN,但组与组内用户必须定义在同一个基础域中。若您限定了某些 DN 作为基础域,则只能检索到这些DN下的用户。建议使用 LDAP 中的顶级目录作为基础域,配合下面的“自定义域搜索”筛选条件来进行用户的限制。",
"LDAP_Domain_Search_Filter" : "筛选条件",

@ -67,9 +67,7 @@ class IframeLogin {
HTTP.call(this.apiMethod, this.apiUrl, options, (error, result) => {
console.log(error, result);
if (result && result.data && result.data.token) {
// TODO get from api
// result.data.token = 'yaMadZ1RMBdMzs6kGycKybrHVptoDl7nokxtorz1me0';
this.loginWithToken(result.data.token, (error, result) => {
this.loginWithToken(result.data, (error, result) => {
if (error) {
this.reactiveIframeUrl.set(iframeUrl);
} else {
@ -89,15 +87,24 @@ class IframeLogin {
return;
}
if (Match.test(token, String)) {
token = {
token: token
};
}
console.log('loginWithToken');
if (token.loginToken) {
return Meteor.loginWithToken(token.loginToken, callback);
}
Accounts.callLoginMethod({
methodArguments: [{
iframe: true,
token: token
token: token.token
}],
userCallback: (err) => {
callback(err);
}
userCallback: callback
});
}
}
@ -144,7 +151,7 @@ window.addEventListener('message', (e) => {
break;
case 'login-with-token':
RocketChat.iframeLogin.loginWithToken(e.data.token, (error) => {
RocketChat.iframeLogin.loginWithToken(e.data, (error) => {
if (error) {
e.source.postMessage({
event: 'login-error',

@ -1,7 +1,7 @@
Meteor.startup ->
# Make sure all imports are marked as invalid, data clean up since you can't
# restart an import at the moment.
Importer.Imports.update {}, { $set: { valid: false } }, { multi: true }
Importer.Imports.update { valid: { $ne: false } }, { $set: { valid: false } }, { multi: true }
# Clean up all the raw import data, since you can't restart an import at the moment
Importer.Imports.find({ valid: { $ne: true }}).forEach (item) ->

@ -20,7 +20,7 @@ getIntegrationScript = (integration) ->
return store[key]
try
logger.incoming.info 'will evaluate script'
logger.incoming.info 'Will evaluate script of Trigger', integration.name
logger.incoming.debug script
vmScript = vm.createScript script, 'script.js'
@ -34,13 +34,14 @@ getIntegrationScript = (integration) ->
return compiledScripts[integration._id].script
catch e
logger.incoming.error "[Error evaluating Script:]"
logger.incoming.error '[Error evaluating Script in Trigger', integration.name, ':]'
logger.incoming.error script.replace(/^/gm, ' ')
logger.incoming.error "[Stack:]"
logger.incoming.error e.stack.replace(/^/gm, ' ')
throw RocketChat.API.v1.failure 'error-evaluating-script'
if not sandbox.Script?
logger.incoming.error '[Class "Script" not in Trigger', integration.name, ']'
throw RocketChat.API.v1.failure 'class-script-not-found'
@ -159,9 +160,10 @@ executeIntegrationRest = ->
@bodyParams = result?.content
logger.incoming.debug '[Process Incoming Request result of Trigger', @integration.name, ':]'
logger.incoming.debug 'result', @bodyParams
catch e
logger.incoming.error "[Error running Script:]"
logger.incoming.error '[Error running Script in Trigger', @integration.name, ':]'
logger.incoming.error @integration.scriptCompiled.replace(/^/gm, ' ')
logger.incoming.error "[Stack:]"
logger.incoming.error e.stack.replace(/^/gm, ' ')

@ -82,7 +82,7 @@ this.processWebhookMessage = function(messageObj, user, defaultValues) {
attachments: messageObj.attachments,
parseUrls: messageObj.parseUrls !== undefined ? messageObj.parseUrls : !messageObj.attachments,
bot: messageObj.bot,
groupable: false
groupable: (messageObj.groupable !== undefined) ? messageObj.groupable : false
};
if (!_.isEmpty(messageObj.icon_url) || !_.isEmpty(messageObj.avatar)) {

@ -28,7 +28,7 @@ getIntegrationScript = (integration) ->
error: e
try
logger.outgoing.info 'will evaluate script'
logger.outgoing.info 'Will evaluate script of Trigger', integration.name
logger.outgoing.debug script
vmScript = vm.createScript script, 'script.js'
@ -42,14 +42,14 @@ getIntegrationScript = (integration) ->
return compiledScripts[integration._id].script
catch e
logger.outgoing.error "[Error evaluating Script:]"
logger.outgoing.error '[Error evaluating Script in Trigger', integration.name, ':]'
logger.outgoing.error script.replace(/^/gm, ' ')
logger.outgoing.error "[Stack:]"
logger.outgoing.error e.stack.replace(/^/gm, ' ')
throw new Meteor.Error 'error-evaluating-script'
if not sandbox.Script?
logger.outgoing.error "[Class 'Script' not found]"
logger.outgoing.error '[Class "Script" not in Trigger', integration.name, ']'
throw new Meteor.Error 'class-script-not-found'
@ -75,52 +75,48 @@ executeScript = (integration, method, params) ->
return
if not script[method]?
logger.outgoing.error "[Method '#{method}' not found]"
logger.outgoing.error '[Method "', method, '" not found in Trigger', integration.name, ']'
return
try
result = script[method](params)
logger.outgoing.debug 'result', result
logger.outgoing.debug '[Script method [', method, '] result of Trigger', integration.name, ':]'
logger.outgoing.debug result
return result
catch e
logger.incoming.error "[Error running Script:]"
logger.incoming.error '[Error running Script in Trigger', integration.name, ':]'
logger.incoming.error integration.scriptCompiled.replace(/^/gm, ' ')
logger.incoming.error "[Stack:]"
logger.incoming.error e.stack.replace(/^/gm, ' ')
return
addIntegration = (record) ->
if _.isEmpty(record.channel)
channels = [ '__any' ]
else
channels = [].concat(record.channel)
for channel in channels
triggers[channel] ?= {}
triggers[channel][record._id] = record
removeIntegration = (record) ->
for channel, trigger of triggers
delete trigger[record._id]
RocketChat.models.Integrations.find({type: 'webhook-outgoing'}).observe
added: (record) ->
if _.isEmpty(record.channel)
channels = [ '__any' ]
else
channels = [].concat(record.channel)
for channel in channels
triggers[channel] ?= {}
triggers[channel][record._id] = record
addIntegration(record)
changed: (record) ->
if _.isEmpty(record.channel)
channels = [ '__any' ]
else
channels = [].concat(record.channel)
for channel in channels
triggers[channel] ?= {}
triggers[channel][record._id] = record
removeIntegration(record)
addIntegration(record)
removed: (record) ->
if _.isEmpty(record.channel)
channels = [ '__any' ]
else
channels = [].concat(record.channel)
for channel in channels
delete triggers[channel][record._id]
removeIntegration(record)
ExecuteTriggerUrl = (url, trigger, message, room, tries=0) ->
@ -155,6 +151,9 @@ ExecuteTriggerUrl = (url, trigger, message, room, tries=0) ->
if word?
data.trigger_word = word
logger.outgoing.info 'Will execute trigger', trigger.name, 'to', url
logger.outgoing.debug data
sendMessage = (message) ->
user = RocketChat.models.Users.findOneByUsername(trigger.username)
@ -202,6 +201,11 @@ ExecuteTriggerUrl = (url, trigger, message, room, tries=0) ->
return
HTTP.call opts.method, opts.url, opts, (error, result) ->
if not result?
logger.outgoing.info 'Result for trigger', trigger.name, 'to', url, 'is empty'
else
logger.outgoing.info 'Status code for trigger', trigger.name, 'to', url, 'is', result.statusCode
scriptResult = undefined
if hasScriptAndMethod(trigger, 'process_outgoing_response')
sandbox =
@ -224,24 +228,26 @@ ExecuteTriggerUrl = (url, trigger, message, room, tries=0) ->
if not result? or result.statusCode not in [200, 201, 202]
if error?
logger.outgoing.error error
logger.outgoing.error 'Error for trigger', trigger.name, 'to', url, error
if result?
logger.outgoing.error result
logger.outgoing.error 'Error for trigger', trigger.name, 'to', url, result
if result.statusCode is 410
RocketChat.models.Integrations.remove _id: trigger._id
return
if result.statusCode is 500
logger.outgoing.error 'Request Error [500]', url
logger.outgoing.error 'Error [500] for trigger', trigger.name, 'to', url
logger.outgoing.error result.content
return
if tries <= 6
# Try again in 0.1s, 1s, 10s, 1m40s, 16m40s, 2h46m40s and 27h46m40s
waitTime = Math.pow(10, tries+2)
logger.outgoing.info 'Trying trigger', trigger.name, 'to', url, 'again in', waitTime, 'seconds'
Meteor.setTimeout ->
ExecuteTriggerUrl url, trigger, message, room, tries+1
, Math.pow(10, tries+2)
, waitTime
return

@ -167,8 +167,8 @@ class HubotScripts
scriptFile = s.trim(scriptFile)
Npm.require('hubot-scripts/src/scripts/'+scriptFile)(robot)
# robot.loadFile __meteor_bootstrap__.serverDir+'/npm/rocketchat_internal-hubot/node_modules/hubot-scripts/src/scripts', scriptFile
robot.parseHelp __meteor_bootstrap__.serverDir+'/npm/rocketchat_internal-hubot/node_modules/hubot-scripts/src/scripts/'+scriptFile
# robot.loadFile __meteor_bootstrap__.serverDir+'/npm/node_modules/meteor/rocketchat_internal-hubot/node_modules/hubot-scripts/src/scripts', scriptFile
robot.parseHelp __meteor_bootstrap__.serverDir+'/npm/node_modules/meteor/rocketchat_internal-hubot/node_modules/hubot-scripts/src/scripts/'+scriptFile
console.log "Loaded #{scriptFile}".green
catch e
console.log "can't load #{scriptFile}".red

@ -29,8 +29,8 @@ Package.onUse(function(api) {
});
Npm.depends({
'coffee-script': '1.9.3',
'hubot': '2.13.1',
'hubot-scripts': '2.16.2',
'hubot-help': '0.1.2'
'coffee-script': '1.10.0',
'hubot': '2.19.0',
'hubot-scripts': '2.17.1',
'hubot-help': '0.2.0'
});

@ -60,8 +60,12 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) {
ldap.disconnect();
if (ldapUser === undefined && RocketChat.settings.get('LDAP_Login_Fallback') === true) {
return fallbackDefaultAccountSystem(self, loginRequest.username, loginRequest.ldapPass);
if (ldapUser === undefined) {
if (RocketChat.settings.get('LDAP_Login_Fallback') === true) {
return fallbackDefaultAccountSystem(self, loginRequest.username, loginRequest.ldapPass);
}
throw new Meteor.Error('LDAP-login-error', 'LDAP Authentication failed with provided username ['+loginRequest.username+']');
}
let username;
@ -125,6 +129,7 @@ Accounts.registerLoginHandler('ldap', function(loginRequest) {
}
logger.info('User does not exist, creating', username);
// Create new user
return addLdapUser(ldapUser);
return addLdapUser(ldapUser, username, loginRequest.ldapPass);
});

@ -127,10 +127,12 @@ syncUserData = function syncUserData(user, ldapUser) {
logger.debug('setting', JSON.stringify(userData, null, 2));
}
const username = slug(getLdapUsername(ldapUser));
if (user && user._id && username !== user.username) {
logger.info('Syncing user username', user.username, '->', username);
RocketChat._setUsername(user._id, username);
if (RocketChat.settings.get('LDAP_Username_Field') !== '') {
const username = slug(getLdapUsername(ldapUser));
if (user && user._id && username !== user.username) {
logger.info('Syncing user username', user.username, '->', username);
RocketChat._setUsername(user._id, username);
}
}
if (user && user._id && RocketChat.settings.get('LDAP_Sync_User_Avatar') === true) {
@ -151,8 +153,7 @@ syncUserData = function syncUserData(user, ldapUser) {
}
};
addLdapUser = function addLdapUser(ldapUser) {
const username = slug(getLdapUsername(ldapUser));
addLdapUser = function addLdapUser(ldapUser, username, password) {
var userObject = {
username: username
};
@ -173,6 +174,10 @@ addLdapUser = function addLdapUser(ldapUser) {
logger.debug('New user data', userObject);
if (password) {
userObject.password = password;
}
try {
userObject._id = Accounts.createUser(userObject);
} catch (error) {
@ -204,7 +209,7 @@ sync = function sync() {
const users = RocketChat.models.Users.findLDAPUsers();
if (RocketChat.settings.get('LDAP_Import_Users') === true) {
if (RocketChat.settings.get('LDAP_Import_Users') === true && RocketChat.settings.get('LDAP_Username_Field') !== '') {
const ldapUsers = ldap.searchUsersSync('*');
ldapUsers.forEach(function(ldapUser) {
const username = slug(getLdapUsername(ldapUser));
@ -220,7 +225,7 @@ sync = function sync() {
user = Meteor.users.findOne(userQuery);
if (!user) {
addLdapUser(ldapUser);
addLdapUser(ldapUser, username);
}
});
}

@ -0,0 +1,11 @@
RocketChat.Layout = new (class RocketChatLayout {
constructor() {
Tracker.autorun(() => {
this.layout = FlowRouter.getQueryParam('layout');
});
}
isEmbedded() {
return this.layout === 'embedded';
}
});

@ -6,7 +6,7 @@ currentTracker = undefined
Meteor.defer ->
currentTracker = Tracker.autorun (c) ->
if RoomManager.open(type + name).ready() isnt true
BlazeLayout.render 'main', {center: 'loading'}
BlazeLayout.render 'main', { modal: RocketChat.Layout.isEmbedded(), center: 'loading' }
return
user = Meteor.user()
@ -21,6 +21,7 @@ currentTracker = undefined
if type is 'd'
Meteor.call 'createDirectMessage', name, (err) ->
if !err
RoomManager.close(type + name)
openRoom('d', name)
else
Session.set 'roomNotFound', {type: type, name: name}
@ -43,6 +44,8 @@ currentTracker = undefined
Session.set 'openedRoom', room._id
fireGlobalEvent 'room-opened', _.omit room, 'usernames'
Session.set 'editRoomTitle', false
RoomManager.updateMentionsMarksOfRoom type + name
Meteor.setTimeout ->

@ -42,6 +42,13 @@ RocketChat.roomTypes = new class roomTypesClient extends roomTypesCommon
return room?.ro is true and Array.isArray(room?.muted) and room?.muted.indexOf(user.username) != -1
archived: (roomId) ->
fields = { archived: 1 }
room = ChatRoom.findOne({ _id: roomId }, fields : fields)
return room?.archived is true
verifyCanSendMessage: (roomId) ->
room = ChatRoom.findOne({ _id: roomId }, { fields: { t: 1 } })
return if not room?.t?

@ -149,6 +149,7 @@ Package.onUse(function(api) {
api.addFiles('client/lib/settings.coffee', 'client');
api.addFiles('client/lib/roomTypes.coffee', 'client');
api.addFiles('client/lib/userRoles.js', 'client');
api.addFiles('client/lib/Layout.js', 'client');
// CLIENT METHODS
api.addFiles('client/methods/sendMessage.coffee', 'client');

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save