Soo saarista qaabaynta nginx, taariikhda hal codsi jiid

Waad salaaman tihiin asxaabta. Ku qurux badan server-yada dagaalka nginx waxa uu socday ilaa 2006dii, sanadaha maamulkiisana waxa aan ururiyay habab badan iyo qaabab. Aad ayaan u amaanay nginx oo si uun bay ii soo baxday in aan xitaa bilaabay xarun nginx ah oo ku taal xuddunta, sidoo kale, soo bandhig m /
Asxaabtu waxay iga codsadeen inaan u sameeyo beer horumarineed, halkii aan u jiidi lahaa moodooyinkayga gaarka ah, waxaan xasuustay mashruuc xiiso leh nginxconfig.io, kaas oo ku kala firdhiya qaab-dhismeedka khaanadaha una diyaariya wax walba si ay u oggolaadaan in la sireeyo, iwm. Waxaan is idhi, waayo? Si kastaba ha ahaatee, waxaan ka cadhooday xaqiiqda ah in nginxconfig ay i siiso inaan ku soo dejiyo zip archive browserka, iyada oo aan ii oggolaan inaan si toos ah ugu dhejiyo serverka anigoo isticmaalaya wget/fetch/curl. Waa maxay wax aan micno lahayn, sababta aan ugu baahanahay browserka, waxaan uga baahanahay server-ka console-ka. Anigoo xanaaqsan, waxaan aaday github si aan u arko xuubka mashruuca, taasoo keentay fargeeto iyo, natiijadii, codsi jiid. Kaas oo aanan wax ka qorin haddaysan xiiso lahayn πŸ˜‰

Soo saarista qaabaynta nginx, taariikhda hal codsi jiid

Dabcan, ka hor intaanan qodin ilaha, waxaan eegay halka Chrome ay soo jiidato kaydka zip-ka ee la sameeyay oo leh qaabeyn, oo waxaa jira cinwaan ka bilaabmaya "blob:" ayaa i sugayay, oops. Waxay mar horeba caddaatay in adeeggu aanu wax ka soo saarin jidka, dhab ahaantii, dhammaan waxaa sameeyay js. Runtii, kaydka zip-ka waxaa soo saaray macmiilka, browserka, iyo Javascript laftiisa. Kuwaas. quruxdu waa in mashruuca nginxconfig.io si fudud ayaa loo kaydin karaa sidii bog HTML ah, oo lagu shubo qaar narod.ru wayna shaqayn doontaa) Tani waa xal aad u qosol badan oo xiiso leh, si kastaba ha ahaatee, waa mid aad u dhib badan samaynta server-yada, dhab ahaantii, dhab ahaantii waxa mashruucan la abuuray. Ku soo deji kaydka la soo saaray browser-ka, ka dibna u wareeji serverka adigoo isticmaalaya nc... sanadka 2019? Waxaan naftayda u dajiyay hawsha ah inaan helo hab aan si toos ah ugu soo dejiyo qaab-dhismeedka ka soo baxa server-ka.
Ka dib markii aan fargeeto mashruuca, waxaan bilaabay inaan ka fikiro waxa ikhtiyaarkaygu yahay. Hawshu waxay ku adkaatay xaqiiqda ah inaanan rabin inaan ka leexdo shardiga ah in mashruucu ahaado mid hore oo saafi ah, oo aan lahayn wax dhabar ah. Dabcan, xalka ugu fudud wuxuu noqon lahaa in la soo jiido nodejs oo lagu qasbo in ay abuurto kayd leh qaab-dhismeedka iyadoo la adeegsanayo xiriirinta tooska ah.
Dhab ahaantii, ma jirin doorashooyin badan. Si sax ah, mid keliya ayaa maskaxda ku soo dhacay. Waxaan u baahanahay inaan dejino qaabeynta oo aan helno xiriir aan ku koobi karno kumbuyuutarka server-ka si aan u helno kaydka zip.
Dhawr faylal qoraal ah oo ku jira kaydka zip-ka ee natiijadu waxay miisaankoodu yaraayeen, macno ahaan dhowr kilobytes. Xalka muuqdaa wuxuu ahaa in laga helo xadhkaha base64 ee kaydka zip-ka ee la sameeyay oo lagu dhex tuuro kaydiyaha, inta lagu jiro server-ka amarka ku jira console-ka

echo 'base64string' | base64 --decode > config.zip

