diff --git a/getlinks.go b/getlinks.go new file mode 100644 index 0000000000000000000000000000000000000000..9f5e96ddbb5dc5c96d690e16d87fde84932b3449 --- /dev/null +++ b/getlinks.go @@ -0,0 +1,51 @@ +package main + +import ( + "encoding/json" + "log" + "net/http" + "strings" + + "github.com/dgraph-io/badger/v3" +) + +func (m model) getLinks(writer http.ResponseWriter, request *http.Request) { + token := request.Header.Get("Authorization") + token = strings.TrimPrefix(token, "Bearer ") + cookie, _ := request.Cookie("access_token") + + if token != m.AccessToken && cookie.Value != m.AccessToken { + http.Error(writer, "401 Unauthorized: You do not have permission to view shortlinks", 403) + return + } + + links := make(map[string]string) + + err := m.database.View(func(txn *badger.Txn) error { + opts := badger.DefaultIteratorOptions + opts.PrefetchSize = 10 + iterator := txn.NewIterator(opts) + defer iterator.Close() + for iterator.Rewind(); iterator.Valid(); iterator.Next() { + item := iterator.Item() + k := item.Key() + err := item.Value(func(v []byte) error { + links[string(k)] = string(v) + return nil + }) + if err != nil { + return err + } + } + return nil + }) + if err != nil { + log.Println(err) + } + + json, err := json.Marshal(links) + if err != nil { + log.Println(err) + } + writer.Write(json) +} diff --git a/main.go b/main.go index 81bf9b54777e1457eef6952c97ba2b36fe33efd7..21faf96d30c7664f333ce16647e25a73df8423e5 100644 --- a/main.go +++ b/main.go @@ -58,6 +58,7 @@ func main() { mux.HandleFunc("/create", m.create) mux.HandleFunc("/delete", m.delete) mux.HandleFunc("/edit", m.edit) + mux.HandleFunc("/get", m.getLinks) if err = httpServer.ListenAndServe(); err == http.ErrServerClosed { log.Println("Web server closed")