mirror of
https://github.com/kubeshark/kubeshark.git
synced 2025-09-27 05:23:06 +00:00
Figure out decimal pattern
This commit is contained in:
@@ -1,7 +1,9 @@
|
|||||||
package oas
|
package oas
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"encoding/json"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"regexp"
|
||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
@@ -50,7 +52,7 @@ func (n *Node) getOrSet(path NodePath, existingPathObj *openapi.PathObj) (node *
|
|||||||
}
|
}
|
||||||
|
|
||||||
if node == nil {
|
if node == nil {
|
||||||
node = n.searchInParams(paramObj, chunkIsGibberish)
|
node = n.searchInParams(paramObj, pathChunk, chunkIsGibberish)
|
||||||
}
|
}
|
||||||
|
|
||||||
// still no node found, should create it
|
// still no node found, should create it
|
||||||
@@ -76,6 +78,10 @@ func (n *Node) getOrSet(path NodePath, existingPathObj *openapi.PathObj) (node *
|
|||||||
if err != nil {
|
if err != nil {
|
||||||
logger.Log.Warningf("Failed to add example to a parameter: %s", err)
|
logger.Log.Warningf("Failed to add example to a parameter: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if len(*exmp) > 1 && node.pathParam.Schema.Pattern == nil { // is it enough to decide on 2 samples?
|
||||||
|
node.pathParam.Schema.Pattern = getPatternFromExamples(exmp)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: eat up trailing slash, in a smart way: node.pathObj!=nil && path[1]==""
|
// TODO: eat up trailing slash, in a smart way: node.pathObj!=nil && path[1]==""
|
||||||
@@ -88,6 +94,34 @@ func (n *Node) getOrSet(path NodePath, existingPathObj *openapi.PathObj) (node *
|
|||||||
return node
|
return node
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getPatternFromExamples(exmp *openapi.Examples) *openapi.Regexp {
|
||||||
|
allInts := true
|
||||||
|
for _, example := range *exmp {
|
||||||
|
exampleObj, err := example.ResolveExample(exampleResolver)
|
||||||
|
if err != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
var value string
|
||||||
|
err = json.Unmarshal(exampleObj.Value, &value)
|
||||||
|
if err != nil {
|
||||||
|
logger.Log.Warningf("Failed decoding parameter example into string: %s", err)
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
|
if _, err := strconv.Atoi(value); err != nil {
|
||||||
|
allInts = false
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if allInts {
|
||||||
|
re := new(openapi.Regexp)
|
||||||
|
re.Regexp = regexp.MustCompile("\\d+")
|
||||||
|
return re
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
func (n *Node) createParam() *openapi.ParameterObj {
|
func (n *Node) createParam() *openapi.ParameterObj {
|
||||||
name := "param"
|
name := "param"
|
||||||
|
|
||||||
@@ -118,20 +152,25 @@ func (n *Node) createParam() *openapi.ParameterObj {
|
|||||||
return newParam
|
return newParam
|
||||||
}
|
}
|
||||||
|
|
||||||
func (n *Node) searchInParams(paramObj *openapi.ParameterObj, chunkIsGibberish bool) *Node {
|
func (n *Node) searchInParams(paramObj *openapi.ParameterObj, chunk string, chunkIsGibberish bool) *Node {
|
||||||
// look among params
|
|
||||||
if paramObj != nil || chunkIsGibberish {
|
if paramObj != nil || chunkIsGibberish {
|
||||||
for _, subnode := range n.children {
|
logger.Log.Debugf("")
|
||||||
if subnode.constant != nil {
|
}
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
// TODO: check the regex pattern of param? for exceptions etc
|
// look among params
|
||||||
|
for _, subnode := range n.children {
|
||||||
|
if subnode.constant != nil {
|
||||||
|
continue
|
||||||
|
}
|
||||||
|
|
||||||
if paramObj != nil {
|
if chunkIsGibberish {
|
||||||
// TODO: mergeParam(subnode.pathParam, paramObj)
|
return subnode
|
||||||
return subnode
|
} else if paramObj != nil {
|
||||||
} else {
|
// TODO: mergeParam(subnode.pathParam, paramObj)
|
||||||
|
return subnode
|
||||||
|
} else if subnode.pathParam.Schema.Pattern != nil {
|
||||||
|
// TODO: and not in exceptions
|
||||||
|
if subnode.pathParam.Schema.Pattern.Match([]byte(chunk)) {
|
||||||
return subnode
|
return subnode
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user