Some checks failed
Server CI / Postgres (shard 0) (push) Has been skipped
Server CI / Postgres (shard 3) (push) Has been skipped
BuildEnv Docker Image / build-image (push) Failing after 4s
BuildEnv Docker Image / build-image-fips (push) Failing after 4s
Migration Review & Release Notes / Generate migration review & release notes (push) Failing after 3s
Server CI / Build Environment (push) Failing after 3s
Server CI / Postgres (shard 1) (push) Has been skipped
Tools CI / check-style (mattermost-govet) (push) Failing after 4s
Server CI / Postgres (shard 2) (push) Has been skipped
Tools CI / check-style (mmgotool) (push) Failing after 3s
Server CI / Elasticsearch v8 Compatibility (push) Has been skipped
Server CI / OpenSearch v2 Compatibility (push) Has been skipped
Server CI / Postgres FIPS (shard 0) (push) Has been skipped
Tools CI / Test (mattermost-govet) (push) Failing after 3s
Server CI / Postgres FIPS (shard 1) (push) Has been skipped
Server CI / Postgres FIPS (shard 2) (push) Has been skipped
Tools CI / Test (mmgotool) (push) Failing after 3s
Server CI / Postgres FIPS (shard 3) (push) Has been skipped
Server CI / Run mmctl tests (push) Has been skipped
Server CI / Run mmctl tests (FIPS) (push) Has been skipped
Server CI / Merge Postgres Test Results (push) Has been skipped
Server CI / Merge Postgres FIPS Test Results (push) Has been skipped
Server CI / Check backport migrations (push) Has been skipped
Server CI / Check generated files (push) Has been skipped
Server CI / check-style (push) Has been skipped
Server CI / Vet API (push) Has been skipped
Server CI / Build mattermost server app (push) Has been skipped
Server CI / Server CI Complete (push) Failing after 2s
Server CI / Server CI Artifacts (push) Has been skipped
Server CI / Sentry Upload (push) Has been skipped
Server CI / Server CI Report (push) Failing after 5m1s
Server CI Nightly Race / Race Detector (push) Has been skipped
CodeQL / Analyze (go) (push) Has been cancelled
CodeQL / Analyze (javascript) (push) Has been cancelled
Webapp CI Cache Warm / Warm Webapp node_modules Cache (push) Has been cancelled
E2E CI Cache Warm / Warm E2E npm Registry Cache (push) Has been cancelled
API / build (push) Has been cancelled
Web App CI / check-types (push) Has been cancelled
Web App CI / check-lint (push) Has been cancelled
Web App CI / check-i18n (push) Has been cancelled
Web App CI / check-external-links (push) Has been cancelled
Web App CI / test (platform) (push) Has been cancelled
Web App CI / test (mattermost-redux) (push) Has been cancelled
Web App CI / test (channels shard 1/4) (push) Has been cancelled
Web App CI / test (channels shard 2/4) (push) Has been cancelled
Web App CI / test (channels shard 3/4) (push) Has been cancelled
Web App CI / test (channels shard 4/4) (push) Has been cancelled
Web App CI / upload-coverage (push) Has been cancelled
Web App CI / build (push) Has been cancelled
YAML Lint / yamllint (push) Has been cancelled
Push mirrored docker images / cd/Push mirrored docker images (push) Has been cancelled
docs-cd / Build and deploy docs (push) Has been cancelled
Docs CI / build (push) Has been cancelled
E2E Cache Warm: Cypress deps / Warm Cypress deps cache (push) Has been cancelled
Scorecards supply-chain security / Scorecard analysis (push) Has been cancelled
Server CI Weekly / Postgres FIPS (push) Has been skipped
Server CI Weekly / Run mmctl tests (FIPS) (push) Has been skipped
Server CI Weekly / Postgres with binary parameters (push) Has been skipped
Server CI Weekly / Build Environment (push) Failing after 1s
Server CI Cache Warm / Warm Go Module and Build Cache (push) Failing after 2s
Server CI Nightly Race / Build Environment (push) Failing after 1s
109 lines
3.8 KiB
Go
109 lines
3.8 KiB
Go
package pluginapi
|
|
|
|
import (
|
|
"github.com/mattermost/mattermost/server/public/model"
|
|
)
|
|
|
|
// IsEnterpriseLicensedOrDevelopment returns true when the server is licensed with any Mattermost
|
|
// Enterprise License, or has `EnableDeveloper` and `EnableTesting` configuration settings
|
|
// enabled signaling a non-production, developer mode.
|
|
func IsEnterpriseLicensedOrDevelopment(config *model.Config, license *model.License) bool {
|
|
if license != nil {
|
|
return true
|
|
}
|
|
|
|
return IsConfiguredForDevelopment(config)
|
|
}
|
|
|
|
// isValidSkuShortName returns whether the SKU short name is one of the known strings;
|
|
// namely: E10 or professional, or E20 or enterprise
|
|
func isValidSkuShortName(license *model.License) bool {
|
|
if license == nil {
|
|
return false
|
|
}
|
|
|
|
switch license.SkuShortName {
|
|
case model.LicenseShortSkuE10, model.LicenseShortSkuE20, model.LicenseShortSkuProfessional, model.LicenseShortSkuEnterprise, model.LicenseShortSkuEnterpriseAdvanced:
|
|
return true
|
|
default:
|
|
return false
|
|
}
|
|
}
|
|
|
|
// IsE10LicensedOrDevelopment returns true when the server is at least licensed with a legacy Mattermost
|
|
// Enterprise E10 License or a Mattermost Professional License, or has `EnableDeveloper` and
|
|
// `EnableTesting` configuration settings enabled, signaling a non-production, developer mode.
|
|
func IsE10LicensedOrDevelopment(config *model.Config, license *model.License) bool {
|
|
if model.MinimumProfessionalLicense(license) {
|
|
return true
|
|
}
|
|
|
|
if !isValidSkuShortName(license) {
|
|
// As a fallback for licenses whose SKU short name is unknown, make a best effort to try
|
|
// and use the presence of a known E10/Professional feature as a check to determine licensing.
|
|
if license != nil &&
|
|
license.Features != nil &&
|
|
license.Features.LDAP != nil &&
|
|
*license.Features.LDAP {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return IsConfiguredForDevelopment(config)
|
|
}
|
|
|
|
// IsE20LicensedOrDevelopment returns true when the server is licensed with a legacy Mattermost
|
|
// Enterprise E20 License or a Mattermost Enterprise License, or has `EnableDeveloper` and
|
|
// `EnableTesting` configuration settings enabled, signaling a non-production, developer mode.
|
|
func IsE20LicensedOrDevelopment(config *model.Config, license *model.License) bool {
|
|
if model.MinimumEnterpriseLicense(license) {
|
|
return true
|
|
}
|
|
|
|
if !isValidSkuShortName(license) {
|
|
// As a fallback for licenses whose SKU short name is unknown, make a best effort to try
|
|
// and use the presence of a known E20/Enterprise feature as a check to determine licensing.
|
|
if license != nil &&
|
|
license.Features != nil &&
|
|
license.Features.FutureFeatures != nil &&
|
|
*license.Features.FutureFeatures {
|
|
return true
|
|
}
|
|
}
|
|
|
|
return IsConfiguredForDevelopment(config)
|
|
}
|
|
|
|
// IsEnterpriseAdvancedLicensedOrDevelopment returns true when the server is licensed with a Mattermost
|
|
// Enterprise Advanced License, or has `EnableDeveloper` and `EnableTesting` configuration settings
|
|
func IsEnterpriseAdvancedLicensedOrDevelopment(config *model.Config, license *model.License) bool {
|
|
if license != nil && license.SkuShortName == model.LicenseShortSkuEnterpriseAdvanced {
|
|
return true
|
|
}
|
|
|
|
return IsConfiguredForDevelopment(config)
|
|
}
|
|
|
|
// IsConfiguredForDevelopment returns true when the server has `EnableDeveloper` and `EnableTesting`
|
|
// configuration settings enabled, signaling a non-production, developer mode.
|
|
func IsConfiguredForDevelopment(config *model.Config) bool {
|
|
if config != nil &&
|
|
config.ServiceSettings.EnableTesting != nil &&
|
|
*config.ServiceSettings.EnableTesting &&
|
|
config.ServiceSettings.EnableDeveloper != nil &&
|
|
*config.ServiceSettings.EnableDeveloper {
|
|
return true
|
|
}
|
|
|
|
return false
|
|
}
|
|
|
|
// IsCloud returns true when the server is on cloud, and false otherwise.
|
|
func IsCloud(license *model.License) bool {
|
|
if license == nil || license.Features == nil || license.Features.Cloud == nil {
|
|
return false
|
|
}
|
|
|
|
return *license.Features.Cloud
|
|
}
|