mirror of
				https://github.com/gotify/server.git
				synced 2024-01-28 15:20:56 +03:00 
			
		
		
		
	
		
			
				
	
	
		
			121 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			121 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package main
 | |
| 
 | |
| import (
 | |
| 	"encoding/json"
 | |
| 	"fmt"
 | |
| 	"log"
 | |
| 	"net/url"
 | |
| 
 | |
| 	"github.com/gin-gonic/gin"
 | |
| 	"github.com/gotify/plugin-api"
 | |
| )
 | |
| 
 | |
| // GetGotifyPluginInfo returns gotify plugin info.
 | |
| func GetGotifyPluginInfo() plugin.Info {
 | |
| 	return plugin.Info{
 | |
| 		ModulePath: "github.com/gotify/server/v2/plugin/example/echo",
 | |
| 		Name:       "test plugin",
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // EchoPlugin is the gotify plugin instance.
 | |
| type EchoPlugin struct {
 | |
| 	msgHandler     plugin.MessageHandler
 | |
| 	storageHandler plugin.StorageHandler
 | |
| 	config         *Config
 | |
| 	basePath       string
 | |
| }
 | |
| 
 | |
| // SetStorageHandler implements plugin.Storager
 | |
| func (c *EchoPlugin) SetStorageHandler(h plugin.StorageHandler) {
 | |
| 	c.storageHandler = h
 | |
| }
 | |
| 
 | |
| // SetMessageHandler implements plugin.Messenger.
 | |
| func (c *EchoPlugin) SetMessageHandler(h plugin.MessageHandler) {
 | |
| 	c.msgHandler = h
 | |
| }
 | |
| 
 | |
| // Storage defines the plugin storage scheme
 | |
| type Storage struct {
 | |
| 	CalledTimes int `json:"called_times"`
 | |
| }
 | |
| 
 | |
| // Config defines the plugin config scheme
 | |
| type Config struct {
 | |
| 	MagicString string `yaml:"magic_string"`
 | |
| }
 | |
| 
 | |
| // DefaultConfig implements plugin.Configurer
 | |
| func (c *EchoPlugin) DefaultConfig() interface{} {
 | |
| 	return &Config{
 | |
| 		MagicString: "hello world",
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // ValidateAndSetConfig implements plugin.Configurer
 | |
| func (c *EchoPlugin) ValidateAndSetConfig(config interface{}) error {
 | |
| 	c.config = config.(*Config)
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // Enable enables the plugin.
 | |
| func (c *EchoPlugin) Enable() error {
 | |
| 	log.Println("echo plugin enabled")
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // Disable disables the plugin.
 | |
| func (c *EchoPlugin) Disable() error {
 | |
| 	log.Println("echo plugin disbled")
 | |
| 	return nil
 | |
| }
 | |
| 
 | |
| // RegisterWebhook implements plugin.Webhooker.
 | |
| func (c *EchoPlugin) RegisterWebhook(baseURL string, g *gin.RouterGroup) {
 | |
| 	c.basePath = baseURL
 | |
| 	g.GET("/echo", func(ctx *gin.Context) {
 | |
| 
 | |
| 		storage, _ := c.storageHandler.Load()
 | |
| 		conf := new(Storage)
 | |
| 		json.Unmarshal(storage, conf)
 | |
| 		conf.CalledTimes++
 | |
| 		newStorage, _ := json.Marshal(conf)
 | |
| 		c.storageHandler.Save(newStorage)
 | |
| 
 | |
| 		c.msgHandler.SendMessage(plugin.Message{
 | |
| 			Title:    "Hello received",
 | |
| 			Message:  fmt.Sprintf("echo server received a hello message %d times", conf.CalledTimes),
 | |
| 			Priority: 2,
 | |
| 			Extras: map[string]interface{}{
 | |
| 				"plugin::name": "echo",
 | |
| 			},
 | |
| 		})
 | |
| 		ctx.Writer.WriteString(fmt.Sprintf("Magic string is: %s\r\nEcho server running at %secho", c.config.MagicString, c.basePath))
 | |
| 	})
 | |
| }
 | |
| 
 | |
| // GetDisplay implements plugin.Displayer.
 | |
| func (c *EchoPlugin) GetDisplay(location *url.URL) string {
 | |
| 	loc := &url.URL{
 | |
| 		Path: c.basePath,
 | |
| 	}
 | |
| 	if location != nil {
 | |
| 		loc.Scheme = location.Scheme
 | |
| 		loc.Host = location.Host
 | |
| 	}
 | |
| 	loc = loc.ResolveReference(&url.URL{
 | |
| 		Path: "echo",
 | |
| 	})
 | |
| 	return "Echo plugin running at: " + loc.String()
 | |
| }
 | |
| 
 | |
| // NewGotifyPluginInstance creates a plugin instance for a user context.
 | |
| func NewGotifyPluginInstance(ctx plugin.UserContext) plugin.Plugin {
 | |
| 	return &EchoPlugin{}
 | |
| }
 | |
| 
 | |
| func main() {
 | |
| 	panic("this should be built as go plugin")
 | |
| }
 | 