Waxaan samayn karnaa isla faylkan zip-ka ah.

nginxconfig.io waxaa lagu qoray AngularJS, xitaa ma qiyaasi karo waxa kiiloomitir kood loo baahan lahaa haddii aanu qoraagu dooran qaab-dhismeedka js fal-celin ah. Laakiin waxaan si fiican u qiyaasi karaa inta ka fudud oo ka qurux badan waxaas oo dhan ayaa laga hirgelin karaa VueJS, in kasta oo kani yahay mawduuc gebi ahaanba ka duwan.
Khayraadka mashruuca waxaan ku aragnaa habka loo soo saaro kaydka 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',
	});
};

Wax walba waa sahlan yihiin, adoo isticmaalaya maktabadda jszip zip ayaa la sameeyay halka faylalka qaabeynta la dhigo. Kadib abuurista zip archive-ka, js waxa ay ku quudinaysaa browserka iyada oo la isticmaalayo maktabadda FileSaver.js:

saveAs(content, 'nginxconfig.io-' + $scope.getDomains().join(',') + '.zip');

halka ay ka kooban tahay natiijada shayga blob ee kaydka zip.

Hagaag, waxa kaliya ee ay ahayd in aan sameeyo waxa ay ahayd in aan ku daro badhan kale oo agtiisa ah oo markii aan gujiyo, ma kaydin doono kaydka zip-ka ee ka soo baxa browserka, laakiin ka soo qaado code base64. Ka dib markii aan xoogaa yara fakaday, waxaan helay 2 hab, halkii aan hal kaliya ka soo dejin lahaaZip:

$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',
	});
};

Sida laga yaabo inaad dareentay, waxaan u raray jiilka zip-ka kaydka laftiisa habka geneZip gaarka ah, iyo wixii la mid ah. Kani waa AngularJS, qoraaga laftiisuna wuu ku adkaysanayaa dib-u-soo-celinta mana uu hirgelin ballanqaadyo. downloadZip wali wuxuu sameeyay keydin sidii wax soo saar ahaan, halka downloadBase64 uu sameeyay wax xoogaa ka duwan. Waxaan abuurnay shay FileReader ah oo noogu yimid html5 oo mar horeba ahaa mid sax ah la heli karo loo isticmaalo. Kaas oo, hal mar, ka dhigi kara xadhig base64 ah oo ka soo baxa boob, ama halkii, waxay ka dhigaysaa xadhig DataURL, laakiin tani maaha mid muhiim noo ah, sababtoo ah DataURL waxay ka kooban tahay waxa aan u baahanahay. Bingo, wax yar ayaa i sugayay markii aan isku dayay inaan waxan oo dhan geliyo kaydka. Qoraagu wuxuu isticmaalay maktabadda mashruuca clipboardjs, kaas oo kuu ogolaanaya inaad la shaqeyso kiliboodhka oo aan lahayn walxo toosan, oo ku salaysan qoraalka la doortay. Markii hore, waxaan go'aansaday inaan ku dhejiyo base64 curiye leh muuqaal: midna;, laakiin kiiskan ma dhigi karo sabuuradda sababtoo ah kala go'i ma jiro. Sidaa darteed, halkii la soo bandhigi lahaa: midna; waan sameeyay

position: absolute;
z-index: -1;
opacity: 0;

taas oo ii ogolaatay in aan labadaba ka qariyo curiyaha aragtida oo aan dhab ahaantii ku dhaafo bogga. Voila, hawshu way dhammaatay, markii aan gujiyay badhanka, xariiq sidan oo kale ah ayaa la dhex galiyay kaydka:

echo 'base64string' | base64 --decode > config.zip

Taas oo aan si fudud ugu dhejiyay konsole-ka server-ka oo isla markiiba helay zip archive oo leh dhammaan qalabyada.
Dabcan, waxaan codsi jiidis ah u diray qoraaga, sababtoo ah... Mashruucu waa mid firfircoon oo firfircoon, waxaan jeclaan lahaa inaan ka arko qoraaga wax cusub oo aan haysto badhankayga) Kuwa xiiseynaya, halkan waa fargeetoyga mashruuca iyo naftayda codsi qaadasho, halkaas oo aad ka arki karto wixii aan saxay/ku daray.
Horumar farxad leh qof walba)

Soo saarista qaabaynta nginx, taariikhda hal codsi jiid

Source: www.habr.com

Add a comment