summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHorus_Arch2015-02-13 17:22:53 +0100
committerHorus_Arch2015-02-13 17:22:53 +0100
commitd6ab45e8ec5f26004b4efc07383245051d546bf3 (patch)
tree6874e54f4240e31af44140682f53c874a502f1fd
parent218d04ca12051c4330156fc1f3290f27bb24c155 (diff)
downloadstatuspage-d6ab45e8ec5f26004b4efc07383245051d546bf3.tar.gz
Add misc functions.
-rw-r--r--app/controllers/db.go1
-rw-r--r--app/controllers/utilities.go96
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
+}