summaryrefslogtreecommitdiff
path: root/include/git2/transport.h
diff options
context:
space:
mode:
Diffstat (limited to 'include/git2/transport.h')
-rw-r--r--include/git2/transport.h307
1 files changed, 2 insertions, 305 deletions
diff --git a/include/git2/transport.h b/include/git2/transport.h
index ab45a3a1f..5b42634ad 100644
--- a/include/git2/transport.h
+++ b/include/git2/transport.h
@@ -10,6 +10,7 @@
#include "indexer.h"
#include "net.h"
#include "types.h"
+#include "cred.h"
/**
* @file git2/transport.h
@@ -75,311 +76,7 @@ typedef struct {
size_t len;
} git_cert_x509;
-/*
- *** Begin interface for credentials acquisition ***
- */
-
-/**
- * Supported credential types
- *
- * This represents the various types of authentication methods supported by
- * the library.
- */
-typedef enum {
- /**
- * A vanilla user/password request
- * @see git_cred_userpass_plaintext_new
- */
- GIT_CREDTYPE_USERPASS_PLAINTEXT = (1u << 0),
-
- /**
- * An SSH key-based authentication request
- * @see git_cred_ssh_key_new
- */
- GIT_CREDTYPE_SSH_KEY = (1u << 1),
-
- /**
- * An SSH key-based authentication request, with a custom signature
- * @see git_cred_ssh_custom_new
- */
- GIT_CREDTYPE_SSH_CUSTOM = (1u << 2),
-
- /**
- * An NTLM/Negotiate-based authentication request.
- * @see git_cred_default
- */
- GIT_CREDTYPE_DEFAULT = (1u << 3),
-
- /**
- * An SSH interactive authentication request
- * @see git_cred_ssh_interactive_new
- */
- GIT_CREDTYPE_SSH_INTERACTIVE = (1u << 4),
-
- /**
- * Username-only authentication request
- *
- * Used as a pre-authentication step if the underlying transport
- * (eg. SSH, with no username in its URL) does not know which username
- * to use.
- *
- * @see git_cred_username_new
- */
- GIT_CREDTYPE_USERNAME = (1u << 5),
-
- /**
- * An SSH key-based authentication request
- *
- * Allows credentials to be read from memory instead of files.
- * Note that because of differences in crypto backend support, it might
- * not be functional.
- *
- * @see git_cred_ssh_key_memory_new
- */
- GIT_CREDTYPE_SSH_MEMORY = (1u << 6),
-} git_credtype_t;
-
-typedef struct git_cred git_cred;
-
-/**
- * The base structure for all credential types
- */
-struct git_cred {
- git_credtype_t credtype; /**< A type of credential */
-
- /** The deallocator for this type of credentials */
- void GIT_CALLBACK(free)(git_cred *cred);
-};
-
-/** A plaintext username and password */
-typedef struct {
- git_cred parent; /**< The parent cred */
- char *username; /**< The username to authenticate as */
- char *password; /**< The password to use */
-} git_cred_userpass_plaintext;
-
-
-/*
- * If the user hasn't included libssh2.h before git2.h, we need to
- * define a few types for the callback signatures.
- */
-#ifndef LIBSSH2_VERSION
-typedef struct _LIBSSH2_SESSION LIBSSH2_SESSION;
-typedef struct _LIBSSH2_USERAUTH_KBDINT_PROMPT LIBSSH2_USERAUTH_KBDINT_PROMPT;
-typedef struct _LIBSSH2_USERAUTH_KBDINT_RESPONSE LIBSSH2_USERAUTH_KBDINT_RESPONSE;
-#endif
-
-typedef int GIT_CALLBACK(git_cred_sign_cb)(LIBSSH2_SESSION *session, unsigned char **sig, size_t *sig_len, const unsigned char *data, size_t data_len, void **abstract);
-typedef void GIT_CALLBACK(git_cred_ssh_interactive_cb)(const char* name, int name_len, const char* instruction, int instruction_len, int num_prompts, const LIBSSH2_USERAUTH_KBDINT_PROMPT* prompts, LIBSSH2_USERAUTH_KBDINT_RESPONSE* responses, void **abstract);
-
-/**
- * A ssh key from disk
- */
-typedef struct git_cred_ssh_key {
- git_cred parent; /**< The parent cred */
- char *username; /**< The username to authenticate as */
- char *publickey; /**< The path to a public key */
- char *privatekey; /**< The path to a private key */
- char *passphrase; /**< Passphrase used to decrypt the private key */
-} git_cred_ssh_key;
-
-/**
- * Keyboard-interactive based ssh authentication
- */
-typedef struct git_cred_ssh_interactive {
- git_cred parent; /**< The parent cred */
- char *username; /**< The username to authenticate as */
-
- /**
- * Callback used for authentication.
- */
- git_cred_ssh_interactive_cb prompt_callback;
-
- void *payload; /**< Payload passed to prompt_callback */
-} git_cred_ssh_interactive;
-
-/**
- * A key with a custom signature function
- */
-typedef struct git_cred_ssh_custom {
- git_cred parent; /**< The parent cred */
- char *username; /**< The username to authenticate as */
- char *publickey; /**< The public key data */
- size_t publickey_len; /**< Length of the public key */
-
- /**
- * Callback used to sign the data.
- */
- git_cred_sign_cb sign_callback;
-
- void *payload; /**< Payload passed to prompt_callback */
-} git_cred_ssh_custom;
-
-/** A key for NTLM/Kerberos "default" credentials */
-typedef struct git_cred git_cred_default;
-
-/** Username-only credential information */
-typedef struct git_cred_username {
- git_cred parent; /**< The parent cred */
- char username[1]; /**< The username to authenticate as */
-} git_cred_username;
-
-/**
- * Check whether a credential object contains username information.
- *
- * @param cred object to check
- * @return 1 if the credential object has non-NULL username, 0 otherwise
- */
-GIT_EXTERN(int) git_cred_has_username(git_cred *cred);
-
-/**
- * Create a new plain-text username and password credential object.
- * The supplied credential parameter will be internally duplicated.
- *
- * @param out The newly created credential object.
- * @param username The username of the credential.
- * @param password The password of the credential.
- * @return 0 for success or an error code for failure
- */
-GIT_EXTERN(int) git_cred_userpass_plaintext_new(
- git_cred **out,
- const char *username,
- const char *password);
-
-/**
- * Create a new passphrase-protected ssh key credential object.
- * The supplied credential parameter will be internally duplicated.
- *
- * @param out The newly created credential object.
- * @param username username to use to authenticate
- * @param publickey The path to the public key of the credential.
- * @param privatekey The path to the private key of the credential.
- * @param passphrase The passphrase of the credential.
- * @return 0 for success or an error code for failure
- */
-GIT_EXTERN(int) git_cred_ssh_key_new(
- git_cred **out,
- const char *username,
- const char *publickey,
- const char *privatekey,
- const char *passphrase);
-
-/**
- * Create a new ssh keyboard-interactive based credential object.
- * The supplied credential parameter will be internally duplicated.
- *
- * @param username Username to use to authenticate.
- * @param prompt_callback The callback method used for prompts.
- * @param payload Additional data to pass to the callback.
- * @return 0 for success or an error code for failure.
- */
-GIT_EXTERN(int) git_cred_ssh_interactive_new(
- git_cred **out,
- const char *username,
- git_cred_ssh_interactive_cb prompt_callback,
- void *payload);
-
-/**
- * Create a new ssh key credential object used for querying an ssh-agent.
- * The supplied credential parameter will be internally duplicated.
- *
- * @param out The newly created credential object.
- * @param username username to use to authenticate
- * @return 0 for success or an error code for failure
- */
-GIT_EXTERN(int) git_cred_ssh_key_from_agent(
- git_cred **out,
- const char *username);
-
-/**
- * Create an ssh key credential with a custom signing function.
- *
- * This lets you use your own function to sign the challenge.
- *
- * This function and its credential type is provided for completeness
- * and wraps `libssh2_userauth_publickey()`, which is undocumented.
- *
- * The supplied credential parameter will be internally duplicated.
- *
- * @param out The newly created credential object.
- * @param username username to use to authenticate
- * @param publickey The bytes of the public key.
- * @param publickey_len The length of the public key in bytes.
- * @param sign_callback The callback method to sign the data during the challenge.
- * @param payload Additional data to pass to the callback.
- * @return 0 for success or an error code for failure
- */
-GIT_EXTERN(int) git_cred_ssh_custom_new(
- git_cred **out,
- const char *username,
- const char *publickey,
- size_t publickey_len,
- git_cred_sign_cb sign_callback,
- void *payload);
-
-/**
- * Create a "default" credential usable for Negotiate mechanisms like NTLM
- * or Kerberos authentication.
- *
- * @return 0 for success or an error code for failure
- */
-GIT_EXTERN(int) git_cred_default_new(git_cred **out);
-
-/**
- * Create a credential to specify a username.
- *
- * This is used with ssh authentication to query for the username if
- * none is specified in the url.
- */
-GIT_EXTERN(int) git_cred_username_new(git_cred **cred, const char *username);
-
-/**
- * Create a new ssh key credential object reading the keys from memory.
- *
- * @param out The newly created credential object.
- * @param username username to use to authenticate.
- * @param publickey The public key of the credential.
- * @param privatekey The private key of the credential.
- * @param passphrase The passphrase of the credential.
- * @return 0 for success or an error code for failure
- */
-GIT_EXTERN(int) git_cred_ssh_key_memory_new(
- git_cred **out,
- const char *username,
- const char *publickey,
- const char *privatekey,
- const char *passphrase);
-
-
-/**
- * Free a credential.
- *
- * This is only necessary if you own the object; that is, if you are a
- * transport.
- *
- * @param cred the object to free
- */
-GIT_EXTERN(void) git_cred_free(git_cred *cred);
-
-/**
- * Signature of a function which acquires a credential object.
- *
- * @param cred The newly created credential object.
- * @param url The resource for which we are demanding a credential.
- * @param username_from_url The username that was embedded in a "user\@host"
- * remote url, or NULL if not included.
- * @param allowed_types A bitmask stating which cred types are OK to return.
- * @param payload The payload provided when specifying this callback.
- * @return 0 for success, < 0 to indicate an error, > 0 to indicate
- * no credential was acquired
- */
-typedef int GIT_CALLBACK(git_cred_acquire_cb)(
- git_cred **cred,
- const char *url,
- const char *username_from_url,
- unsigned int allowed_types,
- void *payload);
-
/** @} */
GIT_END_DECL
+
#endif