X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/aaf70a50e13231ba06df17d79147ac0d7fed6d91..303e8387acecca26329e939f228f78ca805b7a15:/h/oauth.h?ds=sidebyside diff --git a/h/oauth.h b/h/oauth.h index a49cb4ac..274ca9de 100644 --- a/h/oauth.h +++ b/h/oauth.h @@ -63,6 +63,10 @@ typedef enum { /* Attempting to refresh an access token without a refresh token. */ MH_OAUTH_NO_REFRESH, + + /* requested user not in cred file */ + MH_OAUTH_CRED_USER_NOT_FOUND, + /* error loading serialized credentials */ MH_OAUTH_CRED_FILE } mh_oauth_err_code; @@ -71,6 +75,32 @@ typedef struct mh_oauth_ctx mh_oauth_ctx; typedef struct mh_oauth_cred mh_oauth_cred; +typedef struct mh_oauth_service_info mh_oauth_service_info; + +struct mh_oauth_service_info { + /* Name of service, so we can search static internal services array + * and for determining default credential file name. */ + char *name; + + /* Human-readable name of the service; in mh_oauth_ctx::svc this is not + * another buffer to free, but a pointer to either static SERVICE data + * (below) or to the name field. */ + char *display_name; + + /* [1] 2.2 Client Identifier, 2.3.1 Client Password */ + char *client_id; + /* [1] 2.3.1 Client Password */ + char *client_secret; + /* [1] 3.1 Authorization Endpoint */ + char *auth_endpoint; + /* [1] 3.1.2 Redirection Endpoint */ + char *redirect_uri; + /* [1] 3.2 Token Endpoint */ + char *token_endpoint; + /* [1] 3.3 Access Token Scope */ + char *scope; +}; + /* * Do the complete dance for XOAUTH2 as used by POP3 and SMTP. * @@ -188,7 +218,7 @@ mh_oauth_cred_free(mh_oauth_cred *cred); * Never returns NULL. */ const char * -mh_oauth_cred_fn(mh_oauth_ctx *ctx); +mh_oauth_cred_fn(const char *svc_name); /* * Serialize OAuth tokens to file. @@ -196,7 +226,7 @@ mh_oauth_cred_fn(mh_oauth_ctx *ctx); * On error, return FALSE. */ boolean -mh_oauth_cred_save(FILE *fp, mh_oauth_cred *cred); +mh_oauth_cred_save(FILE *fp, mh_oauth_cred *cred, const char *user); /* * Load OAuth tokens from file. @@ -206,7 +236,7 @@ mh_oauth_cred_save(FILE *fp, mh_oauth_cred *cred); * On error, return NULL. */ mh_oauth_cred * -mh_oauth_cred_load(FILE *fp, mh_oauth_ctx *ctx); +mh_oauth_cred_load(FILE *fp, mh_oauth_ctx *ctx, const char *user); /* * Return null-terminated SASL client response for XOAUTH2 from access token. @@ -219,3 +249,14 @@ mh_oauth_cred_load(FILE *fp, mh_oauth_ctx *ctx); const char * mh_oauth_sasl_client_response(size_t *res_len, const char *user, const mh_oauth_cred *cred); + +/* + * Retrieve the various entries for the OAuth mechanism + */ + +boolean +mh_oauth_get_service_info(const char *svc_name, mh_oauth_service_info *svcinfo, + char *errbuf, size_t errbuflen); + +char *mh_oauth_get_svc_name(mh_oauth_ctx *ctx); +void mh_oauth_set_cred_fn(mh_oauth_ctx *ctx, char *filename);