From 51692acfb8e6846c2307f594f8935dcf729ef0d5 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 15 Jun 2021 12:55:55 +0200 Subject: [PATCH 01/12] reorganisiere Dockerfiles --- login_server/Dockerfile | 81 ------------------- .../alpine/Dockerfile.debug} | 0 .../Dockerfile.dependencies} | 11 +++ .../Dockerfiles/ubuntu/Dockerfile.debug | 39 +++++++++ .../{ => ubuntu}/Dockerfile.dependencies | 9 +++ .../Dockerfiles/ubuntu/Dockerfile.release | 0 .../Dockerfiles/ubuntu/Dockerfile.test | 58 +++++++++++++ 7 files changed, 117 insertions(+), 81 deletions(-) rename login_server/{Dockerfile.alpine-debug => Dockerfiles/alpine/Dockerfile.debug} (100%) rename login_server/Dockerfiles/{Dockerfile.dependencies-alpine => alpine/Dockerfile.dependencies} (86%) create mode 100644 login_server/Dockerfiles/ubuntu/Dockerfile.debug rename login_server/Dockerfiles/{ => ubuntu}/Dockerfile.dependencies (88%) create mode 100644 login_server/Dockerfiles/ubuntu/Dockerfile.release create mode 100644 login_server/Dockerfiles/ubuntu/Dockerfile.test diff --git a/login_server/Dockerfile b/login_server/Dockerfile index 98e576da2..313cdeca6 100644 --- a/login_server/Dockerfile +++ b/login_server/Dockerfile @@ -1,85 +1,4 @@ -######################################################################################################### -# Prepare debug -######################################################################################################### -FROM gradido/login_dependencies:gcc9-debug-3 as prepare_debug - -ENV DOCKER_WORKDIR="/code" -WORKDIR ${DOCKER_WORKDIR} - -RUN echo '/usr/local/lib' >> /etc/ld.so.conf && ldconfig - -COPY ./CMakeLists.txt.lib ./CMakeLists.txt -RUN ln -s /usr/local/googletest ./googletest -COPY ./src ./src -COPY ./cmake/CodeCoverage.cmake ./cmake/CodeCoverage.cmake -COPY ./dependencies/cmake-modules ./dependencies/cmake-modules -COPY ./dependencies/spirit-po ./dependencies/spirit-po -COPY ./dependencies/tinf ./dependencies/tinf -COPY ./scripts ./scripts - - -######################################################################################################### -# Install Coverage tool -######################################################################################################### -FROM prepare_debug as coverage - - -RUN apt-get update && \ - apt-get install -y --no-install-recommends python3-pip && \ - apt-get autoclean && \ - apt-get autoremove && \ - apt-get clean && \ - rm -rf /var/lib/apt/lists/* - -RUN pip3 install gcovr setuptools wheel && \ - pip3 install fastcov - - -######################################################################################################### -# Build test -######################################################################################################### -FROM coverage as test - -ENV DOCKER_WORKDIR="/code" -WORKDIR ${DOCKER_WORKDIR} - - -RUN if [ ! -d "./build_cov" ] ; then mkdir build_cov; fi - -RUN cd build_cov && \ - cmake -DCMAKE_BUILD_TYPE=Debug -DCOLLECT_COVERAGE_DATA=ON -DCOVERAGE_TOOL=fastcov .. && \ - make -j$(nproc) Gradido_LoginServer_Test - -#RUN chmod +x build_cov/bin/Gradido_LoginServer_Test -#CMD gdb -ex run ./build_cov/bin/Gradido_LoginServer_Test -#CMD ./build_cov/bin/Gradido_LoginServer_Test - -#ENTRYPOINT make -C build_cov coverage -CMD cd build_cov && make coverage && \ - if [ ! -d "./coverage" ] ; then mkdir coverage; fi && \ - cp coverage.info ./coverage/ - -######################################################################################################### -# Build debug -######################################################################################################### -FROM prepare_debug as debug - -ENV DOCKER_WORKDIR="/code" -WORKDIR ${DOCKER_WORKDIR} - -RUN mkdir build && \ - cd build && \ - cmake -DCMAKE_BUILD_TYPE=Debug .. && \ - make -j$(nproc) Gradido_LoginServer - -RUN cd scripts && \ - chmod +x compile_pot.sh && \ - ./compile_pot.sh - -RUN chmod +x build/bin/Gradido_LoginServer -ENTRYPOINT ["build/bin/Gradido_LoginServer"] - ######################################################################################################### # Build release ######################################################################################################### diff --git a/login_server/Dockerfile.alpine-debug b/login_server/Dockerfiles/alpine/Dockerfile.debug similarity index 100% rename from login_server/Dockerfile.alpine-debug rename to login_server/Dockerfiles/alpine/Dockerfile.debug diff --git a/login_server/Dockerfiles/Dockerfile.dependencies-alpine b/login_server/Dockerfiles/alpine/Dockerfile.dependencies similarity index 86% rename from login_server/Dockerfiles/Dockerfile.dependencies-alpine rename to login_server/Dockerfiles/alpine/Dockerfile.dependencies index c388d528c..098c7a8d7 100644 --- a/login_server/Dockerfiles/Dockerfile.dependencies-alpine +++ b/login_server/Dockerfiles/alpine/Dockerfile.dependencies @@ -1,3 +1,14 @@ +# Login-Server Build dependencies for alpine +# Uploaded to hub.docker.com with the tag: +# gradido/login_dependencies:alpine-debug-3 for debug build +# and +# gradido/login_dependencies:alpine-release-3 for release build +# Update tag when dependencies are added or removed + +# Control Build Type with ARG BUILD_TYPE +# Valid values do you find here: https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html +# Default is set to Debug + ##### BUILD-ENV ##### FROM alpine:3.13.5 as alpine-build diff --git a/login_server/Dockerfiles/ubuntu/Dockerfile.debug b/login_server/Dockerfiles/ubuntu/Dockerfile.debug new file mode 100644 index 000000000..79ed8d802 --- /dev/null +++ b/login_server/Dockerfiles/ubuntu/Dockerfile.debug @@ -0,0 +1,39 @@ + +######################################################################################################### +# Prepare debug +######################################################################################################### +FROM gradido/login_dependencies:gcc9-debug-3 as prepare_debug + +ENV DOCKER_WORKDIR="/code" +WORKDIR ${DOCKER_WORKDIR} + +RUN echo '/usr/local/lib' >> /etc/ld.so.conf && ldconfig + +COPY ./CMakeLists.txt.lib ./CMakeLists.txt +RUN ln -s /usr/local/googletest ./googletest +COPY ./src ./src +COPY ./cmake/CodeCoverage.cmake ./cmake/CodeCoverage.cmake +COPY ./dependencies/cmake-modules ./dependencies/cmake-modules +COPY ./dependencies/spirit-po ./dependencies/spirit-po +COPY ./dependencies/tinf ./dependencies/tinf +COPY ./scripts ./scripts + + +######################################################################################################### +# Build debug +######################################################################################################### +FROM prepare_debug as debug + +ENV DOCKER_WORKDIR="/code" +WORKDIR ${DOCKER_WORKDIR} + +RUN mkdir build && \ + cd build && \ + cmake -DCMAKE_BUILD_TYPE=Debug .. + +RUN cd scripts && \ + chmod +x compile_pot.sh && \ + ./compile_pot.sh + +CMD cd build && cmake .. && make -j$(nproc) Gradido_LoginServer && ./bin/Gradido_LoginServer + diff --git a/login_server/Dockerfiles/Dockerfile.dependencies b/login_server/Dockerfiles/ubuntu/Dockerfile.dependencies similarity index 88% rename from login_server/Dockerfiles/Dockerfile.dependencies rename to login_server/Dockerfiles/ubuntu/Dockerfile.dependencies index bc2cd1fd2..883274628 100644 --- a/login_server/Dockerfiles/Dockerfile.dependencies +++ b/login_server/Dockerfiles/ubuntu/Dockerfile.dependencies @@ -1,3 +1,12 @@ +# Login-Server Build dependencies for ubuntu +# Uploaded to hub.docker.com with the tag: +# gradido/login_dependencies:gcc9-debug-3 for debug build +# Update tag when dependencies are added or removed + +# Control Build Type with ARG BUILD_TYPE +# Valid values do you find here: https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html +# Default is set to Debug + ##### BUILD-ENV ##### FROM gcc:9 as gcc9_build diff --git a/login_server/Dockerfiles/ubuntu/Dockerfile.release b/login_server/Dockerfiles/ubuntu/Dockerfile.release new file mode 100644 index 000000000..e69de29bb diff --git a/login_server/Dockerfiles/ubuntu/Dockerfile.test b/login_server/Dockerfiles/ubuntu/Dockerfile.test new file mode 100644 index 000000000..59caaf3c5 --- /dev/null +++ b/login_server/Dockerfiles/ubuntu/Dockerfile.test @@ -0,0 +1,58 @@ + +######################################################################################################### +# Prepare debug +######################################################################################################### +FROM gradido/login_dependencies:gcc9-debug-3 as prepare_debug + +ENV DOCKER_WORKDIR="/code" +WORKDIR ${DOCKER_WORKDIR} + +RUN echo '/usr/local/lib' >> /etc/ld.so.conf && ldconfig + +COPY ./CMakeLists.txt.lib ./CMakeLists.txt +RUN ln -s /usr/local/googletest ./googletest +COPY ./src ./src +COPY ./cmake/CodeCoverage.cmake ./cmake/CodeCoverage.cmake +COPY ./dependencies/cmake-modules ./dependencies/cmake-modules +COPY ./dependencies/spirit-po ./dependencies/spirit-po +COPY ./dependencies/tinf ./dependencies/tinf +COPY ./scripts ./scripts + + +######################################################################################################### +# Install Coverage tool +######################################################################################################### +FROM prepare_debug as coverage + + +RUN apt-get update && \ + apt-get install -y --no-install-recommends python3-pip && \ + apt-get autoclean && \ + apt-get autoremove && \ + apt-get clean && \ + rm -rf /var/lib/apt/lists/* +# fastcov need gcovr to work +RUN pip3 install gcovr setuptools wheel && \ + pip3 install fastcov + + +######################################################################################################### +# Build test +######################################################################################################### +FROM coverage as test + +ENV DOCKER_WORKDIR="/code" +WORKDIR ${DOCKER_WORKDIR} + + +RUN if [ ! -d "./build_cov" ] ; then mkdir build_cov; fi + +RUN cd build_cov && \ + cmake -DCMAKE_BUILD_TYPE=Debug -DCOLLECT_COVERAGE_DATA=ON -DCOVERAGE_TOOL=fastcov .. && \ + make -j$(nproc) Gradido_LoginServer_Test + +#ENTRYPOINT make -C build_cov coverage +CMD cd build_cov && make coverage && \ + if [ ! -d "./coverage" ] ; then mkdir coverage; fi && \ + cp coverage.info ./coverage/ + \ No newline at end of file From 6e751af6813a384c197e58602ba21be4fdb1553a Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 15 Jun 2021 12:58:45 +0200 Subject: [PATCH 02/12] update workflow for test --- .github/workflows/test.yml | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 14b507354..ea16c73c8 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -50,13 +50,7 @@ jobs: ########################################################################## - name: login server | Build `release` image run: | - docker build --target release -t "gradido/login_server:release" -f ./login_server/Dockerfile login_server/ - #docker save "gradido/login_server:test" > /tmp/login_server.tar - #- name: Upload Artifact - # uses: actions/upload-artifact@v2 - #with: - # name: docker-login-server-test - #path: /tmp/login_server.tar + docker build -t "gradido/login_server:release" -f ./login_server/Dockerfile login_server/ ############################################################################## # JOB: DOCKER BUILD TEST COMMUNITY SERVER #################################### @@ -251,7 +245,7 @@ jobs: ########################################################################## - name: login server | Build `test` image run: | - docker build --target test -t "gradido/login_server:test" -f ./login_server/Dockerfile login_server/ + docker build -t "gradido/login_server:test" -f ./login_server/Dockerfiles/ubuntu/Dockerfile.test login_server/ ########################################################################## # UNIT TESTS BACKEND LOGIN-SERVER ####################################### ########################################################################## @@ -300,7 +294,7 @@ jobs: run: echo "::set-output name=id::$(docker network ls | grep github_network | awk '{ print $1 }')" id: network - name: Start Login-Server - run: docker run --network ${{ steps.network.outputs.id }} --name=login-server -d gradido/login_server:default + run: docker run --network ${{ steps.network.outputs.id }} --name=login-server -d gradido/login_server:latest - name: get login-server container id run: echo "::set-output name=id::$(docker container ls | grep login_server | awk '{ print $1 }')" id: login_server_container From ba9eac57d7531b159959bab285f7819aa855db7d Mon Sep 17 00:00:00 2001 From: Dario Rekowski on RockPI Date: Tue, 15 Jun 2021 11:11:59 +0000 Subject: [PATCH 03/12] show in between decays only if <= 0.01 GDD --- community_server/src/Model/Table/TransactionsTable.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/community_server/src/Model/Table/TransactionsTable.php b/community_server/src/Model/Table/TransactionsTable.php index 7e59c2d88..03e0e08ad 100644 --- a/community_server/src/Model/Table/TransactionsTable.php +++ b/community_server/src/Model/Table/TransactionsTable.php @@ -184,7 +184,7 @@ class TransactionsTable extends Table $calculated_decay = $stateBalancesTable->calculateDecay($prev->balance, $prev->balance_date, $current->balance_date, true); $balance = floatval($prev->balance - $calculated_decay['balance']); - if($balance) + if($balance > 100) { $final_transactions[] = [ 'type' => 'decay', From 091ce48011e60c207e928ff3478be432d9c689b0 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Tue, 15 Jun 2021 16:52:21 +0200 Subject: [PATCH 04/12] remove transaction from pending task manager directly --- .../SingletonManager/PendingTasksManager.cpp | 28 +------------------ .../SingletonManager/PendingTasksManager.h | 1 - .../src/cpp/model/gradido/Transaction.cpp | 5 ++-- 3 files changed, 3 insertions(+), 31 deletions(-) diff --git a/login_server/src/cpp/SingletonManager/PendingTasksManager.cpp b/login_server/src/cpp/SingletonManager/PendingTasksManager.cpp index c5200b766..065520b0a 100644 --- a/login_server/src/cpp/SingletonManager/PendingTasksManager.cpp +++ b/login_server/src/cpp/SingletonManager/PendingTasksManager.cpp @@ -42,6 +42,7 @@ int PendingTasksManager::addTask(Poco::AutoPtr task) if (task.isNull() || !task->getModel()) { return -1; } + auto model = task->getModel(); Poco::ScopedLock _lock(mWorkMutex); auto pending_task_list = getTaskListForUser(model->getUserId()); @@ -235,30 +236,3 @@ Poco::AutoPtr PendingTasksManager::getPendingTask(int p return nullptr; } - -void PendingTasksManager::reportErrorToCommunityServer(Poco::AutoPtr task, std::string error, std::string errorDetails) -{ - // TODO: choose user specific server - JsonRequest phpServerRequest(ServerConfig::g_php_serverHost, ServerConfig::g_phpServerPort); - //Poco::Net::NameValueCollection payload; - Poco::JSON::Object payload; - - auto task_model = task->getModel(); - auto user_model = task->getUser()->getModel(); - - payload.set("created", task_model->getCreated()); - payload.set("id", task_model->getID()); - payload.set("type", task_model->getTaskTypeString()); - payload.set("public_key", user_model->getPublicKeyHex()); - payload.set("error", error); - payload.set("errorMessage", errorDetails); - - auto ret = phpServerRequest.request("errorInTransaction", payload); - if (ret == JSON_REQUEST_RETURN_ERROR) - { - auto em = ErrorManager::getInstance(); - em->addError(new Error("PendingTasksManager::reportErrorToCommunityServer", "php server error")); - em->getErrors(&phpServerRequest); - em->sendErrorsAsEmail(); - } -} diff --git a/login_server/src/cpp/SingletonManager/PendingTasksManager.h b/login_server/src/cpp/SingletonManager/PendingTasksManager.h index 8444f32ea..2ee96266a 100644 --- a/login_server/src/cpp/SingletonManager/PendingTasksManager.h +++ b/login_server/src/cpp/SingletonManager/PendingTasksManager.h @@ -50,7 +50,6 @@ public: std::vector> getTransactionsUserMustSign(Poco::AutoPtr user); std::vector> getTransactionSomeoneMustSign(Poco::AutoPtr user); - void reportErrorToCommunityServer(Poco::AutoPtr task, std::string error, std::string errorDetails); protected: PendingTasksManager(); diff --git a/login_server/src/cpp/model/gradido/Transaction.cpp b/login_server/src/cpp/model/gradido/Transaction.cpp index 404d4f747..67e6137a2 100644 --- a/login_server/src/cpp/model/gradido/Transaction.cpp +++ b/login_server/src/cpp/model/gradido/Transaction.cpp @@ -358,6 +358,8 @@ namespace model { } //UniLib::controller::TaskPtr transaction_send_task(new SendTransactionTask(Poco::AutoPtr(this, true))); //transaction_send_task->scheduleTask(transaction_send_task); + auto pt = PendingTasksManager::getInstance(); + pt->removeTask(this); return 1 == runSendTransaction(); //return true; } @@ -507,9 +509,6 @@ namespace model { addError(new ParamError(function_name, "unknown error", TransactionValidationToString(result))); //sendErrorsAsEmail(); } - - auto pt = PendingTasksManager::getInstance(); - pt->reportErrorToCommunityServer(Poco::AutoPtr(this, true), error_name, error_description); addError(new ParamError(function_name, error_name, error_description)); } return -1; From 7785a0b5a65efbe276ea27f68960373e55861709 Mon Sep 17 00:00:00 2001 From: einhorn_b Date: Wed, 16 Jun 2021 11:07:30 +0200 Subject: [PATCH 05/12] delete information only after successfull unlock --- login_server/src/cpp/lib/MultithreadContainer.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/login_server/src/cpp/lib/MultithreadContainer.h b/login_server/src/cpp/lib/MultithreadContainer.h index dafc4f9ad..2596fb2fd 100644 --- a/login_server/src/cpp/lib/MultithreadContainer.h +++ b/login_server/src/cpp/lib/MultithreadContainer.h @@ -21,7 +21,7 @@ ***************************************************************************/ /*! - + \brief Container Wrapper class for mutex protected container changed to poco mutex for gradido login server default mutex from poco is recursive so it is some heavy thing @@ -47,7 +47,7 @@ namespace UniLib { // \return false if mutex was locked from another thread bool tryLock(); - inline void unlock() { mLastSucceededLock = ""; mWorkMutex.unlock(); } + inline void unlock() { mWorkMutex.unlock(); mLastSucceededLock = ""; } inline const std::string& getLastSucceededLock() { return mLastSucceededLock; } protected: @@ -58,4 +58,4 @@ namespace UniLib { } } -#endif //__DR_UNIVERSUM_LIB_LIB_MULTITHREAD_CONTAINER_H__ \ No newline at end of file +#endif //__DR_UNIVERSUM_LIB_LIB_MULTITHREAD_CONTAINER_H__ From 0093ae88342aedcc30aaa294108f2bc6cee165e9 Mon Sep 17 00:00:00 2001 From: einhorn_b Date: Wed, 16 Jun 2021 12:49:58 +0200 Subject: [PATCH 06/12] things to get more infos for debugging --- .../src/Controller/AppController.php | 2 +- .../src/cpp/model/gradido/Transaction.cpp | 9 +++--- .../src/cpp/model/table/ModelBase.cpp | 28 ++++++++++++++----- .../src/cpp/model/table/PendingTask.cpp | 4 +++ 4 files changed, 31 insertions(+), 12 deletions(-) diff --git a/community_server/src/Controller/AppController.php b/community_server/src/Controller/AppController.php index eb11299ce..2c6344511 100644 --- a/community_server/src/Controller/AppController.php +++ b/community_server/src/Controller/AppController.php @@ -289,7 +289,7 @@ class AppController extends Controller } } else { if(!$redirect) { - return ['state' => 'not found', 'msg' => 'invalid session']; + return ['state' => 'not found', 'msg' => 'invalid session', 'details' => $json]; } if ($json['state'] === 'not found') { $this->Flash->error(__('invalid session')); diff --git a/login_server/src/cpp/model/gradido/Transaction.cpp b/login_server/src/cpp/model/gradido/Transaction.cpp index 67e6137a2..e3c4ada0f 100644 --- a/login_server/src/cpp/model/gradido/Transaction.cpp +++ b/login_server/src/cpp/model/gradido/Transaction.cpp @@ -359,7 +359,8 @@ namespace model { //UniLib::controller::TaskPtr transaction_send_task(new SendTransactionTask(Poco::AutoPtr(this, true))); //transaction_send_task->scheduleTask(transaction_send_task); auto pt = PendingTasksManager::getInstance(); - pt->removeTask(this); + + pt->removeTask(Poco::AutoPtr(this, true)); return 1 == runSendTransaction(); //return true; } @@ -562,13 +563,13 @@ namespace model { auto result = json_request.request("putTransaction", param); json_request.getWarnings(&json_request); - if (JSON_REQUEST_RETURN_OK == result) - { + if (JSON_REQUEST_RETURN_OK == result) + { if (!json_request.errorCount()) { finishSuccess(); } else { - getErrors(&json_request); + getErrors(&json_request); return -1; } return 1; diff --git a/login_server/src/cpp/model/table/ModelBase.cpp b/login_server/src/cpp/model/table/ModelBase.cpp index 8ddab7ade..b8f68c369 100644 --- a/login_server/src/cpp/model/table/ModelBase.cpp +++ b/login_server/src/cpp/model/table/ModelBase.cpp @@ -56,9 +56,9 @@ namespace model { try { auto res = select.execute(); if (1 == res) { return true; } - + } - catch (Poco::Exception& ex) { + catch (Poco::Exception& ex) { addError(new ParamError(getTableName(), "mysql error by select id", ex.displayText().data())); addError(new ParamError(getTableName(), "data set: ", toString().data())); } @@ -124,21 +124,35 @@ namespace model { void ModelBase::duplicate() { - Poco::ScopedLock _lock(mWorkMutex); + //Poco::ScopedLock _lock(mWorkMutex); + std::string stack_details = "[ModelBase::duplicate] table: "; + stack_details += getTableName(); + lock(stack_details.data()); mReferenceCount++; + printf("[ModelBase::duplicate] new value: %d, table name: %s\n", mReferenceCount, getTableName()); + unlock(); //printf("[ModelBase::duplicate] new value: %d\n", mReferenceCount); } void ModelBase::release() { - Poco::ScopedLock _lock(mWorkMutex); + if(mReferenceCount <= 0) { + throw Poco::Exception("ModelBase already released", getTableName()); + } + std::string stack_details = "[ModelBase::release] table: "; + stack_details += getTableName(); + stack_details += ", reference count: "; + stack_details += std::to_string(mReferenceCount); + lock(stack_details.data()); + mReferenceCount--; - //printf("[ModelBase::release] new value: %d\n", mReferenceCount); + printf("[ModelBase::release] new value: %d, table name: %s\n", mReferenceCount, getTableName()); if (0 == mReferenceCount) { - + unlock(); delete this; return; } + unlock(); } @@ -180,7 +194,7 @@ namespace model { Poco::Mutex& timeMutex = ServerConfig::g_TimeMutex; int year, month, day, hour, minute, second; - // ex: 2009-10-29 + // ex: 2009-10-29 if (sscanf(decodedDateString.data(), "%d-%d-%dT%d:%dZ", &year, &month, &day, &hour, &minute) != EOF) { time_t rawTime; time(&rawTime); diff --git a/login_server/src/cpp/model/table/PendingTask.cpp b/login_server/src/cpp/model/table/PendingTask.cpp index 3b1856aa1..541e9c262 100644 --- a/login_server/src/cpp/model/table/PendingTask.cpp +++ b/login_server/src/cpp/model/table/PendingTask.cpp @@ -70,7 +70,11 @@ namespace model { SHARED_LOCK; temp = mResultJsonString; + if(!mResultJsonString.size()) { + return new Poco::JSON::Object; + } } + Poco::JSON::Parser parser; Poco::Dynamic::Var result; try From f3275bfc229219b8ce44c054c8a5f9fc34567fac Mon Sep 17 00:00:00 2001 From: einhorn_b Date: Wed, 16 Jun 2021 15:19:20 +0200 Subject: [PATCH 07/12] changes for hoepfully fixing Session deadlock problems --- .../src/cpp/JSONInterface/JsonGetLogin.cpp | 4 +- .../JsonRequestHandlerFactory.cpp | 2 +- .../cpp/SingletonManager/SessionManager.cpp | 67 +++++++++---------- login_server/src/cpp/model/Session.cpp | 36 +++++----- .../src/cpp/model/table/ModelBase.cpp | 20 ++---- 5 files changed, 55 insertions(+), 74 deletions(-) diff --git a/login_server/src/cpp/JSONInterface/JsonGetLogin.cpp b/login_server/src/cpp/JSONInterface/JsonGetLogin.cpp index 92ef5e887..76f4e6524 100644 --- a/login_server/src/cpp/JSONInterface/JsonGetLogin.cpp +++ b/login_server/src/cpp/JSONInterface/JsonGetLogin.cpp @@ -10,8 +10,6 @@ Poco::JSON::Object* JsonGetLogin::handle(Poco::Dynamic::Var params) { - - int session_id = 0; auto sm = SessionManager::getInstance(); auto pt = PendingTasksManager::getInstance(); auto observer = SingletonTaskObserver::getInstance(); @@ -58,4 +56,4 @@ Poco::JSON::Object* JsonGetLogin::handle(Poco::Dynamic::Var params) //printf("[JsonGetLogin] %s\n", user_string.data()); return result; -} \ No newline at end of file +} diff --git a/login_server/src/cpp/JSONInterface/JsonRequestHandlerFactory.cpp b/login_server/src/cpp/JSONInterface/JsonRequestHandlerFactory.cpp index 19772f3e1..b50fc7957 100644 --- a/login_server/src/cpp/JSONInterface/JsonRequestHandlerFactory.cpp +++ b/login_server/src/cpp/JSONInterface/JsonRequestHandlerFactory.cpp @@ -65,7 +65,7 @@ Poco::Net::HTTPRequestHandler* JsonRequestHandlerFactory::createRequestHandler(c auto sm = SessionManager::getInstance(); Session* s = nullptr; - if (!session_id) { + if (session_id) { s = sm->getSession(session_id); } diff --git a/login_server/src/cpp/SingletonManager/SessionManager.cpp b/login_server/src/cpp/SingletonManager/SessionManager.cpp index a26ecb0ab..114cff0c9 100644 --- a/login_server/src/cpp/SingletonManager/SessionManager.cpp +++ b/login_server/src/cpp/SingletonManager/SessionManager.cpp @@ -57,17 +57,17 @@ bool SessionManager::init() //case VALIDATE_ONLY_URL: mValidations[i] = new Poco::RegularExpression("^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}$"); break; case VALIDATE_ONLY_URL: mValidations[i] = new Poco::RegularExpression("^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\/?"); break; case VALIDATE_HAS_SPECIAL_CHARACTER: mValidations[i] = new Poco::RegularExpression(".*[@$!%*?&+-].*"); break; - case VALIDATE_HAS_UPPERCASE_LETTER: - mValidations[i] = new Poco::RegularExpression(".*[A-Z].*"); + case VALIDATE_HAS_UPPERCASE_LETTER: + mValidations[i] = new Poco::RegularExpression(".*[A-Z].*"); ServerConfig::g_ServerKeySeed->put(i, DRRandom::r64()); break; case VALIDATE_HAS_LOWERCASE_LETTER: mValidations[i] = new Poco::RegularExpression(".*[a-z].*"); break; default: printf("[SessionManager::%s] unknown validation type\n", __FUNCTION__); } } - - mInitalized = true; + + mInitalized = true; mWorkingMutex.unlock(); return true; } @@ -98,7 +98,7 @@ void SessionManager::deinitalize() } printf("[SessionManager::deinitalize] count of dead locked sessions: %d\n", mDeadLockedSessionCount); - + mInitalized = false; mWorkingMutex.unlock(); } @@ -142,7 +142,7 @@ Session* SessionManager::getNewSession(int* handle) // first check if we have any timeouted session to directly reuse it checkTimeoutSession(); - // lock + // lock try { //Poco::Mutex::ScopedLock _lock(mWorkingMutex, 500); mWorkingMutex.tryLock(500); @@ -156,8 +156,8 @@ Session* SessionManager::getNewSession(int* handle) //UniLib::controller::TaskPtr checkSessionTimeout(new CheckSessionTimeouted); //checkSessionTimeout->scheduleTask(checkSessionTimeout); - // check if we have an existing session ready to use - while (mEmptyRequestStack.size() > 0) { + // check if we have an existing session ready to use + while (mEmptyRequestStack.size() > 0) { int local_handle = mEmptyRequestStack.top(); mEmptyRequestStack.pop(); auto resultIt = mRequestSessionMap.find(local_handle); @@ -186,10 +186,10 @@ Session* SessionManager::getNewSession(int* handle) mRequestSessionMap.erase(local_handle); } - + } } - + // else create new RequestSession Object // calculate random handle // check if already exist, if get new @@ -211,7 +211,7 @@ Session* SessionManager::getNewSession(int* handle) //printf("[SessionManager::getNewSession] handle: %ld, sum: %u\n", newHandle, mRequestSessionMap.size()); mWorkingMutex.unlock(); return requestSession; - + //return nullptr; } @@ -231,7 +231,7 @@ bool SessionManager::releaseSession(int requestHandleSession) return false; } //mWorkingMutex.lock(); - + auto it = mRequestSessionMap.find(requestHandleSession); if (it == mRequestSessionMap.end()) { //printf("[SessionManager::releaseRequestSession] requestSession with handle: %d not found\n", requestHandleSession); @@ -242,16 +242,15 @@ bool SessionManager::releaseSession(int requestHandleSession) // delete session, not reuse as workaround for server freeze bug - mRequestSessionMap.erase(requestHandleSession); + /*mRequestSessionMap.erase(requestHandleSession); delete session; mWorkingMutex.unlock(); return true; - +*/ // check if dead locked - if (session->tryLock()) { - session->unlock(); + if (!session->isDeadLocked()) { session->reset(); session->setActive(false); } @@ -264,9 +263,9 @@ bool SessionManager::releaseSession(int requestHandleSession) mWorkingMutex.unlock(); return true; } - + // change request handle we don't want session hijacking - + // hardcoded disabled session max if (mEmptyRequestStack.size() > 100) { mRequestSessionMap.erase(requestHandleSession); @@ -285,11 +284,11 @@ bool SessionManager::releaseSession(int requestHandleSession) mWorkingMutex.unlock(); return true; } - + session->setHandle(newHandle); mRequestSessionMap.insert(std::pair(newHandle, session)); mEmptyRequestStack.push(newHandle); - + mWorkingMutex.unlock(); return true; } @@ -354,13 +353,11 @@ Session* SessionManager::getSession(int handle) } if (0 == handle) return nullptr; Session* result = nullptr; - try { - //Poco::Mutex::ScopedLock _lock(mWorkingMutex, 500); - mWorkingMutex.tryLock(500); - } - catch (Poco::TimeoutException &ex) { - printf("[SessionManager::getSession] exception timout mutex: %s\n", ex.displayText().data()); - return result; + + + if(!mWorkingMutex.tryLock(500)) { + printf("[SessionManager::getSession] exception timout mutex: \n"); + return result; } //mWorkingMutex.lock(); auto it = mRequestSessionMap.find(handle); @@ -376,14 +373,12 @@ Session* SessionManager::getSession(int handle) return nullptr; } if (0 == iResult) { - //printf("[SessionManager::getSession] session isn't active\n"); mWorkingMutex.unlock(); return nullptr; } //result->setActive(true); result->updateTimeout(); } - //printf("[SessionManager::getSession] handle: %ld\n", handle); mWorkingMutex.unlock(); return result; } @@ -418,8 +413,8 @@ Session* SessionManager::findByUserId(int userId) } //mWorkingMutex.lock(); for (auto it = mRequestSessionMap.begin(); it != mRequestSessionMap.end(); it++) { - while (it->second->isDeadLocked()) - { + while (it->second->isDeadLocked()) + { it = mRequestSessionMap.erase(it); mDeadLockedSessionCount++; auto em = ErrorManager::getInstance(); @@ -484,7 +479,7 @@ std::vector SessionManager::findAllByUserId(int userId) Session* SessionManager::findByEmail(const std::string& email) { assert(email.size() > 0); - + try { //Poco::Mutex::ScopedLock _lock(mWorkingMutex, 500); mWorkingMutex.tryLock(500); @@ -605,23 +600,23 @@ bool SessionManager::checkPwdValidation(const std::string& pwd, NotificationList if (!isValid(pwd, VALIDATE_PASSWORD)) { errorReciver->addError(new Error( - lang->gettext("Password"), + lang->gettext("Password"), lang->gettext("Please enter a valid password with at least 8 characters, upper and lower case letters, at least one number and one special character (@$!%*?&+-_)!"))); // @$!%*?&+- if (pwd.size() < 8) { errorReciver->addError(new Error( - lang->gettext("Password"), + lang->gettext("Password"), lang->gettext("Your password is to short!"))); } else if (!isValid(pwd, VALIDATE_HAS_LOWERCASE_LETTER)) { errorReciver->addError(new Error( - lang->gettext("Password"), + lang->gettext("Password"), lang->gettext("Your password does not contain lowercase letters!"))); } else if (!isValid(pwd, VALIDATE_HAS_UPPERCASE_LETTER)) { errorReciver->addError(new Error( - lang->gettext("Password"), + lang->gettext("Password"), lang->gettext("Your password does not contain any capital letters!"))); } else if (!isValid(pwd, VALIDATE_HAS_NUMBER)) { diff --git a/login_server/src/cpp/model/Session.cpp b/login_server/src/cpp/model/Session.cpp index 767f1acb3..42b7202fd 100644 --- a/login_server/src/cpp/model/Session.cpp +++ b/login_server/src/cpp/model/Session.cpp @@ -84,29 +84,30 @@ void Session::reset() int Session::isActive() { int ret = 0; - try { - mWorkMutex.tryLock(100); - } - catch (Poco::TimeoutException &ex) { - return -1; - } + + if(!mWorkMutex.tryLock(100)) { + return -1; + } + ret = (int)mActive; - unlock(); + + try { + unlock(); + } catch(Poco::SystemException& ex) { + addError(new ParamError("Session::isActive", "exception unlocking mutex", ex.what())); + return -1; + } return ret; } bool Session::isDeadLocked() { - try { - mWorkMutex.tryLock(200); - unlock(); - return false; - } - catch (Poco::Exception& ex) { - - } - return true; + if(!mWorkMutex.tryLock(200)) { + return true; + }; + unlock(); + return false; } bool Session::setActive(bool active) @@ -922,12 +923,11 @@ bool Session::useOrGeneratePassphrase(const std::string& passphase) bool Session::lastTransactionTheSame(Poco::AutoPtr newTransaction) { assert(!newTransaction.isNull()); - lock(); + Poco::ScopedLock _lock(mWorkMutex); if (mLastTransaction.isNull()) { return false; } bool result = mLastTransaction->isTheSameTransaction(newTransaction); - unlock(); return result; } diff --git a/login_server/src/cpp/model/table/ModelBase.cpp b/login_server/src/cpp/model/table/ModelBase.cpp index b8f68c369..737db3f98 100644 --- a/login_server/src/cpp/model/table/ModelBase.cpp +++ b/login_server/src/cpp/model/table/ModelBase.cpp @@ -124,14 +124,8 @@ namespace model { void ModelBase::duplicate() { - //Poco::ScopedLock _lock(mWorkMutex); - std::string stack_details = "[ModelBase::duplicate] table: "; - stack_details += getTableName(); - lock(stack_details.data()); + Poco::ScopedLock _lock(mWorkMutex); mReferenceCount++; - printf("[ModelBase::duplicate] new value: %d, table name: %s\n", mReferenceCount, getTableName()); - unlock(); - //printf("[ModelBase::duplicate] new value: %d\n", mReferenceCount); } void ModelBase::release() @@ -139,21 +133,15 @@ namespace model { if(mReferenceCount <= 0) { throw Poco::Exception("ModelBase already released", getTableName()); } - std::string stack_details = "[ModelBase::release] table: "; - stack_details += getTableName(); - stack_details += ", reference count: "; - stack_details += std::to_string(mReferenceCount); - lock(stack_details.data()); + + Poco::ScopedLock _lock(mWorkMutex); mReferenceCount--; - printf("[ModelBase::release] new value: %d, table name: %s\n", mReferenceCount, getTableName()); + if (0 == mReferenceCount) { - unlock(); delete this; return; } - unlock(); - } Poco::Data::Statement ModelBase::_loadFromDB(Poco::Data::Session session, const std::vector& fieldNames, MysqlConditionType conditionType/* = MYSQL_CONDITION_AND*/) From 90d3b9aa436efc4a3ca2181e26eb4a6e68b863ce Mon Sep 17 00:00:00 2001 From: einhorn_b Date: Wed, 16 Jun 2021 15:21:39 +0200 Subject: [PATCH 08/12] update test --- .../tests/TestCase/Controller/AppRequestControllerTest.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/community_server/tests/TestCase/Controller/AppRequestControllerTest.php b/community_server/tests/TestCase/Controller/AppRequestControllerTest.php index 118f25a32..6a8296d94 100644 --- a/community_server/tests/TestCase/Controller/AppRequestControllerTest.php +++ b/community_server/tests/TestCase/Controller/AppRequestControllerTest.php @@ -109,9 +109,10 @@ class AppRequestControllerTest extends TestCase 'public_hex' => '8190bda585ee5f1d9fbf7d06e81e69ec18e13376104cff54b7457eb7d3ef710d' ] ]); - + $this->getAndParse('/api/get-balance/' . 1211, - ['state' => 'not found', 'msg' => 'invalid session'] + ['state' => 'not found', 'msg' => 'invalid session', + 'details' => ['msg' => 'session not found', 'state' => 'not found']] ); } From c22db51ab2e1191a60fd46c646c6e9a2e3be3868 Mon Sep 17 00:00:00 2001 From: einhorn_b Date: Wed, 16 Jun 2021 15:22:51 +0200 Subject: [PATCH 09/12] update coverage --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 14b507354..aacbab5d1 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -268,7 +268,7 @@ jobs: report_name: Coverage Backend Login type: lcov result_path: ./coverage/coverage.info - min_coverage: 13 + min_coverage: 25 token: ${{ github.token }} ############################################################################## @@ -341,7 +341,7 @@ jobs: report_name: Coverage Backend Community type: phpunit result_path: ./coverage/coverage.info - min_coverage: 10 + min_coverage: 14 token: ${{ github.token }} #test: From 88484c422cc61bdcd38b81db77ef3ecdf39caec7 Mon Sep 17 00:00:00 2001 From: einhorn_b Date: Wed, 16 Jun 2021 15:31:48 +0200 Subject: [PATCH 10/12] update test --- .../tests/TestCase/Controller/AppRequestControllerTest.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/community_server/tests/TestCase/Controller/AppRequestControllerTest.php b/community_server/tests/TestCase/Controller/AppRequestControllerTest.php index 6a8296d94..bff10d997 100644 --- a/community_server/tests/TestCase/Controller/AppRequestControllerTest.php +++ b/community_server/tests/TestCase/Controller/AppRequestControllerTest.php @@ -112,7 +112,8 @@ class AppRequestControllerTest extends TestCase $this->getAndParse('/api/get-balance/' . 1211, ['state' => 'not found', 'msg' => 'invalid session', - 'details' => ['msg' => 'session not found', 'state' => 'not found']] + 'details' => ['msg' => 'session not found', 'state' => 'not found'] + ] ); } @@ -129,7 +130,9 @@ class AppRequestControllerTest extends TestCase ]); $this->getAndParse('/api/get-balance/' , - ['state' => 'not found', 'msg' => 'invalid session'] + ['state' => 'not found', 'msg' => 'invalid session', + 'details' => ['msg' => 'session not found', 'state' => 'not found'] + ] ); } From 69ac88ccf68ef89cc98f51662d67182a295a9177 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 16 Jun 2021 16:06:31 +0200 Subject: [PATCH 11/12] fill missing files --- .github/workflows/test.yml | 2 +- docker-compose.override.yml | 3 +- docker-compose.test.yml | 2 +- docker-compose.yml | 1 - login_server/Dockerfiles/Dockerfile.default | 58 ------------------- .../Dockerfiles/ubuntu/Dockerfile.release | 49 ++++++++++++++++ 6 files changed, 52 insertions(+), 63 deletions(-) delete mode 100644 login_server/Dockerfiles/Dockerfile.default diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ea16c73c8..3fe5c5abb 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -294,7 +294,7 @@ jobs: run: echo "::set-output name=id::$(docker network ls | grep github_network | awk '{ print $1 }')" id: network - name: Start Login-Server - run: docker run --network ${{ steps.network.outputs.id }} --name=login-server -d gradido/login_server:latest + run: docker run --network ${{ steps.network.outputs.id }} --name=login-server -d gradido/login_server:with-config - name: get login-server container id run: echo "::set-output name=id::$(docker container ls | grep login_server | awk '{ print $1 }')" id: login_server_container diff --git a/docker-compose.override.yml b/docker-compose.override.yml index 1060002ba..dfc980a86 100644 --- a/docker-compose.override.yml +++ b/docker-compose.override.yml @@ -26,8 +26,7 @@ services: ######################################################### login-server: build: - target: login_server_alpine_debug - dockerfile: Dockerfile.alpine-debug + dockerfile: Dockerfiles/alpine/Dockerfile.debug security_opt: - seccomp:unconfined cap_add: diff --git a/docker-compose.test.yml b/docker-compose.test.yml index b9d44363e..457faf950 100644 --- a/docker-compose.test.yml +++ b/docker-compose.test.yml @@ -26,7 +26,7 @@ services: login-server: build: context: ./login_server/ - target: test + dockerfile: Dockerfiles/ubuntu/Dockerfile.test security_opt: - seccomp:unconfined cap_add: diff --git a/docker-compose.yml b/docker-compose.yml index 2cc2ceff7..35e015f4e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -55,7 +55,6 @@ services: login-server: build: context: ./login_server/ - target: login_server depends_on: - mariadb networks: diff --git a/login_server/Dockerfiles/Dockerfile.default b/login_server/Dockerfiles/Dockerfile.default deleted file mode 100644 index 4be44dfd0..000000000 --- a/login_server/Dockerfiles/Dockerfile.default +++ /dev/null @@ -1,58 +0,0 @@ - -######################################################################################################### -# Build release -######################################################################################################### -FROM gradido/login_dependencies:alpine-release-3 as release_default - -ENV DOCKER_WORKDIR="/code" -WORKDIR ${DOCKER_WORKDIR} - -COPY ./login_server/CMakeLists.txt.lib ./CMakeLists.txt -COPY ./login_server/src ./src -COPY ./login_server/dependencies/cmake-modules ./dependencies/cmake-modules -COPY ./login_server/dependencies/spirit-po ./dependencies/spirit-po -COPY ./login_server/dependencies/tinf ./dependencies/tinf -COPY ./login_server/scripts ./scripts - -RUN mkdir build && \ - cd build && \ - cmake -DCMAKE_BUILD_TYPE=Release .. && \ - make -j$(nproc) Gradido_LoginServer - -RUN cd scripts && \ - chmod +x compile_pot.sh && \ - ./compile_pot.sh - - -######################################################################################################### -# run release with docker default config -######################################################################################################### -#From alpine:latest as login_server -FROM alpine:3.13.5 as login_server_default - -USER root -WORKDIR "/usr/bin" - -COPY --from=release_default /code/build/bin/Gradido_LoginServer /usr/bin/ - -COPY --from=release_default /usr/local/lib/mariadb/libmariadb.so.3 /usr/local/lib/ -COPY --from=release_default /usr/local/lib/libPoco* /usr/local/lib/ -COPY --from=release_default /usr/lib/libsodium.so.23 /usr/lib/ -COPY --from=release_default /usr/lib/libstdc++.so.6 /usr/lib/ -COPY --from=release_default /usr/lib/libgcc_s.so.1 /usr/lib/ - -COPY ./configs/login_server/grd_login.properties /etc/grd_login/ -COPY ./configs/login_server/cacert.pem /etc/grd_login/ -COPY ./configs/login_server/LOCALE /etc/grd_login/ - -EXPOSE 1200 -EXPOSE 1201 - -RUN chmod +x /usr/bin/Gradido_LoginServer -ENTRYPOINT ["/usr/bin/Gradido_LoginServer"] -#CMD Gradido_LoginServer - - - - - diff --git a/login_server/Dockerfiles/ubuntu/Dockerfile.release b/login_server/Dockerfiles/ubuntu/Dockerfile.release index e69de29bb..aa727c59c 100644 --- a/login_server/Dockerfiles/ubuntu/Dockerfile.release +++ b/login_server/Dockerfiles/ubuntu/Dockerfile.release @@ -0,0 +1,49 @@ + +######################################################################################################### +# Build release +######################################################################################################### +FROM gradido/login_dependencies:ubuntu-release-3 as release + +ENV DOCKER_WORKDIR="/code" +WORKDIR ${DOCKER_WORKDIR} + +COPY ./CMakeLists.txt.lib ./CMakeLists.txt +COPY ./src ./src +RUN ln -s /usr/local/googletest ./googletest +COPY ./dependencies/cmake-modules ./dependencies/cmake-modules +COPY ./dependencies/spirit-po ./dependencies/spirit-po +COPY ./dependencies/tinf ./dependencies/tinf +COPY ./scripts ./scripts + +RUN mkdir build && \ + cd build && \ + cmake -DCMAKE_BUILD_TYPE=Release .. && \ + make -j$(nproc) Gradido_LoginServer + +RUN cd scripts && \ + chmod +x compile_pot.sh && \ + ./compile_pot.sh + + +######################################################################################################### +# run release +######################################################################################################### +#From alpine:latest as login_server +FROM ubuntu:latest as login_server + +USER root +WORKDIR "/usr/bin" + +COPY --from=release /code/build/bin/Gradido_LoginServer /usr/bin/ + +COPY --from=release /usr/local/lib/mariadb/libmariadb.so.3 /usr/local/lib/ +COPY --from=release /usr/local/lib/libPoco* /usr/local/lib/ +COPY --from=release /usr/local/lib/libproto* /usr/local/lib/ +COPY --from=release /usr/lib/libsodium.so.23 /usr/lib/ +COPY --from=release /usr/lib/libstdc++.so.6 /usr/lib/ +COPY --from=release /usr/lib/libgcc_s.so.1 /usr/lib/ + + +RUN chmod +x /usr/bin/Gradido_LoginServer +ENTRYPOINT ["/usr/bin/Gradido_LoginServer"] +#CMD Gradido_LoginServer From 3dafab3b65d7f5073c3673cf656e06138b73f790 Mon Sep 17 00:00:00 2001 From: einhornimmond Date: Wed, 16 Jun 2021 16:07:36 +0200 Subject: [PATCH 12/12] add missing files --- .../Dockerfiles/alpine/Dockerfile.release | 49 +++++++++++++++ .../Dockerfiles/alpine/Dockerfile.with_config | 63 +++++++++++++++++++ 2 files changed, 112 insertions(+) create mode 100644 login_server/Dockerfiles/alpine/Dockerfile.release create mode 100644 login_server/Dockerfiles/alpine/Dockerfile.with_config diff --git a/login_server/Dockerfiles/alpine/Dockerfile.release b/login_server/Dockerfiles/alpine/Dockerfile.release new file mode 100644 index 000000000..313cdeca6 --- /dev/null +++ b/login_server/Dockerfiles/alpine/Dockerfile.release @@ -0,0 +1,49 @@ + +######################################################################################################### +# Build release +######################################################################################################### +FROM gradido/login_dependencies:alpine-release-3 as release + +ENV DOCKER_WORKDIR="/code" +WORKDIR ${DOCKER_WORKDIR} + +COPY ./CMakeLists.txt.lib ./CMakeLists.txt +COPY ./src ./src +RUN ln -s /usr/local/googletest ./googletest +COPY ./dependencies/cmake-modules ./dependencies/cmake-modules +COPY ./dependencies/spirit-po ./dependencies/spirit-po +COPY ./dependencies/tinf ./dependencies/tinf +COPY ./scripts ./scripts + +RUN mkdir build && \ + cd build && \ + cmake -DCMAKE_BUILD_TYPE=Release .. && \ + make -j$(nproc) Gradido_LoginServer + +RUN cd scripts && \ + chmod +x compile_pot.sh && \ + ./compile_pot.sh + + +######################################################################################################### +# run release +######################################################################################################### +#From alpine:latest as login_server +FROM alpine:3.13.5 as login_server + +USER root +WORKDIR "/usr/bin" + +COPY --from=release /code/build/bin/Gradido_LoginServer /usr/bin/ + +COPY --from=release /usr/local/lib/mariadb/libmariadb.so.3 /usr/local/lib/ +COPY --from=release /usr/local/lib/libPoco* /usr/local/lib/ +COPY --from=release /usr/local/lib/libproto* /usr/local/lib/ +COPY --from=release /usr/lib/libsodium.so.23 /usr/lib/ +COPY --from=release /usr/lib/libstdc++.so.6 /usr/lib/ +COPY --from=release /usr/lib/libgcc_s.so.1 /usr/lib/ + + +RUN chmod +x /usr/bin/Gradido_LoginServer +ENTRYPOINT ["/usr/bin/Gradido_LoginServer"] +#CMD Gradido_LoginServer diff --git a/login_server/Dockerfiles/alpine/Dockerfile.with_config b/login_server/Dockerfiles/alpine/Dockerfile.with_config new file mode 100644 index 000000000..f17be7040 --- /dev/null +++ b/login_server/Dockerfiles/alpine/Dockerfile.with_config @@ -0,0 +1,63 @@ + + +# Login Server build which contain the config file, found on docker hub with tag: +# gradido/login_server:with-config +# Used for community-server tests on staging + +######################################################################################################### +# Build release +######################################################################################################### +FROM gradido/login_dependencies:alpine-release-3 as release_default + +ENV DOCKER_WORKDIR="/code" +WORKDIR ${DOCKER_WORKDIR} + +COPY ./login_server/CMakeLists.txt.lib ./CMakeLists.txt +COPY ./login_server/src ./src +COPY ./login_server/dependencies/cmake-modules ./dependencies/cmake-modules +COPY ./login_server/dependencies/spirit-po ./dependencies/spirit-po +COPY ./login_server/dependencies/tinf ./dependencies/tinf +COPY ./login_server/scripts ./scripts + +RUN mkdir build && \ + cd build && \ + cmake -DCMAKE_BUILD_TYPE=Release .. && \ + make -j$(nproc) Gradido_LoginServer + +RUN cd scripts && \ + chmod +x compile_pot.sh && \ + ./compile_pot.sh + + +######################################################################################################### +# run release with docker default config +######################################################################################################### +#From alpine:latest as login_server +FROM alpine:3.13.5 as login_server_default + +USER root +WORKDIR "/usr/bin" + +COPY --from=release_default /code/build/bin/Gradido_LoginServer /usr/bin/ + +COPY --from=release_default /usr/local/lib/mariadb/libmariadb.so.3 /usr/local/lib/ +COPY --from=release_default /usr/local/lib/libPoco* /usr/local/lib/ +COPY --from=release_default /usr/lib/libsodium.so.23 /usr/lib/ +COPY --from=release_default /usr/lib/libstdc++.so.6 /usr/lib/ +COPY --from=release_default /usr/lib/libgcc_s.so.1 /usr/lib/ + +COPY ./configs/login_server/grd_login.properties /etc/grd_login/ +COPY ./configs/login_server/cacert.pem /etc/grd_login/ +COPY ./configs/login_server/LOCALE /etc/grd_login/ + +EXPOSE 1200 +EXPOSE 1201 + +RUN chmod +x /usr/bin/Gradido_LoginServer +ENTRYPOINT ["/usr/bin/Gradido_LoginServer"] +#CMD Gradido_LoginServer + + + + +