diff --git a/src/detection/publicip/publicip.h b/src/detection/publicip/publicip.h index 31ab394f4..1313cc46a 100644 --- a/src/detection/publicip/publicip.h +++ b/src/detection/publicip/publicip.h @@ -1,3 +1,8 @@ +#pragma once + +#ifndef FF_INCLUDED_detection_publicip_publicip +#define FF_INCLUDED_detection_publicip_publicip + #include "fastfetch.h" typedef struct FFPublicIpResult @@ -8,3 +13,5 @@ typedef struct FFPublicIpResult void ffPreparePublicIp(FFPublicIpOptions* options); const char* ffDetectPublicIp(FFPublicIpOptions* options, FFPublicIpResult* result); + +#endif diff --git a/src/modules/publicip/publicip.c b/src/modules/publicip/publicip.c index 21ed3850b..fbd7f12dd 100644 --- a/src/modules/publicip/publicip.c +++ b/src/modules/publicip/publicip.c @@ -42,7 +42,7 @@ void ffPrintPublicIp(FFPublicIpOptions* options) void ffInitPublicIpOptions(FFPublicIpOptions* options) { - ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_PUBLICIP_MODULE_NAME, ffParsePublicIpCommandOptions, ffParsePublicIpJsonObject, ffPrintPublicIp, NULL); + ffOptionInitModuleBaseInfo(&options->moduleInfo, FF_PUBLICIP_MODULE_NAME, ffParsePublicIpCommandOptions, ffParsePublicIpJsonObject, ffPrintPublicIp, ffGeneratePublicIpJson); ffOptionInitModuleArg(&options->moduleArgs); ffStrbufInit(&options->url); @@ -106,3 +106,24 @@ void ffParsePublicIpJsonObject(FFPublicIpOptions* options, yyjson_val* module) ffPrintError(FF_PUBLICIP_MODULE_NAME, 0, &options->moduleArgs, "Unknown JSON key %s", key); } } + +void ffGeneratePublicIpJson(FFPublicIpOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module) +{ + FFPublicIpResult result; + ffStrbufInit(&result.ip); + ffStrbufInit(&result.location); + const char* error = ffDetectPublicIp(options, &result); + + if (error) + { + yyjson_mut_obj_add_str(doc, module, "error", error); + return; + } + + yyjson_mut_val* obj = yyjson_mut_obj_add_obj(doc, module, "result"); + yyjson_mut_obj_add_strbuf(doc, obj, "ip", &result.ip); + yyjson_mut_obj_add_strbuf(doc, obj, "location", &result.location); + + ffStrbufDestroy(&result.ip); + ffStrbufDestroy(&result.location); +} diff --git a/src/modules/publicip/publicip.h b/src/modules/publicip/publicip.h index 6a7c739d2..870591eb7 100644 --- a/src/modules/publicip/publicip.h +++ b/src/modules/publicip/publicip.h @@ -11,3 +11,4 @@ void ffInitPublicIpOptions(FFPublicIpOptions* options); bool ffParsePublicIpCommandOptions(FFPublicIpOptions* options, const char* key, const char* value); void ffDestroyPublicIpOptions(FFPublicIpOptions* options); void ffParsePublicIpJsonObject(FFPublicIpOptions* options, yyjson_val* module); +void ffGeneratePublicIpJson(FFPublicIpOptions* options, yyjson_mut_doc* doc, yyjson_mut_val* module);