We create the basic boilerplate to pass services
to each product. The basic idea is to have a map
containing service names and the services.
The server will pass all services to all products.
But it is on the product, to choose what services
they will actually consume.
Each product will cast the received service to
an interface with the methods that product requires.
https://mattermost.atlassian.net/browse/MM-40813
```release-note
NONE
```
* Move plugins under Channels
We move all plugin related fields under *Channels.
This essentially migrates several methods from being under
*Server to under *Channels.
We also move the plugin startup and shutdown code
to be under Channels.Start and Channels.Shutdown.
While here, we remove the getPluginPublicKeyFiles
method which was a one-line method which uselessly
returned an error.
Lastly, we fix the product initialization order which
was incorrect previously. Products are dependent on
the main server.
So startup should be products -> server.
And shutdown should be server -> products.
```release-note
NONE
```
* Added app layer
```release-note
NONE
```
* Incorporate suggestions
```release-note
NONE
```
* add request context
* move initialialization to server
* use app interface instead of global app functions
* remove app context from webconn
* cleanup
* remove duplicated services
* move context to separate package
* remove finalize init method and move content to NewServer function
* restart workers and schedulers after adding license for tests
* reflect review comments
Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
* Removing some other fake apps
* More FakeApp removed
* Removing entirely FakeApp
* Fixing some tests
* Fixing get Cluster id from get plugin status
* Fixing failing tests
* Fixing tests
* Fixing test initialization for web
* Fixing InitServer for server tests
* Fixing InitServer for server tests
* Reverting go.sum and go.mod
* Removing unneded HTMLTemplates function in App layer
* Moving back some functions to its old place to easy the review
* Moving back some functions to its old place to easy the review
* Using the last struct2interface version
* Generating store layers
* Fixing merge problems
* Addressing PR comments
* Small fix
* Fixing app tests build
* Fixing tests
* fixing tests
* Fix tests
* Fixing tests
* Fixing tests
* Fixing tests
* Moving license to server struct
* Adding some fixes to the test compilation
* Fixing cluster and some jobs initialization
* Fixing some license tests compilation problems
* Fixing recursive cache invalidation
* Regenerating app layers
* Fix test compilation
Co-authored-by: mattermod <mattermod@users.noreply.github.com>
* Make WebSocketEvent type immutable
* Update code to use updated immutable WebSocketEvent type
* Export WebSocketEvent fields and mark them as deprecated
* guard app plugins with mutex
Shutting down the app could race with a goroutine that uses the plugins environment, since we shut down the plugins first before cleaning up goroutines.
* fix go vet issues
* Moving goroutine pool
* Auto refactor
* Moving plugins.
* Auto refactor
* Moving fields to server
* Auto refactor
* Removing siteurl duplication.
* Moving reset of app fields
* Auto refactor
* Formatting
* Moving niling of Server to after last use
* Fixing unit tests.