From 5c56ef7630cbfd5bce29dbb572ff933c51b26d32 Mon Sep 17 00:00:00 2001 From: sathwik Date: Tue, 1 Jul 2025 16:27:30 +0530 Subject: [PATCH] implementing the secure storage using ndk --- app/src/main/cpp/CMakeLists.txt | 24 ++++++++++++++ app/src/main/cpp/server.cpp | 56 +++++++++++++++++++++++++++++++++ 2 files changed, 80 insertions(+) create mode 100644 app/src/main/cpp/CMakeLists.txt create mode 100644 app/src/main/cpp/server.cpp diff --git a/app/src/main/cpp/CMakeLists.txt b/app/src/main/cpp/CMakeLists.txt new file mode 100644 index 0000000..914c5f7 --- /dev/null +++ b/app/src/main/cpp/CMakeLists.txt @@ -0,0 +1,24 @@ + +cmake_minimum_required(VERSION 3.18.1) + +project("native-server") + +# Create the shared library from server.cpp +add_library( + native-server + SHARED + server.cpp +) + +# Find Android logging library +find_library( + log-lib + log +) + +# Link logging library to our native lib +target_link_libraries( + native-server + ${log-lib} +) + diff --git a/app/src/main/cpp/server.cpp b/app/src/main/cpp/server.cpp new file mode 100644 index 0000000..95c0746 --- /dev/null +++ b/app/src/main/cpp/server.cpp @@ -0,0 +1,56 @@ +#include +#include +#include + + + + +std::vector>>> firebaseDataOrdered = { + {0, {"dev", {{"apiKey", "AIzaSyAVdNGCev_AFX0qmuZJF6kxzRzXUTeAW5I"}, {"appId", "1:650071678820:android:a53292637abb7c0d6c6471"}, {"projectId", "hpos-af3cc"}, {"storageBucket", "hpos-af3cc.appspot.com"}}}}, + {1, {"qc-qa", {{"apiKey", "AIzaSyC4d4GhWHr_NMJAeBvnztQ_yQ3Qe9MAnLs"}, {"appId", "1:1004619739289:android:3dbcefb10ea99654e5c808"}, {"projectId", "hpos-qa"}, {"storageBucket", "hpos-qa.appspot.com"}}}}, + {2, {"prod", {{"apiKey", "AIzaSyA_O0oZGzy3Kiw9fiLQ3OFPME-xQJP88vs"}, {"appId", "1:1012719870714:android:d8d7c962d96f4097de5f43"}, {"projectId", "hpos-prod"}, {"storageBucket", "hpos-prod.appspot.com"}}}}, + {3, {"pre prod", {{"apiKey", "AIzaSyDYySi27LioZGNisP1NfnNU5inJX_0FT38"}, {"appId", "1:121176529204:android:e6841fdac57bdc95bbed61"}, {"projectId", "hpos-preprod"}, {"storageBucket", "hpos-preprod.appspot.com"}}}}, + {4, {"SMI R&D", {{"apiKey", "AIzaSyAVxpilbB804iRCCpMBDjjmdZhQguctGHM"}, {"appId", "1:327771387914:android:a3b4ed2e42ea6e38dc87f3"}, {"projectId", "hposrandd"}, {"storageBucket", "hposrandd.firebasestorage.app"}}}}, + {5, {"molbio", {{"apiKey", "molbio"}, {"appId", "molbio"}, {"projectId", "molbio"}, {"storageBucket", "molbio"}}}} +}; + + +extern "C" +JNIEXPORT jobject JNICALL +Java_com_example_hpostesting_firebase_FirebaseManager_getFirebaseDataMap(JNIEnv *env,jobject thiz) { + jclass mapClass = env->FindClass("java/util/LinkedHashMap"); // ✅ preserves insertion order + jmethodID init = env->GetMethodID(mapClass, "", "()V"); + jmethodID put = env->GetMethodID(mapClass, "put", "(Ljava/lang/Object;Ljava/lang/Object;)Ljava/lang/Object;"); + jobject outerMap = env->NewObject(mapClass, init); + + for (const auto &entry : firebaseDataOrdered) { + int order = entry.first; + const std::string &outerKeyStr = entry.second.first; + const auto &innerMapData = entry.second.second; + + jobject innerMap = env->NewObject(mapClass, init); + // "int" field for order + + jstring intKey = env->NewStringUTF("int"); + jstring intValue = env->NewStringUTF(std::to_string(order).c_str()); + env->CallObjectMethod(innerMap, put, intKey, intValue); + env->DeleteLocalRef(intKey); + env->DeleteLocalRef(intValue); + + // actual firebase config keys + for (const auto &innerPair : innerMapData) { + jstring key = env->NewStringUTF(innerPair.first.c_str()); + jstring value = env->NewStringUTF(innerPair.second.c_str()); + env->CallObjectMethod(innerMap, put, key, value); + env->DeleteLocalRef(key); + env->DeleteLocalRef(value); + } + + jstring outerKey = env->NewStringUTF(outerKeyStr.c_str()); + env->CallObjectMethod(outerMap, put, outerKey, innerMap); + env->DeleteLocalRef(outerKey); + env->DeleteLocalRef(innerMap); + } + + return outerMap; +}