diff --git a/.dockerignore b/.dockerignore index a27e848bc..065d4c569 100644 --- a/.dockerignore +++ b/.dockerignore @@ -1,36 +1,36 @@ .dockerignore .DS_Store .git .eslintcache .vscode !.vscode/extensions.json node_modules landing/node_modules landing/dist lib/node_modules native !native/package.json !native/.flowconfig !native/ios/Podfile !native/ios/pod-patch -!native/cpp/CommonCpp/grpc/protos +!native/cpp/CommonCpp/grpc web/node_modules web/dist keyserver/dist keyserver/node_modules keyserver/facts keyserver/secrets keyserver/*.env keyserver/*.env.* services/tunnelbroker/Dockerfile services/identity/target services/identity/Dockerfile services/backup/Dockerfile services/blob/Dockerfile diff --git a/services/tunnelbroker/CMakeLists.txt b/services/tunnelbroker/CMakeLists.txt index cb70bc7cf..ad0426641 100644 --- a/services/tunnelbroker/CMakeLists.txt +++ b/services/tunnelbroker/CMakeLists.txt @@ -1,161 +1,150 @@ PROJECT(tunnelbroker C CXX) cmake_minimum_required(VERSION 3.16) set(CMAKE_RUNTIME_OUTPUT_DIRECTORY bin) if(COMMAND cmake_policy) cmake_policy(SET CMP0003 NEW) endif(COMMAND cmake_policy) set(CMAKE_CXX_STANDARD 17) find_package(PkgConfig REQUIRED) -# FIND LIBS -include(./cmake-components/grpc.cmake) -include(./cmake-components/folly.cmake) +find_package(double-conversion REQUIRED) +find_package(Folly REQUIRED) +find_package(protobuf REQUIRED) +find_package(gRPC REQUIRED) # Find AMQP-CPP installation find_package(amqpcpp CONFIG REQUIRED) # Find Cryptopp installation pkg_check_modules(CRYPTOPP REQUIRED libcryptopp=8.6) # Find Libuv installation pkg_check_modules(LIBUV REQUIRED libuv>=1.43) +if(${CMAKE_CURRENT_SOURCE_DIR} STREQUAL "/transferred") + # Inside the docker build contex + set(_proto_path "grpc") +else() + # Inside repo + set(_proto_path "../../native/cpp/CommonCpp/grpc") +endif() + +# Shared Comm protos +add_subdirectory(${CMAKE_CURRENT_SOURCE_DIR}/${_proto_path} + ${CMAKE_CURRENT_BINARY_DIR}/protos + EXCLUDE_FROM_ALL +) + set(BUILD_TESTING OFF CACHE BOOL "Turn off tests" FORCE) set(WITH_GFLAGS OFF CACHE BOOL "Turn off gflags" FORCE) find_package(AWSSDK REQUIRED COMPONENTS core dynamodb) -find_package(Boost 1.40 COMPONENTS program_options thread system REQUIRED) +find_package(Boost 1.40 + COMPONENTS program_options thread system context filesystem regex + REQUIRED +) find_package(OpenSSL REQUIRED) +find_package(glog) # Corrosion Rust integration find_package(Corrosion REQUIRED) corrosion_import_crate(MANIFEST_PATH "rust-notifications/Cargo.toml") set(RUST_HEADERS_INCLUDE_DIR "rust-notifications/extern") set(RUST_LIBS "rust-notifications") -add_subdirectory(./lib/glog) - -# Generated sources -get_filename_component(proto "protos/tunnelbroker.proto" ABSOLUTE) -get_filename_component(proto_path "${proto}" PATH) - -set(GENERATED_BASE_DIR "${CMAKE_CURRENT_BINARY_DIR}/gen") -set(GENERATED_CODE_DIR "${GENERATED_BASE_DIR}/_generated") -file(MAKE_DIRECTORY ${GENERATED_CODE_DIR}) - -set(_proto_srcs "${GENERATED_CODE_DIR}/tunnelbroker.pb.cc") -set(_proto_hdrs "${GENERATED_CODE_DIR}/tunnelbroker.pb.h") -set(_grpc_srcs "${GENERATED_CODE_DIR}/tunnelbroker.grpc.pb.cc") -set(_grpc_hdrs "${GENERATED_CODE_DIR}/tunnelbroker.grpc.pb.h") -add_custom_command( - OUTPUT "${_proto_srcs}" "${_proto_hdrs}" "${_grpc_srcs}" "${_grpc_hdrs}" - COMMAND ${_PROTOBUF_PROTOC} - ARGS --grpc_out "${GENERATED_CODE_DIR}" - --cpp_out "${GENERATED_CODE_DIR}" - -I "${proto_path}" - --plugin=protoc-gen-grpc="${_GRPC_CPP_PLUGIN_EXECUTABLE}" - "${proto}" - DEPENDS "${proto}" - COMMENT "Generate protobuf files" -) - file(GLOB_RECURSE SOURCE_CODE "./src/*.cpp") -set(GENERATED_CODE ${_proto_srcs} ${_proto_hdrs} ${_grpc_srcs} ${_grpc_hdrs}) -file(GLOB DOUBLE_CONVERSION_SOURCES - "./lib/double-conversion/double-conversion/*.cc" -) - -include_directories( - ./src - ./src/Database - ./src/DeliveryBroker - ./src/Service - ./src/Tools - ./src/Amqp - ${GENERATED_BASE_DIR} - ${FOLLY_INCLUDES} - ./lib/double-conversion - ${Boost_INCLUDE_DIR} - ${CRYPTOPP_INCLUDE_DIRS} - ${LIBUV_INCLUDE_DIRS} - ${RUST_HEADERS_INCLUDE_DIR} -) +file(GLOB COMMON_CODE "${CMAKE_CURRENT_SOURCE_DIR}/../lib/src/*.cpp") set( SOURCE_CODE ${DOUBLE_CONVERSION_SOURCES} ${GENERATED_CODE} ${SOURCE_CODE} + ${COMMON_CODE} ) set( LIBS - ${GRPC_LIBS} - ${_PROTOBUF_LIBPROTOBUF} - ${_REFLECTION} + comm-tunnelbroker-grpc + gRPC::grpc++_reflection + gRPC::grpc++ ${AWSSDK_LINK_LIBRARIES} ${CRYPTOPP_LIBRARIES} ${LIBUV_LIBRARIES} ${Boost_LIBRARIES} ${RUST_LIBS} amqpcpp OpenSSL::SSL glog::glog + double-conversion::double-conversion + Folly::folly ) # SERVER add_executable( tunnelbroker ${FOLLY_SOURCES} ${GENERATED_CODE} ${SOURCE_CODE} ) +target_include_directories(tunnelbroker + PUBLIC + ${CMAKE_CURRENT_SOURCE_DIR}/src + ${CMAKE_CURRENT_SOURCE_DIR}/src/Database + ${CMAKE_CURRENT_SOURCE_DIR}/src/DeliveryBroker + ${CMAKE_CURRENT_SOURCE_DIR}/src/Service + ${CMAKE_CURRENT_SOURCE_DIR}/src/Tools + ${CMAKE_CURRENT_SOURCE_DIR}/src/Amqp + + ${CMAKE_CURRENT_SOURCE_DIR}/../lib/src +) + target_link_libraries( tunnelbroker ${LIBS} ) install( TARGETS tunnelbroker RUNTIME DESTINATION bin/ ) # TEST if($ENV{COMM_TEST_SERVICES} MATCHES 1) file(GLOB TEST_CODE "./test/*.cpp") list(FILTER SOURCE_CODE EXCLUDE REGEX "./src/server.cpp") enable_testing() find_package(GTest REQUIRED) include_directories(${GTEST_INCLUDE_DIR}) add_executable( runTests ${FOLLY_SOURCES} ${SOURCE_CODE} ${TEST_CODE} ) target_link_libraries( runTests ${LIBS} gtest gtest_main ) add_test( NAME runTests COMMAND runTests ) endif() diff --git a/services/tunnelbroker/Dockerfile b/services/tunnelbroker/Dockerfile index d239cf941..d15ad69a2 100644 --- a/services/tunnelbroker/Dockerfile +++ b/services/tunnelbroker/Dockerfile @@ -1,43 +1,43 @@ -FROM commapp/services-base:1.2 +FROM commapp/services-base:1.3 ARG MAKE_JOBS=4 ENV MAKEFLAGS="-j${MAKE_JOBS}" WORKDIR /transferred/scripts # Install Curl RUN apt-get update && DEBIAN_FRONTEND=noninteractive apt-get install -y curl # Install SDKs COPY services/tunnelbroker/docker/install_amqp_cpp.sh . RUN ./install_amqp_cpp.sh COPY services/tunnelbroker/docker/install_cryptopp.sh . RUN ./install_cryptopp.sh COPY services/tunnelbroker/docker/install_libuv.sh . RUN ./install_libuv.sh RUN curl https://sh.rustup.rs -sSf | sh -s -- -y COPY services/tunnelbroker/docker/install_corrosion.sh . RUN ./install_corrosion.sh ARG COMM_TEST_SERVICES ARG COMM_SERVICES_SANDBOX ENV COMM_TEST_SERVICES=${COMM_TEST_SERVICES} ENV COMM_SERVICES_SANDBOX=${COMM_SERVICES_SANDBOX} WORKDIR /transferred -COPY native/cpp/CommonCpp/grpc/protos/tunnelbroker.proto protos/tunnelbroker.proto +ADD native/cpp/CommonCpp/grpc grpc COPY services/lib/cmake-components cmake-components COPY services/lib/docker/ scripts/ COPY services/tunnelbroker/docker/* docker/ COPY services/tunnelbroker/ . COPY services/lib/src/* src/ RUN scripts/build_service.sh CMD if [ "$COMM_TEST_SERVICES" -eq 1 ]; then scripts/run_service.sh; else scripts/run_service.sh; fi diff --git a/services/tunnelbroker/src/Database/DatabaseManager.h b/services/tunnelbroker/src/Database/DatabaseManager.h index 31728f91d..c7faf5c31 100644 --- a/services/tunnelbroker/src/Database/DatabaseManager.h +++ b/services/tunnelbroker/src/Database/DatabaseManager.h @@ -1,65 +1,69 @@ #pragma once #include "AwsTools.h" #include "Constants.h" #include "DatabaseEntitiesTools.h" #include "DatabaseManagerBase.h" +#include "DeviceSessionItem.h" +#include "MessageItem.h" +#include "PublicKeyItem.h" +#include "SessionSignItem.h" #include "Tools.h" #include #include #include #include #include #include #include #include #include #include #include namespace comm { namespace network { namespace database { class DatabaseManager : public DatabaseManagerBase { private: template T populatePutRequestFromMessageItem(T &putRequest, const MessageItem &item); public: static DatabaseManager &getInstance(); bool isTableAvailable(const std::string &tableName); void putSessionItem(const DeviceSessionItem &item); std::shared_ptr findSessionItem(const std::string &deviceID); void removeSessionItem(const std::string &sessionID); void putSessionSignItem(const SessionSignItem &item); std::shared_ptr findSessionSignItem(const std::string &deviceID); void removeSessionSignItem(const std::string &deviceID); void putPublicKeyItem(const PublicKeyItem &item); std::shared_ptr findPublicKeyItem(const std::string &deviceID); void removePublicKeyItem(const std::string &deviceID); void putMessageItem(const MessageItem &item); void putMessageItemsByBatch(std::vector &messageItems); std::shared_ptr findMessageItem(const std::string &toDeviceID, const std::string &messageID); std::vector> findMessageItemsByReceiver(const std::string &toDeviceID); void removeMessageItem( const std::string &toDeviceID, const std::string &messageID); void removeMessageItemsByIDsForDeviceID( std::vector &messageIDs, const std::string &toDeviceID); }; } // namespace database } // namespace network } // namespace comm diff --git a/services/tunnelbroker/src/Service/TunnelbrokerServiceImpl.h b/services/tunnelbroker/src/Service/TunnelbrokerServiceImpl.h index fb2cda96f..eb53d6191 100644 --- a/services/tunnelbroker/src/Service/TunnelbrokerServiceImpl.h +++ b/services/tunnelbroker/src/Service/TunnelbrokerServiceImpl.h @@ -1,42 +1,42 @@ #pragma once -#include <_generated/tunnelbroker.grpc.pb.h> -#include <_generated/tunnelbroker.pb.h> +#include +#include #include #include namespace comm { namespace network { class TunnelBrokerServiceImpl final : public tunnelbroker::TunnelbrokerService::Service { public: TunnelBrokerServiceImpl(); virtual ~TunnelBrokerServiceImpl(); grpc::Status SessionSignature( grpc::ServerContext *context, const tunnelbroker::SessionSignatureRequest *request, tunnelbroker::SessionSignatureResponse *reply) override; grpc::Status NewSession( grpc::ServerContext *context, const tunnelbroker::NewSessionRequest *request, tunnelbroker::NewSessionResponse *reply) override; grpc::Status Send( grpc::ServerContext *context, const tunnelbroker::SendRequest *request, google::protobuf::Empty *reply) override; grpc::Status Get(grpc::ServerContext *context, const tunnelbroker::GetRequest *request, grpc::ServerWriter *stream) override; }; } // namespace network } // namespace comm