mirror of
https://github.com/dstotijn/hetty.git
synced 2025-07-01 18:47:29 -04:00
Add intercept response filter
This commit is contained in:
@ -119,8 +119,10 @@ type ComplexityRoot struct {
|
||||
}
|
||||
|
||||
InterceptSettings struct {
|
||||
Enabled func(childComplexity int) int
|
||||
RequestFilter func(childComplexity int) int
|
||||
RequestFilter func(childComplexity int) int
|
||||
RequestsEnabled func(childComplexity int) int
|
||||
ResponseFilter func(childComplexity int) int
|
||||
ResponsesEnabled func(childComplexity int) int
|
||||
}
|
||||
|
||||
ModifyRequestResult struct {
|
||||
@ -510,13 +512,6 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in
|
||||
|
||||
return e.complexity.HTTPResponseLog.StatusReason(childComplexity), true
|
||||
|
||||
case "InterceptSettings.enabled":
|
||||
if e.complexity.InterceptSettings.Enabled == nil {
|
||||
break
|
||||
}
|
||||
|
||||
return e.complexity.InterceptSettings.Enabled(childComplexity), true
|
||||
|
||||
case "InterceptSettings.requestFilter":
|
||||
if e.complexity.InterceptSettings.RequestFilter == nil {
|
||||
break
|
||||
@ -524,6 +519,27 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in
|
||||
|
||||
return e.complexity.InterceptSettings.RequestFilter(childComplexity), true
|
||||
|
||||
case "InterceptSettings.requestsEnabled":
|
||||
if e.complexity.InterceptSettings.RequestsEnabled == nil {
|
||||
break
|
||||
}
|
||||
|
||||
return e.complexity.InterceptSettings.RequestsEnabled(childComplexity), true
|
||||
|
||||
case "InterceptSettings.responseFilter":
|
||||
if e.complexity.InterceptSettings.ResponseFilter == nil {
|
||||
break
|
||||
}
|
||||
|
||||
return e.complexity.InterceptSettings.ResponseFilter(childComplexity), true
|
||||
|
||||
case "InterceptSettings.responsesEnabled":
|
||||
if e.complexity.InterceptSettings.ResponsesEnabled == nil {
|
||||
break
|
||||
}
|
||||
|
||||
return e.complexity.InterceptSettings.ResponsesEnabled(childComplexity), true
|
||||
|
||||
case "ModifyRequestResult.success":
|
||||
if e.complexity.ModifyRequestResult.Success == nil {
|
||||
break
|
||||
@ -1204,13 +1220,17 @@ type CancelResponseResult {
|
||||
}
|
||||
|
||||
input UpdateInterceptSettingsInput {
|
||||
enabled: Boolean!
|
||||
requestsEnabled: Boolean!
|
||||
responsesEnabled: Boolean!
|
||||
requestFilter: String
|
||||
responseFilter: String
|
||||
}
|
||||
|
||||
type InterceptSettings {
|
||||
enabled: Boolean!
|
||||
requestsEnabled: Boolean!
|
||||
responsesEnabled: Boolean!
|
||||
requestFilter: String
|
||||
responseFilter: String
|
||||
}
|
||||
|
||||
type Query {
|
||||
@ -2861,7 +2881,7 @@ func (ec *executionContext) _HttpResponseLog_headers(ctx context.Context, field
|
||||
return ec.marshalNHttpHeader2ᚕgithubᚗcomᚋdstotijnᚋhettyᚋpkgᚋapiᚐHTTPHeaderᚄ(ctx, field.Selections, res)
|
||||
}
|
||||
|
||||
func (ec *executionContext) _InterceptSettings_enabled(ctx context.Context, field graphql.CollectedField, obj *InterceptSettings) (ret graphql.Marshaler) {
|
||||
func (ec *executionContext) _InterceptSettings_requestsEnabled(ctx context.Context, field graphql.CollectedField, obj *InterceptSettings) (ret graphql.Marshaler) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
ec.Error(ctx, ec.Recover(ctx, r))
|
||||
@ -2879,7 +2899,42 @@ func (ec *executionContext) _InterceptSettings_enabled(ctx context.Context, fiel
|
||||
ctx = graphql.WithFieldContext(ctx, fc)
|
||||
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
|
||||
ctx = rctx // use context from middleware stack in children
|
||||
return obj.Enabled, nil
|
||||
return obj.RequestsEnabled, nil
|
||||
})
|
||||
if err != nil {
|
||||
ec.Error(ctx, err)
|
||||
return graphql.Null
|
||||
}
|
||||
if resTmp == nil {
|
||||
if !graphql.HasFieldError(ctx, fc) {
|
||||
ec.Errorf(ctx, "must not be null")
|
||||
}
|
||||
return graphql.Null
|
||||
}
|
||||
res := resTmp.(bool)
|
||||
fc.Result = res
|
||||
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
|
||||
}
|
||||
|
||||
func (ec *executionContext) _InterceptSettings_responsesEnabled(ctx context.Context, field graphql.CollectedField, obj *InterceptSettings) (ret graphql.Marshaler) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
ec.Error(ctx, ec.Recover(ctx, r))
|
||||
ret = graphql.Null
|
||||
}
|
||||
}()
|
||||
fc := &graphql.FieldContext{
|
||||
Object: "InterceptSettings",
|
||||
Field: field,
|
||||
Args: nil,
|
||||
IsMethod: false,
|
||||
IsResolver: false,
|
||||
}
|
||||
|
||||
ctx = graphql.WithFieldContext(ctx, fc)
|
||||
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
|
||||
ctx = rctx // use context from middleware stack in children
|
||||
return obj.ResponsesEnabled, nil
|
||||
})
|
||||
if err != nil {
|
||||
ec.Error(ctx, err)
|
||||
@ -2928,6 +2983,38 @@ func (ec *executionContext) _InterceptSettings_requestFilter(ctx context.Context
|
||||
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
|
||||
}
|
||||
|
||||
func (ec *executionContext) _InterceptSettings_responseFilter(ctx context.Context, field graphql.CollectedField, obj *InterceptSettings) (ret graphql.Marshaler) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
ec.Error(ctx, ec.Recover(ctx, r))
|
||||
ret = graphql.Null
|
||||
}
|
||||
}()
|
||||
fc := &graphql.FieldContext{
|
||||
Object: "InterceptSettings",
|
||||
Field: field,
|
||||
Args: nil,
|
||||
IsMethod: false,
|
||||
IsResolver: false,
|
||||
}
|
||||
|
||||
ctx = graphql.WithFieldContext(ctx, fc)
|
||||
resTmp, err := ec.ResolverMiddleware(ctx, func(rctx context.Context) (interface{}, error) {
|
||||
ctx = rctx // use context from middleware stack in children
|
||||
return obj.ResponseFilter, nil
|
||||
})
|
||||
if err != nil {
|
||||
ec.Error(ctx, err)
|
||||
return graphql.Null
|
||||
}
|
||||
if resTmp == nil {
|
||||
return graphql.Null
|
||||
}
|
||||
res := resTmp.(*string)
|
||||
fc.Result = res
|
||||
return ec.marshalOString2ᚖstring(ctx, field.Selections, res)
|
||||
}
|
||||
|
||||
func (ec *executionContext) _ModifyRequestResult_success(ctx context.Context, field graphql.CollectedField, obj *ModifyRequestResult) (ret graphql.Marshaler) {
|
||||
defer func() {
|
||||
if r := recover(); r != nil {
|
||||
@ -6302,11 +6389,19 @@ func (ec *executionContext) unmarshalInputUpdateInterceptSettingsInput(ctx conte
|
||||
|
||||
for k, v := range asMap {
|
||||
switch k {
|
||||
case "enabled":
|
||||
case "requestsEnabled":
|
||||
var err error
|
||||
|
||||
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("enabled"))
|
||||
it.Enabled, err = ec.unmarshalNBoolean2bool(ctx, v)
|
||||
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("requestsEnabled"))
|
||||
it.RequestsEnabled, err = ec.unmarshalNBoolean2bool(ctx, v)
|
||||
if err != nil {
|
||||
return it, err
|
||||
}
|
||||
case "responsesEnabled":
|
||||
var err error
|
||||
|
||||
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("responsesEnabled"))
|
||||
it.ResponsesEnabled, err = ec.unmarshalNBoolean2bool(ctx, v)
|
||||
if err != nil {
|
||||
return it, err
|
||||
}
|
||||
@ -6318,6 +6413,14 @@ func (ec *executionContext) unmarshalInputUpdateInterceptSettingsInput(ctx conte
|
||||
if err != nil {
|
||||
return it, err
|
||||
}
|
||||
case "responseFilter":
|
||||
var err error
|
||||
|
||||
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("responseFilter"))
|
||||
it.ResponseFilter, err = ec.unmarshalOString2ᚖstring(ctx, v)
|
||||
if err != nil {
|
||||
return it, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -6771,13 +6874,20 @@ func (ec *executionContext) _InterceptSettings(ctx context.Context, sel ast.Sele
|
||||
switch field.Name {
|
||||
case "__typename":
|
||||
out.Values[i] = graphql.MarshalString("InterceptSettings")
|
||||
case "enabled":
|
||||
out.Values[i] = ec._InterceptSettings_enabled(ctx, field, obj)
|
||||
case "requestsEnabled":
|
||||
out.Values[i] = ec._InterceptSettings_requestsEnabled(ctx, field, obj)
|
||||
if out.Values[i] == graphql.Null {
|
||||
invalids++
|
||||
}
|
||||
case "responsesEnabled":
|
||||
out.Values[i] = ec._InterceptSettings_responsesEnabled(ctx, field, obj)
|
||||
if out.Values[i] == graphql.Null {
|
||||
invalids++
|
||||
}
|
||||
case "requestFilter":
|
||||
out.Values[i] = ec._InterceptSettings_requestFilter(ctx, field, obj)
|
||||
case "responseFilter":
|
||||
out.Values[i] = ec._InterceptSettings_responseFilter(ctx, field, obj)
|
||||
default:
|
||||
panic("unknown field " + strconv.Quote(field.Name))
|
||||
}
|
||||
|
@ -98,8 +98,10 @@ type HTTPResponseLog struct {
|
||||
}
|
||||
|
||||
type InterceptSettings struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
RequestFilter *string `json:"requestFilter"`
|
||||
RequestsEnabled bool `json:"requestsEnabled"`
|
||||
ResponsesEnabled bool `json:"responsesEnabled"`
|
||||
RequestFilter *string `json:"requestFilter"`
|
||||
ResponseFilter *string `json:"responseFilter"`
|
||||
}
|
||||
|
||||
type ModifyRequestInput struct {
|
||||
@ -194,8 +196,10 @@ type SenderRequestInput struct {
|
||||
}
|
||||
|
||||
type UpdateInterceptSettingsInput struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
RequestFilter *string `json:"requestFilter"`
|
||||
RequestsEnabled bool `json:"requestsEnabled"`
|
||||
ResponsesEnabled bool `json:"responsesEnabled"`
|
||||
RequestFilter *string `json:"requestFilter"`
|
||||
ResponseFilter *string `json:"responseFilter"`
|
||||
}
|
||||
|
||||
type HTTPMethod string
|
||||
|
@ -596,10 +596,13 @@ func (r *mutationResolver) ModifyResponse(
|
||||
return nil, fmt.Errorf("malformed HTTP version: %q", res.Proto)
|
||||
}
|
||||
|
||||
var body string
|
||||
if input.Body != nil {
|
||||
res.Body = io.NopCloser(strings.NewReader(*input.Body))
|
||||
body = *input.Body
|
||||
}
|
||||
|
||||
res.Body = io.NopCloser(strings.NewReader(body))
|
||||
|
||||
for _, header := range input.Headers {
|
||||
res.Header.Add(header.Key, header.Value)
|
||||
}
|
||||
@ -626,18 +629,28 @@ func (r *mutationResolver) UpdateInterceptSettings(
|
||||
input UpdateInterceptSettingsInput,
|
||||
) (*InterceptSettings, error) {
|
||||
settings := intercept.Settings{
|
||||
Enabled: input.Enabled,
|
||||
RequestsEnabled: input.RequestsEnabled,
|
||||
ResponsesEnabled: input.ResponsesEnabled,
|
||||
}
|
||||
|
||||
if input.RequestFilter != nil && *input.RequestFilter != "" {
|
||||
expr, err := search.ParseQuery(*input.RequestFilter)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not parse search query: %w", err)
|
||||
return nil, fmt.Errorf("could not parse request filter: %w", err)
|
||||
}
|
||||
|
||||
settings.RequestFilter = expr
|
||||
}
|
||||
|
||||
if input.ResponseFilter != nil && *input.ResponseFilter != "" {
|
||||
expr, err := search.ParseQuery(*input.ResponseFilter)
|
||||
if err != nil {
|
||||
return nil, fmt.Errorf("could not parse response filter: %w", err)
|
||||
}
|
||||
|
||||
settings.ResponseFilter = expr
|
||||
}
|
||||
|
||||
err := r.ProjectService.UpdateInterceptSettings(ctx, settings)
|
||||
if errors.Is(err, proj.ErrNoProject) {
|
||||
return nil, noActiveProjectErr(ctx)
|
||||
@ -646,7 +659,8 @@ func (r *mutationResolver) UpdateInterceptSettings(
|
||||
}
|
||||
|
||||
updated := &InterceptSettings{
|
||||
Enabled: settings.Enabled,
|
||||
RequestsEnabled: settings.RequestsEnabled,
|
||||
ResponsesEnabled: settings.ResponsesEnabled,
|
||||
}
|
||||
|
||||
if settings.RequestFilter != nil {
|
||||
@ -654,6 +668,11 @@ func (r *mutationResolver) UpdateInterceptSettings(
|
||||
updated.RequestFilter = &reqFilter
|
||||
}
|
||||
|
||||
if settings.ResponseFilter != nil {
|
||||
resFilter := settings.ResponseFilter.String()
|
||||
updated.ResponseFilter = &resFilter
|
||||
}
|
||||
|
||||
return updated, nil
|
||||
}
|
||||
|
||||
@ -842,7 +861,8 @@ func parseProject(projSvc proj.Service, p proj.Project) Project {
|
||||
IsActive: projSvc.IsProjectActive(p.ID),
|
||||
Settings: &ProjectSettings{
|
||||
Intercept: &InterceptSettings{
|
||||
Enabled: p.Settings.InterceptEnabled,
|
||||
RequestsEnabled: p.Settings.InterceptRequests,
|
||||
ResponsesEnabled: p.Settings.InterceptResponses,
|
||||
},
|
||||
},
|
||||
}
|
||||
@ -852,6 +872,11 @@ func parseProject(projSvc proj.Service, p proj.Project) Project {
|
||||
project.Settings.Intercept.RequestFilter = &interceptReqFilter
|
||||
}
|
||||
|
||||
if p.Settings.InterceptResponseFilter != nil {
|
||||
interceptResFilter := p.Settings.InterceptResponseFilter.String()
|
||||
project.Settings.Intercept.ResponseFilter = &interceptResFilter
|
||||
}
|
||||
|
||||
return project
|
||||
}
|
||||
|
||||
|
@ -179,13 +179,17 @@ type CancelResponseResult {
|
||||
}
|
||||
|
||||
input UpdateInterceptSettingsInput {
|
||||
enabled: Boolean!
|
||||
requestsEnabled: Boolean!
|
||||
responsesEnabled: Boolean!
|
||||
requestFilter: String
|
||||
responseFilter: String
|
||||
}
|
||||
|
||||
type InterceptSettings {
|
||||
enabled: Boolean!
|
||||
requestsEnabled: Boolean!
|
||||
responsesEnabled: Boolean!
|
||||
requestFilter: String
|
||||
responseFilter: String
|
||||
}
|
||||
|
||||
type Query {
|
||||
|
Reference in New Issue
Block a user