mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
read in login the real client ip X-Real-IP from nginx forwarded not from community server
This commit is contained in:
parent
425a2beb9f
commit
512d307a19
3
.gitmodules
vendored
3
.gitmodules
vendored
@ -13,3 +13,6 @@
|
||||
[submodule "dependencies/spirit-po"]
|
||||
path = dependencies/spirit-po
|
||||
url = https://github.com/cbeck88/spirit-po.git
|
||||
[submodule "dependencies/protobuf"]
|
||||
path = dependencies/protobuf
|
||||
url = https://github.com/protocolbuffers/protobuf.git
|
||||
|
||||
354
CMakeLists.txt
354
CMakeLists.txt
@ -1,177 +1,177 @@
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
project(Gradido_LoginServer C CXX)
|
||||
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin" )
|
||||
|
||||
SET ( CMAKE_CXX_FLAGS "-std=c++17" )
|
||||
|
||||
include_directories(
|
||||
"dependencies"
|
||||
"dependencies/tinf/src/"
|
||||
"dependencies/iroha-ed25519/include"
|
||||
"dependencies/mariadb-connector-c/include"
|
||||
"dependencies/mariadb-connector-c/build/include"
|
||||
"dependencies/spirit-po/include"
|
||||
"src/cpp/proto"
|
||||
#"dependencies/mariadb-connector-c/build/include"
|
||||
#"dependencies/mariadb-connector-c/include"
|
||||
#"import/mariadb/include"
|
||||
)
|
||||
|
||||
|
||||
FILE(GLOB CONTROLLER "src/cpp/controller/*.cpp" "src/cpp/controller/*.h")
|
||||
FILE(GLOB TINF "dependencies/tinf/src/*.c" "dependencies/tinf/src/*.h")
|
||||
FILE(GLOB HTTPInterface "src/cpp/HTTPInterface/*.h" "src/cpp/HTTPInterface/*.cpp")
|
||||
FILE(GLOB JSONInterface "src/cpp/JSONInterface/*.h" "src/cpp/JSONInterface/*.cpp")
|
||||
FILE(GLOB TASKS "src/cpp/tasks/*.cpp" "src/cpp/tasks/*.h")
|
||||
FILE(GLOB SINGLETON_MANAGER "src/cpp/SingletonManager/*.h" "src/cpp/SingletonManager/*.cpp")
|
||||
FILE(GLOB LIB_SRC "src/cpp/lib/*.h" "src/cpp/lib/*.cpp")
|
||||
FILE(GLOB MODEL "src/cpp/model/*.h" "src/cpp/model/*.cpp")
|
||||
FILE(GLOB MODEL_TABLE "src/cpp/model/table/*.h" "src/cpp/model/table/*.cpp")
|
||||
FILE(GLOB MODEL_EMAIL "src/cpp/model/email/*.h" "src/cpp/model/email/*.cpp")
|
||||
FILE(GLOB CRYPTO "src/cpp/Crypto/*.h" "src/cpp/Crypto/*.cpp")
|
||||
FILE(GLOB MAIN "src/cpp/*.cpp" "src/cpp/*.c" "src/cpp/*.h")
|
||||
FILE(GLOB MYSQL "src/cpp/MySQL/*.cpp" "src/cpp/MySQL/*.h" "src/cpp/MySQL/Poco/*.h")
|
||||
FILE(GLOB PROTO_GRADIDO "src/cpp/proto/gradido/*.cc" "src/cpp/proto/gradido/*.h")
|
||||
FILE(GLOB PROTO_HEDERA "src/cpp/proto/hedera/*.cc" "src/cpp/proto/hedera/*.h")
|
||||
|
||||
# used only for test project
|
||||
FILE(GLOB TEST "src/cpp/test/*.cpp" "src/cpp/test/*.h")
|
||||
FILE(GLOB TEST_CRYPTO "src/cpp/test/crypto/*.cpp" "src/cpp/test/crypto/*.h")
|
||||
FILE(GLOB TEST_MODEL "src/cpp/test/model/*.cpp" "src/cpp/test/model/*.h")
|
||||
FILE(GLOB TEST_MODEL_TABLE "src/cpp/test/model/table/*.cpp" "src/cpp/test/model/table/*.h")
|
||||
FILE(GLOB TEST_CONTROLLER "src/cpp/test/controller/*.cpp" "src/cpp/test/controller/*.h")
|
||||
|
||||
SET(LOCAL_SRCS
|
||||
${CONTROLLER} ${TINF} ${MAIN} ${HTTPInterface}
|
||||
${JSONInterface} ${CRYPTO} ${MODEL} ${MODEL_TABLE} ${MODEL_EMAIL}
|
||||
${SINGLETON_MANAGER} ${LIB_SRC} ${MYSQL} ${TASKS}
|
||||
${PROTO_GRADIDO} ${PROTO_HEDERA}
|
||||
)
|
||||
SET(LOCAL_TEST_SRC
|
||||
${TEST} ${TEST_CRYPTO} ${TEST_MODEL} ${TEST_MODEL_TABLE} ${TEST_CONTROLLER}
|
||||
)
|
||||
aux_source_directory("src/cpp" LOCAL_SRCS)
|
||||
|
||||
if(MSVC)
|
||||
# src
|
||||
source_group("controller" FILES ${CONTROLLER})
|
||||
source_group("proto\\gradido" FILES ${PROTO_GRADIDO})
|
||||
source_group("proto\\hedera" FILES ${PROTO_HEDERA})
|
||||
source_group("tinf" FILES ${TINF})
|
||||
source_group("Crypto" FILES ${CRYPTO})
|
||||
source_group("tasks" FILES ${TASKS})
|
||||
source_group("model\\table" FILES ${MODEL_TABLE})
|
||||
source_group("model\\email" FILES ${MODEL_EMAIL})
|
||||
source_group("model" FILES ${MODEL})
|
||||
source_group("mysql" FILES ${MYSQL})
|
||||
source_group("SingletonManager" FILES ${SINGLETON_MANAGER})
|
||||
source_group("lib" FILES ${LIB_SRC})
|
||||
source_group("HTTP-Interface" FILES ${HTTPInterface})
|
||||
source_group("Json-Interface" FILES ${JSONInterface})
|
||||
source_group("Test\\crypto" FILES ${TEST_CRYPTO})
|
||||
source_group("Test\\model\\table" FILES ${TEST_MODEL_TABLE})
|
||||
source_group("Test\\model" FILES ${TEST_MODEL})
|
||||
source_group("Test\\controller" FILES ${TEST_CONTROLLER})
|
||||
source_group("Test" FILES ${TEST})
|
||||
endif(MSVC)
|
||||
|
||||
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
|
||||
conan_basic_setup()
|
||||
|
||||
#add_subdirectory("dependencies/curl")
|
||||
#add_subdirectory("dependencies/mariadb-connector-c")
|
||||
|
||||
|
||||
add_executable(Gradido_LoginServer ${LOCAL_SRCS})
|
||||
#SUBDIRS("src/test")
|
||||
|
||||
if(WIN32)
|
||||
|
||||
find_library(MYSQL_LIBRARIES mariadbclient.lib PATHS "dependencies/mariadb-connector-c/build/libmariadb/Release" REQUIRED)
|
||||
#find_library(MYSQL_LIBRARIES_DEBUG mariadbclient.lib PATHS "import/mariadb/lib/debug")
|
||||
find_library(COMPILED_MARIADB_CLIENT_DEBUG mariadbclient PATHS "dependencies/mariadb-connector-c/build/libmariadb/Debug" REQUIRED)
|
||||
find_library(IROHA_ED25519 ed25519 PATHS "dependencies/iroha-ed25519/build/Debug" REQUIRED)
|
||||
set(MYSQL_INCLUDE_DIR "dependencies/mariadb-connector-c/include")
|
||||
|
||||
#set(POCO_DEBUG_PATH "I:/FremdCode/C++/poco/win64/lib/Debug")
|
||||
|
||||
#find_library(POCO_DEBUG_FOUNDATION PocoFoundationd PocoFoundation PATHS ${POCO_DEBUG_PATH} REQUIRED)
|
||||
#find_library(POCO_DEBUG_DATA PocoDatad PocoData PATHS ${POCO_DEBUG_PATH} REQUIRED)
|
||||
#find_library(POCO_DEBUG_NET PocoNetd PocoNet PATHS ${POCO_DEBUG_PATH} REQUIRED)
|
||||
#find_library(POCO_DEBUG_NET_SSL PocoNetSSLd PocoNetSSL PATHS ${POCO_DEBUG_PATH} REQUIRED)
|
||||
#find_library(POCO_DEBUG_UTIL PocoUtild PocoUtil PATHS ${POCO_DEBUG_PATH} REQUIRED)
|
||||
#find_library(POCO_DEBUG_CRYPTO PocoCryptod PocoCrypto PATHS ${POCO_DEBUG_PATH} REQUIRED)
|
||||
|
||||
#set(POCO_DEBUG_LIBS ${POCO_DEBUG_FOUNDATION} ${POCO_DEBUG_UTIL} ${POCO_DEBUG_DATA} ${POCO_DEBUG_NET} ${POCO_DEBUG_NET_SSL} ${POCO_DEBUG_CRYPTO})
|
||||
#include_directories(
|
||||
# "I:/FremdCode/C++/poco/Foundation/include"
|
||||
# "I:/FremdCode/C++/poco/Data/include"
|
||||
# "I:/FremdCode/C++/poco/Net/include"
|
||||
#"I:/FremdCode/C++/poco/NetSSL_Win/include"
|
||||
# "I:/FremdCode/C++/poco/NetSSL_OpenSSL/include"
|
||||
# "I:/FremdCode/C++/poco/Crypto/include"
|
||||
# "I:/FremdCode/C++/poco/Util/include"
|
||||
# "I:/FremdCode/C++/ssl/include"
|
||||
#)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "/MP /EHsc")
|
||||
#set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3")
|
||||
#set(CMAKE_CXX_FLAGS_RELEASE "-O3")
|
||||
|
||||
else()
|
||||
|
||||
find_library(IROHA_ED25519 ed25519 PATHS "dependencies/iroha-ed25519/build" REQUIRED)
|
||||
# set vars for mariadb cmake files
|
||||
set(INSTALL_BINDIR "bin")
|
||||
set(INSTALL_PLUGINDIR "bin")
|
||||
add_subdirectory("dependencies/mariadb-connector-c")
|
||||
|
||||
|
||||
include_directories(
|
||||
"dependencies/mariadb-connector-c/include"
|
||||
"build/dependencies/mariadb-connector-c/include"
|
||||
)
|
||||
|
||||
|
||||
|
||||
endif()
|
||||
|
||||
target_link_libraries(Gradido_LoginServer ${CONAN_LIBS} ${IROHA_ED25519})
|
||||
if(WIN32)
|
||||
TARGET_LINK_LIBRARIES(Gradido_LoginServer optimized ${MYSQL_LIBRARIES} Shlwapi)
|
||||
TARGET_LINK_LIBRARIES(Gradido_LoginServer debug ${COMPILED_MARIADB_CLIENT_DEBUG} Shlwapi)
|
||||
else()
|
||||
target_link_libraries(Gradido_LoginServer libmariadb -pthread)
|
||||
endif()
|
||||
|
||||
# install
|
||||
if(UNIX)
|
||||
install(TARGETS Gradido_LoginServer RUNTIME DESTINATION /usr/local/bin)
|
||||
#install(FILES lib/libmariadb /usr/local/lib)
|
||||
install(FILES DESTINATION lib COMPONENT libmariadb)
|
||||
install(DIRECTORY src/LOCALE DESTINATION /etc/grd_login/
|
||||
FILES_MATCHING PATTERN "*.po(t)")
|
||||
|
||||
|
||||
endif(UNIX)
|
||||
|
||||
enable_testing()
|
||||
|
||||
# ---------------------- Test -----------------------------------------
|
||||
#project(Gradido_LoginServer_Test C CXX)
|
||||
#_TEST_BUILD
|
||||
|
||||
|
||||
add_executable(Gradido_LoginServer_Test ${LOCAL_SRCS} ${LOCAL_TEST_SRC})
|
||||
target_compile_definitions(Gradido_LoginServer_Test PUBLIC "_TEST_BUILD")
|
||||
|
||||
target_link_libraries(Gradido_LoginServer_Test ${CONAN_LIBS} ${IROHA_ED25519})
|
||||
|
||||
if(WIN32)
|
||||
TARGET_LINK_LIBRARIES(Gradido_LoginServer_Test optimized ${MYSQL_LIBRARIES} Shlwapi)
|
||||
TARGET_LINK_LIBRARIES(Gradido_LoginServer_Test debug ${COMPILED_MARIADB_CLIENT_DEBUG} Shlwapi)
|
||||
else()
|
||||
target_link_libraries(Gradido_LoginServer_Test libmariadb -pthread)
|
||||
endif()
|
||||
|
||||
add_test(NAME main COMMAND Gradido_LoginServer_Test)
|
||||
cmake_minimum_required(VERSION 3.0)
|
||||
project(Gradido_LoginServer C CXX)
|
||||
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin" )
|
||||
|
||||
SET ( CMAKE_CXX_FLAGS "-std=c++17" )
|
||||
|
||||
include_directories(
|
||||
"dependencies"
|
||||
"dependencies/tinf/src/"
|
||||
"dependencies/iroha-ed25519/include"
|
||||
"dependencies/mariadb-connector-c/include"
|
||||
"dependencies/mariadb-connector-c/build/include"
|
||||
"dependencies/spirit-po/include"
|
||||
"src/cpp/proto"
|
||||
#"dependencies/mariadb-connector-c/build/include"
|
||||
#"dependencies/mariadb-connector-c/include"
|
||||
#"import/mariadb/include"
|
||||
)
|
||||
|
||||
|
||||
FILE(GLOB CONTROLLER "src/cpp/controller/*.cpp" "src/cpp/controller/*.h")
|
||||
FILE(GLOB TINF "dependencies/tinf/src/*.c" "dependencies/tinf/src/*.h")
|
||||
FILE(GLOB HTTPInterface "src/cpp/HTTPInterface/*.h" "src/cpp/HTTPInterface/*.cpp")
|
||||
FILE(GLOB JSONInterface "src/cpp/JSONInterface/*.h" "src/cpp/JSONInterface/*.cpp")
|
||||
FILE(GLOB TASKS "src/cpp/tasks/*.cpp" "src/cpp/tasks/*.h")
|
||||
FILE(GLOB SINGLETON_MANAGER "src/cpp/SingletonManager/*.h" "src/cpp/SingletonManager/*.cpp")
|
||||
FILE(GLOB LIB_SRC "src/cpp/lib/*.h" "src/cpp/lib/*.cpp")
|
||||
FILE(GLOB MODEL "src/cpp/model/*.h" "src/cpp/model/*.cpp")
|
||||
FILE(GLOB MODEL_TABLE "src/cpp/model/table/*.h" "src/cpp/model/table/*.cpp")
|
||||
FILE(GLOB MODEL_EMAIL "src/cpp/model/email/*.h" "src/cpp/model/email/*.cpp")
|
||||
FILE(GLOB CRYPTO "src/cpp/Crypto/*.h" "src/cpp/Crypto/*.cpp")
|
||||
FILE(GLOB MAIN "src/cpp/*.cpp" "src/cpp/*.c" "src/cpp/*.h")
|
||||
FILE(GLOB MYSQL "src/cpp/MySQL/*.cpp" "src/cpp/MySQL/*.h" "src/cpp/MySQL/Poco/*.h")
|
||||
FILE(GLOB PROTO_GRADIDO "src/cpp/proto/gradido/*.cc" "src/cpp/proto/gradido/*.h")
|
||||
FILE(GLOB PROTO_HEDERA "src/cpp/proto/hedera/*.cc" "src/cpp/proto/hedera/*.h")
|
||||
|
||||
# used only for test project
|
||||
FILE(GLOB TEST "src/cpp/test/*.cpp" "src/cpp/test/*.h")
|
||||
FILE(GLOB TEST_CRYPTO "src/cpp/test/crypto/*.cpp" "src/cpp/test/crypto/*.h")
|
||||
FILE(GLOB TEST_MODEL "src/cpp/test/model/*.cpp" "src/cpp/test/model/*.h")
|
||||
FILE(GLOB TEST_MODEL_TABLE "src/cpp/test/model/table/*.cpp" "src/cpp/test/model/table/*.h")
|
||||
FILE(GLOB TEST_CONTROLLER "src/cpp/test/controller/*.cpp" "src/cpp/test/controller/*.h")
|
||||
|
||||
SET(LOCAL_SRCS
|
||||
${CONTROLLER} ${TINF} ${MAIN} ${HTTPInterface}
|
||||
${JSONInterface} ${CRYPTO} ${MODEL} ${MODEL_TABLE} ${MODEL_EMAIL}
|
||||
${SINGLETON_MANAGER} ${LIB_SRC} ${MYSQL} ${TASKS}
|
||||
${PROTO_GRADIDO} ${PROTO_HEDERA}
|
||||
)
|
||||
SET(LOCAL_TEST_SRC
|
||||
${TEST} ${TEST_CRYPTO} ${TEST_MODEL} ${TEST_MODEL_TABLE} ${TEST_CONTROLLER}
|
||||
)
|
||||
aux_source_directory("src/cpp" LOCAL_SRCS)
|
||||
|
||||
if(MSVC)
|
||||
# src
|
||||
source_group("controller" FILES ${CONTROLLER})
|
||||
source_group("proto\\gradido" FILES ${PROTO_GRADIDO})
|
||||
source_group("proto\\hedera" FILES ${PROTO_HEDERA})
|
||||
source_group("tinf" FILES ${TINF})
|
||||
source_group("Crypto" FILES ${CRYPTO})
|
||||
source_group("tasks" FILES ${TASKS})
|
||||
source_group("model\\table" FILES ${MODEL_TABLE})
|
||||
source_group("model\\email" FILES ${MODEL_EMAIL})
|
||||
source_group("model" FILES ${MODEL})
|
||||
source_group("mysql" FILES ${MYSQL})
|
||||
source_group("SingletonManager" FILES ${SINGLETON_MANAGER})
|
||||
source_group("lib" FILES ${LIB_SRC})
|
||||
source_group("HTTP-Interface" FILES ${HTTPInterface})
|
||||
source_group("Json-Interface" FILES ${JSONInterface})
|
||||
source_group("Test\\crypto" FILES ${TEST_CRYPTO})
|
||||
source_group("Test\\model\\table" FILES ${TEST_MODEL_TABLE})
|
||||
source_group("Test\\model" FILES ${TEST_MODEL})
|
||||
source_group("Test\\controller" FILES ${TEST_CONTROLLER})
|
||||
source_group("Test" FILES ${TEST})
|
||||
endif(MSVC)
|
||||
|
||||
include(${CMAKE_BINARY_DIR}/conanbuildinfo.cmake)
|
||||
conan_basic_setup()
|
||||
|
||||
#add_subdirectory("dependencies/curl")
|
||||
#add_subdirectory("dependencies/mariadb-connector-c")
|
||||
|
||||
|
||||
add_executable(Gradido_LoginServer ${LOCAL_SRCS})
|
||||
#SUBDIRS("src/test")
|
||||
|
||||
if(WIN32)
|
||||
|
||||
find_library(MYSQL_LIBRARIES mariadbclient.lib PATHS "dependencies/mariadb-connector-c/build/libmariadb/Release" REQUIRED)
|
||||
#find_library(MYSQL_LIBRARIES_DEBUG mariadbclient.lib PATHS "import/mariadb/lib/debug")
|
||||
find_library(COMPILED_MARIADB_CLIENT_DEBUG mariadbclient PATHS "dependencies/mariadb-connector-c/build/libmariadb/Debug" REQUIRED)
|
||||
find_library(IROHA_ED25519 ed25519 PATHS "dependencies/iroha-ed25519/build/Debug" REQUIRED)
|
||||
set(MYSQL_INCLUDE_DIR "dependencies/mariadb-connector-c/include")
|
||||
|
||||
#set(POCO_DEBUG_PATH "I:/FremdCode/C++/poco/win64/lib/Debug")
|
||||
|
||||
#find_library(POCO_DEBUG_FOUNDATION PocoFoundationd PocoFoundation PATHS ${POCO_DEBUG_PATH} REQUIRED)
|
||||
#find_library(POCO_DEBUG_DATA PocoDatad PocoData PATHS ${POCO_DEBUG_PATH} REQUIRED)
|
||||
#find_library(POCO_DEBUG_NET PocoNetd PocoNet PATHS ${POCO_DEBUG_PATH} REQUIRED)
|
||||
#find_library(POCO_DEBUG_NET_SSL PocoNetSSLd PocoNetSSL PATHS ${POCO_DEBUG_PATH} REQUIRED)
|
||||
#find_library(POCO_DEBUG_UTIL PocoUtild PocoUtil PATHS ${POCO_DEBUG_PATH} REQUIRED)
|
||||
#find_library(POCO_DEBUG_CRYPTO PocoCryptod PocoCrypto PATHS ${POCO_DEBUG_PATH} REQUIRED)
|
||||
|
||||
#set(POCO_DEBUG_LIBS ${POCO_DEBUG_FOUNDATION} ${POCO_DEBUG_UTIL} ${POCO_DEBUG_DATA} ${POCO_DEBUG_NET} ${POCO_DEBUG_NET_SSL} ${POCO_DEBUG_CRYPTO})
|
||||
#include_directories(
|
||||
# "I:/FremdCode/C++/poco/Foundation/include"
|
||||
# "I:/FremdCode/C++/poco/Data/include"
|
||||
# "I:/FremdCode/C++/poco/Net/include"
|
||||
#"I:/FremdCode/C++/poco/NetSSL_Win/include"
|
||||
# "I:/FremdCode/C++/poco/NetSSL_OpenSSL/include"
|
||||
# "I:/FremdCode/C++/poco/Crypto/include"
|
||||
# "I:/FremdCode/C++/poco/Util/include"
|
||||
# "I:/FremdCode/C++/ssl/include"
|
||||
#)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "/MP /EHsc")
|
||||
#set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3")
|
||||
#set(CMAKE_CXX_FLAGS_RELEASE "-O3")
|
||||
|
||||
else()
|
||||
|
||||
find_library(IROHA_ED25519 ed25519 PATHS "dependencies/iroha-ed25519/build" REQUIRED)
|
||||
# set vars for mariadb cmake files
|
||||
set(INSTALL_BINDIR "bin")
|
||||
set(INSTALL_PLUGINDIR "bin")
|
||||
add_subdirectory("dependencies/mariadb-connector-c")
|
||||
|
||||
|
||||
include_directories(
|
||||
"dependencies/mariadb-connector-c/include"
|
||||
"build/dependencies/mariadb-connector-c/include"
|
||||
)
|
||||
|
||||
|
||||
|
||||
endif()
|
||||
|
||||
target_link_libraries(Gradido_LoginServer ${CONAN_LIBS} ${IROHA_ED25519})
|
||||
if(WIN32)
|
||||
TARGET_LINK_LIBRARIES(Gradido_LoginServer optimized ${MYSQL_LIBRARIES} Shlwapi)
|
||||
TARGET_LINK_LIBRARIES(Gradido_LoginServer debug ${COMPILED_MARIADB_CLIENT_DEBUG} Shlwapi)
|
||||
else()
|
||||
target_link_libraries(Gradido_LoginServer libmariadb -pthread)
|
||||
endif()
|
||||
|
||||
# install
|
||||
if(UNIX)
|
||||
install(TARGETS Gradido_LoginServer RUNTIME DESTINATION /usr/local/bin)
|
||||
#install(FILES lib/libmariadb /usr/local/lib)
|
||||
install(FILES DESTINATION lib COMPONENT libmariadb)
|
||||
install(DIRECTORY src/LOCALE DESTINATION /etc/grd_login/
|
||||
FILES_MATCHING PATTERN "*.po(t)")
|
||||
|
||||
|
||||
endif(UNIX)
|
||||
|
||||
enable_testing()
|
||||
|
||||
# ---------------------- Test -----------------------------------------
|
||||
#project(Gradido_LoginServer_Test C CXX)
|
||||
#_TEST_BUILD
|
||||
|
||||
|
||||
add_executable(Gradido_LoginServer_Test ${LOCAL_SRCS} ${LOCAL_TEST_SRC})
|
||||
target_compile_definitions(Gradido_LoginServer_Test PUBLIC "_TEST_BUILD")
|
||||
|
||||
target_link_libraries(Gradido_LoginServer_Test ${CONAN_LIBS} ${IROHA_ED25519})
|
||||
|
||||
if(WIN32)
|
||||
TARGET_LINK_LIBRARIES(Gradido_LoginServer_Test optimized ${MYSQL_LIBRARIES} Shlwapi)
|
||||
TARGET_LINK_LIBRARIES(Gradido_LoginServer_Test debug ${COMPILED_MARIADB_CLIENT_DEBUG} Shlwapi)
|
||||
else()
|
||||
target_link_libraries(Gradido_LoginServer_Test libmariadb -pthread)
|
||||
endif()
|
||||
|
||||
add_test(NAME main COMMAND Gradido_LoginServer_Test)
|
||||
|
||||
134
Dockerfile
134
Dockerfile
@ -1,68 +1,68 @@
|
||||
# Build protoc
|
||||
FROM gcc:7.5 as protoc_build
|
||||
RUN git clone --recurse-submodules https://github.com/protocolbuffers/protobuf.git
|
||||
WORKDIR /protobuf
|
||||
|
||||
RUN git checkout v3.9.1
|
||||
RUN ./autogen.sh
|
||||
RUN ./configure --enable-static=yes
|
||||
RUN make -j$(grep processor /proc/cpuinfo | wc -l)
|
||||
RUN make check
|
||||
|
||||
CMD ["./protobuf"]
|
||||
|
||||
|
||||
# Build
|
||||
From conanio/gcc7 as build
|
||||
|
||||
ENV DOCKER_WORKDIR="/code"
|
||||
|
||||
USER root
|
||||
#RUN apt-get update && \
|
||||
# apt-get install -y --no-install-recommends protobuf-compiler libprotobuf-dev && \
|
||||
# apt-get autoclean && \
|
||||
# apt-get autoremove && \
|
||||
# apt-get clean && \
|
||||
# rm -rf /var/lib/apt/lists/*
|
||||
|
||||
#RUN grep processor /proc/cpuinfo | wc -l
|
||||
|
||||
COPY --from=protoc_build /protobuf/src/.libs/protoc /usr/bin/
|
||||
COPY --from=protoc_build /protobuf/src/.libs/libprotobuf.so.20.0.1 /usr/lib/libprotobuf.so.20
|
||||
COPY --from=protoc_build /protobuf/src/.libs/libprotoc.so.20.0.1 /usr/lib/libprotoc.so.20
|
||||
COPY --from=protoc_build /protobuf/src/google/protobuf/*.proto /usr/include/google/protobuf/
|
||||
COPY --from=protoc_build /protobuf/src/google/protobuf/*.h /usr/include/google/protobuf/
|
||||
|
||||
|
||||
RUN mkdir -p ${DOCKER_WORKDIR}
|
||||
WORKDIR ${DOCKER_WORKDIR}
|
||||
|
||||
COPY . .
|
||||
RUN git submodule update --init --recursive
|
||||
RUN ls -la
|
||||
RUN cd dependencies/iroha-ed25519 && \
|
||||
ls -la && \
|
||||
mkdir build && \
|
||||
cd build && \
|
||||
cmake .. -DEDIMPL=ref10 -DHASH=sha2_sphlib -DRANDOM=bcryptgen -DBUILD=STATIC && \
|
||||
make -j$(grep processor /proc/cpuinfo | wc -l)
|
||||
|
||||
RUN cd dependencies/mariadb-connector-c && \
|
||||
mkdir build && \
|
||||
cd build && \
|
||||
cmake -DWITH_SSL=OFF ..
|
||||
|
||||
#RUN conan profile update settings.compiler.libcxx=libstdc++11 default
|
||||
RUN chmod +x compile_proto.sh
|
||||
RUN chmod +x compile_pot.sh
|
||||
RUN ls -la
|
||||
RUN ./compile_pot.sh
|
||||
RUN ./compile_proto.sh
|
||||
RUN mkdir build && \
|
||||
cd build && \
|
||||
conan install .. --build=missing && \
|
||||
cmake .. && \
|
||||
make -j$(grep processor /proc/cpuinfo | wc -l)
|
||||
|
||||
# deploy
|
||||
# Build protoc
|
||||
FROM gcc:7.5 as protoc_build
|
||||
RUN git clone --recurse-submodules https://github.com/protocolbuffers/protobuf.git
|
||||
WORKDIR /protobuf
|
||||
|
||||
RUN git checkout v3.9.1
|
||||
RUN ./autogen.sh
|
||||
RUN ./configure --enable-static=yes
|
||||
RUN make -j$(grep processor /proc/cpuinfo | wc -l)
|
||||
RUN make check
|
||||
|
||||
CMD ["./protobuf"]
|
||||
|
||||
|
||||
# Build
|
||||
From conanio/gcc7 as build
|
||||
|
||||
ENV DOCKER_WORKDIR="/code"
|
||||
|
||||
USER root
|
||||
#RUN apt-get update && \
|
||||
# apt-get install -y --no-install-recommends protobuf-compiler libprotobuf-dev && \
|
||||
# apt-get autoclean && \
|
||||
# apt-get autoremove && \
|
||||
# apt-get clean && \
|
||||
# rm -rf /var/lib/apt/lists/*
|
||||
|
||||
#RUN grep processor /proc/cpuinfo | wc -l
|
||||
|
||||
COPY --from=protoc_build /protobuf/src/.libs/protoc /usr/bin/
|
||||
COPY --from=protoc_build /protobuf/src/.libs/libprotobuf.so.20.0.1 /usr/lib/libprotobuf.so.20
|
||||
COPY --from=protoc_build /protobuf/src/.libs/libprotoc.so.20.0.1 /usr/lib/libprotoc.so.20
|
||||
COPY --from=protoc_build /protobuf/src/google/protobuf/*.proto /usr/include/google/protobuf/
|
||||
COPY --from=protoc_build /protobuf/src/google/protobuf/*.h /usr/include/google/protobuf/
|
||||
|
||||
|
||||
RUN mkdir -p ${DOCKER_WORKDIR}
|
||||
WORKDIR ${DOCKER_WORKDIR}
|
||||
|
||||
COPY . .
|
||||
RUN git submodule update --init --recursive
|
||||
RUN ls -la
|
||||
RUN cd dependencies/iroha-ed25519 && \
|
||||
ls -la && \
|
||||
mkdir build && \
|
||||
cd build && \
|
||||
cmake .. -DEDIMPL=ref10 -DHASH=sha2_sphlib -DRANDOM=bcryptgen -DBUILD=STATIC && \
|
||||
make -j$(grep processor /proc/cpuinfo | wc -l)
|
||||
|
||||
RUN cd dependencies/mariadb-connector-c && \
|
||||
mkdir build && \
|
||||
cd build && \
|
||||
cmake -DWITH_SSL=OFF ..
|
||||
|
||||
#RUN conan profile update settings.compiler.libcxx=libstdc++11 default
|
||||
RUN chmod +x compile_proto.sh
|
||||
RUN chmod +x compile_pot.sh
|
||||
RUN ls -la
|
||||
RUN ./compile_pot.sh
|
||||
RUN ./compile_proto.sh
|
||||
RUN mkdir build && \
|
||||
cd build && \
|
||||
conan install .. --build=missing && \
|
||||
cmake .. && \
|
||||
make -j$(grep processor /proc/cpuinfo | wc -l)
|
||||
|
||||
# deploy
|
||||
#From
|
||||
@ -1,362 +1,365 @@
|
||||
#include "LoginPage.h"
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
#include "Poco/Net/HTTPServerResponse.h"
|
||||
#include "Poco/Net/HTMLForm.h"
|
||||
#include "Poco/DeflatingStream.h"
|
||||
|
||||
|
||||
#line 7 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
|
||||
#include "../gettext.h"
|
||||
|
||||
#include "Poco/Net/HTTPCookie.h"
|
||||
#include "Poco/Net/HTTPServerParams.h"
|
||||
#include "Poco/Logger.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../SingletonManager/LanguageManager.h"
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
|
||||
#line 1 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
LoginPage::LoginPage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response)
|
||||
{
|
||||
response.setChunkedTransferEncoding(true);
|
||||
response.setContentType("text/html");
|
||||
bool _compressResponse(request.hasToken("Accept-Encoding", "gzip"));
|
||||
if (_compressResponse) response.set("Content-Encoding", "gzip");
|
||||
|
||||
Poco::Net::HTMLForm form(request, request.stream());
|
||||
#line 18 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
|
||||
const char* pageName = "Login";
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto lm = LanguageManager::getInstance();
|
||||
auto em = ErrorManager::getInstance();
|
||||
|
||||
auto lang = chooseLanguage(request);
|
||||
//printf("choose language return: %d\n", lang);
|
||||
auto langCatalog = lm->getFreeCatalog(lang);
|
||||
|
||||
std::string presetEmail("");
|
||||
if(mSession && mSession->getUser()) {
|
||||
presetEmail = mSession->getUser()->getEmail();
|
||||
}
|
||||
|
||||
if(!form.empty()) {
|
||||
|
||||
bool langUpdatedByBtn = false;
|
||||
auto langBtn = form.get("lang", "");
|
||||
if(langBtn != "") {
|
||||
langUpdatedByBtn = true;
|
||||
}
|
||||
/*
|
||||
auto langInput = form.get("lang", "");
|
||||
auto updatedLang = LANG_NULL;
|
||||
if(langBtn != "") {
|
||||
updatedLang = chooseLanguage(request, langBtn);
|
||||
langUpdatedByBtn = true;
|
||||
} else if(langInput != "") {
|
||||
updatedLang = chooseLanguage(request, langInput);
|
||||
}
|
||||
|
||||
if(updatedLang != LANG_NULL && updatedLang != lang) {
|
||||
lang = updatedLang;
|
||||
langCatalog = lm->getFreeCatalog(lang);
|
||||
}
|
||||
*/
|
||||
auto email = form.get("login-email", "");
|
||||
auto password = form.get("login-password", "");
|
||||
|
||||
if(email != "" && password != "") {
|
||||
//auto session = sm->getSession(request);
|
||||
//if(!mSession) mSession = sm->findByEmail(email);
|
||||
if(!mSession) {
|
||||
mSession = sm->getNewSession();
|
||||
mSession->setLanguageCatalog(langCatalog);
|
||||
// get language
|
||||
// first check url, second check language header
|
||||
// for debugging client ip
|
||||
auto client_ip = request.clientAddress();
|
||||
std::string clientIpString = "client ip: ";
|
||||
clientIpString += client_ip.toString();
|
||||
Poco::Logger::get("requestLog").information(clientIpString);
|
||||
// debugging end
|
||||
auto user_host = request.clientAddress().host();
|
||||
mSession->setClientIp(user_host);
|
||||
response.addCookie(mSession->getLoginCookie());
|
||||
} else {
|
||||
langCatalog = mSession->getLanguageCatalog();
|
||||
}
|
||||
UserStates user_state;
|
||||
try {
|
||||
user_state = mSession->loadUser(email, password);
|
||||
} catch (Poco::Exception& ex) {
|
||||
addError(new ParamError("login", "exception by calling loadUser: ", ex.displayText()));
|
||||
sendErrorsAsEmail();
|
||||
addError(new Error("Error", "Intern Server error, please try again later"));
|
||||
}
|
||||
auto user = mSession->getNewUser();
|
||||
|
||||
if(user_state >= USER_LOADED_FROM_DB && !user->getModel()->getPublicKey()) {
|
||||
if(mSession->generateKeys(true, true)) {
|
||||
user_state = USER_COMPLETE;
|
||||
if(user->getModel()->isDisabled()) {
|
||||
user_state = USER_DISABLED;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//printf("pubkey exist: %p\n",user->getModel()->getPublicKey());
|
||||
}
|
||||
getErrors(mSession);
|
||||
|
||||
auto uri_start = request.serverParams().getServerName();
|
||||
auto lastExternReferer = mSession->getLastReferer();
|
||||
|
||||
printf("user_state: %d\n", user_state);
|
||||
|
||||
switch(user_state) {
|
||||
case USER_EMPTY:
|
||||
case USER_PASSWORD_INCORRECT:
|
||||
addError(new Error(langCatalog->gettext("Login"), langCatalog->gettext("E-Mail or password isn't right, please try again!")), false);
|
||||
if(mSession) {
|
||||
getErrors(mSession);
|
||||
sm->releaseSession(mSession);
|
||||
}
|
||||
sm->deleteLoginCookies(request, response);
|
||||
break;
|
||||
case USER_PASSWORD_ENCRYPTION_IN_PROCESS:
|
||||
addError(new Error(langCatalog->gettext("Passwort"), langCatalog->gettext("Passwort wird noch berechnet, bitte versuche es in etwa 1 Minute erneut.")), false);
|
||||
break;
|
||||
case USER_KEYS_DONT_MATCH:
|
||||
addError(new Error(langCatalog->gettext("User"), langCatalog->gettext("Error in saved data, the server admin will look at it.")));
|
||||
break;
|
||||
case USER_DISABLED:
|
||||
addError(new Error(langCatalog->gettext("User"), langCatalog->gettext("Benutzer ist deaktiviert, kein Login möglich!")));
|
||||
if(mSession) {
|
||||
getErrors(mSession);
|
||||
sm->releaseSession(mSession);
|
||||
}
|
||||
sm->deleteLoginCookies(request, response);
|
||||
break;
|
||||
case USER_NO_PRIVATE_KEY:
|
||||
case USER_COMPLETE:
|
||||
case USER_EMAIL_NOT_ACTIVATED:
|
||||
auto referer = request.find("Referer");
|
||||
std::string refererString;
|
||||
if (referer != request.end()) {
|
||||
refererString = referer->second;
|
||||
}
|
||||
if(lastExternReferer != "") {
|
||||
//printf("redirect to: %s\n", lastExternReferer.data());
|
||||
response.redirect(lastExternReferer);
|
||||
} else if(refererString != "" &&
|
||||
refererString.find("login") == std::string::npos &&
|
||||
refererString.find("logout") == std::string::npos &&
|
||||
refererString.find("user_delete") == std::string::npos &&
|
||||
refererString != ServerConfig::g_serverPath + request.getURI()) {
|
||||
std::string uri = request.getURI();
|
||||
printf("request uri: %s, redirect to: %s\n", uri.data(), refererString.data());
|
||||
response.redirect(refererString);
|
||||
} else {
|
||||
//printf("redirect to: %s\n", ServerConfig::g_php_serverPath.data());
|
||||
response.redirect(ServerConfig::g_php_serverPath + "/");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
} else if(!langUpdatedByBtn) {
|
||||
addError(new Error(langCatalog->gettext("Login"), langCatalog->gettext("Username and password are needed!")), false);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
// on enter login page with empty form
|
||||
//auto session = sm->getSession(request);
|
||||
// remove old cookies and session if exist
|
||||
if(mSession) {
|
||||
getErrors(mSession);
|
||||
sm->releaseSession(mSession);
|
||||
}
|
||||
sm->deleteLoginCookies(request, response);
|
||||
}
|
||||
|
||||
#line 3 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
|
||||
bool withMaterialIcons = false;
|
||||
std::ostream& _responseStream = response.send();
|
||||
Poco::DeflatingOutputStream _gzipStream(_responseStream, Poco::DeflatingStreamBuf::STREAM_GZIP, 1);
|
||||
std::ostream& responseStream = _compressResponse ? _gzipStream : _responseStream;
|
||||
responseStream << "\n";
|
||||
// begin include header.cpsp
|
||||
responseStream << "\n";
|
||||
responseStream << "<!DOCTYPE html>\n";
|
||||
responseStream << "<html>\n";
|
||||
responseStream << "<head>\n";
|
||||
responseStream << "<meta charset=\"UTF-8\">\n";
|
||||
responseStream << "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n";
|
||||
responseStream << "<title>Gradido Login Server: ";
|
||||
#line 11 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( pageName );
|
||||
responseStream << "</title>\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 12 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/main.css\">\n";
|
||||
#line 13 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
if(withMaterialIcons) { responseStream << "\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 14 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/materialdesignicons.min.css\">\n";
|
||||
#line 15 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</head>\n";
|
||||
responseStream << "<body>\n";
|
||||
responseStream << " <div class=\"layout\">\n";
|
||||
responseStream << " <div class=\"center-form-single\">\n";
|
||||
responseStream << " <div class=\"center-form-header\">\n";
|
||||
responseStream << " <a href=\"";
|
||||
#line 21 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "\" class=\"center-logo\">\n";
|
||||
responseStream << " <picture>\n";
|
||||
responseStream << " <source srcset=\"";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_schrift.webp\" type=\"image/webp\">\n";
|
||||
responseStream << " <source srcset=\"";
|
||||
#line 24 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_schrift.png\" type=\"image/png\">\n";
|
||||
responseStream << " <img src=\"";
|
||||
#line 25 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_schrift.png\" alt=\"logo\" />\n";
|
||||
responseStream << " </picture>\n";
|
||||
responseStream << " </a>\n";
|
||||
responseStream << " </div>";
|
||||
// end include header.cpsp
|
||||
responseStream << "\n";
|
||||
#line 172 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "<!--<input type=\"hidden\" name=\"lang\" value=\"";
|
||||
#line 173 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( LanguageManager::keyForLanguage(lang) );
|
||||
responseStream << "\">-->\n";
|
||||
responseStream << "<div class=\"center-form-container\">\n";
|
||||
responseStream << " ";
|
||||
// begin include flags.cpsp
|
||||
responseStream << "<div class=\"center-form-selectors\">\n";
|
||||
responseStream << "<form method=\"GET\" action=\"\">\n";
|
||||
responseStream << "\t<button id=\"flag-england\" name=\"lang\" value=\"en\" title=\"English\" type=\"submit\" ";
|
||||
#line 3 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\flags.cpsp"
|
||||
if(lang != LANG_EN) { responseStream << "class=\"flag-btn\"";
|
||||
#line 3 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\flags.cpsp"
|
||||
}
|
||||
else { responseStream << "class=\"flag-btn\" disabled";
|
||||
#line 4 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\flags.cpsp"
|
||||
} responseStream << ">\n";
|
||||
responseStream << "\t <span class=\"flag flag-england\"></span>\n";
|
||||
responseStream << "\t</button>\n";
|
||||
responseStream << "\t<button id=\"flag-germany\" name=\"lang\" value=\"de\" title=\"Deutsch\" type=\"submit\" ";
|
||||
#line 7 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\flags.cpsp"
|
||||
if(lang != LANG_DE) { responseStream << "class=\"flag-btn\"";
|
||||
#line 7 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\flags.cpsp"
|
||||
}
|
||||
else { responseStream << "class=\"flag-btn\" disabled";
|
||||
#line 8 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\flags.cpsp"
|
||||
} responseStream << ">\n";
|
||||
responseStream << "\t <span class=\"flag flag-germany\"></span>\n";
|
||||
responseStream << "\t</button>\n";
|
||||
responseStream << "</form>\n";
|
||||
responseStream << "</div>";
|
||||
// end include flags.cpsp
|
||||
responseStream << "\n";
|
||||
responseStream << " <div class=\"center-form-form\">\n";
|
||||
responseStream << "\t\t<form action=\"";
|
||||
#line 177 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
responseStream << "/\" method=\"POST\">\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" type=\"text\" name=\"login-email\" placeholder=\"";
|
||||
#line 178 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext("E-Mail") );
|
||||
responseStream << "\" value=\"";
|
||||
#line 178 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( presetEmail );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" type=\"password\" name=\"login-password\" placeholder=\"";
|
||||
#line 179 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Password") );
|
||||
responseStream << "\" />\n";
|
||||
responseStream << "\t\t <button type=\"submit\" name=\"submit\" class=\"center-form-submit form-button\">";
|
||||
#line 180 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext(" Login ") );
|
||||
responseStream << "</button>\n";
|
||||
responseStream << "\t\t</form>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"center-form-bottom\">\n";
|
||||
responseStream << " <div class=\"signup-link\">\n";
|
||||
responseStream << "\t <p>";
|
||||
#line 185 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext("You haven't any account yet? Please follow the link to create one.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t <a href=\"https://elopage.com/s/gradido/registration-de/payment?locale=de\">\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 187 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Create New Account") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t </a>\n";
|
||||
responseStream << "\t </div>\n";
|
||||
responseStream << "\t\t<div class=\"reset-pwd-link\">\n";
|
||||
responseStream << "\t\t\t<a href=\"";
|
||||
#line 191 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
responseStream << "/resetPassword\">";
|
||||
#line 191 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Passwort vergessen") );
|
||||
responseStream << "</a>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "<p> </p>\n";
|
||||
responseStream << "<div class=\"container\">\n";
|
||||
responseStream << "\t<a href=\"https://docs.google.com/document/d/1jZp-DiiMPI9ZPNXmjsvOQ1BtnfDFfx8BX7CDmA8KKjY/edit?usp=sharing\" target=\"_blank\">Zum Whitepaper</a>\n";
|
||||
responseStream << "\t<br>\n";
|
||||
responseStream << "\t<br>\n";
|
||||
responseStream << "\t<a href=\"https://docs.google.com/document/d/1kcX1guOi6tDgnFHD9tf7fB_MneKTx-0nHJxzdN8ygNs/edit?usp=sharing\" target=\"_blank\">To the Whitepaper</a>\n";
|
||||
responseStream << "</div>\n";
|
||||
// begin include footer.cpsp
|
||||
responseStream << " <div class=\"center-bottom\">\n";
|
||||
responseStream << " <p>Copyright © Gradido 2020</p>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"bottomleft\">\n";
|
||||
responseStream << " ";
|
||||
#line 6 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\footer.cpsp"
|
||||
responseStream << ( mTimeProfiler.string() );
|
||||
responseStream << "\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"bottomright\">\n";
|
||||
responseStream << " <p>Login Server in Entwicklung</p>\n";
|
||||
responseStream << " <p>Alpha ";
|
||||
#line 10 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\footer.cpsp"
|
||||
responseStream << ( ServerConfig::g_versionString );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << "</body>\n";
|
||||
responseStream << "\n";
|
||||
responseStream << "</html>";
|
||||
// end include footer.cpsp
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
#include "LoginPage.h"
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
#include "Poco/Net/HTTPServerResponse.h"
|
||||
#include "Poco/Net/HTMLForm.h"
|
||||
#include "Poco/DeflatingStream.h"
|
||||
|
||||
|
||||
#line 7 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\login.cpsp"
|
||||
|
||||
#include "../gettext.h"
|
||||
|
||||
#include "Poco/Net/HTTPCookie.h"
|
||||
#include "Poco/Net/HTTPServerParams.h"
|
||||
#include "Poco/Logger.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../SingletonManager/LanguageManager.h"
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
|
||||
#line 1 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\header.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
LoginPage::LoginPage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response)
|
||||
{
|
||||
response.setChunkedTransferEncoding(true);
|
||||
response.setContentType("text/html");
|
||||
bool _compressResponse(request.hasToken("Accept-Encoding", "gzip"));
|
||||
if (_compressResponse) response.set("Content-Encoding", "gzip");
|
||||
|
||||
Poco::Net::HTMLForm form(request, request.stream());
|
||||
#line 18 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\login.cpsp"
|
||||
|
||||
const char* pageName = "Login";
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto lm = LanguageManager::getInstance();
|
||||
auto em = ErrorManager::getInstance();
|
||||
|
||||
auto lang = chooseLanguage(request);
|
||||
//printf("choose language return: %d\n", lang);
|
||||
auto langCatalog = lm->getFreeCatalog(lang);
|
||||
|
||||
std::string presetEmail("");
|
||||
if(mSession && mSession->getUser()) {
|
||||
presetEmail = mSession->getUser()->getEmail();
|
||||
}
|
||||
|
||||
if(!form.empty()) {
|
||||
|
||||
bool langUpdatedByBtn = false;
|
||||
auto langBtn = form.get("lang", "");
|
||||
if(langBtn != "") {
|
||||
langUpdatedByBtn = true;
|
||||
}
|
||||
/*
|
||||
auto langInput = form.get("lang", "");
|
||||
auto updatedLang = LANG_NULL;
|
||||
if(langBtn != "") {
|
||||
updatedLang = chooseLanguage(request, langBtn);
|
||||
langUpdatedByBtn = true;
|
||||
} else if(langInput != "") {
|
||||
updatedLang = chooseLanguage(request, langInput);
|
||||
}
|
||||
|
||||
if(updatedLang != LANG_NULL && updatedLang != lang) {
|
||||
lang = updatedLang;
|
||||
langCatalog = lm->getFreeCatalog(lang);
|
||||
}
|
||||
*/
|
||||
auto email = form.get("login-email", "");
|
||||
auto password = form.get("login-password", "");
|
||||
|
||||
if(email != "" && password != "") {
|
||||
//auto session = sm->getSession(request);
|
||||
//if(!mSession) mSession = sm->findByEmail(email);
|
||||
if(!mSession) {
|
||||
mSession = sm->getNewSession();
|
||||
mSession->setLanguageCatalog(langCatalog);
|
||||
// get language
|
||||
// first check url, second check language header
|
||||
// for debugging client ip
|
||||
auto client_host = request.clientAddress().host();
|
||||
//auto client_ip = request.clientAddress();
|
||||
// X-Real-IP forwarded ip from nginx config
|
||||
auto client_host_string = request.get("X-Real-IP", client_host.toString());
|
||||
std::string clientIpString = "client ip: ";
|
||||
client_host = Poco::Net::IPAddress(client_host_string);
|
||||
clientIpString += client_host_string;
|
||||
Poco::Logger::get("requestLog").information(clientIpString);
|
||||
// debugging end
|
||||
mSession->setClientIp(client_host);
|
||||
response.addCookie(mSession->getLoginCookie());
|
||||
} else {
|
||||
langCatalog = mSession->getLanguageCatalog();
|
||||
}
|
||||
UserStates user_state;
|
||||
try {
|
||||
user_state = mSession->loadUser(email, password);
|
||||
} catch (Poco::Exception& ex) {
|
||||
addError(new ParamError("login", "exception by calling loadUser: ", ex.displayText()));
|
||||
sendErrorsAsEmail();
|
||||
addError(new Error("Error", "Intern Server error, please try again later"));
|
||||
}
|
||||
auto user = mSession->getNewUser();
|
||||
|
||||
if(user_state >= USER_LOADED_FROM_DB && !user->getModel()->getPublicKey()) {
|
||||
if(mSession->generateKeys(true, true)) {
|
||||
user_state = USER_COMPLETE;
|
||||
if(user->getModel()->isDisabled()) {
|
||||
user_state = USER_DISABLED;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//printf("pubkey exist: %p\n",user->getModel()->getPublicKey());
|
||||
}
|
||||
getErrors(mSession);
|
||||
|
||||
auto uri_start = request.serverParams().getServerName();
|
||||
auto lastExternReferer = mSession->getLastReferer();
|
||||
|
||||
printf("user_state: %d\n", user_state);
|
||||
|
||||
switch(user_state) {
|
||||
case USER_EMPTY:
|
||||
case USER_PASSWORD_INCORRECT:
|
||||
addError(new Error(langCatalog->gettext("Login"), langCatalog->gettext("E-Mail or password isn't right, please try again!")), false);
|
||||
if(mSession) {
|
||||
getErrors(mSession);
|
||||
sm->releaseSession(mSession);
|
||||
}
|
||||
sm->deleteLoginCookies(request, response);
|
||||
break;
|
||||
case USER_PASSWORD_ENCRYPTION_IN_PROCESS:
|
||||
addError(new Error(langCatalog->gettext("Passwort"), langCatalog->gettext("Passwort wird noch berechnet, bitte versuche es in etwa 1 Minute erneut.")), false);
|
||||
break;
|
||||
case USER_KEYS_DONT_MATCH:
|
||||
addError(new Error(langCatalog->gettext("User"), langCatalog->gettext("Error in saved data, the server admin will look at it.")));
|
||||
break;
|
||||
case USER_DISABLED:
|
||||
addError(new Error(langCatalog->gettext("User"), langCatalog->gettext("Benutzer ist deaktiviert, kein Login möglich!")));
|
||||
if(mSession) {
|
||||
getErrors(mSession);
|
||||
sm->releaseSession(mSession);
|
||||
}
|
||||
sm->deleteLoginCookies(request, response);
|
||||
break;
|
||||
case USER_NO_PRIVATE_KEY:
|
||||
case USER_COMPLETE:
|
||||
case USER_EMAIL_NOT_ACTIVATED:
|
||||
auto referer = request.find("Referer");
|
||||
std::string refererString;
|
||||
if (referer != request.end()) {
|
||||
refererString = referer->second;
|
||||
}
|
||||
if(lastExternReferer != "") {
|
||||
//printf("redirect to: %s\n", lastExternReferer.data());
|
||||
response.redirect(lastExternReferer);
|
||||
} else if(refererString != "" &&
|
||||
refererString.find("login") == std::string::npos &&
|
||||
refererString.find("logout") == std::string::npos &&
|
||||
refererString.find("user_delete") == std::string::npos &&
|
||||
refererString != ServerConfig::g_serverPath + request.getURI()) {
|
||||
std::string uri = request.getURI();
|
||||
printf("request uri: %s, redirect to: %s\n", uri.data(), refererString.data());
|
||||
response.redirect(refererString);
|
||||
} else {
|
||||
//printf("redirect to: %s\n", ServerConfig::g_php_serverPath.data());
|
||||
response.redirect(ServerConfig::g_php_serverPath + "/");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
} else if(!langUpdatedByBtn) {
|
||||
addError(new Error(langCatalog->gettext("Login"), langCatalog->gettext("Username and password are needed!")), false);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
// on enter login page with empty form
|
||||
//auto session = sm->getSession(request);
|
||||
// remove old cookies and session if exist
|
||||
if(mSession) {
|
||||
getErrors(mSession);
|
||||
sm->releaseSession(mSession);
|
||||
}
|
||||
sm->deleteLoginCookies(request, response);
|
||||
}
|
||||
|
||||
#line 3 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\header.cpsp"
|
||||
|
||||
bool withMaterialIcons = false;
|
||||
std::ostream& _responseStream = response.send();
|
||||
Poco::DeflatingOutputStream _gzipStream(_responseStream, Poco::DeflatingStreamBuf::STREAM_GZIP, 1);
|
||||
std::ostream& responseStream = _compressResponse ? _gzipStream : _responseStream;
|
||||
responseStream << "\n";
|
||||
// begin include header.cpsp
|
||||
responseStream << "\n";
|
||||
responseStream << "<!DOCTYPE html>\n";
|
||||
responseStream << "<html>\n";
|
||||
responseStream << "<head>\n";
|
||||
responseStream << "<meta charset=\"UTF-8\">\n";
|
||||
responseStream << "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n";
|
||||
responseStream << "<title>Gradido Login Server: ";
|
||||
#line 11 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( pageName );
|
||||
responseStream << "</title>\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 12 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/main.css\">\n";
|
||||
#line 13 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\header.cpsp"
|
||||
if(withMaterialIcons) { responseStream << "\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 14 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/materialdesignicons.min.css\">\n";
|
||||
#line 15 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\header.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</head>\n";
|
||||
responseStream << "<body>\n";
|
||||
responseStream << " <div class=\"layout\">\n";
|
||||
responseStream << " <div class=\"center-form-single\">\n";
|
||||
responseStream << " <div class=\"center-form-header\">\n";
|
||||
responseStream << " <a href=\"";
|
||||
#line 21 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "\" class=\"center-logo\">\n";
|
||||
responseStream << " <picture>\n";
|
||||
responseStream << " <source srcset=\"";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_schrift.webp\" type=\"image/webp\">\n";
|
||||
responseStream << " <source srcset=\"";
|
||||
#line 24 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_schrift.png\" type=\"image/png\">\n";
|
||||
responseStream << " <img src=\"";
|
||||
#line 25 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_schrift.png\" alt=\"logo\" />\n";
|
||||
responseStream << " </picture>\n";
|
||||
responseStream << " </a>\n";
|
||||
responseStream << " </div>";
|
||||
// end include header.cpsp
|
||||
responseStream << "\n";
|
||||
#line 175 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "<!--<input type=\"hidden\" name=\"lang\" value=\"";
|
||||
#line 176 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( LanguageManager::keyForLanguage(lang) );
|
||||
responseStream << "\">-->\n";
|
||||
responseStream << "<div class=\"center-form-container\">\n";
|
||||
responseStream << " ";
|
||||
// begin include flags.cpsp
|
||||
responseStream << "<div class=\"center-form-selectors\">\n";
|
||||
responseStream << "<form method=\"GET\" action=\"\">\n";
|
||||
responseStream << "\t<button id=\"flag-england\" name=\"lang\" value=\"en\" title=\"English\" type=\"submit\" ";
|
||||
#line 3 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\flags.cpsp"
|
||||
if(lang != LANG_EN) { responseStream << "class=\"flag-btn\"";
|
||||
#line 3 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\flags.cpsp"
|
||||
}
|
||||
else { responseStream << "class=\"flag-btn\" disabled";
|
||||
#line 4 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\flags.cpsp"
|
||||
} responseStream << ">\n";
|
||||
responseStream << "\t <span class=\"flag flag-england\"></span>\n";
|
||||
responseStream << "\t</button>\n";
|
||||
responseStream << "\t<button id=\"flag-germany\" name=\"lang\" value=\"de\" title=\"Deutsch\" type=\"submit\" ";
|
||||
#line 7 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\flags.cpsp"
|
||||
if(lang != LANG_DE) { responseStream << "class=\"flag-btn\"";
|
||||
#line 7 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\flags.cpsp"
|
||||
}
|
||||
else { responseStream << "class=\"flag-btn\" disabled";
|
||||
#line 8 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\flags.cpsp"
|
||||
} responseStream << ">\n";
|
||||
responseStream << "\t <span class=\"flag flag-germany\"></span>\n";
|
||||
responseStream << "\t</button>\n";
|
||||
responseStream << "</form>\n";
|
||||
responseStream << "</div>";
|
||||
// end include flags.cpsp
|
||||
responseStream << "\n";
|
||||
responseStream << " <div class=\"center-form-form\">\n";
|
||||
responseStream << "\t\t<form action=\"";
|
||||
#line 180 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
responseStream << "/\" method=\"POST\">\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" type=\"text\" name=\"login-email\" placeholder=\"";
|
||||
#line 181 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext("E-Mail") );
|
||||
responseStream << "\" value=\"";
|
||||
#line 181 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( presetEmail );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" type=\"password\" name=\"login-password\" placeholder=\"";
|
||||
#line 182 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Password") );
|
||||
responseStream << "\" />\n";
|
||||
responseStream << "\t\t <button type=\"submit\" name=\"submit\" class=\"center-form-submit form-button\">";
|
||||
#line 183 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext(" Login ") );
|
||||
responseStream << "</button>\n";
|
||||
responseStream << "\t\t</form>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"center-form-bottom\">\n";
|
||||
responseStream << " <div class=\"signup-link\">\n";
|
||||
responseStream << "\t <p>";
|
||||
#line 188 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext("You haven't any account yet? Please follow the link to create one.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t <a href=\"https://elopage.com/s/gradido/registration-de/payment?locale=de\">\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 190 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Create New Account") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t </a>\n";
|
||||
responseStream << "\t </div>\n";
|
||||
responseStream << "\t\t<div class=\"reset-pwd-link\">\n";
|
||||
responseStream << "\t\t\t<a href=\"";
|
||||
#line 194 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
responseStream << "/resetPassword\">";
|
||||
#line 194 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Passwort vergessen") );
|
||||
responseStream << "</a>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "<p> </p>\n";
|
||||
responseStream << "<div class=\"container\">\n";
|
||||
responseStream << "\t<a href=\"https://docs.google.com/document/d/1jZp-DiiMPI9ZPNXmjsvOQ1BtnfDFfx8BX7CDmA8KKjY/edit?usp=sharing\" target=\"_blank\">Zum Whitepaper</a>\n";
|
||||
responseStream << "\t<br>\n";
|
||||
responseStream << "\t<br>\n";
|
||||
responseStream << "\t<a href=\"https://docs.google.com/document/d/1kcX1guOi6tDgnFHD9tf7fB_MneKTx-0nHJxzdN8ygNs/edit?usp=sharing\" target=\"_blank\">To the Whitepaper</a>\n";
|
||||
responseStream << "</div>\n";
|
||||
// begin include footer.cpsp
|
||||
responseStream << " <div class=\"center-bottom\">\n";
|
||||
responseStream << " <p>Copyright © Gradido 2020</p>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"bottomleft\">\n";
|
||||
responseStream << " ";
|
||||
#line 6 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\footer.cpsp"
|
||||
responseStream << ( mTimeProfiler.string() );
|
||||
responseStream << "\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"bottomright\">\n";
|
||||
responseStream << " <p>Login Server in Entwicklung</p>\n";
|
||||
responseStream << " <p>Alpha ";
|
||||
#line 10 "F:\\Gradido\\gradido_login_server_v1\\src\\cpsp\\footer.cpsp"
|
||||
responseStream << ( ServerConfig::g_versionString );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << "</body>\n";
|
||||
responseStream << "\n";
|
||||
responseStream << "</html>";
|
||||
// end include footer.cpsp
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
|
||||
@ -1,20 +1,20 @@
|
||||
#ifndef LoginPage_INCLUDED
|
||||
#define LoginPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class LoginPage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
LoginPage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // LoginPage_INCLUDED
|
||||
#ifndef LoginPage_INCLUDED
|
||||
#define LoginPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class LoginPage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
LoginPage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // LoginPage_INCLUDED
|
||||
|
||||
@ -1,202 +1,205 @@
|
||||
<%@ page class="LoginPage" %>
|
||||
<%@ page form="true" %>
|
||||
<%@ page baseClass="SessionHTTPRequestHandler" %>
|
||||
<%@ page ctorArg="Session*" %>
|
||||
<%@ header include="SessionHTTPRequestHandler.h" %>
|
||||
<%@ page compressed="true" %>
|
||||
<%!
|
||||
#include "../gettext.h"
|
||||
|
||||
#include "Poco/Net/HTTPCookie.h"
|
||||
#include "Poco/Net/HTTPServerParams.h"
|
||||
#include "Poco/Logger.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../SingletonManager/LanguageManager.h"
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
|
||||
%>
|
||||
<%%
|
||||
const char* pageName = "Login";
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto lm = LanguageManager::getInstance();
|
||||
auto em = ErrorManager::getInstance();
|
||||
|
||||
auto lang = chooseLanguage(request);
|
||||
//printf("choose language return: %d\n", lang);
|
||||
auto langCatalog = lm->getFreeCatalog(lang);
|
||||
|
||||
std::string presetEmail("");
|
||||
if(mSession && mSession->getUser()) {
|
||||
presetEmail = mSession->getUser()->getEmail();
|
||||
}
|
||||
|
||||
if(!form.empty()) {
|
||||
|
||||
bool langUpdatedByBtn = false;
|
||||
auto langBtn = form.get("lang", "");
|
||||
if(langBtn != "") {
|
||||
langUpdatedByBtn = true;
|
||||
}
|
||||
/*
|
||||
auto langInput = form.get("lang", "");
|
||||
auto updatedLang = LANG_NULL;
|
||||
if(langBtn != "") {
|
||||
updatedLang = chooseLanguage(request, langBtn);
|
||||
langUpdatedByBtn = true;
|
||||
} else if(langInput != "") {
|
||||
updatedLang = chooseLanguage(request, langInput);
|
||||
}
|
||||
|
||||
if(updatedLang != LANG_NULL && updatedLang != lang) {
|
||||
lang = updatedLang;
|
||||
langCatalog = lm->getFreeCatalog(lang);
|
||||
}
|
||||
*/
|
||||
auto email = form.get("login-email", "");
|
||||
auto password = form.get("login-password", "");
|
||||
|
||||
if(email != "" && password != "") {
|
||||
//auto session = sm->getSession(request);
|
||||
//if(!mSession) mSession = sm->findByEmail(email);
|
||||
if(!mSession) {
|
||||
mSession = sm->getNewSession();
|
||||
mSession->setLanguageCatalog(langCatalog);
|
||||
// get language
|
||||
// first check url, second check language header
|
||||
// for debugging client ip
|
||||
auto client_ip = request.clientAddress();
|
||||
std::string clientIpString = "client ip: ";
|
||||
clientIpString += client_ip.toString();
|
||||
Poco::Logger::get("requestLog").information(clientIpString);
|
||||
// debugging end
|
||||
auto user_host = request.clientAddress().host();
|
||||
mSession->setClientIp(user_host);
|
||||
response.addCookie(mSession->getLoginCookie());
|
||||
} else {
|
||||
langCatalog = mSession->getLanguageCatalog();
|
||||
}
|
||||
UserStates user_state;
|
||||
try {
|
||||
user_state = mSession->loadUser(email, password);
|
||||
} catch (Poco::Exception& ex) {
|
||||
addError(new ParamError("login", "exception by calling loadUser: ", ex.displayText()));
|
||||
sendErrorsAsEmail();
|
||||
addError(new Error("Error", "Intern Server error, please try again later"));
|
||||
}
|
||||
auto user = mSession->getNewUser();
|
||||
|
||||
if(user_state >= USER_LOADED_FROM_DB && !user->getModel()->getPublicKey()) {
|
||||
if(mSession->generateKeys(true, true)) {
|
||||
user_state = USER_COMPLETE;
|
||||
if(user->getModel()->isDisabled()) {
|
||||
user_state = USER_DISABLED;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//printf("pubkey exist: %p\n",user->getModel()->getPublicKey());
|
||||
}
|
||||
getErrors(mSession);
|
||||
|
||||
auto uri_start = request.serverParams().getServerName();
|
||||
auto lastExternReferer = mSession->getLastReferer();
|
||||
|
||||
printf("user_state: %d\n", user_state);
|
||||
|
||||
switch(user_state) {
|
||||
case USER_EMPTY:
|
||||
case USER_PASSWORD_INCORRECT:
|
||||
addError(new Error(langCatalog->gettext("Login"), langCatalog->gettext("E-Mail or password isn't right, please try again!")), false);
|
||||
if(mSession) {
|
||||
getErrors(mSession);
|
||||
sm->releaseSession(mSession);
|
||||
}
|
||||
sm->deleteLoginCookies(request, response);
|
||||
break;
|
||||
case USER_PASSWORD_ENCRYPTION_IN_PROCESS:
|
||||
addError(new Error(langCatalog->gettext("Passwort"), langCatalog->gettext("Passwort wird noch berechnet, bitte versuche es in etwa 1 Minute erneut.")), false);
|
||||
break;
|
||||
case USER_KEYS_DONT_MATCH:
|
||||
addError(new Error(langCatalog->gettext("User"), langCatalog->gettext("Error in saved data, the server admin will look at it.")));
|
||||
break;
|
||||
case USER_DISABLED:
|
||||
addError(new Error(langCatalog->gettext("User"), langCatalog->gettext("Benutzer ist deaktiviert, kein Login möglich!")));
|
||||
if(mSession) {
|
||||
getErrors(mSession);
|
||||
sm->releaseSession(mSession);
|
||||
}
|
||||
sm->deleteLoginCookies(request, response);
|
||||
break;
|
||||
case USER_NO_PRIVATE_KEY:
|
||||
case USER_COMPLETE:
|
||||
case USER_EMAIL_NOT_ACTIVATED:
|
||||
auto referer = request.find("Referer");
|
||||
std::string refererString;
|
||||
if (referer != request.end()) {
|
||||
refererString = referer->second;
|
||||
}
|
||||
if(lastExternReferer != "") {
|
||||
//printf("redirect to: %s\n", lastExternReferer.data());
|
||||
response.redirect(lastExternReferer);
|
||||
} else if(refererString != "" &&
|
||||
refererString.find("login") == std::string::npos &&
|
||||
refererString.find("logout") == std::string::npos &&
|
||||
refererString.find("user_delete") == std::string::npos &&
|
||||
refererString != ServerConfig::g_serverPath + request.getURI()) {
|
||||
std::string uri = request.getURI();
|
||||
printf("request uri: %s, redirect to: %s\n", uri.data(), refererString.data());
|
||||
response.redirect(refererString);
|
||||
} else {
|
||||
//printf("redirect to: %s\n", ServerConfig::g_php_serverPath.data());
|
||||
response.redirect(ServerConfig::g_php_serverPath + "/");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
} else if(!langUpdatedByBtn) {
|
||||
addError(new Error(langCatalog->gettext("Login"), langCatalog->gettext("Username and password are needed!")), false);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
// on enter login page with empty form
|
||||
//auto session = sm->getSession(request);
|
||||
// remove old cookies and session if exist
|
||||
if(mSession) {
|
||||
getErrors(mSession);
|
||||
sm->releaseSession(mSession);
|
||||
}
|
||||
sm->deleteLoginCookies(request, response);
|
||||
}
|
||||
|
||||
%><%@ include file="header.cpsp" %>
|
||||
<%= getErrorsHtml() %>
|
||||
<!--<input type="hidden" name="lang" value="<%= LanguageManager::keyForLanguage(lang) %>">-->
|
||||
<div class="center-form-container">
|
||||
<%@ include file="flags.cpsp" %>
|
||||
<div class="center-form-form">
|
||||
<form action="<%= ServerConfig::g_serverPath %>/" method="POST">
|
||||
<input class="form-control" type="text" name="login-email" placeholder="<%= langCatalog->gettext("E-Mail") %>" value="<%= presetEmail %>"/>
|
||||
<input class="form-control" type="password" name="login-password" placeholder="<%= langCatalog->gettext("Password") %>" />
|
||||
<button type="submit" name="submit" class="center-form-submit form-button"><%= langCatalog->gettext(" Login ") %></button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="center-form-bottom">
|
||||
<div class="signup-link">
|
||||
<p><%= langCatalog->gettext("You haven't any account yet? Please follow the link to create one.") %></p>
|
||||
<a href="https://elopage.com/s/gradido/registration-de/payment?locale=de">
|
||||
<%= langCatalog->gettext("Create New Account") %>
|
||||
</a>
|
||||
</div>
|
||||
<div class="reset-pwd-link">
|
||||
<a href="<%= ServerConfig::g_serverPath %>/resetPassword"><%= langCatalog->gettext("Passwort vergessen") %></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p> </p>
|
||||
<div class="container">
|
||||
<a href="https://docs.google.com/document/d/1jZp-DiiMPI9ZPNXmjsvOQ1BtnfDFfx8BX7CDmA8KKjY/edit?usp=sharing" target="_blank">Zum Whitepaper</a>
|
||||
<br>
|
||||
<br>
|
||||
<a href="https://docs.google.com/document/d/1kcX1guOi6tDgnFHD9tf7fB_MneKTx-0nHJxzdN8ygNs/edit?usp=sharing" target="_blank">To the Whitepaper</a>
|
||||
</div>
|
||||
<%@ page class="LoginPage" %>
|
||||
<%@ page form="true" %>
|
||||
<%@ page baseClass="SessionHTTPRequestHandler" %>
|
||||
<%@ page ctorArg="Session*" %>
|
||||
<%@ header include="SessionHTTPRequestHandler.h" %>
|
||||
<%@ page compressed="true" %>
|
||||
<%!
|
||||
#include "../gettext.h"
|
||||
|
||||
#include "Poco/Net/HTTPCookie.h"
|
||||
#include "Poco/Net/HTTPServerParams.h"
|
||||
#include "Poco/Logger.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../SingletonManager/LanguageManager.h"
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
|
||||
%>
|
||||
<%%
|
||||
const char* pageName = "Login";
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto lm = LanguageManager::getInstance();
|
||||
auto em = ErrorManager::getInstance();
|
||||
|
||||
auto lang = chooseLanguage(request);
|
||||
//printf("choose language return: %d\n", lang);
|
||||
auto langCatalog = lm->getFreeCatalog(lang);
|
||||
|
||||
std::string presetEmail("");
|
||||
if(mSession && mSession->getUser()) {
|
||||
presetEmail = mSession->getUser()->getEmail();
|
||||
}
|
||||
|
||||
if(!form.empty()) {
|
||||
|
||||
bool langUpdatedByBtn = false;
|
||||
auto langBtn = form.get("lang", "");
|
||||
if(langBtn != "") {
|
||||
langUpdatedByBtn = true;
|
||||
}
|
||||
/*
|
||||
auto langInput = form.get("lang", "");
|
||||
auto updatedLang = LANG_NULL;
|
||||
if(langBtn != "") {
|
||||
updatedLang = chooseLanguage(request, langBtn);
|
||||
langUpdatedByBtn = true;
|
||||
} else if(langInput != "") {
|
||||
updatedLang = chooseLanguage(request, langInput);
|
||||
}
|
||||
|
||||
if(updatedLang != LANG_NULL && updatedLang != lang) {
|
||||
lang = updatedLang;
|
||||
langCatalog = lm->getFreeCatalog(lang);
|
||||
}
|
||||
*/
|
||||
auto email = form.get("login-email", "");
|
||||
auto password = form.get("login-password", "");
|
||||
|
||||
if(email != "" && password != "") {
|
||||
//auto session = sm->getSession(request);
|
||||
//if(!mSession) mSession = sm->findByEmail(email);
|
||||
if(!mSession) {
|
||||
mSession = sm->getNewSession();
|
||||
mSession->setLanguageCatalog(langCatalog);
|
||||
// get language
|
||||
// first check url, second check language header
|
||||
// for debugging client ip
|
||||
auto client_host = request.clientAddress().host();
|
||||
//auto client_ip = request.clientAddress();
|
||||
// X-Real-IP forwarded ip from nginx config
|
||||
auto client_host_string = request.get("X-Real-IP", client_host.toString());
|
||||
std::string clientIpString = "client ip: ";
|
||||
client_host = Poco::Net::IPAddress(client_host_string);
|
||||
clientIpString += client_host_string;
|
||||
Poco::Logger::get("requestLog").information(clientIpString);
|
||||
// debugging end
|
||||
mSession->setClientIp(client_host);
|
||||
response.addCookie(mSession->getLoginCookie());
|
||||
} else {
|
||||
langCatalog = mSession->getLanguageCatalog();
|
||||
}
|
||||
UserStates user_state;
|
||||
try {
|
||||
user_state = mSession->loadUser(email, password);
|
||||
} catch (Poco::Exception& ex) {
|
||||
addError(new ParamError("login", "exception by calling loadUser: ", ex.displayText()));
|
||||
sendErrorsAsEmail();
|
||||
addError(new Error("Error", "Intern Server error, please try again later"));
|
||||
}
|
||||
auto user = mSession->getNewUser();
|
||||
|
||||
if(user_state >= USER_LOADED_FROM_DB && !user->getModel()->getPublicKey()) {
|
||||
if(mSession->generateKeys(true, true)) {
|
||||
user_state = USER_COMPLETE;
|
||||
if(user->getModel()->isDisabled()) {
|
||||
user_state = USER_DISABLED;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//printf("pubkey exist: %p\n",user->getModel()->getPublicKey());
|
||||
}
|
||||
getErrors(mSession);
|
||||
|
||||
auto uri_start = request.serverParams().getServerName();
|
||||
auto lastExternReferer = mSession->getLastReferer();
|
||||
|
||||
printf("user_state: %d\n", user_state);
|
||||
|
||||
switch(user_state) {
|
||||
case USER_EMPTY:
|
||||
case USER_PASSWORD_INCORRECT:
|
||||
addError(new Error(langCatalog->gettext("Login"), langCatalog->gettext("E-Mail or password isn't right, please try again!")), false);
|
||||
if(mSession) {
|
||||
getErrors(mSession);
|
||||
sm->releaseSession(mSession);
|
||||
}
|
||||
sm->deleteLoginCookies(request, response);
|
||||
break;
|
||||
case USER_PASSWORD_ENCRYPTION_IN_PROCESS:
|
||||
addError(new Error(langCatalog->gettext("Passwort"), langCatalog->gettext("Passwort wird noch berechnet, bitte versuche es in etwa 1 Minute erneut.")), false);
|
||||
break;
|
||||
case USER_KEYS_DONT_MATCH:
|
||||
addError(new Error(langCatalog->gettext("User"), langCatalog->gettext("Error in saved data, the server admin will look at it.")));
|
||||
break;
|
||||
case USER_DISABLED:
|
||||
addError(new Error(langCatalog->gettext("User"), langCatalog->gettext("Benutzer ist deaktiviert, kein Login möglich!")));
|
||||
if(mSession) {
|
||||
getErrors(mSession);
|
||||
sm->releaseSession(mSession);
|
||||
}
|
||||
sm->deleteLoginCookies(request, response);
|
||||
break;
|
||||
case USER_NO_PRIVATE_KEY:
|
||||
case USER_COMPLETE:
|
||||
case USER_EMAIL_NOT_ACTIVATED:
|
||||
auto referer = request.find("Referer");
|
||||
std::string refererString;
|
||||
if (referer != request.end()) {
|
||||
refererString = referer->second;
|
||||
}
|
||||
if(lastExternReferer != "") {
|
||||
//printf("redirect to: %s\n", lastExternReferer.data());
|
||||
response.redirect(lastExternReferer);
|
||||
} else if(refererString != "" &&
|
||||
refererString.find("login") == std::string::npos &&
|
||||
refererString.find("logout") == std::string::npos &&
|
||||
refererString.find("user_delete") == std::string::npos &&
|
||||
refererString != ServerConfig::g_serverPath + request.getURI()) {
|
||||
std::string uri = request.getURI();
|
||||
printf("request uri: %s, redirect to: %s\n", uri.data(), refererString.data());
|
||||
response.redirect(refererString);
|
||||
} else {
|
||||
//printf("redirect to: %s\n", ServerConfig::g_php_serverPath.data());
|
||||
response.redirect(ServerConfig::g_php_serverPath + "/");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
} else if(!langUpdatedByBtn) {
|
||||
addError(new Error(langCatalog->gettext("Login"), langCatalog->gettext("Username and password are needed!")), false);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
// on enter login page with empty form
|
||||
//auto session = sm->getSession(request);
|
||||
// remove old cookies and session if exist
|
||||
if(mSession) {
|
||||
getErrors(mSession);
|
||||
sm->releaseSession(mSession);
|
||||
}
|
||||
sm->deleteLoginCookies(request, response);
|
||||
}
|
||||
|
||||
%><%@ include file="header.cpsp" %>
|
||||
<%= getErrorsHtml() %>
|
||||
<!--<input type="hidden" name="lang" value="<%= LanguageManager::keyForLanguage(lang) %>">-->
|
||||
<div class="center-form-container">
|
||||
<%@ include file="flags.cpsp" %>
|
||||
<div class="center-form-form">
|
||||
<form action="<%= ServerConfig::g_serverPath %>/" method="POST">
|
||||
<input class="form-control" type="text" name="login-email" placeholder="<%= langCatalog->gettext("E-Mail") %>" value="<%= presetEmail %>"/>
|
||||
<input class="form-control" type="password" name="login-password" placeholder="<%= langCatalog->gettext("Password") %>" />
|
||||
<button type="submit" name="submit" class="center-form-submit form-button"><%= langCatalog->gettext(" Login ") %></button>
|
||||
</form>
|
||||
</div>
|
||||
<div class="center-form-bottom">
|
||||
<div class="signup-link">
|
||||
<p><%= langCatalog->gettext("You haven't any account yet? Please follow the link to create one.") %></p>
|
||||
<a href="https://elopage.com/s/gradido/registration-de/payment?locale=de">
|
||||
<%= langCatalog->gettext("Create New Account") %>
|
||||
</a>
|
||||
</div>
|
||||
<div class="reset-pwd-link">
|
||||
<a href="<%= ServerConfig::g_serverPath %>/resetPassword"><%= langCatalog->gettext("Passwort vergessen") %></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<p> </p>
|
||||
<div class="container">
|
||||
<a href="https://docs.google.com/document/d/1jZp-DiiMPI9ZPNXmjsvOQ1BtnfDFfx8BX7CDmA8KKjY/edit?usp=sharing" target="_blank">Zum Whitepaper</a>
|
||||
<br>
|
||||
<br>
|
||||
<a href="https://docs.google.com/document/d/1kcX1guOi6tDgnFHD9tf7fB_MneKTx-0nHJxzdN8ygNs/edit?usp=sharing" target="_blank">To the Whitepaper</a>
|
||||
</div>
|
||||
<%@ include file="footer.cpsp" %>
|
||||
Loading…
x
Reference in New Issue
Block a user