package utils.cert;
import org.springframework.dao.DataAccessException;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.jdbc.core.support.AbstractLobCreatingPreparedStatementCallback;
import org.springframework.jdbc.support.lob.DefaultLobHandler;
import org.springframework.jdbc.support.lob.LobCreator;
import org.springframework.jdbc.support.lob.LobHandler;
import parser.utils.CertTool;
import javax.sql.DataSource;
import java.security.cert.Certificate;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class CertDaoDbImpl implements CertDao {
JdbcTemplate jdbcTemplate;
LobHandler lobHandler = new DefaultLobHandler();
public void setDataSource(DataSource dataSource) {
this.jdbcTemplate = new JdbcTemplate(dataSource);
}
@Override
public int addCert(final Certificate cert) {
// final String md5 = Util.getCertInfo(cert);
final String md5 = CertTool.getCertMd5(cert);
final String baseinfo = CertTool.getCertSubject(cert);
final byte[] raw;
try {
raw = cert.getEncoded();
} catch (final Exception e) {
return -1;
}
final int r = jdbcTemplate.execute("insert into cert_info(md5, baseinfo, rawdata, type) values (?, ?, ?, ?)",
new AbstractLobCreatingPreparedStatementCallback(lobHandler) {
@Override
protected void setValues(PreparedStatement ps, LobCreator lobCreator)
throws SQLException,
DataAccessException {
ps.setString(0, md5);
ps.setString(1, baseinfo);
lobCreator.setBlobAsBytes(ps, 2, raw);
ps.setString(3, String.valueOf(CERT_TYPE_UNKNOWN));//unknown
}
});
return r;
}
@Override
public char checkCertType(Certificate cert) {
// final String md5 = Util.getCertInfo(cert);
final String md5 = CertTool.getCertMd5(cert);
final String r = jdbcTemplate.queryForObject("select type from cert_info where md5=?", new Object[]{md5}, String.class);
return r == null ? CERT_TYPE_UNKNOWN : r.charAt(0);
}
@Override
public char checkCertType(String certMd5) {
return 0;
}
}