all repos — nirvash @ e7456651350df48a7093462997489ef02f2b4fda

modular CMS using the quartzgun library

nirvash.go (raw)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
package main

import (
	"net/http"
	core "nilfm.cc/git/nirvash/archetype"
	shell "nilfm.cc/git/nirvash/lfo"
	"nilfm.cc/git/quartzgun/indentalUserDB"
	"nilfm.cc/git/quartzgun/middleware"
	"nilfm.cc/git/quartzgun/renderer"
	"nilfm.cc/git/quartzgun/router"
	"os"
	"path/filepath"
)

func main() {
	cfg := core.ReadConfig()
	udb := indentalUserDB.CreateIndentalUserDB(
		filepath.Join(
			core.GetConfigLocation(),
			"user.db"))
	if core.ProcessCmd(os.Args, udb, cfg) {
		os.Exit(0)
	}
	if cfg.IsNull() {
		cfg.RunWizard()
	}

	cfg.Adapter.Init(cfg)

	rtr := &router.Router{
		StaticPaths: map[string]string{
			"/static": cfg.AssetRoot,
		},
	}

	rtr.Get("/login", renderer.Template(
		"templates/login.html"))

	rtr.Post("/login", middleware.Authorize("/", udb, "/login?tryagain=1"))

	rtr.Get("/logout", middleware.Bunt("/", udb, "/login?tryagain=1"))

	rtr.Get(
		"/",
		middleware.Protected(
			shell.WithAdapter(
				renderer.Template(
					"templates/cms_list.html",
					"templates/header.html",
					"templates/footer.html"),
				cfg.Adapter),
			http.MethodGet,
			udb,
			"/login"))

	rtr.Get(
		`/edit/(?P<Slug>\S+)`,
		middleware.Fortify(
			middleware.Protected(
				shell.WithAdapter(
					renderer.Template(
						"templates/cms_edit.html",
						"templates/header.html",
						"templates/footer.html"),
					cfg.Adapter),
				http.MethodGet,
				udb,
				"/login")))

	rtr.Post(
		`/save/(?P<Slug>\S+)`,
		middleware.Defend(
			middleware.Protected(
				shell.WithAdapter(
					shell.EnsurePageData(
						renderer.Template(
							"templates/cms_save.html",
							"templates/header.html",
							"templates/footer.html"),
						cfg.Adapter),
					cfg.Adapter),
				http.MethodGet,
				udb,
				"/login"),
			udb,
			"/"))

	rtr.Get(
		`/new`,
		middleware.Fortify(
			middleware.Protected(
				shell.WithAdapter(
					renderer.Template(
						"templates/cms_new.html",
						"templates/header.html",
						"templates/footer.html"),
					cfg.Adapter),
				http.MethodGet,
				udb,
				"/login")))

	rtr.Post(
		`/create`,
		middleware.Defend(
			middleware.Protected(
				shell.WithAdapter(
					shell.EnsurePageData(
						renderer.Template(
							"templates/cms_create.html",
							"templates/header.html",
							"templates/footer.html"),
						cfg.Adapter),
					cfg.Adapter),
				http.MethodGet,
				udb,
				"/login"),
			udb,
			"/"))

	http.ListenAndServe(":8080", rtr)
}