helperfuncs.go

  1package main
  2
  3import (
  4	"fmt"
  5	"log"
  6	"strings"
  7	"text/template"
  8
  9	"github.com/dgraph-io/badger/v3"
 10)
 11
 12// Create shortens a given URL with an optional name. If a name is provided,
 13// that name will be used. Otherwise, 4-character string will be generated and
 14// used instead.
 15func (m model) create(name string, url string) string {
 16	err := m.database.Update(func(txn *badger.Txn) error {
 17		return txn.Set([]byte(name), []byte(url))
 18	})
 19	if err != nil {
 20		return fmt.Sprint(err)
 21	}
 22
 23	log.Println("\"" + url + "\" mapped to \"" + name + "\"")
 24	return fmt.Sprint("URL mapped to ", name, "\n")
 25}
 26
 27// Update modifies a shortened link
 28func (m model) update(name string, url string, oldName string) string {
 29	m.create(name, url)
 30	if name != oldName {
 31		m.delete(oldName)
 32	}
 33	return fmt.Sprint("\"" + url + "\" mapped to \"" + name + "\"")
 34}
 35
 36// Delete removes a shortened URL from the database given its name.
 37func (m model) delete(name string) string {
 38	err := m.database.Update(func(txn *badger.Txn) error {
 39		return txn.Delete([]byte(name))
 40	})
 41	if err != nil {
 42		return fmt.Sprint(err)
 43	}
 44
 45	log.Println("\"" + name + "\" has been deleted")
 46	return fmt.Sprint("\"" + name + "\" has been deleted\n")
 47}
 48
 49// nameExists returns true if the provided name is already stored in the
 50// database and false if it's not.
 51func (m model) nameExists(name string) bool {
 52	err := m.database.View(func(txn *badger.Txn) error {
 53		_, err := txn.Get([]byte(name))
 54		if err != nil {
 55			return err
 56		}
 57		return nil
 58	})
 59	if err == nil {
 60		return true
 61	}
 62	return false
 63}
 64
 65// unauthenticated serves the unauthenticated home page to the visitor
 66func unauthenticated() string {
 67	home, err := templates.ReadFile("templates/home_unauthenticated.html")
 68	if err != nil {
 69		log.Fatalln(err)
 70	}
 71	return string(home)
 72}
 73
 74// authenticated serves the authenticated dashboard to the user
 75func (m model) authenticated() string {
 76	dash, err := templates.ReadFile("templates/home_authenticated.html")
 77	if err != nil {
 78		log.Fatalln(err)
 79	}
 80	tmpl, err := template.New("authenticated").Parse(string(dash))
 81	page := new(strings.Builder)
 82	tmpl.Execute(page, m.genTable())
 83	return page.String()
 84}
 85
 86type EditFields struct {
 87	URL  string
 88	Name string
 89}
 90
 91// update serves the editing interface to the user
 92func (m model) edit(name string, url string) string {
 93	fields := EditFields{url, name}
 94	editPage, err := templates.ReadFile("templates/edit.html")
 95	if err != nil {
 96		log.Fatalln(err)
 97	}
 98	tmpl, err := template.New("editPage").Parse(string(editPage))
 99	page := new(strings.Builder)
100	tmpl.Execute(page, fields)
101	return page.String()
102}