from rest_framework import views, status
from rest_framework.response import Response
import sys
import sys
IS_WINDOWS = sys.platform.startswith('win')
if IS_WINDOWS:
from api_searcher.windows.hardware import Hardware
from api_searcher.windows.local import LocalInfo
from api_searcher.windows.network import LocalNetworkData
from api_searcher.windows.registry import WindowsRegistry
[docs]def is_windows_os():
return sys.platform.startswith('win')
[docs]class NetworkLocalView(views.APIView):
"""Widok Django zwracający informacje o lokalnej sieci na podstawie danych dostępnych w systemie Windows."""
[docs] def get(self, request):
"""
Zwraca informacje sieciowe lokalnej maszyny na której uruchomiono serwer aplikacji
na podstawie żądania GET HTTP użytkownika.
:param request: obiekt dla widoku Django z informacjami od użytkownika
:return: dane w postaci json zawierajace informacje o sieci w jakiej znajduje się host
"""
if is_windows_os():
try:
return Response(LocalNetworkData().values)
except BaseException as ex:
return Response(
{"error": "Unable to get network information.", "details": str(ex)},
status=status.HTTP_501_NOT_IMPLEMENTED)
else:
return Response({"message": "Method not allowed on this OS."},
status=status.HTTP_417_EXPECTATION_FAILED)
[docs]class LocalView(views.APIView):
"""Widok Django zwracajacy informacje o lokalnej maszynie Windows"""
[docs] def get(self, request):
"""
Zwraca ogólne informacje o lokalnej maszynie na której uruchomiono serwer aplikacji
na podstawie żądania GET HTTP użytkownika.
:param request: obiekt dla widoku Django z informacjami od użytkownika
:return: dane w postaci json zawierajace ogólne informacje o maszynie na której uruchomiono aplikacje
"""
if is_windows_os():
try:
return Response(LocalInfo().values)
except Exception as ex:
return Response(
{"error": "Unable to get general Windows machine information.", "details": str(ex)},
status=status.HTTP_501_NOT_IMPLEMENTED)
else:
return Response({"message": "Method not allowed on this OS."},
status=status.HTTP_417_EXPECTATION_FAILED)
[docs]class HardwareView(views.APIView):
"""Widok zwracajacy informacje sprzętowe dostępne z poziomu systemu Windows"""
[docs] def get(self, request):
"""Zwraca informacje sprzętowe o lokalnej maszynie na której uruchomiono serwer aplikacji
na podstawie żądania GET HTTP użytkownika.
:param request: obiekt dla widoku Django z informacjami od użytkownika
:return: dane w postaci json zawierajace informacje sprzętowe
"""
if is_windows_os():
try:
hardware = Hardware()
response = hardware.to_json()
return Response(response)
except BaseException as ex:
return Response(
{"error": "Unable to get Windows hardware data.", "details": str(ex)},
status=status.HTTP_501_NOT_IMPLEMENTED
)
else:
return Response({"message": "Method not allowed on this OS."}, status=status.HTTP_417_EXPECTATION_FAILED)
[docs]class RegistryView(views.APIView):
"""Widok Django zwracający informacje o lokalnie zainstalowanym oprogramowaniu w systemie Windows"""
[docs] def get(self, request):
"""
Zwraca informacje o lokalnie zainstalowanym oprogramowaniu w systemie Windows na podstawie żądania GET HTTP użytkownika.
:param request: obiekt dla widoku Django z informacjami od użytkownika
:return: dane w postaci json zawierajace informacje o lokalnych aplikacjach
"""
if is_windows_os():
try:
windows_registry = WindowsRegistry()
response = windows_registry.get_all_software()
return Response(response)
except BaseException as ex:
return Response(
{"error": "Unable to get data from Windows registry", "details": str(ex)},
status=status.HTTP_501_NOT_IMPLEMENTED
)
else:
return Response({"message": "Method not allowed on this OS."}, status=status.HTTP_417_EXPECTATION_FAILED)