pull/44/merge
Hunter Long 2018-07-27 20:24:54 -07:00
parent 7526a7b083
commit c27f6a6f30
9 changed files with 108 additions and 44 deletions

View File

@ -22,7 +22,7 @@ const (
) )
func CatchCLI(args []string) { func CatchCLI(args []string) {
dir := utils.Dir() dir := utils.Directory
switch args[1] { switch args[1] {
case "version": case "version":
fmt.Printf("Statup v%v\n", VERSION) fmt.Printf("Statup v%v\n", VERSION)

View File

@ -21,19 +21,18 @@ import (
var ( var (
route *mux.Router route *mux.Router
testSession *sessions.Session testSession *sessions.Session
gopath string dir string
) )
func init() { func init() {
gopath := os.Getenv("GOPATH") dir = utils.Directory
gopath += "/src/github.com/hunterlong/statup"
} }
func RunInit(t *testing.T) { func RunInit(t *testing.T) {
core.RenderBoxes() core.RenderBoxes()
os.Remove(gopath + "/statup.db") os.Remove(dir + "/statup.db")
os.Remove(gopath + "/cmd/config.yml") os.Remove(dir + "/cmd/config.yml")
os.Remove(gopath + "/cmd/index.html") os.Remove(dir + "/cmd/index.html")
route = handlers.Router() route = handlers.Router()
LoadDotEnvs() LoadDotEnvs()
core.CoreApp = core.NewCore() core.CoreApp = core.NewCore()
@ -186,14 +185,13 @@ func TestExportCommand(t *testing.T) {
c.Run() c.Run()
t.Log(c.Stdout()) t.Log(c.Stdout())
assert.True(t, c.StdoutContains("Exporting Static 'index.html' page")) assert.True(t, c.StdoutContains("Exporting Static 'index.html' page"))
assert.True(t, fileExists(gopath+"/cmd/index.html")) assert.True(t, fileExists(dir+"/cmd/index.html"))
} }
func TestAssetsCommand(t *testing.T) { func TestAssetsCommand(t *testing.T) {
c := testcli.Command("statup", "assets") c := testcli.Command("statup", "assets")
c.Run() c.Run()
t.Log(c.Stdout()) t.Log(c.Stdout())
dir := utils.Dir()
assert.True(t, fileExists(dir+"/assets/robots.txt")) assert.True(t, fileExists(dir+"/assets/robots.txt"))
assert.True(t, fileExists(dir+"/assets/js/main.js")) assert.True(t, fileExists(dir+"/assets/js/main.js"))
assert.True(t, fileExists(dir+"/assets/css/base.css")) assert.True(t, fileExists(dir+"/assets/css/base.css"))
@ -201,7 +199,6 @@ func TestAssetsCommand(t *testing.T) {
} }
func RunMakeDatabaseConfig(t *testing.T, db string) { func RunMakeDatabaseConfig(t *testing.T, db string) {
dir := utils.Dir()
port := 5432 port := 5432
if db == "mysql" { if db == "mysql" {
port = 3306 port = 3306
@ -562,10 +559,10 @@ func RunSettingsHandler(t *testing.T) {
} }
func Cleanup(t *testing.T) { func Cleanup(t *testing.T) {
os.Remove(gopath + "/cmd/statup.db") os.Remove(dir + "/statup.db")
//os.Remove(gopath+"/cmd/config.yml") //os.Remove(gopath+"/cmd/config.yml")
os.RemoveAll(gopath + "/cmd/assets") os.RemoveAll(dir + "/assets")
os.RemoveAll(gopath + "/cmd/logs") os.RemoveAll(dir + "/logs")
} }
func fileExists(file string) bool { func fileExists(file string) bool {

View File

@ -92,9 +92,6 @@ func ExecuteResponse(w http.ResponseWriter, r *http.Request, file string, data i
"underscore": func(html string) string { "underscore": func(html string) string {
return utils.UnderScoreString(html) return utils.UnderScoreString(html)
}, },
"User": func() *types.User {
return SessionUser(r)
},
}) })
t, _ = t.Parse(nav) t, _ = t.Parse(nav)
t, _ = t.Parse(footer) t, _ = t.Parse(footer)

View File

@ -308,6 +308,14 @@ func TestViewTCPServicesHandler(t *testing.T) {
assert.Contains(t, body, "Statup made with ❤️") assert.Contains(t, body, "Statup made with ❤️")
} }
func TestServicesDeleteFailuresHandler(t *testing.T) {
req, err := http.NewRequest("GET", "/service/7/delete_failures", nil)
assert.Nil(t, err)
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
}
func TestServicesUpdateHandler(t *testing.T) { func TestServicesUpdateHandler(t *testing.T) {
form := url.Values{} form := url.Values{}
form.Add("name", "The Bravery - An Honest Mistake") form.Add("name", "The Bravery - An Honest Mistake")
@ -386,6 +394,27 @@ func TestViewSettingsHandler(t *testing.T) {
assert.Contains(t, body, "Statup made with ❤️") assert.Contains(t, body, "Statup made with ❤️")
} }
func TestSaveAssetsHandler(t *testing.T) {
req, err := http.NewRequest("GET", "/settings/build", nil)
assert.Nil(t, err)
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
assert.FileExists(t, utils.Directory+"/assets/css/base.css")
assert.FileExists(t, utils.Directory+"/assets/js/main.js")
assert.DirExists(t, utils.Directory+"/assets")
assert.True(t, core.UsingAssets)
}
func TestDeleteAssetsHandler(t *testing.T) {
req, err := http.NewRequest("GET", "/settings/delete_assets", nil)
assert.Nil(t, err)
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
assert.False(t, core.UsingAssets)
}
func TestPrometheusHandler(t *testing.T) { func TestPrometheusHandler(t *testing.T) {
req, err := http.NewRequest("GET", "/metrics", nil) req, err := http.NewRequest("GET", "/metrics", nil)
req.Header.Set("Authorization", core.CoreApp.ApiSecret) req.Header.Set("Authorization", core.CoreApp.ApiSecret)
@ -397,6 +426,52 @@ func TestPrometheusHandler(t *testing.T) {
assert.Contains(t, body, "statup_total_services 6") assert.Contains(t, body, "statup_total_services 6")
} }
func TestSaveNotificationHandler(t *testing.T) {
form := url.Values{}
form.Add("enable", "on")
form.Add("host", "smtp.emailer.com")
form.Add("port", "587")
form.Add("username", "exampleuser")
form.Add("password", "password123")
form.Add("var1", "info@betatude.com")
form.Add("var2", "sendto@gmail.com")
form.Add("api_key", "")
form.Add("api_secret", "")
form.Add("limits", "7")
req, err := http.NewRequest("POST", "/settings/notifier/1", strings.NewReader(form.Encode()))
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
assert.Nil(t, err)
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 303, rr.Code)
}
func TestViewNotificationSettingsHandler(t *testing.T) {
req, err := http.NewRequest("GET", "/settings", nil)
assert.Nil(t, err)
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
body := rr.Body.String()
assert.Equal(t, 200, rr.Code)
assert.Contains(t, body, "<title>Statup | Settings</title>")
assert.Contains(t, body, `value="exampleuser" id="smtp_username"`)
assert.Contains(t, body, `value="##########" id="smtp_password"`)
assert.Contains(t, body, `value="587" id="smtp_port"`)
assert.Contains(t, body, `value="info@betatude.com" id="outgoing_email_address"`)
assert.Contains(t, body, `value="sendto@gmail.com" id="send_alerts_to"`)
assert.Contains(t, body, `value="7" id="limits_per_hour_email"`)
assert.Contains(t, body, `id="switch-email" checked`)
assert.Contains(t, body, "Statup made with ❤️")
}
func TestError404Handler(t *testing.T) {
req, err := http.NewRequest("GET", "/404me", nil)
assert.Nil(t, err)
rr := httptest.NewRecorder()
Router().ServeHTTP(rr, req)
assert.Equal(t, 404, rr.Code)
}
func TestLogoutHandler(t *testing.T) { func TestLogoutHandler(t *testing.T) {
req, err := http.NewRequest("GET", "/logout", nil) req, err := http.NewRequest("GET", "/logout", nil)
assert.Nil(t, err) assert.Nil(t, err)

View File

@ -68,10 +68,11 @@ func SaveAssetsHandler(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "/", http.StatusSeeOther) http.Redirect(w, r, "/", http.StatusSeeOther)
return return
} }
core.CreateAllAssets(".") dir := utils.Directory
err := core.CompileSASS(".") core.CreateAllAssets(dir)
err := core.CompileSASS(dir)
if err != nil { if err != nil {
core.CopyToPublic(core.CssBox, "css", "base.css") core.CopyToPublic(core.CssBox, dir+"/assets/css", "base.css")
utils.Log(2, "Default 'base.css' was insert because SASS did not work.") utils.Log(2, "Default 'base.css' was insert because SASS did not work.")
} }
core.UsingAssets = true core.UsingAssets = true

View File

@ -1,7 +1,6 @@
package handlers package handlers
import ( import (
"fmt"
"github.com/gorilla/mux" "github.com/gorilla/mux"
"github.com/hunterlong/statup/core" "github.com/hunterlong/statup/core"
"github.com/hunterlong/statup/types" "github.com/hunterlong/statup/types"
@ -10,23 +9,6 @@ import (
"strconv" "strconv"
) )
func SessionUser(r *http.Request) *types.User {
session, _ := Store.Get(r, COOKIE_KEY)
if session == nil {
return nil
}
uuid := session.Values["user_id"]
var user *types.User
col := core.DbSession.Collection("users")
res := col.Find("id", uuid)
err := res.One(&user)
if err != nil {
utils.Log(3, fmt.Sprintf("cannot fetch user %v", uuid))
return nil
}
return user
}
func UsersHandler(w http.ResponseWriter, r *http.Request) { func UsersHandler(w http.ResponseWriter, r *http.Request) {
if !IsAuthenticated(r) { if !IsAuthenticated(r) {
http.Redirect(w, r, "/", http.StatusSeeOther) http.Redirect(w, r, "/", http.StatusSeeOther)

View File

@ -20,23 +20,23 @@ var (
func InitLogs() error { func InitLogs() error {
var err error var err error
if _, err := os.Stat("./logs"); os.IsNotExist(err) { if _, err := os.Stat(Directory + "/logs"); os.IsNotExist(err) {
os.Mkdir("./logs", 0777) os.Mkdir(Directory+"/logs", 0777)
} }
file, err := os.Create("./logs/statup.log") file, err := os.Create(Directory + "/logs/statup.log")
if err != nil { if err != nil {
return err return err
} }
defer file.Close() defer file.Close()
logFile, err = os.OpenFile("./logs/statup.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0755) logFile, err = os.OpenFile(Directory+"/logs/statup.log", os.O_RDWR|os.O_CREATE|os.O_APPEND, 0755)
if err != nil { if err != nil {
log.Printf("ERROR opening file: %v", err) log.Printf("ERROR opening file: %v", err)
return err return err
} }
ljLogger = &lumberjack.Logger{ ljLogger = &lumberjack.Logger{
Filename: "./logs/statup.log", Filename: Directory + "/logs/statup.log",
MaxSize: 16, MaxSize: 16,
MaxBackups: 3, MaxBackups: 3,
MaxAge: 28, MaxAge: 28,

View File

@ -9,6 +9,14 @@ import (
"time" "time"
) )
var (
Directory string
)
func init() {
Directory = dir()
}
func StringInt(s string) int64 { func StringInt(s string) int64 {
num, _ := strconv.Atoi(s) num, _ := strconv.Atoi(s)
return int64(num) return int64(num)
@ -18,7 +26,7 @@ func IntString(s int) string {
return strconv.Itoa(s) return strconv.Itoa(s)
} }
func Dir() string { func dir() string {
dir, err := os.Getwd() dir, err := os.Getwd()
if err != nil { if err != nil {
return "." return "."

View File

@ -13,7 +13,7 @@ func TestInitLogs(t *testing.T) {
} }
func TestDir(t *testing.T) { func TestDir(t *testing.T) {
assert.Contains(t, Dir(), "github.com/hunterlong/statup") assert.Contains(t, Directory, "github.com/hunterlong/statup")
} }
func TestLog(t *testing.T) { func TestLog(t *testing.T) {
@ -25,6 +25,10 @@ func TestLog(t *testing.T) {
assert.Nil(t, Log(5, errors.New("this is a 5 level error"))) assert.Nil(t, Log(5, errors.New("this is a 5 level error")))
} }
func TestDeleteFile(t *testing.T) {
assert.True(t, DeleteFile(Directory+"/logs/statup.log"))
}
func TestLogHTTP(t *testing.T) { func TestLogHTTP(t *testing.T) {
req, err := http.NewRequest("GET", "/", nil) req, err := http.NewRequest("GET", "/", nil)
assert.Nil(t, err) assert.Nil(t, err)