<commit_before>/**
 * Plugin jQuery para comunicação com o Assinador Digital - Discus Tecnologia
 * Este plugin para jQuery é distribuído livremente, mas o uso do Assinador Digital requer licença, entre em contato para adiquirir sua licença
 * pelo email <a href="mailto:<EMAIL>"><EMAIL></a>, ou se preferir veja mais informações
 * em <a href="http://www.discustecnologia.com.br">www.discustecnologia.com.br</a>.
 * @author <NAME> <<EMAIL>>
 * @name Plugin jQuery Assinador Digital - Discus Tecnologia
 * @license
 * The MIT License (MIT)
 * Copyright (c) 2016 Discus Tecnologia.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
(function($){

	$.fn.extend({

		/**
		 * Envia arquivos no formato PDF para o assinador assinar. Os arquivos devem ser exclusivamente no formato PDF.
		 * @param {string} authkey - Chave de autorização para assinatura no formato JWT (JSON Web Token) gerada no servidor da Discus Tecnologia.
		 * @param {Object} obj - Objeto contendo as funções de callback success e error
		 * @returns {callback} retorna arquivo .pdf assiando em caso de sucesso ou
		 * em caso de erro ou retorna um objeto JSON no seguinte formato: { "success": {Boolean}, "msg":{string} } ou uma mensagem em texto simples
		 * @example
		 * $('#file').signPDF('f348gf73gf3gfy73gg43g.f43f34gf34g43g34g45g34.g45g542g524g35342gt24g42', {
		 * 		success: function(blob){
		 * 			saveAs(blob, "teste.pdf");
		 * 		},
		 * 		error: function(statusCode, msg){
		 * 			console.log(statusCode == 0 ? msg: JSON.parse(msg));
		 * 		}
		 * });
		 */
		signPDF: function (authkey, obj) {
			var urlService = 'http://localhost:5820/';
			return this.each(function () {
				sendToSigner(this, authkey, obj, urlService, true);
			});
		},


		/**
		 * Envia arquivo PDF para validação da(s) assinatura(s) ao assinador
	     * @param {string} authkey - Chave de autorização para assinatura no formato JWT (JSON Web Token) gerada no servidor da Discus Tecnologia.
		 * @param {Object} obj - Objeto contendo as funções de callback success e error
		 * @param {Boolean} showValidator - Se true exibe a aplicação de validação de assinaturas do assinador, se false retorna os dados da validação em formato JSON.
		 * @returns {callback} retorna arquivo um objeto JSON informando que a validação está em andamento caso seja exibida a aplicação de validação do assinador,
		 * um objeto JSON contendo informações sobre a(s) assinatura(s).
		 * @example
		 * $('#file').verifyPDF('f348gf73gf3gfy73gg43g.f43f34gf34g43g34g45g34.g45g542g524g35342gt24g42', {
		 * 		success: function(blob){
		 * 			console.log(blob);
		 * 		},
		 * 		error: function(statusCode, msg){
		 * 			console.log(statusCode == 0 ? msg: JSON.parse(msg));
		 * 		}
		 * }, false);
		 */
		verifyPDF: function (authkey, obj, showValidator) {
			var urlService = 'http://localhost:5820/validapkcs7/pdf/'+(showValidator ? 'show_validator' : '');
			return this.each(function () {
				sendToSigner(this, authkey, obj, urlService, true);
			});
		},


		/**
		 * Envia arquivo .p7s para validação da(s) assinatura(s) ao assinador
	     * @param {string} authkey - Chave de autorização para assinatura no formato JWT (JSON Web Token) gerada no servidor da Discus Tecnologia.
		 * @param {Object} obj - Objeto contendo as funções de callback success e error
		 * @param {Boolean} showValidator - Se true exibe a aplicação de validação de assinaturas do assinador, se false retorna os dados da validação em formato JSON.
		 * @returns {callback} retorna arquivo um objeto JSON informando que a validação está em andamento caso seja exibida a aplicação de validação do assinador,
		 * um objeto JSON contendo informações sobre a(s) assinatura(s).
		 * @example
		 * $('#file').verifyData('f348gf73gf3gfy73gg43g.f43f34gf34g43g34g45g34.g45g542g524g35342gt24g42', {
		 * 		success: function(blob){
		 * 			console.log(blob);
		 * 		},
		 * 		error: function(statusCode, msg){
		 * 			console.log(statusCode == 0 ? msg: JSON.parse(msg));
		 * 		}
		 * }, false);
		 */
		verifyData: function (authkey, obj, showValidator) {
			var urlService = 'http://localhost:5820/validapkcs7/'+(showValidator ? 'show_validator' : '');
			return this.each(function () {
				sendToSigner(this, authkey, obj, urlService, true);
			});
		}

	});



	/**
     * Envia os dados para o assinador, devolvendo o retorno às funções predefinidas do obj de callback
     * @private
     * @param {Object} jqObj - Objeto jQuery a ser processado (somente input files)
     * @param {string} authkey - Chave de autorização para assinatura no formato JWT (JSON Web Token) gerada no servidor da Discus Tecnologia.
	 * @param {Object} obj - Objeto contendo as funções de callback success e error
	 * @param {string} urlService - Url do serviço a ser consumido do assinador
	 * @param {Boolean} isFile - true se for enviar arquivo ou false se for enviar string de dados
	 * @param {string} data - string de dados a serem assinados
	 * @returns {callback} retorna arquivo .pdf assiando, .p7s de assinatura ou JSON com dados da validação da assinatura em caso de sucesso.
	 * Em caso de erro ou retorna um objeto JSON no seguinte formato: { "success": {Boolean}, "msg":{string} } ou uma mensagem em texto simples.
     */
	function sendToSigner(jqObj, authkey, obj, urlService, isFile) {
		var lenFiles = $(jqObj)[0].files.length;
		for(var i = 0; i < lenFiles; i++){
			var formData = new FormData();
			if(!isFile) formData.append('tosign', $(jqObj)[0].files[i]);
			formData.append('authkey', authkey);
			if(isFile) formData.append('file', $(jqObj)[0].files[i]);

			$.ajax({
				url : urlService,
				type : 'POST',
				data : formData,
				processData: false,  // tell jQuery not to process the data
				contentType: false,  // tell jQuery not to set contentType
				xhrFields : {
					responseType : 'blob'
				},
				success: function(blob, status, xhr) {
					if(typeof obj.success == 'function') obj.success(blob);
					//blob = data;//xhr.response is now a blob object
					//saveAs(blob, "teste.p7s"); //este funciona até no IE para fazer download do arquivo recebido
				},
				error: function(xhr, textStatus) {
		        	if(typeof obj.error == 'function') obj.error(xhr.status, xhr.statusText);
		        }
			});
		}
	}



	/**
	 * Enviar dados em formato texto para o assinador.
	 * @param {string} data - Dados a serem assinados.
	 * @param {string} authkey - Chave de autorização para assinatura no formato JWT (JSON Web Token) gerada no servidor da Discus Tecnologia.
	 * @param {Object} obj - Objeto contendo as funções de callback success e error
	 * @returns {callback} retorna arquivo .p7s em caso de sucesso ou
	 * em caso de erro ou retorna um objeto JSON no seguinte formato: { "success": {Boolean}, "msg":{string} } ou uma mensagem em texto simples
	 * @example
	 * $.signData(JSON.stringify({"teste":123}), 'f348gf73gf3gfy73gg43g.f43f34gf34g43g34g45g34.g45g542g524g35342gt24g42' {
	 * 		success: function(blob){
	 * 			saveAs(blob, "signed.p7s");
	 * 		},
	 * 		error: function(statusCode, msg){
	 * 			console.log(statusCode == 0 ? msg: JSON.parse(msg));
	 * 		}
	 * });
	 */
	$.signData = function(data, authkey, obj){
		var urlService = 'http://localhost:5820/dados/';
		sendToSigner($({'files':[data]}), authkey, obj, urlService, false);
	};



	/**
	 * Checar se o assinador está online.
	 * @param {function(boolean active)} callback - Função de callback que recebe true se o assinador está ativo ou false caso contrário.
	 * @example
	 * $.signerIsActive(function(active){console.log(active);});
	 */
	$.signerIsActive = function(callback){
    	$.ajax({
    		url: "http://localhost:5820",
	        type: "GET",
	        timeout:1000,
	        success: function(data, status, xhr) {
	        	if(typeof callback == 'function') callback(xhr.status == 200 ? true : false);
	        },
	        error: function() {
	        	if(typeof callback == 'function') callback(false);
	        }
 		});
	};



	/**
	 * Checar se o assinador está online de forma síncrona.
	 * @deprecated since version 1.0 check https://xhr.spec.whatwg.org/
	 * @returns {Boolean} true se o assinador está online, false senão.
	 * @example
	 * console.log($.signerIsActiveSync());
	 */
	$.signerIsActiveSync = function(){
    	return $.ajax({
	        type: "GET",
	        url: "http://localhost:5820",
	        async: false<commit_msg>Atualização dos arquivos gerados pelo grunt.<commit_after>/**
 * Plugin jQuery para comunicação com o Assinador Digital - Discus Tecnologia
 * Este plugin para jQuery é distribuído livremente, mas o uso do Assinador Digital requer licença, entre em contato para adiquirir sua licença
 * pelo email <a href="mailto:<EMAIL>"><EMAIL></a>, ou se preferir veja mais informações
 * em <a href="http://www.discustecnologia.com.br">www.discustecnologia.com.br</a>.
 * @author <NAME> <<EMAIL>>
 * @name Plugin jQuery Assinador Digital - Discus Tecnologia
 * @license
 * The MIT License (MIT)
 * Copyright (c) 2016 Discus Tecnologia.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in all
 * copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 * SOFTWARE.
 */
(function($){

	$.fn.extend({

		/**
		 * Envia arquivos no formato PDF para o assinador assinar. Os arquivos devem ser exclusivamente no formato PDF.
		 * @param {string} authkey - Chave de autorização para assinatura no formato JWT (JSON Web Token) gerada no servidor da Discus Tecnologia.
		 * @param {Object} obj - Objeto contendo as funções de callback success e error
		 * @returns {callback} retorna arquivo .pdf assiando em caso de sucesso ou
		 * em caso de erro ou retorna um objeto JSON no seguinte formato: { "success": {Boolean}, "msg":{string} } ou uma mensagem em texto simples
		 * @example
		 * $('#file').signPDF('f348gf73gf3gfy73gg43g.f43f34gf34g43g34g45g34.g45g542g524g35342gt24g42', {
		 * 		success: function(blob){
		 * 			saveAs(blob, "teste.pdf");
		 * 		},
		 * 		error: function(statusCode, msg){
		 * 			console.log(statusCode == 0 ? msg: JSON.parse(msg));
		 * 		}
		 * });
		 */
		signPDF: function (authkey, obj) {
			var urlService = 'http://localhost:5820/';
			return this.each(function () {
				sendToSigner(this, authkey, obj, urlService, true);
			});
		},


		/**
		 * Envia arquivo PDF para validação da(s) assinatura(s) ao assinador
	     * @param {string} authkey - Chave de autorização para assinatura no formato JWT (JSON Web Token) gerada no servidor da Discus Tecnologia.
		 * @param {Object} obj - Objeto contendo as funções de callback success e error
		 * @param {Boolean} showValidator - Se true exibe a aplicação de validação de assinaturas do assinador, se false retorna os dados da validação em formato JSON.
		 * @returns {callback} retorna arquivo um objeto JSON informando que a validação está em andamento caso seja exibida a aplicação de validação do assinador,
		 * um objeto JSON contendo informações sobre a(s) assinatura(s).
		 * @example
		 * $('#file').verifyPDF('f348gf73gf3gfy73gg43g.f43f34gf34g43g34g45g34.g45g542g524g35342gt24g42', {
		 * 		success: function(blob){
		 * 			console.log(blob);
		 * 		},
		 * 		error: function(statusCode, msg){
		 * 			console.log(statusCode == 0 ? msg: JSON.parse(msg));
		 * 		}
		 * }, false);
		 */
		verifyPDF: function (authkey, obj, showValidator) {
			var urlService = 'http://localhost:5820/validapkcs7/pdf/'+(showValidator ? 'show_validator' : '');
			return this.each(function () {
				sendToSigner(this, authkey, obj, urlService, true);
			});
		},


		/**
		 * Envia arquivo .p7s para validação da(s) assinatura(s) ao assinador
	     * @param {string} authkey - Chave de autorização para assinatura no formato JWT (JSON Web Token) gerada no servidor da Discus Tecnologia.
		 * @param {Object} obj - Objeto contendo as funções de callback success e error
		 * @param {Boolean} showValidator - Se true exibe a aplicação de validação de assinaturas do assinador, se false retorna os dados da validação em formato JSON.
		 * @returns {callback} retorna arquivo um objeto JSON informando que a validação está em andamento caso seja exibida a aplicação de validação do assinador,
		 * um objeto JSON contendo informações sobre a(s) assinatura(s).
		 * @example
		 * $('#file').verifyData('f348gf73gf3gfy73gg43g.f43f34gf34g43g34g45g34.g45g542g524g35342gt24g42', {
		 * 		success: function(blob){
		 * 			console.log(blob);
		 * 		},
		 * 		error: function(statusCode, msg){
		 * 			console.log(statusCode == 0 ? msg: JSON.parse(msg));
		 * 		}
		 * }, false);
		 */
		verifyData: function (authkey, obj, showValidator) {
			var urlService = 'http://localhost:5820/validapkcs7/'+(showValidator ? 'show_validator' : '');
			return this.each(function () {
				sendToSigner(this, authkey, obj, urlService, true);
			});
		}

	});



	/**
     * Envia os dados para o assinador, devolvendo o retorno às funções predefinidas do obj de callback
     * @private
     * @param {Object} jqObj - Objeto jQuery a ser processado (somente input files)
     * @param {string} authkey - Chave de autorização para assinatura no formato JWT (JSON Web Token) gerada no servidor da Discus Tecnologia.
	 * @param {Object} obj - Objeto contendo as funções de callback success e error
	 * @param {string} urlService - Url do serviço a ser consumido do assinador
	 * @param {Boolean} isFile - true se for enviar arquivo ou false se for enviar string de dados
	 * @param {string} data - string de dados a serem assinados
	 * @returns {callback} retorna arquivo .pdf assiando, .p7s de assinatura ou JSON com dados da validação da assinatura em caso de sucesso.
	 * Em caso de erro ou retorna um objeto JSON no seguinte formato: { "success": {Boolean}, "msg":{string} } ou uma mensagem em texto simples.
     */
	function sendToSigner(jqObj, authkey, obj, urlService, isFile) {
		var lenFiles = $(jqObj)[0].files.length;
		for(var i = 0; i < lenFiles; i++){
			var formData = new FormData();
			if(!isFile) formData.append('tosign', $(jqObj)[0].files[i]);
			formData.append('authkey', authkey);
			if(isFile) formData.append('file', $(jqObj)[0].files[i]);

			$.ajax({
				url : urlService,
				type : 'POST',
				data : formData,
				processData: false,  // tell jQuery not to process the data
				contentType: false,  // tell jQuery not to set contentType
				xhrFields : {
					responseType : 'blob'
				},
				success: function(blob, status, xhr) {
					if(typeof obj.success == 'function') obj.success(blob);
					//blob = data;//xhr.response is now a blob object
					//saveAs(blob, "teste.p7s"); //este funciona até no IE para fazer download do arquivo recebido
				},
				error: function(xhr, textStatus) {
		        	if(typeof obj.error == 'function') obj.error(xhr.status, xhr.statusText);
		        }
			});
		}
	}



	/**
	 * Enviar dados em formato texto para o assinador.
	 * @param {string} data - Dados a serem assinados.
	 * @param {string} authkey - Chave de autorização para assinatura no formato JWT (JSON Web Token) gerada no servidor da Discus Tecnologia.
	 * @param {Object} obj - Objeto contendo as funções de callback success e error
	 * @returns {callback} retorna arquivo .p7s em caso de sucesso ou
	 * em caso de erro ou retorna um objeto JSON no seguinte formato: { "success": {Boolean}, "msg":{string} } ou uma mensagem em texto simples
	 * @example
	 * $.signData(JSON.stringify({"teste":123}), 'f348gf73gf3gfy73gg43g.f43f34gf34g43g34g45g34.g45g542g524g35342gt24g42', {
	 * 		success: function(blob){
	 * 			saveAs(blob, "signed.p7s");
	 * 		},
	 * 		error: function(statusCode, msg){
	 * 			console.log(statusCode == 0 ? msg: JSON.parse(msg));
	 * 		}
	 * });
	 */
	$.signData = function(data, authkey, obj){
		var urlService = 'http://localhost:5820/dados/';
		sendToSigner($({'files':[data]}), authkey, obj, urlService, false);
	};



	/**
	 * Checar se o assinador está online.
	 * @param {function} callback - Função de callback que recebe true se o assinador está ativo ou false caso contrário.
	 * @example
	 * $.signerIsActive(function(active){console.log(active);});
	 */
	$.signerIsActive = function(callback){
    	$.ajax({
    		url: "http://localhost:5820",
	        type: "GET",
	        timeout:1000,
	        success: function(data, status, xhr) {
	        	if(typeof callback == 'function') callback(xhr.status == 200 ? true : false);
	        },
	        error: function() {
	        	if(typeof callback == 'function') callback(false);
	        }
 		});
	};



	/**
	 * Checar se o assinador está online de forma síncrona.
	 * @deprecated since version 1.0 check https://xhr.spec.whatwg.org/
	 * @returns {Boolean} true se o assinador está online, false senão.
	 * @example
	 * console.log($.signerIsActiveSync());
	 */
	$.signerIsActiveSync = function(){
    	return $.ajax({
	        type: "GET",
	        url: "http://localhost:5820",
	        async: false
{'fraction_non_alphanumeric': 0.11307684109559843, 'fraction_numerical': 0.0233400831290632, 'mean_word_length': 3.5550970873786407, 'pattern_counts': {'":': 14, '<': 23, '<?xml version=': 0, '>': 21, 'https://': 2, 'lorem ipsum': 0, 'www.': 4, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 2, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5985197', 'n_tokens_mistral': 6849, 'n_tokens_neox': 5938, 'n_words': 2021}