fix: fix wrong POST param logic in custom HTTP providers

This commit is contained in:
Yang Luo 2023-12-15 00:00:47 +08:00
parent 374928e719
commit be637fca81
3 changed files with 53 additions and 35 deletions

View File

@ -15,9 +15,10 @@
package email package email
import ( import (
"bytes"
"fmt" "fmt"
"net/http" "net/http"
"net/url"
"strings"
"github.com/casdoor/casdoor/proxy" "github.com/casdoor/casdoor/proxy"
) )
@ -36,20 +37,26 @@ func NewHttpEmailProvider(endpoint string, method string) *HttpEmailProvider {
} }
func (c *HttpEmailProvider) Send(fromAddress string, fromName string, toAddress string, subject string, content string) error { func (c *HttpEmailProvider) Send(fromAddress string, fromName string, toAddress string, subject string, content string) error {
req, err := http.NewRequest(c.method, c.endpoint, bytes.NewBufferString(content)) var req *http.Request
if err != nil { var err error
return err
}
if c.method == "POST" { if c.method == "POST" {
req.Header.Set("Content-Type", "application/x-www-form-urlencoded") formValues := url.Values{}
req.PostForm = map[string][]string{ formValues.Set("fromName", fromName)
"fromName": {fromName}, formValues.Set("toAddress", toAddress)
"toAddress": {toAddress}, formValues.Set("subject", subject)
"subject": {subject}, formValues.Set("content", content)
"content": {content}, req, err = http.NewRequest(c.method, c.endpoint, strings.NewReader(formValues.Encode()))
if err != nil {
return err
} }
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
} else if c.method == "GET" { } else if c.method == "GET" {
req, err = http.NewRequest(c.method, c.endpoint, nil)
if err != nil {
return err
}
q := req.URL.Query() q := req.URL.Query()
q.Add("fromName", fromName) q.Add("fromName", fromName)
q.Add("toAddress", toAddress) q.Add("toAddress", toAddress)

View File

@ -15,10 +15,11 @@
package notification package notification
import ( import (
"bytes"
"context" "context"
"fmt" "fmt"
"net/http" "net/http"
"net/url"
"strings"
"github.com/casdoor/casdoor/proxy" "github.com/casdoor/casdoor/proxy"
) )
@ -39,26 +40,29 @@ func NewCustomHttpProvider(endpoint string, method string, paramName string) (*H
} }
func (c *HttpNotificationClient) Send(ctx context.Context, subject string, content string) error { func (c *HttpNotificationClient) Send(ctx context.Context, subject string, content string) error {
var req *http.Request
var err error var err error
httpClient := proxy.DefaultHttpClient
req, err := http.NewRequest(c.method, c.endpoint, bytes.NewBufferString(content))
if err != nil {
return err
}
if c.method == "POST" { if c.method == "POST" {
req.Header.Set("Content-Type", "application/x-www-form-urlencoded") formValues := url.Values{}
req.PostForm = map[string][]string{ formValues.Set(c.paramName, content)
c.paramName: {content}, req, err = http.NewRequest(c.method, c.endpoint, strings.NewReader(formValues.Encode()))
if err != nil {
return err
} }
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
} else if c.method == "GET" { } else if c.method == "GET" {
req, err = http.NewRequest(c.method, c.endpoint, nil)
if err != nil {
return err
}
q := req.URL.Query() q := req.URL.Query()
q.Add(c.paramName, content) q.Add(c.paramName, content)
req.URL.RawQuery = q.Encode() req.URL.RawQuery = q.Encode()
} }
httpClient := proxy.DefaultHttpClient
resp, err := httpClient.Do(req) resp, err := httpClient.Do(req)
if err != nil { if err != nil {
return err return err
@ -66,7 +70,7 @@ func (c *HttpNotificationClient) Send(ctx context.Context, subject string, conte
defer resp.Body.Close() defer resp.Body.Close()
if resp.StatusCode != http.StatusOK { if resp.StatusCode != http.StatusOK {
return fmt.Errorf("SendMessage() error, custom HTTP Notification request failed with status: %s", resp.Status) return fmt.Errorf("HttpNotificationClient's SendMessage() error, custom HTTP Notification request failed with status: %s", resp.Status)
} }
return err return err

View File

@ -15,9 +15,10 @@
package object package object
import ( import (
"bytes"
"fmt" "fmt"
"net/http" "net/http"
"net/url"
"strings"
"github.com/casdoor/casdoor/proxy" "github.com/casdoor/casdoor/proxy"
) )
@ -41,18 +42,24 @@ func (c *HttpSmsClient) SendMessage(param map[string]string, targetPhoneNumber .
phoneNumber := targetPhoneNumber[0] phoneNumber := targetPhoneNumber[0]
content := param["code"] content := param["code"]
req, err := http.NewRequest(c.method, c.endpoint, bytes.NewBufferString(content)) var req *http.Request
if err != nil { var err error
return err
}
if c.method == "POST" { if c.method == "POST" {
req.Header.Set("Content-Type", "application/x-www-form-urlencoded") formValues := url.Values{}
req.PostForm = map[string][]string{ formValues.Set("phoneNumber", phoneNumber)
"phoneNumber": targetPhoneNumber, formValues.Set(c.paramName, content)
c.paramName: {content}, req, err = http.NewRequest(c.method, c.endpoint, strings.NewReader(formValues.Encode()))
if err != nil {
return err
} }
req.Header.Set("Content-Type", "application/x-www-form-urlencoded")
} else if c.method == "GET" { } else if c.method == "GET" {
req, err = http.NewRequest(c.method, c.endpoint, nil)
if err != nil {
return err
}
q := req.URL.Query() q := req.URL.Query()
q.Add("phoneNumber", phoneNumber) q.Add("phoneNumber", phoneNumber)
q.Add(c.paramName, content) q.Add(c.paramName, content)