auth.h 1.58 KB
Newer Older
1 2 3 4 5 6 7 8 9 10
/*
 * 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_http_auth_h__
#define INCLUDE_http_auth_h__

11 12
#include "common.h"

13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
#include "git2.h"
#include "netops.h"

typedef enum {
	GIT_AUTHTYPE_BASIC = 1,
	GIT_AUTHTYPE_NEGOTIATE = 2,
} git_http_authtype_t;

typedef struct git_http_auth_context git_http_auth_context;

struct git_http_auth_context {
	/** Type of scheme */
	git_http_authtype_t type;

	/** Supported credentials */
	git_credtype_t credtypes;

	/** 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_buf *out, git_http_auth_context *ctx, git_cred *cred);

	/** Frees the authentication context */
	void (*free)(git_http_auth_context *ctx);
};

typedef struct {
	/** Type of scheme */
	git_http_authtype_t type;

	/** Name of the scheme (as used in the Authorization header) */
	const char *name;

	/** Credential types this scheme supports */
	git_credtype_t credtypes;

	/** Function to initialize an authentication context */
	int (*init_context)(
		git_http_auth_context **out,
		const gitno_connection_data *connection_data);
} git_http_auth_scheme;

int git_http_auth_dummy(
	git_http_auth_context **out,
	const gitno_connection_data *connection_data);

int git_http_auth_basic(
	git_http_auth_context **out,
	const gitno_connection_data *connection_data);

#endif