package main import ( "crypto/sha512" "encoding/json" "fmt" "log" "strconv" "strings" "github.com/fasthttp/router" "github.com/valyala/fasthttp" ) func RunWebserv() { r := router.New() r.GET("/", Start) r.GET("/api/season", Season) r.POST("/api/register", Register) log.Fatal(fasthttp.ListenAndServe(":"+strconv.Itoa(*webServerPort), r.Handler)) } func Start(ctx *fasthttp.RequestCtx) { data, err := cache.Get(seasonApiJikan) if err != nil { addErrorToCtx(ctx, err) return } var seasonData SeasonJikan err = json.Unmarshal(data, &seasonData) if err != nil { addErrorToCtx(ctx, err) return } WriteIndex(ctx, &seasonData) ctx.SetContentType("text/html; charset=utf-8") ctx.SetStatusCode(fasthttp.StatusOK) } func Season(ctx *fasthttp.RequestCtx) { data, err := cache.Get(seasonApiJikan) if err != nil { addErrorToCtx(ctx, err) return } var seasonData SeasonJikan err = json.Unmarshal(data, &seasonData) if err != nil { addErrorToCtx(ctx, err) return } _, err = ctx.Write(data) if err != nil { addErrorToCtx(ctx, err) return } ctx.SetContentType("application/json; charset=utf-8") ctx.SetStatusCode(fasthttp.StatusOK) } func Register(ctx *fasthttp.RequestCtx) { if string(ctx.Request.Header.ContentType()) != "application/json" { ctx.SetStatusCode(fasthttp.StatusBadRequest) return } body := ctx.PostBody() var register RegisterData err := json.Unmarshal(body, ®ister) if err != nil { ctx.WriteString(err.Error()) ctx.SetStatusCode(fasthttp.StatusBadRequest) return } if register.MalId == 0 || register.Username == "" || register.Sauce == "" { ctx.WriteString("Sprich JSON du Hurensohn") ctx.SetStatusCode(fasthttp.StatusBadRequest) return } calcSauce := fmt.Sprintf("%x", sha512.Sum512([]byte(registerSecret+strconv.Itoa(register.MalId)+register.Username))) if calcSauce != strings.ToLower(register.Sauce) { ctx.WriteString("Möge die Sauce mit dir sein") ctx.SetStatusCode(fasthttp.StatusBadRequest) return } // TODO REGISTER ctx.SetBody(body) ctx.SetStatusCode(fasthttp.StatusOK) } func addErrorToCtx(ctx *fasthttp.RequestCtx, err error) { ctx.WriteString(err.Error()) ctx.SetStatusCode(fasthttp.StatusInternalServerError) }