You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@subversion.apache.org by br...@apache.org on 2014/06/02 18:16:00 UTC
svn commit: r1599255 - in
/subversion/trunk/subversion/bindings/javahl/native: AuthnCallback.cpp
AuthnCallback.hpp jniwrapper/jni_class_cache.cpp jniwrapper/jni_object.hpp
Author: brane
Date: Mon Jun 2 16:15:59 2014
New Revision: 1599255
URL: http://svn.apache.org/r1599255
Log:
Add native wrapper boilerplate for JavaHL's AuthnCallback
and UserPasswordCallback.
[in subversion/bindings/javahl]
* native/AuthnCallback.hpp, native/AuthnCallback.cpp: New.
* native/jniwrapper/jni_object.hpp
(Java::ClassCache): Declare class objects for AuthnCallback & Co.
* native/jniwrapper/jni_class_cache.cpp
(Java::ClassCache): Call initializers for AuthnCallback & Co.
Added:
subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.cpp (with props)
subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.hpp (with props)
Modified:
subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp
subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp
Added: subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.cpp?rev=1599255&view=auto
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.cpp (added)
+++ subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.cpp Mon Jun 2 16:15:59 2014
@@ -0,0 +1,168 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+#include "jniwrapper/jni_stack.hpp"
+
+#include "AuthnCallback.hpp"
+
+namespace JavaHL {
+
+// Class JavaHL::AuthnCallback
+const char* const AuthnCallback::m_class_name =
+ JAVA_PACKAGE"/callback/AuthnCallback";
+
+::Java::MethodID AuthnCallback::m_mid_username_prompt;
+::Java::MethodID AuthnCallback::m_mid_user_password_prompt;
+::Java::MethodID AuthnCallback::m_mid_ssl_server_trust_prompt;
+::Java::MethodID AuthnCallback::m_mid_ssl_client_cert_prompt;
+::Java::MethodID AuthnCallback::m_mid_ssl_client_cert_passphrase_prompt;
+::Java::MethodID AuthnCallback::m_mid_allow_store_plaintext_password;
+::Java::MethodID AuthnCallback::m_mid_allow_store_plaintext_passphrase;
+
+void AuthnCallback::static_init(::Java::Env env)
+{
+ const jclass cls = ::Java::ClassCache::get_authn_cb();
+
+ m_mid_username_prompt =
+ env.GetMethodID(cls, "usernamePrompt",
+ "(Ljava/lang/String;Z)"
+ "L"JAVA_PACKAGE"/callback/AuthnCallback"
+ "$UsernameResult");
+
+ m_mid_user_password_prompt =
+ env.GetMethodID(cls, "userPasswordPrompt",
+ "(Ljava/lang/String;"
+ "L"JAVA_PACKAGE"/callback/AuthnCallback"
+ "$SSLServerCertFailures"
+ "L"JAVA_PACKAGE"/callback/AuthnCallback"
+ "$SSLServerCertInfo"
+ "Z)"
+ "L"JAVA_PACKAGE"/callback/AuthnCallback"
+ "$SSLServerTrustResult");
+
+ m_mid_ssl_server_trust_prompt =
+ env.GetMethodID(cls, "sslServerTrustPrompt",
+ "(Ljava/lang/String;Ljava/lang/String;Z)"
+ "L"JAVA_PACKAGE"/callback/AuthnCallback"
+ "$UserPasswordResult");
+
+ m_mid_ssl_client_cert_prompt =
+ env.GetMethodID(cls, "sslClientCertPrompt",
+ "(Ljava/lang/String;Z)"
+ "L"JAVA_PACKAGE"/callback/AuthnCallback"
+ "$SSLClientCertResult");
+
+ m_mid_ssl_client_cert_passphrase_prompt =
+ env.GetMethodID(cls, "sslClientCertPassphrasePrompt",
+ "(Ljava/lang/String;Z)"
+ "L"JAVA_PACKAGE"/callback/AuthnCallback"
+ "$SSLClientCertPassphraseResult");
+
+ m_mid_allow_store_plaintext_password =
+ env.GetMethodID(cls, "allowStorePlaintextPassword",
+ "(Ljava/lang/String;)Z");
+
+ m_mid_allow_store_plaintext_passphrase =
+ env.GetMethodID(cls, "allowStorePlaintextPassphrase",
+ "(Ljava/lang/String;)Z");
+}
+
+
+// Class JavaHL::AuthnCallback::AuthnResult
+const char* const AuthnCallback::AuthnResult::m_class_name =
+ JAVA_PACKAGE"/callback/AuthnCallback$AuthnResult";
+
+::Java::FieldID AuthnCallback::AuthnResult::m_fid_save;
+::Java::FieldID AuthnCallback::AuthnResult::m_fid_trust;
+::Java::FieldID AuthnCallback::AuthnResult::m_fid_identity;
+::Java::FieldID AuthnCallback::AuthnResult::m_fid_secret;
+
+void AuthnCallback::AuthnResult::static_init(::Java::Env env)
+{
+ const jclass cls = ::Java::ClassCache::get_authn_result();
+
+ m_fid_save = env.GetFieldID(cls, "save", "Z");
+ m_fid_trust = env.GetFieldID(cls, "trust", "Z");
+ m_fid_identity = env.GetFieldID(cls, "identity", "Ljava/lang/String;");
+ m_fid_secret = env.GetFieldID(cls, "secret", "Ljava/lang/String;");
+}
+
+
+// Class JavaHL::AuthnCallback::SSLServerCertFailures
+const char* const AuthnCallback::SSLServerCertFailures::m_class_name =
+ JAVA_PACKAGE"/callback/AuthnCallback$SSLServerCertFailures";
+
+::Java::MethodID AuthnCallback::SSLServerCertFailures::m_mid_ctor;
+
+void AuthnCallback::SSLServerCertFailures::static_init(::Java::Env env)
+{
+ const jclass cls = ::Java::ClassCache::get_authn_ssl_server_cert_failures();
+
+ m_mid_ctor = env.GetMethodID(cls, "<init>", "(I)V");
+}
+
+AuthnCallback::SSLServerCertFailures::SSLServerCertFailures(
+ ::Java::Env env, jint failures)
+ : ::Java::Object(
+ env,
+ env.NewObject(::Java::ClassCache::get_authn_ssl_server_cert_failures(),
+ m_mid_ctor, failures))
+{}
+
+
+// Class JavaHL::AuthnCallback::SSLServerCertInfo
+const char* const AuthnCallback::SSLServerCertInfo::m_class_name =
+ JAVA_PACKAGE"/callback/AuthnCallback$SSLServerCertFailures";
+
+::Java::MethodID AuthnCallback::SSLServerCertInfo::m_mid_ctor;
+
+void AuthnCallback::SSLServerCertInfo::static_init(::Java::Env env)
+{
+ const jclass cls = ::Java::ClassCache::get_authn_ssl_server_cert_info();
+
+ m_mid_ctor = env.GetMethodID(cls, "<init>",
+ "(Ljava/lang/String;"
+ "Ljava/lang/String;"
+ "Ljava/lang/String;"
+ "Ljava/lang/String;"
+ "Ljava/lang/String;"
+ "Ljava/lang/String;)V");
+}
+
+AuthnCallback::SSLServerCertInfo::SSLServerCertInfo(
+ ::Java::Env env,
+ const ::Java::String& hostname,
+ const ::Java::String& fingerprint,
+ const ::Java::String& validFrom,
+ const ::Java::String& validUntil,
+ const ::Java::String& issuer,
+ const ::Java::String& der)
+ : ::Java::Object(
+ env,
+ env.NewObject(::Java::ClassCache::get_authn_ssl_server_cert_failures(),
+ m_mid_ctor, hostname.get(), fingerprint.get(),
+ validFrom.get(), validUntil.get(),
+ issuer.get(), der.get()))
+{}
+
+} // namespace JavaHL
Propchange: subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.cpp
------------------------------------------------------------------------------
svn:eol-style = native
Added: subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.hpp?rev=1599255&view=auto
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.hpp (added)
+++ subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.hpp Mon Jun 2 16:15:59 2014
@@ -0,0 +1,292 @@
+/**
+ * @copyright
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ * @endcopyright
+ */
+
+#ifndef SVN_JAVAHL_AUTHN_CALLBACK_HPP
+#define SVN_JAVAHL_AUTHN_CALLBACK_HPP
+
+#include "svn_auth.h"
+
+#include "Pool.h"
+
+#include "jniwrapper/jni_object.hpp"
+#include "jniwrapper/jni_string.hpp"
+
+namespace JavaHL {
+
+/**
+ * Object wrapper for @c org.apache.subversion.javahl.callback.AuthnCallback.
+ *
+ * @since New in 1.9.
+ */
+class AuthnCallback : public ::Java::Object
+{
+public:
+ /**
+ * Object wrapper for @c ...AuthnCallback$AuthnResult.
+ */
+ class AuthnResult : public ::Java::Object
+ {
+ public:
+ /**
+ * Constructs a wrapper around @a jthis.
+ * The constructor does not verify the class of the wrapped object.
+ */
+ explicit AuthnResult(::Java::Env env, jobject jthis)
+ : ::Java::Object(env, jthis)
+ {}
+
+ bool save() const
+ {
+ return (0 != m_env.GetBooleanField(m_jthis, m_fid_save));
+ }
+
+ bool trust() const
+ {
+ return (0 != m_env.GetBooleanField(m_jthis, m_fid_trust));
+ }
+
+ jstring identity() const
+ {
+ return jstring(m_env.GetObjectField(m_jthis, m_fid_identity));
+ }
+
+ jstring secret() const
+ {
+ return jstring(m_env.GetObjectField(m_jthis, m_fid_secret));
+ }
+
+ private:
+ friend class ::Java::ClassCache;
+ static const char* const m_class_name;
+ static void static_init(::Java::Env env);
+
+ static ::Java::FieldID m_fid_save;
+ static ::Java::FieldID m_fid_trust;
+ static ::Java::FieldID m_fid_identity;
+ static ::Java::FieldID m_fid_secret;
+ };
+
+
+ /**
+ * Object wrapper for @c ...AuthnCallback$SSLServerCertFailures.
+ */
+ class SSLServerCertFailures : public ::Java::Object
+ {
+ public:
+ /**
+ * Creates and initializes a wrapped object;
+ * @a failures is a set of flags.
+ */
+ explicit SSLServerCertFailures(::Java::Env env, jint failures);
+
+ private:
+ friend class ::Java::ClassCache;
+ static const char* const m_class_name;
+ static void static_init(::Java::Env env);
+
+ static ::Java::MethodID m_mid_ctor;
+ };
+
+
+ /**
+ * Object wrapper for @c ...AuthnCallback$SSLServerCertInfo.
+ */
+ class SSLServerCertInfo : public ::Java::Object
+ {
+ public:
+ /**
+ * Creates and initializes a wrapped object;
+ */
+ explicit SSLServerCertInfo(::Java::Env env,
+ const ::Java::String& hostname,
+ const ::Java::String& fingerprint,
+ const ::Java::String& validFrom,
+ const ::Java::String& validUntil,
+ const ::Java::String& issuer,
+ const ::Java::String& der);
+
+ private:
+ friend class ::Java::ClassCache;
+ static const char* const m_class_name;
+ static void static_init(::Java::Env env);
+
+ static ::Java::MethodID m_mid_ctor;
+ };
+
+
+ /**
+ * Constructs a wrapper around @a jthis.
+ * The constructor does not verify the class of the wrapped object.
+ */
+ explicit AuthnCallback(::Java::Env env, jobject jthis)
+ : ::Java::Object(env, jthis)
+ {}
+
+ /**
+ * Invokes the Java method AuthnCallback.usernamePrompt().
+ */
+ jobject username_prompt(const ::Java::String& realm, bool may_save);
+
+
+ /**
+ * Invokes the Java method AuthnCallback.userPasswordPrompt().
+ */
+ jobject user_password_prompt(const ::Java::String& realm,
+ const ::Java::String& username,
+ bool may_save);
+
+ /**
+ * Invokes the Java method AuthnCallback.sslServerTrustPrompt().
+ */
+ jobject ssl_server_trust_prompt(const ::Java::String& realm,
+ const SSLServerCertFailures& failures,
+ const SSLServerCertInfo& info,
+ bool may_save);
+
+ /**
+ * Invokes the Java method AuthnCallback.sslClientCertPrompt().
+ */
+ jobject ssl_client_cert_prompt(const ::Java::String& realm, bool may_save);
+
+ /**
+ * Invokes the Java method AuthnCallback.sslClientCertPassphrasePrompt().
+ */
+ jobject ssl_client_cert_passphrase_prompt(const ::Java::String&
+ realm, bool may_save);
+
+ /**
+ * Invokes the Java method AuthnCallback.allowStorePlaintextPassword().
+ */
+ bool allow_store_plaintext_password(const ::Java::String& realm);
+
+ /**
+ * Invokes the Java method AuthnCallback.allowStorePlaintextPassphrase().
+ */
+ bool allow_store_plaintext_passphrase(const ::Java::String& realm);
+
+private:
+ friend class ::Java::ClassCache;
+ static const char* const m_class_name;
+ static void static_init(::Java::Env env);
+
+ static ::Java::MethodID m_mid_username_prompt;
+ static ::Java::MethodID m_mid_user_password_prompt;
+ static ::Java::MethodID m_mid_ssl_server_trust_prompt;
+ static ::Java::MethodID m_mid_ssl_client_cert_prompt;
+ static ::Java::MethodID m_mid_ssl_client_cert_passphrase_prompt;
+ static ::Java::MethodID m_mid_allow_store_plaintext_password;
+ static ::Java::MethodID m_mid_allow_store_plaintext_passphrase;
+};
+
+
+/**
+ * Object wrapper for the deprecated interface
+ * @c org.apache.subversion.javahl.callback.UserPasswordCallback.
+ *
+ * @since New in 1.9.
+ */
+class UserPasswordCallback : public ::Java::Object
+{
+public:
+ /**
+ * Constructs a wrapper around @a jthis.
+ * The constructor does not verify the class of the wrapped object.
+ */
+ explicit UserPasswordCallback(::Java::Env env, jobject jthis)
+ : ::Java::Object(env, jthis)
+ {}
+
+ /**
+ * Invokes the Java method UserPasswordCallback.askTrustSSLServer().
+ */
+ jint ask_trust_ssl_server(const ::Java::String& info,
+ bool allow_permanently);
+
+ /**
+ * Invokes the Java method UserPasswordCallback.prompt().
+ */
+ bool prompt(const ::Java::String& realm,
+ const ::Java::String& username);
+
+ /**
+ * Invokes the Java method UserPasswordCallback.askYesNo().
+ */
+ bool ask_yes_no(const ::Java::String& realm,
+ const ::Java::String& question,
+ bool yes_is_default);
+
+ /**
+ * Invokes the Java method UserPasswordCallback.askQuestion().
+ */
+ jstring ask_question(const ::Java::String& realm,
+ const ::Java::String& question,
+ bool show_answer);
+
+ /**
+ * Invokes the Java method UserPasswordCallback.getUsername().
+ */
+ jstring get_username();
+
+ /**
+ * Invokes the Java method UserPasswordCallback.getPassword().
+ */
+ jstring get_password();
+
+ /**
+ * Invokes the Java method UserPasswordCallback.prompt().
+ */
+ bool prompt(const ::Java::String& realm,
+ const ::Java::String& username,
+ bool may_save);
+
+ /**
+ * Invokes the Java method UserPasswordCallback.askQuestion().
+ */
+ jstring ask_question(const ::Java::String& realm,
+ const ::Java::String& question,
+ bool show_answer, bool may_save);
+
+ /**
+ * Invokes the Java method UserPasswordCallback.userAllowedSave().
+ */
+ bool user_allowed_save();
+
+private:
+ friend class ::Java::ClassCache;
+ static const char* const m_class_name;
+ static void static_init(::Java::Env env);
+
+ static ::Java::MethodID m_mid_ask_trust_ssl_server;
+ static ::Java::MethodID m_mid_prompt_2arg;
+ static ::Java::MethodID m_mid_ask_yes_no;
+ static ::Java::MethodID m_mid_ask_question_3arg;
+ static ::Java::MethodID m_mid_get_username;
+ static ::Java::MethodID m_mid_get_password;
+ static ::Java::MethodID m_mid_prompt;
+ static ::Java::MethodID m_mid_ask_question;
+ static ::Java::MethodID m_mid_user_allowed_save;
+};
+
+} // namespace JavaHL
+
+#endif // SVN_JAVAHL_AUTHN_CALLBACK_HPP
Propchange: subversion/trunk/subversion/bindings/javahl/native/AuthnCallback.hpp
------------------------------------------------------------------------------
svn:eol-style = native
Modified: subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp?rev=1599255&r1=1599254&r2=1599255&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_class_cache.cpp Mon Jun 2 16:15:59 2014
@@ -36,6 +36,7 @@
#include "jni_string_map.hpp"
#include "../SubversionException.hpp"
+#include "../AuthnCallback.hpp"
#include "../ExternalItem.hpp"
#include "../EditorCallbacks.hpp"
@@ -120,6 +121,18 @@ ClassCache::ClassCache(Env env)
SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(subversion_exception,
::JavaHL::SubversionException),
+
+ SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(authn_cb,
+ ::JavaHL::AuthnCallback),
+ SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(
+ authn_result, ::JavaHL::AuthnCallback::AuthnResult),
+ SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(
+ authn_ssl_server_cert_failures,
+ ::JavaHL::AuthnCallback::SSLServerCertFailures),
+ SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(
+ authn_ssl_server_cert_info,
+ ::JavaHL::AuthnCallback::SSLServerCertInfo),
+
SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(external_item,
::JavaHL::ExternalItem),
SVN_JAVAHL_JNIWRAPPER_CLASS_CACHE_INIT(editor_provide_base_cb,
@@ -156,7 +169,13 @@ ClassCache::ClassCache(Env env)
ByteChannel::ByteBuffer::static_init(env);
// no-op: ::JavaHL::SubversionException::static_init(env);
+ ::JavaHL::AuthnCallback::static_init(env);
+ ::JavaHL::AuthnCallback::AuthnResult::static_init(env);
+ ::JavaHL::AuthnCallback::SSLServerCertFailures::static_init(env);
+ ::JavaHL::AuthnCallback::SSLServerCertInfo::static_init(env);
+
::JavaHL::ExternalItem::static_init(env);
+
::JavaHL::ProvideBaseCallback::static_init(env);
::JavaHL::ProvideBaseCallback::ReturnValue::static_init(env);
::JavaHL::ProvidePropsCallback::static_init(env);
Modified: subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp
URL: http://svn.apache.org/viewvc/subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp?rev=1599255&r1=1599254&r2=1599255&view=diff
==============================================================================
--- subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp (original)
+++ subversion/trunk/subversion/bindings/javahl/native/jniwrapper/jni_object.hpp Mon Jun 2 16:15:59 2014
@@ -124,6 +124,7 @@ private:
* cache should therefore be kept to a reasonable minimum.
*
* @since New in 1.9.
+ * @todo ### Change implementation to load classes at first use.
*/
class ClassCache
{
@@ -161,6 +162,12 @@ class ClassCache
SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(byte_buffer);
SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(subversion_exception);
+
+ SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(authn_cb);
+ SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(authn_result);
+ SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(authn_ssl_server_cert_failures);
+ SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(authn_ssl_server_cert_info);
+
SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(external_item);
SVN_JAVAHL_JNIWRAPPER_CACHED_CLASS(editor_provide_base_cb);