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