59 lines
1.3 KiB
Go
59 lines
1.3 KiB
Go
package client
|
|
|
|
import (
|
|
"io"
|
|
"io/ioutil"
|
|
"net/http"
|
|
"net/http/cookiejar"
|
|
"net/url"
|
|
"strings"
|
|
|
|
lib "git.sr.ht/~cco/go-scopes"
|
|
"git.sr.ht/~cco/go-scopes/config"
|
|
"git.sr.ht/~cco/go-scopes/logging"
|
|
"golang.org/x/net/publicsuffix"
|
|
)
|
|
|
|
type Cfg struct {
|
|
*config.BaseCfg
|
|
Url string
|
|
}
|
|
|
|
var GlobalCookieJar http.CookieJar
|
|
|
|
func Send(act lib.Action) bool {
|
|
ctx, spec, msg := act.Context(), act.Spec(), act.Message()
|
|
_ = spec
|
|
cfg := lib.GetCfg[*Cfg](ctx)
|
|
url, _ := url.JoinPath(cfg.Url, msg.Slice()...)
|
|
method := "GET"
|
|
var pdata io.Reader
|
|
if pl := msg.Payload(); pl != nil {
|
|
pdata = strings.NewReader(pl.String())
|
|
method = "POST"
|
|
}
|
|
resp, err := SendRequest(method, url, pdata)
|
|
if err != nil {
|
|
logging.ErrorA(act, err).Msg("client.Send")
|
|
return true
|
|
}
|
|
body, _ := ioutil.ReadAll(resp.Body)
|
|
bodyStr := string(body)
|
|
logging.InfoA(act).Str("data", bodyStr).Msg("client.Send")
|
|
// core.Forward(newMsg)
|
|
return true
|
|
}
|
|
|
|
func SendRequest(method, url string, pdata io.Reader) (*http.Response, error) {
|
|
req, _ := http.NewRequest(method, url, pdata)
|
|
client := http.DefaultClient
|
|
client.Jar = GlobalCookieJar
|
|
resp, err := client.Do(req)
|
|
return resp, err
|
|
}
|
|
|
|
// CookieJar initialization
|
|
func init() {
|
|
GlobalCookieJar, _ = cookiejar.New(
|
|
&cookiejar.Options{PublicSuffixList: publicsuffix.List})
|
|
}
|