|
|
@ -2,7 +2,11 @@ package main |
|
|
|
|
|
|
|
|
|
|
|
import ( |
|
|
|
import ( |
|
|
|
"log" |
|
|
|
"log" |
|
|
|
|
|
|
|
"os" |
|
|
|
|
|
|
|
"os/signal" |
|
|
|
|
|
|
|
"syscall" |
|
|
|
"zedshaw.games/webapp/tools" |
|
|
|
"zedshaw.games/webapp/tools" |
|
|
|
|
|
|
|
"zedshaw.games/webapp/data" |
|
|
|
"github.com/gofiber/fiber/v2" |
|
|
|
"github.com/gofiber/fiber/v2" |
|
|
|
"github.com/gofiber/fiber/v2/middleware/logger" |
|
|
|
"github.com/gofiber/fiber/v2/middleware/logger" |
|
|
|
"github.com/gofiber/template/html/v2" |
|
|
|
"github.com/gofiber/template/html/v2" |
|
|
@ -10,29 +14,10 @@ import ( |
|
|
|
_ "github.com/mattn/go-sqlite3" |
|
|
|
_ "github.com/mattn/go-sqlite3" |
|
|
|
"github.com/jmoiron/sqlx" |
|
|
|
"github.com/jmoiron/sqlx" |
|
|
|
sq "github.com/Masterminds/squirrel" |
|
|
|
sq "github.com/Masterminds/squirrel" |
|
|
|
"github.com/gofiber/fiber/v2/middleware/recover" |
|
|
|
recov "github.com/gofiber/fiber/v2/middleware/recover" |
|
|
|
"github.com/gofiber/fiber/v2/middleware/session" |
|
|
|
"github.com/gofiber/fiber/v2/middleware/session" |
|
|
|
) |
|
|
|
) |
|
|
|
|
|
|
|
|
|
|
|
type Login struct { |
|
|
|
|
|
|
|
Username string `db:"username" validate:"required"` |
|
|
|
|
|
|
|
Password string `db:"password" validate:"required"` |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type Link struct { |
|
|
|
|
|
|
|
Id int `db:"id" json:"id"` |
|
|
|
|
|
|
|
StreamId int `db:"stream_id" json:"stream_id" form:"stream_id" validate:"required,numeric"` |
|
|
|
|
|
|
|
Url string `db:"url" json:"url" form:"url" validate:"required,url"` |
|
|
|
|
|
|
|
Description string `db:"description" json:"description" form:"description" validate:"required"` |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
type Stream struct { |
|
|
|
|
|
|
|
Id int `db:"id" json:"id"` |
|
|
|
|
|
|
|
Title string `db:"title" json:"title"` |
|
|
|
|
|
|
|
Description string `db:"description" json:"description"` |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
func main() { |
|
|
|
func main() { |
|
|
|
log.SetFlags(log.LstdFlags | log.Lshortfile) |
|
|
|
log.SetFlags(log.LstdFlags | log.Lshortfile) |
|
|
|
|
|
|
|
|
|
|
@ -48,7 +33,7 @@ func main() { |
|
|
|
Views: engine, |
|
|
|
Views: engine, |
|
|
|
}) |
|
|
|
}) |
|
|
|
app.Use(logger.New()) |
|
|
|
app.Use(logger.New()) |
|
|
|
app.Use(recover.New()) |
|
|
|
app.Use(recov.New()) |
|
|
|
|
|
|
|
|
|
|
|
// handler that returns one json from a sql database
|
|
|
|
// handler that returns one json from a sql database
|
|
|
|
app.Get("/api/stream/", func (c *fiber.Ctx) error { |
|
|
|
app.Get("/api/stream/", func (c *fiber.Ctx) error { |
|
|
@ -56,23 +41,23 @@ func main() { |
|
|
|
sess.Set("fuck", "off") |
|
|
|
sess.Set("fuck", "off") |
|
|
|
|
|
|
|
|
|
|
|
sql, args, err := sq.Select("*").From("stream").ToSql() |
|
|
|
sql, args, err := sq.Select("*").From("stream").ToSql() |
|
|
|
return tools.SelectJson[Stream](db, c, err, sql, args...) |
|
|
|
return tools.SelectJson[data.Stream](db, c, err, sql, args...) |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
app.Get("/api/stream/:id", func (c *fiber.Ctx) error { |
|
|
|
app.Get("/api/stream/:id", func (c *fiber.Ctx) error { |
|
|
|
sql, args, err := sq.Select("*").From("stream").Where("id", c.Params("id")).ToSql() |
|
|
|
sql, args, err := sq.Select("*").From("stream").Where("id", c.Params("id")).ToSql() |
|
|
|
return tools.GetJson[Stream](db, c, err, sql, args...) |
|
|
|
return tools.GetJson[data.Stream](db, c, err, sql, args...) |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
app.Get("/api/stream/:id/links", func (c *fiber.Ctx) error { |
|
|
|
app.Get("/api/stream/:id/links", func (c *fiber.Ctx) error { |
|
|
|
sql, args, err := sq.Select("*").From("stream_link").Where("stream_id", c.Params("id")).ToSql() |
|
|
|
sql, args, err := sq.Select("*").From("stream_link").Where("stream_id", c.Params("id")).ToSql() |
|
|
|
|
|
|
|
|
|
|
|
return tools.SelectJson[Link](db, c, err, sql, args...) |
|
|
|
return tools.SelectJson[data.Link](db, c, err, sql, args...) |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app.Post("/api/login", func (c *fiber.Ctx) error { |
|
|
|
app.Post("/api/login", func (c *fiber.Ctx) error { |
|
|
|
login, err := tools.ReceivePost[Login](c) |
|
|
|
login, err := tools.ReceivePost[data.Login](c) |
|
|
|
|
|
|
|
|
|
|
|
if(err != nil) { |
|
|
|
if(err != nil) { |
|
|
|
log.Println(err) |
|
|
|
log.Println(err) |
|
|
@ -85,7 +70,7 @@ func main() { |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
app.Post("/api/link", func (c *fiber.Ctx) error { |
|
|
|
app.Post("/api/link", func (c *fiber.Ctx) error { |
|
|
|
link, err := tools.ReceivePost[Link](c) |
|
|
|
link, err := tools.ReceivePost[data.Link](c) |
|
|
|
if(err != nil) { |
|
|
|
if(err != nil) { |
|
|
|
log.Println(err) |
|
|
|
log.Println(err) |
|
|
|
c.Redirect("/live/") |
|
|
|
c.Redirect("/live/") |
|
|
@ -111,5 +96,21 @@ func main() { |
|
|
|
}) |
|
|
|
}) |
|
|
|
}) |
|
|
|
}) |
|
|
|
|
|
|
|
|
|
|
|
log.Fatal(app.Listen(":5001")) |
|
|
|
go func() { |
|
|
|
|
|
|
|
if err := app.Listen(":5001"); err != nil { |
|
|
|
|
|
|
|
log.Panic(err) |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
}() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
c := make(chan os.Signal, 1) |
|
|
|
|
|
|
|
signal.Notify(c, os.Interrupt, syscall.SIGINT, syscall.SIGTERM) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
_ = <-c |
|
|
|
|
|
|
|
log.Println("Shutdown now...") |
|
|
|
|
|
|
|
_ = app.Shutdown() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log.Println("Running cleanup...") |
|
|
|
|
|
|
|
db.Close() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
log.Println("Done.") |
|
|
|
} |
|
|
|
} |
|
|
|