views.py 9.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276
  1. from django.shortcuts import render
  2. from django.http import HttpResponse
  3. from django.template import loader
  4. from django.shortcuts import redirect
  5. from django.conf import settings
  6. from django.urls import reverse
  7. import vyos
  8. def index(request):
  9. if not request.user.is_authenticated:
  10. return redirect('%s?next=%s' % (reverse('registration-login'), request.path))
  11. #interfaces = vyos.get_interfaces()
  12. all_instances = vyos.instance_getall()
  13. hostname_default = vyos.get_hostname_prefered(request)
  14. firewall_all = vyos.get_firewall_all(hostname_default)
  15. if firewall_all == False:
  16. return redirect('firewall:firewall-create')
  17. for xitem in firewall_all['name']:
  18. if 'default-action' in firewall_all['name'][xitem]:
  19. firewall_all['name'][xitem]['default_action'] = firewall_all['name'][xitem]['default-action']
  20. del firewall_all['name'][xitem]['default-action']
  21. template = loader.get_template('firewall/list.html')
  22. context = {
  23. #'interfaces': interfaces,
  24. 'instances': all_instances,
  25. 'hostname_default': hostname_default,
  26. 'firewall_all': firewall_all
  27. }
  28. return HttpResponse(template.render(context, request))
  29. def create(request):
  30. if not request.user.is_authenticated:
  31. return redirect('%s?next=%s' % (reverse('registration-login'), request.path))
  32. #interfaces = vyos.get_interfaces()
  33. all_instances = vyos.instance_getall()
  34. hostname_default = vyos.get_hostname_prefered(request)
  35. if 'name' in request.POST:
  36. cmd = {"op": "set", "path": ["firewall", "name", request.POST['name']]}
  37. result1 = vyos.set_config(hostname_default, cmd)
  38. print(result1)
  39. if 'description' in request.POST:
  40. cmd = {"op": "set", "path": ["firewall", "name", request.POST['name'], "description", request.POST['description']]}
  41. result2 = vyos.set_config(hostname_default, cmd)
  42. print(result2)
  43. if 'action' in request.POST:
  44. cmd = {"op": "set", "path": ["firewall", "name", request.POST['name'], "default-action", request.POST['action']]}
  45. result3 = vyos.set_config(hostname_default, cmd)
  46. print(result3)
  47. return redirect('firewall:firewall-list')
  48. template = loader.get_template('firewall/create.html')
  49. context = {
  50. #'interfaces': interfaces,
  51. 'instances': all_instances,
  52. 'hostname_default': hostname_default,
  53. }
  54. return HttpResponse(template.render(context, request))
  55. def addrule(request, firewall_name):
  56. if not request.user.is_authenticated:
  57. return redirect('%s?next=%s' % (reverse('registration-login'), request.path))
  58. #interfaces = vyos.get_interfaces()
  59. all_instances = vyos.instance_getall()
  60. hostname_default = vyos.get_hostname_prefered(request)
  61. firewall = vyos.get_firewall(hostname_default, firewall_name)
  62. changed = False
  63. if 'action' in request.POST:
  64. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", request.POST['rulenumber'], "action", request.POST['action']]}
  65. result1 = vyos.set_config(hostname_default, cmd)
  66. print(result1)
  67. changed = True
  68. if 'protocol' in request.POST:
  69. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", request.POST['rulenumber'], "protocol", request.POST['protocol']]}
  70. result2 = vyos.set_config(hostname_default, cmd)
  71. print(result2)
  72. changed = True
  73. if 'destinationport' in request.POST:
  74. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", request.POST['rulenumber'], "destination", "port", request.POST['destinationport']]}
  75. result3 = vyos.set_config(hostname_default, cmd)
  76. print(result3)
  77. changed = True
  78. if 'sourceport' in request.POST:
  79. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", request.POST['rulenumber'], "source", "port", request.POST['sourceport']]}
  80. result3 = vyos.set_config(hostname_default, cmd)
  81. print(result3)
  82. changed = True
  83. if changed == True:
  84. return redirect('firewall:show', firewall_name)
  85. template = loader.get_template('firewall/show.html')
  86. context = {
  87. #'interfaces': interfaces,
  88. 'instances': all_instances,
  89. 'hostname_default': hostname_default,
  90. 'firewall': firewall,
  91. 'firewall_name': firewall_name,
  92. }
  93. return HttpResponse(template.render(context, request))
  94. def firewall_removerule(request, firewall_name, firewall_rulenumber):
  95. all_instances = vyos.instance_getall()
  96. hostname_default = vyos.get_hostname_prefered(request)
  97. firewall = vyos.get_firewall(hostname_default, firewall_name)
  98. firewall_rule = vyos.get_firewall_rule(hostname_default, firewall_name, firewall_rulenumber)
  99. if firewall_rule and firewall:
  100. vyos.delete_route_rule(hostname_default, firewall_name, firewall_rulenumber)
  101. return redirect('firewall:show', firewall_name)
  102. def editrule(request, firewall_name, firewall_rulenumber):
  103. #interfaces = vyos.get_interfaces()
  104. all_instances = vyos.instance_getall()
  105. hostname_default = vyos.get_hostname_prefered(request)
  106. firewall = vyos.get_firewall(hostname_default, firewall_name)
  107. firewall_rule = vyos.get_firewall_rule(hostname_default, firewall_name, firewall_rulenumber)
  108. changed = False
  109. if 'action' in request.POST:
  110. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", firewall_rulenumber, "action", request.POST['action']]}
  111. result1 = vyos.set_config(hostname_default, cmd)
  112. print(result1)
  113. changed = True
  114. if 'protocol' in request.POST:
  115. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", firewall_rulenumber, "protocol", request.POST['protocol']]}
  116. result2 = vyos.set_config(hostname_default, cmd)
  117. print(result2)
  118. changed = True
  119. if 'destinationport' in request.POST:
  120. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", firewall_rulenumber, "destination", "port", request.POST['destinationport']]}
  121. result3 = vyos.set_config(hostname_default, cmd)
  122. print(result3)
  123. changed = True
  124. if 'sourceport' in request.POST:
  125. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", firewall_rulenumber, "source", "port", request.POST['sourceport']]}
  126. result3 = vyos.set_config(hostname_default, cmd)
  127. print(result3)
  128. changed = True
  129. if changed == True:
  130. return redirect('firewall:firewall-list')
  131. template = loader.get_template('firewall/editrule.html')
  132. context = {
  133. #'interfaces': interfaces,
  134. 'instances': all_instances,
  135. 'hostname_default': hostname_default,
  136. 'firewall': firewall,
  137. 'firewall_name': firewall_name,
  138. 'firewall_rule': firewall_rule,
  139. 'firewall_rulenumber' : firewall_rulenumber
  140. }
  141. return HttpResponse(template.render(context, request))
  142. def show(request, firewall_name):
  143. if not request.user.is_authenticated:
  144. return redirect('%s?next=%s' % (reverse('registration-login'), request.path))
  145. #interfaces = vyos.get_interfaces()
  146. all_instances = vyos.instance_getall()
  147. hostname_default = vyos.get_hostname_prefered(request)
  148. firewall = vyos.get_firewall(hostname_default, firewall_name)
  149. template = loader.get_template('firewall/show.html')
  150. context = {
  151. #'interfaces': interfaces,
  152. 'instances': all_instances,
  153. 'hostname_default': hostname_default,
  154. 'firewall': firewall,
  155. 'firewall_name': firewall_name,
  156. }
  157. return HttpResponse(template.render(context, request))
  158. def firewall_remove(request, firewall_name):
  159. if not request.user.is_authenticated:
  160. return redirect('%s?next=%s' % (reverse('registration-login'), request.path))
  161. #interfaces = vyos.get_interfaces()
  162. all_instances = vyos.instance_getall()
  163. hostname_default = vyos.get_hostname_prefered(request)
  164. firewall = vyos.delete_firewall(hostname_default, firewall_name)
  165. return redirect('firewall:firewall-list')
  166. def firewall_edit(request, firewall_name):
  167. if not request.user.is_authenticated:
  168. return redirect('%s?next=%s' % (reverse('registration-login'), request.path))
  169. #interfaces = vyos.get_interfaces()
  170. all_instances = vyos.instance_getall()
  171. hostname_default = vyos.get_hostname_prefered(request)
  172. firewall = vyos.get_firewall(hostname_default, firewall_name)
  173. firewall['defaultaction'] = firewall['default-action']
  174. changed = False
  175. if 'description' in request.POST:
  176. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "description", request.POST['description']]}
  177. result2 = vyos.set_config(hostname_default, cmd)
  178. print(result2)
  179. changed = True
  180. if 'action' in request.POST:
  181. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "default-action", request.POST['action']]}
  182. result3 = vyos.set_config(hostname_default, cmd)
  183. print(result3)
  184. changed = True
  185. if changed == True:
  186. return redirect('firewall:firewall-list')
  187. template = loader.get_template('firewall/edit.html')
  188. context = {
  189. #'interfaces': interfaces,
  190. 'instances': all_instances,
  191. 'hostname_default': hostname_default,
  192. 'firewall_name': firewall_name,
  193. 'firewall': firewall
  194. }
  195. return HttpResponse(template.render(context, request))