[MM-14576] Add GetBundlePath method to Plugin API (#10466)
* Fix typo * Add GetBundlePath method to Plugin API * Change signature to GetBundlePath() (string, error) * Add test
Этот коммит содержится в:
коммит произвёл
Jesse Hallam
родитель
16a9489bbb
Коммит
030ba52b08
@@ -8,6 +8,7 @@ import (
|
|||||||
"encoding/json"
|
"encoding/json"
|
||||||
"fmt"
|
"fmt"
|
||||||
"net/http"
|
"net/http"
|
||||||
|
"path/filepath"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/mattermost/mattermost-server/mlog"
|
"github.com/mattermost/mattermost-server/mlog"
|
||||||
@@ -98,6 +99,15 @@ func (api *PluginAPI) SavePluginConfig(pluginConfig map[string]interface{}) *mod
|
|||||||
return api.app.SaveConfig(cfg, true)
|
return api.app.SaveConfig(cfg, true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (api *PluginAPI) GetBundlePath() (string, error) {
|
||||||
|
bundlePath, err := filepath.Abs(filepath.Join(*api.GetConfig().PluginSettings.Directory, api.manifest.Id))
|
||||||
|
if err != nil {
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
return bundlePath, err
|
||||||
|
}
|
||||||
|
|
||||||
func (api *PluginAPI) GetLicense() *model.License {
|
func (api *PluginAPI) GetLicense() *model.License {
|
||||||
return api.app.License()
|
return api.app.License()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -510,6 +510,47 @@ func TestPluginAPILoadPluginConfigurationDefaults(t *testing.T) {
|
|||||||
assert.Equal(t, "override35true", ret)
|
assert.Equal(t, "override35true", ret)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestPluginAPIGetBundlePath(t *testing.T) {
|
||||||
|
th := Setup(t).InitBasic()
|
||||||
|
defer th.TearDown()
|
||||||
|
|
||||||
|
setupPluginApiTest(t,
|
||||||
|
`
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"github.com/mattermost/mattermost-server/plugin"
|
||||||
|
"github.com/mattermost/mattermost-server/model"
|
||||||
|
)
|
||||||
|
|
||||||
|
type MyPlugin struct {
|
||||||
|
plugin.MattermostPlugin
|
||||||
|
}
|
||||||
|
|
||||||
|
func (p *MyPlugin) MessageWillBePosted(c *plugin.Context, post *model.Post) (*model.Post, string) {
|
||||||
|
bundlePath, err := p.API.GetBundlePath()
|
||||||
|
if err != nil {
|
||||||
|
return nil, err.Error() + "failed get bundle path"
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil, bundlePath
|
||||||
|
}
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
plugin.ClientMain(&MyPlugin{})
|
||||||
|
}
|
||||||
|
`, `{"id": "testplugin", "backend": {"executable": "backend.exe"}}`, "testplugin", th.App)
|
||||||
|
|
||||||
|
hooks, err := th.App.GetPluginsEnvironment().HooksForPlugin("testplugin")
|
||||||
|
require.Nil(t, err)
|
||||||
|
require.NotNil(t, hooks)
|
||||||
|
bundlePath, err := filepath.Abs(filepath.Join(*th.App.Config().PluginSettings.Directory, "testplugin"))
|
||||||
|
require.Nil(t, err)
|
||||||
|
|
||||||
|
_, errString := hooks.MessageWillBePosted(nil, nil)
|
||||||
|
assert.Equal(t, bundlePath, errString)
|
||||||
|
}
|
||||||
|
|
||||||
func TestPluginAPIGetProfileImage(t *testing.T) {
|
func TestPluginAPIGetProfileImage(t *testing.T) {
|
||||||
th := Setup(t).InitBasic()
|
th := Setup(t).InitBasic()
|
||||||
defer th.TearDown()
|
defer th.TearDown()
|
||||||
|
|||||||
@@ -44,7 +44,12 @@ type API interface {
|
|||||||
// Minimum server version: 5.6
|
// Minimum server version: 5.6
|
||||||
SavePluginConfig(config map[string]interface{}) *model.AppError
|
SavePluginConfig(config map[string]interface{}) *model.AppError
|
||||||
|
|
||||||
// GetLicense returns the current license used by the Mattermoset server. Returns nil if the
|
// GetBundlePath returns the absolute path where the plugin's bundle was unpacked.
|
||||||
|
//
|
||||||
|
// Minimum server version: 5.10
|
||||||
|
GetBundlePath() (string, error)
|
||||||
|
|
||||||
|
// GetLicense returns the current license used by the Mattermost server. Returns nil if the
|
||||||
// the server does not have a license.
|
// the server does not have a license.
|
||||||
//
|
//
|
||||||
// Minimum server version: 5.10
|
// Minimum server version: 5.10
|
||||||
|
|||||||
@@ -671,6 +671,34 @@ func (s *apiRPCServer) SavePluginConfig(args *Z_SavePluginConfigArgs, returns *Z
|
|||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type Z_GetBundlePathArgs struct {
|
||||||
|
}
|
||||||
|
|
||||||
|
type Z_GetBundlePathReturns struct {
|
||||||
|
A string
|
||||||
|
B error
|
||||||
|
}
|
||||||
|
|
||||||
|
func (g *apiRPCClient) GetBundlePath() (string, error) {
|
||||||
|
_args := &Z_GetBundlePathArgs{}
|
||||||
|
_returns := &Z_GetBundlePathReturns{}
|
||||||
|
if err := g.client.Call("Plugin.GetBundlePath", _args, _returns); err != nil {
|
||||||
|
log.Printf("RPC call to GetBundlePath API failed: %s", err.Error())
|
||||||
|
}
|
||||||
|
return _returns.A, _returns.B
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *apiRPCServer) GetBundlePath(args *Z_GetBundlePathArgs, returns *Z_GetBundlePathReturns) error {
|
||||||
|
if hook, ok := s.impl.(interface {
|
||||||
|
GetBundlePath() (string, error)
|
||||||
|
}); ok {
|
||||||
|
returns.A, returns.B = hook.GetBundlePath()
|
||||||
|
} else {
|
||||||
|
return encodableError(fmt.Errorf("API GetBundlePath called but not implemented."))
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
type Z_GetLicenseArgs struct {
|
type Z_GetLicenseArgs struct {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -445,6 +445,27 @@ func (_m *API) GetBots(options *model.BotGetOptions) ([]*model.Bot, *model.AppEr
|
|||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// GetBundlePath provides a mock function with given fields:
|
||||||
|
func (_m *API) GetBundlePath() (string, error) {
|
||||||
|
ret := _m.Called()
|
||||||
|
|
||||||
|
var r0 string
|
||||||
|
if rf, ok := ret.Get(0).(func() string); ok {
|
||||||
|
r0 = rf()
|
||||||
|
} else {
|
||||||
|
r0 = ret.Get(0).(string)
|
||||||
|
}
|
||||||
|
|
||||||
|
var r1 error
|
||||||
|
if rf, ok := ret.Get(1).(func() error); ok {
|
||||||
|
r1 = rf()
|
||||||
|
} else {
|
||||||
|
r1 = ret.Error(1)
|
||||||
|
}
|
||||||
|
|
||||||
|
return r0, r1
|
||||||
|
}
|
||||||
|
|
||||||
// GetChannel provides a mock function with given fields: channelId
|
// GetChannel provides a mock function with given fields: channelId
|
||||||
func (_m *API) GetChannel(channelId string) (*model.Channel, *model.AppError) {
|
func (_m *API) GetChannel(channelId string) (*model.Channel, *model.AppError) {
|
||||||
ret := _m.Called(channelId)
|
ret := _m.Called(channelId)
|
||||||
@@ -1699,13 +1720,13 @@ func (_m *API) GetUserStatusesByIds(userIds []string) ([]*model.Status, *model.A
|
|||||||
return r0, r1
|
return r0, r1
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetUsers provides a mock function with given fields: _a0
|
// GetUsers provides a mock function with given fields: options
|
||||||
func (_m *API) GetUsers(_a0 *model.UserGetOptions) ([]*model.User, *model.AppError) {
|
func (_m *API) GetUsers(options *model.UserGetOptions) ([]*model.User, *model.AppError) {
|
||||||
ret := _m.Called(_a0)
|
ret := _m.Called(options)
|
||||||
|
|
||||||
var r0 []*model.User
|
var r0 []*model.User
|
||||||
if rf, ok := ret.Get(0).(func(*model.UserGetOptions) []*model.User); ok {
|
if rf, ok := ret.Get(0).(func(*model.UserGetOptions) []*model.User); ok {
|
||||||
r0 = rf(_a0)
|
r0 = rf(options)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(0) != nil {
|
if ret.Get(0) != nil {
|
||||||
r0 = ret.Get(0).([]*model.User)
|
r0 = ret.Get(0).([]*model.User)
|
||||||
@@ -1714,7 +1735,7 @@ func (_m *API) GetUsers(_a0 *model.UserGetOptions) ([]*model.User, *model.AppErr
|
|||||||
|
|
||||||
var r1 *model.AppError
|
var r1 *model.AppError
|
||||||
if rf, ok := ret.Get(1).(func(*model.UserGetOptions) *model.AppError); ok {
|
if rf, ok := ret.Get(1).(func(*model.UserGetOptions) *model.AppError); ok {
|
||||||
r1 = rf(_a0)
|
r1 = rf(options)
|
||||||
} else {
|
} else {
|
||||||
if ret.Get(1) != nil {
|
if ret.Get(1) != nil {
|
||||||
r1 = ret.Get(1).(*model.AppError)
|
r1 = ret.Get(1).(*model.AppError)
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user