@@ -1394,6 +1394,7 @@ void SSLWrap<Base>::AddMethods(Environment* env, Local<FunctionTemplate> t) {
13941394 HandleScope scope (env->isolate ());
13951395
13961396 env->SetProtoMethodNoSideEffect (t, " getPeerCertificate" , GetPeerCertificate);
1397+ env->SetProtoMethodNoSideEffect (t, " getCertificate" , GetCertificate);
13971398 env->SetProtoMethodNoSideEffect (t, " getFinished" , GetFinished);
13981399 env->SetProtoMethodNoSideEffect (t, " getPeerFinished" , GetPeerFinished);
13991400 env->SetProtoMethodNoSideEffect (t, " getSession" , GetSession);
@@ -1856,8 +1857,26 @@ void SSLWrap<Base>::GetPeerCertificate(
18561857 }
18571858
18581859 done:
1859- if (result.IsEmpty ())
1860- result = Object::New (env->isolate ());
1860+ args.GetReturnValue ().Set (result);
1861+ }
1862+
1863+
1864+ template <class Base >
1865+ void SSLWrap<Base>::GetCertificate(
1866+ const FunctionCallbackInfo<Value>& args) {
1867+ Base* w;
1868+ ASSIGN_OR_RETURN_UNWRAP (&w, args.Holder ());
1869+ Environment* env = w->ssl_env ();
1870+
1871+ ClearErrorOnReturn clear_error_on_return;
1872+
1873+ Local<Object> result;
1874+
1875+ X509Pointer cert (SSL_get_certificate (w->ssl_ .get ()));
1876+
1877+ if (cert)
1878+ result = X509ToObject (env, cert.get ());
1879+
18611880 args.GetReturnValue ().Set (result);
18621881}
18631882
0 commit comments