From 73814e0f5bed45301b4ad48b4709433d1976c95f Mon Sep 17 00:00:00 2001 From: Daan Sprenkels Date: Sun, 1 Sep 2019 12:04:43 +0200 Subject: [PATCH] Add reserved keys --- handlers.go | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/handlers.go b/handlers.go index e084c27..fdd71f0 100644 --- a/handlers.go +++ b/handlers.go @@ -5,6 +5,7 @@ package main //go:generate go-bindata -pkg $GOPACKAGE assets/ import ( + "bytes" "crypto/rand" "crypto/subtle" "encoding/base64" @@ -47,6 +48,9 @@ const ( const CookieOwnerToken = "owner_token" +// These keys are designated reserved, and will not be randomly chosen +var ReservedPasteKeys [][]byte = [][]byte{[]byte("xd42"), []byte("example")} + // Base64 encoding and decoding var base64Alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_" var base64Encoder = base64.NewEncoding(base64Alphabet).WithPadding(base64.NoPadding) @@ -286,10 +290,23 @@ func shortenURL(tx *bolt.Tx, userURL *url.URL, ownerKey [16]byte) (*StoredPaste, if err != nil { return nil, errors.Wrap(err, "url-key generation failed") } + found := shortenBucket.Get(urlKey) if found == nil { break } + + isReserved := false + for _, reservedKey := range ReservedPasteKeys { + if bytes.HasPrefix(urlKey, reservedKey) { + isReserved = true + break + } + } + if !isReserved { + break + } + epoch++ }