@@ -18,7 +18,6 @@ import {
1818 isDangerousNameMatchingEnabled ,
1919 resolveControlCommandGate ,
2020 resolveDmGroupAccessWithLists ,
21- resolveEffectiveAllowFromLists ,
2221 resolveAllowlistProviderRuntimeGroupPolicy ,
2322 resolveDefaultGroupPolicy ,
2423 resolveChannelMediaMaxBytes ,
@@ -38,6 +37,11 @@ import {
3837 type MattermostPost ,
3938 type MattermostUser ,
4039} from "./client.js" ;
40+ import {
41+ isMattermostSenderAllowed ,
42+ normalizeMattermostAllowList ,
43+ resolveMattermostEffectiveAllowFromLists ,
44+ } from "./monitor-auth.js" ;
4145import {
4246 createDedupeCache ,
4347 formatInboundFromLabel ,
@@ -132,68 +136,6 @@ function channelChatType(kind: ChatType): "direct" | "group" | "channel" {
132136 return "channel" ;
133137}
134138
135- function normalizeAllowEntry ( entry : string ) : string {
136- const trimmed = entry . trim ( ) ;
137- if ( ! trimmed ) {
138- return "" ;
139- }
140- if ( trimmed === "*" ) {
141- return "*" ;
142- }
143- return trimmed
144- . replace ( / ^ ( m a t t e r m o s t | u s e r ) : / i, "" )
145- . replace ( / ^ @ / , "" )
146- . toLowerCase ( ) ;
147- }
148-
149- function normalizeAllowList ( entries : Array < string | number > ) : string [ ] {
150- const normalized = entries . map ( ( entry ) => normalizeAllowEntry ( String ( entry ) ) ) . filter ( Boolean ) ;
151- return Array . from ( new Set ( normalized ) ) ;
152- }
153-
154- export function resolveMattermostEffectiveAllowFromLists ( params : {
155- allowFrom ?: Array < string | number > | null ;
156- groupAllowFrom ?: Array < string | number > | null ;
157- storeAllowFrom ?: Array < string | number > | null ;
158- dmPolicy ?: string | null ;
159- } ) : {
160- effectiveAllowFrom : string [ ] ;
161- effectiveGroupAllowFrom : string [ ] ;
162- } {
163- return resolveEffectiveAllowFromLists ( {
164- allowFrom : normalizeAllowList ( params . allowFrom ?? [ ] ) ,
165- groupAllowFrom : normalizeAllowList ( params . groupAllowFrom ?? [ ] ) ,
166- storeAllowFrom : normalizeAllowList ( params . storeAllowFrom ?? [ ] ) ,
167- dmPolicy : params . dmPolicy ,
168- } ) ;
169- }
170-
171- function isSenderAllowed ( params : {
172- senderId : string ;
173- senderName ?: string ;
174- allowFrom : string [ ] ;
175- allowNameMatching ?: boolean ;
176- } ) : boolean {
177- const allowFrom = params . allowFrom ;
178- if ( allowFrom . length === 0 ) {
179- return false ;
180- }
181- if ( allowFrom . includes ( "*" ) ) {
182- return true ;
183- }
184- const normalizedSenderId = normalizeAllowEntry ( params . senderId ) ;
185- const normalizedSenderName = params . senderName ? normalizeAllowEntry ( params . senderName ) : "" ;
186- return allowFrom . some ( ( entry ) => {
187- if ( entry === normalizedSenderId ) {
188- return true ;
189- }
190- if ( params . allowNameMatching !== true ) {
191- return false ;
192- }
193- return normalizedSenderName ? entry === normalizedSenderName : false ;
194- } ) ;
195- }
196-
197139type MattermostMediaInfo = {
198140 path : string ;
199141 contentType ?: string ;
@@ -418,7 +360,7 @@ export async function monitorMattermostProvider(opts: MonitorMattermostOpts = {}
418360 senderId ;
419361 const rawText = post . message ?. trim ( ) || "" ;
420362 const dmPolicy = account . config . dmPolicy ?? "pairing" ;
421- const storeAllowFrom = normalizeAllowList (
363+ const storeAllowFrom = normalizeMattermostAllowList (
422364 dmPolicy === "allowlist"
423365 ? [ ]
424366 : await core . channel . pairing . readAllowFromStore ( "mattermost" ) . catch ( ( ) => [ ] ) ,
@@ -437,13 +379,13 @@ export async function monitorMattermostProvider(opts: MonitorMattermostOpts = {}
437379 const hasControlCommand = core . channel . text . hasControlCommand ( rawText , cfg ) ;
438380 const isControlCommand = allowTextCommands && hasControlCommand ;
439381 const useAccessGroups = cfg . commands ?. useAccessGroups !== false ;
440- const senderAllowedForCommands = isSenderAllowed ( {
382+ const senderAllowedForCommands = isMattermostSenderAllowed ( {
441383 senderId,
442384 senderName,
443385 allowFrom : effectiveAllowFrom ,
444386 allowNameMatching,
445387 } ) ;
446- const groupAllowedForCommands = isSenderAllowed ( {
388+ const groupAllowedForCommands = isMattermostSenderAllowed ( {
447389 senderId,
448390 senderName,
449391 allowFrom : effectiveGroupAllowFrom ,
@@ -901,7 +843,7 @@ export async function monitorMattermostProvider(opts: MonitorMattermostOpts = {}
901843
902844 // Enforce DM/group policy and allowlist checks (same as normal messages)
903845 const dmPolicy = account . config . dmPolicy ?? "pairing" ;
904- const storeAllowFrom = normalizeAllowList (
846+ const storeAllowFrom = normalizeMattermostAllowList (
905847 dmPolicy === "allowlist"
906848 ? [ ]
907849 : await core . channel . pairing . readAllowFromStore ( "mattermost" ) . catch ( ( ) => [ ] ) ,
@@ -914,10 +856,10 @@ export async function monitorMattermostProvider(opts: MonitorMattermostOpts = {}
914856 groupAllowFrom : account . config . groupAllowFrom ,
915857 storeAllowFrom,
916858 isSenderAllowed : ( allowFrom ) =>
917- isSenderAllowed ( {
859+ isMattermostSenderAllowed ( {
918860 senderId : userId ,
919861 senderName,
920- allowFrom : normalizeAllowList ( allowFrom ) ,
862+ allowFrom : normalizeMattermostAllowList ( allowFrom ) ,
921863 allowNameMatching,
922864 } ) ,
923865 } ) ;
0 commit comments