84 lines
2.5 KiB
Go
84 lines
2.5 KiB
Go
package profiles
|
|
|
|
import (
|
|
"log"
|
|
"net/http"
|
|
|
|
"git.hatecomputers.club/hatecomputers/hatecomputers.club/adapters/files"
|
|
"git.hatecomputers.club/hatecomputers/hatecomputers.club/api/types"
|
|
"git.hatecomputers.club/hatecomputers/hatecomputers.club/database"
|
|
)
|
|
|
|
const MaxAvatarSize = 1024 * 1024 * 2 // 2MB
|
|
const AvatarPath = "avatars/"
|
|
|
|
func GetProfileContinuation(context *types.RequestContext, req *http.Request, resp http.ResponseWriter) types.ContinuationChain {
|
|
return func(success types.Continuation, failure types.Continuation) types.ContinuationChain {
|
|
if context.User == nil {
|
|
return failure(context, req, resp)
|
|
}
|
|
|
|
(*context.TemplateData)["Profile"] = context.User
|
|
return success(context, req, resp)
|
|
}
|
|
}
|
|
|
|
func UpdateProfileContinuation(fileAdapter files.FilesAdapter, maxAvatarSize int, avatarPath string) func(context *types.RequestContext, req *http.Request, resp http.ResponseWriter) types.ContinuationChain {
|
|
return func(context *types.RequestContext, req *http.Request, resp http.ResponseWriter) types.ContinuationChain {
|
|
return func(success types.Continuation, failure types.Continuation) types.ContinuationChain {
|
|
formErrors := types.FormError{
|
|
Errors: []string{},
|
|
}
|
|
|
|
err := req.ParseMultipartForm(int64(maxAvatarSize))
|
|
if err != nil {
|
|
log.Println(err)
|
|
|
|
formErrors.Errors = append(formErrors.Errors, "avatar file too large")
|
|
}
|
|
|
|
if len(formErrors.Errors) == 0 {
|
|
file, _, err := req.FormFile("avatar")
|
|
if err != nil {
|
|
formErrors.Errors = append(formErrors.Errors, "error uploading avatar")
|
|
} else {
|
|
defer file.Close()
|
|
|
|
_, err = fileAdapter.CreateFile(avatarPath+context.User.ID, file)
|
|
if err != nil {
|
|
log.Println(err)
|
|
formErrors.Errors = append(formErrors.Errors, "error saving avatar")
|
|
}
|
|
}
|
|
}
|
|
|
|
if len(formErrors.Errors) == 0 {
|
|
bio := req.FormValue("bio")
|
|
location := req.FormValue("location")
|
|
website := req.FormValue("website")
|
|
|
|
context.User.Bio = bio
|
|
context.User.Location = location
|
|
context.User.Website = website
|
|
|
|
_, err = database.SaveUser(context.DBConn, context.User)
|
|
if err != nil {
|
|
formErrors.Errors = append(formErrors.Errors, "error saving profile")
|
|
}
|
|
}
|
|
|
|
(*context.TemplateData)["Profile"] = context.User
|
|
(*context.TemplateData)["FormError"] = formErrors
|
|
|
|
if len(formErrors.Errors) > 0 {
|
|
log.Println(formErrors.Errors)
|
|
|
|
resp.WriteHeader(http.StatusBadRequest)
|
|
return failure(context, req, resp)
|
|
}
|
|
|
|
return success(context, req, resp)
|
|
}
|
|
}
|
|
}
|