2025-03-28 08:49:33 +01:00
|
|
|
package web
|
2025-03-27 09:19:08 +01:00
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/flosch/pongo2/v6"
|
|
|
|
"io/fs"
|
2025-03-27 11:41:50 +01:00
|
|
|
"netgarden.dev/maf/maf"
|
|
|
|
"netgarden.dev/maf/mergefs"
|
2025-03-27 09:19:08 +01:00
|
|
|
)
|
|
|
|
|
|
|
|
func NewModule(moduleConfig *ModuleConfig) *Module {
|
|
|
|
return &Module{
|
|
|
|
moduleConfig: moduleConfig,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
type Module struct {
|
|
|
|
moduleConfig *ModuleConfig
|
|
|
|
manager *maf.Manager
|
|
|
|
config *Config
|
|
|
|
server *Server
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *Module) GetID() string {
|
2025-03-28 08:49:33 +01:00
|
|
|
return "web"
|
2025-03-27 09:19:08 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func (m *Module) GetName() string {
|
2025-03-28 08:49:33 +01:00
|
|
|
return "Web"
|
2025-03-27 09:19:08 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func (m *Module) SetManager(manager *maf.Manager) {
|
|
|
|
m.manager = manager
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *Module) CreateConfig() interface{} {
|
|
|
|
return NewConfig()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *Module) SetConfig(cfg interface{}) {
|
|
|
|
m.config = cfg.(*Config)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *Module) GetConfig() *Config {
|
|
|
|
return m.config
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *Module) Initialize() error {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *Module) PreStart() error {
|
|
|
|
|
|
|
|
m.server = NewServer(m)
|
|
|
|
|
|
|
|
for _, module := range m.manager.GetModulesList() {
|
|
|
|
|
|
|
|
webModule, ok := module.(WebModule)
|
|
|
|
if !ok {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
if tagsProvider, ok := module.(WebModuleTemplateTagsProvider); ok {
|
|
|
|
for name, tag := range tagsProvider.GetWebTemplateTags(m.server.GetRenderer()) {
|
|
|
|
err := pongo2.RegisterTag(name, tag)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
if filtersProvider, ok := module.(WebModuleTemplateFiltersProvider); ok {
|
|
|
|
for name, filter := range filtersProvider.GetWebTemplateFilters() {
|
|
|
|
err := pongo2.RegisterFilter(name, filter)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
routerGroup := m.server.GetGroup()
|
|
|
|
controllers := webModule.GetWebControllers()
|
|
|
|
for _, controller := range controllers {
|
|
|
|
controller.Register(routerGroup)
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *Module) Start() error {
|
|
|
|
return m.server.Start()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *Module) Stop() error {
|
|
|
|
if m.server == nil {
|
|
|
|
return nil
|
|
|
|
}
|
|
|
|
return m.server.Stop()
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *Module) getStaticFS() fs.FS {
|
|
|
|
|
|
|
|
fsList := make([]fs.FS, 0)
|
|
|
|
|
|
|
|
for _, module := range m.manager.GetModulesList() {
|
|
|
|
|
|
|
|
webModule, ok := module.(WebModuleStaticFSProvider)
|
|
|
|
if !ok {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
tplFS := webModule.GetWebStaticFS()
|
|
|
|
if tplFS == nil {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
fsList = append(fsList, tplFS)
|
|
|
|
}
|
|
|
|
|
|
|
|
return mergefs.Merge(fsList...)
|
|
|
|
}
|
|
|
|
|
|
|
|
func (m *Module) getTemplatesFS() fs.FS {
|
|
|
|
|
|
|
|
fsList := make([]fs.FS, 0)
|
|
|
|
|
|
|
|
for _, module := range m.manager.GetModulesList() {
|
|
|
|
|
|
|
|
webModule, ok := module.(WebModuleTemplatesFSProvider)
|
|
|
|
if !ok {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
tplFS := webModule.GetWebTemplatesFS()
|
|
|
|
if tplFS == nil {
|
|
|
|
continue
|
|
|
|
}
|
|
|
|
|
|
|
|
fsList = append(fsList, tplFS)
|
|
|
|
}
|
|
|
|
|
|
|
|
return mergefs.Merge(fsList...)
|
|
|
|
}
|