95 lines
2.2 KiB
Go
95 lines
2.2 KiB
Go
|
package args
|
||
|
|
||
|
import (
|
||
|
"flag"
|
||
|
"fmt"
|
||
|
"os"
|
||
|
"strings"
|
||
|
"sync"
|
||
|
)
|
||
|
|
||
|
type Arguments struct {
|
||
|
DatabasePath string
|
||
|
TemplatePath string
|
||
|
StaticPath string
|
||
|
|
||
|
Migrate bool
|
||
|
Scheduler bool
|
||
|
|
||
|
NtfyEndpoint string
|
||
|
NtfyTopics []string
|
||
|
NtfyListener bool
|
||
|
|
||
|
Port int
|
||
|
Server bool
|
||
|
}
|
||
|
|
||
|
func isDirectory(path string) (bool, error) {
|
||
|
fileInfo, err := os.Stat(path)
|
||
|
if err != nil {
|
||
|
return false, err
|
||
|
}
|
||
|
|
||
|
return fileInfo.IsDir(), err
|
||
|
}
|
||
|
|
||
|
func validateArgs(args *Arguments) error {
|
||
|
templateIsDir, err := isDirectory(args.TemplatePath)
|
||
|
if err != nil || !templateIsDir {
|
||
|
return fmt.Errorf("template path is not an accessible directory %s", err)
|
||
|
}
|
||
|
staticPathIsDir, err := isDirectory(args.StaticPath)
|
||
|
if err != nil || !staticPathIsDir {
|
||
|
return fmt.Errorf("static path is not an accessible directory %s", err)
|
||
|
}
|
||
|
return nil
|
||
|
}
|
||
|
|
||
|
var lock = &sync.Mutex{}
|
||
|
var args *Arguments
|
||
|
|
||
|
func GetArgs() (*Arguments, error) {
|
||
|
lock.Lock()
|
||
|
defer lock.Unlock()
|
||
|
|
||
|
if args != nil {
|
||
|
return args, nil
|
||
|
}
|
||
|
|
||
|
databasePath := flag.String("database-path", "./phoneassistant.db", "Path to the SQLite database")
|
||
|
|
||
|
templatePath := flag.String("template-path", "./templates", "Path to the template directory")
|
||
|
staticPath := flag.String("static-path", "./static", "Path to the static directory")
|
||
|
|
||
|
ntfyEndpoint := flag.String("ntfy-endpoint", "https://ntfy.simponic.hatecomputers.club", "NTFY Endpoint")
|
||
|
ntfyTopics := flag.String("ntfy-topics", "testtopic", "Comma-separated NTFY Topics")
|
||
|
ntfyListener := flag.Bool("ntfy-listener", false, "Listen to NTFY Topic and propagate messages")
|
||
|
|
||
|
scheduler := flag.Bool("scheduler", false, "Run scheduled jobs via cron")
|
||
|
migrate := flag.Bool("migrate", false, "Run the migrations")
|
||
|
|
||
|
port := flag.Int("port", 8080, "Port to listen on")
|
||
|
server := flag.Bool("server", false, "Run the server")
|
||
|
|
||
|
flag.Parse()
|
||
|
|
||
|
args = &Arguments{
|
||
|
DatabasePath: *databasePath,
|
||
|
TemplatePath: *templatePath,
|
||
|
StaticPath: *staticPath,
|
||
|
Port: *port,
|
||
|
Server: *server,
|
||
|
Migrate: *migrate,
|
||
|
Scheduler: *scheduler,
|
||
|
NtfyEndpoint: *ntfyEndpoint,
|
||
|
NtfyTopics: strings.Split(*ntfyTopics, ","),
|
||
|
NtfyListener: *ntfyListener,
|
||
|
}
|
||
|
err := validateArgs(args)
|
||
|
if err != nil {
|
||
|
return nil, err
|
||
|
}
|
||
|
|
||
|
return args, nil
|
||
|
}
|