1package main
 2
 3import (
 4	"fmt"
 5	"net/http"
 6	"strings"
 7)
 8
 9func (m *model) updateHandler(writer http.ResponseWriter, request *http.Request) {
10	query := request.URL.Query()
11
12	token := request.Header.Get("Authorization")
13	token = strings.TrimPrefix(token, "Bearer ")
14
15	if token != m.AccessToken {
16		http.Error(writer, "401 Unauthorized: You do not have permission to edit shortlinks", 403)
17		return
18	}
19
20	oldName := query.Get("oldName")
21	name := query.Get("name")
22	destination := query.Get("url")
23
24	if len(oldName) == 0 {
25		http.Error(writer, "400 Bad Request: oldName parameter is required", 400)
26		return
27	}
28
29	if len(name) == 0 {
30		http.Error(writer, "400 Bad Request: name parameter is required", 400)
31		return
32	}
33
34	if len(destination) == 0 {
35		http.Error(writer, "400 Bad Request: url parameter is required", 400)
36		return
37	}
38
39	if len(name) != 0 && oldName != name {
40		if m.nameExists(name) {
41			http.Error(writer, "406 Not Acceptable: A shortened URL with this name already exists", 406)
42			return
43		}
44	}
45
46	m.update(name, destination, oldName)
47
48	http.Error(writer, fmt.Sprint("\"", name, "\" mapped to \"", destination, "\""), 200)
49}