feat: implement resolvers
This commit is contained in:
109
server/resolvers/test_endpoint.go
Normal file
109
server/resolvers/test_endpoint.go
Normal file
@@ -0,0 +1,109 @@
|
||||
package resolvers
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"context"
|
||||
"encoding/json"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/authorizerdev/authorizer/server/constants"
|
||||
"github.com/authorizerdev/authorizer/server/graph/model"
|
||||
"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(),
|
||||
Email: "test_endpoint@foo.com",
|
||||
EmailVerified: true,
|
||||
SignupMethods: constants.AuthRecipeMethodMagicLinkLogin,
|
||||
GivenName: utils.NewStringRef("Foo"),
|
||||
FamilyName: utils.NewStringRef("Bar"),
|
||||
}
|
||||
|
||||
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 {
|
||||
reqBody["login_method"] = constants.AuthRecipeMethodMagicLinkLogin
|
||||
}
|
||||
|
||||
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 := ioutil.ReadAll(resp.Body)
|
||||
if err != nil {
|
||||
log.Debug("error reading response: ", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
response := map[string]interface{}{}
|
||||
if err := json.Unmarshal(body, &response); err != nil {
|
||||
log.Debug("error un-marshalling response: ", err)
|
||||
return nil, err
|
||||
}
|
||||
|
||||
statusCode := int64(resp.StatusCode)
|
||||
return &model.TestEndpointResponse{
|
||||
HTTPStatus: &statusCode,
|
||||
Response: response,
|
||||
}, nil
|
||||
}
|
Reference in New Issue
Block a user