aboutsummaryrefslogtreecommitdiff
path: root/pkg
diff options
context:
space:
mode:
Diffstat (limited to 'pkg')
-rw-r--r--pkg/ext/fileserver.go33
-rw-r--r--pkg/ext/middleware.go74
-rw-r--r--pkg/ext/responses.go30
-rw-r--r--pkg/ext/router.go45
-rw-r--r--pkg/view/auth.go77
-rw-r--r--pkg/view/filesystem.go16
-rw-r--r--pkg/view/media.go53
-rw-r--r--pkg/view/settings.go57
-rw-r--r--pkg/worker/httpserver.go15
9 files changed, 174 insertions, 226 deletions
diff --git a/pkg/ext/fileserver.go b/pkg/ext/fileserver.go
deleted file mode 100644
index 87c1ae8..0000000
--- a/pkg/ext/fileserver.go
+++ /dev/null
@@ -1,33 +0,0 @@
-package ext
-
-import (
- "io/fs"
- "mime"
- "path/filepath"
-
- "github.com/valyala/fasthttp"
-)
-
-type FileSystem interface {
- Open(name string) (fs.File, error)
-}
-
-// This is a VERY simple file server. It does not take a lot into consideration
-// and it should only be used to return small predictable files, like in the
-// static folder.
-func FileServer(rootFS FileSystem) fasthttp.RequestHandler {
- return func(ctx *fasthttp.RequestCtx) {
- path := ctx.UserValue("filepath").(string)
-
- f, err := rootFS.Open(path)
- if err != nil {
- InternalServerError(ctx, err)
- return
- }
- defer f.Close()
-
- m := mime.TypeByExtension(filepath.Ext(path))
- ctx.SetContentType(m)
- ctx.SetBodyStream(f, -1)
- }
-}
diff --git a/pkg/ext/middleware.go b/pkg/ext/middleware.go
index bcc6c5f..fe2d185 100644
--- a/pkg/ext/middleware.go
+++ b/pkg/ext/middleware.go
@@ -1,22 +1,22 @@
package ext
import (
+ "context"
"encoding/base64"
+ "errors"
+ "net/http"
"time"
"github.com/sirupsen/logrus"
- "github.com/valyala/fasthttp"
"git.sr.ht/~gabrielgio/img/pkg/database/repository"
"git.sr.ht/~gabrielgio/img/pkg/service"
)
-func HTML(next fasthttp.RequestHandler) fasthttp.RequestHandler {
- return func(ctx *fasthttp.RequestCtx) {
- if len(ctx.Request.Header.ContentType()) > 0 {
- ctx.Response.Header.SetContentType("text/html")
- }
- next(ctx)
+func HTML(next http.HandlerFunc) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ w.Header().Set("Content-Type", "text/html")
+ next(w, r)
}
}
@@ -30,17 +30,15 @@ func NewLogMiddleare(log *logrus.Entry) *LogMiddleware {
}
}
-func (l *LogMiddleware) HTTP(next fasthttp.RequestHandler) fasthttp.RequestHandler {
- return func(ctx *fasthttp.RequestCtx) {
+func (l *LogMiddleware) HTTP(next http.HandlerFunc) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
start := time.Now()
- next(ctx)
+ next(w, r)
elapsed := time.Since(start)
l.entry.
WithField("time", elapsed).
- WithField("code", ctx.Response.StatusCode()).
- WithField("path", string(ctx.Path())).
- WithField("bytes", len(ctx.Response.Body())).
- Info(string(ctx.Request.Header.Method()))
+ WithField("path", r.URL.Path).
+ Info(r.Method)
}
}
@@ -56,23 +54,23 @@ func NewAuthMiddleware(key []byte, log *logrus.Entry) *AuthMiddleware {
}
}
-func (a *AuthMiddleware) LoggedIn(next fasthttp.RequestHandler) fasthttp.RequestHandler {
- return func(ctx *fasthttp.RequestCtx) {
- path := string(ctx.Path())
+func (a *AuthMiddleware) LoggedIn(next http.HandlerFunc) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ path := string(r.URL.Path)
if path == "/login" || path == "/initial" {
- next(ctx)
+ next(w, r)
return
}
redirectLogin := "/login?redirect=" + path
- authBase64 := ctx.Request.Header.Cookie("auth")
- if authBase64 == nil {
+ authBase64, err := r.Cookie("auth")
+ if errors.Is(err, http.ErrNoCookie) {
a.entry.Info("No auth provided")
- ctx.Redirect(redirectLogin, 307)
+ http.Redirect(w, r, redirectLogin, http.StatusTemporaryRedirect)
return
}
- auth, err := base64.StdEncoding.DecodeString(string(authBase64))
+ auth, err := base64.StdEncoding.DecodeString(authBase64.Value)
if err != nil {
a.entry.Error(err)
return
@@ -81,20 +79,20 @@ func (a *AuthMiddleware) LoggedIn(next fasthttp.RequestHandler) fasthttp.Request
token, err := service.ReadToken(auth, a.key)
if err != nil {
a.entry.Error(err)
- ctx.Redirect(redirectLogin, 307)
+ http.Redirect(w, r, redirectLogin, http.StatusTemporaryRedirect)
return
}
- ctx.SetUserValue("token", token)
+ r = r.WithContext(context.WithValue(r.Context(), "token", token))
a.entry.
WithField("userID", token.UserID).
WithField("username", token.Username).
Info("user recognized")
- next(ctx)
+ next(w, r)
}
}
-func GetTokenFromCtx(ctx *fasthttp.RequestCtx) *service.Token {
- tokenValue := ctx.UserValue("token")
+func GetTokenFromCtx(w http.ResponseWriter, r *http.Request) *service.Token {
+ tokenValue := r.Context().Value("token")
if token, ok := tokenValue.(*service.Token); ok {
return token
}
@@ -111,31 +109,31 @@ func NewInitialSetupMiddleware(userRepository repository.UserRepository) *Initia
}
}
-func (i *InitialSetupMiddleware) Check(next fasthttp.RequestHandler) fasthttp.RequestHandler {
- return func(ctx *fasthttp.RequestCtx) {
+func (i *InitialSetupMiddleware) Check(next http.HandlerFunc) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
// if user has been set to context it is logged in already
- _, ok := ctx.UserValue("token").(*service.Token)
- if ok {
- next(ctx)
+ token := GetTokenFromCtx(w, r)
+ if token == nil {
+ next(w, r)
return
}
- path := string(ctx.Path())
+ path := r.URL.Path
if path == "/initial" {
- next(ctx)
+ next(w, r)
return
}
- exists, err := i.userRepository.Any(ctx)
+ exists, err := i.userRepository.Any(r.Context())
if err != nil {
- InternalServerError(ctx, err)
+ InternalServerError(w, err)
return
}
if exists {
- next(ctx)
+ next(w, r)
return
}
- ctx.Redirect("/initial", 307)
+ http.Redirect(w, r, "/initial", http.StatusTemporaryRedirect)
}
}
diff --git a/pkg/ext/responses.go b/pkg/ext/responses.go
index dbad5b2..ba58dd5 100644
--- a/pkg/ext/responses.go
+++ b/pkg/ext/responses.go
@@ -1,39 +1,21 @@
package ext
import (
- "bytes"
"fmt"
-
- "github.com/valyala/fasthttp"
+ "net/http"
"git.sr.ht/~gabrielgio/img/templates"
)
-var (
- ContentTypeHTML = []byte("text/html")
-)
-
-func NotFoundHTML(ctx *fasthttp.RequestCtx) {
- templates.WritePageTemplate(ctx, &templates.ErrorPage{
+func NotFound(w http.ResponseWriter, r *http.Request) {
+ templates.WritePageTemplate(w, &templates.ErrorPage{
Err: "Not Found",
})
}
-func NotFound(ctx *fasthttp.RequestCtx) {
- ctx.Response.SetStatusCode(404)
- ct := ctx.Response.Header.ContentType()
- if bytes.Equal(ct, ContentTypeHTML) {
- NotFoundHTML(ctx)
- }
-}
-
-func InternalServerError(ctx *fasthttp.RequestCtx, err error) {
- ctx.Response.SetStatusCode(500)
- templates.WritePageTemplate(ctx, &templates.ErrorPage{
+func InternalServerError(w http.ResponseWriter, err error) {
+ w.WriteHeader(http.StatusInternalServerError)
+ templates.WritePageTemplate(w, &templates.ErrorPage{
Err: fmt.Sprintf("Internal Server Error:\n%s", err.Error()),
})
}
-
-func NoContent(ctx *fasthttp.RequestCtx) {
- ctx.Response.SetStatusCode(204)
-}
diff --git a/pkg/ext/router.go b/pkg/ext/router.go
index 74f0a95..8b9a310 100644
--- a/pkg/ext/router.go
+++ b/pkg/ext/router.go
@@ -1,51 +1,52 @@
package ext
import (
- "github.com/fasthttp/router"
- "github.com/valyala/fasthttp"
+ "net/http"
+
+ "github.com/gorilla/mux"
)
type (
Router struct {
middlewares []Middleware
- fastRouter *router.Router
+ router *mux.Router
}
- Middleware func(next fasthttp.RequestHandler) fasthttp.RequestHandler
- ErrorRequestHandler func(ctx *fasthttp.RequestCtx) error
+ Middleware func(next http.HandlerFunc) http.HandlerFunc
+ ErrorRequestHandler func(w http.ResponseWriter, r *http.Request) error
)
-func NewRouter(nestedRouter *router.Router) *Router {
+func NewRouter(nestedRouter *mux.Router) *Router {
return &Router{
- fastRouter: nestedRouter,
+ router: nestedRouter,
}
}
-func (self *Router) AddMiddleware(middleware Middleware) {
- self.middlewares = append(self.middlewares, middleware)
+func (r *Router) AddMiddleware(middleware Middleware) {
+ r.middlewares = append(r.middlewares, middleware)
}
-func wrapError(next ErrorRequestHandler) fasthttp.RequestHandler {
- return func(ctx *fasthttp.RequestCtx) {
- if err := next(ctx); err != nil {
- ctx.Response.SetStatusCode(500)
- InternalServerError(ctx, err)
+func wrapError(next ErrorRequestHandler) http.HandlerFunc {
+ return func(w http.ResponseWriter, r *http.Request) {
+ if err := next(w, r); err != nil {
+ w.WriteHeader(http.StatusInternalServerError)
+ InternalServerError(w, err)
}
}
}
-func (self *Router) run(next ErrorRequestHandler) fasthttp.RequestHandler {
- return func(ctx *fasthttp.RequestCtx) {
+func (r *Router) run(next ErrorRequestHandler) http.HandlerFunc {
+ return func(w http.ResponseWriter, re *http.Request) {
req := wrapError(next)
- for _, r := range self.middlewares {
+ for _, r := range r.middlewares {
req = r(req)
}
- req(ctx)
+ req(w, re)
}
}
-func (self *Router) GET(path string, handler ErrorRequestHandler) {
- self.fastRouter.GET(path, self.run(handler))
+func (r *Router) GET(path string, handler ErrorRequestHandler) {
+ r.router.HandleFunc(path, r.run(handler)).Methods("GET")
}
-func (self *Router) POST(path string, handler ErrorRequestHandler) {
- self.fastRouter.POST(path, self.run(handler))
+func (r *Router) POST(path string, handler ErrorRequestHandler) {
+ r.router.HandleFunc(path, r.run(handler)).Methods("POSt")
}
diff --git a/pkg/view/auth.go b/pkg/view/auth.go
index 631cfb3..2a4b95e 100644
--- a/pkg/view/auth.go
+++ b/pkg/view/auth.go
@@ -2,8 +2,7 @@ package view
import (
"encoding/base64"
-
- "github.com/valyala/fasthttp"
+ "net/http"
"git.sr.ht/~gabrielgio/img/pkg/ext"
"git.sr.ht/~gabrielgio/img/pkg/service"
@@ -20,71 +19,77 @@ func NewAuthView(userController *service.AuthController) *AuthView {
}
}
-func (v *AuthView) LoginView(ctx *fasthttp.RequestCtx) error {
- templates.WritePageTemplate(ctx, &templates.LoginPage{})
+func (v *AuthView) LoginView(w http.ResponseWriter, r *http.Request) error {
+ templates.WritePageTemplate(w, &templates.LoginPage{})
return nil
}
-func (v *AuthView) Logout(ctx *fasthttp.RequestCtx) error {
- cook := fasthttp.Cookie{}
- cook.SetKey("auth")
- cook.SetValue("")
- cook.SetMaxAge(-1)
- cook.SetHTTPOnly(true)
- cook.SetSameSite(fasthttp.CookieSameSiteDefaultMode)
- ctx.Response.Header.SetCookie(&cook)
+func (v *AuthView) Logout(w http.ResponseWriter, r *http.Request) error {
+ cook := http.Cookie{
+ Name: "auth",
+ Value: "",
+ MaxAge: -1,
+ HttpOnly: true,
+ SameSite: http.SameSiteDefaultMode,
+ }
+ http.SetCookie(w, &cook)
- ctx.Redirect("/", 307)
+ http.Redirect(w, r, "/", http.StatusTemporaryRedirect)
return nil
}
-func (v *AuthView) Login(ctx *fasthttp.RequestCtx) error {
- username := ctx.FormValue("username")
- password := ctx.FormValue("password")
+func (v *AuthView) Login(w http.ResponseWriter, r *http.Request) error {
+ var (
+ username = []byte(r.FormValue("username"))
+ password = []byte(r.FormValue("password"))
+ )
- auth, err := v.userController.Login(ctx, username, password)
+ auth, err := v.userController.Login(r.Context(), username, password)
if err != nil {
return err
}
base64Auth := base64.StdEncoding.EncodeToString(auth)
- cook := fasthttp.Cookie{}
- cook.SetKey("auth")
- cook.SetValue(base64Auth)
- cook.SetHTTPOnly(true)
- cook.SetSameSite(fasthttp.CookieSameSiteDefaultMode)
- ctx.Response.Header.SetCookie(&cook)
+ cook := http.Cookie{
+ Name: "auth",
+ Value: base64Auth,
+ HttpOnly: true,
+ SameSite: http.SameSiteDefaultMode,
+ }
+ http.SetCookie(w, &cook)
- redirect := string(ctx.FormValue("redirect"))
+ redirect := r.FormValue("redirect")
if redirect == "" {
- ctx.Redirect("/", 307)
+ http.Redirect(w, r, "/", http.StatusTemporaryRedirect)
} else {
- ctx.Redirect(redirect, 307)
+ http.Redirect(w, r, redirect, http.StatusTemporaryRedirect)
}
return nil
}
-func Index(ctx *fasthttp.RequestCtx) {
- ctx.Redirect("/login", 307)
+func Index(w http.ResponseWriter, r *http.Request) {
+ http.Redirect(w, r, "/login", http.StatusTemporaryRedirect)
}
-func (v *AuthView) InitialRegisterView(ctx *fasthttp.RequestCtx) error {
- templates.WritePageTemplate(ctx, &templates.RegisterPage{})
+func (v *AuthView) InitialRegisterView(w http.ResponseWriter, r *http.Request) error {
+ templates.WritePageTemplate(w, &templates.RegisterPage{})
return nil
}
-func (v *AuthView) InitialRegister(ctx *fasthttp.RequestCtx) error {
- username := ctx.FormValue("username")
- password := ctx.FormValue("password")
- path := ctx.FormValue("path")
+func (v *AuthView) InitialRegister(w http.ResponseWriter, r *http.Request) error {
+ var (
+ username = []byte(r.FormValue("username"))
+ password = []byte(r.FormValue("password"))
+ path = []byte(r.FormValue("path"))
+ )
- err := v.userController.InitialRegister(ctx, username, password, path)
+ err := v.userController.InitialRegister(r.Context(), username, password, path)
if err != nil {
return err
}
- ctx.Redirect("/login", 307)
+ http.Redirect(w, r, "/login", http.StatusTemporaryRedirect)
return nil
}
diff --git a/pkg/view/filesystem.go b/pkg/view/filesystem.go
index 6a01117..d49ad4f 100644
--- a/pkg/view/filesystem.go
+++ b/pkg/view/filesystem.go
@@ -1,7 +1,7 @@
package view
import (
- "github.com/valyala/fasthttp"
+ "net/http"
"git.sr.ht/~gabrielgio/img/pkg/database/repository"
"git.sr.ht/~gabrielgio/img/pkg/ext"
@@ -31,21 +31,23 @@ func NewFileSystemView(
}
}
-func (self *FileSystemView) Index(ctx *fasthttp.RequestCtx) error {
- pathValue := string(ctx.FormValue("path"))
- token := ext.GetTokenFromCtx(ctx)
+func (self *FileSystemView) Index(w http.ResponseWriter, r *http.Request) error {
+ var (
+ pathValue = r.FormValue("path")
+ token = ext.GetTokenFromCtx(w, r)
+ )
- page, err := self.fsService.GetPage(ctx, token.UserID, pathValue)
+ page, err := self.fsService.GetPage(r.Context(), token.UserID, pathValue)
if err != nil {
return err
}
- settings, err := self.settings.Load(ctx)
+ settings, err := self.settings.Load(r.Context())
if err != nil {
return err
}
- templates.WritePageTemplate(ctx, &templates.FilePage{
+ templates.WritePageTemplate(w, &templates.FilePage{
Page: page,
ShowMode: settings.ShowMode,
ShowOwner: settings.ShowOwner,
diff --git a/pkg/view/media.go b/pkg/view/media.go
index 6e34fd6..c7d84ec 100644
--- a/pkg/view/media.go
+++ b/pkg/view/media.go
@@ -1,10 +1,9 @@
package view
import (
+ "net/http"
"strconv"
- "github.com/valyala/fasthttp"
-
"git.sr.ht/~gabrielgio/img/pkg/database/repository"
"git.sr.ht/~gabrielgio/img/pkg/ext"
"git.sr.ht/~gabrielgio/img/templates"
@@ -18,12 +17,12 @@ type (
}
)
-func getPagination(ctx *fasthttp.RequestCtx) *repository.Pagination {
+func getPagination(w http.ResponseWriter, r *http.Request) *repository.Pagination {
var (
size int
page int
- sizeStr = string(ctx.FormValue("size"))
- pageStr = string(ctx.FormValue("page"))
+ sizeStr = r.FormValue("size")
+ pageStr = r.FormValue("page")
)
if sizeStr == "" {
@@ -60,22 +59,22 @@ func NewMediaView(
}
}
-func (self *MediaView) Index(ctx *fasthttp.RequestCtx) error {
- p := getPagination(ctx)
- token := ext.GetTokenFromCtx(ctx)
+func (self *MediaView) Index(w http.ResponseWriter, r *http.Request) error {
+ p := getPagination(w, r)
+ token := ext.GetTokenFromCtx(w, r)
- userPath, err := self.userRepository.GetPathFromUserID(ctx, token.UserID)
+ userPath, err := self.userRepository.GetPathFromUserID(r.Context(), token.UserID)
if err != nil {
return err
}
p.Path = userPath
- medias, err := self.mediaRepository.List(ctx, p)
+ medias, err := self.mediaRepository.List(r.Context(), p)
if err != nil {
return err
}
- settings, err := self.settingsRepository.Load(ctx)
+ settings, err := self.settingsRepository.Load(r.Context())
if err != nil {
return err
}
@@ -89,43 +88,43 @@ func (self *MediaView) Index(ctx *fasthttp.RequestCtx) error {
Settings: settings,
}
- templates.WritePageTemplate(ctx, page)
+ templates.WritePageTemplate(w, page)
return nil
}
-func (self *MediaView) GetImage(ctx *fasthttp.RequestCtx) error {
- pathHash := string(ctx.FormValue("path_hash"))
+func (self *MediaView) GetImage(w http.ResponseWriter, r *http.Request) error {
+ pathHash := r.FormValue("path_hash")
- media, err := self.mediaRepository.Get(ctx, pathHash)
+ media, err := self.mediaRepository.Get(r.Context(), pathHash)
if err != nil {
return err
}
- ctx.Response.Header.SetContentType(media.MIMEType)
- fasthttp.ServeFileUncompressed(ctx, media.Path)
+ w.Header().Set("Content-Type", media.MIMEType)
+ http.ServeFile(w, r, media.Path)
return nil
}
-func (self *MediaView) GetThumbnail(ctx *fasthttp.RequestCtx) error {
- pathHash := string(ctx.FormValue("path_hash"))
+func (self *MediaView) GetThumbnail(w http.ResponseWriter, r *http.Request) error {
+ pathHash := r.FormValue("path_hash")
- path, err := self.mediaRepository.GetThumbnailPath(ctx, pathHash)
+ path, err := self.mediaRepository.GetThumbnailPath(r.Context(), pathHash)
if err != nil {
- ctx.Redirect("/media/image?path_hash="+pathHash, 307)
+ http.Redirect(w, r, "/media/image?path_hash="+pathHash, http.StatusTemporaryRedirect)
// nolint: nilerr
return nil
}
- ctx.Request.Header.SetContentType("image/jpeg")
- fasthttp.ServeFileUncompressed(ctx, path)
+ w.Header().Set("Content-Type", "image/jpeg")
+ http.ServeFile(w, r, path)
return nil
}
func (self *MediaView) SetMyselfIn(r *ext.Router) {
- r.GET("/media", self.Index)
- r.POST("/media", self.Index)
+ r.GET("/media/", self.Index)
+ r.POST("/media/", self.Index)
- r.GET("/media/image", self.GetImage)
- r.GET("/media/thumbnail", self.GetThumbnail)
+ r.GET("/media/image/", self.GetImage)
+ r.GET("/media/thumbnail/", self.GetThumbnail)
}
diff --git a/pkg/view/settings.go b/pkg/view/settings.go
index 5131362..bf2dca6 100644
--- a/pkg/view/settings.go
+++ b/pkg/view/settings.go
@@ -1,10 +1,9 @@
package view
import (
+ "net/http"
"strconv"
- "github.com/valyala/fasthttp"
-
"git.sr.ht/~gabrielgio/img/pkg/database/repository"
"git.sr.ht/~gabrielgio/img/pkg/ext"
"git.sr.ht/~gabrielgio/img/pkg/service"
@@ -29,18 +28,18 @@ func NewSettingsView(
}
}
-func (self *SettingsView) Index(ctx *fasthttp.RequestCtx) error {
- s, err := self.settingsRepository.Load(ctx)
+func (self *SettingsView) Index(w http.ResponseWriter, r *http.Request) error {
+ s, err := self.settingsRepository.Load(r.Context())
if err != nil {
return err
}
- users, err := self.userController.List(ctx)
+ users, err := self.userController.List(r.Context())
if err != nil {
return err
}
- templates.WritePageTemplate(ctx, &templates.SettingsPage{
+ templates.WritePageTemplate(w, &templates.SettingsPage{
Settings: s,
Users: users,
})
@@ -48,22 +47,22 @@ func (self *SettingsView) Index(ctx *fasthttp.RequestCtx) error {
return nil
}
-func (self *SettingsView) User(ctx *fasthttp.RequestCtx) error {
- id := string(ctx.FormValue("userId"))
+func (self *SettingsView) User(w http.ResponseWriter, r *http.Request) error {
+ id := r.FormValue("userId")
idValue, err := ParseUint(id)
if err != nil {
return err
}
if idValue == nil {
- templates.WritePageTemplate(ctx, &templates.UserPage{})
+ templates.WritePageTemplate(w, &templates.UserPage{})
} else {
- user, err := self.userController.Get(ctx, *idValue)
+ user, err := self.userController.Get(r.Context(), *idValue)
if err != nil {
return err
}
- templates.WritePageTemplate(ctx, &templates.UserPage{
+ templates.WritePageTemplate(w, &templates.UserPage{
ID: idValue,
Username: user.Username,
Path: user.Path,
@@ -74,13 +73,13 @@ func (self *SettingsView) User(ctx *fasthttp.RequestCtx) error {
return nil
}
-func (self *SettingsView) UpsertUser(ctx *fasthttp.RequestCtx) error {
+func (self *SettingsView) UpsertUser(w http.ResponseWriter, r *http.Request) error {
var (
- username = string(ctx.FormValue("username"))
- password = ctx.FormValue("password")
- path = string(ctx.FormValue("path"))
- isAdmin = string(ctx.FormValue("isAdmin")) == "on"
- id = string(ctx.FormValue("userId"))
+ username = r.FormValue("username")
+ password = []byte(r.FormValue("password"))
+ path = r.FormValue("path")
+ isAdmin = r.FormValue("isAdmin") == "on"
+ id = r.FormValue("userId")
)
idValue, err := ParseUint(id)
@@ -88,18 +87,18 @@ func (self *SettingsView) UpsertUser(ctx *fasthttp.RequestCtx) error {
return err
}
- err = self.userController.Upsert(ctx, idValue, username, "", password, isAdmin, path)
+ err = self.userController.Upsert(r.Context(), idValue, username, "", password, isAdmin, path)
if err != nil {
return err
}
- ctx.Redirect("/settings", 307)
+ http.Redirect(w, r, "/settings", http.StatusTemporaryRedirect)
return nil
}
-func (self *SettingsView) Delete(ctx *fasthttp.RequestCtx) error {
+func (self *SettingsView) Delete(w http.ResponseWriter, r *http.Request) error {
var (
- id = string(ctx.FormValue("userId"))
+ id = r.FormValue("userId")
)
idValue, err := ParseUint(id)
@@ -108,24 +107,24 @@ func (self *SettingsView) Delete(ctx *fasthttp.RequestCtx) error {
}
if idValue != nil {
- err = self.userController.Delete(ctx, *idValue)
+ err = self.userController.Delete(r.Context(), *idValue)
if err != nil {
return err
}
}
- ctx.Redirect("/settings", 307)
+ http.Redirect(w, r, "/settings", http.StatusTemporaryRedirect)
return nil
}
-func (self *SettingsView) Save(ctx *fasthttp.RequestCtx) error {
+func (self *SettingsView) Save(w http.ResponseWriter, r *http.Request) error {
var (
- showMode = string(ctx.FormValue("showMode")) == "on"
- showOwner = string(ctx.FormValue("showOwner")) == "on"
- preloadVideoMetadata = string(ctx.FormValue("preloadVideoMetadata")) == "on"
+ showMode = r.FormValue("showMode") == "on"
+ showOwner = r.FormValue("showOwner") == "on"
+ preloadVideoMetadata = r.FormValue("preloadVideoMetadata") == "on"
)
- err := self.settingsRepository.Save(ctx, &repository.Settings{
+ err := self.settingsRepository.Save(r.Context(), &repository.Settings{
ShowMode: showMode,
ShowOwner: showOwner,
PreloadVideoMetadata: preloadVideoMetadata,
@@ -134,7 +133,7 @@ func (self *SettingsView) Save(ctx *fasthttp.RequestCtx) error {
return err
}
- return self.Index(ctx)
+ return self.Index(w, r)
}
func (self *SettingsView) SetMyselfIn(r *ext.Router) {
diff --git a/pkg/worker/httpserver.go b/pkg/worker/httpserver.go
index 181cf73..dc8f255 100644
--- a/pkg/worker/httpserver.go
+++ b/pkg/worker/httpserver.go
@@ -2,29 +2,24 @@ package worker
import (
"context"
-
- "github.com/valyala/fasthttp"
+ "net/http"
)
type ServerWorker struct {
- server *fasthttp.Server
+ server *http.Server
}
func (self *ServerWorker) Start(ctx context.Context) error {
go func() {
// nolint: errcheck
- self.server.ListenAndServe("0.0.0.0:8080")
+ self.server.ListenAndServe()
}()
<-ctx.Done()
- return self.Shutdown()
-}
-
-func (self *ServerWorker) Shutdown() error {
- return self.server.Shutdown()
+ return self.server.Shutdown(ctx)
}
-func NewServerWorker(server *fasthttp.Server) *ServerWorker {
+func NewServerWorker(server *http.Server) *ServerWorker {
return &ServerWorker{
server: server,
}