...
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.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 | ||
---|---|---|
| ||
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 | ||
---|---|---|
| ||
{ "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 | ||
---|---|---|
| ||
{ "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.
...
Regarding debug level, check to see if their out logs to file is enabled and if the file log levels is set to debug. If not, then let’s show the message
Before downloading the support packet, set Output Logs to File to true and set File Log Level to DEBUG [here]. Afterwards, please recreate the issue with these settings before submitting.
as seen in the design to encourage them to enable it and set it to debug and try to recreate their issue to provide us with the most amount of information.
...