credential_helpers.c 1.85 KB
Newer Older
1 2 3 4 5 6 7 8
/*
 * 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.
 */

#include "common.h"
9

10
#include "git2/credential_helpers.h"
11

12 13
int git_credential_userpass(
		git_credential **cred,
14
		const char *url,
15
		const char *user_from_url,
16 17 18
		unsigned int allowed_types,
		void *payload)
{
19
	git_credential_userpass_payload *userpass = (git_credential_userpass_payload*)payload;
20
	const char *effective_username = NULL;
21 22 23

	GIT_UNUSED(url);

24 25 26
	if (!userpass || !userpass->password) return -1;

	/* Username resolution: a username can be passed with the URL, the
Ben Straub committed
27 28 29
	 * credentials payload, or both. Here's what we do.  Note that if we get
	 * this far, we know that any password the url may contain has already
	 * failed at least once, so we ignore it.
30 31 32 33 34 35 36 37
	 *
	 * |  Payload    |   URL    |   Used    |
	 * +-------------+----------+-----------+
	 * |    yes      |   no     |  payload  |
	 * |    yes      |   yes    |  payload  |
	 * |    no       |   yes    |  url      |
	 * |    no       |   no     |  FAIL     |
	 */
Ben Straub committed
38 39 40
	if (userpass->username)
		effective_username = userpass->username;
	else if (user_from_url)
41
		effective_username = user_from_url;
Ben Straub committed
42 43
	else
		return -1;
44

45 46
	if (GIT_CREDENTIAL_USERNAME & allowed_types)
		return git_credential_username_new(cred, effective_username);
47

48 49
	if ((GIT_CREDENTIAL_USERPASS_PLAINTEXT & allowed_types) == 0 ||
			git_credential_userpass_plaintext_new(cred, effective_username, userpass->password) < 0)
50 51 52 53
		return -1;

	return 0;
}
54 55 56

/* Deprecated credential functions */

57
#ifndef GIT_DEPRECATE_HARD
58 59 60 61 62 63 64 65 66 67
int git_cred_userpass(
	git_credential **out,
	const char *url,
	const char *user_from_url,
	unsigned int allowed_types,
	void *payload)
{
	return git_credential_userpass(out, url, user_from_url,
		allowed_types, payload);
}
68
#endif