package controllers import ( "crypto/md5" "fmt" "github.com/garyburd/redigo/redis" "github.com/tanema/revel_mailer" "golang.org/x/crypto/bcrypt" "io" "io/ioutil" "math/rand" "net/http" "time" ) // Returns the content of a webpage as string func Get(url string) (string, error) { response, err := http.Get(url) if err != nil { return "Get request failed.", err } defer response.Body.Close() contents, err := ioutil.ReadAll(response.Body) if er != nil { return "Reading body failed.", err } return string(contents), nil } // Hashs and returns a string (md5) func Hash(content string) string { h := md5.New() io.WriteString(h, content) hash := fmt.Sprintf("%x", h.Sum(nil)) return hash } // Creates a random string func RandomKey() string { letters := []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789") key := make([]rune, 40) for i := range key { key[i] = letters[rand.Intn(len(letters))] } return string(key) } var pool = newPool() // Creates a pool with connections to Redis func newPool() *redis.Pool { return &redis.Pool{ MaxIdle: 3, IdleTimeout: 240 * time.Second, Dial: func() (redis.Conn, error) { //c, err := redis.Dial("tcp", ":6379") if revel.Config.Bool("cache.redis") { // If we use redis as cache we reuse the config part c, err := redis.Dial("tcp", revel.Config.String("cache.hosts")) } else { // Otherwise we use our own configuration c, err := redis.Dial("tcp", revel.Config.String("redis.server")+":"+revel.Config.String("redis.port")) } if err != nil { return nil, err } return c, err }, TestOnBorrow: func(c redis.Conn, t time.Time) error { _, err := c.Do("PING") return err }, } } // Hashs password with bcrypt and returns the string func HashPassword(password string) (string, error) { if password == "" { return nil, nil } p := []byte(password) hash, err := bcrypt.GenerateFromPassword(p, 10) if err != nil { return nil, err } return string(hash) } // Verify password and hash func VerifyPassword(password, hash string) (bool, error) { err := bcrypt.CompareHashAndPassword(hash, password) if err != nil { return false, err } return true, nil }