|
package main |
|
|
|
import ( |
|
"log" |
|
"net/http" |
|
"os" |
|
"os/signal" |
|
"path/filepath" |
|
"strings" |
|
"time" |
|
|
|
_ "github.com/GoAdminGroup/go-admin/adapter/chi" |
|
_ "github.com/GoAdminGroup/go-admin/modules/db/drivers/mysql" |
|
|
|
"github.com/GoAdminGroup/go-admin/engine" |
|
"github.com/GoAdminGroup/go-admin/examples/datamodel" |
|
"github.com/GoAdminGroup/go-admin/modules/config" |
|
"github.com/GoAdminGroup/go-admin/modules/language" |
|
"github.com/GoAdminGroup/go-admin/plugins/example" |
|
"github.com/GoAdminGroup/go-admin/template" |
|
"github.com/GoAdminGroup/go-admin/template/chartjs" |
|
"github.com/GoAdminGroup/themes/adminlte" |
|
"github.com/go-chi/chi" |
|
) |
|
|
|
func main() { |
|
r := chi.NewRouter() |
|
|
|
eng := engine.Default() |
|
|
|
cfg := config.Config{ |
|
Env: config.EnvLocal, |
|
Databases: config.DatabaseList{ |
|
"default": { |
|
Host: "127.0.0.1", |
|
Port: "3306", |
|
User: "root", |
|
Pwd: "root", |
|
Name: "godmin", |
|
MaxIdleConns: 50, |
|
MaxOpenConns: 150, |
|
ConnMaxLifetime: time.Hour, |
|
Driver: config.DriverMysql, |
|
}, |
|
}, |
|
UrlPrefix: "admin", |
|
Store: config.Store{ |
|
Path: "./uploads", |
|
Prefix: "uploads", |
|
}, |
|
Language: language.EN, |
|
IndexUrl: "/", |
|
Debug: true, |
|
ColorScheme: adminlte.ColorschemeSkinBlack, |
|
} |
|
|
|
template.AddComp(chartjs.NewChart()) |
|
|
|
|
|
|
|
examplePlugin := example.NewExample() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if err := eng.AddConfig(&cfg). |
|
AddGenerators(datamodel.Generators). |
|
AddDisplayFilterXssJsFilter(). |
|
|
|
|
|
|
|
|
|
|
|
AddGenerator("user", datamodel.GetUserTable). |
|
AddPlugins(examplePlugin). |
|
Use(r); err != nil { |
|
panic(err) |
|
} |
|
|
|
workDir, _ := os.Getwd() |
|
filesDir := filepath.Join(workDir, "uploads") |
|
FileServer(r, "/uploads", http.Dir(filesDir)) |
|
|
|
|
|
|
|
eng.HTML("GET", "/admin", datamodel.GetContent) |
|
|
|
go func() { |
|
_ = http.ListenAndServe(":3333", r) |
|
}() |
|
|
|
quit := make(chan os.Signal, 1) |
|
signal.Notify(quit, os.Interrupt) |
|
<-quit |
|
log.Print("closing database connection") |
|
eng.MysqlConnection().Close() |
|
} |
|
|
|
|
|
|
|
func FileServer(r chi.Router, path string, root http.FileSystem) { |
|
if strings.ContainsAny(path, "{}*") { |
|
panic("FileServer does not permit URL parameters.") |
|
} |
|
|
|
fs := http.StripPrefix(path, http.FileServer(root)) |
|
|
|
if path != "/" && path[len(path)-1] != '/' { |
|
r.Get(path, http.RedirectHandler(path+"/", http.StatusMovedPermanently).ServeHTTP) |
|
path += "/" |
|
} |
|
path += "*" |
|
|
|
r.Get(path, http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { |
|
fs.ServeHTTP(w, r) |
|
})) |
|
} |
|
|