@@ -1409,6 +1409,7 @@ void SSLWrap<Base>::AddMethods(Environment* env, Local<FunctionTemplate> t) {
14091409 HandleScope scope (env->isolate ());
14101410
14111411 env->SetProtoMethodNoSideEffect (t, " getPeerCertificate" , GetPeerCertificate);
1412+ env->SetProtoMethodNoSideEffect (t, " getCertificate" , GetCertificate);
14121413 env->SetProtoMethodNoSideEffect (t, " getFinished" , GetFinished);
14131414 env->SetProtoMethodNoSideEffect (t, " getPeerFinished" , GetPeerFinished);
14141415 env->SetProtoMethodNoSideEffect (t, " getSession" , GetSession);
@@ -1871,8 +1872,26 @@ void SSLWrap<Base>::GetPeerCertificate(
18711872 }
18721873
18731874 done:
1874- if (result.IsEmpty ())
1875- result = Object::New (env->isolate ());
1875+ args.GetReturnValue ().Set (result);
1876+ }
1877+
1878+
1879+ template <class Base >
1880+ void SSLWrap<Base>::GetCertificate(
1881+ const FunctionCallbackInfo<Value>& args) {
1882+ Base* w;
1883+ ASSIGN_OR_RETURN_UNWRAP (&w, args.Holder ());
1884+ Environment* env = w->ssl_env ();
1885+
1886+ ClearErrorOnReturn clear_error_on_return;
1887+
1888+ Local<Object> result;
1889+
1890+ X509Pointer cert (SSL_get_certificate (w->ssl_ .get ()));
1891+
1892+ if (cert)
1893+ result = X509ToObject (env, cert.get ());
1894+
18761895 args.GetReturnValue ().Set (result);
18771896}
18781897
0 commit comments