Skip to content

Commit 5997a4f

Browse files
authored
Merge pull request #31 from jtdub/whois
Whois
2 parents f045bb9 + d06a524 commit 5997a4f

File tree

21 files changed

+193
-39
lines changed

21 files changed

+193
-39
lines changed

development/Dockerfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ COPY poetry.lock .
1414

1515
# hadolint ignore=DL3008
1616
RUN apt-get update && \
17-
apt-get install -y --no-install-recommends nmap iputils-ping traceroute curl mariadb-client libmariadb-dev gcc && \
17+
apt-get install -y --no-install-recommends nmap iputils-ping traceroute curl mariadb-client libmariadb-dev gcc whois && \
1818
apt-get autoremove -y && \
1919
apt-get clean all && \
2020
rm -rf /var/lib/apt/lists/*

netopsio/core/admin.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
"""Register core models in admin panel."""
22

3-
from django.contrib import admin
4-
53
from core.models import RequestLog
4+
from django.contrib import admin
65

76

87
class RequestLogAdmin(admin.ModelAdmin):

netopsio/core/api/serializers.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
"""Core App and Worker Serializers."""
2+
from core import models
23
from django_celery_results.models import TaskResult
34
from rest_framework import serializers
45

5-
from core import models
6-
76

87
class TaskResultSerializer(serializers.HyperlinkedModelSerializer):
98
"""TaskResult Serializer."""

netopsio/core/api/urls.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
"""Netops.io core api urls."""
22

3-
from rest_framework.routers import DefaultRouter
4-
53
from core.api import views
4+
from rest_framework.routers import DefaultRouter
65

76
router = DefaultRouter()
87
router.register(r"tasks", views.TaskResultViewSet)
98
router.register(r"request-logs", views.RequestLogViewSet, basename="requestlog")
109
router.register(r"ping", views.PingViewSet, basename="ping")
1110
router.register(r"traceroute", views.TraceRouteViewSet, basename="traceroute")
1211
router.register(r"nmap", views.NmapViewSet, basename="nmap")
12+
router.register(r"whois", views.WhoisViewSet, basename="whois")

netopsio/core/api/views.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,13 @@
11
"""Netops.io core api views."""
22

3+
from core import models, tasks
4+
from core.api import serializers
35
from django_celery_results.models import TaskResult
46
from drf_yasg import openapi
57
from drf_yasg.utils import swagger_auto_schema
68
from rest_framework import viewsets
79
from rest_framework.response import Response
810

9-
from core import models, tasks
10-
from core.api import serializers
1111
from netopsio.utilities import get_ip_address
1212

1313

@@ -90,3 +90,24 @@ def create(self, request, host=None):
9090
data = models.TaskModel(task_id=task.task_id)
9191
serializer = serializers.TaskSerializer(data, context={"request": request})
9292
return Response(serializer.data)
93+
94+
95+
class WhoisViewSet(viewsets.ViewSet):
96+
"""Whois Viewset."""
97+
98+
@swagger_auto_schema(
99+
request_body=openapi.Schema(
100+
type=openapi.TYPE_OBJECT,
101+
properties={
102+
"host": openapi.Schema(
103+
type=openapi.TYPE_STRING, description="Whois a domain or host."
104+
),
105+
},
106+
)
107+
) # pylint: disable=no-self-use
108+
def create(self, request, host):
109+
"""whois a host."""
110+
task = tasks.whois.delay(host=host)
111+
data = models.TaskModel(task_id=task.task_id)
112+
serializer = serializers.TaskSerializer(data, context={"request": request})
113+
return Response(serializer.data)

netopsio/core/forms.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
"""Netops.io core app forms."""
2+
3+
from django import forms
4+
5+
6+
class WhoisForm(forms.Form):
7+
"""Whois form."""
8+
9+
host = forms.CharField(label="domain or ip address", max_length=256)

netopsio/core/tasks.py

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
import subprocess
33

44
from celery import shared_task
5-
65
from core.models import RequestLog
76

87

@@ -33,3 +32,12 @@ def nmap(host: str) -> str:
3332
data = RequestLog(ip=host, result=task.stdout.decode("utf-8"), app="nmap")
3433
data.save()
3534
return task.stdout.decode("utf-8")
35+
36+
37+
@shared_task
38+
def whois(host: str) -> str:
39+
"""Whois host worker."""
40+
task = subprocess.run(["whois", host], capture_output=True, check=True)
41+
data = RequestLog(ip=host, result=task.stdout.decode("utf-8"), app="whois")
42+
data.save()
43+
return task.stdout.decode("utf-8")

netopsio/core/templates/core/task.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
<tbody>
1010
<tr>
1111
<td>{{ status }}</td>
12-
<td><a href="/tasks/{{ id }}/">{{ host }}</a></td>
12+
<td><a href="{% url 'tasks' %}{{ id }}/">{{ host }}</a></td>
1313
</tr>
1414
</tbody>
1515
</table>

netopsio/core/templates/core/tasks.html

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
<tbody>
1212
{% for task in results %}
1313
<tr>
14-
<th scope="row"><a href="/tasks/{{ task.task_id }}">{{ task.task_id }}</a></th>
14+
<th scope="row"><a href="{% url 'tasks' %}{{ task.task_id }}">{{ task.task_id }}</a></th>
1515
<td>{{ task.task_name }}</td>
1616
<td>{{ task.status }}</td>
1717
<td>{{ task.task_kwargs }}</td>
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
{% extends "base.html" %}
2+
{% block content %}
3+
{% load crispy_forms_tags %}
4+
<form action="{% url 'whois' %}" method="post">
5+
{% csrf_token %}
6+
{{ form|crispy }}
7+
<input type="submit" value="Submit" class="btn btn-primary">
8+
</form>
9+
{% endblock %}

0 commit comments

Comments
 (0)