Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

  1. We wanted it somewhere in the system console. After brief discussion with the integrations team, it was mentioned that plugins currently can render a custom React component for a plugin’s settings but that is as much modifying they can do in the system console. There is currently no structured way to do any more modifying and would require creative thinking “creative thinking” as mentioned by integrations.

  2. We noticed that we already have a commercial support link in the dropdown in the hamburger menu of the system console which leads you the a generic Mattermost support webpage. It was decided that we like to improve upon this even further by adding a modal for licensed customers (customers with E10 and E20 licenses) which allows them to download the support packet.

...

Code Block
languagego
type SupportPacket struct {
        ServerOS string `yaml:"server_os"`
        DatabaseType string `yaml:"database_type"`
        DatabaseVersion string `yaml:"database_version"`
        LdapVendorName string   `yaml:"ldap_vendor_name,omitempty"`
        LdapVendorVersion string   `yaml:"ldap_vendor_version,omitempty"`
        ElasticServerVersion string   `yaml:"elastic_server_version,omitempty"`
        ElasticServerPlugins string[]   `yaml:"elastic_server_plugins,omitempty"`
}

More information on the Go YAML library we use today can be found here gopkg.in/yaml.v2

plugins.json

Code Block
languagejson
{
	"active": [

	],
	"inactive": [{
		"id": "antivirus",
		"name": "Antivirus",
		"description": "Antivirus plugin for scanning uploaded files.",
		"version": "0.1.2",
		"server": {
			"executables": {
				"linux-amd64": "server/dist/plugin-linux-amd64",
				"darwin-amd64": "server/dist/plugin-darwin-amd64",
				"windows-amd64": "server/dist/plugin-windows-amd64.exe"
			},
			"executable": ""
		},
		"settings_schema": {
			"header": "Antivirus plugin for scanning uploaded files to Mattermost, uses ClamAV to scan files. See [documentation here](https://github.com/mattermost/mattermost-plugin-antivirus)",
			"footer": "",
			"settings": [{
					"key": "ClamavHostPort",
					"display_name": "ClamAV - Host and Port",
					"type": "text",
					"help_text": "The hostname and port to connect to clamd",
					"placeholder": "localhost:3310",
					"default": "localhost:3310"
				},
				{
					"key": "ScanTimeoutSeconds",
					"display_name": "Scan Timeout (seconds)",
					"type": "number",
					"help_text": "How long the virus scan can take before giving up.",
					"placeholder": "10",
					"default": 10
				}
			]
		}
	}]
}

...

