github.com/cjdelisle/matterfoss@v5.11.1+incompatible/plugin/hooks.go (about) 1 // Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. 2 // See License.txt for license information. 3 4 package plugin 5 6 import ( 7 "io" 8 "net/http" 9 10 "github.com/mattermost/mattermost-server/model" 11 ) 12 13 // These assignments are part of the wire protocol used to trigger hook events in plugins. 14 // 15 // Feel free to add more, but do not change existing assignments. Follow the naming convention of 16 // <HookName>Id as the autogenerated glue code depends on that. 17 const ( 18 OnActivateId = 0 19 OnDeactivateId = 1 20 ServeHTTPId = 2 21 OnConfigurationChangeId = 3 22 ExecuteCommandId = 4 23 MessageWillBePostedId = 5 24 MessageWillBeUpdatedId = 6 25 MessageHasBeenPostedId = 7 26 MessageHasBeenUpdatedId = 8 27 UserHasJoinedChannelId = 9 28 UserHasLeftChannelId = 10 29 UserHasJoinedTeamId = 11 30 UserHasLeftTeamId = 12 31 ChannelHasBeenCreatedId = 13 32 FileWillBeUploadedId = 14 33 UserWillLogInId = 15 34 UserHasLoggedInId = 16 35 UserHasBeenCreatedId = 17 36 TotalHooksId = iota 37 ) 38 39 // Hooks describes the methods a plugin may implement to automatically receive the corresponding 40 // event. 41 // 42 // A plugin only need implement the hooks it cares about. The MattermostPlugin provides some 43 // default implementations for convenience but may be overridden. 44 type Hooks interface { 45 // OnActivate is invoked when the plugin is activated. If an error is returned, the plugin 46 // will be terminated. The plugin will not receive hooks until after OnActivate returns 47 // without error. 48 OnActivate() error 49 50 // Implemented returns a list of hooks that are implemented by the plugin. 51 // Plugins do not need to provide an implementation. Any given will be ignored. 52 Implemented() ([]string, error) 53 54 // OnDeactivate is invoked when the plugin is deactivated. This is the plugin's last chance to 55 // use the API, and the plugin will be terminated shortly after this invocation. The plugin 56 // will stop receiving hooks just prior to this method being called. 57 OnDeactivate() error 58 59 // OnConfigurationChange is invoked when configuration changes may have been made. Any 60 // returned error is logged, but does not stop the plugin. You must be prepared to handle 61 // a configuration failure gracefully. 62 OnConfigurationChange() error 63 64 // ServeHTTP allows the plugin to implement the http.Handler interface. Requests destined for 65 // the /plugins/{id} path will be routed to the plugin. 66 // 67 // The Mattermost-User-Id header will be present if (and only if) the request is by an 68 // authenticated user. 69 ServeHTTP(c *Context, w http.ResponseWriter, r *http.Request) 70 71 // ExecuteCommand executes a command that has been previously registered via the RegisterCommand 72 // API. 73 ExecuteCommand(c *Context, args *model.CommandArgs) (*model.CommandResponse, *model.AppError) 74 75 // UserHasBeenCreated is invoked after a user was created. 76 // 77 // Minimum server version: 5.10 78 UserHasBeenCreated(c *Context, user *model.User) 79 80 // UserWillLogIn before the login of the user is returned. Returning a non empty string will reject the login event. 81 // If you don't need to reject the login event, see UserHasLoggedIn 82 UserWillLogIn(c *Context, user *model.User) string 83 84 // UserHasLoggedIn is invoked after a user has logged in. 85 UserHasLoggedIn(c *Context, user *model.User) 86 87 // MessageWillBePosted is invoked when a message is posted by a user before it is committed 88 // to the database. If you also want to act on edited posts, see MessageWillBeUpdated. 89 // 90 // To reject a post, return an non-empty string describing why the post was rejected. 91 // To modify the post, return the replacement, non-nil *model.Post and an empty string. 92 // To allow the post without modification, return a nil *model.Post and an empty string. 93 // 94 // If you don't need to modify or reject posts, use MessageHasBeenPosted instead. 95 // 96 // Note that this method will be called for posts created by plugins, including the plugin that 97 // created the post. 98 MessageWillBePosted(c *Context, post *model.Post) (*model.Post, string) 99 100 // MessageWillBeUpdated is invoked when a message is updated by a user before it is committed 101 // to the database. If you also want to act on new posts, see MessageWillBePosted. 102 // Return values should be the modified post or nil if rejected and an explanation for the user. 103 // On rejection, the post will be kept in its previous state. 104 // 105 // If you don't need to modify or rejected updated posts, use MessageHasBeenUpdated instead. 106 // 107 // Note that this method will be called for posts updated by plugins, including the plugin that 108 // updated the post. 109 MessageWillBeUpdated(c *Context, newPost, oldPost *model.Post) (*model.Post, string) 110 111 // MessageHasBeenPosted is invoked after the message has been committed to the database. 112 // If you need to modify or reject the post, see MessageWillBePosted 113 // Note that this method will be called for posts created by plugins, including the plugin that 114 // created the post. 115 MessageHasBeenPosted(c *Context, post *model.Post) 116 117 // MessageHasBeenUpdated is invoked after a message is updated and has been updated in the database. 118 // If you need to modify or reject the post, see MessageWillBeUpdated 119 // Note that this method will be called for posts created by plugins, including the plugin that 120 // created the post. 121 MessageHasBeenUpdated(c *Context, newPost, oldPost *model.Post) 122 123 // ChannelHasBeenCreated is invoked after the channel has been committed to the database. 124 ChannelHasBeenCreated(c *Context, channel *model.Channel) 125 126 // UserHasJoinedChannel is invoked after the membership has been committed to the database. 127 // If actor is not nil, the user was invited to the channel by the actor. 128 UserHasJoinedChannel(c *Context, channelMember *model.ChannelMember, actor *model.User) 129 130 // UserHasLeftChannel is invoked after the membership has been removed from the database. 131 // If actor is not nil, the user was removed from the channel by the actor. 132 UserHasLeftChannel(c *Context, channelMember *model.ChannelMember, actor *model.User) 133 134 // UserHasJoinedTeam is invoked after the membership has been committed to the database. 135 // If actor is not nil, the user was added to the team by the actor. 136 UserHasJoinedTeam(c *Context, teamMember *model.TeamMember, actor *model.User) 137 138 // UserHasLeftTeam is invoked after the membership has been removed from the database. 139 // If actor is not nil, the user was removed from the team by the actor. 140 UserHasLeftTeam(c *Context, teamMember *model.TeamMember, actor *model.User) 141 142 // FileWillBeUploaded is invoked when a file is uploaded, but before it is committed to backing store. 143 // Read from file to retrieve the body of the uploaded file. 144 // 145 // To reject a file upload, return an non-empty string describing why the file was rejected. 146 // To modify the file, write to the output and/or return a non-nil *model.FileInfo, as well as an empty string. 147 // To allow the file without modification, do not write to the output and return a nil *model.FileInfo and an empty string. 148 // 149 // Note that this method will be called for files uploaded by plugins, including the plugin that uploaded the post. 150 // FileInfo.Size will be automatically set properly if you modify the file. 151 FileWillBeUploaded(c *Context, info *model.FileInfo, file io.Reader, output io.Writer) (*model.FileInfo, string) 152 }