diff options
Diffstat (limited to 'src/libgit2/transports/auth.h')
-rw-r--r-- | src/libgit2/transports/auth.h | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/src/libgit2/transports/auth.h b/src/libgit2/transports/auth.h new file mode 100644 index 000000000..824d7198c --- /dev/null +++ b/src/libgit2/transports/auth.h @@ -0,0 +1,70 @@ +/* + * Copyright (C) the libgit2 contributors. All rights reserved. + * + * This file is part of libgit2, distributed under the GNU GPL v2 with + * a Linking Exception. For full terms see the included COPYING file. + */ + +#ifndef INCLUDE_transports_auth_h__ +#define INCLUDE_transports_auth_h__ + +#include "common.h" + +#include "netops.h" + +typedef enum { + GIT_HTTP_AUTH_BASIC = 1, + GIT_HTTP_AUTH_NEGOTIATE = 2, + GIT_HTTP_AUTH_NTLM = 4, +} git_http_auth_t; + +typedef struct git_http_auth_context git_http_auth_context; + +struct git_http_auth_context { + /** Type of scheme */ + git_http_auth_t type; + + /** Supported credentials */ + git_credential_t credtypes; + + /** Connection affinity or request affinity */ + unsigned connection_affinity : 1; + + /** Sets the challenge on the authentication context */ + int (*set_challenge)(git_http_auth_context *ctx, const char *challenge); + + /** Gets the next authentication token from the context */ + int (*next_token)(git_str *out, git_http_auth_context *ctx, git_credential *cred); + + /** Examines if all tokens have been presented. */ + int (*is_complete)(git_http_auth_context *ctx); + + /** Frees the authentication context */ + void (*free)(git_http_auth_context *ctx); +}; + +typedef struct { + /** Type of scheme */ + git_http_auth_t type; + + /** Name of the scheme (as used in the Authorization header) */ + const char *name; + + /** Credential types this scheme supports */ + git_credential_t credtypes; + + /** Function to initialize an authentication context */ + int (*init_context)( + git_http_auth_context **out, + const git_net_url *url); +} git_http_auth_scheme; + +int git_http_auth_dummy( + git_http_auth_context **out, + const git_net_url *url); + +int git_http_auth_basic( + git_http_auth_context **out, + const git_net_url *url); + +#endif |