1919
2020
2121class Search :
22+ def _is_valid_part (self , part ):
23+ return part in CPEGuesser .VALID_CPE_PARTS
24+
25+ def _split_query (self , query ):
26+ return [keyword for keyword in query .split () if keyword ]
27+
28+ def _search (self , query , part , resp ):
29+ if not query :
30+ resp .status = falcon .HTTP_400
31+ resp .media = "Missing query array or incorrect JSON format"
32+ return
33+
34+ if part is not None and not self ._is_valid_part (part ):
35+ resp .status = falcon .HTTP_400
36+ resp .media = "Invalid part parameter. Allowed values are: a, h, o"
37+ return
38+
39+ cpeGuesser = CPEGuesser ()
40+ resp .media = cpeGuesser .guessCpe (query , part = part )
41+
2242 def on_post (self , req , resp ):
2343 data_post = req .bounded_stream .read ()
2444 js = data_post .decode ("utf-8" )
@@ -36,8 +56,20 @@ def on_post(self, req, resp):
3656 resp .media = "Missing query array or incorrect JSON format"
3757 return
3858
39- cpeGuesser = CPEGuesser ()
40- resp .media = cpeGuesser .guessCpe (q ["query" ])
59+ part = q .get ("part" )
60+ if isinstance (part , str ):
61+ part = part .lower ()
62+
63+ self ._search (q ["query" ], part , resp )
64+
65+ def on_get (self , req , resp ):
66+ query = req .get_param ("q" )
67+ part = req .get_param ("part" )
68+
69+ if isinstance (part , str ):
70+ part = part .lower ()
71+
72+ self ._search (self ._split_query (query or "" ), part , resp )
4173
4274
4375class Unique :
@@ -58,9 +90,20 @@ def on_post(self, req, resp):
5890 resp .media = "Missing query array or incorrect JSON format"
5991 return
6092
93+ part = q .get ("part" )
94+ if isinstance (part , str ):
95+ part = part .lower ()
96+ elif part is not None :
97+ part = None
98+
99+ if part is not None and part not in CPEGuesser .VALID_CPE_PARTS :
100+ resp .status = falcon .HTTP_400
101+ resp .media = "Invalid part parameter. Allowed values are: a, h, o"
102+ return
103+
61104 cpeGuesser = CPEGuesser ()
62105 try :
63- r = cpeGuesser .guessCpe (q ["query" ])[:1 ][0 ][1 ]
106+ r = cpeGuesser .guessCpe (q ["query" ], part = part )[:1 ][0 ][1 ]
64107 except :
65108 r = []
66109 resp .media = r
0 commit comments