60 lines
1.4 KiB
Go
60 lines
1.4 KiB
Go
package handler
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/labstack/echo/v4"
|
|
"github.com/ssoda/captcha"
|
|
"sh.org.ru/pkg/model"
|
|
"sh.org.ru/pkg/tpl"
|
|
)
|
|
|
|
func (h *Handler) AddQuote(c echo.Context) error {
|
|
cid := captcha.New()
|
|
form := &tpl.AddQuoteForm{
|
|
CaptchaID: cid,
|
|
}
|
|
return tpl.
|
|
AddQuotePage(form, "").
|
|
Render(c.Request().Context(), c.Response())
|
|
}
|
|
|
|
func (h *Handler) AddQuotePost(c echo.Context) error {
|
|
form := &tpl.AddQuoteForm{}
|
|
if err := c.Bind(form); err != nil {
|
|
return err
|
|
}
|
|
if form.CaptchaValue == "" {
|
|
return formError(form, c, "Неверный код")
|
|
}
|
|
if !captcha.VerifyString(form.CaptchaID, form.CaptchaValue) {
|
|
return formError(form, c, "Неверный код")
|
|
}
|
|
|
|
if len(form.Quote) < 10 {
|
|
return formError(form, c, "Цитата слишком короткая")
|
|
}
|
|
|
|
q := &model.Quote{
|
|
Quote: form.Quote,
|
|
Approved: false,
|
|
Archive: false,
|
|
}
|
|
if _, err := h.DB.NewInsert().Model(q).Exec(c.Request().Context()); err != nil {
|
|
return err
|
|
}
|
|
|
|
return c.Redirect(http.StatusFound, "/add/success")
|
|
}
|
|
|
|
func (h *Handler) AddQuoteSuccess(c echo.Context) error {
|
|
return tpl.AddQuoteSuccessPage().Render(c.Request().Context(), c.Response())
|
|
}
|
|
|
|
func formError(form *tpl.AddQuoteForm, c echo.Context, err string) error {
|
|
form.CaptchaID = captcha.New()
|
|
form.CaptchaValue = ""
|
|
return tpl.
|
|
AddQuotePage(form, err).
|
|
Render(c.Request().Context(), c.Response())
|
|
}
|