pet-house/business/api/init.go

147 lines
3.6 KiB
Go

package api
import (
_ "github.com/GoAdminGroup/go-admin/adapter/iris"
"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/db/drivers/mysql"
"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/kataras/iris/v12"
"github.com/kataras/iris/v12/context"
"go.uber.org/zap"
"pet-house.com/business/models"
"pet-house.com/business/utils"
"pet-house.com/core/server/database"
"pet-house.com/core/server/web/web_iris"
"pet-house.com/core/server/zap_server"
"strings"
"time"
)
var Root = "/pet-house"
var ExcludeBase = "/static"
var ExcludeBase1 = "/debug"
var ExcludeBase2 = "/admin"
var frontExcludes = [...]string{
Root + AuthBase + "/login",
}
func ModuleInit() {
utils.WechatInit()
_ = database.Instance().AutoMigrate(
&models.User{},
&models.Pet{},
&models.PetBaseInfo{},
&models.ServiceAddr{},
&models.UserServiceAddr{},
&models.Goods{},
&models.PetGoods{},
&models.SystemConfig{},
&models.OrderMain{},
&models.OrderSub{},
&models.OrderDetail{})
DataInit()
DataCacheJob()
}
func GoAdminInit(app *iris.Application) {
eng := engine.Default()
cfg := config.Config{
Env: config.EnvLocal,
Databases: config.DatabaseList{
"default": {
Dsn: database.CONFIG.Dsn(),
MaxIdleConns: 5,
MaxOpenConns: 10,
ConnMaxLifetime: time.Hour,
Driver: config.DriverMysql,
},
},
Theme: "adminlte",
UrlPrefix: Root + "/admin",
Store: config.Store{
Path: "./static/uploads",
Prefix: "/static/uploads",
},
IndexUrl: Root + "/admin",
Debug: true,
Language: language.CN,
Title: "pet-house",
LoginTitle: "pet-house-admin",
Logo: "<span class=\"logo-lg\"><b>Pet</b>Admin</span>",
}
template.AddComp(chartjs.NewChart())
examplePlugin := example.NewExample()
if err := eng.AddConfig(&cfg).
AddGenerators(datamodel.Generators).
AddDisplayFilterXssJsFilter().
// add generator, first parameter is the url prefix of table when visit.
// example:
//
// "user" => http://localhost:9033/admin/info/user
//
AddGenerator("user", datamodel.GetUserTable).
AddPlugins(examplePlugin).Use(app); err != nil {
panic(err)
}
app.HandleDir("/static/uploads", "./static/uploads", iris.DirOptions{
IndexName: "/index.html",
ShowList: false,
})
eng.HTML("GET", Root+"/admin", datamodel.GetContent)
}
func FrontAuth(ctx *context.Context) {
if strings.Contains(ctx.Path(), ExcludeBase) {
ctx.Next()
return
}
if strings.Contains(ctx.Path(), ExcludeBase1) {
ctx.Next()
return
}
if strings.Contains(ctx.Path(), ExcludeBase2) {
ctx.Next()
return
}
frontExcludesStr := strings.Join(frontExcludes[:], ",")
if strings.Contains(frontExcludesStr, ctx.Path()) {
ctx.Next()
return
}
token := ctx.GetHeader("X-Token")
uid := ctx.GetHeader("X-U-Id")
zap_server.ZAPLOG.Info("frontAuth", zap.Any("path", ctx.Path()), zap.Any("token", token), zap.Any("uid", uid))
if len(token) == 0 || len(uid) == 0 {
IllegalError.Fail(ctx, nil)
return
}
tokenToUid := GetTokenInfo(token)
if len(tokenToUid) == 0 {
TokenError.Fail(ctx, nil)
return
}
if uid != tokenToUid {
UserError.Fail(ctx, nil)
return
}
ctx.Next()
}
func (p DefParty) index() web_iris.Party {
return web_iris.Party{Perfix: p.Perfix, PartyFunc: func(index iris.Party) {
index.Get("/", func(c *context.Context) {
c.WriteString("successful")
})
}}
}