vpn.html 6.5 KB

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