diff options
| author | Horus_Arch | 2015-02-13 17:22:53 +0100 |
|---|---|---|
| committer | Horus_Arch | 2015-02-13 17:22:53 +0100 |
| commit | d6ab45e8ec5f26004b4efc07383245051d546bf3 (patch) | |
| tree | 6874e54f4240e31af44140682f53c874a502f1fd /app | |
| parent | 218d04ca12051c4330156fc1f3290f27bb24c155 (diff) | |
| download | statuspage-d6ab45e8ec5f26004b4efc07383245051d546bf3.tar.gz | |
Add misc functions.
Diffstat (limited to 'app')
| -rw-r--r-- | app/controllers/db.go | 1 | ||||
| -rw-r--r-- | app/controllers/utilities.go | 96 |
2 files changed, 97 insertions, 0 deletions
diff --git a/app/controllers/db.go b/app/controllers/db.go index f1ff18a..e96cb63 100644 --- a/app/controllers/db.go +++ b/app/controllers/db.go @@ -4,6 +4,7 @@ import ( "github.com/jinzhu/gorm" _ "github.com/mattn/go-sqlite3" "github.com/revel/revel" + "time" ) /* Maybe worth saving uptime history? */ diff --git a/app/controllers/utilities.go b/app/controllers/utilities.go new file mode 100644 index 0000000..99720b8 --- /dev/null +++ b/app/controllers/utilities.go @@ -0,0 +1,96 @@ +package controllers + +import ( + "crypto/md5" + "fmt" + // "github.com/garyburd/redigo/redis" + "github.com/revel/revel" + "golang.org/x/crypto/bcrypt" + "io" + "io/ioutil" + "math/rand" + "net/http" + "time" +) + +// Returns the content of a webpage as string +func HttpGet(url string) (http.Header, string, error) { + response, err := http.Get(url) + if err != nil { + return nil, "Get request failed.", err + } + + defer response.Body.Close() + contents, err := ioutil.ReadAll(response.Body) + if err != nil { + return nil, "Reading body failed.", err + } + + return response.Header, 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") + c, err := redis.Dial("tcp", revel.Config.StringDefault("redis.server", "127.0.0.1")+":"+revel.Config.StringDefault("redis.port", "6379")) + 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 + } + p := []byte(password) + hash, err := bcrypt.GenerateFromPassword(p, 10) + if err != nil { + return "", err + } + return string(hash), nil +} + +// Verify password and hash +func VerifyPassword(password, hash string) (bool, error) { + err := bcrypt.CompareHashAndPassword([]byte(hash), []byte(password)) + if err != nil { + return false, err + } + return true, nil +} |
