mirror of
https://github.com/dstotijn/hetty.git
synced 2025-07-01 18:47:29 -04:00
Add request filter for intercept
This commit is contained in:
@ -105,7 +105,8 @@ type ComplexityRoot struct {
|
||||
}
|
||||
|
||||
InterceptSettings struct {
|
||||
Enabled func(childComplexity int) int
|
||||
Enabled func(childComplexity int) int
|
||||
RequestFilter func(childComplexity int) int
|
||||
}
|
||||
|
||||
ModifyRequestResult struct {
|
||||
@ -438,6 +439,13 @@ func (e *executableSchema) Complexity(typeName, field string, childComplexity in
|
||||
|
||||
return e.complexity.InterceptSettings.Enabled(childComplexity), true
|
||||
|
||||
case "InterceptSettings.requestFilter":
|
||||
if e.complexity.InterceptSettings.RequestFilter == nil {
|
||||
break
|
||||
}
|
||||
|
||||
return e.complexity.InterceptSettings.RequestFilter(childComplexity), true
|
||||
|
||||
case "ModifyRequestResult.success":
|
||||
if e.complexity.ModifyRequestResult.Success == nil {
|
||||
break
|
||||
@ -1057,10 +1065,12 @@ type CancelRequestResult {
|
||||
|
||||
input UpdateInterceptSettingsInput {
|
||||
enabled: Boolean!
|
||||
requestFilter: String
|
||||
}
|
||||
|
||||
type InterceptSettings {
|
||||
enabled: Boolean!
|
||||
requestFilter: String
|
||||
}
|
||||
|
||||
type Query {
|
||||
@ -2440,6 +2450,38 @@ func (ec *executionContext) _InterceptSettings_enabled(ctx context.Context, fiel
|
||||
return ec.marshalNBoolean2bool(ctx, field.Selections, res)
|
||||
}
|
||||
|
||||
func (ec *executionContext) _InterceptSettings_requestFilter(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.RequestFilter, 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 {
|
||||
@ -5632,6 +5674,14 @@ func (ec *executionContext) unmarshalInputUpdateInterceptSettingsInput(ctx conte
|
||||
if err != nil {
|
||||
return it, err
|
||||
}
|
||||
case "requestFilter":
|
||||
var err error
|
||||
|
||||
ctx := graphql.WithPathContext(ctx, graphql.NewPathWithField("requestFilter"))
|
||||
it.RequestFilter, err = ec.unmarshalOString2ᚖstring(ctx, v)
|
||||
if err != nil {
|
||||
return it, err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -6012,6 +6062,8 @@ func (ec *executionContext) _InterceptSettings(ctx context.Context, sel ast.Sele
|
||||
if out.Values[i] == graphql.Null {
|
||||
invalids++
|
||||
}
|
||||
case "requestFilter":
|
||||
out.Values[i] = ec._InterceptSettings_requestFilter(ctx, field, obj)
|
||||
default:
|
||||
panic("unknown field " + strconv.Quote(field.Name))
|
||||
}
|
||||
|
@ -83,7 +83,8 @@ type HTTPResponseLog struct {
|
||||
}
|
||||
|
||||
type InterceptSettings struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
Enabled bool `json:"enabled"`
|
||||
RequestFilter *string `json:"requestFilter"`
|
||||
}
|
||||
|
||||
type ModifyRequestInput struct {
|
||||
@ -164,7 +165,8 @@ type SenderRequestInput struct {
|
||||
}
|
||||
|
||||
type UpdateInterceptSettingsInput struct {
|
||||
Enabled bool `json:"enabled"`
|
||||
Enabled bool `json:"enabled"`
|
||||
RequestFilter *string `json:"requestFilter"`
|
||||
}
|
||||
|
||||
type HTTPMethod string
|
||||
|
@ -184,11 +184,9 @@ func (r *mutationResolver) CreateProject(ctx context.Context, name string) (*Pro
|
||||
return nil, fmt.Errorf("could not open project: %w", err)
|
||||
}
|
||||
|
||||
return &Project{
|
||||
ID: p.ID,
|
||||
Name: p.Name,
|
||||
IsActive: r.ProjectService.IsProjectActive(p.ID),
|
||||
}, nil
|
||||
project := parseProject(r.ProjectService, p)
|
||||
|
||||
return &project, nil
|
||||
}
|
||||
|
||||
func (r *mutationResolver) OpenProject(ctx context.Context, id ulid.ULID) (*Project, error) {
|
||||
@ -199,11 +197,9 @@ func (r *mutationResolver) OpenProject(ctx context.Context, id ulid.ULID) (*Proj
|
||||
return nil, fmt.Errorf("could not open project: %w", err)
|
||||
}
|
||||
|
||||
return &Project{
|
||||
ID: p.ID,
|
||||
Name: p.Name,
|
||||
IsActive: r.ProjectService.IsProjectActive(p.ID),
|
||||
}, nil
|
||||
project := parseProject(r.ProjectService, p)
|
||||
|
||||
return &project, nil
|
||||
}
|
||||
|
||||
func (r *queryResolver) ActiveProject(ctx context.Context) (*Project, error) {
|
||||
@ -214,16 +210,9 @@ func (r *queryResolver) ActiveProject(ctx context.Context) (*Project, error) {
|
||||
return nil, fmt.Errorf("could not open project: %w", err)
|
||||
}
|
||||
|
||||
return &Project{
|
||||
ID: p.ID,
|
||||
Name: p.Name,
|
||||
IsActive: r.ProjectService.IsProjectActive(p.ID),
|
||||
Settings: &ProjectSettings{
|
||||
Intercept: &InterceptSettings{
|
||||
Enabled: p.Settings.InterceptEnabled,
|
||||
},
|
||||
},
|
||||
}, nil
|
||||
project := parseProject(r.ProjectService, p)
|
||||
|
||||
return &project, nil
|
||||
}
|
||||
|
||||
func (r *queryResolver) Projects(ctx context.Context) ([]Project, error) {
|
||||
@ -234,11 +223,7 @@ func (r *queryResolver) Projects(ctx context.Context) ([]Project, error) {
|
||||
|
||||
projects := make([]Project, len(p))
|
||||
for i, proj := range p {
|
||||
projects[i] = Project{
|
||||
ID: proj.ID,
|
||||
Name: proj.Name,
|
||||
IsActive: r.ProjectService.IsProjectActive(proj.ID),
|
||||
}
|
||||
projects[i] = parseProject(r.ProjectService, proj)
|
||||
}
|
||||
|
||||
return projects, nil
|
||||
@ -603,6 +588,15 @@ func (r *mutationResolver) UpdateInterceptSettings(
|
||||
Enabled: input.Enabled,
|
||||
}
|
||||
|
||||
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)
|
||||
}
|
||||
|
||||
settings.RequestFilter = expr
|
||||
}
|
||||
|
||||
err := r.ProjectService.UpdateInterceptSettings(ctx, settings)
|
||||
if errors.Is(err, proj.ErrNoProject) {
|
||||
return nil, noActiveProjectErr(ctx)
|
||||
@ -610,9 +604,16 @@ func (r *mutationResolver) UpdateInterceptSettings(
|
||||
return nil, fmt.Errorf("could not update intercept settings: %w", err)
|
||||
}
|
||||
|
||||
return &InterceptSettings{
|
||||
updated := &InterceptSettings{
|
||||
Enabled: settings.Enabled,
|
||||
}, nil
|
||||
}
|
||||
|
||||
if settings.RequestFilter != nil {
|
||||
reqFilter := settings.RequestFilter.String()
|
||||
updated.RequestFilter = &reqFilter
|
||||
}
|
||||
|
||||
return updated, nil
|
||||
}
|
||||
|
||||
func parseSenderRequest(req sender.Request) (SenderRequest, error) {
|
||||
@ -720,6 +721,26 @@ func parseHTTPRequest(req *http.Request) (HTTPRequest, error) {
|
||||
return httpReq, nil
|
||||
}
|
||||
|
||||
func parseProject(projSvc proj.Service, p proj.Project) Project {
|
||||
project := Project{
|
||||
ID: p.ID,
|
||||
Name: p.Name,
|
||||
IsActive: projSvc.IsProjectActive(p.ID),
|
||||
Settings: &ProjectSettings{
|
||||
Intercept: &InterceptSettings{
|
||||
Enabled: p.Settings.InterceptEnabled,
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
if p.Settings.InterceptRequestFilter != nil {
|
||||
interceptReqFilter := p.Settings.InterceptRequestFilter.String()
|
||||
project.Settings.Intercept.RequestFilter = &interceptReqFilter
|
||||
}
|
||||
|
||||
return project
|
||||
}
|
||||
|
||||
func stringPtrToRegexp(s *string) (*regexp.Regexp, error) {
|
||||
if s == nil {
|
||||
return nil, nil
|
||||
|
@ -149,10 +149,12 @@ type CancelRequestResult {
|
||||
|
||||
input UpdateInterceptSettingsInput {
|
||||
enabled: Boolean!
|
||||
requestFilter: String
|
||||
}
|
||||
|
||||
type InterceptSettings {
|
||||
enabled: Boolean!
|
||||
requestFilter: String
|
||||
}
|
||||
|
||||
type Query {
|
||||
|
Reference in New Issue
Block a user