1package tui
 2
 3import (
 4	"os"
 5	"path/filepath"
 6	"soft-serve/git"
 7
 8	gg "github.com/go-git/go-git/v5"
 9	"github.com/go-git/go-git/v5/plumbing/object"
10)
11
12const defaultReadme = "# Soft-Serve\n\n Welcome! You can configure your Soft-Serve server by cloning this repo and pushing changes.\n\n## Repos\n\n{{ range .Menu }}* {{ .Name }}{{ if .Note }} - {{ .Note }} {{ end }}\n  - `git clone ssh://{{$.Host}}:{{$.Port}}/{{.Repo}}`\n{{ end }}"
13
14const defaultConfig = `{
15	"name": "Soft-Serve",
16	"show_all_repos": true,
17	"host": "localhost",
18	"port": 23231,
19	"menu": [
20	  {
21			"name": "Home",
22			"repo": "config",
23			"note": "Configuration and content repo for this server"
24		}
25	]
26}`
27
28func createFile(path string, content string) error {
29	f, err := os.Create(path)
30	if err != nil {
31		return err
32	}
33	defer f.Close()
34	_, err = f.WriteString(content)
35	if err != nil {
36		return err
37	}
38	return f.Sync()
39}
40
41func createDefaultConfigRepo(rs *git.RepoSource) error {
42	cn := "config"
43	err := rs.LoadRepos()
44	if err != nil {
45		return err
46	}
47	_, err = rs.GetRepo(cn)
48	if err == git.ErrMissingRepo {
49		cr, err := rs.InitRepo(cn, false)
50		if err != nil {
51			return err
52		}
53
54		rp := filepath.Join(rs.Path, cn, "README.md")
55		err = createFile(rp, defaultReadme)
56		if err != nil {
57			return err
58		}
59		cp := filepath.Join(rs.Path, cn, "config.json")
60		err = createFile(cp, defaultConfig)
61		if err != nil {
62			return err
63		}
64		wt, err := cr.Repository.Worktree()
65		if err != nil {
66			return err
67		}
68		_, err = wt.Add("README.md")
69		if err != nil {
70			return err
71		}
72		_, err = wt.Add("config.json")
73		if err != nil {
74			return err
75		}
76		_, err = wt.Commit("Default init", &gg.CommitOptions{
77			All: true,
78			Author: &object.Signature{
79				Name:  "Soft-Serve Server",
80				Email: "vt100@charm.sh",
81			},
82		})
83		if err != nil {
84			return err
85		}
86		err = rs.LoadRepos()
87		if err != nil {
88			return err
89		}
90	} else if err != nil {
91		return err
92	}
93	return nil
94}