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
16 if token != m.AccessToken {
17 http.Error(writer, "401 Unauthorized: You do not have permission to view shortlinks", 403)
18 return
19 }
20
21 links := make(map[string]string)
22
23 err := m.database.View(func(txn *badger.Txn) error {
24 opts := badger.DefaultIteratorOptions
25 opts.PrefetchSize = 10
26 iterator := txn.NewIterator(opts)
27 defer iterator.Close()
28 for iterator.Rewind(); iterator.Valid(); iterator.Next() {
29 item := iterator.Item()
30 k := item.Key()
31 err := item.Value(func(v []byte) error {
32 links[string(k)] = string(v)
33 return nil
34 })
35 if err != nil {
36 return err
37 }
38 }
39 return nil
40 })
41 if err != nil {
42 log.Println(err)
43 }
44
45 json, err := json.Marshal(links)
46 if err != nil {
47 log.Println(err)
48 }
49 writer.Write(json)
50}