Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
mxrch
GitHub Repository: mxrch/GHunt
Path: blob/master/ghunt/apis/digitalassetslinks.py
253 views
1
from ghunt.objects.base import GHuntCreds
2
from ghunt.errors import *
3
import ghunt.globals as gb
4
from ghunt.objects.apis import GAPI, EndpointConfig
5
from ghunt.parsers.digitalassetslinks import DalStatements
6
7
import httpx
8
9
from typing import *
10
import inspect
11
import json
12
13
14
class DigitalAssetsLinksHttp(GAPI):
15
def __init__(self, creds: GHuntCreds, headers: Dict[str, str] = {}):
16
super().__init__()
17
18
if not headers:
19
headers = gb.config.headers
20
21
base_headers = {}
22
23
headers = {**headers, **base_headers}
24
25
self.hostname = "digitalassetlinks.googleapis.com"
26
self.scheme = "https"
27
28
self._load_api(creds, headers)
29
30
async def list_statements(self, as_client: httpx.AsyncClient, website: str="",
31
android_package_name: str="", android_cert_fingerprint: str="") -> Tuple[bool, DalStatements]:
32
endpoint = EndpointConfig(
33
name = inspect.currentframe().f_code.co_name,
34
verb = "GET",
35
data_type = None, # json, data or None
36
authentication_mode = None, # sapisidhash, cookies_only, oauth or None
37
require_key = None, # key name, or None
38
)
39
self._load_endpoint(endpoint)
40
41
base_url = "/v1/statements:list"
42
43
# Inputs checks
44
if website and (android_package_name or android_cert_fingerprint):
45
raise GHuntParamsInputError(f"[DigitalAssetsLinks API list statements] website and {android_package_name if android_package_name else android_cert_fingerprint} can't be both put at the same time.")
46
elif not website and not (android_package_name and android_cert_fingerprint):
47
raise GHuntParamsInputError("[DigitalAssetsLinks API list statements] Please , android_package_name and android_cert_ingerprint.")
48
elif not (website or android_package_name or android_cert_fingerprint):
49
raise GHuntParamsInputError("[DigitalAssetsLinks API list statements] Please choose at least one parameter between website, android_package_name and android_cert_ingerprint.")
50
51
params = {}
52
if website:
53
params["source.web.site"] = website
54
if android_package_name:
55
params["source.androidApp.packageName"] = android_package_name
56
if android_cert_fingerprint:
57
params["source.androidApp.certificate.sha256Fingerprint"] = android_cert_fingerprint
58
59
req = await self._query(endpoint.name, as_client, base_url, params=params)
60
61
# Parsing
62
data = json.loads(req.text)
63
64
statements = DalStatements()
65
if "error" in data:
66
return False, statements
67
68
statements._scrape(data)
69
70
found = bool(statements.statements)
71
return found, statements
72