Files
mattermost/tools
0ef9b7bf52 Improve license error message for wrong service environment (#37198)
* [MM-64634] Improve license error for wrong service environment

When a cryptographically valid license is uploaded to a server running a
different service environment (e.g. a production license on a test/dev
server, or vice versa), ValidateLicense now retries verification against
the alternate environment's public key. On success it returns a distinct
error that callers surface as the new WrongEnvironmentLicenseError, giving
admins an actionable message instead of the generic "Invalid license file."

Genuinely corrupt licenses still return the existing InvalidLicenseError.

Co-authored-by: mattermost-code <matty-code@mattermost.com>

* [MM-64634] Add tests for wrong-environment license error mapping

Cover SaveLicense (the System Console upload entry point) returning
WrongEnvironmentLicenseError for a license signed for another service
environment, and add a direct unit test for NewLicenseValidationAppError.

Co-authored-by: mattermost-code <matty-code@mattermost.com>

* Add audit logging for wrong-environment license upload failures

Handle WrongEnvironmentLicenseError in addLicense and localAddLicense
so environment mismatches are logged distinctly instead of falling
through to the generic unable-to-save message.

Co-authored-by: mattermost-code <matty-code@mattermost.com>

* Log wrong-environment audit in LicenseFromBytes error path

addLicense validates the license before SaveLicense, so
WrongEnvironmentLicenseError is returned from LicenseFromBytes and
never reaches the SaveLicense audit handler.

Co-authored-by: mattermost-code <matty-code@mattermost.com>

* Address PR feedback: remove license validation audit logging from addLicense

Per review feedback, the per-error-id audit logging added to the
LicenseFromBytes failure path in addLicense doesn't belong in the audit
logs. Remove it to clean up the diff; the AppError is still returned to
the caller unchanged.

Resolves: 1 change request

* Remove wrong-environment license audit logging

Per review feedback, the wrong-environment license classification does not
belong in the audit logs. Revert the audit logging additions in both the
cloud and local license upload handlers.

* Split wrong-environment license error by direction

Per review feedback, distinguish between a production license uploaded to a
test/dev server and a test/dev license uploaded to a production server. Each
case now maps to its own AppError ID and user-facing message instead of a
single generic wrong-environment error.

* Restrict wrong-environment license fallback to signature failures

Only treat alternate-key verification success as a wrong-environment
mismatch when the primary key failed with rsa.ErrVerification. Other
primary-key failures (e.g. malformed key material) are now surfaced
unchanged instead of being masked as a wrong-environment license, and
non-verification errors from the alternate-key check are no longer
discarded.

* Regenerate store layers and mocks for SessionStore

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: mattermost-code <matty-code@mattermost.com>
Co-authored-by: Mattermost Build <build@mattermost.com>
2026-07-07 23:18:00 +02:00
..

Tools

This directory aims to provide a set of tools that simplify and enhance various development tasks. This README file serves as a guide to help you understand the directory, features of these tools, and how to get started using it. This is a collection of utilities and scripts designed to streamline common development tasks for Mattermost. These tools aim to help automate repetitive tasks and improve productivity.

Included tools

  • mattermost-govet: custom Go vet analyzers enforcing Mattermost-specific code conventions (structured logging, error handling, SQL safety, etc.). Used by make vet in the server.
  • mmgotool: is a CLI to help with i18n related checks for the mattermost/server development.
  • sharedchannel-test: integration test tool that validates shared channel synchronization (posts, reactions, membership) between two real Mattermost server instances.

Installation & Usage

mmgotool

To install mmgotool, simply run the following command: go install github.com/mattermost/mattermost/tools/mmgotool

Make sure you have the necessary prerequisites such as Go compiler.

mmgotool i18n has following subcommands described below:

  • check: Check translations
  • check-empty-src: Check for empty translation source strings
  • clean-empty: Clean empty translations
  • extract: Extract translations

sharedchannel-test

Stands up two Mattermost Enterprise instances, creates a remote cluster connection, and runs integration tests for shared channel synchronization (membership, posts, reactions).

Prerequisites:

  • make start-docker (Postgres and friends running)
  • Enterprise repo present at ../../enterprise
  • An enterprise license file

Usage:

# Managed mode (builds server, starts/stops both instances automatically)
cd tools/sharedchannel-test
go run . --license /path/to/license.mattermost-license --server-dir ../../server

# External mode (connect to already-running instances)
go run . --license /path/to/license.mattermost-license --manage=false \
  --server-a http://localhost:9065 --server-b http://localhost:9066