Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
from django.db import migrations


def migrate(apps, schema_editor):
Parameter = apps.get_model("api_app", "Parameter")
PluginConfig = apps.get_model("api_app", "PluginConfig")
PythonModule = apps.get_model("api_app", "PythonModule")
pm = PythonModule.objects.get(
module="phoneinfoga_scan.Phoneinfoga",
base_path="api_app.analyzers_manager.observable_analyzers",
)
Parameter.objects.create(
name="googlecse_max_results",
type="int",
description="Number of Google results for [Phoneinfoga](https://sundowndev.github.io/phoneinfoga/)",
is_secret=False,
required=False,
python_module=pm,
)
p2 = Parameter.objects.create(
name="scanners",
type="list",
description="List of scanner names for [Phoneinfoga](https://sundowndev.github.io/phoneinfoga/)",
is_secret=False,
required=False,
python_module=pm,
)
p3 = Parameter.objects.get(name="scanner_name", python_module=pm)
for config in pm.analyzerconfigs.all():
pcs = PluginConfig.objects.filter(analyzer_config=config, parameter=p3)
for pc in pcs:
pc.value = [pc.value]
pc.parameter = p2
pc.save()
p3.delete()


class Migration(migrations.Migration):
atomic = False
dependencies = [
("analyzers_manager", "0087_alter_mmdbserver_param"),
]

operations = [migrations.RunPython(migrate, migrations.RunPython.noop)]
61 changes: 45 additions & 16 deletions api_app/analyzers_manager/observable_analyzers/phoneinfoga_scan.py
Original file line number Diff line number Diff line change
@@ -1,13 +1,27 @@
import logging
from enum import Enum
from typing import Dict, List

import requests

from api_app.analyzers_manager import classes
from api_app.analyzers_manager.exceptions import AnalyzerConfigurationException
from tests.mock_utils import MockUpResponse

logger = logging.getLogger(__name__)


class SCANNER_NAMES(Enum):
LOCAL = "local"
NUM_VERIFY = "numverify"
GOOGLECSE = "googlecse"
OVH = "ovh"

@classmethod
def values(cls):
return list(map(lambda c: c.value, cls))


class Phoneinfoga(classes.ObservableAnalyzer, classes.DockerBasedAnalyzer):
"""
Docker based analyzer for phoneinfoga
Expand All @@ -17,35 +31,50 @@ def update(self) -> bool:
pass

observable_name: str
scanner_name: str
scanners: List[str]
googlecse_max_results: int = 10
name: str = "phoneinfoga"
# here is a list of pre declared api keys, user can put
# values as per their required scanner, by default it is null

_NUMVERIFY_API_KEY: str = ""
_GOOGLECSE_CX: str = ""
_GOOGLE_API_KEY: str = ""

url = "http://phoneinfoga:5000"

def config(self, runtime_configuration: Dict):
super().config(runtime_configuration)
for scanner in self.scanners:
if scanner not in SCANNER_NAMES.values():
raise AnalyzerConfigurationException(
f"Scanner {scanner} not supported. Choices are {', '.join(SCANNER_NAMES.values())}"
)

def run(self):
url: str = f"{self.url}/api/v2/scanners/{self.scanner_name}/run"
response = requests.post(
url,
headers={
"Content-Type": "application/json",
"accept": "application/json",
},
json={
"number": self.observable_name,
"options": {
"NUMVERIFY_API_KEY": self._NUMVERIFY_API_KEY,
result = {}
for scanner in self.scanners:
url: str = f"{self.url}/api/v2/scanners/{scanner}/run"
options = {}
if scanner == SCANNER_NAMES.NUM_VERIFY.value:
options["NUMVERIFY_API_KEY"] = self._NUMVERIFY_API_KEY
elif scanner == SCANNER_NAMES.GOOGLECSE.value:
options = {
"GOOGLECSE_CX": self._GOOGLECSE_CX,
"GOOGLE_API_KEY": self._GOOGLE_API_KEY,
"GOOGLECSE_MAX_RESULTS": self.googlecse_max_results,
}
response = requests.post(
url,
headers={
"Content-Type": "application/json",
"accept": "application/json",
},
},
)
response.raise_for_status()
return response.json()
json={"number": self.observable_name, "options": options},
)
response.raise_for_status()
result[scanner] = response.json()
return result

@staticmethod
def mocked_docker_analyzer_post(*args, **kwargs):
Expand Down