authorizer/server/resolvers/test_endpoint.go

105 lines
2.8 KiB
Go
Raw Normal View History

2022-07-10 16:19:33 +00:00
package resolvers
import (
"bytes"
"context"
"encoding/json"
"fmt"
"io"
2022-07-10 16:19:33 +00:00
"net/http"
"time"
"github.com/authorizerdev/authorizer/server/constants"
"github.com/authorizerdev/authorizer/server/graph/model"
2022-07-15 16:41:08 +00:00
"github.com/authorizerdev/authorizer/server/refs"
2022-07-10 16:19:33 +00:00
"github.com/authorizerdev/authorizer/server/token"
"github.com/authorizerdev/authorizer/server/utils"
"github.com/authorizerdev/authorizer/server/validators"
"github.com/google/uuid"
log "github.com/sirupsen/logrus"
)
// TestEndpointResolver resolver to test webhook endpoints
func TestEndpointResolver(ctx context.Context, params model.TestEndpointRequest) (*model.TestEndpointResponse, error) {
gc, err := utils.GinContextFromContext(ctx)
if err != nil {
log.Debug("Failed to get GinContext: ", err)
return nil, err
}
if !token.IsSuperAdmin(gc) {
log.Debug("Not logged in as super admin")
return nil, fmt.Errorf("unauthorized")
}
if !validators.IsValidWebhookEventName(params.EventName) {
log.Debug("Invalid event name: ", params.EventName)
return nil, fmt.Errorf("invalid event_name %s", params.EventName)
}
user := model.User{
ID: uuid.NewString(),
2023-10-25 19:25:10 +00:00
Email: refs.NewStringRef("test_endpoint@authorizer.dev"),
2022-07-10 16:19:33 +00:00
EmailVerified: true,
SignupMethods: constants.AuthRecipeMethodMagicLinkLogin,
2022-07-15 16:41:08 +00:00
GivenName: refs.NewStringRef("Foo"),
FamilyName: refs.NewStringRef("Bar"),
2022-07-10 16:19:33 +00:00
}
userBytes, err := json.Marshal(user)
if err != nil {
log.Debug("error marshalling user obj: ", err)
return nil, err
}
userMap := map[string]interface{}{}
err = json.Unmarshal(userBytes, &userMap)
if err != nil {
log.Debug("error un-marshalling user obj: ", err)
return nil, err
}
reqBody := map[string]interface{}{
"event_name": constants.UserLoginWebhookEvent,
"user": userMap,
}
if params.EventName == constants.UserLoginWebhookEvent {
2022-07-11 14:10:54 +00:00
reqBody["auth_recipe"] = constants.AuthRecipeMethodMagicLinkLogin
2022-07-10 16:19:33 +00:00
}
requestBody, err := json.Marshal(reqBody)
if err != nil {
log.Debug("error marshalling requestBody obj: ", err)
return nil, err
}
req, err := http.NewRequest("POST", params.Endpoint, bytes.NewBuffer(requestBody))
if err != nil {
log.Debug("error creating post request: ", err)
return nil, err
}
req.Header.Set("Content-Type", "application/json")
for key, val := range params.Headers {
req.Header.Set(key, val.(string))
}
client := &http.Client{Timeout: time.Second * 30}
resp, err := client.Do(req)
if err != nil {
log.Debug("error making request: ", err)
return nil, err
}
defer resp.Body.Close()
body, err := io.ReadAll(resp.Body)
2022-07-10 16:19:33 +00:00
if err != nil {
log.Debug("error reading response: ", err)
return nil, err
}
statusCode := int64(resp.StatusCode)
return &model.TestEndpointResponse{
HTTPStatus: &statusCode,
2022-07-17 11:35:35 +00:00
Response: refs.NewStringRef(string(body)),
2022-07-10 16:19:33 +00:00
}, nil
}