#ifndef __libauthclient_authclient_h #define __libauthclient_authclient_h 1 #include <curl/curl.h> struct auth_client; typedef struct auth_client* auth_client_t; #define AC_OK 0 #define AC_ERR_AUTHENTICATION_FAILURE -1 #define AC_ERR_OTP_REQUIRED -2 #define AC_ERR_BAD_RESPONSE -3 #define AC_ERR_FILE_NOT_FOUND -4 #define AC_ERR_NO_SERVERS -5 #define AC_ERR_CURL_BASE -100 #define auth_client_err_to_curl(e) (-(e)+(AC_ERR_CURL_BASE)) #define auth_client_err_from_curl(e) ((AC_ERR_CURL_BASE)-(e)) /* * Create a new auth client instance. * * @param service Service name * @param servers A comma-separated list of host:port auth server * addresses */ auth_client_t auth_client_new(const char *service, const char *servers); /* * Free all resources associated with an auth client instance. */ void auth_client_free(auth_client_t ac); /* * Return a human readable error string. * * @param err Error code returned by one of the auth_client_* methods */ const char *auth_client_strerror(int err); /* * Set request verbosity. * * If verbose is set to 1, libcurl will dump the outbound requests to * standard error. * * @param ac Auth client * @param verbose Verbosity: 1 to enable, 0 to disable */ void auth_client_set_verbose(auth_client_t ac, int verbose); /* * Set up SSL credentials, and enable HTTPS. * * @param ac Auth client * @param ca_file Path to the CA certificate (PEM format) * @param crt_file Path to the client certificate (PEM format) * @param key_file Path to the client certificate key */ int auth_client_set_certificate(auth_client_t ac, const char *ca_file, const char *crt_file, const char *key_file); /* * Authenticate a user. * * @param ac Auth client * @param username Username * @param password Password * @param otp_token OTP token, if present (as a string) * @param source_ip Source IP of the user, where available * @param shard Shard identifier (as a string) */ int auth_client_authenticate(auth_client_t ac, const char *username, const char *password, const char *otp_token, const char *source_ip, const char *shard); #endif