diff --git a/cmd/warehost-host/config.go b/cmd/warehost-host/config.go index 5c7f3bc..04f6106 100644 --- a/cmd/warehost-host/config.go +++ b/cmd/warehost-host/config.go @@ -12,12 +12,23 @@ type Config struct { Log struct { Path string `yaml:"path"` } `yaml:"log"` - DatabaseDebug bool `yaml:"databasedebug"` + DatabaseDebug bool `yaml:"databasedebug"` + PathUser string `yaml:"path_user"` + PathGroup string `yaml:"path_group"` Web struct { Enable bool `yaml:"enable"` ConfigurationTemplate string `yaml:"template"` ConfigurationFile string `yaml:"config"` + PathDomain string `yaml:"path_domain"` } `yaml:"web"` + WebModul struct { + Enable bool `yaml:"enable"` + PathID string `yaml:"path_id"` + } `yaml:"web_modul"` + FTP struct { + Enable bool `yaml:"enable"` + PathID string `yaml:"path_id"` + } `yaml:"ftp"` Database struct { Enable bool `yaml:"enable"` Type string `yaml:"type"` diff --git a/cmd/warehost-host/config.yml.example b/cmd/warehost-host/config.yml.example index 46a63db..d6cc1a6 100644 --- a/cmd/warehost-host/config.yml.example +++ b/cmd/warehost-host/config.yml.example @@ -3,10 +3,16 @@ warehostdatabase: "host=localhost user=warehost dbname=warehost password=hallo s log: path: test.log databasedebug: false +path_user: http +path_group: http +ftp: + enable: true + path_id: /tmp/ftp/%d/ web: enable: true template: caddy config: /tmp/a + path_domain: /tmp/b database: enable: true type: mysql diff --git a/cmd/warehost-host/main.go b/cmd/warehost-host/main.go index 16c7330..a9c8a1b 100644 --- a/cmd/warehost-host/main.go +++ b/cmd/warehost-host/main.go @@ -5,6 +5,7 @@ import ( "flag" "fmt" "os" + "os/user" "strconv" "strings" "text/template" @@ -15,6 +16,7 @@ import ( liblog "dev.sum7.eu/sum7/warehost/lib/log" host "dev.sum7.eu/sum7/warehost/modul/host" + web "dev.sum7.eu/sum7/warehost/modul/web" system "dev.sum7.eu/sum7/warehost/system" ) @@ -45,8 +47,44 @@ func main() { //load system Models to database system.SyncModels(dbconnection) + web.SyncModels(dbconnection) host.SyncModels(dbconnection) + u, _ := user.Lookup(config.PathUser) + userid, _ := strconv.Atoi(u.Uid) + g, _ := user.LookupGroup(config.PathGroup) + groupid, _ := strconv.Atoi(g.Gid) + + if config.FTP.Enable { + var logins []*system.Login + dbconnection.Joins("LEFT JOIN host_profil profil ON profil.login=login.id").Where("profil.id IS NOT NULL").Find(&logins) + for _, login := range logins { + path := fmt.Sprintf(config.FTP.PathID, login.ID) + err = os.Mkdir(path, 0770) + if err != nil && !strings.Contains(err.Error(), "file exists") { + liblog.Log.Warn("ftp folder: ", err) + } else { + os.Chown(path, userid, groupid) + liblog.Log.Info("ftp folder: ", path) + } + } + } + + if config.WebModul.Enable { + var sites []*web.Website + dbconnection.Find(&sites) + for _, site := range sites { + path := fmt.Sprintf(config.WebModul.PathID, site.ID) + err = os.Mkdir(path, 0770) + if err != nil && !strings.Contains(err.Error(), "file exists") { + liblog.Log.Warn("web modul folder: ", err) + } else { + os.Chown(path, userid, groupid) + liblog.Log.Info("web modul folder: ", path) + } + } + } + // Configurate Webserver if config.Web.Enable { tmpl, err := template.ParseFiles(config.Web.ConfigurationTemplate) @@ -63,9 +101,21 @@ func main() { dbconnection.Preload("Domain.Profil.Login").Order("length(subdomain) asc").Find(&web) for _, item := range web { if item.Domain.Active && item.Domain.Web && item.Domain.Profil.Login.Active { + path := config.Web.PathDomain + if len(item.Subdomain) > 0 { + path = fmt.Sprintf("%s/%s.%s", path, item.Subdomain, item.Domain.FQDN) + } else { + path = fmt.Sprintf("%s/%s", path, item.Domain.FQDN) + } + err = os.Mkdir(path, 0770) + if err != nil && !strings.Contains(err.Error(), "file exists") { + liblog.Log.Warn("domain folder: ", err) + } else { + os.Chown(path, userid, groupid) + } err = tmpl.Execute(file, item) if err != nil { - liblog.Log.Warning("write config: ", err) + liblog.Log.Warn("write config: ", err) } } }