package control import ( "flag" "fmt" "path/filepath" ) type CliArgs struct { Description string DBName string Domain string KeyFile string Link string LogFile string Port string PicsDir string RSSFile string Title string WebDir string } func HandleCliArgs() (*CliArgs, error) { var err error cliArgs := new(CliArgs) flag.StringVar(&cliArgs.DBName, "db", "cpolis", "DB name") flag.StringVar(&cliArgs.Description, "desc", "Description", "Channel description") flag.StringVar(&cliArgs.Domain, "domain", "", "domain name") keyFile := flag.String("key", "/var/www/cpolis/cpolis.key", "key file") flag.StringVar(&cliArgs.Link, "link", "Link", "Channel Link") logFile := flag.String("log", "/var/log/cpolis.log", "log file") flag.StringVar(&cliArgs.PicsDir, "pics", "pics", "pictures directory") port := flag.Int("port", 8080, "port") rssFile := flag.String("rss", "/var/www/cpolis/cpolis.rss", "RSS file") flag.StringVar(&cliArgs.Title, "title", "Title", "Channel title") webDir := flag.String("web", "/var/www/cpolis/web", "web directory") flag.Parse() cliArgs.KeyFile, err = filepath.Abs(*keyFile) if err != nil { return nil, fmt.Errorf("error finding absolute path for KeyFile: %v", err) } cliArgs.LogFile, err = filepath.Abs(*logFile) if err != nil { return nil, fmt.Errorf("error finding absolute path for LogFile: %v", err) } _, err = filepath.Abs(cliArgs.PicsDir) if err != nil { return nil, fmt.Errorf("error finding absolute path for PicsDir: %v", err) } cliArgs.Port = fmt.Sprint(":", *port) cliArgs.RSSFile, err = filepath.Abs(*rssFile) if err != nil { return nil, fmt.Errorf("error finding absolute path for RSSFile: %v", err) } cliArgs.WebDir, err = filepath.Abs(*webDir) if err != nil { return nil, fmt.Errorf("error finding absolute path for WebDir: %v", err) } return cliArgs, nil }