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
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}