package gov.pr.celepar.tabeliao.client.applet.action;
/*
Este programa � licenciado de acordo com a
LPG-AP (LICEN�A P�BLICA GERAL PARA PROGRAMAS DE COMPUTADOR DA ADMINISTRA��O P�BLICA),
vers�o 1.1 ou qualquer vers�o posterior.
A LPG-AP deve acompanhar todas PUBLICA��ES, DISTRIBUI��ES e REPRODU��ES deste Programa.
Caso uma c�pia da LPG-AP n�o esteja dispon�vel junto com este Programa, voc� pode contatar o LICENCIANTE ou ent�o acessar diretamente:
http://www.celepar.pr.gov.br/licenca/LPG-AP.pdf
Para poder USAR, PUBLICAR, DISTRIBUIR, REPRODUZIR ou ALTERAR este Programa
� preciso estar de acordo com os termos da LPG-AP
*/
import gov.pr.celepar.tabeliao.client.applet.DocumentSignException;
import gov.pr.celepar.tabeliao.client.applet.TabeliaoAppletUtil;
import gov.pr.celepar.tabeliao.util.Base64Utils;
import gov.pr.celepar.tabeliao.util.CertificationChainAndSignatureBase64;
import gov.pr.celepar.tabeliao.util.PrivateKeyAndCertChain;
import javax.swing.JApplet;
import netscape.javascript.JSObject;
/**
* Classe de acao para efetuar Autenticacao com certificados em arquivo ou hardware
*
* @author Thiago Meneghello - GIC/CELEPAR
*
*/
public class ActionAutenticacao implements ActionHandler {
private JApplet applet;
/**
*
* @param applet
*/
public ActionAutenticacao(JApplet applet) {
this.applet = applet;
}
/**
* @param arquivo -> informado se o certificado estiver armazenado em formato PKCS#12
* @param pin
* @param isHardware -> true se o certificado estiver armazenado em hardware (smartcard/token)
*/
public boolean execute(String arquivo, String pin, boolean isHardware){
//Tenta pegar o keyStore que possui o certificado do usuario
PrivateKeyAndCertChain privateKey;
try {
privateKey = TabeliaoAppletUtil.loadPrivateKeyAndCertChain(arquivo, pin, isHardware);
} catch (DocumentSignException e) {
String mensagem = "Ocorreu um erro ao carregar a chave privada do certificado.\n" +
"Motivo: " + e.getMessage();
TabeliaoAppletUtil.showMensagem(applet, mensagem,2);
return false;
}
//Aqui ja esta com o keyStore, pode assinar o UUID
//E mandar para o tabeli�o autenticar o usuario.
JSObject window = JSObject.getWindow(applet);
JSObject document = (JSObject)window.getMember("document");
JSObject form = (JSObject)document.getMember("tabeliaoForm");
JSObject field = null;
field = (JSObject) form.getMember("TABELIAO_SESSION_UUID");
String uuid = (String)field.getMember("value");
//Assina o uuid e codifica em Base64 para mandar para o tabeliao.
CertificationChainAndSignatureBase64 ccs64;
try {
ccs64 = TabeliaoAppletUtil.signDocument(uuid.getBytes(), privateKey, true);
} catch (DocumentSignException e) {
TabeliaoAppletUtil.showMensagem(applet, "Ocorreu um erro na autentica��o do usu�rio.\nMotivo: "
+ e.getMessage(),2);
return false;
}
String assinatura = Base64Utils.base64Encode(ccs64.mSignature);
field = (JSObject) form.getMember("CHAVE");
field.setMember("value", assinatura);
privateKey = null;
//Manda um submit para a tela de autentica��o
window.eval("doLogin()");
return true;
}
}