54 lines
1.2 KiB
Go
54 lines
1.2 KiB
Go
package actions
|
|
|
|
import (
|
|
"errors"
|
|
"github.com/gin-gonic/gin"
|
|
"github/fthvgb1/wp-go/vars"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"net/http/cookiejar"
|
|
"strings"
|
|
"time"
|
|
)
|
|
|
|
func PostComment(c *gin.Context) {
|
|
jar, _ := cookiejar.New(nil)
|
|
cli := &http.Client{
|
|
Jar: jar,
|
|
Timeout: time.Second * 3,
|
|
}
|
|
body, err := ioutil.ReadAll(c.Request.Body)
|
|
defer func() {
|
|
if err != nil {
|
|
c.String(http.StatusConflict, err.Error())
|
|
}
|
|
}()
|
|
if err != nil {
|
|
return
|
|
}
|
|
req, err := http.NewRequest("POST", vars.Conf.PostCommentUrl, strings.NewReader(string(body)))
|
|
if err != nil {
|
|
return
|
|
}
|
|
defer req.Body.Close()
|
|
for k, v := range c.Request.Header {
|
|
req.Header.Set(k, v[0])
|
|
}
|
|
res, err := cli.Do(req)
|
|
if err != nil {
|
|
return
|
|
}
|
|
if res.StatusCode == http.StatusOK && res.Request.Response.StatusCode == http.StatusFound {
|
|
for _, cookie := range res.Request.Response.Cookies() {
|
|
c.SetCookie(cookie.Name, cookie.Value, cookie.MaxAge, cookie.Path, cookie.Domain, cookie.Secure, cookie.HttpOnly)
|
|
}
|
|
c.Redirect(http.StatusFound, res.Request.Response.Header.Get("Location"))
|
|
return
|
|
}
|
|
s, err := ioutil.ReadAll(res.Body)
|
|
if err != nil {
|
|
return
|
|
}
|
|
err = errors.New(string(s))
|
|
}
|