Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
6c1ec30
Update readme (#1)
Achanandhi-M Jul 2, 2025
403bacc
Added docker setup and modified the readme (#2)
Achanandhi-M Jul 3, 2025
a9c2d58
fix: workdir paths in dockerfile
charankamarapu Jul 7, 2025
8531019
fix: change DB to mysql
charankamarapu Jul 9, 2025
0680ace
fix: update readme
charankamarapu Jul 9, 2025
39a4de3
Create CODEOWNERS (#4)
charankamarapu Jul 10, 2025
2a8fb7d
fix: application (#3)
charankamarapu Jul 10, 2025
6a84b68
fix: bad request error msgs
charankamarapu Jul 10, 2025
a983a68
chore: add postman collection and schema file
charankamarapu Jul 10, 2025
a175f25
docs: add local setup
charankamarapu Jul 10, 2025
5ee272b
docs: add local setup
charankamarapu Jul 10, 2025
39c351f
docs: add local setup
charankamarapu Jul 10, 2025
cd561b0
fix: readme
charankamarapu Jul 10, 2025
2b87545
fix: host
charankamarapu Jul 10, 2025
c63dd0b
fix: readme and native setup
charankamarapu Jul 12, 2025
1f3ae4e
fix: docker setup readme
charankamarapu Jul 12, 2025
86f0450
docs: add keploy integration
charankamarapu Jul 12, 2025
a625c1c
docs: combined coverage
charankamarapu Jul 12, 2025
6ef404d
fix: readme
charankamarapu Jul 12, 2025
177c193
fix: readme
charankamarapu Jul 12, 2025
59edf78
docs: update coverage
charankamarapu Jul 12, 2025
19b9de2
docs: update readme
charankamarapu Jul 14, 2025
5525b8c
fix: job apis
charankamarapu Jul 14, 2025
8dfe21b
fix: add new submodules
charankamarapu Jul 14, 2025
9128372
docs: remove exclusive submodule pull
charankamarapu Jul 14, 2025
b4b9a55
fix: add auth filters to all APIs
charankamarapu Jul 14, 2025
d6a89e9
fix: update postman collection
charankamarapu Jul 15, 2025
f551569
fix: json decoding
charankamarapu Jul 16, 2025
a57fce8
fix: remove unwanted files
charankamarapu Jul 16, 2025
f3758a1
fix: return early in error cases
charankamarapu Jul 16, 2025
625e312
feat: add deregister fucntionality to users
charankamarapu Jul 17, 2025
7ed0474
feat: add deregister fucntionality to users
charankamarapu Jul 17, 2025
90efb0a
feat: afl fuzzing on department controller
kapishupadhyay22 Jul 21, 2025
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: 2 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
build
**/CMakeCache.txt
1 change: 1 addition & 0 deletions .github/CODEOWNERS
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
* @charankamarapu
6 changes: 6 additions & 0 deletions .gitmodules
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,9 @@
[submodule "third_party/libbcrypt"]
path = third_party/libbcrypt
url = https://github.com/trusch/libbcrypt
[submodule "third_party/gtest"]
path = third_party/gtest
url = https://github.com/google/googletest
[submodule "third_party/gmock"]
path = third_party/gmock
url = https://github.com/google/googlemock
215 changes: 151 additions & 64 deletions CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,83 +1,170 @@
# cmake_minimum_required(VERSION 3.5)
# project(org_chart CXX)

# include(CheckIncludeFileCXX)

# check_include_file_cxx(any HAS_ANY)
# check_include_file_cxx(string_view HAS_STRING_VIEW)
# check_include_file_cxx(coroutine HAS_COROUTINE)
# if (NOT "${CMAKE_CXX_STANDARD}" STREQUAL "")
# # Do nothing
# elseif (HAS_ANY AND HAS_STRING_VIEW AND HAS_COROUTINE)
# set(CMAKE_CXX_STANDARD 20)
# elseif (HAS_ANY AND HAS_STRING_VIEW)
# set(CMAKE_CXX_STANDARD 17)
# else ()
# set(CMAKE_CXX_STANDARD 14)
# endif ()

# set(CMAKE_CXX_STANDARD_REQUIRED ON)
# set(CMAKE_CXX_EXTENSIONS OFF)

# add_executable(${PROJECT_NAME} main.cc)

# # Add these lines for coverage
# if (COVERAGE MATCHES "ON") # Or any build type you use for coverage
# message(STATUS "Enabling code coverage flags")
# target_compile_options(${PROJECT_NAME} PRIVATE --coverage)
# target_link_options(${PROJECT_NAME} PRIVATE --coverage)
# endif()

# # ##############################################################################
# # https://github.com/drogonframework/drogon
# add_subdirectory(third_party/drogon)
# target_link_libraries(${PROJECT_NAME} PRIVATE drogon)

# # https://github.com/Thalhammer/jwt-cpp
# add_subdirectory(third_party/jwt-cpp)
# target_link_libraries(${PROJECT_NAME} PRIVATE jwt-cpp)

# # https://github.com/trusch/libbcrypt
# add_subdirectory(third_party/libbcrypt)
# target_link_libraries(${PROJECT_NAME} PRIVATE bcrypt)

# add_subdirectory(third_party/gtest)
# target_link_libraries(${PROJECT_NAME} PRIVATE gtest gtest_main)

# # and comment out the following lines
# find_package(Drogon CONFIG REQUIRED)
# target_link_libraries(${PROJECT_NAME} PRIVATE Drogon::Drogon)

# # ##############################################################################

# if (CMAKE_CXX_STANDARD LESS 17)
# # With C++14, use boost to support any, string_view and filesystem
# message(STATUS "use c++14")
# find_package(Boost 1.61.0 REQUIRED)
# target_link_libraries(${PROJECT_NAME} PUBLIC Boost::boost)
# elseif (CMAKE_CXX_STANDARD LESS 20)
# message(STATUS "use c++17")
# else ()
# message(STATUS "use c++20")
# endif ()

# aux_source_directory(controllers CTL_SRC)
# aux_source_directory(filters FILTER_SRC)
# aux_source_directory(plugins PLUGIN_SRC)
# aux_source_directory(models MODEL_SRC)
# aux_source_directory(utils UTIL_SRC)

# target_include_directories(${PROJECT_NAME}
# PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
# ${CMAKE_CURRENT_SOURCE_DIR}/models)
# target_sources(${PROJECT_NAME}
# PRIVATE
# ${SRC_DIR}
# ${CTL_SRC}
# ${FILTER_SRC}
# ${PLUGIN_SRC}
# ${MODEL_SRC}
# ${UTIL_SRC})
# # ##############################################################################
# # uncomment the following line for dynamically loading views
# # set_property(TARGET ${PROJECT_NAME} PROPERTY ENABLE_EXPORTS ON)

# # ##############################################################################

# add_subdirectory(test)

# # add_executable(${PROJECT_NAME}_test test/test_main.cc)

# # target_link_libraries(${PROJECT_NAME}_test PRIVATE drogon)

# # ParseAndAddDrogonTests(${PROJECT_NAME}_test)
# # ===================================================================
# # AFL++ Fuzzer Target (add this entire block to the end of the file)
# # ===================================================================
# option(BUILD_FUZZER "Build the AFL++ fuzzer harness" ON)

# if(BUILD_FUZZER)
# message(STATUS "Fuzzer build is enabled.")

# # Force the use of the AFL++ compiler, overriding any external settings.
# set(CMAKE_CXX_COMPILER "afl-clang-fast++" CACHE FILEPATH "AFL++ C++ compiler" FORCE)
# set(CMAKE_C_COMPILER "afl-clang-fast" CACHE FILEPATH "AFL++ C compiler" FORCE)

# # Define the fuzzer executable
# add_executable(fuzz_harness harness.cpp)

# # Link the fuzzer against your entire API project.
# # This automatically handles ALL dependencies, source files, and libraries.
# target_link_libraries(fuzz_harness PRIVATE org_chart)

# # Add the FUZZING_BUILD definition and the fuzzer runtime linker flag
# target_compile_definitions(fuzz_harness PRIVATE FUZZING_BUILD)
# target_link_libraries(fuzz_harness PRIVATE -fsanitize=fuzzer)

# message(STATUS "Configured fuzzer target. To build, run from your build directory: make fuzz_harness")
# endif()
cmake_minimum_required(VERSION 3.5)
project(org_chart CXX)

include(CheckIncludeFileCXX)

check_include_file_cxx(any HAS_ANY)
check_include_file_cxx(string_view HAS_STRING_VIEW)
check_include_file_cxx(coroutine HAS_COROUTINE)
if (NOT "${CMAKE_CXX_STANDARD}" STREQUAL "")
# Do nothing
elseif (HAS_ANY AND HAS_STRING_VIEW AND HAS_COROUTINE)
set(CMAKE_CXX_STANDARD 20)
elseif (HAS_ANY AND HAS_STRING_VIEW)
set(CMAKE_CXX_STANDARD 17)
else ()
set(CMAKE_CXX_STANDARD 14)
endif ()

set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_STANDARD_REQUIRED ON)
set(CMAKE_CXX_EXTENSIONS OFF)

add_executable(${PROJECT_NAME} main.cc)

# ##############################################################################
# https://github.com/drogonframework/drogon
add_subdirectory(third_party/drogon)
target_link_libraries(${PROJECT_NAME} PRIVATE drogon)

# https://github.com/Thalhammer/jwt-cpp
add_subdirectory(third_party/jwt-cpp)
target_link_libraries(${PROJECT_NAME} PRIVATE jwt-cpp)

# https://github.com/trusch/libbcrypt
add_subdirectory(third_party/libbcrypt)
target_link_libraries(${PROJECT_NAME} PRIVATE bcrypt)

# and comment out the following lines
find_package(Drogon CONFIG REQUIRED)
target_link_libraries(${PROJECT_NAME} PRIVATE Drogon::Drogon)

# ##############################################################################

if (CMAKE_CXX_STANDARD LESS 17)
# With C++14, use boost to support any, string_view and filesystem
message(STATUS "use c++14")
find_package(Boost 1.61.0 REQUIRED)
target_link_libraries(${PROJECT_NAME} PUBLIC Boost::boost)
elseif (CMAKE_CXX_STANDARD LESS 20)
message(STATUS "use c++17")
else ()
message(STATUS "use c++20")
endif ()
add_subdirectory(third_party/jsoncpp)

aux_source_directory(controllers CTL_SRC)
aux_source_directory(filters FILTER_SRC)
aux_source_directory(plugins PLUGIN_SRC)
aux_source_directory(models MODEL_SRC)
aux_source_directory(utils UTIL_SRC)

target_include_directories(${PROJECT_NAME}
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}
${CMAKE_CURRENT_SOURCE_DIR}/models)
target_sources(${PROJECT_NAME}
PRIVATE
${SRC_DIR}
${CTL_SRC}
${FILTER_SRC}
${PLUGIN_SRC}
${MODEL_SRC}
${UTIL_SRC})
# ##############################################################################
# uncomment the following line for dynamically loading views
# set_property(TARGET ${PROJECT_NAME} PROPERTY ENABLE_EXPORTS ON)
add_library(org_chart_lib STATIC
${CTL_SRC}
${MODEL_SRC}
${UTIL_SRC}
)

target_link_libraries(org_chart_lib PRIVATE
drogon
jwt-cpp
bcrypt
jsoncpp_lib
)
target_include_directories(org_chart_lib PUBLIC
${CMAKE_CURRENT_SOURCE_DIR}
)
add_executable(${PROJECT_NAME} main.cc)
target_link_libraries(${PROJECT_NAME} PRIVATE org_chart_lib)

# ##############################################################################
option(BUILD_FUZZER "Build the AFL++ fuzzer harness" ON)

add_subdirectory(test)
if(BUILD_FUZZER)
message(STATUS "Fuzzer build is enabled.")
add_executable(fuzz_harness harness.cpp)

# add_executable(${PROJECT_NAME}_test test/test_main.cc)
target_link_libraries(fuzz_harness PRIVATE org_chart_lib)

# target_link_libraries(${PROJECT_NAME}_test PRIVATE drogon)
target_include_directories(fuzz_harness PRIVATE
${CMAKE_CURRENT_SOURCE_DIR}/third_party/drogon/lib/inc
${CMAKE_CURRENT_SOURCE_DIR}/third_party/drogon/orm_lib/inc
${CMAKE_CURRENT_SOURCE_DIR}/third_party/jsoncpp/include
)
target_link_options(fuzz_harness PRIVATE -fsanitize=fuzzer)

# ParseAndAddDrogonTests(${PROJECT_NAME}_test)
target_compile_definitions(fuzz_harness PRIVATE FUZZING_BUILD)
message(STATUS "Configured fuzzer target. To build, run: make fuzz_harness")
endif()
61 changes: 61 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
# Start with the base Ubuntu image
FROM ubuntu:22.04

# Set the timezone
ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# Install necessary dependencies
RUN apt-get update -yqq \
&& apt-get install -yqq --no-install-recommends \
software-properties-common \
sudo curl wget cmake make pkg-config locales git \
gcc-11 g++-11 openssl libssl-dev libjsoncpp-dev uuid-dev \
zlib1g-dev libc-ares-dev postgresql-server-dev-all \
libmariadb-dev libsqlite3-dev libhiredis-dev \
&& rm -rf /var/lib/apt/lists/* \
&& locale-gen en_US.UTF-8

# Set environment variables for localization
ENV LANG=en_US.UTF-8 \
LANGUAGE=en_US:en \
LC_ALL=en_US.UTF-8 \
CC=gcc-11 \
CXX=g++-11 \
AR=gcc-ar-11 \
RANLIB=gcc-ranlib-11 \
IROOT=/install

# Clone Drogon repository
ENV DROGON_ROOT="$IROOT/drogon"
RUN git clone --depth 1 --recurse-submodules \
https://github.com/drogonframework/drogon $DROGON_ROOT # ← submodules pulled

WORKDIR $DROGON_ROOT
RUN mkdir build && cd build && \
cmake .. -DCMAKE_BUILD_TYPE=Release \
-DMYSQL_CLIENT=ON \
-DPOSTGRESQL_CLIENT=OFF \
&& make -j$(nproc) && make install

# Build Drogon
RUN ./build.sh

WORKDIR /

# Copy source code for your application (from the local directory)
COPY . /app

WORKDIR /app

# Install build tools for the app
RUN apt-get update && apt-get install -y cmake g++ git

# Pull submodules for your application
RUN git submodule update --init --recursive

# Create build directory and build the project
RUN mkdir -p /app/build && cd /app/build && cmake .. && make -j$(nproc)

# Set CMD to the actual binary
CMD ["./build/org_chart"]
Loading