createHandler.go

 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}