Annotation of embedaddon/curl/lib/vauth/oauth2.c, revision 1.1.1.1
1.1 misho 1: /***************************************************************************
2: * _ _ ____ _
3: * Project ___| | | | _ \| |
4: * / __| | | | |_) | |
5: * | (__| |_| | _ <| |___
6: * \___|\___/|_| \_\_____|
7: *
8: * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
9: *
10: * This software is licensed as described in the file COPYING, which
11: * you should have received as part of this distribution. The terms
12: * are also available at https://curl.haxx.se/docs/copyright.html.
13: *
14: * You may opt to use, copy, modify, merge, publish, distribute and/or sell
15: * copies of the Software, and permit persons to whom the Software is
16: * furnished to do so, under the terms of the COPYING file.
17: *
18: * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
19: * KIND, either express or implied.
20: *
21: * RFC6749 OAuth 2.0 Authorization Framework
22: *
23: ***************************************************************************/
24:
25: #include "curl_setup.h"
26:
27: #if !defined(CURL_DISABLE_IMAP) || !defined(CURL_DISABLE_SMTP) || \
28: !defined(CURL_DISABLE_POP3)
29:
30: #include <curl/curl.h>
31: #include "urldata.h"
32:
33: #include "vauth/vauth.h"
34: #include "curl_base64.h"
35: #include "warnless.h"
36: #include "curl_printf.h"
37:
38: /* The last #include files should be: */
39: #include "curl_memory.h"
40: #include "memdebug.h"
41:
42: /*
43: * Curl_auth_create_oauth_bearer_message()
44: *
45: * This is used to generate an already encoded OAuth 2.0 message ready for
46: * sending to the recipient.
47: *
48: * Parameters:
49: *
50: * data[in] - The session handle.
51: * user[in] - The user name.
52: * host[in] - The host name.
53: * port[in] - The port(when not Port 80).
54: * bearer[in] - The bearer token.
55: * outptr[in / out] - The address where a pointer to newly allocated memory
56: * holding the result will be stored upon completion.
57: * outlen[out] - The length of the output message.
58: *
59: * Returns CURLE_OK on success.
60: */
61: CURLcode Curl_auth_create_oauth_bearer_message(struct Curl_easy *data,
62: const char *user,
63: const char *host,
64: const long port,
65: const char *bearer,
66: char **outptr, size_t *outlen)
67: {
68: CURLcode result = CURLE_OK;
69: char *oauth = NULL;
70:
71: /* Generate the message */
72: if(port == 0 || port == 80)
73: oauth = aprintf("n,a=%s,\1host=%s\1auth=Bearer %s\1\1", user, host,
74: bearer);
75: else
76: oauth = aprintf("n,a=%s,\1host=%s\1port=%ld\1auth=Bearer %s\1\1", user,
77: host, port, bearer);
78: if(!oauth)
79: return CURLE_OUT_OF_MEMORY;
80:
81: /* Base64 encode the reply */
82: result = Curl_base64_encode(data, oauth, strlen(oauth), outptr, outlen);
83:
84: free(oauth);
85:
86: return result;
87: }
88:
89: /*
90: * Curl_auth_create_xoauth_bearer_message()
91: *
92: * This is used to generate an already encoded XOAuth 2.0 message ready for
93: * sending to the recipient.
94: *
95: * Parameters:
96: *
97: * data[in] - The session handle.
98: * user[in] - The user name.
99: * bearer[in] - The bearer token.
100: * outptr[in / out] - The address where a pointer to newly allocated memory
101: * holding the result will be stored upon completion.
102: * outlen[out] - The length of the output message.
103: *
104: * Returns CURLE_OK on success.
105: */
106: CURLcode Curl_auth_create_xoauth_bearer_message(struct Curl_easy *data,
107: const char *user,
108: const char *bearer,
109: char **outptr, size_t *outlen)
110: {
111: CURLcode result = CURLE_OK;
112:
113: /* Generate the message */
114: char *xoauth = aprintf("user=%s\1auth=Bearer %s\1\1", user, bearer);
115: if(!xoauth)
116: return CURLE_OUT_OF_MEMORY;
117:
118: /* Base64 encode the reply */
119: result = Curl_base64_encode(data, xoauth, strlen(xoauth), outptr, outlen);
120:
121: free(xoauth);
122:
123: return result;
124: }
125: #endif /* disabled, no users */
126:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>