diff options
| author | Mitch Riedstra <mitch@riedstra.us> | 2019-12-01 14:54:54 -0500 |
|---|---|---|
| committer | Mitch Riedstra <mitch@riedstra.us> | 2019-12-01 14:54:54 -0500 |
| commit | c19536be6e4f8733af329204a50ffc254a679ee5 (patch) | |
| tree | 0b464d70bbd1631c42c904ccf275a9aee50480d1 /cmd | |
| download | go-website-c19536be6e4f8733af329204a50ffc254a679ee5.tar.gz go-website-c19536be6e4f8733af329204a50ffc254a679ee5.tar.xz | |
Initial Commit. Small command to convert my old setup and basic server that reads off of the disk for the new setup
Diffstat (limited to 'cmd')
| -rw-r--r-- | cmd/convert/main.go | 94 | ||||
| -rw-r--r-- | cmd/server/main.go | 45 |
2 files changed, 139 insertions, 0 deletions
diff --git a/cmd/convert/main.go b/cmd/convert/main.go new file mode 100644 index 0000000..3cc4135 --- /dev/null +++ b/cmd/convert/main.go @@ -0,0 +1,94 @@ +package main + +import ( + "flag" + "io/ioutil" + "log" + "os" + "os/exec" + "path/filepath" + "regexp" + + "gopkg.in/yaml.v2" +) + +// Assumes we're getting a pageName ending in .page +func convertPage(newDir, pageName string) error { + yamlName := pageName[:len(pageName)-5] + ".yml" + headName := pageName[:len(pageName)-5] + ".head" + newPageName := pageName[:len(pageName)-5] + ".md" + hasHead := false + headBytes := []byte{} + if _, err := os.Stat(headName); err == nil { + hasHead = true + } + + if hasHead { + var err error + headBytes, err = ioutil.ReadFile(headName) + if err != nil { + return err + } + } + + y, err := yaml.Marshal(map[string]string{ + "head": string(headBytes), + }) + if err != nil { + return err + } + + cmd := exec.Command("mkdir", "-p", filepath.Join(newDir, filepath.Dir(pageName))) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + err = cmd.Run() + if err != nil { + return err + } + cmd = exec.Command("cp", "-v", pageName, filepath.Join(newDir, newPageName)) + cmd.Stdout = os.Stdout + cmd.Stderr = os.Stderr + err = cmd.Run() + if err != nil { + return err + } + + if len(headBytes) == 0 { + return nil + } else { + return ioutil.WriteFile(newDir+"/"+yamlName, y, 0644) + } +} + +func main() { + fl := flag.NewFlagSet("Website converter", flag.ExitOnError) + origDirectory := fl.String("d", ".", "Directory to read from") + newDirectory := fl.String("D", ".", "Directory to write to") + _ = fl.Parse(os.Args[1:]) + + newDir, _ := filepath.Abs(*newDirectory) + origDir, _ := filepath.Abs(*origDirectory) + + if err := os.Chdir(origDir); err != nil { + log.Fatal(err) + } + + pageRe := regexp.MustCompile(`\.page$`) + _ = filepath.Walk(".", func(path string, info os.FileInfo, err error) error { + if err != nil { + // Prevents panic + log.Println(err) + return err + } + + if pageRe.MatchString(info.Name()) { + if err := convertPage(newDir, path); err != nil { + log.Println(err) + return err + } + } + + return nil + }) + +} diff --git a/cmd/server/main.go b/cmd/server/main.go new file mode 100644 index 0000000..42eb449 --- /dev/null +++ b/cmd/server/main.go @@ -0,0 +1,45 @@ +package main + +import ( + "flag" + "fmt" + "log" + "net/http" + "os" + "path/filepath" + + "git.riedstra.us/mitch/go-website/page" +) + +func main() { + fl := flag.NewFlagSet("Website", flag.ExitOnError) + listen := fl.String("l", "0.0.0.0:8001", "Listening address") + directory := fl.String("d", ".", "Directory to serve.") + _ = fl.Parse(os.Args[1:]) + + fmt.Println("vim-go") + + if err := os.Chdir(*directory); err != nil { + log.Fatal(err) + } + + http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { + u := r.URL.Path + if u == "/" { + u = "/index" + } + u = filepath.Join(".", u) + log.Println(u) + + p := &page.Page{Name: u} + err := p.Render(w) + if err != nil { + log.Println(err) + http.Error(w, "Internal server error", 500) + return + } + + }) + http.Handle("/static/", http.StripPrefix("/static/", http.FileServer(http.Dir("static")))) + _ = http.ListenAndServe(*listen, nil) +} |
