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