Skip to content

Commit cb895db

Browse files
committed
Implement GetPlugin
1 parent 2e24f03 commit cb895db

4 files changed

Lines changed: 46 additions & 27 deletions

File tree

example/example_client.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,9 +66,17 @@ def example_get_leak_raw_query():
6666
)
6767

6868

69+
def example_get_plugins():
70+
response = CLIENT.get_plugins()
71+
for p in response.json():
72+
print(p.name)
73+
print(p.description)
74+
75+
6976
if __name__ == "__main__":
7077
example_get_host_filter_plugin()
7178
example_get_service_filter_plugin()
7279
example_get_leaks_filter_multiple_plugins()
7380
example_get_leaks_multiple_filter_plugins_must_not()
7481
example_get_leak_raw_query()
82+
example_get_plugins()

leakix/client.py

Lines changed: 30 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,11 @@ class HostResult(Model):
2525

2626

2727
class Client:
28-
def __init__(self,
29-
api_key: Optional[str] = None,
30-
base_url: Optional[str] = "https://leakix.net"):
28+
def __init__(
29+
self,
30+
api_key: Optional[str] = None,
31+
base_url: Optional[str] = "https://leakix.net",
32+
):
3133
self.api_key = api_key
3234
self.base_url = base_url
3335
self.headers = {
@@ -37,17 +39,10 @@ def __init__(self,
3739
if api_key:
3840
self.headers["api-key"] = api_key
3941

40-
def get(self, scope: Scope, queries: Optional[List[Query]] = None):
41-
if queries is None or len(queries) == 0:
42-
serialized_query = EmptyQuery().serialize()
43-
else:
44-
serialized_query = [q.serialize() for q in queries]
45-
serialized_query = " ".join(serialized_query)
46-
serialized_query = "%s" % serialized_query
47-
url = "%s/search" % self.base_url
42+
def __get(self, url, params):
4843
r = requests.get(
4944
url,
50-
params={"scope": scope.value, "q": serialized_query},
45+
params=params,
5146
headers=self.headers,
5247
)
5348
if r.status_code == 200:
@@ -56,7 +51,18 @@ def get(self, scope: Scope, queries: Optional[List[Query]] = None):
5651
elif r.status_code == 429:
5752
return RateLimitResponse(response=r)
5853
else:
59-
return ErrorResponse(response=r, response_json=response.json())
54+
return ErrorResponse(response=r, response_json=r.json())
55+
56+
def get(self, scope: Scope, queries: Optional[List[Query]] = None):
57+
if queries is None or len(queries) == 0:
58+
serialized_query = EmptyQuery().serialize()
59+
else:
60+
serialized_query = [q.serialize() for q in queries]
61+
serialized_query = " ".join(serialized_query)
62+
serialized_query = "%s" % serialized_query
63+
url = "%s/search" % self.base_url
64+
r = self.__get(url=url, params={"scope": scope.value, "q": serialized_query})
65+
return r
6066

6167
def get_service(self, queries: Optional[List[Query]] = None):
6268
r = self.get(Scope.SERVICE, queries=queries)
@@ -76,17 +82,20 @@ def get_leak(self, queries: Optional[List[Query]] = None):
7682

7783
def get_host(self, ipv4: str):
7884
url = "%s/host/%s" % (self.base_url, ipv4)
79-
r = requests.get(url, headers=self.headers)
80-
if r.status_code == 200:
85+
r = self.__get(url, params=None)
86+
if r.is_success():
8187
response_json = r.json()
8288
formatted_result = HostResult.from_dict(response_json)
8389
response_json = {
8490
"services": formatted_result.Services,
8591
"leaks": formatted_result.Leaks,
8692
}
87-
return SuccessResponse(response=r, response_json=response_json)
88-
elif r.status_code == 429:
89-
return RateLimitResponse(response=r)
90-
else:
91-
response_json = r.json()
92-
return ErrorResponse(response=r, response_json=response_json)
93+
r.response_json = response_json
94+
return r
95+
96+
def get_plugins(self):
97+
url = "%s/api/plugins" % (self.base_url)
98+
r = self.__get(url, params=None)
99+
if r.is_success():
100+
r.response_json = [APIResult.from_dict(d) for d in r.json()]
101+
return r

leakix/plugin.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,10 @@
11
from enum import Enum
2+
from serde import Model, fields
3+
4+
5+
class APIResult(Model):
6+
name: fields.Str()
7+
description: fields.Str()
28

39

410
class Plugin(Enum):

leakix/response.py

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,10 @@
44
class AbstractResponse(metaclass=ABCMeta):
55
def __init__(self, response, response_json=None):
66
self.response = response
7-
self.response_json = response_json
7+
self.response_json = response_json or response.json()
88

99
def json(self):
10-
return (
11-
self.response_json
12-
if self.response_json is not None
13-
else self.response.json()
14-
)
10+
return self.response_json
1511

1612
def status_code(self):
1713
return self.response.status_code

0 commit comments

Comments
 (0)