mirror of
https://github.com/mattermost/mattermost.git
synced 2026-02-16 00:58:36 -05:00
* Remove legacy quoteColumnName() utility Since Mattermost only supports PostgreSQL, the quoteColumnName() helper that was designed to handle database-specific column quoting is no longer needed. The function was a no-op that simply returned the column name unchanged. Remove the function from utils.go and update status_store.go to use the "Manual" column name directly. * Remove legacy driver checks from store.go Since Mattermost only supports PostgreSQL, remove conditional checks for different database drivers: - Simplify specialSearchChars() to always return PostgreSQL-compatible chars - Remove driver check from computeBinaryParam() - Remove driver check from computeDefaultTextSearchConfig() - Simplify GetDbVersion() to use PostgreSQL syntax directly - Remove switch statement from ensureMinimumDBVersion() - Remove unused driver parameter from versionString() * Remove MySQL alternatives for batch delete operations Since Mattermost only supports PostgreSQL, remove the MySQL-specific DELETE...LIMIT syntax and keep only the PostgreSQL array-based approach: - reaction_store.go: Use PostgreSQL array syntax for PermanentDeleteBatch - file_info_store.go: Use PostgreSQL array syntax for PermanentDeleteBatch - preference_store.go: Use PostgreSQL tuple IN subquery for DeleteInvalidVisibleDmsGms * Remove MySQL alternatives for UPDATE...FROM syntax Since Mattermost only supports PostgreSQL, remove the MySQL-specific UPDATE syntax that joins tables differently: - thread_store.go: Use PostgreSQL UPDATE...FROM syntax in MarkAllAsReadByChannels and MarkAllAsReadByTeam - post_store.go: Use PostgreSQL UPDATE...FROM syntax in deleteThreadFiles * Remove MySQL alternatives for JSON and subquery operations Since Mattermost only supports PostgreSQL, remove the MySQL-specific JSON and subquery syntax: - thread_store.go: Use PostgreSQL JSONB operators for updating participants - access_control_policy_store.go: Use PostgreSQL JSONB @> operator for querying JSON imports - session_store.go: Use PostgreSQL subquery syntax for Cleanup - job_store.go: Use PostgreSQL subquery syntax for Cleanup * Remove MySQL alternatives for CTE queries Since Mattermost only supports PostgreSQL, simplify code that uses CTEs (Common Table Expressions): - channel_store.go: Remove MySQL CASE-based fallback in UpdateLastViewedAt and use PostgreSQL CTE exclusively - draft_store.go: Remove driver checks in DeleteEmptyDraftsByCreateAtAndUserId, DeleteOrphanDraftsByCreateAtAndUserId, and determineMaxDraftSize * Remove driver checks in migrate.go and schema_dump.go Simplify migration code to use PostgreSQL driver directly since PostgreSQL is the only supported database. * Remove driver checks in sqlx_wrapper.go Always apply lowercase named parameter transformation since PostgreSQL is the only supported database. * Remove driver checks in user_store.go Simplify user store functions to use PostgreSQL-only code paths: - Remove isPostgreSQL parameter from helper functions - Use LEFT JOIN pattern instead of subqueries for bot filtering - Always use case-insensitive LIKE with lower() for search - Remove MySQL-specific role filtering alternatives * Remove driver checks in post_store.go Simplify post_store.go to use PostgreSQL-only code paths: - Inline getParentsPostsPostgreSQL into getParentsPosts - Use PostgreSQL TO_CHAR/TO_TIMESTAMP for date formatting in analytics - Use PostgreSQL array syntax for batch deletes - Simplify determineMaxPostSize to always use information_schema - Use PostgreSQL jsonb subtraction for thread participants - Always execute RefreshPostStats (PostgreSQL materialized views) - Use materialized views for AnalyticsPostCountsByDay - Simplify AnalyticsPostCountByTeam to always use countByTeam * Remove driver checks in channel_store.go Simplify channel_store.go to use PostgreSQL-only code paths: - Always use sq.Dollar.ReplacePlaceholders for UNION queries - Use PostgreSQL LEFT JOIN for retention policy exclusion - Use PostgreSQL jsonb @> operator for access control policy imports - Simplify buildLIKEClause to always use LOWER() for case-insensitive search - Simplify buildFulltextClauseX to always use PostgreSQL to_tsvector/to_tsquery - Simplify searchGroupChannelsQuery to use ARRAY_TO_STRING/ARRAY_AGG * Remove driver checks in file_info_store.go Simplify file_info_store.go to use PostgreSQL-only code paths: - Always use PostgreSQL to_tsvector/to_tsquery for file search - Use file_stats materialized view for CountAll() - Use file_stats materialized view for GetStorageUsage() when not including deleted - Always execute RefreshFileStats() for materialized view refresh * Remove driver checks in attributes_store.go Simplify attributes_store.go to use PostgreSQL-only code paths: - Always execute RefreshAttributes() for materialized view refresh - Remove isPostgreSQL parameter from generateSearchQueryForExpression - Always use PostgreSQL LOWER() LIKE LOWER() syntax for case-insensitive search * Remove driver checks in retention_policy_store.go Simplify retention_policy_store.go to use PostgreSQL-only code paths: - Remove isPostgres parameter from scanRetentionIdsForDeletion - Always use pq.Array for scanning retention IDs - Always use pq.Array for inserting retention IDs - Remove unused json import * Remove driver checks in property stores Simplify property_field_store.go and property_value_store.go to use PostgreSQL-only code paths: - Always use PostgreSQL type casts (::text, ::jsonb, ::bigint, etc.) - Remove isPostgres variable and conditionals * Remove driver checks in channel_member_history_store.go Simplify PermanentDeleteBatch to use PostgreSQL-only code path: - Always use ctid-based subquery for DELETE with LIMIT * Remove remaining driver checks in user_store.go Simplify user_store.go to use PostgreSQL-only code paths: - Use LEFT JOIN for bot exclusion in AnalyticsActiveCountForPeriod - Use LEFT JOIN for bot exclusion in IsEmpty * Simplify fulltext search by consolidating buildFulltextClause functions Remove convertMySQLFullTextColumnsToPostgres and consolidate buildFulltextClause and buildFulltextClauseX into a single function that takes variadic column arguments and returns sq.Sqlizer. * Simplify SQL stores leveraging PostgreSQL-only support - Simplify UpdateMembersRole in channel_store.go and team_store.go to use UPDATE...RETURNING instead of SELECT + UPDATE - Simplify GetPostReminders in post_store.go to use DELETE...RETURNING - Simplify DeleteOrphanedRows queries by removing MySQL workarounds for subquery locking issues - Simplify UpdateUserLastSyncAt to use UPDATE...FROM...RETURNING instead of fetching user first then updating - Remove MySQL index hint workarounds in ORDER BY clauses - Update outdated comments referencing MySQL - Consolidate buildFulltextClause and remove convertMySQLFullTextColumnsToPostgres * Remove MySQL-specific test artifacts - Delete unused MySQLStopWords variable and stop_word.go file - Remove redundant testSearchEmailAddressesWithQuotes test (already covered by testSearchEmailAddresses) - Update comment that referenced MySQL query planning * Remove MySQL references from server code outside sqlstore - Update config example and DSN parsing docs to reflect PostgreSQL-only support - Remove mysql:// scheme check from IsDatabaseDSN - Simplify SanitizeDataSource to only handle PostgreSQL - Remove outdated MySQL comments from model and plugin code * Remove MySQL references from test files - Update test DSNs to use PostgreSQL format - Remove dead mysql-replica flag and replicaFlag variable - Simplify tests that had MySQL/PostgreSQL branches * Update docs and test config to use PostgreSQL - Update mmctl config set example to use postgres driver - Update test-config.json to use PostgreSQL DSN format * Remove MySQL migration scripts, test data, and docker image Delete MySQL-related files that are no longer needed: - ESR upgrade scripts (esr.*.mysql.*.sql) - MySQL schema dumps (mattermost-mysql-*.sql) - MySQL replication test scripts (replica-*.sh, mysql-migration-test.sh) - MySQL test warmup data (mysql_migration_warmup.sql) - MySQL docker image reference from mirror-docker-images.json * Remove MySQL references from webapp - Simplify minimumHashtagLength description to remove MySQL-specific configuration note - Remove unused HIDE_MYSQL_STATS_NOTIFICATION preference constant - Update en.json i18n source file * clean up e2e-tests * rm server/tests/template.load * Use teamMemberSliceColumns() in UpdateMembersRole RETURNING clause Refactor to use the existing helper function instead of hardcoding the column names, ensuring consistency if the columns are updated. * u.id -> u.Id * address code review feedback --------- Co-authored-by: Mattermost Build <build@mattermost.com>
386 lines
12 KiB
JSON
386 lines
12 KiB
JSON
{
|
|
"ServiceSettings": {
|
|
"SiteURL": "",
|
|
"WebsocketURL": "",
|
|
"LicenseFileLocation": "",
|
|
"ListenAddress": ":8065",
|
|
"ConnectionSecurity": "",
|
|
"TLSCertFile": "",
|
|
"TLSKeyFile": "",
|
|
"UseLetsEncrypt": false,
|
|
"LetsEncryptCertificateCacheFile": "./config/letsencrypt.cache",
|
|
"Forward80To443": false,
|
|
"ReadTimeout": 300,
|
|
"WriteTimeout": 300,
|
|
"MaximumLoginAttempts": 10,
|
|
"GoroutineHealthThreshold": -1,
|
|
"GoogleDeveloperKey": "",
|
|
"EnableOAuthServiceProvider": false,
|
|
"EnableIncomingWebhooks": true,
|
|
"EnableOutgoingWebhooks": true,
|
|
"EnableCommands": true,
|
|
"EnablePostUsernameOverride": false,
|
|
"EnablePostIconOverride": false,
|
|
"EnableLinkPreviews": false,
|
|
"EnablePermalinkPreviews": false,
|
|
"EnableTesting": false,
|
|
"EnableDeveloper": false,
|
|
"EnableSecurityFixAlert": true,
|
|
"EnableInsecureOutgoingConnections": false,
|
|
"AllowedUntrustedInternalConnections": "",
|
|
"EnableMultifactorAuthentication": false,
|
|
"EnforceMultifactorAuthentication": false,
|
|
"EnableUserAccessTokens": false,
|
|
"AllowCorsFrom": "",
|
|
"AllowCookiesForSubdomains": false,
|
|
"ExtendSessionLengthWithActivity": true,
|
|
"SessionLengthWebInDays": 30,
|
|
"SessionLengthMobileInDays": 30,
|
|
"SessionLengthSSOInDays": -1,
|
|
"SessionLengthSSOInHours": 720,
|
|
"SessionCacheInMinutes": 10,
|
|
"SessionIdleTimeoutInMinutes": 0,
|
|
"WebsocketSecurePort": 443,
|
|
"WebsocketPort": 80,
|
|
"WebserverMode": "gzip",
|
|
"EnableCustomEmoji": false,
|
|
"EnableEmojiPicker": true,
|
|
"PostEditTimeLimit": -1,
|
|
"TimeBetweenUserTypingUpdatesMilliseconds": 5000,
|
|
"EnableCrossTeamSearch": true,
|
|
"EnablePostSearch": true,
|
|
"MinimumHashtagLength": 3,
|
|
"EnableUserTypingMessages": true,
|
|
"EnableChannelViewedMessages": true,
|
|
"EnableUserStatuses": true,
|
|
"ExperimentalEnableAuthenticationTransfer": true,
|
|
"ClusterLogTimeoutMilliseconds": 2000,
|
|
"EnableTutorial": true,
|
|
"EnableOnboardingFlow": true,
|
|
"ExperimentalEnableDefaultChannelLeaveJoinMessages": true,
|
|
"ExperimentalGroupUnreadChannels": "disabled",
|
|
"EnableAPITeamDeletion": false,
|
|
"EnableAPITriggerAdminNotifications": false,
|
|
"ExperimentalEnableHardenedMode": false
|
|
},
|
|
"TeamSettings": {
|
|
"SiteName": "Mattermost",
|
|
"MaxUsersPerTeam": 50,
|
|
"EnableUserCreation": true,
|
|
"EnableOpenServer": false,
|
|
"EnableUserDeactivation": false,
|
|
"RestrictCreationToDomains": "",
|
|
"EnableCustomBrand": false,
|
|
"CustomBrandText": "",
|
|
"CustomDescriptionText": "",
|
|
"RestrictDirectMessage": "any",
|
|
"UserStatusAwayTimeout": 300,
|
|
"MaxChannelsPerTeam": 2000,
|
|
"MaxNotificationsPerChannel": 1000,
|
|
"EnableConfirmNotificationsToChannel": true,
|
|
"TeammateNameDisplay": "username",
|
|
"ExperimentalEnableAutomaticReplies": false,
|
|
"ExperimentalPrimaryTeam": ""
|
|
},
|
|
"ClientRequirements": {
|
|
"AndroidLatestVersion": "",
|
|
"AndroidMinVersion": "",
|
|
"IosLatestVersion": "",
|
|
"IosMinVersion": ""
|
|
},
|
|
"SqlSettings": {
|
|
"DriverName": "postgres",
|
|
"DataSource": "postgres://mmuser:mostest@localhost:5432/mattermost_test?sslmode=disable\u0026connect_timeout=10",
|
|
"DataSourceReplicas": [],
|
|
"DataSourceSearchReplicas": [],
|
|
"Trace": false,
|
|
"AtRestEncryptKey": "jdh9iergmse3w9mt53snasugmmi9r6it",
|
|
"QueryTimeout": 30
|
|
},
|
|
"LogSettings": {
|
|
"EnableConsole": true,
|
|
"ConsoleLevel": "DEBUG",
|
|
"ConsoleJson": true,
|
|
"EnableFile": true,
|
|
"FileLevel": "INFO",
|
|
"FileJson": true,
|
|
"FileLocation": "",
|
|
"EnableWebhookDebugging": true,
|
|
"EnableDiagnostics": true
|
|
},
|
|
"PasswordSettings": {
|
|
"MinimumLength": 5,
|
|
"Lowercase": false,
|
|
"Number": false,
|
|
"Uppercase": false,
|
|
"Symbol": false,
|
|
"EnableForgotLink": true
|
|
},
|
|
"FileSettings": {
|
|
"EnableFileAttachments": true,
|
|
"EnableMobileUpload": true,
|
|
"EnableMobileDownload": true,
|
|
"MaxFileSize": 52428800,
|
|
"MaxImageResolution": 33177600,
|
|
"DriverName": "local",
|
|
"Directory": "./data/",
|
|
"EnablePublicLink": false,
|
|
"PublicLinkSalt": "3xh7ztscuezjp1jkdjybtejrtw59xjt1",
|
|
"InitialFont": "luximbi.ttf",
|
|
"AmazonS3AccessKeyId": "",
|
|
"AmazonS3SecretAccessKey": "",
|
|
"AmazonS3Bucket": "",
|
|
"AmazonS3Region": "",
|
|
"AmazonS3Endpoint": "s3.amazonaws.com",
|
|
"AmazonS3SSL": true,
|
|
"AmazonS3SignV2": false,
|
|
"AmazonS3SSE": false,
|
|
"AmazonS3Trace": false,
|
|
"AmazonS3StorageClass": ""
|
|
},
|
|
"EmailSettings": {
|
|
"EnableSignUpWithEmail": true,
|
|
"EnableSignInWithEmail": true,
|
|
"EnableSignInWithUsername": true,
|
|
"SendEmailNotifications": true,
|
|
"UseChannelInEmailNotifications": false,
|
|
"RequireEmailVerification": false,
|
|
"FeedbackName": "",
|
|
"FeedbackEmail": "test@example.com",
|
|
"ReplyToAddress": "test@example.com",
|
|
"FeedbackOrganization": "",
|
|
"EnableSMTPAuth": false,
|
|
"SMTPUsername": "",
|
|
"SMTPPassword": "",
|
|
"SMTPServer": "localhost",
|
|
"SMTPPort": "2500",
|
|
"ConnectionSecurity": "",
|
|
"SendPushNotifications": false,
|
|
"PushNotificationServer": "",
|
|
"PushNotificationContents": "generic",
|
|
"EnableEmailBatching": false,
|
|
"EmailBatchingBufferSize": 256,
|
|
"EmailBatchingInterval": 30,
|
|
"EnablePreviewModeBanner": true,
|
|
"SkipServerCertificateVerification": false,
|
|
"EmailNotificationContentsType": "full",
|
|
"LoginButtonColor": "",
|
|
"LoginButtonBorderColor": "",
|
|
"LoginButtonTextColor": ""
|
|
},
|
|
"RateLimitSettings": {
|
|
"Enable": false,
|
|
"PerSec": 10,
|
|
"MaxBurst": 100,
|
|
"MemoryStoreSize": 10000,
|
|
"VaryByRemoteAddr": true,
|
|
"VaryByUser": false,
|
|
"VaryByHeader": ""
|
|
},
|
|
"PrivacySettings": {
|
|
"ShowEmailAddress": true,
|
|
"ShowFullName": true
|
|
},
|
|
"SupportSettings": {
|
|
"TermsOfServiceLink": "https://mattermost.com/pl/terms-of-use/",
|
|
"PrivacyPolicyLink": "https://mattermost.com/pl/privacy-policy/",
|
|
"AboutLink": "https://mattermost.com/default-about/",
|
|
"HelpLink": "https://mattermost.com/pl/help/",
|
|
"ReportAProblemLink": "https://mattermost.com/pl/report-a-bug",
|
|
"ReportAProblemType": "link",
|
|
"ForgotPasswordLink": "",
|
|
"SupportEmail": "feedback@mattermost.com"
|
|
},
|
|
"AnnouncementSettings": {
|
|
"EnableBanner": false,
|
|
"BannerText": "",
|
|
"BannerColor": "#f2a93b",
|
|
"BannerTextColor": "#333333",
|
|
"AllowBannerDismissal": true
|
|
},
|
|
"ThemeSettings": {
|
|
"EnableThemeSelection": true,
|
|
"DefaultTheme": "default",
|
|
"AllowCustomThemes": true,
|
|
"AllowedThemes": []
|
|
},
|
|
"GitLabSettings": {
|
|
"Enable": false,
|
|
"Secret": "",
|
|
"Id": "",
|
|
"Scope": "",
|
|
"AuthEndpoint": "",
|
|
"TokenEndpoint": "",
|
|
"UserApiEndpoint": ""
|
|
},
|
|
"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"
|
|
},
|
|
"Office365Settings": {
|
|
"Enable": false,
|
|
"Secret": "",
|
|
"Id": "",
|
|
"Scope": "User.Read",
|
|
"AuthEndpoint": "https://login.microsoftonline.com/common/oauth2/v2.0/authorize",
|
|
"TokenEndpoint": "https://login.microsoftonline.com/common/oauth2/v2.0/token",
|
|
"UserApiEndpoint": "https://graph.microsoft.com/v1.0/me",
|
|
"DirectoryId": ""
|
|
},
|
|
"LdapSettings": {
|
|
"Enable": false,
|
|
"EnableSync": false,
|
|
"LdapServer": "",
|
|
"LdapPort": 389,
|
|
"ConnectionSecurity": "",
|
|
"BaseDN": "",
|
|
"BindUsername": "",
|
|
"BindPassword": "",
|
|
"UserFilter": "",
|
|
"FirstNameAttribute": "",
|
|
"LastNameAttribute": "",
|
|
"EmailAttribute": "",
|
|
"UsernameAttribute": "",
|
|
"NicknameAttribute": "",
|
|
"IdAttribute": "",
|
|
"PositionAttribute": "",
|
|
"LoginIdAttribute": "",
|
|
"SyncIntervalMinutes": 60,
|
|
"SkipCertificateVerification": false,
|
|
"QueryTimeout": 60,
|
|
"MaxPageSize": 0,
|
|
"LoginFieldName": "",
|
|
"LoginButtonColor": "",
|
|
"LoginButtonBorderColor": "",
|
|
"LoginButtonTextColor": ""
|
|
},
|
|
"ComplianceSettings": {
|
|
"Enable": false,
|
|
"Directory": "./data/",
|
|
"EnableDaily": false
|
|
},
|
|
"LocalizationSettings": {
|
|
"DefaultServerLocale": "en",
|
|
"DefaultClientLocale": "en",
|
|
"AvailableLocales": ""
|
|
},
|
|
"SamlSettings": {
|
|
"Enable": false,
|
|
"EnableSyncWithLdap": false,
|
|
"Verify": true,
|
|
"Encrypt": true,
|
|
"IdpUrl": "",
|
|
"IdpDescriptorUrl": "",
|
|
"IdpMetadataUrl": "",
|
|
"AssertionConsumerServiceURL": "",
|
|
"ScopingIDPProviderId": "",
|
|
"ScopingIDPName": "",
|
|
"IdpCertificateFile": "",
|
|
"PublicCertificateFile": "",
|
|
"PrivateKeyFile": "",
|
|
"FirstNameAttribute": "",
|
|
"LastNameAttribute": "",
|
|
"EmailAttribute": "",
|
|
"UsernameAttribute": "",
|
|
"NicknameAttribute": "",
|
|
"LocaleAttribute": "",
|
|
"PositionAttribute": "",
|
|
"LoginButtonText": "With SAML",
|
|
"LoginButtonColor": "",
|
|
"LoginButtonBorderColor": "",
|
|
"LoginButtonTextColor": ""
|
|
},
|
|
"NativeAppSettings": {
|
|
"AppDownloadLink": "https://mattermost.com/download/",
|
|
"AndroidAppDownloadLink": "https://mattermost.com/pl/android-app/",
|
|
"IosAppDownloadLink": "https://mattermost.com/pl/ios-app/"
|
|
},
|
|
"ClusterSettings": {
|
|
"Enable": false,
|
|
"ClusterName": "",
|
|
"OverrideHostname": "",
|
|
"UseIPAddress": true,
|
|
"UseExperimentalGossip": true,
|
|
"ReadOnlyConfig": true,
|
|
"GossipPort": 8074
|
|
},
|
|
"MetricsSettings": {
|
|
"Enable": false,
|
|
"BlockProfileRate": 0,
|
|
"ListenAddress": ":8067"
|
|
},
|
|
"ExperimentalSettings": {
|
|
},
|
|
"AnalyticsSettings": {
|
|
"MaxUsersForStatistics": 2500
|
|
},
|
|
"ElasticsearchSettings": {
|
|
"ConnectionUrl": "http://localhost:9200",
|
|
"Backend": "elasticsearch",
|
|
"Username": "elastic",
|
|
"Password": "changeme",
|
|
"EnableIndexing": false,
|
|
"EnableSearching": false,
|
|
"EnableAutocomplete": false,
|
|
"Sniff": true,
|
|
"PostIndexReplicas": 1,
|
|
"PostIndexShards": 1,
|
|
"ChannelIndexReplicas": 1,
|
|
"ChannelIndexShards": 1,
|
|
"UserIndexReplicas": 1,
|
|
"UserIndexShards": 1,
|
|
"AggregatePostsAfterDays": 365,
|
|
"PostsAggregatorJobStartTime": "03:00",
|
|
"IndexPrefix": "",
|
|
"LiveIndexingBatchSize": 1,
|
|
"BatchSize": 10000,
|
|
"RequestTimeoutSeconds": 30
|
|
},
|
|
"DataRetentionSettings": {
|
|
"EnableMessageDeletion": false,
|
|
"EnableFileDeletion": false,
|
|
"MessageRetentionDays": 365,
|
|
"FileRetentionDays": 365,
|
|
"DeletionJobStartTime": "02:00"
|
|
},
|
|
"MessageExportSettings": {
|
|
"EnableExport": false,
|
|
"ExportFormat": "actiance",
|
|
"DailyRunTime": "01:00",
|
|
"ExportFromTimestamp": 0,
|
|
"BatchSize": 10000,
|
|
"GlobalRelaySettings": {
|
|
"CustomerType": "A9",
|
|
"SMTPUsername": "",
|
|
"SMTPPassword": "",
|
|
"EmailAddress": ""
|
|
}
|
|
},
|
|
"JobSettings": {
|
|
"RunJobs": true,
|
|
"RunScheduler": true
|
|
},
|
|
"PluginSettings": {
|
|
"Enable": true,
|
|
"EnableUploads": true,
|
|
"Directory": "./test-plugins",
|
|
"ClientDirectory": "./test-client-plugins",
|
|
"Plugins": {},
|
|
"PluginStates": {
|
|
"jira": {
|
|
"Enable": true
|
|
},
|
|
"testplugin": {
|
|
"Enable": false
|
|
}
|
|
}
|
|
},
|
|
"DisplaySettings": {
|
|
"CustomUrlSchemes": []
|
|
}
|
|
}
|