рдирдорд╕реНрдХрд╛рд░ рд╕рд╛рдерд┐рдпреЛрдВ. рдореЗрд░реЗ рд▓рдбрд╝рд╛рдХреВ рд╕рд░реНрд╡рд░ рдкрд░ рд╕реБрдВрджрд░
рджреЛрд╕реНрддреЛрдВ рдиреЗ рдореБрдЭрд╕реЗ рдЙрдирдХреЗ рд▓рд┐рдП рдПрдХ рд╡рд┐рдХрд╛рд╕ рдлрд╝рд╛рд░реНрдо рд╕реНрдерд╛рдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛, рдФрд░ рдЙрдиреНрд╣реЗрдВ рдЕрдкрдиреЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЯреЗрдореНрдкрд▓реЗрдЯреНрд╕ рдореЗрдВ рдЦреАрдВрдЪрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореБрдЭреЗ рдПрдХ рджрд┐рд▓рдЪрд╕реНрдк рдкрд░рд┐рдпреЛрдЬрдирд╛ рдпрд╛рдж рдЖрдИ
рдмреЗрд╢рдХ, рд╕реНрд░реЛрддреЛрдВ рдХреА рдЦреЛрдЬ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ, рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ рдХреНрд░реЛрдо рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдЬреЗрдирд░реЗрдЯ рдХрд┐рдП рдЧрдП рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдХрд╣рд╛рдВ рдЦреАрдВрдЪрддрд╛ рд╣реИ, рдФрд░ рд╡рд╣рд╛рдВ "рдмреНрд▓реЙрдм:" рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓рд╛ рдПрдХ рдкрддрд╛ рдореЗрд░рд╛ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рдерд╛, рдЙрдлрд╝ред рдпрд╣ рдкрд╣рд▓реЗ рд╣реА рд╕реНрдкрд╖реНрдЯ рд╣реЛ рдЪреБрдХрд╛ рд╣реИ рдХрд┐ рд╕реЗрд╡рд╛ рд░рд╛рд╕реНрддреЗ рдореЗрдВ рдХреБрдЫ рднреА рдЙрддреНрдкрдиреНрди рдирд╣реАрдВ рдХрд░рддреА рд╣реИ, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдпрд╣ рд╕рдм js рджреНрд╡рд╛рд░рд╛ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рджрд░рдЕрд╕рд▓, рдЬрд╝рд┐рдк рдЖрд░реНрдХрд╛рдЗрд╡ рдХреНрд▓рд╛рдЗрдВрдЯ, рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдФрд░ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рджреНрд╡рд╛рд░рд╛ рд╣реА рддреИрдпрд╛рд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗред рдЦреВрдмрд╕реВрд░рддреА рдпрд╣ рд╣реИ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдЫреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рдж, рдореИрдВрдиреЗ рд╕реЛрдЪрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреНрдпрд╛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВред рдХрд╛рд░реНрдп рдЗрд╕ рддрдереНрдп рд╕реЗ рдЬрдЯрд┐рд▓ рдерд╛ рдХрд┐ рдореИрдВ рдЗрд╕ рд╢рд░реНрдд рд╕реЗ рд╡рд┐рдЪрд▓рд┐рдд рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмреИрдХ-рдПрдВрдб рдХреЗ рд╢реБрджреНрдз рдлреНрд░рдВрдЯ-рдПрдВрдб рдмрдиреА рд░рд╣рдиреА рдЪрд╛рд╣рд┐рдПред рдмреЗрд╢рдХ, рд╕рдмрд╕реЗ рд╕рд░рд▓ рд╕рдорд╛рдзрд╛рди рдиреЛрдбрдЬ рдХреЛ рдЦреАрдВрдЪрдирд╛ рдФрд░ рд╕реАрдзреЗ рд▓рд┐рдВрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рд╕рдВрдЧреНрд░рд╣ рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рджрд░рдЕрд╕рд▓, рдЬреНрдпрд╛рджрд╛ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдереЗ. рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд░реВрдк рд╕реЗ, рдХреЗрд╡рд▓ рдПрдХ рд╣реА рдмрд╛рдд рджрд┐рдорд╛рдЧ рдореЗрдВ рдЖрдИред рд╣рдореЗрдВ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗрдЯ рдХрд░рдиреЗ рдФрд░ рдПрдХ рд▓рд┐рдВрдХ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдо рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░реНрд╡рд░ рдХрдВрд╕реЛрд▓ рдкрд░ рдХреЙрдкреА рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдкрд░рд┐рдгрд╛рдореА рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдореЗрдВ рдХрдИ рдЯреЗрдХреНрд╕реНрдЯ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХрд╛ рд╡рдЬрди рдХрд╛рдлреА рдХрдо рдерд╛, рд╡рд╕реНрддреБрддрдГ рдХреБрдЫ рдХрд┐рд▓реЛрдмрд╛рдЗрдЯред рд╕реНрдкрд╖реНрдЯ рд╕рдорд╛рдзрд╛рди рдпрд╣ рдерд╛ рдХрд┐ рдЙрддреНрдкрдиреНрди рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рд╕реЗ рдмреЗрд╕ 64 рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ рдФрд░ рдЗрд╕реЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рд╕рд░реНрд╡рд░ рдкрд░ рдмрдлрд░ рдореЗрдВ рдлреЗрдВрдХ рджреЗрдВ
echo 'base64string' | base64 --decode > config.zip
рд╣рдо рдпрд╣реА рдЬрд╝рд┐рдк рдлрд╝рд╛рдЗрд▓ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ.
рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдореЗрдВ рд╣рдо рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдмрдирд╛рдиреЗ рдХреА рдПрдХ рд╡рд┐рдзрд┐ рджреЗрдЦрддреЗ рд╣реИрдВ:
$scope.downloadZip = function() {
var zip = new JSZip();
var sourceCodes = $window.document.querySelectorAll('main .file .code.source');
for (var i = 0; i < sourceCodes.length; i++) {
var sourceCode = sourceCodes[i];
var name = sourceCode.dataset.filename;
var content = sourceCode.children[0].children[0].innerText;
if (!$scope.isSymlink() && name.match(/^sites-available//)) {
name = name.replace(/^sites-available//, 'sites-enabled/');
}
zip.file(name, content);
if (name.match(/^sites-available//)) {
zip.file(name.replace(/^sites-available//, 'sites-enabled/'), '../' + name, {
unixPermissions: parseInt('120755', 8),
});
}
}
zip.generateAsync({
type: 'blob',
platform: 'UNIX',
}).then(function(content) {
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
});
gtag('event', $scope.getDomains().join(','), {
event_category: 'download_zip',
});
};
рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд╕рдм рдХреБрдЫ рдХрд╛рдлреА рд╕рд░рд▓ рд╣реИ
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
рдЬрд╣рд╛рдВ рд╕рд╛рдордЧреНрд░реА рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдХрд╛ рдкрд░рд┐рдгрд╛рдореА рдмреНрд▓реЙрдм рдСрдмреНрдЬреЗрдХреНрдЯ рд╣реИред
рдареАрдХ рд╣реИ, рдореБрдЭреЗ рдмрд╕ рдЗрд╕рдХреЗ рдЖрдЧреЗ рдПрдХ рдФрд░ рдмрдЯрди рдЬреЛрдбрд╝рдирд╛ рдерд╛ рдФрд░ рдЬрдм рдореИрдВрдиреЗ рдЙрд╕ рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛, рддреЛ рдореИрдВ рдкрд░рд┐рдгрд╛рдореА рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдХреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ рд╕рд╣реЗрдЬ рдирд╣реАрдВ рдкрд╛рдКрдВрдЧрд╛, рд▓реЗрдХрд┐рди рдЙрд╕рд╕реЗ рдмреЗрд╕ 64 рдХреЛрдб рдкреНрд░рд╛рдкреНрдд рдХрд░ рд▓реВрдВрдЧрд╛ред рдереЛрдбрд╝рд╛ рдЗрдзрд░-рдЙрдзрд░ рднрдЯрдХрдиреЗ рдХреЗ рдмрд╛рдж, рдореБрдЭреЗ рдХреЗрд╡рд▓ рдПрдХ рдбрд╛рдЙрдирд▓реЛрдбрдЬрд╝рд┐рдк рдХреЗ рдмрдЬрд╛рдп 2 рд╡рд┐рдзрд┐рдпрд╛рдБ рдорд┐рд▓реАрдВ:
$scope.downloadZip = function() {
generateZip(function (content) {
saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');
});
gtag('event', $scope.getDomains().join(','), {
event_category: 'download_zip',
});
};
$scope.downloadBase64 = function() {
generateZip(function (content) {
var reader = new FileReader();
reader.readAsDataURL(content);
reader.onloadend = function() {
var base64 = reader.result.replace(/^data:.+;base64,/, '');
// ╨▓ ╨┐╨╡╤А╨╡╨╝╨╡╨╜╨╜╨╛╨╣ base64 ╨║╨░╨║ ╤А╨░╨╖ ╨╜╤Г╨╢╨╜╤Л╨╣ ╨╝╨╜╨╡ zip ╨░╤А╤Е╨╕╨▓ ╨▓ ╨▓╨╕╨┤╨╡ base64 ╤Б╤В╤А╨╛╨║╨╕
}
});
gtag('event', $scope.getDomains().join(','), {
event_category: 'download_base64',
});
};
рдЬреИрд╕рд╛ рдХрд┐ рдЖрдкрдиреЗ рджреЗрдЦрд╛ рд╣реЛрдЧрд╛, рдореИрдВрдиреЗ рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдХреА рдкреАрдврд╝реА рдХреЛ рдирд┐рдЬреА рдЬреЗрдирд░реЗрдЯрдЬрд╝рд┐рдк рд╡рд┐рдзрд┐ рдореЗрдВ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░ рджрд┐рдпрд╛, рдЗрддреНрдпрд╛рджрд┐ред рдпрд╣ AngularJS рд╣реИ, рдФрд░ рд▓реЗрдЦрдХ рд╕реНрд╡рдпрдВ рдХреЙрд▓рдмреИрдХ рдкрд░ рдХрд╛рдпрдо рд╣реИ рдФрд░ рд╡рд╛рджреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рд╣реИред рдбрд╛рдЙрдирд▓реЛрдбрдЬрд╝рд┐рдк рдиреЗ рдЕрднреА рднреА рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрд╡рдПрдЬрд╝ рдХрд┐рдпрд╛, рдЬрдмрдХрд┐ рдбрд╛рдЙрдирд▓реЛрдбрдмреЗрд╕64 рдиреЗ рдХреБрдЫ рдЕрд▓рдЧ рдХрд┐рдпрд╛ред рд╣рдо рдПрдХ FileReader рдСрдмреНрдЬреЗрдХреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ рдЬреЛ html5 рдореЗрдВ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЖрдпрд╛ рд╣реИ рдФрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд╛рдлреА рд╣реИ
position: absolute;
z-index: -1;
opacity: 0;
рдЬрд┐рд╕рдиреЗ рдореБрдЭреЗ рддрддреНрд╡ рдХреЛ рджреГрд╢реНрдп рд╕реЗ рдЫрд┐рдкрд╛рдиреЗ рдФрд░ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдкреГрд╖реНрда рдкрд░ рдЫреЛрдбрд╝рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреАред рд╡реЛрдЗрд▓рд╛, рдХрд╛рд░реНрдп рдкреВрд░рд╛ рд╣реЛ рдЧрдпрд╛, рдЬрдм рдореИрдВрдиреЗ рдЕрдкрдиреЗ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд┐рдпрд╛, рддреЛ рдмрдлрд░ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рдХреА рдПрдХ рд▓рд╛рдЗрди рд░рдЦреА рдЧрдИ:
echo 'base64string' | base64 --decode > config.zip
рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдмрд╕ рд╕рд░реНрд╡рд░ рдкрд░ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЪрд┐рдкрдХрд╛рдпрд╛ рдФрд░ рддреБрд░рдВрдд рд╕рднреА рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреЗ рд╕рд╛рде рдПрдХ рдЬрд╝рд┐рдк рд╕рдВрдЧреНрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдпрд╛ред
рдФрд░, рдирд┐рдГрд╕рдВрджреЗрд╣, рдореИрдВрдиреЗ рд▓реЗрдЦрдХ рдХреЛ рдПрдХ рдкреБрд▓ рдЕрдиреБрд░реЛрдз рднреЗрдЬрд╛, рдХреНрдпреЛрдВрдХрд┐... рдкрд░рд┐рдпреЛрдЬрдирд╛ рд╕рдХреНрд░рд┐рдп рдФрд░ рдЬреАрд╡рдВрдд рд╣реИ, рдореИрдВ рд▓реЗрдЦрдХ рд╕реЗ рдЕрдкрдбреЗрдЯ рджреЗрдЦрдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛ рдФрд░ рдореЗрд░рд╛ рдЕрдкрдирд╛ рдмрдЯрди рд╣реЛрдЧрд╛) рд░реБрдЪрд┐ рд░рдЦрдиреЗ рд╡рд╛рд▓реЛрдВ рдХреЗ рд▓рд┐рдП, рдпрд╣ рдпрд╣рд╛рдВ рд╣реИ
рд╕рдмрдХрд╛ рд╡рд┐рдХрд╛рд╕ рдордВрдЧрд▓рдордп рд╣реЛ)
рд╕реНрд░реЛрдд: www.habr.com