Finish up link creation route

Amolith created

Change summary

create.go | 48 ++++++++++++++++++++++++++++++------------------
1 file changed, 30 insertions(+), 18 deletions(-)

Detailed changes

create.go 🔗

@@ -1,32 +1,44 @@
 package main
 
 import (
+	"fmt"
 	"log"
 	"net/http"
+	"strings"
 
 	"github.com/dchest/uniuri"
 	"github.com/dgraph-io/badger/v3"
 )
 
-func create(writer http.ResponseWriter, request *http.Request) {
-	var url string
-	if request.URL.Query().Get("url") == "" {
-		http.Error(writer, "Bad request - URL parameter is required", 400)
-	} else {
-		url = request.URL.Query().Get("url")
-	}
+func (m *model) create(writer http.ResponseWriter, request *http.Request) {
+	query := request.URL.Query()
 
-	var name string
-	if request.URL.Query().Get("name") == "" {
-		name = request.URL.Query().Get("name")
-	} else {
-		name = uniuri.NewLen(4)
-	}
+	token := request.Header.Get("Authorization")
+	token = strings.TrimPrefix(token, "Bearer ")
 
-	err := db.Update(func(txn *badger.Txn) error {
-		return txn.Set([]byte(name), []byte(url))
-	})
-	if err != nil {
-		log.Fatal(err)
+	if token == m.AccessToken {
+		url := query.Get("url")
+		if len(url) == 0 {
+			http.Error(writer, "400 Bad Request: URL parameter is required", 400)
+		} else {
+			name := query.Get("name")
+			if len(name) == 0 {
+				name = uniuri.NewLen(4)
+			}
+
+			log.Println("Saving \"" + url + "\" mapped to \"" + name + "\"")
+
+			if len(name) != 0 && len(url) != 0 {
+				err := m.database.Update(func(txn *badger.Txn) error {
+					return txn.Set([]byte(name), []byte(url))
+				})
+				if err != nil {
+					log.Fatal(err)
+				}
+				http.Error(writer, fmt.Sprint("URL mapped to "+name), 200)
+			}
+		}
+	} else {
+		http.Error(writer, "401 Unauthorized: You do not have permission to create shortlinks", 403)
 	}
 }