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}