[pull] master from mattermost:master#721
Merged
Merged
Conversation
…#36321) * Add SAML connectivity status to support packet diagnostics Co-authored-by: Ben Schumacher <hanzei@users.noreply.github.com> * Fix SAML diagnostics tests for config validation Co-authored-by: Ben Schumacher <hanzei@users.noreply.github.com> * Add enterprise SAML diagnostics hook for support packet Co-authored-by: Ben Schumacher <hanzei@users.noreply.github.com> * Cleanup * Fix SAML support packet tests to use enterprise mock interface Tests were expecting the platform layer to perform HTTP metadata URL checks directly, but that logic belongs in the enterprise SAML diagnostic implementation. Updated tests to install a mock enterprise interface (matching the existing pattern in the override test) instead of relying on bare HTTP calls that only work without the enterprise interface registered. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * Simplify SamlDiagnosticInterface to return error instead of (string, string) The status return was always either StatusOk or StatusFail, which maps directly to nil/non-nil error. Removing the redundant status string makes the interface idiomatic Go and lets the call site derive status from error presence. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> * lint fix --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Ben Schumacher <hanzei@users.noreply.github.com> Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
… 3 (MM-68681) (#36512) * Fix: Global Threads shows 1 quick reaction emoji instead of 3 (MM-68681) When posts are viewed in the Global Threads full-width view, the hover toolbar was incorrectly showing only 1 quick reaction emoji instead of 3. Root cause: In post/index.tsx, the isExpanded prop (which controls whether the toolbar shows 3 or 1 emojis) was derived only from state.views.rhs.isSidebarExpanded. When navigating to Global Threads, suppressRHS is dispatched (setting state.views.rhsSuppressed = true), but isSidebarExpanded remains false. Since posts in the thread viewer use RHS_ROOT/RHS_COMMENT locations (not CENTER), and the #sidebar-right element is suppressed (width = 0), the showMoreReactions check in post_options.tsx always fell through to showing only 1 emoji. Fix: Include state.views.rhsSuppressed in the isExpanded computation so that when the RHS is suppressed (i.e., we are in a full-width context like Global Threads or Drafts), the toolbar correctly renders 3 quick reaction emojis. Tests: Added post_options.test.tsx with 4 unit tests verifying: - CENTER location → 3 emojis (existing behavior) - RHS_ROOT + isExpanded=false → 1 emoji (narrow RHS, existing behavior) - RHS_ROOT + isExpanded=true → 3 emojis (expanded RHS or Global Threads) - RHS_COMMENT + isExpanded=true → 3 emojis Co-authored-by: Miguel de la Cruz <mgdelacroix@users.noreply.github.com> * Refactor: use getIsGlobalThreadsView selector instead of rhsSuppressed (MM-68681) Replace the broad state.views.rhsSuppressed check (which also fires for the Drafts view) with a precise getIsGlobalThreadsView() selector that reads the already-existing state.views.lhs.currentStaticPageId field. When global_threads.tsx mounts it dispatches selectLhsItem(LhsItemType.Page, LhsPage.Threads) which sets currentStaticPageId to LhsPage.Threads ('threads'). This is the existing, canonical signal that the Global Threads full-width view is active; the selector wraps it with a name that conveys intent directly. Changes: - selectors/lhs.ts: add getIsGlobalThreadsView() — returns true iff state.views.lhs.currentStaticPageId === LhsPage.Threads - selectors/lhs.test.ts: 3 new tests covering Threads, Drafts, and empty page - post/index.tsx: import getIsGlobalThreadsView and use it in isExpanded - post_options.test.tsx: update test description to match new mechanism Co-authored-by: Miguel de la Cruz <mgdelacroix@users.noreply.github.com> * Fix tests: use renderWithContext + real component tree, not jest.mock The previous post_options.test.tsx used jest.mock() to replace PostRecentReactions, DotMenu, and several other components. That pattern is not established in this codebase — post_component.test.tsx and post_reaction.test.tsx both exercise the real connected component tree via renderWithContext with a partial Redux state. Rewrite to match: - Drop all jest.mock() calls for child components. - Provide minimal Redux state (roles with ADD_REACTION + user with system_user role) so that ChannelPermissionGate lets the emoji buttons render — the same pattern used in post_reaction.test.tsx. - Use proper SystemEmoji shaped objects (with short_name) as recentEmojis so that getEmojiName() does not crash. - Assert on the real rendered emoji buttons (data-testid= 'post-menu__item_emoji') rather than a mocked prop capture. Co-authored-by: Miguel de la Cruz <mgdelacroix@users.noreply.github.com> * Remove selector comment; add e2e test for Global Threads quick reactions (MM-68681) - selectors/lhs.ts: remove JSDoc block from getIsGlobalThreadsView; the name is self-explanatory and the comment was narrating the code. - emoji_recently_used_spec.js: * Add group tag @collapsed_reply_threads (test now requires CRT config). * Add MM-T4261_3: verifies that hovering a post in the Global Threads full-width panel shows 3 quick reaction emojis, matching the center channel and unlike the narrow RHS sidebar which shows 1. * Add GLOBAL_THREADS case to validateQuickReactions helper (uses rhsPost id prefix, numReactions=3). Co-authored-by: Miguel de la Cruz <mgdelacroix@users.noreply.github.com> * Fix lint: correct import order in post_options.test.tsx and post/index.tsx - post_options.test.tsx: move @mattermost/types/emojis type import before mattermost-redux/constants; add missing blank line between import groups. - post/index.tsx: move selectors/lhs import before selectors/posts (alphabetical order within the selectors/* group). Co-authored-by: Miguel de la Cruz <mgdelacroix@users.noreply.github.com> * Fix types: use correct EmojiCategory value 'people-body' not 'people' Co-authored-by: Miguel de la Cruz <mgdelacroix@users.noreply.github.com> * Remove dead RHS_EXPANDED branch from validateQuickReactions helper No call site ever passes 'RHS_EXPANDED' to validateQuickReactions — the branch was unreachable. Keep only the 'GLOBAL_THREADS' case that the new MM-T4261_3 test actually exercises. Co-authored-by: Miguel de la Cruz <mgdelacroix@users.noreply.github.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Miguel de la Cruz <mgdelacroix@users.noreply.github.com>
* Fix MM-57406: prevent IPv6 hex segments from parsing as emoji Add word-boundary lookbehind and lookahead to EMOJI_PATTERN so a :name: token is only matched when neither side abuts an alphanumeric/underscore. Without this, hex runs in IPv6 addresses (e.g. :beef: in 2001:18:1:beef::/64) were tokenized and rendered as custom emoji. The new semantics align with the server parser at server/public/shared/markdown/emoji.go. Bump the webapp babel safari target from 16.2 to 16.4 since regex lookbehind is a syntax feature and is not lowered by @babel/preset-env. The actual supported minimum is well above 16.4, so the previous target was stale. Add regression tests for the IPv6 case and guardrail tests for back-to-back, paren-wrapped, and punctuation-terminated emoji. Update the existing asdf:goat:asdf:dash:asdf test to reflect the new (server-aligned) semantics. * Dedupe word-char class in EMOJI_PATTERN Use \w in the lookarounds and inside the name matcher ([\w+-]) so the word-char set is expressed once instead of being repeated as two slightly different literal character classes. Same set, same semantics; addresses review feedback on PR #36541. --------- Co-authored-by: Miguel de la Cruz <miguel@ctrlz.es>
#36451) * [MM-68577] Add OAuth2/OpenID Connect provider status to support packet Probe configured GitLab, Google, Office365, and OpenID providers and report their connectivity status in the support packet diagnostics. For providers with a DiscoveryEndpoint, the probe verifies a valid OIDC discovery document (JSON with an "issuer" field) is returned; otherwise it probes the TokenEndpoint host, treating any HTTP response as reachable since token endpoints reject GETs. Disabled providers report status: disabled, enabled providers report ok or fail with the underlying error. No secrets are read or transmitted; only public endpoint URLs are probed. * [MM-68577] Drain response body in probeOAuthTokenEndpoint Closing resp.Body without first reading it leaves unread bytes on the wire, which prevents net/http from returning the underlying TCP connection to the idle pool for keep-alive reuse. Drain with io.Copy + io.LimitReader (1MB cap to bound a misbehaving server) and use defer for the close. * [MM-68577] Extract drainAndCloseBody helper for HTTP probe responses Three call sites in this file (probeOIDCDiscovery, probeOAuthTokenEndpoint, testPushProxyConnection) now share the same drain-then-close idiom needed to keep TCP connections eligible for keep-alive reuse. Replace the inline copies with a single drainAndCloseBody helper that bounds the discard at 1 MiB to limit exposure to a misbehaving server. Also fixes the same un-drained Close() bug in the pre-existing testPushProxyConnection while we're here. * Add comment explaining 1 MiB discovery response size cap Addresses review feedback asking for clarity on the 1<<20 limit.
* Fix content flagging update for unloaded posts Co-authored-by: mattermost-code <matty-code@mattermost.com> * Strengthen content flagging reducer tests Co-authored-by: mattermost-code <matty-code@mattermost.com> * Guard content flagging reducer updates Co-authored-by: mattermost-code <matty-code@mattermost.com> * Add non-array content flagging reducer test Co-authored-by: mattermost-code <matty-code@mattermost.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: mattermost-code <matty-code@mattermost.com>
* Add support packet DB diagnostics for pool and pg_stat
Co-authored-by: Ben Schumacher <hanzei@users.noreply.github.com>
* Fix support packet mock store for new DB diagnostics
Co-authored-by: Ben Schumacher <hanzei@users.noreply.github.com>
* Add context timeouts to support packet pg diagnostics
Co-authored-by: Ben Schumacher <hanzei@users.noreply.github.com>
* Move support packet DB diagnostics queries into sqlstore
Co-authored-by: Ben Schumacher <hanzei@users.noreply.github.com>
* Fix support packet diagnostics lint and partial data handling
Co-authored-by: Ben Schumacher <hanzei@users.noreply.github.com>
* Stabilize support packet pool idle assertion
Co-authored-by: Ben Schumacher <hanzei@users.noreply.github.com>
* Relax live support packet DB counter assertions
Co-authored-by: Ben Schumacher <hanzei@users.noreply.github.com>
* Fix deterministic pool diagnostics test wiring
Co-authored-by: Ben Schumacher <hanzei@users.noreply.github.com>
* Mock support packet diagnostics in app test store
Co-authored-by: Ben Schumacher <hanzei@users.noreply.github.com>
* Move SupportPacketDatabaseDiagnostics out of public model
The struct is an internal store→platform transport (no yaml tags, never
serialized directly) so it doesn't belong in server/public/model where
it would form a public API contract for plugins. Move it into the store
package as the natural return type of GetSupportPacketDatabaseDiagnostics.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Describe SupportPacketDatabaseDiagnostics by content, not history
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* wording
* Align store diagnostics with sqlstore conventions
- Rename Store.GetSupportPacketDatabaseDiagnostics to Store.GetDiagnostics
and rename the holding files to diagnostics{,_test}.go.
- Drop the queryRowScanner / rowScanner / sqlQueryRowScanner test seam.
The collectors now use the sqlxDBWrapper master handle and bind result
rows into local structs via sqlx GetContext, matching how the rest of
the sqlstore package talks to Postgres.
- Replace the hand-rolled mock-based unit tests for the Postgres
collector with an integration test driven through StoreTest, the
pattern used by the other sqlstore tests (e.g. schema_dump_test.go).
The pure pool-stats unit test (TestApplyDBPoolStats) is kept.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Drop MasterDBStats/ReplicaDBStats from the Store interface
After GetDiagnostics moved into the store layer, no caller outside the
sqlstore package itself reads MasterDBStats/ReplicaDBStats through the
Store interface — the diagnostics collector calls them on the concrete
*SqlStore receiver. Remove them from the interface, the retry/timer
layer wrappers, the storetest fake, and the generated mock; drop the
now-redundant fixedDBStatsStore shim methods and mock setups in the
support packet tests.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Rename SupportPacketDatabaseDiagnostics to DatabaseDiagnostics
Now that the type lives in the store package and is returned by
Store.GetDiagnostics, the SupportPacket prefix is just legacy framing —
support packets are one consumer of the data, not its identity. Rename
to store.DatabaseDiagnostics for consistency with the package and method
name.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Inline diagnostics SQL into the collector functions
Each pg_stat query has a single caller, so a package-level constant just
adds indirection between the function and the SQL it owns. Move the
query strings to local consts inside the collectors that use them.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Fix Connectios typo to Connections
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
* Fix sqlstore diagnostics build: call GetMaster().DB() method
The recent rebase brought in a change that turned the SqlStore DB
field into a method, so passing ss.GetMaster().DB to
collectPostgresDatabaseDiagnostics (which expects *sqlx.DB) no longer
compiles. Call the method instead.
* Fix gofmt alignment in SupportPacketDiagnostics
The post-merge struct had extra spaces on MasterConnections /
ReplicaConnections that broke gofmt alignment.
---------
Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Ben Schumacher <hanzei@users.noreply.github.com>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
…mbnails. (#36590) * Open file preview modal when clicking draft attachment thumbnails. Co-authored-by: Cursor <cursoragent@cursor.com> * Document draft thumbnail preview handler for CodeRabbit/doc checks. Co-authored-by: Cursor <cursoragent@cursor.com> * Fix ESLint import/order in FilePreview connector and tests. Co-authored-by: Cursor <cursoragent@cursor.com> * Add tests for archived and deleted draft attachment preview guards. Co-authored-by: Cursor <cursoragent@cursor.com> * Enable draft attachment preview for all file types. Draft thumbnails were only clickable for images and SVGs; other attachments now open the standard file preview modal like post attachments do. Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
* Exclude webhook posts from thread participation check When determining if the current user has replied to a thread for comment mention notifications, ignore posts made by webhooks even if they use the owning user's user_id. Co-authored-by: Sven Hüster <svelle@users.noreply.github.com> * Add missing isFromWebhook import in posts selector Co-authored-by: Sven Hüster <svelle@users.noreply.github.com> --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Sven Hüster <svelle@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to subscribe to this conversation on GitHub.
Already have an account?
Sign in.
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )