diff --git a/apps/main/forms.py b/apps/main/forms.py index d57dc4e..ab8a5a2 100644 --- a/apps/main/forms.py +++ b/apps/main/forms.py @@ -2,6 +2,7 @@ from django import forms from django.utils.safestring import mark_safe from .models import Device, Experiment, Campaign, Location from apps.main.models import Configuration +from django.template.defaultfilters import default FILE_FORMAT = ( ('json', 'json'), @@ -181,3 +182,11 @@ class FilterForm(forms.Form): self.fields['template'] = forms.BooleanField(required=False) else: self.fields[field] = forms.CharField(required=False) + +class ChangeIpForm(forms.Form): + + ip_address = forms.GenericIPAddressField() + mask = forms.GenericIPAddressField(initial='255.255.255.0') + gateway = forms.GenericIPAddressField(initial='0.0.0.0') + + diff --git a/apps/main/models.py b/apps/main/models.py index f8d82d9..e3b759e 100644 --- a/apps/main/models.py +++ b/apps/main/models.py @@ -1,5 +1,6 @@ from datetime import datetime +from django.template.base import kwarg_re try: from polymorphic.models import PolymorphicModel @@ -10,6 +11,7 @@ from django.db import models from django.core.urlresolvers import reverse from django.shortcuts import get_object_or_404 +from devices.dds import api as dds_api EXP_STATES = ( (0,'Error'), #RED @@ -133,6 +135,32 @@ class Device(models.Model): return reverse('url_device', args=[str(self.id)]) + def change_ip(self, ip_address, mask, gateway, **kwargs): + + if self.device_type.name=='dds': + try: + #if True: + answer = dds_api.change_ip(ip = self.ip_address, + port = self.port_address, + new_ip = ip_address, + mask = mask, + gateway = gateway) + if answer[0]=='1': + self.message = 'DDS - {}'.format(answer) + self.ip_address = ip_address + self.save() + else: + self.message = 'DDS - {}'.format(answer) + return False + except Exception as e: + self.message = str(e) + return False + else: + self.message = 'Not implemented' + return False + + return True + class Campaign(models.Model): diff --git a/apps/main/templates/confirm.html b/apps/main/templates/confirm.html index d176cda..1f54529 100644 --- a/apps/main/templates/confirm.html +++ b/apps/main/templates/confirm.html @@ -1,4 +1,5 @@ {% extends 'base.html' %} +{% load bootstrap3 %} {% block content-title %}{{title}}{% endblock %} {% block content-suptitle %}{{suptitle}}{% endblock %} @@ -6,12 +7,19 @@ {% block content %}
{% csrf_token %} +{% if form %} + {% bootstrap_form form layout='horizontal' size='medium' %} +
+{% endif %} {% if delete %}

Are you sure you wish to delete: {{ object }}?

{% else %} -

Are you sure you wish to proceed?

-{% endif %} - {% if message %}

{{ message }}

{% endif %} + {% if message %} +

{{ message }}

+ {% else %} +

Are you sure you wish to proceed?

+ {% endif %} +{% endif %}
+
+ + +




{% endblock %} @@ -30,5 +33,9 @@ document.location = "{% url 'url_edit_device' device.id%}"; }); + $("#bt_change_ip_device").click(function() { + document.location = "{% url 'url_change_ip_device' device.id%}"; + }); + {% endblock %} \ No newline at end of file diff --git a/apps/main/urls.py b/apps/main/urls.py index 0b5a7fd..1b886f1 100644 --- a/apps/main/urls.py +++ b/apps/main/urls.py @@ -15,6 +15,7 @@ urlpatterns = ( url(r'^device/(?P-?\d+)/$', views.device, name='url_device'), url(r'^device/(?P-?\d+)/edit/$', views.device_edit, name='url_edit_device'), url(r'^device/(?P-?\d+)/delete/$', views.device_delete, name='url_delete_device'), + url(r'^device/(?P-?\d+)/change_ip/$', views.device_change_ip, name='url_change_ip_device'), url(r'^campaign/new/$', views.campaign_new, name='url_add_campaign'), url(r'^campaign/$', views.campaigns, name='url_campaigns'), diff --git a/apps/main/views.py b/apps/main/views.py index b88bff0..547aa97 100644 --- a/apps/main/views.py +++ b/apps/main/views.py @@ -15,7 +15,7 @@ except ImportError: from urllib import urlencode from .forms import CampaignForm, ExperimentForm, DeviceForm, ConfigurationForm, LocationForm, UploadFileForm, DownloadFileForm, OperationForm, NewForm -from .forms import OperationSearchForm, FilterForm +from .forms import OperationSearchForm, FilterForm, ChangeIpForm from .tasks import task_start, task_stop @@ -276,6 +276,32 @@ def device_delete(request, id_dev): return render(request, 'confirm.html', kwargs) +@user_passes_test(lambda u:u.is_staff) +def device_change_ip(request, id_dev): + + device = get_object_or_404(Device, pk=id_dev) + + if request.method=='POST': + + if request.user.is_staff: + device.change_ip(**request.POST.dict()) + messages.success(request, device.message) + else: + messages.error(request, 'Not enough permission to delete this object') + return redirect(device.get_absolute_url()) + + kwargs = { + 'title': 'Device', + 'suptitle': 'Change IP', + 'object': device, + 'previous': device.get_absolute_url(), + 'form': ChangeIpForm(initial={'ip_address':device.ip_address}), + 'message' : ' ', + } + + return render(request, 'confirm.html', kwargs) + + def campaigns(request): page = request.GET.get('page')