pull/429/head
hunterlong 2020-03-15 23:51:15 -07:00
parent 6132fe68f1
commit 106dd1a47c
11 changed files with 42 additions and 25 deletions

View File

@ -26,7 +26,7 @@ RUN go get github.com/stretchr/testify/assert && \
go get github.com/cortesi/modd/cmd/modd && \
go get github.com/crazy-max/xgo
COPY . .
COPY --from=frontend /statping/ ./frontend/
COPY --from=frontend /statping/dist/ ./source/dist/
RUN make clean generate embed build
RUN chmod a+x statping && mv statping /go/bin/statping
# /go/bin/statping - statping binary

View File

@ -72,10 +72,10 @@ docker-vue:
docker-test:
docker-compose -f docker-compose.test.yml up --remove-orphans
push-base: docker-base
push-base: clean compile docker-base
docker push statping/statping:base
push-vue: clean docker-base docker-vue
push-vue: clean compile docker-base docker-vue
docker push statping/statping:base
docker push statping/statping:vue

View File

@ -0,0 +1,9 @@
<template>
<div class="col-12 bg-white p-4" v-html="<a class=\"scrollclick\" href=\"#\" data-id=\"page_0\">Types of Monitoring</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_1\">Features</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_2\">Start Statping</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_3\">Linux</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_4\">Mac</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_5\">Windows</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_6\">AWS EC2</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_7\">Docker</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_8\">Mobile App</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_9\">Heroku</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_10\">API</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_11\">Makefile</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_12\">Notifiers</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_13\">Notifier Events</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_14\">Notifier Example</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_15\">Prometheus Exporter</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_16\">SSL</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_17\">Config with .env File</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_18\">Static Export</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_19\">Statping Plugins</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_20\">Statuper</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_21\">Build and Test</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_22\">Contributing</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_23\">PGP Signature</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_24\">Testing</a><br><a class=\"scrollclick\" href=\"#\" data-id=\"page_25\">Deployment</a><br>\n\n<div class=\"mt-5\" id=\"page_0\"><h1>Types of Monitoring</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_1\"><h1>Features</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_2\"><h1>Start Statping</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_3\"><h1>Linux</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_4\"><h1>Mac</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_5\"><h1>Windows</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_6\"><h1>AWS EC2</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_7\"><h1>Docker</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_8\"><h1>Mobile App</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_9\"><h1>Heroku</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_10\"><h1>API</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_11\"><h1>Makefile</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_12\"><h1>Notifiers</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_13\"><h1>Notifier Events</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_14\"><h1>Notifier Example</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_15\"><h1>Prometheus Exporter</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_16\"><h1>SSL</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_17\"><h1>Config with .env File</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_18\"><h1>Static Export</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_19\"><h1>Statping Plugins</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_20\"><h1>Statuper</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_21\"><h1>Build and Test</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_22\"><h1>Contributing</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_23\"><h1>PGP Signature</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_24\"><h1>Testing</h1></div>\n\n\n<div class=\"mt-5\" id=\"page_25\"><h1>Deployment</h1></div>\n"></div>
</template>
<script>
export default {
name: 'Help',
}
</script>

View File

