views.py 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477
  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. from performance import timer
  9. from perms import is_authenticated
  10. import perms
  11. @is_authenticated
  12. def index(request):
  13. #interfaces = vyos.get_interfaces()
  14. all_instances = vyos.instance_getall_by_group(request)
  15. hostname_default = vyos.get_hostname_prefered(request)
  16. is_superuser = perms.get_is_superuser(request.user)
  17. firewall_all = vyos.get_firewall_all(hostname_default)
  18. if firewall_all == False:
  19. return redirect('firewall:firewall-create')
  20. for xitem in firewall_all['name']:
  21. if 'default-action' in firewall_all['name'][xitem]:
  22. firewall_all['name'][xitem]['default_action'] = firewall_all['name'][xitem]['default-action']
  23. del firewall_all['name'][xitem]['default-action']
  24. template = loader.get_template('firewall/list.html')
  25. context = {
  26. #'interfaces': interfaces,
  27. 'instances': all_instances,
  28. 'hostname_default': hostname_default,
  29. 'firewall_all': firewall_all,
  30. 'username': request.user,
  31. 'is_superuser' : is_superuser,
  32. }
  33. return HttpResponse(template.render(context, request))
  34. @is_authenticated
  35. def create(request):
  36. #interfaces = vyos.get_interfaces()
  37. all_instances = vyos.instance_getall()
  38. hostname_default = vyos.get_hostname_prefered(request)
  39. is_superuser = perms.get_is_superuser(request.user)
  40. if 'name' in request.POST:
  41. cmd = {"op": "set", "path": ["firewall", "name", request.POST['name']]}
  42. result1 = vyos.set_config(hostname_default, cmd)
  43. print(result1)
  44. if 'description' in request.POST:
  45. cmd = {"op": "set", "path": ["firewall", "name", request.POST['name'], "description", request.POST['description']]}
  46. result2 = vyos.set_config(hostname_default, cmd)
  47. print(result2)
  48. if 'action' in request.POST:
  49. cmd = {"op": "set", "path": ["firewall", "name", request.POST['name'], "default-action", request.POST['action']]}
  50. result3 = vyos.set_config(hostname_default, cmd)
  51. print(result3)
  52. return redirect('firewall:firewall-list')
  53. template = loader.get_template('firewall/create.html')
  54. context = {
  55. #'interfaces': interfaces,
  56. 'instances': all_instances,
  57. 'hostname_default': hostname_default,
  58. 'username': request.user,
  59. 'is_superuser' : is_superuser,
  60. }
  61. return HttpResponse(template.render(context, request))
  62. @is_authenticated
  63. def addrule(request, firewall_name):
  64. #interfaces = vyos.get_interfaces()
  65. all_instances = vyos.instance_getall()
  66. hostname_default = vyos.get_hostname_prefered(request)
  67. is_superuser = perms.get_is_superuser(request.user)
  68. firewall = vyos.get_firewall(hostname_default, firewall_name)
  69. changed = False
  70. if 'action' in request.POST:
  71. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", request.POST['rulenumber'], "action", request.POST['action']]}
  72. result1 = vyos.set_config(hostname_default, cmd)
  73. print(result1)
  74. changed = True
  75. if 'protocol' in request.POST:
  76. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", request.POST['rulenumber'], "protocol", request.POST['protocol']]}
  77. result2 = vyos.set_config(hostname_default, cmd)
  78. print(result2)
  79. changed = True
  80. if 'destinationport' in request.POST:
  81. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", request.POST['rulenumber'], "destination", "port", request.POST['destinationport']]}
  82. result3 = vyos.set_config(hostname_default, cmd)
  83. print(result3)
  84. changed = True
  85. if 'sourceport' in request.POST:
  86. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", request.POST['rulenumber'], "source", "port", request.POST['sourceport']]}
  87. result3 = vyos.set_config(hostname_default, cmd)
  88. print(result3)
  89. changed = True
  90. if changed == True:
  91. return redirect('firewall:show', firewall_name)
  92. template = loader.get_template('firewall/addrule.html')
  93. context = {
  94. #'interfaces': interfaces,
  95. 'instances': all_instances,
  96. 'hostname_default': hostname_default,
  97. 'firewall': firewall,
  98. 'firewall_name': firewall_name,
  99. 'username': request.user,
  100. 'is_superuser' : is_superuser,
  101. }
  102. return HttpResponse(template.render(context, request))
  103. @is_authenticated
  104. def firewall_removerule(request, firewall_name, firewall_rulenumber):
  105. all_instances = vyos.instance_getall()
  106. hostname_default = vyos.get_hostname_prefered(request)
  107. firewall = vyos.get_firewall(hostname_default, firewall_name)
  108. firewall_rule = vyos.get_firewall_rule(hostname_default, firewall_name, firewall_rulenumber)
  109. if firewall_rule and firewall:
  110. vyos.delete_route_rule(hostname_default, firewall_name, firewall_rulenumber)
  111. return redirect('firewall:show', firewall_name)
  112. @is_authenticated
  113. def editrule(request, firewall_name, firewall_rulenumber):
  114. #interfaces = vyos.get_interfaces()
  115. all_instances = vyos.instance_getall()
  116. hostname_default = vyos.get_hostname_prefered(request)
  117. is_superuser = perms.get_is_superuser(request.user)
  118. firewall = vyos.get_firewall(hostname_default, firewall_name)
  119. firewall_rule = vyos.get_firewall_rule(hostname_default, firewall_name, firewall_rulenumber)
  120. changed = False
  121. if 'action' in request.POST:
  122. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", firewall_rulenumber, "action", request.POST['action']]}
  123. result1 = vyos.set_config(hostname_default, cmd)
  124. print(result1)
  125. changed = True
  126. if 'protocol' in request.POST:
  127. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", firewall_rulenumber, "protocol", request.POST['protocol']]}
  128. result2 = vyos.set_config(hostname_default, cmd)
  129. print(result2)
  130. changed = True
  131. if 'destinationport' in request.POST:
  132. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", firewall_rulenumber, "destination", "port", request.POST['destinationport']]}
  133. result3 = vyos.set_config(hostname_default, cmd)
  134. print(result3)
  135. changed = True
  136. if 'sourceport' in request.POST:
  137. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "rule", firewall_rulenumber, "source", "port", request.POST['sourceport']]}
  138. result3 = vyos.set_config(hostname_default, cmd)
  139. print(result3)
  140. changed = True
  141. if changed == True:
  142. return redirect('firewall:firewall-list')
  143. template = loader.get_template('firewall/editrule.html')
  144. context = {
  145. #'interfaces': interfaces,
  146. 'instances': all_instances,
  147. 'hostname_default': hostname_default,
  148. 'firewall': firewall,
  149. 'firewall_name': firewall_name,
  150. 'firewall_rule': firewall_rule,
  151. 'firewall_rulenumber' : firewall_rulenumber,
  152. 'username': request.user,
  153. 'is_superuser' : is_superuser,
  154. }
  155. return HttpResponse(template.render(context, request))
  156. @is_authenticated
  157. def show(request, firewall_name):
  158. #interfaces = vyos.get_interfaces()
  159. all_instances = vyos.instance_getall()
  160. hostname_default = vyos.get_hostname_prefered(request)
  161. is_superuser = perms.get_is_superuser(request.user)
  162. firewall = vyos.get_firewall(hostname_default, firewall_name)
  163. template = loader.get_template('firewall/show.html')
  164. context = {
  165. #'interfaces': interfaces,
  166. 'instances': all_instances,
  167. 'hostname_default': hostname_default,
  168. 'firewall': firewall,
  169. 'firewall_name': firewall_name,
  170. 'username': request.user,
  171. 'is_superuser' : is_superuser,
  172. }
  173. return HttpResponse(template.render(context, request))
  174. @is_authenticated
  175. def firewall_networkgroup_list(request):
  176. hostname_default = vyos.get_hostname_prefered(request)
  177. firewall_networkgroup = vyos.get_firewall_networkgroup(hostname_default)
  178. all_instances = vyos.instance_getall_by_group(request)
  179. is_superuser = perms.get_is_superuser(request.user)
  180. template = loader.get_template('firewall/networkgroup-list.html')
  181. context = {
  182. 'firewall_networkgroup': firewall_networkgroup,
  183. 'hostname_default': hostname_default,
  184. 'username': request.user,
  185. 'instances': all_instances,
  186. 'is_superuser' : is_superuser,
  187. }
  188. return HttpResponse(template.render(context, request))
  189. @is_authenticated
  190. def firewall_networkgroup_add(request):
  191. hostname_default = vyos.get_hostname_prefered(request)
  192. all_instances = vyos.instance_getall_by_group(request)
  193. is_superuser = perms.get_is_superuser(request.user)
  194. if request.POST.get('name', None) != None and request.POST.get('network', None) != None:
  195. vyos.set_firewall_networkgroup_add(hostname_default, request.POST.get('name'), request.POST.get('network'))
  196. if request.POST.get('description', None) != None:
  197. vyos.set_firewall_networkgroup_description(hostname_default, request.POST.get('name'), request.POST.get('description'))
  198. return redirect('firewall:firewall-networkgroup-list')
  199. template = loader.get_template('firewall/networkgroup-add.html')
  200. context = {
  201. 'hostname_default': hostname_default,
  202. 'username': request.user,
  203. 'instances': all_instances,
  204. 'is_superuser' : is_superuser,
  205. }
  206. return HttpResponse(template.render(context, request))
  207. @is_authenticated
  208. def firewall_networkgroup_del(request, groupname):
  209. hostname_default = vyos.get_hostname_prefered(request)
  210. vyos.set_firewall_networkgroup_del(hostname_default, groupname)
  211. return redirect('firewall:firewall-networkgroup-list')
  212. @is_authenticated
  213. def firewall_addressgroup_list(request):
  214. hostname_default = vyos.get_hostname_prefered(request)
  215. firewall_addressgroup = vyos.get_firewall_addressgroup(hostname_default)
  216. all_instances = vyos.instance_getall_by_group(request)
  217. is_superuser = perms.get_is_superuser(request.user)
  218. template = loader.get_template('firewall/addressgroup-list.html')
  219. context = {
  220. 'firewall_addressgroup': firewall_addressgroup,
  221. 'hostname_default': hostname_default,
  222. 'username': request.user,
  223. 'instances': all_instances,
  224. 'is_superuser' : is_superuser,
  225. }
  226. return HttpResponse(template.render(context, request))
  227. @is_authenticated
  228. def firewall_addressgroup_add(request):
  229. hostname_default = vyos.get_hostname_prefered(request)
  230. all_instances = vyos.instance_getall_by_group(request)
  231. is_superuser = perms.get_is_superuser(request.user)
  232. if request.POST.get('addresstype', None) == "single" and request.POST.get('name', None) != None and request.POST.get('address', None) != None:
  233. vyos.set_firewall_addressgroup_add(hostname_default, request.POST.get('name'), request.POST.get('address'))
  234. if request.POST.get('description', None) != None:
  235. vyos.set_firewall_addressgroup_description(hostname_default, request.POST.get('name'), request.POST.get('description'))
  236. return redirect('firewall:firewall-addressgroup-list')
  237. elif request.POST.get('addresstype', None) == "range" and request.POST.get('name', None) != None and request.POST.get('address-start', None) != None and request.POST.get('address-end', None) != None:
  238. vyos.set_firewall_addressgroup_rangeadd(hostname_default, request.POST.get('name'), request.POST.get('address-start'), request.POST.get('address-end'))
  239. if request.POST.get('description', None) != None:
  240. vyos.set_firewall_addressgroup_description(hostname_default, request.POST.get('name'), request.POST.get('description'))
  241. return redirect('firewall:firewall-addressgroup-list')
  242. template = loader.get_template('firewall/addressgroup-add.html')
  243. context = {
  244. 'hostname_default': hostname_default,
  245. 'username': request.user,
  246. 'instances': all_instances,
  247. 'is_superuser' : is_superuser,
  248. }
  249. return HttpResponse(template.render(context, request))
  250. @is_authenticated
  251. def firewall_addressgroup_del(request, groupname):
  252. hostname_default = vyos.get_hostname_prefered(request)
  253. vyos.set_firewall_addressgroup_del(hostname_default, groupname)
  254. return redirect('firewall:firewall-addressgroup-list')
  255. @is_authenticated
  256. def firewall_addressgroup_desc(request, groupname):
  257. hostname_default = vyos.get_hostname_prefered(request)
  258. firewall_addressgroup = vyos.get_firewall_addressgroup_one(hostname_default, groupname)
  259. all_instances = vyos.instance_getall_by_group(request)
  260. is_superuser = perms.get_is_superuser(request.user)
  261. if request.POST.get('description', None) != None:
  262. vyos.set_firewall_addressgroup_description(hostname_default, groupname, request.POST.get('description'))
  263. return redirect('firewall:firewall-addressgroup-list')
  264. template = loader.get_template('firewall/addressgroup-desc.html')
  265. context = {
  266. 'firewall_addressgroup': firewall_addressgroup,
  267. 'hostname_default': hostname_default,
  268. 'username': request.user,
  269. 'instances': all_instances,
  270. 'is_superuser' : is_superuser,
  271. 'groupname': groupname,
  272. }
  273. return HttpResponse(template.render(context, request))
  274. @is_authenticated
  275. def firewall_networkgroup_desc(request, groupname):
  276. hostname_default = vyos.get_hostname_prefered(request)
  277. firewall_networkgroup = vyos.get_firewall_networkgroup_one(hostname_default, groupname)
  278. all_instances = vyos.instance_getall_by_group(request)
  279. is_superuser = perms.get_is_superuser(request.user)
  280. if request.POST.get('description', None) != None:
  281. vyos.set_firewall_networkgroup_description(hostname_default, groupname, request.POST.get('description'))
  282. return redirect('firewall:firewall-networkgroup-list')
  283. template = loader.get_template('firewall/networkgroup-desc.html')
  284. context = {
  285. 'firewall_networkgroup': firewall_networkgroup,
  286. 'hostname_default': hostname_default,
  287. 'username': request.user,
  288. 'instances': all_instances,
  289. 'is_superuser' : is_superuser,
  290. 'groupname': groupname,
  291. }
  292. return HttpResponse(template.render(context, request))
  293. @is_authenticated
  294. def firewall_config(request, firewall_name):
  295. #interfaces = vyos.get_interfaces()
  296. all_instances = vyos.instance_getall()
  297. hostname_default = vyos.get_hostname_prefered(request)
  298. is_superuser = perms.get_is_superuser(request.user)
  299. firewall = vyos.get_firewall(hostname_default, firewall_name)
  300. template = loader.get_template('firewall/show.html')
  301. context = {
  302. #'interfaces': interfaces,
  303. 'instances': all_instances,
  304. 'hostname_default': hostname_default,
  305. 'firewall': firewall,
  306. 'firewall_name': firewall_name,
  307. 'username': request.user,
  308. 'is_superuser' : is_superuser,
  309. }
  310. return HttpResponse(template.render(context, request))
  311. @is_authenticated
  312. def firewall_global(request):
  313. #interfaces = vyos.get_interfaces()
  314. all_instances = vyos.instance_getall()
  315. hostname_default = vyos.get_hostname_prefered(request)
  316. if int(request.POST.get('allping', 0)) == 1:
  317. vyos.set_firewall_allping_enable(hostname_default)
  318. else:
  319. vyos.set_firewall_allping_disable(hostname_default)
  320. if int(request.POST.get('syncookies', 0)) == 1:
  321. vyos.set_firewall_syncookies_enable(hostname_default)
  322. else:
  323. vyos.set_firewall_syncookies_disable(hostname_default)
  324. return redirect('firewall:firewall-list')
  325. @is_authenticated
  326. def firewall_remove(request, firewall_name):
  327. #interfaces = vyos.get_interfaces()
  328. all_instances = vyos.instance_getall()
  329. hostname_default = vyos.get_hostname_prefered(request)
  330. firewall = vyos.delete_firewall(hostname_default, firewall_name)
  331. return redirect('firewall:firewall-list')
  332. @is_authenticated
  333. def firewall_edit(request, firewall_name):
  334. #interfaces = vyos.get_interfaces()
  335. all_instances = vyos.instance_getall()
  336. hostname_default = vyos.get_hostname_prefered(request)
  337. firewall = vyos.get_firewall(hostname_default, firewall_name)
  338. firewall['defaultaction'] = firewall['default-action']
  339. is_superuser = perms.get_is_superuser(request.user)
  340. changed = False
  341. if 'description' in request.POST:
  342. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "description", request.POST['description']]}
  343. result2 = vyos.set_config(hostname_default, cmd)
  344. print(result2)
  345. changed = True
  346. if 'action' in request.POST:
  347. cmd = {"op": "set", "path": ["firewall", "name", firewall_name, "default-action", request.POST['action']]}
  348. result3 = vyos.set_config(hostname_default, cmd)
  349. print(result3)
  350. changed = True
  351. if changed == True:
  352. return redirect('firewall:firewall-list')
  353. template = loader.get_template('firewall/edit.html')
  354. context = {
  355. #'interfaces': interfaces,
  356. 'instances': all_instances,
  357. 'hostname_default': hostname_default,
  358. 'firewall_name': firewall_name,
  359. 'firewall': firewall,
  360. 'username': request.user,
  361. 'is_superuser' : is_superuser,
  362. }
  363. return HttpResponse(template.render(context, request))