quickjs-tart

quickjs-based runtime for wallet-core logic
Log | Files | Refs | README | LICENSE

oauth2.c (3441B)


      1 /***************************************************************************
      2  *                                  _   _ ____  _
      3  *  Project                     ___| | | |  _ \| |
      4  *                             / __| | | | |_) | |
      5  *                            | (__| |_| |  _ <| |___
      6  *                             \___|\___/|_| \_\_____|
      7  *
      8  * Copyright (C) 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.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  * SPDX-License-Identifier: curl
     22  *
     23  * RFC6749 OAuth 2.0 Authorization Framework
     24  *
     25  ***************************************************************************/
     26 
     27 #include "../curl_setup.h"
     28 
     29 #if !defined(CURL_DISABLE_IMAP) || !defined(CURL_DISABLE_SMTP) || \
     30   !defined(CURL_DISABLE_POP3) || \
     31   (!defined(CURL_DISABLE_LDAP) && defined(USE_OPENLDAP))
     32 
     33 #include <curl/curl.h>
     34 #include "../urldata.h"
     35 
     36 #include "vauth.h"
     37 #include "../curlx/warnless.h"
     38 #include "../curl_printf.h"
     39 
     40 /* The last #include files should be: */
     41 #include "../curl_memory.h"
     42 #include "../memdebug.h"
     43 
     44 /*
     45  * Curl_auth_create_oauth_bearer_message()
     46  *
     47  * This is used to generate an OAuth 2.0 message ready for sending to the
     48  * recipient.
     49  *
     50  * Parameters:
     51  *
     52  * user[in]         - The username.
     53  * host[in]         - The hostname.
     54  * port[in]         - The port(when not Port 80).
     55  * bearer[in]       - The bearer token.
     56  * out[out]         - The result storage.
     57  *
     58  * Returns CURLE_OK on success.
     59  */
     60 CURLcode Curl_auth_create_oauth_bearer_message(const char *user,
     61                                                const char *host,
     62                                                const long port,
     63                                                const char *bearer,
     64                                                struct bufref *out)
     65 {
     66   char *oauth;
     67 
     68   /* Generate the message */
     69   if(port == 0 || port == 80)
     70     oauth = aprintf("n,a=%s,\1host=%s\1auth=Bearer %s\1\1", user, host,
     71                     bearer);
     72   else
     73     oauth = aprintf("n,a=%s,\1host=%s\1port=%ld\1auth=Bearer %s\1\1", user,
     74                     host, port, bearer);
     75   if(!oauth)
     76     return CURLE_OUT_OF_MEMORY;
     77 
     78   Curl_bufref_set(out, oauth, strlen(oauth), curl_free);
     79   return CURLE_OK;
     80 }
     81 
     82 /*
     83  * Curl_auth_create_xoauth_bearer_message()
     84  *
     85  * This is used to generate a XOAuth 2.0 message ready for * sending to the
     86  * recipient.
     87  *
     88  * Parameters:
     89  *
     90  * user[in]         - The username.
     91  * bearer[in]       - The bearer token.
     92  * out[out]         - The result storage.
     93  *
     94  * Returns CURLE_OK on success.
     95  */
     96 CURLcode Curl_auth_create_xoauth_bearer_message(const char *user,
     97                                                 const char *bearer,
     98                                                 struct bufref *out)
     99 {
    100   /* Generate the message */
    101   char *xoauth = aprintf("user=%s\1auth=Bearer %s\1\1", user, bearer);
    102   if(!xoauth)
    103     return CURLE_OUT_OF_MEMORY;
    104 
    105   Curl_bufref_set(out, xoauth, strlen(xoauth), curl_free);
    106   return CURLE_OK;
    107 }
    108 #endif /* disabled, no users */