@ -55,8 +55,8 @@ func apiIndexHandler(r *http.Request) interface{} {
func apiRenewHandler(w http.ResponseWriter, r *http.Request) {
var err error
core.App.ApiKey = utils.NewSHA1Hash(40)
core.App.ApiSecret = utils.NewSHA1Hash(40)
core.App.ApiKey = utils.NewSHA256Hash()
core.App.ApiSecret = utils.NewSHA256Hash()
err = core.App.Update()
if err != nil {
sendErrorJson(err, w, r)

View File

@ -99,6 +99,10 @@ func apiThemeSaveHandler(w http.ResponseWriter, r *http.Request) {
sendErrorJson(err, w, r)
return
}
if err := source.SaveAsset([]byte(themes.Base), "scss/main.scss"); err != nil {
sendErrorJson(err, w, r)
return
}
if err := source.SaveAsset([]byte(themes.Variables), "scss/variables.scss"); err != nil {
sendErrorJson(err, w, r)
return

View File

@ -85,6 +85,9 @@ func (d *DbConfig) DropDatabase() error {
}
func (d *DbConfig) Close() {
if d == nil {
return
}
if d.Db != nil {
d.Db.Close()
}

View File

@ -12,14 +12,18 @@ func init() {
os.Setenv("MIGRATION_ID", utils.ToString(latestMigration))
}
func (c *DbConfig) genericMigration(alterStr string) error {
if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE hits %s COLUMN latency TYPE BIGINT;", alterStr)).Error(); err != nil {
func (c *DbConfig) genericMigration(alterStr string, isPostgres bool) error {
var extra string
if isPostgres {
extra = " TYPE"
}
if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE hits %s COLUMN latency%s BIGINT;", alterStr, extra)).Error(); err != nil {
return err
}
if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE hits %s COLUMN ping_time TYPE BIGINT;", alterStr)).Error(); err != nil {
if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE hits %s COLUMN ping_time%s BIGINT;", alterStr, extra)).Error(); err != nil {
return err
}
if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE failures %s COLUMN latency TYPE BIGINT;", alterStr)).Error(); err != nil {
if err := c.Db.Exec(fmt.Sprintf("ALTER TABLE failures %s COLUMN latency%s BIGINT;", alterStr, extra)).Error(); err != nil {
return err
}
if err := c.Db.Exec("UPDATE hits SET latency = CAST(latency * 1000000 AS bigint);").Error(); err != nil {

View File

@ -27,11 +27,11 @@ func (c *DbConfig) DatabaseChanges() error {
switch c.Db.DbType() {
case "mysql":
if err := c.genericMigration("MODIFY"); err != nil {
if err := c.genericMigration("MODIFY", false); err != nil {
return err
}
case "postgres":
if err := c.genericMigration("ALTER"); err != nil {
if err := c.genericMigration("ALTER", true); err != nil {
return err
}
default:

View File

@ -37,8 +37,8 @@ func Select() (*Core, error) {
func (c *Core) Create() error {
c.ApiKey = c.ApiKey
c.ApiSecret = c.ApiSecret
apiKey := utils.Getenv("API_KEY", utils.NewSHA1Hash(40)).(string)
apiSecret := utils.Getenv("API_SECRET", utils.NewSHA1Hash(40)).(string)
apiKey := utils.Getenv("API_KEY", utils.NewSHA256Hash()).(string)
apiSecret := utils.Getenv("API_SECRET", utils.NewSHA256Hash()).(string)
if c.ApiKey == "" || c.ApiSecret == "" {
c.ApiSecret = apiSecret

View File

@ -53,7 +53,7 @@ func (u *User) Delete() error {
func (u *User) BeforeCreate() error {
u.Password = utils.HashPassword(u.Password)
u.ApiKey = utils.NewSHA1Hash(16)
u.ApiSecret = utils.NewSHA1Hash(16)
u.ApiKey = utils.NewSHA256Hash()
u.ApiSecret = utils.NewSHA256Hash()
return nil
}

View File

@ -16,7 +16,7 @@
package utils
import (
"crypto/sha1"
"crypto/sha256"
"fmt"
"golang.org/x/crypto/bcrypt"
"math/rand"
@ -30,16 +30,13 @@ func HashPassword(password string) string {
}
// NewSHA1Hash returns a random SHA1 hash based on a specific length
func NewSHA1Hash(n ...int) string {
noRandomCharacters := 32
if len(n) > 0 {
noRandomCharacters = n[0]
func NewSHA256Hash() string {
d := make([]byte, 10)
rand.Seed(Now().UnixNano())
if _, err := rand.Read(d); err == nil {
fmt.Printf("%x", sha256.Sum256(d))
}
randString := RandomString(noRandomCharacters)
hash := sha1.New()
hash.Write([]byte(randString))
bs := hash.Sum(nil)
return fmt.Sprintf("%x", bs)
return fmt.Sprintf("%x", d)
}
var characterRunes = []rune("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789")