* plugins: compute bundle hash on load
Use this hash to bust client caches whenever the plugin bundle changes.
* eliminate redundant pluginHandler
* switch to 64-bit FNV-1a
* Fix test
* MM-11065: Allow to search and get archived channels from the API
* Fixing more tests
* Add some unit tests
* Add includeDeleted parameter to session permissions check function
* More test fixing
* Adding archive channels list in channels search
* Add restriction for archived channel edition
* Reverting permissions checks modification
* Changed the query parameter to include_deleted
* Enable search archive channels as true by default
* Adding tests for verify search on deleted channels
* Allowing to override archive channels during the imports
* Fixed test
* Search in archive channels from the API must be explicitly requested
* Removing includeDeleted parameter from GetChannelByName and GetChannelByNameForTeam
* Back to ViewArchivedChannels config
* Fixing tests
* Reverting GetChannelByName parameter
* Add include deleted parameter on GetChannel functions in plugins api
* Fixing tests
* ensure plugin is always shutdown
Once we call `.client.Client()` the plugin has started, and must be shut
down. `newSupervisor` sometimes returned with an error (and without a
reference to the supervisor), leaving the client running indefinitely.
* Clarify the documentation to explain that plugin hooks will not trigger until `OnActivate` returns successfully, and will stop triggering just before `OnDeactivate` is called.
* test for plugin deadlock
* plugin/environment.go: switch to sync.Map
From: https://golang.org/pkg/sync/#Map
> If a goroutine holds a RWMutex for reading and another goroutine might call Lock, no goroutine should expect to be able to acquire a read lock until the initial read lock is released. In particular, this prohibits recursive read locking. This is to ensure that the lock eventually becomes available; a blocked Lock call excludes new readers from acquiring the lock.
The previous `RWMutex` was not safe given that we effectively acquired read locks recursively (hook -> api -> hook). This worked up until we activated or deactivated plugins, tried to acquire a write lock, and the plugin used the API to effectively trigger another hook.
Switching to sync.Map avoids this by divesting the need to lock at all, avoiding the potential for a recursive lock in the first place.
We never actually initialized `log` on apiRPCClient, and it can't log
without making an RPC call anyway, so just switch to logging errors from
the plugin to STDERR instead.
* 8272 added the username and icon as part of the model and persisted the same
* 8272 added the custome icon and name when set to the web hook response
* 8272 changed the infinte loop to timeout after 5 seconds
* 8272 fixed review comments
* Add ExperimentalSidebarPreference in the config
* Override Sidebar preference based on GroupUnread settings
* Rename to ExperimentalChannelOrganization
* Add Sidebar config in diagnostics
* Fix diagnostics for experimental_channel_organization
gofmt
Make skipping for non public channels default
Deduplication of Default Channels; Only post join to townsquare
Post join channel message for all custom default channels
* Modifying message and templates about mfa_change
* Modifying message and templates about password_change
* Modify message and template about password_reset
* Modify message and template about singin_change
* Modify message and template about email_info
* Modify message and template about change_username
* Modify message about change_email
* Add missing props
* Add argument
* Modify message and template about token_added
* Modify messages and template about notification_email
* Modify message and template about deactivate_email
* Fix style
* Remove unused message
* Remove br tags
* Modify message and code about invite_mail
* Add missing message
* make GetChannelByName take teamId first
I think it is more natural to accept `teamId`, then `channelName`,
given the pattern followed by other Plugin API methods and even the SQL
Store itself. The App layer seems unusual in accepting `channelName`
first.
This also re-generates the mocks fixing the parameter order for the
recently added `UserStatus` APIs.
* add GetChannelByNameForTeamName
* 9006 - process the attachments of the post
* 9006 enabling the import of attachments in the reply post
* 9006 assert if the post and files are linked
* 9006 fixed the typo