Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added support for access revoking #47

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ GOGET=$(GOCMD) get
# Uplink-c
GIT_REPO=https://github.com/storj/uplink-c
UPLINKC_NAME=uplink-c
UPLINKC_VERSION=v1.2.2
UPLINKC_VERSION=v1.6.0
#Library Name
LIBRARY_NAME_LINUX=libuplinkcv1.2.4.so
LIBRARY_NAME_DARWIN=libuplinkcv1.2.4.dylib
Expand Down
10 changes: 10 additions & 0 deletions functions/definitions.h
Original file line number Diff line number Diff line change
Expand Up @@ -199,6 +199,16 @@ typedef struct {
UplinkProjectResult project_Result;
} openProjectPromiseObj;

typedef struct {
int async_action_status;
napi_deferred deferred;
napi_async_work work;
napi_value result;
UplinkProject project_result;
UplinkAccess access;
UplinkError* error_result;
} revokeAccessPromiseObj;

typedef struct {
char *accessString;
int async_action_status;
Expand Down
114 changes: 114 additions & 0 deletions functions/project_operations.cc
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,120 @@
*/
#include "project_operations.h"
#include <string>
/*!
\fn napi_value revoke_accessc(napi_env env, napi_callback_info info)
\brief revoke_accessc function is called from the javascript file
revoke_accessc revokes the API key embedded in the provided access grant

*/
//
napi_value revoke_accessc(napi_env env, napi_callback_info info) {
napi_status status;
napi_value promise;

size_t argc = 2;
napi_value args[2];

revokeAccessPromiseObj *obj = (revokeAccessPromiseObj *)
malloc(sizeof(revokeAccessPromiseObj));

if (obj == NULL) {
free(obj);
napi_throw_error(env, NULL, "Memory allocation error");
return NULL;
}
obj->async_action_status = 1;
status = napi_get_cb_info(env, info, &argc, args, nullptr , nullptr);
assert(status == napi_ok);

status = napi_create_promise(env, &obj->deferred, &promise);
if (status != napi_ok) {
free(obj);
napi_throw_error(env, NULL, "Unable to create promise");
return NULL;
}

if (argc < 2) {
free(obj);
napi_throw_type_error(env, nullptr,
"\nWrong number of arguments!! excepted 2 arguments\n");
return NULL;
}

// Parse project

napi_valuetype checktypeofinput;
status = napi_typeof(env, args[0], &checktypeofinput);
assert(status == napi_ok);

if (checktypeofinput != napi_object) {
free(obj);
napi_throw_type_error(env, nullptr,
"\nWrong datatype !! First argument expected to be object type\n");
return NULL;
}
bool propertyexists = false;
napi_value ObjectkeyNAPI;
string handle = "_handle";
status = napi_create_string_utf8(env,
const_cast<char* > (handle.c_str()), NAPI_AUTO_LENGTH , &ObjectkeyNAPI);
assert(status == napi_ok);

status = napi_has_property(env, args[0], ObjectkeyNAPI, &propertyexists);
assert(status == napi_ok);
if (!propertyexists) {
free(obj);
napi_throw_type_error(env, nullptr, "\nFirst argument is invalid object \n");
return NULL;
}

UplinkProject project_result;
project_result._handle = getHandleValue(env, args[0]);
if (project_result._handle == 0) {
return NULL;
}

// Parse access

status = napi_typeof(env, args[1], &checktypeofinput);
assert(status == napi_ok);

if (checktypeofinput != napi_object) {
free(obj);
napi_throw_type_error(env, nullptr,
"\nWrong datatype !! Second argument excepted to be object type\n");
return NULL;
}
propertyexists = false;
handle = "_handle";
status = napi_create_string_utf8(env,
const_cast<char* > (handle.c_str()), NAPI_AUTO_LENGTH , &ObjectkeyNAPI);
assert(status == napi_ok);

status = napi_has_property(env, args[1], ObjectkeyNAPI, &propertyexists);
assert(status == napi_ok);
if (!propertyexists) {
free(obj);
napi_throw_type_error(env, nullptr, "\nSecond argument is invalid object \n");
return NULL;
}

UplinkAccess access;
access._handle = getHandleValue(env, args[1]);
if (access._handle == 0) {
return NULL;
}

obj->project_result = project_result;
obj->access = access;

napi_value resource_name;
napi_create_string_utf8(env, "RevokeAccess", NAPI_AUTO_LENGTH, &resource_name);
napi_create_async_work(env, NULL, resource_name, revokeAccessPromiseExecute,
revokeAccessPromiseComplete, obj, &obj->work);
napi_queue_async_work(env, obj->work);
return promise;
}
/*!
\fn napi_value close_projectc(napi_env env, napi_callback_info info)
\brief close_projectc function is called from the javascript file
Expand Down
4 changes: 3 additions & 1 deletion functions/project_operations.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ napi_value close_projectc(napi_env env, napi_callback_info info);
//
napi_value config_open_projectc(napi_env env, napi_callback_info info);
//
napi_value open_projectc(napi_env env, napi_callback_info info);
napi_value open_projectc(napi_env env, napi_callback_info info);
//
napi_value revoke_accessc(napi_env env, napi_callback_info info);
29 changes: 29 additions & 0 deletions functions/promises_complete.cc
Original file line number Diff line number Diff line change
Expand Up @@ -595,6 +595,35 @@ void closeProjectPromiseComplete(napi_env env, napi_status status, void* data) {
napi_delete_async_work(env, obj->work);
free(obj);
}
/*!
\fn void revokeAccessPromiseComplete(napi_env env, napi_status status, void* data)
\brief revokeAccessPromiseComplete creates the handle for revoke_access

*/
void revokeAccessPromiseComplete(napi_env env, napi_status status, void* data) {
revokeAccessPromiseObj *obj = (revokeAccessPromiseObj*)data;
UplinkError* error_result = obj->error_result;
if (error_result != NULL) {
UplinkError errorResult = *(error_result);
char* errorMessagePtr = errorResult.message;
char blank[] = "";
if (errorMessagePtr == NULL) {errorMessagePtr = &blank[0];}
status = napi_reject_deferred(env, obj->deferred,
createError(env, errorResult.code, errorMessagePtr));
} else {
//
napi_value undefined;
status = napi_get_undefined(env, &undefined);
assert(status == napi_ok);
//
status = napi_resolve_deferred(env, obj->deferred, undefined);
}
if (status != napi_ok) {
napi_throw_error(env, NULL, "Failed to return promise");
}
napi_delete_async_work(env, obj->work);
free(obj);
}
/*!
\fn void configOpenProjectPromiseComplete(napi_env env, napi_status status, void* data)
\brief configOpenProjectPromiseComplete creates the handle for config_open_project
Expand Down
2 changes: 2 additions & 0 deletions functions/promises_complete.h
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,8 @@ void ListBucketsPromiseComplete(napi_env env, napi_status status, void* data);

void closeProjectPromiseComplete(napi_env env, napi_status status, void* data);

void revokeAccessPromiseComplete(napi_env env, napi_status status, void* data);

void configOpenProjectPromiseComplete(napi_env env, napi_status status, void* data);

void ParseAccessPromiseComplete(napi_env env, napi_status status, void* data);
Expand Down
9 changes: 9 additions & 0 deletions functions/promises_execute.cc
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,15 @@ void closeProjectPromiseExecute(napi_env env, void* data) {
closeProjectPromiseObj *obj = (closeProjectPromiseObj*)data;
obj->error_result = uplink_close_project(&(obj->project_result));
}
/*!
\fn void revokeAccessPromiseExecute(napi_env env, void* data)
\brief revokeAccessPromiseExecute used to implement the uplink-c library function
revokeAccessPromiseExecute revoke access using promise
*/
void revokeAccessPromiseExecute(napi_env env, void* data) {
revokeAccessPromiseObj *obj = (revokeAccessPromiseObj*)data;
obj->error_result = uplink_revoke_access(&(obj->project_result), &(obj->access));
}
/*!
\fn void configOpenProjectPromiseExecute(napi_env env, void* data)
\brief configOpenProjectPromiseExecute used to implement the uplink-c library function
Expand Down
2 changes: 2 additions & 0 deletions functions/promises_execute.h
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@ void ListBucketsPromiseExecute(napi_env env, void* data);

void closeProjectPromiseExecute(napi_env env, void* data);

void revokeAccessPromiseExecute(napi_env env, void* data);

void configOpenProjectPromiseExecute(napi_env env, void* data);

void ParseAccess(napi_env env, void* data);
Expand Down
10 changes: 10 additions & 0 deletions functions_win/definitions_win.h
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,16 @@ typedef struct {
UplinkProjectResult project_Result;
} openProjectPromiseObj;

typedef struct {
int async_action_status;
napi_deferred deferred;
napi_async_work work;
napi_value result;
UplinkProject project_result;
UplinkAccess access;
UplinkError* error_result;
} revokeAccessPromiseObj;

typedef struct {
char *accessString;
int async_action_status;
Expand Down
115 changes: 115 additions & 0 deletions functions_win/project_operations_win.cc
Original file line number Diff line number Diff line change
Expand Up @@ -344,3 +344,118 @@ napi_value open_projectc(napi_env env, napi_callback_info info) {
napi_queue_async_work(env, obj->work);
return promise;
}

/*!
\fn napi_value revoke_accessc(napi_env env, napi_callback_info info)
\brief revoke_accessc function is called from the javascript file
revoke_accessc revokes the API key embedded in the provided access grant

*/
//
napi_value revoke_accessc(napi_env env, napi_callback_info info) {
napi_status status;
napi_value promise;

size_t argc = 2;
napi_value args[2];

revokeAccessPromiseObj *obj = (revokeAccessPromiseObj *)
malloc(sizeof(revokeAccessPromiseObj));

if (obj == NULL) {
free(obj);
napi_throw_error(env, NULL, "Memory allocation error");
return NULL;
}
obj->async_action_status = 1;
status = napi_get_cb_info(env, info, &argc, args, nullptr , nullptr);
assert(status == napi_ok);

status = napi_create_promise(env, &obj->deferred, &promise);
if (status != napi_ok) {
free(obj);
napi_throw_error(env, NULL, "Unable to create promise");
return NULL;
}

if (argc < 2) {
free(obj);
napi_throw_type_error(env, nullptr,
"\nWrong number of arguments!! excepted 2 arguments\n");
return NULL;
}

// Parse project

napi_valuetype checktypeofinput;
status = napi_typeof(env, args[0], &checktypeofinput);
assert(status == napi_ok);

if (checktypeofinput != napi_object) {
free(obj);
napi_throw_type_error(env, nullptr,
"\nWrong datatype !! First argument expected to be object type\n");
return NULL;
}
bool propertyexists = false;
napi_value ObjectkeyNAPI;
string handle = "_handle";
status = napi_create_string_utf8(env,
const_cast<char* > (handle.c_str()), NAPI_AUTO_LENGTH , &ObjectkeyNAPI);
assert(status == napi_ok);

status = napi_has_property(env, args[0], ObjectkeyNAPI, &propertyexists);
assert(status == napi_ok);
if (!propertyexists) {
free(obj);
napi_throw_type_error(env, nullptr, "\nFirst argument is invalid object \n");
return NULL;
}

UplinkProject project_result;
project_result._handle = getHandleValue(env, args[0]);
if (project_result._handle == 0) {
return NULL;
}

// Parse access

status = napi_typeof(env, args[1], &checktypeofinput);
assert(status == napi_ok);

if (checktypeofinput != napi_object) {
free(obj);
napi_throw_type_error(env, nullptr,
"\nWrong datatype !! Second argument excepted to be object type\n");
return NULL;
}
propertyexists = false;
handle = "_handle";
status = napi_create_string_utf8(env,
const_cast<char* > (handle.c_str()), NAPI_AUTO_LENGTH , &ObjectkeyNAPI);
assert(status == napi_ok);

status = napi_has_property(env, args[1], ObjectkeyNAPI, &propertyexists);
assert(status == napi_ok);
if (!propertyexists) {
free(obj);
napi_throw_type_error(env, nullptr, "\nSecond argument is invalid object \n");
return NULL;
}

UplinkAccess access;
access._handle = getHandleValue(env, args[1]);
if (access._handle == 0) {
return NULL;
}

obj->project_result = project_result;
obj->access = access;

napi_value resource_name;
napi_create_string_utf8(env, "RevokeAccess", NAPI_AUTO_LENGTH, &resource_name);
napi_create_async_work(env, NULL, resource_name, revokeAccessPromiseExecute,
revokeAccessPromiseComplete, obj, &obj->work);
napi_queue_async_work(env, obj->work);
return promise;
}
4 changes: 3 additions & 1 deletion functions_win/project_operations_win.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,6 @@ napi_value close_projectc(napi_env env, napi_callback_info info);
//
napi_value config_open_projectc(napi_env env, napi_callback_info info);
//
napi_value open_projectc(napi_env env, napi_callback_info info);
napi_value open_projectc(napi_env env, napi_callback_info info);
//
napi_value revoke_accessc(napi_env env, napi_callback_info info);
Loading