1package main
2
3import (
4 "log"
5 "net/http"
6 "strings"
7
8 "github.com/dchest/uniuri"
9)
10
11func (m *model) createHandler(writer http.ResponseWriter, request *http.Request) {
12 query := request.URL.Query()
13
14 token := request.Header.Get("Authorization")
15 token = strings.TrimPrefix(token, "Bearer ")
16
17 if token != m.AccessToken {
18 http.Error(writer, "401 Unauthorized: You do not have permission to create shortlinks", 403)
19 return
20 }
21
22 url := query.Get("url")
23 if len(url) == 0 {
24 http.Error(writer, "400 Bad Request: URL parameter is required", 400)
25 return
26 }
27
28 name := query.Get("name")
29 if len(name) == 0 {
30 name = uniuri.NewLen(4)
31 for m.nameExists(name) {
32 name = uniuri.NewLen(4)
33 log.Println("Generated new name:", name)
34 }
35 } else if m.nameExists(name) {
36 http.Error(writer, "406 Not Acceptable: A shortened URL with this name already exists", 406)
37 return
38 }
39
40 log.Println("Saving \"" + url + "\" mapped to \"" + name + "\"")
41
42 response := m.create(name, url)
43
44 writer.Write([]byte(response))
45}