1package main
2
3import (
4 "fmt"
5 "log"
6 "net/http"
7 "strings"
8
9 "github.com/dchest/uniuri"
10 "github.com/dgraph-io/badger/v3"
11)
12
13func (m *model) create(writer http.ResponseWriter, request *http.Request) {
14 query := request.URL.Query()
15
16 token := request.Header.Get("Authorization")
17 token = strings.TrimPrefix(token, "Bearer ")
18
19 if token == m.AccessToken {
20 url := query.Get("url")
21 if len(url) == 0 {
22 http.Error(writer, "400 Bad Request: URL parameter is required", 400)
23 } else {
24 name := query.Get("name")
25 if len(name) == 0 {
26 name = uniuri.NewLen(4)
27 }
28
29 log.Println("Saving \"" + url + "\" mapped to \"" + name + "\"")
30
31 if len(name) != 0 && len(url) != 0 {
32 err := m.database.Update(func(txn *badger.Txn) error {
33 return txn.Set([]byte(name), []byte(url))
34 })
35 if err != nil {
36 log.Fatal(err)
37 }
38 http.Error(writer, fmt.Sprint("URL mapped to "+name), 200)
39 }
40 }
41 } else {
42 http.Error(writer, "401 Unauthorized: You do not have permission to create shortlinks", 403)
43 }
44}