now seems to work for the most part

This commit is contained in:
Jeffrey Paul 2019-10-27 06:26:07 -07:00
parent e0102004eb
commit b4a7f23815
4 changed files with 43 additions and 16 deletions

View File

@ -23,11 +23,9 @@ ifeq ($(UNAME_S),Darwin)
endif
ifneq ($(UNAME_S),Darwin)
GOFLAGS := -ldflags "-static -linkmode external -extldflags $(GOLDFLAGS)"
GOFLAGS = -ldflags "-linkmode external -extldflags -static $(GOLDFLAGS)"
endif
default: run
run: build

39
merp.go
View File

@ -4,10 +4,10 @@ import "encoding/json"
import "net/http"
import "regexp"
import "time"
import "fmt"
import "github.com/rs/zerolog/log"
import "github.com/gin-gonic/gin"
import "github.com/google/uuid"
import "github.com/rs/zerolog/log"
import "github.com/sneak/merp/models"
func thingRegex() *regexp.Regexp {
@ -38,9 +38,14 @@ func GetLatestMerp() gin.HandlerFunc {
*/
func HandleNewMerp() gin.HandlerFunc {
// server startup time
THING_REGEX := thingRegex()
// establish db connection *first*, before requests
orm := models.GetOrmObject()
h := func(c *gin.Context) {
// request time
thing := c.Param("thing")
if THING_REGEX.MatchString(thing) == false {
log.Debug().Msgf("%s didnt match", thing)
@ -54,12 +59,19 @@ func HandleNewMerp() gin.HandlerFunc {
log.Debug().Msgf("%s matched", thing)
//web.Get(`/merp/for/([A-Za-z0-9\-\_\.]+)`, merpHandler)
content := gin.H{}
// FIXME rate limit this a bit on thing+clientip+json to cut down on
// repeated messages
content := make(map[string]interface{})
respContent := gin.H{}
// FIXME support POST data as well
for k, v := range c.Request.URL.Query() {
content[k] = v[0]
respContent[k] = v[0]
}
u := uuid.New()
at := time.Now().UTC()
atString := at.Format(time.RFC3339)
@ -71,7 +83,7 @@ func HandleNewMerp() gin.HandlerFunc {
gin.H{
"this": "failed",
"status": http.StatusPreconditionFailed,
"because": fmt.Sprintf("%s", jsonerr),
"because": jsonerr.Error(),
},
)
return
@ -81,12 +93,22 @@ func HandleNewMerp() gin.HandlerFunc {
Created: at,
Thing: thing,
Content: string(serialized),
UUID: u.String(),
}
orm := models.GetOrmObject()
res, err := orm.Insert(&merp)
_, err := orm.Insert(&merp)
log.Info().Msgf("res: %s, err: %s", res, err)
if err != nil {
c.JSON(
http.StatusPreconditionFailed,
gin.H{
"this": "failed",
"status": http.StatusPreconditionFailed,
"because": err.Error(),
},
)
return
}
c.JSON(http.StatusOK, gin.H{
"this": "succeeded",
@ -95,7 +117,8 @@ func HandleNewMerp() gin.HandlerFunc {
"with": gin.H{
"thing": thing,
"created": atString,
"content": content,
"content": respContent,
"id": u.String(),
},
})
}

View File

@ -9,12 +9,17 @@ import _ "github.com/lib/pq"
var ormObject orm.Ormer
func Initialize() {
if os.Getenv("DEBUG") != "" {
orm.Debug = true
}
ConnectToDb()
SyncDB()
}
// ConnectToDb - Initializes the ORM and Connection to the postgres DB
func ConnectToDb() {
orm.DefaultTimeLoc = time.UTC
POSTGRES_DB_URL := os.Getenv("POSTGRES_DB_URL")

View File

@ -3,9 +3,10 @@ package models
import "time"
type Merp struct {
ID int `json:"id" orm:"auto"`
Content string `json:"content" orm:"type(json)"`
Created time.Time `orm:"auto_now_add;type(datetime)"`
RemoteIP string `json:"remoteIP" orm:"size(128)"`
Thing string `json:"thing" orm:"size(128)"`
ID int `json:"id" orm:"auto;column(id)"`
Content string `json:"content" orm:"type(jsonb);column(content)"`
Created time.Time `orm:"auto_now_add;type(datetime);column(created)"`
RemoteIP string `json:"remoteIP" orm:"size(128);column(remoteip)"`
Thing string `json:"thing" orm:"size(256)"`
UUID string `json:"uuid" orm:"size(36);column(uuid)"`
}