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}