1package main
2
3import (
4 "encoding/json"
5 "log"
6 "net/http"
7 "strings"
8
9 "github.com/dgraph-io/badger/v3"
10)
11
12func (m model) readHandler(writer http.ResponseWriter, request *http.Request) {
13 token := request.Header.Get("Authorization")
14 token = strings.TrimPrefix(token, "Bearer ")
15 cookie, _ := request.Cookie("access_token")
16
17 if token != m.AccessToken && cookie.Value != m.AccessToken {
18 http.Error(writer, "401 Unauthorized: You do not have permission to view shortlinks", 403)
19 return
20 }
21
22 links := make(map[string]string)
23
24 err := m.database.View(func(txn *badger.Txn) error {
25 opts := badger.DefaultIteratorOptions
26 opts.PrefetchSize = 10
27 iterator := txn.NewIterator(opts)
28 defer iterator.Close()
29 for iterator.Rewind(); iterator.Valid(); iterator.Next() {
30 item := iterator.Item()
31 k := item.Key()
32 err := item.Value(func(v []byte) error {
33 links[string(k)] = string(v)
34 return nil
35 })
36 if err != nil {
37 return err
38 }
39 }
40 return nil
41 })
42 if err != nil {
43 log.Println(err)
44 }
45
46 json, err := json.Marshal(links)
47 if err != nil {
48 log.Println(err)
49 }
50 writer.Write(json)
51}