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) {
dir := utils.Dir()
dir := utils.Directory
switch args[1] {
case "version":
fmt.Printf("Statup v%v\n", VERSION)

View File

@ -21,19 +21,18 @@ import (
var (
route *mux.Router
testSession *sessions.Session
gopath string
dir string
)
func init() {
gopath := os.Getenv("GOPATH")
gopath += "/src/github.com/hunterlong/statup"
dir = utils.Directory
}
func RunInit(t *testing.T) {
core.RenderBoxes()
os.Remove(gopath + "/statup.db")
os.Remove(gopath + "/cmd/config.yml")
os.Remove(gopath + "/cmd/index.html")
os.Remove(dir + "/statup.db")
os.Remove(dir + "/cmd/config.yml")
os.Remove(dir + "/cmd/index.html")
route = handlers.Router()
LoadDotEnvs()
core.CoreApp = core.NewCore()
@ -186,14 +185,13 @@ func TestExportCommand(t *testing.T) {
c.Run()
t.Log(c.Stdout())
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) {
c := testcli.Command("statup", "assets")
c.Run()
t.Log(c.Stdout())
dir := utils.Dir()
assert.True(t, fileExists(dir+"/assets/robots.txt"))
assert.True(t, fileExists(dir+"/assets/js/main.js"))
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) {
dir := utils.Dir()
port := 5432
if db == "mysql" {
port = 3306
@ -562,10 +559,10 @@ func RunSettingsHandler(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.RemoveAll(gopath + "/cmd/assets")
os.RemoveAll(gopath + "/cmd/logs")
os.RemoveAll(dir + "/assets")
os.RemoveAll(dir + "/logs")
}
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 {
return utils.UnderScoreString(html)
},
"User": func() *types.User {
return SessionUser(r)
},
})
t, _ = t.Parse(nav)
t, _ = t.Parse(footer)

View File

@ -308,6 +308,14 @@ func TestViewTCPServicesHandler(t *testing.T) {
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) {
form := url.Values{}
form.Add("name", "The Bravery - An Honest Mistake")
@ -386,6 +394,27 @@ func TestViewSettingsHandler(t *testing.T) {
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) {
req, err := http.NewRequest("GET", "/metrics", nil)
req.Header.Set("Authorization", core.CoreApp.ApiSecret)
@ -397,6 +426,52 @@ func TestPrometheusHandler(t *testing.T) {
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) {
req, err := http.NewRequest("GET", "/logout", nil)
assert.Nil(t, err)

View File

@ -68,10 +68,11 @@ func SaveAssetsHandler(w http.ResponseWriter, r *http.Request) {
http.Redirect(w, r, "/", http.StatusSeeOther)
return
}
core.CreateAllAssets(".")
err := core.CompileSASS(".")
dir := utils.Directory
core.CreateAllAssets(dir)
err := core.CompileSASS(dir)
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.")
}
core.UsingAssets = true

View File

@ -1,7 +1,6 @@
package handlers
import (
"fmt"
"github.com/gorilla/mux"
"github.com/hunterlong/statup/core"
"github.com/hunterlong/statup/types"
@ -10,23 +9,6 @@ import (
"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) {
if !IsAuthenticated(r) {
http.Redirect(w, r, "/", http.StatusSeeOther)

View File

@ -20,23 +20,23 @@ var (
func InitLogs() error {
var err error
if _, err := os.Stat("./logs"); os.IsNotExist(err) {
os.Mkdir("./logs", 0777)
if _, err := os.Stat(Directory + "/logs"); os.IsNotExist(err) {
os.Mkdir(Directory+"/logs", 0777)
}
file, err := os.Create("./logs/statup.log")
file, err := os.Create(Directory + "/logs/statup.log")
if err != nil {
return err
}
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 {
log.Printf("ERROR opening file: %v", err)
return err
}
ljLogger = &lumberjack.Logger{
Filename: "./logs/statup.log",
Filename: Directory + "/logs/statup.log",
MaxSize: 16,
MaxBackups: 3,
MaxAge: 28,

View File

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

View File

@ -13,7 +13,7 @@ func TestInitLogs(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) {
@ -25,6 +25,10 @@ func TestLog(t *testing.T) {
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) {
req, err := http.NewRequest("GET", "/", nil)
assert.Nil(t, err)