Te whakatipuranga o nga whirihora mo te nginx, te hitori o te tono kume kotahi

Tena koutou e hoa ma. Ataahua i runga i aku tūmau whawhai nginx mai i te tau 2006 mai i te tau XNUMX, a, i roto i nga tau o te whakahaeretanga kua kohia e au te maha o nga whirihora me nga tauira. I mihi nui ahau ki te nginx, a, i puta mai i timata ahau i te nginx hub i runga i te hub, me whakaatu ano m/
I tono mai nga hoa ki ahau ki te whakatu i tetahi paamu whanaketanga mo ratou, a kaua e toia aku tauira motuhake, ka mahara ahau ki tetahi kaupapa whakamere nginxconfig.io, e whakamarara ana i nga whirihora i runga i nga whata me te whakarite i nga mea katoa mo te tuku whakamuna, aha atu. I whakaaro ahau, he aha? Heoi, i riri ahau i te mea ka tukuna mai e te nginxconfig ki ahau te tango i te puranga zip ki roto i te kaitirotiro, me te kore e tuku i ahau ki te tuku tika ki te tūmau ma te whakamahi i te wget/fetch/curl. He aha te poauau, he aha ahau e hiahia ai i roto i te kaitirotiro, ka hiahia ahau ki runga i te tūmau mai i te papatohu. I te riri, i haere ahau ki te github ki te kite i nga whekau o te kaupapa, i puta ki tana marau, a, ko te mutunga mai, he tono toia. Ko te mea karekau au e tuhi mena karekau he whakamere 😉

Te whakatipuranga o nga whirihora mo te nginx, te hitori o te tono kume kotahi

Ae ra, i mua i te keri ki nga punawai, ka titiro ahau ki te wahi e kumea ana e Chrome te puranga zip i hangaia me nga whirihora, a kei reira tetahi wahitau e timata ana me te "blob:" e tatari ana ki ahau, aue. Kua maarama kua kore te ratonga e whakaputa i tetahi mea i runga i te huarahi, inaa, he mea mahi katoa na js. Ae, na te kiritaki, te kaitirotiro, me te javascript ano i hanga te puranga zip. Ko era. ko te ataahua ko te kaupapa nginxconfig.io ka taea te tiaki noa hei wharangi html, ka tukuna ki etahi narod.ru a ka mahi) He otinga tino rorirori, whakamere hoki tenei, heoi, he tino rawe mo te whakatu i nga kaitoro, he pono, mo te mea i hangaia tenei kaupapa. Tikiake i te pūranga i hangaia me te tirotiro, ka whakawhiti ki te tūmau ma te whakamahi i te nc... i te tau 2019? I whakaritea e au te mahi ki te kimi huarahi ki te tango tika i te whirihora ki te tūmau.
Whai muri i te marau i te kaupapa, ka tiimata ahau ki te whakaaro he aha aku whiringa. I uaua te mahi na te mea kaore au i pai ki te kotiti ke i te tikanga kia noho tonu te kaupapa hei parakore o mua, kaore he pito-muri. Ae ra, ko te otinga tino ngawari ko te tango i nga nodejs ka tohe ki te whakaputa i tetahi puranga me nga whirihora ma te whakamahi hononga tika.
Inaa, kaore i maha nga whiringa. Ko te mea tika, kotahi anake i puta ki te hinengaro. Me whakarite e matou nga whirihora me te tiki hononga ka taea e matou te kape ki te papatohu tūmau hei tiki i te puranga zip.
He iti noa te taumaha o te maha o nga konae tuhinga i roto i te puranga zip, he iti noa nga kiropaita. Ko te otinga tino kitea ko te tiki i te aho base64 mai i te puranga zip i hangaia ka maka ki roto i te kaitarai, i runga i te tūmau me te whakahau i roto i te papatohu.

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

Ka taea e matou te hanga i tenei konae konae.

nginxconfig.io i tuhia ki AngularJS, kare e taea e au te whakaaro he aha nga kiromita o te waehere ka hiahiatia mena kaore te kaituhi i whiriwhiri i tetahi anga js reactive. Engari ka taea e au te whakaaro he pehea te ngawari me te ataahua o enei mea katoa ka taea te whakatinana ki VueJS, ahakoa he kaupapa rereke tenei.
I roto i nga rauemi kaupapa ka kite tatou i tetahi tikanga mo te whakaputa i te puranga 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',
	});
};

he tino ngawari nga mea katoa, ma te whakamahi i te whare pukapuka jszip Ka waihangahia he kōtui ki te whakatakoto i nga konae whirihoranga. Whai muri i te hanga i te puranga zip, ka whangaia e js ki te kaitirotiro ma te whakamahi i te whare pukapuka FileSaver.js:

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

ko te ihirangi ko te ahanoa pupuhi o te puranga zip.

Ae, ko nga mea katoa i mahia e au ko te taapiri i tetahi atu paatene ki te taha ka paatohia e au, kaore au e penapena i te konae konae ki te tirotiro, engari ka whiwhi i te waehere base64. I muri i te kopikopiko noa, ka whiwhi au i nga tikanga e 2, hei utu mo te kotahi downloadZip:

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

I kite pea koe, i nukuhia e ahau te reanga o te puranga zip ake ki te tikanga whakaputaZip tūmataiti, me era atu. Ko te AngularJS tenei, a ko te kaituhi tonu e piri ana ki nga waea whakahoki kaore i whakatinanahia ma nga kupu whakaari. I mahi tonu a downloadZip hei whakaputanga, i te mea he rereke te mahi a downloadBase64. Ka hangaia e matou he ahanoa FileReader i tae mai ki a matou i roto i te html5 a kua tino rite urutanga hei whakamahi. Ko tehea, i tetahi wa, ka taea te hanga i te aho turanga64 mai i te pupuhi, he pai ake ranei, ka hangaia he aho DataURL, engari ehara tenei i te mea nui mo tatou, na te mea Kei roto i te DataURL nga mea e hiahiatia ana. Bingo, he mahanga iti e tatari ana ki ahau i taku ngana ki te whakauru i enei mea katoa ki roto i te papaa. I whakamahia e te kaituhi te whare pukapuka i roto i te kaupapa papatopengajs, ka taea e koe te mahi me te papatopenga kaore he ahanoa kohiko, i runga i te tuhinga kua tohua. I te timatanga, i whakatau ahau ki te whakauru i taku turanga64 ki tetahi huānga me te whakaatu:kore;, engari i tenei keehi kaore i taea e au te tuu ki runga i te papatopenga na te mea karekau he wehenga. Na reira, hei utu mo te whakaatu:kore; I mahia e au

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

i taea e au te huna i te huānga mai i te tirohanga ka waiho tonu ki te wharangi. Voila, kua oti te mahi, i taku paato i taku paatene, ka tuu he rarangi penei ki roto i te papa:

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

i whakapiri noa ahau ki roto i te papatohu i runga i te tūmau ka whiwhi tonu ahau i te puranga kōtui me nga whirihora katoa.
A, ko te tikanga, i tukuna e ahau he tono kume ki te kaituhi, na te mea... he kaha, he ora te kaupapa, ka pirangi au ki te kite i nga whakahou mai i te kaituhi me taku ake paatene) Mo te hunga e hiahia ana, koinei taku marau kaupapa me ia ano tono toia, kei hea koe e kite ai i nga mea i whakatikahia e au.
Kia hari te whakawhanaketanga katoa)

Te whakatipuranga o nga whirihora mo te nginx, te hitori o te tono kume kotahi

Source: will.com

Tāpiri i te kōrero