123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- package admin
- import (
- "fmt"
- "net/http"
- "os"
- "mDoc/tools"
- plogin "github.com/qor5/admin/login"
- "github.com/qor5/admin/presets"
- "github.com/qor5/admin/presets/gorm2op"
- "github.com/qor5/admin/utils"
- "github.com/qor5/ui/vuetify"
- "github.com/qor5/web"
- "github.com/qor5/x/login"
- "github.com/qor5/x/perm"
- h "github.com/theplant/htmlgo"
- "github.com/theplant/testingutils"
- "golang.org/x/text/language"
- "gorm.io/gorm"
- )
- const (
- PublishDir = "./publish"
- )
- type Config struct {
- pb *presets.Builder
- lb *login.Builder
- }
- func InitApp() *http.ServeMux {
- c := newPB()
- mux := SetupRouter(c)
- return mux
- }
- func Login(db *gorm.DB, pb *presets.Builder) *login.Builder {
- SecretCode := tools.InterfaceToStr(tools.If(os.Getenv("SECRET") == "", "12114", os.Getenv("SECRET")))
- //pb := presets.New()
- lb := plogin.New(pb).
- DB(db).
- UserModel(&User{}).
- Secret(SecretCode).
- // 点击忘记密码,输入邮箱,返回找回密码的链接
- AfterConfirmSendResetPasswordLink(func(r *http.Request, user interface{}, extraVals ...interface{}) error {
- resetLink := extraVals[0]
- u := user.(*User)
- mailbox := u.UserPass.Account
- fmt.Println("#########################################")
- testingutils.PrintlnJson(resetLink)
- fmt.Println("#########################################")
- // TODO: 邮件功能需通过配置文件设置相关
- fmt.Println(tools.MailTo("ease@scwy.net", mailbox, "您的找回密码", fmt.Sprintf("您可以通过<a href='%s'>点击这里,重新设置新的密码</a>。", resetLink), "scwy.net", 465, "ease@scwy.net", "yjz129129"))
- fmt.Println("#########################################")
- return nil
- }).
- TOTP(false)
- pb.ProfileFunc(func(ctx *web.EventContext) h.HTMLComponent {
- return h.A(h.Text("logout")).Href(lb.LogoutURL)
- })
- return lb
- }
- func newPB() Config {
- db := ConnectDB()
- b := presets.New().VuetifyOptions(`
- {
- icons: {
- iconfont: 'md', // 'mdi' || 'mdiSvg' || 'md' || 'fa' || 'fa4'
- },
- theme: {
- themes: {
- light: {
- primary: "#ed6f2d",
- secondary: "#009688",
- accent: "#ff5722",
- error: "#f44336",
- warning: "#ff9800",
- info: "#8bc34a",
- success: "#4caf50"
- },
- },
- },
- }
- `)
- b.URIPrefix("/admin").DataOperator(gorm2op.DataOperator(db)).
- BrandFunc(func(ctx *web.EventContext) h.HTMLComponent {
- logo := `data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAESElEQVR4Xu1aS1LbQBDVSLYhq8AJsE8A3MAs+KyCfQNYJlSq7BMEToCphGQZOEHEjs8C5wTxDeKcIMoqhXGkdLsk12ikkWakMR7wTBULrPl0v3790aiJteCDLLj+lgHAMGDBEXgSF2g2myvVarUug7XjON719fVQZk2RuTMDAJWu1WodQsg+CIbKrxQRENa4QRBc3t7eugXXZy6bCQB7e3tNEPprqLgquXs3NzddVZtF+ygHAJSvg/I/Slg8S0cXQGirBEE5ALu7u99AwBYj5AD+l/VndJkNFkgAt63SHZQCEFL/nlLeA4EPywicAugAWLCpigXCAGBQW15e3gCF0CprENzO2CgNwnbg2WkkHMw9AeWPywiL5y4tLaFLYSDF4QEAq/SeVMB9DWd+H41GfRieyLlCAISWRWrTkTwhCGst3/c37+7ukP6lBuyLoCK4k8HuC88x4B4whwgFzVwAOJvzBIkJCizZApb0S2kPi1lgYd8GzT54jgxBZrLDg7mbWfVEJgAspZndExF5Z2enBQciU6JROmpvb29v2LaNcSViX4J5KefSovbBZbZ4RuACwElnSOdLoGA/jdqhv/5mDruA+WeyrkDFHLae4IIaAoGFF+sOXQChlwYCF4AU6/cfHh7aecGF9dey9GfWewDmVh6YKYzgZo4sAGKBRSb/ZvhkWTy4lmQ3Bhl+wm/18PeE20TzswCIBRaw/mqe9WkhFDNBup5ggzcvIwkDAD6UmzFYK2AAg6CIgXGdsoYMC/ow+ReAfyEDPh6gBQAymqqeawBgiqO5uIBqq8rsZxhgGBB/PzAuwHkxm2kazPLZ1mmw4lfGHWKTdWL5J+5RrfRbI1OHxAo57Rjw5uPjMSj/IarUro4qsXd8mYCXNlf7ILj/eXxvBVZzWpKOnFW3S4QuMUTAeX4A2I8N9+2roYhyInMMALqnwYQLGAa8UBfAdGdVxon7usC24f5wcsM8GZAKDy2fJGKA+76Kb4TSQ4sY0Po06gTExlRX9LsgQjO4OnKkvwNoAcD++Zi+lZG24pQdxGq77ypSH0d1ASDtvl4WCI+MnIZsjaAFAKgpuoFvO2us1iQIDmjXCAhJ3tr+8//YduAWKZO1AYBnbpMG2VLY1AEvtA4wLsBBwMSA8zGdIguluqx8qn0WaH35Ww/86uSrL5TBXUh1F7IFwrMGIBIe3xVkixwRoLRngIgSZeYYAHS/ECljXZG1hgGGAeW/DMU6PtnOLBEaznNOXmfZ9K6BJyT02RyD0tGHC5wm1Hc3T6Wjs1M6y+R7hFLaXi0VnZ+zBojTqc7tLMvrE0xrfEYdhvCn7CuOQlDq9CVLuK8HLTYNXotNJgApfboKZX2yrTI7y3Ibn0IQ8MWFbYF/Mg0KHiTUWZYLQHR42DiJ3V54l5/Wl1tQTqXL0C0HYcd4T6SzTBgApWJqtJkBQCNjzEUUw4C5wK7RoQvPgP92SnFu7MAGXwAAAABJRU5ErkJggg==`
- return vuetify.VContainer(
- h.Img(logo).Attr("width", "120"),
- ).Class("ma-n4")
- }).
- HomePageFunc(func(ctx *web.EventContext) (r web.PageResponse, err error) {
- r.Body = vuetify.VContainer(
- h.H1("Home"),
- h.P().Text("Change your home page here"))
- return
- })
- b.Permission(
- perm.New().Policies(
- perm.PolicyFor(perm.Anybody).WhoAre(perm.Allowed).ToDo(presets.PermCreate, presets.PermUpdate, presets.PermDelete, presets.PermGet, presets.PermList).On("*"),
- perm.PolicyFor(perm.Anybody).WhoAre(perm.Denied).ToDo(presets.PermCreate, presets.PermUpdate, presets.PermDelete).On("*:activity_logs:*"),
- ),
- )
- utils.Configure(b)
- // ab.RegisterModels(pm, tm, cm)
- b.I18n().
- SupportLanguages(language.English, language.SimplifiedChinese).
- RegisterForModule(language.English, I18nExampleKey, Messages_en_US).
- RegisterForModule(language.SimplifiedChinese, I18nExampleKey, Messages_zh_CN).
- RegisterForModule(language.SimplifiedChinese, presets.ModelsI18nModuleKey, Messages_zh_CN_ModelsI18nModuleKey).
- GetSupportLanguagesFromRequestFunc(func(r *http.Request) []language.Tag {
- return b.I18n().GetSupportLanguages()
- })
- b.MenuOrder(
- b.MenuGroup("Page Builder").SubItems("pages", "page_templates", "page_categories").Icon("web"),
- "shared_containers",
- )
- initWebsiteData(db) // 初始化数据
- lb := Login(db, b) // 登陆设置
- return Config{
- pb: b,
- lb: lb,
- }
- }
|