upgrades - plugins

pull/10/head
Hunter Long 2018-06-10 21:28:41 -07:00
parent 4df559efc7
commit a95f725348
4 changed files with 85 additions and 52 deletions

View File

@ -6,7 +6,7 @@ import (
var (
pluginRoutes []*plugins.Routing
allPlugins []*plugins.Plugin
allPlugins []*plugins.Plugin
)
func InitPluginsDatabase() {
@ -17,6 +17,22 @@ func SetAuthorized() {
}
func AfterInstall() {
}
func AfterUninstall() {
}
func AfterSave() {
}
func Routes() []*plugins.Routing {
return plugins.PluginRoutes
}
func AllPlugins() []*plugins.Plugin {
return plugins.Plugins
}

View File

@ -2,18 +2,22 @@ package plugins
import (
"database/sql"
"net/http"
"fmt"
"net/http"
)
var (
db *sql.DB
PluginRoutes []*Routing
Plugins []*Plugin
Plugins []*Plugin
)
type Plugin struct {
Name string
Name string
InstallSQL string
InstallFunc func()
UninstallFunc func()
SaveFunc func()
}
type Routing struct {
@ -22,9 +26,8 @@ type Routing struct {
Handler func(http.ResponseWriter, *http.Request)
}
func Add(name string) {
plugin := &Plugin{name}
Plugins = append(Plugins, plugin)
func (p *Plugin) Add() {
Plugins = append(Plugins, p)
}
func AddRoute(url string, method string, handle func(http.ResponseWriter, *http.Request)) {
@ -32,14 +35,28 @@ func AddRoute(url string, method string, handle func(http.ResponseWriter, *http.
PluginRoutes = append(PluginRoutes, route)
}
func Authenticated(r *http.Request) bool {
func (p *Plugin) InstallPlugin(w http.ResponseWriter, r *http.Request) {
p.InstallFunc()
http.Redirect(w, r, "/plugins", http.StatusSeeOther)
}
func (p *Plugin) UninstallPlugin(w http.ResponseWriter, r *http.Request) {
p.UninstallFunc()
http.Redirect(w, r, "/plugins", http.StatusSeeOther)
}
func (p *Plugin) SavePlugin(w http.ResponseWriter, r *http.Request) {
p.SaveFunc()
http.Redirect(w, r, "/plugins", http.StatusSeeOther)
}
func Authenticated(r *http.Request) bool {
return true
}
func log(msg... string) {
fmt.Println(" @plugins: ",msg)
func log(msg ...string) {
fmt.Println(" @plugins: ", msg)
}
func InitDB(database *sql.DB) {

View File

@ -2,68 +2,66 @@ package plugins
import (
"net/http"
"strconv"
)
const (
SLACK_TABLE = "plugin_slack"
SLACK_TABLE = "plugin_slack"
SLACK_INSTALL = "CREATE TABLE " + SLACK_TABLE + " (enabled BOOLEAN, api_key text, api_secret text, channel text);"
)
func init() {
Add("slack")
AddRoute("install_slack", "GET", InstallSlack)
AddRoute("uninstall_slack", "GET", UninstallSlack)
AddRoute("save_slack", "POST", SaveSettings)
}
type Slack struct {
Key string
Secret string
Enabled bool
Channel string
Key string
Secret string
Enabled bool
Channel string
InstallFunc func()
UninstallFunc func()
SaveFunc func(*http.Request)
}
func InstallSlack(w http.ResponseWriter, r *http.Request) {
CreateTable()
http.Redirect(w, r, "/plugins", http.StatusSeeOther)
}
func init() {
func UninstallSlack(w http.ResponseWriter, r *http.Request) {
DropTable()
http.Redirect(w, r, "/plugins", http.StatusSeeOther)
}
func SaveSettings(w http.ResponseWriter, r *http.Request) {
r.ParseForm()
key := r.PostForm.Get("key")
secret := r.PostForm.Get("secret")
enabled, _ := strconv.ParseBool(r.PostForm.Get("enabled"))
channel := r.PostForm.Get("channel")
slack := &Slack {
key,
secret,
enabled,
channel,
plugin := &Plugin{
"slack",
SLACK_INSTALL,
InstallSlack,
UninstallSlack,
SaveSlack,
}
slack.UpdateTable()
plugin.Add()
http.Redirect(w, r, "/plugins", http.StatusSeeOther)
}
func InstallSlack() {
CreateTable()
}
func UninstallSlack() {
DropTable()
}
func SaveSlack() {
//key := r.PostForm.Get("key")
//secret := r.PostForm.Get("secret")
//enabled, _ := strconv.ParseBool(r.PostForm.Get("enabled"))
//channel := r.PostForm.Get("channel")
//slack.UpdateTable()
}
func CreateTable() {
sql := "CREATE TABLE "+SLACK_TABLE+" (enabled BOOLEAN, api_key text, api_secret text, channel text);"
sql := "CREATE TABLE " + SLACK_TABLE + " (enabled BOOLEAN, api_key text, api_secret text, channel text);"
db.QueryRow(sql).Scan()
}
func (s *Slack) UpdateTable() {
sql := "CREATE TABLE "+SLACK_TABLE+" (enabled BOOLEAN, api_key text, api_key text, channel text);"
sql := "CREATE TABLE " + SLACK_TABLE + " (enabled BOOLEAN, api_key text, api_key text, channel text);"
db.QueryRow(sql).Scan()
}
func DropTable() {
sql := "DROP TABLE "+SLACK_TABLE+";"
sql := "DROP TABLE " + SLACK_TABLE + ";"
db.QueryRow(sql).Scan()
}

8
web.go
View File

@ -39,9 +39,11 @@ func RunHTTPServer() {
r.Handle("/plugins", http.HandlerFunc(PluginsHandler))
r.Handle("/help", http.HandlerFunc(HelpHandler))
for _, route := range Routes() {
fmt.Printf("Adding plugin route: /plugins/%v\n", route.URL)
r.Handle("/plugins/"+route.URL, http.HandlerFunc(route.Handler)).Methods(route.Method)
for _, plugin := range AllPlugins() {
fmt.Printf("Adding plugin: %v\n", plugin.Name)
r.Handle("/plugins/install_"+plugin.Name, http.HandlerFunc(plugin.InstallPlugin)).Methods("GET")
r.Handle("/plugins/uninstall_"+plugin.Name, http.HandlerFunc(plugin.UninstallPlugin)).Methods("GET")
r.Handle("/plugins/save_"+plugin.Name, http.HandlerFunc(plugin.SavePlugin)).Methods("POST")
}
srv := &http.Server{