67
package main
import (
bolt "go.etcd.io/bbolt"
"math/rand"
"os"
"strings"
)
var urlDB *bolt.DB
var wordList []string
func fec(err error) { // fatal error check
if err != nil {
println(err.Error())
urlDB.Close()
os.Exit(1)
}
}
func openFiles() {
b, err := os.ReadFile("wordlist")
fec(err)
if len(b) == 0 {
println("wordlist is empty")
os.Exit(1)
}
wordList = strings.Split(string(b), "\n")
var db *bolt.DB
db, err = bolt.Open("urls.db", 0600, nil)
fec(err)
fec(db.Update(func(tx *bolt.Tx) error {
_, err = tx.CreateBucketIfNotExists([]byte("urls"))
return err
}))
urlDB = db
}
func getWords() string {
word := func() string {
return wordList[rand.Intn(len(wordList))]
}
return word() + "-" + word() + "-" + word()
}
func readURL(words string) string {
var url string
_ = urlDB.View(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte("urls"))
url = string(b.Get([]byte(words)))
return nil
})
return url
}
func writeURL(words, url string) error {
return urlDB.Update(func(tx *bolt.Tx) error {
b := tx.Bucket([]byte("urls"))
return b.Put([]byte(words), []byte(url))
})
}
func main() {
openFiles()
}