Files
tacticalrmm/api/tacticalrmm/winupdate/views.py
2021-01-20 22:11:54 +00:00

52 lines
1.6 KiB
Python

import asyncio
from packaging import version as pyver
from django.shortcuts import get_object_or_404
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework.authentication import TokenAuthentication
from rest_framework.permissions import IsAuthenticated
from agents.models import Agent
from .models import WinUpdate
from .serializers import UpdateSerializer, ApprovedUpdateSerializer
from tacticalrmm.utils import notify_error
@api_view()
def get_win_updates(request, pk):
agent = get_object_or_404(Agent, pk=pk)
return Response(UpdateSerializer(agent).data)
@api_view()
def run_update_scan(request, pk):
agent = get_object_or_404(Agent, pk=pk)
if pyver.parse(agent.version) < pyver.parse("1.3.0"):
return notify_error("Requires agent version 1.3.0 or greater")
asyncio.run(agent.nats_cmd({"func": "getwinupdates"}, wait=False))
return Response("ok")
@api_view()
def install_updates(request, pk):
agent = get_object_or_404(Agent, pk=pk)
if pyver.parse(agent.version) < pyver.parse("1.3.0"):
return notify_error("Requires agent version 1.3.0 or greater")
nats_data = {
"func": "installwinupdates",
"guids": agent.get_approved_update_guids(),
}
asyncio.run(agent.nats_cmd(nats_data, wait=False))
return Response(f"Patches will now be installed on {agent.hostname}")
@api_view(["PATCH"])
def edit_policy(request):
patch = get_object_or_404(WinUpdate, pk=request.data["pk"])
patch.action = request.data["policy"]
patch.save(update_fields=["action"])
return Response("ok")