Code Block
languagejson
{
	"ServiceSettings": {
		"SiteURL": "http://localhost:8065",
		"WebsocketURL": null,
		"LicenseFileLocation": null,
		"ListenAddress": ":8065",
		"ConnectionSecurity": "",
		"TLSCertFile": "",
		"TLSKeyFile": "",
		"TLSMinVer": null,
		"TLSStrictTransport": null,
		"TLSStrictTransportMaxAge": null,
		"TLSOverwriteCiphers": null,
		"UseLetsEncrypt": false,
		"LetsEncryptCertificateCacheFile": "./config/letsencrypt.cache",
		"Forward80To443": false,
		"TrustedProxyIPHeader": null,
		"ReadTimeout": 300,
		"WriteTimeout": 300,
		"IdleTimeout": null,
		"MaximumLoginAttempts": 10,
		"GoroutineHealthThreshold": null,
		"GoogleDeveloperKey": "",
		"EnableOAuthServiceProvider": false,
		"EnableIncomingWebhooks": true,
		"EnableOutgoingWebhooks": true,
		"EnableCommands": true,
		"EnableOnlyAdminIntegrations": null,
		"EnablePostUsernameOverride": false,
		"EnablePostIconOverride": false,
		"EnableLinkPreviews": false,
		"EnableTesting": false,
		"EnableDeveloper": true,
		"EnableOpenTracing": null,
		"EnableSecurityFixAlert": true,
		"EnableInsecureOutgoingConnections": false,
		"AllowedUntrustedInternalConnections": "localhost,",
		"EnableMultifactorAuthentication": false,
		"EnforceMultifactorAuthentication": false,
		"EnableUserAccessTokens": false,
		"AllowCorsFrom": "",
		"CorsExposedHeaders": "",
		"CorsAllowCredentials": false,
		"CorsDebug": false,
		"AllowCookiesForSubdomains": null,
		"ExtendSessionLengthWithActivity": true,
		"SessionLengthWebInDays": 30,
		"SessionLengthMobileInDays": 30,
		"SessionLengthSSOInDays": 30,
		"SessionCacheInMinutes": 10,
		"SessionIdleTimeoutInMinutes": 43200,
		"WebsocketSecurePort": null,
		"WebsocketPort": null,
		"WebserverMode": "gzip",
		"EnableCustomEmoji": false,
		"EnableEmojiPicker": true,
		"EnableGifPicker": false,
		"GfycatApiKey": "2_KtH_W5",
		"GfycatApiSecret": "********************************",
		"RestrictCustomEmojiCreation": null,
		"RestrictPostDelete": null,
		"AllowEditPost": null,
		"PostEditTimeLimit": -1,
		"TimeBetweenUserTypingUpdatesMilliseconds": null,
		"EnablePostSearch": null,
		"MinimumHashtagLength": 3,
		"EnableUserTypingMessages": null,
		"EnableChannelViewedMessages": null,
		"EnableUserStatuses": null,
		"ExperimentalEnableAuthenticationTransfer": null,
		"ClusterLogTimeoutMilliseconds": null,
		"CloseUnusedDirectMessages": null,
		"EnablePreviewFeatures": null,
		"EnableTutorial": null,
		"ExperimentalEnableDefaultChannelLeaveJoinMessages": null,
		"ExperimentalGroupUnreadChannels": null,
		"ExperimentalChannelOrganization": null,
		"ExperimentalChannelSidebarOrganization": null,
		"ImageProxyType": null,
		"ImageProxyURL": null,
		"ImageProxyOptions": null,
		"EnableAPITeamDeletion": null,
		"EnableAPIUserDeletion": null,
		"ExperimentalEnableHardenedMode": null,
		"DisableLegacyMFA": null,
		"ExperimentalStrictCSRFEnforcement": null,
		"EnableEmailInvitations": true,
		"DisableBotsWhenOwnerIsDeactivated": true,
		"EnableBotAccountCreation": true,
		"EnableSVGs": true,
		"EnableLatex": false,
		"EnableAPIChannelDeletion": null,
		"EnableLocalMode": null,
		"LocalModeSocketLocation": null,
		"EnableAWSMetering": null,
		"SplitKey": "********************************",
		"FeatureFlagSyncIntervalSeconds": 30,
		"DebugSplit": false,
		"ThreadAutoFollow": null,
		"CollapsedThreads": null,
		"ManagedResourcePaths": ""
	},
	"TeamSettings": {
		"SiteName": "Mattermost",
		"MaxUsersPerTeam": 100,
		"EnableTeamCreation": null,
		"EnableUserCreation": true,
		"EnableOpenServer": true,
		"EnableUserDeactivation": null,
		"RestrictCreationToDomains": "",
		"EnableCustomBrand": false,
		"CustomBrandText": "",
		"CustomDescriptionText": "",
		"RestrictDirectMessage": "any",
		"RestrictTeamInvite": null,
		"RestrictPublicChannelManagement": null,
		"RestrictPrivateChannelManagement": null,
		"RestrictPublicChannelCreation": null,
		"RestrictPrivateChannelCreation": null,
		"RestrictPublicChannelDeletion": null,
		"RestrictPrivateChannelDeletion": null,
		"RestrictPrivateChannelManageMembers": null,
		"EnableXToLeaveChannelsFromLHS": null,
		"UserStatusAwayTimeout": null,
		"MaxChannelsPerTeam": 2000,
		"MaxNotificationsPerChannel": 1000000,
		"EnableConfirmNotificationsToChannel": true,
		"TeammateNameDisplay": "username",
		"ExperimentalViewArchivedChannels": false,
		"ExperimentalEnableAutomaticReplies": null,
		"ExperimentalHideTownSquareinLHS": null,
		"ExperimentalTownSquareIsReadOnly": null,
		"LockTeammateNameDisplay": false,
		"ExperimentalPrimaryTeam": null,
		"ExperimentalDefaultChannels": null
	},
	"SqlSettings": {
		"DriverName": "postgres",
		"DataSource": "********************************",
		"DataSourceReplicas": [],
		"DataSourceSearchReplicas": [],
		"MaxIdleConns": 20,
		"ConnMaxLifetimeMilliseconds": 3600000,
		"MaxOpenConns": 300,
		"Trace": false,
		"AtRestEncryptKey": "********************************",
		"QueryTimeout": 30,
		"DisableDatabaseSearch": false
	},
	"FileSettings": {
		"EnableFileAttachments": true,
		"EnableMobileUpload": true,
		"EnableMobileDownload": true,
		"MaxFileSize": 52428800,
		"DriverName": "local",
		"Directory": "./data/",
		"EnablePublicLink": false,
		"PublicLinkSalt": "********************************",
		"InitialFont": "nunito-bold.ttf",
		"AmazonS3AccessKeyId": "",
		"AmazonS3SecretAccessKey": "",
		"AmazonS3Bucket": "",
		"AmazonS3PathPrefix": "",
		"AmazonS3Region": "",
		"AmazonS3Endpoint": "s3.amazonaws.com",
		"AmazonS3SSL": true,
		"AmazonS3SignV2": false,
		"AmazonS3SSE": false,
		"AmazonS3Trace": false
	},
	"EmailSettings": {
		"EnableSignUpWithEmail": true,
		"EnableSignInWithEmail": true,
		"EnableSignInWithUsername": true,
		"SendEmailNotifications": true,
		"UseChannelInEmailNotifications": null,
		"RequireEmailVerification": false,
		"FeedbackName": "",
		"FeedbackEmail": "test@example.com",
		"ReplyToAddress": "test@example.com",
		"FeedbackOrganization": "",
		"EnableSMTPAuth": true,
		"SMTPUsername": "",
		"SMTPPassword": "********************************",
		"SMTPServer": "localhost",
		"SMTPPort": "10025",
		"SMTPServerTimeout": null,
		"ConnectionSecurity": "",
		"SendPushNotifications": true,
		"PushNotificationServer": "https://push-test.mattermost.com",
		"PushNotificationContents": "generic",
		"PushNotificationBuffer": null,
		"EnableEmailBatching": false,
		"EmailBatchingBufferSize": null,
		"EmailBatchingInterval": null,
		"EnablePreviewModeBanner": true,
		"SkipServerCertificateVerification": false,
		"EmailNotificationContentsType": "full",
		"LoginButtonColor": null,
		"LoginButtonBorderColor": null,
		"LoginButtonTextColor": null
	},
	"RateLimitSettings": {
		"Enable": false,
		"PerSec": 10,
		"MaxBurst": 100,
		"MemoryStoreSize": 10000,
		"VaryByRemoteAddr": true,
		"VaryByUser": false,
		"VaryByHeader": ""
	},
	"PrivacySettings": {
		"ShowEmailAddress": true,
		"ShowFullName": true
	},
	"AnnouncementSettings": {
		"EnableBanner": false,
		"BannerText": "",
		"BannerColor": "#f2a93b",
		"BannerTextColor": "#333333",
		"AllowBannerDismissal": true,
		"AdminNoticesEnabled": false,
		"UserNoticesEnabled": false,
		"NoticesURL": "https://notices.mattermost.com/",
		"NoticesFetchFrequency": 3600,
		"NoticesSkipCache": false
	},
	"ThemeSettings": {
		"EnableThemeSelection": null,
		"DefaultTheme": null,
		"AllowCustomThemes": null,
		"AllowedThemes": null
	},
	"GitLabSettings": {
		"Enable": false,
		"Secret": "",
		"Id": "",
		"Scope": "",
		"AuthEndpoint": "",
		"TokenEndpoint": "",
		"UserApiEndpoint": "",
		"DiscoveryEndpoint": "",
		"ButtonText": "",
		"ButtonColor": ""
	},
	"GoogleSettings": {
		"Enable": false,
		"Secret": "",
		"Id": "",
		"Scope": "profile email",
		"AuthEndpoint": "https://accounts.google.com/o/oauth2/v2/auth",
		"TokenEndpoint": "https://www.googleapis.com/oauth2/v4/token",
		"UserApiEndpoint": "https://people.googleapis.com/v1/people/me?personFields=names,emailAddresses,nicknames,metadata",
		"DiscoveryEndpoint": "https://accounts.google.com/.well-known/openid-configuration",
		"ButtonText": "",
		"ButtonColor": ""
	},
	"OpenIdSettings": {
		"Enable": false,
		"Secret": "",
		"Id": "",
		"Scope": "profile openid email",
		"AuthEndpoint": "",
		"TokenEndpoint": "",
		"UserApiEndpoint": "",
		"DiscoveryEndpoint": "",
		"ButtonText": "",
		"ButtonColor": "#145DBF"
	},
	"LdapSettings": {
		"Enable": true,
		"EnableSync": false,
		"LdapServer": "localhost",
		"LdapPort": 389,
		"ConnectionSecurity": "",
		"BaseDN": "dc=mm,dc=test,dc=com",
		"BindUsername": "cn=admin,dc=mm,dc=test,dc=com",
		"BindPassword": "********************************",
		"UserFilter": "",
		"GroupFilter": "",
		"GuestFilter": "",
		"EnableAdminFilter": null,
		"AdminFilter": null,
		"GroupDisplayNameAttribute": "cn",
		"GroupIdAttribute": "entryUUID",
		"FirstNameAttribute": "cn",
		"LastNameAttribute": "sn",
		"EmailAttribute": "mail",
		"UsernameAttribute": "uid",
		"NicknameAttribute": "cn",
		"IdAttribute": "uid",
		"PositionAttribute": "sAMAccountType",
		"LoginIdAttribute": "uid",
		"PictureAttribute": "",
		"SyncIntervalMinutes": 10000,
		"SkipCertificateVerification": false,
		"PublicCertificateFile": "",
		"PrivateKeyFile": "",
		"QueryTimeout": 60,
		"MaxPageSize": 500,
		"LoginFieldName": "",
		"LoginButtonColor": "#0000",
		"LoginButtonBorderColor": "#2389D7",
		"LoginButtonTextColor": "#2389D7",
		"Trace": false
	},
    ...
}

...

Here, I will be discussing how we will retrieve the information seen in the support_packet.yaml

Server OS:

In golang, we can use runtime.GOOS to get the operating system which the server is running on.

...