summaryrefslogtreecommitdiff
path: root/src/auth.c
diff options
context:
space:
mode:
authornirav <nirav@teisuu.com>2019-03-10 13:30:19 +0530
committerDandelion <nirav@teisuu.com>2019-03-10 13:30:19 +0530
commit7e8ea36eb8106b4847af13a27a3e8f3177d25809 (patch)
tree084b59cf020d82985cdcb09bad18721cd5ecdf7e /src/auth.c
parentbd7b0be8978cfd30ac72cf36021153b2a7d68051 (diff)
downloadap_client-7e8ea36eb8106b4847af13a27a3e8f3177d25809.tar.gz
ap_client-7e8ea36eb8106b4847af13a27a3e8f3177d25809.zip
Refactor main.c and auth.c
Diffstat (limited to 'src/auth.c')
-rw-r--r--src/auth.c75
1 files changed, 43 insertions, 32 deletions
diff --git a/src/auth.c b/src/auth.c
index a2e8519..648c2c8 100644
--- a/src/auth.c
+++ b/src/auth.c
@@ -9,14 +9,14 @@
#include "http.h"
#define CLIENT_NAME "ap_client"
+#define PROTOCOL_PREFIX "https://"
-char *instance_domain = NULL;
-char *client_id = NULL;
-char *client_secret = NULL;
-char *access_token = NULL;
-char *scope = NULL;
+char *instance_domain;
+char *client_id;
+char *client_secret;
+char *access_token;
+char *scope;
-static char *protocol = "https://";
static char *app_register_url = "/api/v1/apps";
static char *login_url = "/oauth/token";
@@ -29,9 +29,9 @@ struct register_call_arg {
static void *register_call(void *req_arg)
{
- struct register_call_arg *arg = NULL;
- char *resp = NULL;
- json_t *root = NULL;
+ struct register_call_arg *arg;
+ char *resp;
+ json_t *root;
arg = (struct register_call_arg *)req_arg;
if (!arg || !(arg->url)) {
@@ -105,16 +105,27 @@ error:
int register_app(const char *instance, void (*callback)(bool success))
{
+ size_t size;
+ char *instance_prefix;
+ char *url, *req_data;
+ struct register_call_arg *arg;
+ json_t *root;
+ json_error_t error;
+ pthread_t t;
+
if (!instance || strlen(instance) < 1 || !callback) {
fprintf(stderr, "register_app(): invalid argument\n");
return -1;
}
- json_t *root;
- json_error_t error;
- pthread_t t;
- char *url, *req_data;
- struct register_call_arg *arg;
+ size = sizeof(PROTOCOL_PREFIX) + sizeof(instance) + 1;
+ instance_prefix = malloc(size);
+ if (!instance_prefix) {
+ err(1, "register_app(): malloc failed");
+ return -1;
+ }
+ strlcpy(instance_prefix, PROTOCOL_PREFIX, size);
+ strlcat(instance_prefix, instance, size);
root = json_pack_ex(&error, 1, "{s:s, s:s, s:s}", "client_name",
CLIENT_NAME, "redirect_uris", "urn:ietf:wg:oauth:2.0:oob", "scopes",
@@ -133,15 +144,15 @@ int register_app(const char *instance, void (*callback)(bool success))
return -1;
}
- size_t s =
- strlen(protocol) + strlen(instance) + strlen(app_register_url) + 1;
- url = malloc(s);
+ size = strlen(instance_prefix) + strlen(app_register_url) + 1;
+ url = malloc(size);
if (!url) {
err(1, "register_app(): malloc failed");
return -1;
}
- sprintf(url, "%s%s%s", protocol, instance, app_register_url);
+ strlcpy(url, instance_prefix, size);
+ strlcat(url, app_register_url, size);
arg = calloc(1, sizeof(struct register_call_arg));
if (!arg) {
@@ -149,7 +160,7 @@ int register_app(const char *instance, void (*callback)(bool success))
return -1;
}
arg->url = url;
- arg->domain = strdup(instance);
+ arg->domain = instance_prefix;
arg->post_data = req_data;
arg->callback = callback;
@@ -238,6 +249,13 @@ error:
int login(
const char *email, const char *password, void (*callback)(bool success))
{
+ json_t *root;
+ json_error_t error;
+ pthread_t t;
+ size_t size;
+ char *url, *req_data;
+ struct login_call_arg *arg;
+
if (!email || strlen(email) < 1 || !password || strlen(password) < 1) {
fprintf(stderr, "login(): invalid argument\n");
return -1;
@@ -253,14 +271,8 @@ int login(
return -1;
}
- json_t *root;
- json_error_t error;
- pthread_t t;
- char *url, *req_data;
- struct login_call_arg *arg;
-
- root = json_pack_ex(&error, 1, "{s:s, s:s, s:s, s:s, s:s}", "client_id", client_id,
- "client_secret", client_secret, "grant_type", "password",
+ root = json_pack_ex(&error, 1, "{s:s, s:s, s:s, s:s, s:s}", "client_id",
+ client_id, "client_secret", client_secret, "grant_type", "password",
"username", email, "password", password);
if (!root) {
@@ -276,15 +288,14 @@ int login(
return -1;
}
- size_t s = strlen(protocol) + strlen(instance_domain) +
- strlen(login_url) + 1;
- url = malloc(s);
+ size = strlen(instance_domain) + strlen(login_url) + 1;
+ url = malloc(size);
if (!url) {
err(1, "login(): malloc failed");
return -1;
}
-
- sprintf(url, "%s%s%s", protocol, instance_domain, login_url);
+ strlcpy(url, instance_domain, size);
+ strlcat(url, login_url, size);
arg = calloc(1, sizeof(struct login_call_arg));
if (!arg) {