readHandler.go

 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}