source: lib/oauth.h @ dc96e6e

Last change on this file since dc96e6e was 5ebff60, checked in by dequis <dx@…>, at 2015-02-20T22:50:54Z

Reindent everything to K&R style with tabs

Used uncrustify, with the configuration file in ./doc/uncrustify.cfg

Commit author set to "Indent <please@…>" so that it's easier to
skip while doing git blame.

  • Property mode set to 100644
File size: 4.1 KB
Line 
1/***************************************************************************\
2*                                                                           *
3*  BitlBee - An IRC to IM gateway                                           *
4*  Simple OAuth client (consumer) implementation.                           *
5*                                                                           *
6*  Copyright 2010 Wilmer van der Gaast <wilmer@gaast.net>                   *
7*                                                                           *
8*  This program is free software; you can redistribute it and/or modify     *
9*  it under the terms of the GNU General Public License as published by     *
10*  the Free Software Foundation; either version 2 of the License, or        *
11*  (at your option) any later version.                                      *
12*                                                                           *
13*  This program is distributed in the hope that it will be useful,          *
14*  but WITHOUT ANY WARRANTY; without even the implied warranty of           *
15*  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the            *
16*  GNU General Public License for more details.                             *
17*                                                                           *
18*  You should have received a copy of the GNU General Public License along  *
19*  with this program; if not, write to the Free Software Foundation, Inc.,  *
20*  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.              *
21*                                                                           *
22\***************************************************************************/
23
24/* http://oauth.net/core/1.0a/ */
25
26struct oauth_info;
27
28/* Callback function called twice during the access token request process.
29   Return FALSE if something broke and the process must be aborted. */
30typedef gboolean (*oauth_cb)(struct oauth_info *);
31
32typedef enum {
33        OAUTH_INIT,
34        OAUTH_REQUEST_TOKEN,
35        OAUTH_ACCESS_TOKEN,
36} oauth_stage_t;
37
38struct oauth_info {
39        oauth_stage_t stage;
40        const struct oauth_service *sp;
41
42        oauth_cb func;
43        void *data;
44
45        struct http_request *http;
46
47        char *auth_url;
48        char *request_token;
49
50        char *token;
51        char *token_secret;
52        GSList *params;
53};
54
55struct oauth_service {
56        char *url_request_token;
57        char *url_access_token;
58        char *url_authorize;
59
60        char *consumer_key;
61        char *consumer_secret;
62};
63
64/* http://oauth.net/core/1.0a/#auth_step1 (section 6.1)
65   Request an initial anonymous token which can be used to construct an
66   authorization URL for the user. This is passed to the callback function
67   in a struct oauth_info. */
68struct oauth_info *oauth_request_token(const struct oauth_service *sp, oauth_cb func, void *data);
69
70/* http://oauth.net/core/1.0a/#auth_step3 (section 6.3)
71   The user gets a PIN or so which we now exchange for the final access
72   token. This is passed to the callback function in the same
73   struct oauth_info. */
74gboolean oauth_access_token(const char *pin, struct oauth_info *st);
75
76/* http://oauth.net/core/1.0a/#anchor12 (section 7)
77   Generate an OAuth Authorization: HTTP header. access_token should be
78   saved/fetched using the functions above. args can be a string with
79   whatever's going to be in the POST body of the request. GET args will
80   automatically be grabbed from url. */
81char *oauth_http_header(struct oauth_info *oi, const char *method, const char *url, char *args);
82
83/* Shouldn't normally be required unless the process is aborted by the user. */
84void oauth_info_free(struct oauth_info *info);
85
86/* Convert to and back from strings, for easier saving. */
87char *oauth_to_string(struct oauth_info *oi);
88struct oauth_info *oauth_from_string(char *in, const struct oauth_service *sp);
89
90/* For reading misc. data. */
91void oauth_params_add(GSList **params, const char *key, const char *value);
92void oauth_params_parse(GSList **params, char *in);
93void oauth_params_free(GSList **params);
94char *oauth_params_string(GSList *params);
95void oauth_params_set(GSList **params, const char *key, const char *value);
96const char *oauth_params_get(GSList **params, const char *key);
Note: See TracBrowser for help on using the repository browser.