You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
memos/bin/server/cmd/profile.go

62 lines
1.2 KiB
Go

package cmd
import (
"flag"
"fmt"
"os"
"path/filepath"
"strings"
)
type Profile struct {
// mode can be "release" or "dev"
mode string
// port is the binding port for server.
port int
// dsn points to where Memos stores its own data
dsn string
}
func checkDSN(dataDir string) (string, error) {
// Convert to absolute path if relative path is supplied.
if !filepath.IsAbs(dataDir) {
absDir, err := filepath.Abs(filepath.Dir(os.Args[0]) + "/" + dataDir)
if err != nil {
return "", err
}
dataDir = absDir
}
// Trim trailing / in case user supplies
dataDir = strings.TrimRight(dataDir, "/")
if _, err := os.Stat(dataDir); err != nil {
error := fmt.Errorf("unable to access -data %s, err %w", dataDir, err)
return "", error
}
return dataDir, nil
}
// GetDevProfile will return a profile for dev.
func GetProfile() Profile {
mode := flag.String("mode", "dev", "")
port := flag.Int("port", 8080, "")
data := flag.String("data", "", "")
flag.Parse()
dataDir, err := checkDSN(*data)
if err != nil {
fmt.Printf("Failed to check dsn: %s, err: %+v\n", dataDir, err)
os.Exit(1)
}
dsn := fmt.Sprintf("file:%s/memos_%s.db", dataDir, *mode)
return Profile{
mode: *mode,
port: *port,
dsn: dsn,
}
}