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