readHandler.go

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