createHandler.go

 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}