* Added support for PostActions in ephemeral posts The general approach is that we take all the metadata that DoPostAction needs to process client DoPostActionRequests, and store it in a serialized, encrypted Cookie field, in the PostAction struct. The client then must send it back, and it is then used to process PostActions as a fallback top the metadata in the database. This PR adds a new config setting, `ServiceSettings.ActionCookieSecret`. In a cluster environment it must be the same for all instances. - Added type PostActionCookie, and a Cookie string to PostAction. - Added App.AddActionCookiesToPost. - Use App.AddActionCookiesToPost in api4.createEphemeralPost, App.SendEphemeralPost, App.UpdateEphemeralPost. - Added App.DoPostActionWithCookie to process incoming requests with cookies. For backward compatibility, it prefers the metadata in the database; falls back to cookie. - Added plugin.API.UpdateEphemeralPost and plugin.API.DeleteEphemeralPost. - Added App.encryptActionCookie/App.decryptActionCookie. * Style * Fixed an unfortunate typo, tested with matterpoll * minor PR feedback * Fixed uninitialized Context * Fixed another test failure * Fixed permission check * Added api test for DoPostActionWithCookie * Replaced config.ActionCookieSecret with Server.PostActionCookieSecret Modeled after AsymetricSigningKey * style * Set DeleteAt in DeleteEphemeralPost * PR feedback * Removed deadwood comment * Added EXPERIMENTAL comment to the 2 APIs in question
34 строки
689 B
Go
34 строки
689 B
Go
// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
|
|
// See License.txt for license information.
|
|
|
|
package testutils
|
|
|
|
import (
|
|
"crypto/ecdsa"
|
|
|
|
"github.com/mattermost/mattermost-server/model"
|
|
)
|
|
|
|
type StaticConfigService struct {
|
|
Cfg *model.Config
|
|
}
|
|
|
|
func (s StaticConfigService) Config() *model.Config {
|
|
return s.Cfg
|
|
}
|
|
|
|
func (StaticConfigService) AddConfigListener(func(old, current *model.Config)) string {
|
|
return ""
|
|
}
|
|
|
|
func (StaticConfigService) RemoveConfigListener(string) {
|
|
|
|
}
|
|
|
|
func (StaticConfigService) AsymmetricSigningKey() *ecdsa.PrivateKey {
|
|
return &ecdsa.PrivateKey{}
|
|
}
|
|
func (StaticConfigService) PostActionCookieSecret() []byte {
|
|
return make([]byte, 32)
|
|
}
|