package main import ( "errors" "fmt" "strings" "time" "github.com/unixvoid/glogger" "gopkg.in/redis.v5" ) func loreQuery(searchTerm string, redisClient *redis.Client) ([]string, error) { val, err := redisClient.Sort(searchTerm, redis.Sort{Order: "ALPHA"}).Result() if err != nil { return nil, errors.New("String not found.") } else { return val, nil } } func loreCheck(searchTerm, searchType string, redisClient *redis.Client) (string, error) { val, err := redisClient.HGet(fmt.Sprintf("%s:%s", searchType, searchTerm), "content").Result() if err != nil { return "", errors.New("String not found.") } else { return val, nil } } func loreNewString(nick, newString, newType string, redisClient *redis.Client) error { s := strings.SplitN(newString, " ", 2) command, content := s[0], []byte(s[1]) stripContent := strings.Replace(fmt.Sprintf("%s", content), "<", "", -1) stripLinks := strings.Replace(stripContent, ">", "", -1) // dont allow certain chars if strings.ContainsAny(command, ";:,.'\"!$%^*()/\\") { // reject user input, it has unwanted chars return errors.New("error: entry contains unwanted characters") } t := time.Now() // create a timestamp to use cdate := t.Format("2006-01-02 15:04:05") // create the redis hash _, err := redisClient.HMSet(fmt.Sprintf("%s:%s", newType, command), map[string]string{ "content": stripLinks, "cdate": cdate, "owner": nick, }).Result() if err != nil { glogger.Error.Println("error setting redis hash") return errors.New("error setting redis hash") } // add lore to index err = redisClient.SAdd(fmt.Sprintf("index:%s:added", newType), command).Err() if err != nil { glogger.Error.Println("error updating redis index") return errors.New("error updating redis index") } return nil } func loreRmString(nick, rmString, rmType string, redisClient *redis.Client) error { t := time.Now() // remove redis hash containing lore and metadata redisClient.Del(fmt.Sprintf("%s:%s", rmType, rmString)) // create a timestamp to use rmdate := t.Format("2006-01-02 15:04:05") // create the redis hash _, err := redisClient.HMSet(fmt.Sprintf("%s:%s", rmType, rmString), map[string]string{ "rmdate": rmdate, "rmby": nick, }).Result() if err != nil { glogger.Error.Println("error setting redis hash") return errors.New("error setting redis hash") } // add lore to index redisClient.SAdd(fmt.Sprintf("index:%s:removed", rmType), rmString).Err() if err != nil { glogger.Error.Printf("error removing lore from 'index:%s:removed'\n", rmType) } // remove lore form added index redisClient.SRem(fmt.Sprintf("index:%s:added", rmType), rmString).Err() if err != nil { glogger.Error.Printf("error removing lore from 'index:%s:added'\n", rmType) } return nil } func loreAttrQuery(queryString, queryType, queryAttr string, redisClient *redis.Client) (string, error) { val, err := redisClient.HGet(fmt.Sprintf("%s:%s", queryType, queryAttr), queryString).Result() if err != nil { return "", errors.New("String not found.") } else { return val, nil } }