platform/lib/src/native/angel_security.c
2019-08-16 10:57:43 -04:00

61 lines
1.8 KiB
C

#include <dart_api.h>
#include <libinjection.h>
#include <libinjection_sqli.h>
#include <stdbool.h>
#include <string.h>
Dart_NativeFunction ResolveName(Dart_Handle name, int argc,
bool *auto_setup_scope);
DART_EXPORT Dart_Handle angel_security_native_Init(Dart_Handle parent_library) {
if (Dart_IsError(parent_library))
return parent_library;
Dart_Handle result_code =
Dart_SetNativeResolver(parent_library, ResolveName, NULL);
if (Dart_IsError(result_code))
return result_code;
return Dart_Null();
}
Dart_Handle HandleError(Dart_Handle handle) {
if (Dart_IsError(handle))
Dart_PropagateError(handle);
return handle;
}
void Angel_Security_IsSqli(Dart_NativeArguments arguments) {
const char *text;
Dart_Handle textHandle = Dart_GetNativeArgument(arguments, 0);
HandleError(Dart_StringToCString(textHandle, &text));
struct libinjection_sqli_state state;
libinjection_sqli_init(&state, text, strlen(text), FLAG_NONE);
int is_sqli = libinjection_is_sqli(&state);
// Return list
Dart_Handle outHandle = Dart_NewList(2);
if (is_sqli != 0) {
HandleError(Dart_ListSetAt(outHandle, 0, Dart_NewBoolean(true)));
HandleError(Dart_ListSetAt(outHandle, 1,
Dart_NewStringFromCString(state.fingerprint)));
} else {
HandleError(Dart_ListSetAt(outHandle, 0, Dart_NewBoolean(false)));
HandleError(Dart_ListSetAt(outHandle, 1, Dart_Null()));
}
Dart_SetReturnValue(arguments, outHandle);
}
Dart_NativeFunction ResolveName(Dart_Handle name, int argc,
bool *auto_setup_scope) {
if (!Dart_IsString(name))
return NULL;
Dart_NativeFunction result = NULL;
const char *cname;
HandleError(Dart_StringToCString(name, &cname));
if (strcmp("Angel_Security_IsSqli", cname) == 0)
result = Angel_Security_IsSqli;
return result;
}