diff options
author | nirav <nirav@teisuu.com> | 2019-03-28 09:10:52 +0530 |
---|---|---|
committer | nirav <nirav@teisuu.com> | 2019-03-28 09:10:52 +0530 |
commit | 477e1ba2977435ae7bb75c7dbd95cf28247f89bd (patch) | |
tree | ce1f9719a7d11bbd47e9adea26dd610bc087962e /src/auth.c | |
parent | cc727e972f7fdc871ee1f42cf014151b67422bf0 (diff) | |
download | ap_client-master.tar.gz ap_client-master.zip |
Diffstat (limited to 'src/auth.c')
-rw-r--r-- | src/auth.c | 146 |
1 files changed, 0 insertions, 146 deletions
diff --git a/src/auth.c b/src/auth.c deleted file mode 100644 index c903e67..0000000 --- a/src/auth.c +++ /dev/null @@ -1,146 +0,0 @@ -#define _POSIX_C_SOURCE 200809L -#include <err.h> -#include <string.h> -#include <pthread.h> -#include <stdbool.h> -#include <jansson.h> -#include "string-util.h" -#include "auth.h" -#include "http.h" -#include "config.h" -#include "log.h" - -#define LOGIN_URL "https://%s/oauth/token" - -struct login_response { - char *access_token; - char *scope; -}; - -static char *get_login_url(const char *domain) -{ - char *url; - size_t size; - - size = strlen(LOGIN_URL) + strlen(domain) - 1; - url = malloc(size); - if (!url) { - err(1, NULL); - return NULL; - } - - sprintf(url, LOGIN_URL, domain); - return url; -} - -static char *get_login_req(const char *email, const char *password) -{ - char *req; - json_t *json_root; - json_error_t error; - - json_root = json_pack_ex(&error, 1, "{s:s, s:s, s:s, s:s, s:s}", - "client_id", config->client_id, "client_secret", - config->client_secret, "grant_type", "password", "username", email, - "password", password); - if (!json_root) { - return NULL; - } - - req = json_dumps(json_root, 0); - json_decref(json_root); - - return req; -} - -static struct login_response *get_login_resp(char *data) -{ - struct login_response *resp; - json_t *json_root; - json_t *access_token, *scope; - - json_root = json_loads(data, 0, NULL); - if (!json_root) { - return NULL; - } - - if (!json_is_object(json_root)) { - json_decref(json_root); - return NULL; - } - - access_token = json_object_get(json_root, "access_token"); - scope = json_object_get(json_root, "scope"); - if (!json_is_string(access_token) || !json_is_string(scope)) { - json_decref(json_root); - return NULL; - } - - resp = calloc(1, sizeof(struct login_response)); - resp->access_token = strdup(json_string_value(access_token)); - resp->scope = strdup(json_string_value(scope)); - - json_decref(json_root); - return resp; -} - -int login(const char *email, const char *password) -{ - char *url, *req_data, *resp_data; - struct login_response *resp; - - if (!email || !*email || !password || !*password) { - log_msg(LOG_WARNING, "login", "invalid argument"); - return -1; - } - - if (!is_registered()) { - log_msg(LOG_WARNING, "login", "app not registred"); - return -1; - } - - url = get_login_url(config->instance_url); - if (!url) { - err(1, NULL); - return -1; - } - - req_data = get_login_req(email, password); - if (!req_data) { - free(url); - return -1; - } - - resp_data = post_request(url, req_data); - free(url); - free(req_data); - if (!resp_data) { - log_msg(LOG_WARNING, "register_app", "login request failed"); - return -1; - } - - if (!resp_data) { - log_msg(LOG_WARNING, "register_app", "invalid response"); - return -1; - } - - resp = get_login_resp(resp_data); - free(resp_data); - if (!resp) { - log_msg(LOG_WARNING, "register_app", "invalid response"); - return -1; - } - - config_set_access_token(resp->access_token); - /* scope = strdup(json_string_value(scope_j)); */ - - if (config_save()) { - log_msg(LOG_WARNING, "login_call", "failed to save config"); - } - - free(resp->access_token); - free(resp->scope); - free(resp); - - return 0; -} |