1package main
2
3import (
4 "fmt"
5 "io"
6 "log"
7 "net/http"
8 "strings"
9 "text/template"
10
11 "github.com/dgraph-io/badger/v3"
12)
13
14func (m model) root(writer http.ResponseWriter, request *http.Request) {
15 path := request.URL.Path
16 if path != "/" {
17 destinationKey := strings.TrimPrefix(path, "/")
18 err := m.database.View(func(txn *badger.Txn) error {
19 destinationEntry, err := txn.Get([]byte(destinationKey))
20 if err == nil {
21 destinationValue, err := destinationEntry.ValueCopy(nil)
22 if err != nil {
23 return err
24 }
25 log.Println("Redirecting visitor to \"" + string(destinationValue) + "\"")
26 http.Redirect(writer, request, string(destinationValue), 302)
27 }
28 return err
29 })
30 if err != nil {
31 io.WriteString(writer, string(err.Error()))
32 }
33 return
34 }
35
36 cookie, err := request.Cookie("access_token")
37 if err != nil {
38 home, err := templates.ReadFile("templates/home_unauthenticated.html")
39 if err != nil {
40 log.Fatalln(err)
41 }
42 io.WriteString(writer, string(home))
43 return
44 }
45
46 if cookie.Value == m.AccessToken {
47 dash, err := templates.ReadFile("templates/home_authenticated.html")
48 if err != nil {
49 log.Fatalln(err)
50 }
51 tmpl, err := template.New("authenticated").Parse(string(dash))
52 tmpl.Execute(writer, m.genTable())
53 }
54}
55
56func (m model) genTable() string {
57 var table string
58 err := m.database.View(func(txn *badger.Txn) error {
59 opts := badger.DefaultIteratorOptions
60 opts.PrefetchSize = 10
61 iterator := txn.NewIterator(opts)
62 defer iterator.Close()
63 for iterator.Rewind(); iterator.Valid(); iterator.Next() {
64 item := iterator.Item()
65 k := item.Key()
66 err := item.Value(func(v []byte) error {
67 table = table + fmt.Sprintf(`<tr>
68 <td><p>%s</p></td>
69 <td><p>%s</p></td>
70 <td><button>Edit</button><button>Delete</button></td>
71</tr>`, k, v)
72 return nil
73 })
74 if err != nil {
75 return err
76 }
77 }
78 return nil
79 })
80 if err != nil {
81 return err.Error()
82 }
83 return table
84}