Commit da0c88bb authored by James Addison's avatar James Addison
Browse files

Merge branch 'master' into collabora

parents 9b77aa1b 4bbd29cd
Pipeline #28282 failed with stage
in 10 minutes and 14 seconds
......@@ -107,7 +107,7 @@ jobs:
check-app-layers:
docker:
- image: mattermost/mattermost-build-server:20201119_golang-1.15.5
- image: mattermost/mattermost-build-server:20210709_golang-1.16.5
working_directory: ~/mattermost
steps:
- attach_workspace:
......@@ -120,7 +120,7 @@ jobs:
check-store-layers:
docker:
- image: mattermost/mattermost-build-server:20201119_golang-1.15.5
- image: mattermost/mattermost-build-server:20210709_golang-1.16.5
working_directory: ~/mattermost
steps:
- attach_workspace:
......@@ -133,7 +133,7 @@ jobs:
check-mocks:
docker:
- image: mattermost/mattermost-build-server:20201119_golang-1.15.5
- image: mattermost/mattermost-build-server:20210709_golang-1.16.5
working_directory: ~/mattermost
steps:
- attach_workspace:
......@@ -146,7 +146,7 @@ jobs:
check-migrations:
docker:
- image: mattermost/mattermost-build-server:20201119_golang-1.15.5
- image: mattermost/mattermost-build-server:20210709_golang-1.16.5
working_directory: ~/mattermost
steps:
- attach_workspace:
......@@ -172,7 +172,7 @@ jobs:
# Dedicate job for mattermost-vet to make more clear when the job fails
check-mattermost-vet:
docker:
- image: mattermost/mattermost-build-server:20201119_golang-1.15.5
- image: mattermost/mattermost-build-server:20210709_golang-1.16.5
working_directory: ~/mattermost
steps:
- attach_workspace:
......@@ -223,7 +223,7 @@ jobs:
build:
docker:
- image: mattermost/mattermost-build-server:20201119_golang-1.15.5
- image: mattermost/mattermost-build-server:20210709_golang-1.16.5
resource_class: xlarge
working_directory: ~/mattermost
steps:
......@@ -287,7 +287,7 @@ jobs:
--env MM_SQLSETTINGS_DRIVERNAME=<<parameters.dbdriver>> \
-v ~/mattermost:/mattermost \
-w /mattermost/mattermost-server \
mattermost/mattermost-build-server:20201119_golang-1.15.5 \
mattermost/mattermost-build-server:20210709_golang-1.16.5 \
bash -c "ulimit -n 8096; make test-server<< parameters.racemode >> BUILD_NUMBER=$CIRCLE_BRANCH-$CIRCLE_PREVIOUS_BUILD_NUM TESTFLAGS= TESTFLAGSEE=" \
bash -c scripts/diff-email-templates.sh
no_output_timeout: 2h
......@@ -352,7 +352,7 @@ jobs:
--env MM_SQLSETTINGS_DRIVERNAME=postgres \
-v ~/mattermost:/mattermost \
-w /mattermost/mattermost-server \
mattermost/mattermost-build-server:20201119_golang-1.15.5 \
mattermost/mattermost-build-server:20210709_golang-1.16.5 \
bash -c "ulimit -n 8096; make ARGS='version' run-cli && make MM_SQLSETTINGS_DATASOURCE='postgres://mmuser:mostest@postgres:5432/latest?sslmode=disable&connect_timeout=10' ARGS='version' run-cli"
echo "Ignoring known mismatch: ChannelMembers.MentionCountRoot"
......@@ -390,7 +390,7 @@ jobs:
--env MM_SQLSETTINGS_DRIVERNAME=mysql \
-v ~/mattermost:/mattermost \
-w /mattermost/mattermost-server \
mattermost/mattermost-build-server:20201119_golang-1.15.5 \
mattermost/mattermost-build-server:20210709_golang-1.16.5 \
bash -c "ulimit -n 8096; make ARGS='version' run-cli && make MM_SQLSETTINGS_DATASOURCE='mmuser:mostest@tcp(mysql:3306)/latest?charset=utf8mb4,utf8&readTimeout=30s&writeTimeout=30s' ARGS='version' run-cli"
......
......@@ -111,7 +111,7 @@ PLUGIN_PACKAGES += mattermost-plugin-channel-export-v0.2.2
PLUGIN_PACKAGES += mattermost-plugin-custom-attributes-v1.3.0
PLUGIN_PACKAGES += mattermost-plugin-github-v2.0.1
PLUGIN_PACKAGES += mattermost-plugin-gitlab-v1.3.0
PLUGIN_PACKAGES += mattermost-plugin-incident-collaboration-v1.14.2
PLUGIN_PACKAGES += mattermost-plugin-incident-collaboration-v1.14.3
PLUGIN_PACKAGES += mattermost-plugin-jenkins-v1.1.0
PLUGIN_PACKAGES += mattermost-plugin-jira-v2.4.0
PLUGIN_PACKAGES += mattermost-plugin-nps-v1.1.0
......
......@@ -56,12 +56,6 @@ type PushNotification struct {
func (a *App) sendPushNotificationSync(post *model.Post, user *model.User, channel *model.Channel, channelName string, senderName string,
explicitMention bool, channelWideMention bool, replyToThreadType string) *model.AppError {
cfg := a.Config()
message, err := utils.StripMarkdown(post.Message)
if err != nil {
mlog.Warn("Failed parse to markdown", mlog.String("post_id", post.Id), mlog.Err(err))
} else {
post.Message = message
}
msg, appErr := a.BuildPushNotificationMessage(
*cfg.EmailSettings.PushNotificationContents,
post,
......@@ -585,6 +579,12 @@ func (a *App) buildFullPushNotificationMessage(contentsConfig string, post *mode
}
postMessage := post.Message
stripped, err := utils.StripMarkdown(postMessage)
if err != nil {
mlog.Warn("Failed parse to markdown", mlog.String("post_id", post.Id), mlog.Err(err))
} else {
postMessage = stripped
}
for _, attachment := range post.Attachments() {
if attachment.Fallback != "" {
postMessage += "\n" + attachment.Fallback
......
......@@ -284,6 +284,19 @@ func (api *PluginAPI) DeletePreferencesForUser(userID string, preferences []mode
return api.app.DeletePreferences(userID, preferences)
}
func (api *PluginAPI) CreateUserAccessToken(token *model.UserAccessToken) (*model.UserAccessToken, *model.AppError) {
return api.app.CreateUserAccessToken(token)
}
func (api *PluginAPI) RevokeUserAccessToken(tokenID string) *model.AppError {
accessToken, err := api.app.GetUserAccessToken(tokenID, false)
if err != nil {
return err
}
return api.app.RevokeUserAccessToken(accessToken)
}
func (api *PluginAPI) UpdateUser(user *model.User) (*model.User, *model.AppError) {
return api.app.UpdateUser(user, true)
}
......@@ -1089,6 +1102,27 @@ func (api *PluginAPI) DeleteCommand(commandID string) error {
return nil
}
func (api *PluginAPI) CreateOAuthApp(app *model.OAuthApp) (*model.OAuthApp, *model.AppError) {
return api.app.CreateOAuthApp(app)
}
func (api *PluginAPI) GetOAuthApp(appID string) (*model.OAuthApp, *model.AppError) {
return api.app.GetOAuthApp(appID)
}
func (api *PluginAPI) UpdateOAuthApp(app *model.OAuthApp) (*model.OAuthApp, *model.AppError) {
oldApp, err := api.GetOAuthApp(app.Id)
if err != nil {
return nil, err
}
return api.app.UpdateOauthApp(oldApp, app)
}
func (api *PluginAPI) DeleteOAuthApp(appID string) *model.AppError {
return api.app.DeleteOAuthApp(appID)
}
// PublishPluginClusterEvent broadcasts a plugin event to all other running instances of
// the calling plugin.
func (api *PluginAPI) PublishPluginClusterEvent(ev model.PluginClusterEvent,
......
......@@ -1414,23 +1414,27 @@ func TestInterpluginPluginHTTP(t *testing.T) {
}
func (p *MyPlugin) ServeHTTP(c *plugin.Context, w http.ResponseWriter, r *http.Request) {
if r.URL.Path != "/api/v2/test" {
return
switch r.URL.Path {
case "/api/v2/test":
if r.URL.Query().Get("abc") != "xyz" {
return
}
if r.Header.Get("Mattermost-Plugin-ID") != "testplugininterclient" {
return
}
buf := bytes.Buffer{}
buf.ReadFrom(r.Body)
resp := "we got:" + buf.String()
w.WriteHeader(598)
w.Write([]byte(resp))
if r.URL.Path != "/api/v2/test" {
return
}
case "/nobody":
w.WriteHeader(599)
}
if r.URL.Query().Get("abc") != "xyz" {
return
}
if r.Header.Get("Mattermost-Plugin-ID") != "testplugininterclient" {
return
}
buf := bytes.Buffer{}
buf.ReadFrom(r.Body)
resp := "we got:" + buf.String()
w.WriteHeader(598)
w.Write([]byte(resp))
}
func main() {
......@@ -1474,7 +1478,26 @@ func TestInterpluginPluginHTTP(t *testing.T) {
if resp.StatusCode != 598 {
return nil, "wrong status " + string(respbody)
}
return nil, string(respbody)
if string(respbody) != "we got:This is the request" {
return nil, "wrong response " + string(respbody)
}
req, err = http.NewRequest("GET", "/testplugininterserver/nobody", nil)
if err != nil {
return nil, err.Error()
}
resp = p.API.PluginHTTP(req)
if resp == nil {
return nil, "Nil resp"
}
if resp.StatusCode != 599 {
return nil, "wrong status " + string(respbody)
}
return nil, "ok"
}
func main() {
......@@ -1498,7 +1521,7 @@ func TestInterpluginPluginHTTP(t *testing.T) {
hooks, err := th.App.GetPluginsEnvironment().HooksForPlugin("testplugininterclient")
require.NoError(t, err)
_, ret := hooks.MessageWillBePosted(nil, nil)
assert.Equal(t, "we got:This is the request", ret)
assert.Equal(t, "ok", ret)
}
func TestApiMetrics(t *testing.T) {
......
......@@ -55,6 +55,7 @@ func setupTestHelper(dbStore store.Store, enterprise bool, includeCacheLayer boo
}
*config.PluginSettings.Directory = filepath.Join(tempWorkspace, "plugins")
*config.PluginSettings.ClientDirectory = filepath.Join(tempWorkspace, "webapp")
*config.PluginSettings.AutomaticPrepackagedPlugins = false
*config.LogSettings.EnableSentry = false // disable error reporting during tests
memoryStore.Set(config)
......@@ -133,7 +134,6 @@ func setup(tb testing.TB) *TestHelper {
if testing.Short() {
tb.SkipNow()
}
tb.Skip("MM-36947")
dbStore := mainHelper.GetStore()
dbStore.DropAllTables()
dbStore.MarkSystemRanUnitTests()
......
......@@ -13,6 +13,7 @@ import (
)
func TestCreateDefaultMemberships(t *testing.T) {
t.Skip("MM-36909")
th := Setup(t).InitBasic()
defer th.TearDown()
......
......@@ -15,5 +15,7 @@ In our Docker Hub Repository we have the following images:
- `mattermost/mattermost-build-server:dec-7-2018` which is based on Go 1.11 you can use for MM versions <= `5.8.0`
- `mattermost/mattermost-build-server:feb-28-2019` which is based on Go 1.12 you can use for MM versions >= `5.9.0` <= `5.15.0`
- `mattermost/mattermost-build-server:sep-17-2019` which is based on Go 1.12.9 you can use for MM versions >= `5.16.0`
- `mattermost/mattermost-build-server:20200322_golang-1.14.1` which is based on Go 1.14.1 you can use for MM versions >= `5.24.0`
- `mattermost/mattermost-build-server:20201119_golang-1.15.5` which is based on Go 1.14.6 you can use for MM versions >= `5.26.0`
- `mattermost/mattermost-build-server:20200322_golang-1.14.1` which is based on Go 1.14.1 you can use for MM versions >= `5.24.x`
- `mattermost/mattermost-build-server:20201023_golang-1.14.6` which is based on Go 1.14.6 you can use for MM versions >= `5.25.x`
- `mattermost/mattermost-build-server:20201119_golang-1.15.5` which is based on Go 1.15.5 you can use for MM versions >= `5.26.x` to `5.37.x`
- `mattermost/mattermost-build-server:20210709_golang-1.16.5` which is based on Go 1.16.5 you can use for MM versions >= `5.38.x`
......@@ -32,7 +32,7 @@ up()
-e GOPATH="/go" \
-e MM_SQLSETTINGS_DATASOURCE="postgres://mmuser:mostest@postgres:5432/mattermost_test?sslmode=disable&connect_timeout=10" \
-e MM_SQLSETTINGS_DRIVERNAME=postgres
mattermost/mattermost-build-server:20201119_golang-1.15.5 bash
mattermost/mattermost-build-server:20210709_golang-1.16.5 bash
}
down()
......
......@@ -9245,5 +9245,37 @@
{
"id": "ent.data_retention.run_failed.error",
"translation": "Задачата по запазване на данни е неуспешна."
},
{
"id": "api.user.send_license_up_for_renewal_email.error",
"translation": "Неуспешно изпращане на ел.поща за подновяване на лиценза"
},
{
"id": "api.templates.license_up_for_renewal_title",
"translation": "Вашият абонамент за Mattermost подлежи на подновяване"
},
{
"id": "api.templates.license_up_for_renewal_subtitle_two",
"translation": "Влезте в клиентския си профил, за да подновите"
},
{
"id": "api.templates.license_up_for_renewal_subtitle",
"translation": "{{.UserName}}, абонаментът Ви изтича след {{.Days}} дни. Надяваме се, че ще се насладите на гъвкавото и сигурно екипно сътрудничество, което Mattermost позволява. Подновете абонамента си скоро, за да гарантирате, че екипът Ви ще продължи да се възползва от тези предимства."
},
{
"id": "api.templates.license_up_for_renewal_subject",
"translation": "Лицензът Ви подлежи на подновяване"
},
{
"id": "api.templates.license_up_for_renewal_renew_now",
"translation": "Поднови сега"
},
{
"id": "api.server.license_up_for_renewal.error_sending_email",
"translation": "Неуспешно изпращане на ел.поща за подновяване на лиценза"
},
{
"id": "api.server.license_up_for_renewal.error_generating_link",
"translation": "Неуспешно генериране връзката за подновяване на лиценза"
}
]
......@@ -197,7 +197,7 @@
},
{
"id": "api.channel.delete_channel.type.invalid",
"translation": "Kann Direkt- oder Gruppen-Nachrichtenkanäle nicht löschen."
"translation": "Kann Direkt- oder Gruppen-Nachrichtenkanäle nicht löschen"
},
{
"id": "api.channel.join_channel.permissions.app_error",
......@@ -357,7 +357,7 @@
},
{
"id": "api.command.invite_people.email_invitations_off",
"translation": "E-Mail-Einladungen sind deaktiviert, keine Einladung(en) versendet."
"translation": "E-Mail-Einladungen sind deaktiviert, keine Einladung(en) versendet"
},
{
"id": "api.command.invite_people.email_off",
......@@ -1263,15 +1263,15 @@
},
{
"id": "api.oauth.revoke_access_token.del_session.app_error",
"translation": "Fehler beim Löschen der Session aus der Datenbank"
"translation": "Beim Löschen der Session aus der Datenbank ist ein Fehler aufgetreten."
},
{
"id": "api.oauth.revoke_access_token.del_token.app_error",
"translation": "Fehler beim Löschen des Zugriffstokens von der Datenbank"
"translation": "Beim Löschen des Zugriffstokens aus der Datenbank ist ein Fehler aufgetreten."
},
{
"id": "api.oauth.revoke_access_token.get.app_error",
"translation": "Fehler beim Abruf des Zugriffstokens der DB vor Löschung"
"translation": "Beim Abruf des Zugriffstokens, vor der Löschung aus der Datenbank, ist ein Fehler aufgetreten."
},
{
"id": "api.oauth.singup_with_oauth.disabled.app_error",
......@@ -1279,11 +1279,11 @@
},
{
"id": "api.oauth.singup_with_oauth.expired_link.app_error",
"translation": "Der Registrierungslink ist abgelaufen"
"translation": "Der Registrierungslink ist abgelaufen."
},
{
"id": "api.oauth.singup_with_oauth.invalid_link.app_error",
"translation": "Der Einladungslink scheint nicht gültig zu sein"
"translation": "Der Einladungslink scheint nicht gültig zu sein."
},
{
"id": "api.outgoing_webhook.disabled.app_error",
......@@ -1295,7 +1295,7 @@
},
{
"id": "api.plugin.upload.file.app_error",
"translation": "Konnte Datei in multipart/form-Anfrage nicht öffnen"
"translation": "Konnte Datei in multipart/form-Anfrage nicht öffnen."
},
{
"id": "api.plugin.upload.no_file.app_error",
......@@ -1417,7 +1417,7 @@
},
{
"id": "api.post.send_notifications_and_forget.push_message",
"translation": " hat ihnen eine Nachricht geschickt."
"translation": "hat ihnen eine Nachricht geschickt."
},
{
"id": "api.post.update_post.can_not_update_post_in_deleted.error",
......@@ -1913,7 +1913,7 @@
},
{
"id": "api.templates.user_access_token_body.info",
"translation": "Ein persönliches Zugangs-Token wurde zu ihrem Konto auf {{ .SiteURL }} hinzugefügt. Dies kann zum Zugriff auf {{.SiteName}} mit ihrem Konto verwendet werden."
"translation": "Ein persönliches Zugangs-Token wurde zu ihrem Konto auf {{ .SiteURL }} hinzugefügt. Dies kann zum Zugriff auf {{.SiteName}} mit ihrem Konto verwendet werden."
},
{
"id": "api.templates.user_access_token_body.title",
......@@ -1953,7 +1953,7 @@
},
{
"id": "api.templates.welcome_body.app_download_info",
"translation": "Für das beste Erlebnis laden Sie die Apps für PC, macOS, iOS und Android herunter:"
"translation": "Für das beste Erlebnis laden Sie die Apps für PC, macOS, iOS und Android herunter."
},
{
"id": "api.templates.welcome_body.button",
......@@ -3989,7 +3989,7 @@
},
{
"id": "model.config.is_valid.rate_mem.app_error",
"translation": "Ungültige Speichergröße für Anfragenbegrenzer-Einstellungen. Muss eine positive Zahl sein."
"translation": "Ungültige Speichergröße für Anfragenbegrenzer-Einstellungen. Muss eine positive Zahl sein."
},
{
"id": "model.config.is_valid.rate_sec.app_error",
......@@ -5821,7 +5821,7 @@
},
{
"id": "api.post.check_for_out_of_channel_group_users.message.none",
"translation": "@{{.GroupName}} has no members on this team"
"translation": "@{{.GroupName}} hat in diesem Team keine Mitglieder"
},
{
"id": "api.plugin.verify_plugin.app_error",
......@@ -5853,7 +5853,7 @@
},
{
"id": "api.image.get.app_error",
"translation": "Requested image url cannot be parsed."
"translation": "Die URL des angeforderten Bilds konnte nicht verarbeitet werden."
},
{
"id": "api.context.server_busy.app_error",
......@@ -5881,7 +5881,7 @@
},
{
"id": "api.command.execute_command.format.app_error",
"translation": "Dem Wort für die Befehlsauslösung fehlt das führenden Slash-Zeichen."
"translation": "Dem Kommandowort fehlt der führende Slash."
},
{
"id": "api.channel.update_team_member_roles.changing_guest_role.app_error",
......@@ -5965,7 +5965,7 @@
},
{
"id": "api.bot.set_bot_icon_image.open.app_error",
"translation": "Konnte Bilddatei nicht öffnen"
"translation": "Konnte Bilddatei nicht öffnen."
},
{
"id": "api.bot.set_bot_icon_image.no_file.app_error",
......@@ -6189,7 +6189,7 @@
},
{
"id": "api.channel.move_channel.type.invalid",
"translation": "Konnte Direkt- oder Gruppen-Nachrichtenkanäle nicht löschen."
"translation": "Konnte Direkt- oder Gruppen-Nachrichtenkanäle nicht löschen"
},
{
"id": "ent.get_users_in_channel_during",
......@@ -6309,7 +6309,7 @@
},
{
"id": "api.templates.warn_metric_ack.body.site_url_header",
"translation": "Seiten-URL:"
"translation": "Seiten-URL: "
},
{
"id": "api.templates.warn_metric_ack.body.registered_users_header",
......@@ -6317,7 +6317,7 @@
},
{
"id": "api.templates.warn_metric_ack.body.contact_email_header",
"translation": "E-Mail:"
"translation": "E-Mail: "
},
{
"id": "app.webhooks.update_outgoing.app_error",
......@@ -6653,7 +6653,7 @@
},
{
"id": "api.server.warn_metric.mfa.notification_title",
"translation": "Multi-Faktor-Authentifizierung erzwingen:"
"translation": "Multi-Faktor-Authentifizierung erzwingen"
},
{
"id": "ent.elasticsearch.post.get_posts_batch_for_indexing.error",
......@@ -7669,5 +7669,165 @@
{
"id": "api.admin.add_certificate.parseform.app_error",
"translation": "Fehler beim Analysieren einer Multiform-Anfrage"
},
{
"id": "api.server.warn_metric.mfa.start_trial.notification_body",
"translation": "Ihr Mattermost System hat Multi-Faktor Authentifizierung aktiviert, was Benutzern die Möglichkeit gibt ihre Konten mit über das Passwort hinausgehende Authentifizierung abzusichern. Um die Sicherheit im gesamten System zu erhöhen, können Sie bei alle Konten Multi-Faktor Authentifizierung erzwingen.\n\n[Lernen mehr über erzwungene Multi-Faktor Authentifizierung] (https://www.mattermost.com/docs-multi-factor-authentication/?utm_medium=product&utm_source=mattermost-advisor-bot&utm_content=multi-factor-authentication). \n\nDurch Anklicken von Starte Test, stimme ich dem [Mattermost Software Evaluation Agreement](https://mattermost.com/software-evaluation-agreement/), der [Datenschutzrichtinie](https://mattermost.com/privacy-policy/) und dem Empfang von Produkt-Emails zu."
},
{
"id": "api.server.warn_metric.mfa.notification_body",
"translation": "Ihr Mattermost System hat Multi-Faktor Authentifizierung aktiviert, was Benutzern die Möglichkeit gibt ihre Konten mit über das Passwort hinausgehende Authentifizierung abzusichern. Um die Sicherheit im gesamten System zu erhöhen, können Sie bei alle Konten Multi-Faktor Authentifizierung erzwingen.\n\n[Lernen mehr über erzwungene Multi-Faktor Authentifizierung] (https://www.mattermost.com/docs-multi-factor-authentication/?utm_medium=product&utm_source=mattermost-advisor-bot&utm_content=multi-factor-authentication). \n\nDurch das Anklicken von Kontaktieren Sie Uns, teilen Sie Daten mit Mattermost, Inc. [Erfahren Sie mehr](https://mattermost.com/pl/default-admin-advisory)"
},
{
"id": "api.server.warn_metric.mfa.contact_us.email_body",
"translation": "Mattermost Kontaktieren Sie uns Anfrage. Ich bin daran interessiert mehr über erzwungene Multi-Faktor Authentifizierung zu erfahren.\n"
},
{
"id": "api.server.warn_metric.email_us",
"translation": "Sende Sie uns eine Email"
},
{
"id": "api.server.warn_metric.email_domain.start_trial_notification_success.message",
"translation": "Ihre Enterprise Test ist jetzt aktiv. Gehen Sie zu **System Konsole > Authentifizierung > Gastzugang** um Gastkonten zu aktivieren."
},
{
"id": "api.server.warn_metric.email_domain.start_trial.notification_body",
"translation": "Projekte involvieren häufig Personen innerhalb und außerhalb einer Organisation. Mit Gastkonten können Sie externe Partner in ihr Mattermost System einbinden und festlegen, mit wem diese arbeiten und was diese sehen dürfen.\n\n[Lernen Sie mehr über das Aktivieren von Gastkonten](https://www.mattermost.com/docs-guest-accounts/?utm_medium=product&utm_source=mattermost-advisor-bot&utm_content=guest-accounts).\n\nDurch Anklicken von Starte Test, stimme ich dem [Mattermost Software Evaluation Agreement](https://mattermost.com/software-evaluation-agreement/), der [Datenschutzrichtinie](https://mattermost.com/privacy-policy/) und dem Empfang von Produkt-Emails zu."
},
{
"id": "api.server.warn_metric.email_domain.notification_title",
"translation": "Erzeuge Gastkonten"
},
{
"id": "api.server.warn_metric.email_domain.notification_body",
"translation": "Projekte involvieren häufig Personen innerhalb und außerhalb einer Organisation. Mit Gastkonten können Sie externe Partner in ihr Mattermost System einbinden und festlegen, mit wem diese arbeiten und was diese sehen dürfen.\n\n[Lernen Sie mehr über das Aktivieren von Gastkonten](https://www.mattermost.com/docs-guest-accounts/?utm_medium=product&utm_source=mattermost-advisor-bot&utm_content=guest-accounts).\n\nDurch das Anklicken von Kontaktieren Sie Uns, teilen Sie Daten mit Mattermost, Inc. [Erfahren Sie mehr](https://mattermost.com/pl/default-admin-advisory)"
},
{
"id": "api.server.warn_metric.email_domain.contact_us.email_body",
"translation": "Mattermost kontaktieren Anfrage. Ich bin daran interessiert, mehr über Gastkonten zu erfahren.\n"
},
{
"id": "api.server.warn_metric.contacting_us",
"translation": "Kontaktiert uns"
},
{
"id": "api.server.warn_metric.contact_us",
"translation": "Kontaktieren Sie uns"
},
{
"id": "api.server.warn_metric.bot_response.start_trial_failure.message",
"translation": "Testlizenz konnte nicht empfangen werden. Besuchen Sie https://mattermost.com/trial/ um eine Lizenz anzufragen."
},
{
"id": "api.server.warn_metric.bot_response.notification_success.message",
"translation": "Danke, dass Sie Mattermost kontaktiert habe. Wir setzen uns ins Kürze mit Ihnen in Verbindung."
},
{
"id": "api.server.warn_metric.bot_response.notification_failure.message",
"translation": "Nachricht konnte nicht gesendet werden."
},
{
"id": "api.server.warn_metric.bot_response.notification_failure.body",
"translation": "Bitte senden Sie uns eine Email."
},
{
"id": "api.server.warn_metric.bot_response.mailto_subject",
"translation": "Kontaktiere Mattermost Anfrage"
},
{
"id": "api.server.warn_metric.bot_response.mailto_site_url_header",
"translation": "Seiten URL: {{.SiteUrl}}"
},
{
"id": "api.server.warn_metric.bot_response.mailto_registered_users_header",
"translation": "Gesamte aktive Benutzer: {{.NoRegisteredUsers}}"
},
{
"id": "api.server.warn_metric.bot_response.mailto_footer",
"translation": "Wenn Sie weitere Anliegen haben, kontaktieren Sie bitte support@mattermost.com"
},
{
"id": "api.server.warn_metric.bot_response.mailto_contact_header",
"translation": "Kontakt: {{.Contact}}"
},
{
"id": "api.roles.patch_roles.not_allowed_permission.error",
"translation": "Eine oder mehrere der folgenden Berechtigungen, die Sie versuchen hinzuzufügen oder zu löschen, sind nicht erlaubt"
},
{
"id": "api.remote_cluster.update_not_unique.app_error",
"translation": "Eine sichere Verbindung mit der gleichen URL existiert schon."
},
{
"id": "api.remote_cluster.update.app_error",
"translation": "Bei Aktualisieren der sicheren Verbindung trat ein Fehler auf."
},
{
"id": "api.remote_cluster.service_not_enabled.app_error",
"translation": "Der \"Remote Cluster Dienst\" ist nicht aktiviert."
},
{
"id": "api.remote_cluster.save_not_unique.app_error",
"translation": "Die sichere Verbindung wurde bereits hinzugefügt."
},
{
"id": "api.remote_cluster.save.app_error",
"translation": "Beim Speichern der sicheren Verbindung trat ein Fehler auf."
},
{
"id": "api.remote_cluster.get.app_error",
"translation": "Beim Empfangen einer sichern Verbindung trat ein Fehler auf."
},
{
"id": "api.remote_cluster.delete.app_error",
"translation": "Beim Löschen der sicheren Verbindung trat ein Fehler auf."
},
{
"id": "api.push_notifications.session.expired",
"translation": "Sitzung abgelaufen: Bitte anmelden um weiter Nachrichten zu erhalten. Sitzungen für {{.siteName}} sind vom System Adminstrator so konfiguriert, dass sie alle {{.daysCount}} Tage ablaufen."
},
{
"id": "api.server.warn_metric.number_of_active_users_200.start_trial.notification_success.message",
"translation": "Ihre Enterprise Test ist jetzt aktiv. Gehen Sie zu **System Konsole > Authentifizierung > SAML 2.0** um Ihren SAML 2.0 Provider zu integrieren."
},
{
"id": "api.server.warn_metric.number_of_active_users_200.start_trial.notification_body",
"translation": "Ihr Mattermost System hat jetzt 200 Benutzer. Wenn Sie Mattermost an den Single-Sign-On Provider Ihrer Organisation anbinden, können Benutzer auf Mattermost zugreifen, ohne ihre Anmeldeinformationen erneut einzugeben. Wir empfehlen, dass Sie ihren SAML 2.0 Provider in Ihren Mattermost Server integrieren. [Lerne mehr über die SAML 2.0 Integration] (https://www.mattermost.com/docs-saml/?utm_medium=product&utm_source=mattermost-advisor-bot&utm_content=saml).\n\nDurch Anklicken von Starte Test, stimme ich dem [Mattermost Software Evaluation Agreement](https://mattermost.com/software-evaluation-agreement/), der [Datenschutzrichtinie](https://mattermost.com/privacy-policy/) und dem Empfang von Produkt-Emails zu."
},
{
"id": "api.server.warn_metric.number_of_active_users_200.notification_title",
"translation": "Skalieren mit Mattermost"
},
{