Change summary
create.go | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
Detailed changes
@@ -29,7 +29,15 @@ func (m *model) create(writer http.ResponseWriter, request *http.Request) {
name := query.Get("name")
if len(name) == 0 {
- name = uniuri.NewLen(4)
+ for {
+ name = uniuri.NewLen(4)
+ if !m.nameExists(name) {
+ break
+ }
+ }
+ } else if m.nameExists(name) {
+ http.Error(writer, "406 Not Acceptable: A shortened URL with this name already exists", 406)
+ return
}
log.Println("Saving \"" + url + "\" mapped to \"" + name + "\"")
@@ -43,3 +51,17 @@ func (m *model) create(writer http.ResponseWriter, request *http.Request) {
http.Error(writer, fmt.Sprint("URL mapped to "+name), 200)
}
+
+func (m model) nameExists(name string) bool {
+ err := m.database.View(func(txn *badger.Txn) error {
+ _, err := txn.Get([]byte(name))
+ if err != nil {
+ return err
+ }
+ return nil
+ })
+ if err != nil {
+ return true
+ }
+ return false
+}