vpn.html 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  1. {% extends "base.html" %}
  2. {% load subnets %}
  3. {% block content %}
  4. <div class="row">
  5. <h2>Configuration du VPN</h2>
  6. {% if form %}
  7. <form class="flatform" action="{{ object.get_absolute_url }}" method="post">{% csrf_token %}
  8. <p class="legend">Quand vous aurez terminé vos modifications, cliquez sur <input class="button" type="submit" value="Valider" /></p>
  9. {% endif %}
  10. {% for message in messages %}
  11. <div class="message eat-up{% if message.tags %} {{ message.tags }}{% endif %}">
  12. {{ message }}
  13. </div>
  14. {% endfor %}
  15. {% if form %}
  16. {% if form.non_field_errors or form.ipv4_endpoint.errors or form.ipv6_endpoint.errors %}
  17. <div class="alert-box alert nogap">
  18. {{ form.non_field_errors }}
  19. {{ form.ipv4_endpoint.errors }}
  20. {{ form.ipv6_endpoint.errors }}
  21. </div>
  22. {% endif %}
  23. {% endif %}
  24. <div class="large-6 columns">
  25. <div class="panel">
  26. <h3>Authentification</h3>
  27. <table class="full-width">
  28. <tr>
  29. <td class="center"><span class="label">Identifiant</span></td>
  30. <td>{{object.login}}</td>
  31. </tr>
  32. {% if object.password %}
  33. <tr>
  34. <td class="center" colspan="2">
  35. <a class="button tiny radius" id="passgen" href="{% url 'vpn:generate_password' object.pk %}"><i class="fa fa-refresh"></i>
  36. Générer un nouveau mot de passe</a>
  37. </td>
  38. </tr>
  39. {% endif %}
  40. {% if object.crypto_link %}
  41. <tr>
  42. <td class="center"><span class="label">Matériel cryptographique</span></td>
  43. <td><a href="{{object.crypto_link}}">Télecharger (lien supprimé après ouverture)</a></td>
  44. </tr>
  45. {% endif %}
  46. <tr class="flatfield">
  47. {% if form %}
  48. <td class="center">{{ form.comment.label_tag }}</td>
  49. <td>{{ form.comment }}</td>
  50. {% else %}
  51. <td class="center"><span class="label">Commentaire</span></td>
  52. <td>{{ object.comment }}</td>
  53. {% endif %}
  54. </tr>
  55. <tr>
  56. <td class="center boolviewer" colspan="2">
  57. {% if form %}
  58. <input type="checkbox" disabled="disabled"{% if object.activated %} checked="checked"{% endif %} />
  59. {% endif %}
  60. <span>Ce VPN est {{ object.activated|yesno:"activé,désactivé" }}</span>
  61. </td>
  62. </tr>
  63. </table>
  64. </div>
  65. </div>
  66. <div class="large-6 columns">
  67. <div class="panel">
  68. <h3>Adresses IP</h3>
  69. <table class="full-width">
  70. {% if form %}
  71. <tr class="flatfield">
  72. <td class="center">{{ form.ipv4_endpoint.label_tag }}</td>
  73. <td{% if form.non_field_errors or form.ipv4_endpoint.errors %} class="errored"{% endif %}>{{ form.ipv4_endpoint }}</td>
  74. </tr>
  75. <tr class="flatfield">
  76. <td class="center">{{ form.ipv6_endpoint.label_tag }}</td>
  77. <td{% if form.non_field_errors or form.ipv6_endpoint.errors %} class="errored"{% endif %}>{{ form.ipv6_endpoint }}</td>
  78. </tr>
  79. {% else %}
  80. <tr class="flatfield">
  81. <td class="center"><span class="label">IPv4</span></td>
  82. <td>{{ object.ipv4_endpoint }}</td>
  83. </tr>
  84. <tr class="flatfield">
  85. <td class="center"><span class="label">IPv6</span></td>
  86. <td>{{ object.ipv6_endpoint }}</td>
  87. </tr>
  88. {% endif %}
  89. <tr>
  90. <td class="center"><span class="label">Sous-réseaux</span></td>
  91. <td>
  92. {% for subnet in object.ip_subnet.all %}{{ subnet|prettify }}<br/>{% endfor %}
  93. </td>
  94. </tr>
  95. </table>
  96. </div>
  97. </div>
  98. {% if form %}
  99. <p class="formcontrol"><input class="button" type="submit" value="Valider" /></p>
  100. </form>
  101. {% endif %}
  102. </div>
  103. <div class="row" id="graph">
  104. <h3>Graphe de trafic sur
  105. <select id="graph_period">
  106. <option value="hourly">une heure</option>
  107. <option value="daily" selected>24 heures</option>
  108. <option value="weekly">7 jours</option>
  109. <option value="monthly">un mois</option>
  110. <option value="yearly">un an</option>
  111. </select> : <small class="pending_request"></small></h3>
  112. <img id="graph_trafic" src="{% url 'vpn:get_graph' vpn_id=object.pk %}" alt="Graphe de trafic {{ object.login }}" />
  113. </div>
  114. {% endblock %}
  115. {% block extra_js %}
  116. <script>
  117. // Bouton génération du mot de passe
  118. $('#passgen').click(function(){
  119. if (!confirm("Ceci va effacer votre ancien mot de passe et en générer un nouveau. Continuer ?")) return false;
  120. parent_cell = $(this).parent();
  121. parent_cell.html('<span class="pending_request"><i class="fa fa-refresh fa-spin"></i> Génération en cours</span>');
  122. $.ajax({
  123. 'url': $(this).attr('href')
  124. }).done(function(html) {
  125. //Remplace le tr parent par le contenu renvoyé (qui est deux tr successifs)
  126. parent_cell.parent().replaceWith(html);
  127. }).fail(function( jqXHR, textStatus ) {
  128. parent_cell.html('<span class="error">Échec de la requête : ' + textStatus + '</span>');
  129. });
  130. return false;
  131. });
  132. // Graphe de conso data
  133. $('#graph_period').change(function(){
  134. $('#graph .pending_request').html('<i class="fa fa-refresh fa-spin"></i>');
  135. base_url = "{% url 'vpn:get_graph' vpn_id=object.pk %}/";
  136. $('#graph_trafic').attr('src', base_url + $(this).val());
  137. });
  138. $('#graph_trafic').load(function() {
  139. $('#graph .pending_request').html('');
  140. });
  141. </script>
  142. {% endblock extra_js %}