%PDF- %PDF-
Direktori : /backups/router/usr/local/opnsense/mvc/app/views/OPNsense/OpenVPN/ |
Current File : //backups/router/usr/local/opnsense/mvc/app/views/OPNsense/OpenVPN/export.volt |
{# # Copyright (c) 2018 Deciso B.V. # All rights reserved. # # Redistribution and use in source and binary forms, with or without modification, # are permitted provided that the following conditions are met: # # 1. Redistributions of source code must retain the above copyright notice, # this list of conditions and the following disclaimer. # # 2. Redistributions in binary form must reproduce the above copyright notice, # this list of conditions and the following disclaimer in the documentation # and/or other materials provided with the distribution. # # THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, # INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY # AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE # AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, # OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF # SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS # INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN # CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) # ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE # POSSIBILITY OF SUCH DAMAGE. #} <style> .input-spacing { margin-top: 5px; margin-bottom: 5px; } textarea { white-space: pre; overflow: auto; } .ui_hide { display: none !important; } </style> <script> $( document ).ready(function() { /** * load providers and templates */ ajaxGet('/api/openvpn/export/providers/', {}, function(data, status){ if (status == 'success') { $.each(data, function (idx, record) { var server_opt = $("<option/>").val(record.vpnid).text(record.name); server_opt.data('presets', record); $("#openvpn_export\\.servers").append(server_opt); }); $("#openvpn_export\\.servers").selectpicker('refresh'); } ajaxGet('/api/openvpn/export/templates/', {}, function(data, status){ if (status == 'success') { var selected_provider = $("#openvpn_export\\.servers").find('option:selected'); $.each(data, function (idx, record) { var this_opt = $("<option/>").val(idx) .text(record.name) .data('options', record.supportedOptions); if (selected_provider.data('template') == idx) { this_opt.attr('selected', 'selected'); } $("#openvpn_export\\.template").append(this_opt); }); $("#openvpn_export\\.servers").change(); $("#openvpn_export\\.template").change(); $("#openvpn_export\\.template").selectpicker('refresh'); } }); }); /** * Template / type selection */ $("#openvpn_export\\.template").change(function () { $(".export_option").closest('tr').hide(); var selected_options = $(this).find('option:selected').data('options'); for (var i=0; i < selected_options.length; ++i) { $("#row_openvpn_export\\."+selected_options[i]).show(); } $("#openvpn_export\\.template").selectpicker('refresh'); $("#openvpn_export\\.cryptoapi").change(); }); /** * server change, drives account select and download logic */ $("#openvpn_export\\.servers").change(function () { var selected_opt = $(this).find('option:selected'); var record = selected_opt.data('presets'); Object.keys(record).map(function(key) { // server_opt.data(key, record[key]); var target = $("#openvpn_export\\."+key); if (target.is('select')) { if (record[key]) { target.val(record[key]); target.selectpicker('refresh'); } } else if (target.is('input')) { if (target.prop("type") == "checkbox") { if (record[key] === "1") { target.prop("checked", true); } else { target.prop("checked", false); } } else { target.val(record[key]); } } else if (target.is('textarea')) { target.val(record[key]); } }); ajaxGet('/api/openvpn/export/accounts/' + $(this).val(), {}, function(data, status){ $("#accounts_table > tbody").empty(); if (status == 'success') { $.each(data, function (idx, record) { $("#accounts_table > tbody").append( $("<tr/>").append( $("<td/>").text(record.description) ).append( $("<td/>").text(record.users.join(',')) ).append( $("<td/>").append( $('<button class="btn btn-xs act_download"><i class="fa fa-cloud-download"></i></button>') .data('certref', idx) ) ) ); }); // attach download buttons $(".act_download").click(function(){ var caref = $(this).data('certref'); var vpnid = $("#openvpn_export\\.servers").find('option:selected').val(); saveFormToEndpoint("/api/openvpn/export/download/"+vpnid+"/"+caref+"/",'frm_ExportSettings', function(data){ if (data.filename !== undefined) { var link = $('<a></a>') .attr('href','data:'+data.filetype+';base64,' + data.content) .attr('download', data.filename) .appendTo('body'); link.ready(function() { link.get(0).click(); link.empty(); }); } }); }); } }); // }); $("#row_openvpn_export\\.p12_password > td:eq(1)").append($("<hr class='input-spacing'/>")); $("#row_openvpn_export\\.p12_password > td:eq(1)").append( $("<input type='password' class='form-control password_field' size='50' id='openvpn_export.p12_password_confirm'/>") ); $(".password_field").on("keyup", function(){ if ($("#openvpn_export\\.p12_password").val() != $("#openvpn_export\\.p12_password_confirm").val()) { $(".password_field").addClass("has-warning"); $(".password_field").closest('tr').addClass('has-warning'); } else { $(".password_field").removeClass("has-warning"); $(".password_field").closest('tr').removeClass('has-warning'); } }); // hide pkcs12 password when not applicable $("#openvpn_export\\.cryptoapi").change(function(){ if ($("#openvpn_export\\.cryptoapi").prop("checked") && $("#openvpn_export\\.cryptoapi").is(":visible")) { $("#row_openvpn_export\\.p12_password").addClass("ui_hide"); } else { $("#row_openvpn_export\\.p12_password").removeClass("ui_hide"); } }); }); </script> <div class="content-box"> {{ partial("layout_partials/base_form",['fields':exportForm,'id':'frm_ExportSettings'])}} <br/> <div class="table-responsive"> <table class="table table-striped table-condensed table-responsive table-hover" id="accounts_table"> <thead> <tr> <th colspan="3">{{ lang._('Accounts / certificates')}}</th> </tr> <tr> <th>{{ lang._('Certificate')}}</th> <th>{{ lang._('Linked user')}}</th> <th></th> </tr> </thead> <tbody> </tbody> </table> </div> </div>