mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
Merge commit 'd344551c834efd503ff5b86aa2863d1dae10effa' into stage2_login_server
This commit is contained in:
commit
fa7082fd59
1
login_server/.gitignore
vendored
1
login_server/.gitignore
vendored
@ -5,3 +5,4 @@ src/cpsp/*.h
|
||||
src/cpsp/*.cpp
|
||||
src/cpp/proto/
|
||||
build*/
|
||||
/skeema/gradido_login/insert/crypto_key.sql
|
||||
|
||||
9
login_server/.gitmodules
vendored
9
login_server/.gitmodules
vendored
@ -13,3 +13,12 @@
|
||||
[submodule "dependencies/spirit-po"]
|
||||
path = dependencies/spirit-po
|
||||
url = https://github.com/cbeck88/spirit-po.git
|
||||
[submodule "dependencies/grpc"]
|
||||
path = dependencies/grpc
|
||||
url = https://github.com/grpc/grpc.git
|
||||
[submodule "dependencies/poco"]
|
||||
path = dependencies/poco
|
||||
url = https://github.com/pocoproject/poco.git
|
||||
[submodule "dependencies/cmake-modules"]
|
||||
path = dependencies/cmake-modules
|
||||
url = https://github.com/viaduck/cmake-modules.git
|
||||
|
||||
@ -1,177 +1,242 @@
|
||||
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.18.2)
|
||||
project(Gradido_LoginServer C CXX)
|
||||
SET(CMAKE_RUNTIME_OUTPUT_DIRECTORY "bin" )
|
||||
|
||||
SET ( CMAKE_CXX_FLAGS "-std=c++17" )
|
||||
set(CMAKE_CXX_STANDARD 17)
|
||||
set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
include_directories(
|
||||
"dependencies"
|
||||
"dependencies/tinf/src/"
|
||||
"dependencies/mariadb-connector-c/include"
|
||||
"dependencies/mariadb-connector-c/build/include"
|
||||
"dependencies/spirit-po/include"
|
||||
"dependencies/grpc/include"
|
||||
"dependencies/grpc/third_party/protobuf/src"
|
||||
"src/cpp/proto"
|
||||
)
|
||||
#if(WIN32)
|
||||
#include_directories("dependencies/mariadb-connector-c/include", "dependencies/mariadb-connector-c/build/include")
|
||||
set(MYSQL_INCLUDE_DIR "dependencies/mariadb-connector-c/include")
|
||||
|
||||
#endif(WIN32)
|
||||
|
||||
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 MODEL_HEDERA "src/cpp/model/hedera/*.h" "src/cpp/model/hedera/*.cpp")
|
||||
FILE(GLOB MODEL_GRADIDO "src/cpp/model/gradido/*.h" "src/cpp/model/gradido/*.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} ${MODEL_HEDERA} ${MODEL_GRADIDO}
|
||||
${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\\hedera" FILES ${MODEL_HEDERA})
|
||||
source_group("model\\gradido" FILES ${MODEL_GRADIDO})
|
||||
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_executable(Gradido_LoginServer ${LOCAL_SRCS})
|
||||
set(CLIENT_PLUGIN_DIALOG OFF)
|
||||
set(CLIENT_PLUGIN_MYSQL_CLEAR_PASSWORD OFF)
|
||||
set(CLIENT_PLUGIN_REMOTE_IO OFF)
|
||||
IF(WIN32)
|
||||
#set(CLIENT_PLUGIN_caching_sha2_password OFF)
|
||||
set(CLIENT_PLUGIN_CACHING_SHA2_PASSWORD OFF)
|
||||
set(CLIENT_PLUGIN_SHA256_PASSWORD OFF)
|
||||
set(CLIENT_PLUGIN_AUTH_GSSAPI_CLIENT OFF)
|
||||
set(CLIENT_PLUGIN_PVIO_NPIPE STATIC)
|
||||
set(CLIENT_PLUGIN_PVIO_SHMEM STATIC)
|
||||
set(CLIENT_PLUGIN_CLIENT_ED25519 OFF)
|
||||
ELSEIF()
|
||||
set(CLIENT_PLUGIN_client_ed25519 OFF)
|
||||
ENDIF()
|
||||
|
||||
set(WITH_SSL OFF)
|
||||
add_subdirectory("dependencies/mariadb-connector-c")
|
||||
|
||||
set(DEP_PATH "dependencies")
|
||||
set(MARIADB_CONNECTOR_PATH "${DEP_PATH}/mariadb-connector-c/build/libmariadb")
|
||||
|
||||
set(GRPC_PATH "${DEP_PATH}/grpc/build")
|
||||
set(GRPC_ABSL_PATH "${GRPC_PATH}/third_party/abseil-cpp/absl/types")
|
||||
set(GRPC_CARES_PATH "${GRPC_PATH}/third_party/cares/cares/lib")
|
||||
set(GRPC_BORING_SSL_PATH "${GRPC_PATH}/third_party/boringssl-with-bazel")
|
||||
set(GRPC_RE2_PATH "${GRPC_PATH}/third_party/re2")
|
||||
set(GRPC_PROTOBUF_PATH "${GRPC_PATH}/third_party/protobuf")
|
||||
|
||||
|
||||
|
||||
if(WIN32)
|
||||
|
||||
find_library(MYSQL_LIBRARIES mariadbclient PATHS "${MARIADB_CONNECTOR_PATH}/Release" REQUIRED)
|
||||
find_library(COMPILED_MARIADB_CLIENT_DEBUG mariadbclient PATHS "${MARIADB_CONNECTOR_PATH}/Debug" REQUIRED)
|
||||
|
||||
find_library(CONAN_OPENSSL_SSL ssleay32 PATHS ${CONAN_LIB_DIRS_OPENSSL} REQUIRED NO_DEFAULT_PATH )
|
||||
find_library(CONAN_OPENSSL_CRYPTO libeay32 PATHS ${CONAN_LIB_DIRS_OPENSSL} REQUIRED NO_DEFAULT_PATH )
|
||||
|
||||
set(GRPC_PATH "${GRPC_PATH}/Debug")
|
||||
set(GRPC_ABSL_PATH "${GRPC_ABSL_PATH}/Debug")
|
||||
set(GRPC_CARES_PATH "${GRPC_CARES_PATH}/Debug")
|
||||
set(GRPC_BORING_SSL_PATH "${GRPC_CGRPC_BORING_SSL_PATHARES_PATH}/Debug")
|
||||
set(GRPC_RE2_PATH "${GRPC_RE2_PATH}/Debug")
|
||||
set(GRPC_PROTOBUF_DEBUG_PATH "${GRPC_PROTOBUF_PATH}/Debug")
|
||||
|
||||
|
||||
list(REMOVE_ITEM CONAN_LIBS "libeay32.lib")
|
||||
list(REMOVE_ITEM CONAN_LIBS "ssleay32.lib")
|
||||
|
||||
|
||||
else (WIN32)
|
||||
#find_package(MariaDBClient PATHS "dependencies/cmake-modules")
|
||||
#find_library(MYSQL_LIBRARIES libmariadb.so PATHS ${MARIADB_CONNECTOR_PATH} REQUIRED)
|
||||
find_library(CONAN_OPENSSL_SSL ssl PATHS ${CONAN_LIB_DIRS_OPENSSL} REQUIRED NO_DEFAULT_PATH )
|
||||
find_library(CONAN_OPENSSL_CRYPTO crypto PATHS ${CONAN_LIB_DIRS_OPENSSL} REQUIRED NO_DEFAULT_PATH )
|
||||
set(GRPC_PROTOBUF_DEBUG_PATH "${GRPC_PROTOBUF_PATH}")
|
||||
|
||||
list(REMOVE_ITEM CONAN_LIBS "ssl")
|
||||
list(REMOVE_ITEM CONAN_LIBS "crypto")
|
||||
list(REMOVE_ITEM CONAN_LIBS "dl")
|
||||
|
||||
# find_library(MYSQL_LIBRARIES libmariadb.so PATHS ${MARIADB_CONNECTOR_PATH} REQUIRED)
|
||||
find_library(CONAN_OPENSSL_SSL ssl PATHS ${CONAN_LIB_DIRS_OPENSSL} REQUIRED NO_DEFAULT_PATH )
|
||||
find_library(CONAN_OPENSSL_CRYPTO crypto PATHS ${CONAN_LIB_DIRS_OPENSSL} REQUIRED NO_DEFAULT_PATH )
|
||||
set(GRPC_PROTOBUF_DEBUG_PATH "${GRPC_PROTOBUF_PATH}")
|
||||
|
||||
list(REMOVE_ITEM CONAN_LIBS "ssl")
|
||||
list(REMOVE_ITEM CONAN_LIBS "crypto")
|
||||
list(REMOVE_ITEM CONAN_LIBS "dl")
|
||||
|
||||
endif(WIN32)
|
||||
|
||||
# load same ssl version like used from poco
|
||||
#find_package(OpenSSL PATHS "../" NO_DEFAULT_PATH)
|
||||
|
||||
|
||||
set(CONAN_OPENSSL_CUSTOM_LIBS
|
||||
${CONAN_OPENSSL_SSL}
|
||||
${CONAN_OPENSSL_CRYPTO}
|
||||
)
|
||||
include_directories(${CONAN_INCLUDE_DIRS_OPENSSL})
|
||||
# build grpc
|
||||
|
||||
|
||||
|
||||
if(WIN32)
|
||||
|
||||
set(CMAKE_CXX_FLAGS "/MP /EHsc")
|
||||
#set(CMAKE_CXX_FLAGS_DEBUG "-O0 -g3")
|
||||
#set(CMAKE_CXX_FLAGS_RELEASE "-O3")
|
||||
|
||||
else(WIN32)
|
||||
|
||||
set(INSTALL_BINDIR "bin")
|
||||
set(INSTALL_PLUGINDIR "bin")
|
||||
target_link_libraries(Gradido_LoginServer ${CONAN_OPENSSL_CUSTOM_LIBS})
|
||||
|
||||
endif(WIN32)
|
||||
|
||||
set(BUILD_TESTING OFF)
|
||||
set(gRPC_SSL_PROVIDER "package")
|
||||
add_subdirectory("dependencies/grpc/")
|
||||
set(gRPC_SSL_PROVIDER "package")
|
||||
message(STATUS "Using gRPC via add_subdirectory.")
|
||||
|
||||
set(GRPC_LIBS libprotobuf grpc++_reflection grpc++)
|
||||
target_link_libraries(Gradido_LoginServer ${CONAN_LIBS})
|
||||
|
||||
if(WIN32)
|
||||
TARGET_LINK_LIBRARIES(Gradido_LoginServer optimized ${MYSQL_LIBRARIES} Shlwapi)
|
||||
TARGET_LINK_LIBRARIES(Gradido_LoginServer debug ${COMPILED_MARIADB_CLIENT_DEBUG} Shlwapi)
|
||||
TARGET_LINK_LIBRARIES(Gradido_LoginServer debug ${GRPC_LIBS} ${PROTOBUF_DEBUG_LIBS})
|
||||
else(WIN32) # unix
|
||||
target_link_libraries(Gradido_LoginServer libmariadb ${GRPC_LIBS} ${CMAKE_DL_LIBS} ${PROTOBUF_LIBS})
|
||||
endif(WIN32)
|
||||
|
||||
# install
|
||||
if(UNIX)
|
||||
install(TARGETS Gradido_LoginServer RUNTIME DESTINATION /usr/local/bin)
|
||||
#install(LIBRARYS DESTINATION /usr/local/lib)
|
||||
#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
|
||||
#find_package(gtest)
|
||||
|
||||
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} )
|
||||
|
||||
|
||||
if(WIN32)
|
||||
TARGET_LINK_LIBRARIES(Gradido_LoginServer_Test optimized ${MYSQL_LIBRARIES} Shlwapi)
|
||||
TARGET_LINK_LIBRARIES(Gradido_LoginServer_Test debug ${COMPILED_MARIADB_CLIENT_DEBUG} Shlwapi)
|
||||
TARGET_LINK_LIBRARIES(Gradido_LoginServer_Test debug ${GRPC_LIBS} ${PROTOBUF_DEBUG_LIBS})
|
||||
else(WIN32)
|
||||
target_link_libraries(Gradido_LoginServer_Test libmariadb ${GRPC_LIBS} ${CMAKE_DL_LIBS} ${PROTOBUF_LIBS})
|
||||
endif(WIN32)
|
||||
|
||||
add_test(NAME main COMMAND Gradido_LoginServer_Test)
|
||||
|
||||
@ -1,132 +1,114 @@
|
||||
#########################################################################################################
|
||||
# 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"]
|
||||
|
||||
#########################################################################################################
|
||||
# debug build preparation
|
||||
#########################################################################################################
|
||||
|
||||
From conanio/gcc7 as debug_preparation
|
||||
|
||||
ENV DOCKER_WORKDIR="/code"
|
||||
|
||||
USER root
|
||||
|
||||
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/
|
||||
|
||||
#VOLUME /root/.conan
|
||||
|
||||
RUN mkdir -p ${DOCKER_WORKDIR}
|
||||
WORKDIR ${DOCKER_WORKDIR}
|
||||
|
||||
COPY ./dependencies ./dependencies
|
||||
COPY ./conanfile.txt ./conanfile.txt
|
||||
|
||||
RUN ls -la
|
||||
RUN cd dependencies/iroha-ed25519 && \
|
||||
ls -la && \
|
||||
mkdir build && \
|
||||
cd build && \
|
||||
cmake .. -DCMAKE_BUILD_TYPE=Debug -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 -DCMAKE_BUILD_TYPE=Debug -DWITH_SSL=OFF ..
|
||||
|
||||
|
||||
#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 -s build_type=Debug
|
||||
|
||||
|
||||
|
||||
#########################################################################################################
|
||||
# Build debug
|
||||
#########################################################################################################
|
||||
From debug_preparation as debug
|
||||
|
||||
ENV DOCKER_WORKDIR="/code"
|
||||
|
||||
USER root
|
||||
#VOLUME /root/.conan
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get install -y --no-install-recommends gdb && \
|
||||
apt-get autoclean && \
|
||||
apt-get autoremove && \
|
||||
apt-get clean && \
|
||||
rm -rf /var/lib/apt/lists/*
|
||||
|
||||
#COPY --from=protoc_build /protobuf/src/.libs/libprotobuf.so.20.0.1 /usr/lib/libprotobuf.so.20
|
||||
#COPY --from=protoc_build /protobuf/src/google/protobuf/*.h /usr/include/google/protobuf/
|
||||
|
||||
|
||||
#COPY --from=debug_preparation /code /code
|
||||
#COPY --from=debug_preparation /home/conan /home/conan
|
||||
#RUN ls -la /home/conan/.conan
|
||||
COPY . .
|
||||
WORKDIR ${DOCKER_WORKDIR}
|
||||
|
||||
#RUN ls -la
|
||||
#RUN cat build/conanbuildinfo.cmake
|
||||
RUN chmod +x compile_proto.sh
|
||||
RUN chmod +x compile_pot.sh
|
||||
#RUN ls -la
|
||||
RUN ./compile_pot.sh
|
||||
RUN ./compile_proto.sh
|
||||
RUN cd build && \
|
||||
cmake -DCMAKE_BUILD_TYPE=Debug .. && \
|
||||
make -j$(grep processor /proc/cpuinfo | wc -l)
|
||||
|
||||
|
||||
#########################################################################################################
|
||||
# run debug
|
||||
#########################################################################################################
|
||||
FROM ubuntu:latest as login_server_debug
|
||||
|
||||
WORKDIR "/usr/bin"
|
||||
|
||||
#RUN apt-get update && \
|
||||
# apt-get install -y --no-install-recommends gdb && \
|
||||
# apt-get autoclean && \
|
||||
# apt-get autoremove && \
|
||||
# apt-get clean && \
|
||||
# rm -rf /var/lib/apt/lists/*
|
||||
|
||||
VOLUME /var/log/grd_login
|
||||
|
||||
COPY --from=debug /code/build/bin/Gradido_LoginServer /usr/bin/
|
||||
COPY --from=debug /code/build/lib/libmariadb.so.3 /usr/lib/
|
||||
#COPY start_after_mysql.sh .
|
||||
RUN chmod +x /usr/bin/Gradido_LoginServer
|
||||
EXPOSE 1200
|
||||
EXPOSE 1201
|
||||
#ENTRYPOINT ["/usr/bin/Gradido_LoginServer"]
|
||||
# Wait on mariadb to started
|
||||
#CMD ["sleep 5", "/usr/bin/Gradido_LoginServer"]
|
||||
#RUN chmod +x ./start_after_mysql.sh
|
||||
#ENTRYPOINT ["/usr/bin/Gradido_LoginServer"]
|
||||
#CMD gdb -ex=r Gradido_LoginServer
|
||||
#########################################################################################################
|
||||
# debug build preparation
|
||||
#########################################################################################################
|
||||
|
||||
From conanio/gcc9 as build_debug_preparation
|
||||
USER root
|
||||
#RUN apt-get update && \
|
||||
# apt-get install -y --no-install-recommends gcc g++ && \
|
||||
# apt-get autoclean && \
|
||||
# apt-get autoremove && \
|
||||
# apt-get clean && \
|
||||
# rm -rf /var/lib/apt/lists/*
|
||||
|
||||
ENV DOCKER_WORKDIR="/code"
|
||||
|
||||
|
||||
#VOLUME /root/.conan
|
||||
|
||||
RUN mkdir -p ${DOCKER_WORKDIR}
|
||||
WORKDIR ${DOCKER_WORKDIR}
|
||||
|
||||
COPY ./dependencies ./dependencies
|
||||
COPY ./conanfile.txt ./conanfile.txt
|
||||
|
||||
RUN cd dependencies/mariadb-connector-c && \
|
||||
mkdir build && \
|
||||
cd build && \
|
||||
cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_SSL=OFF ..
|
||||
|
||||
|
||||
RUN mkdir build && \
|
||||
cd build && \
|
||||
conan install .. --build=missing -s build_type=Debug
|
||||
|
||||
#########################################################################################################
|
||||
# debug build proto and grpc
|
||||
#########################################################################################################
|
||||
From build_debug_preparation as proto_grpc
|
||||
|
||||
ENV DOCKER_WORKDIR="/code"
|
||||
WORKDIR ${DOCKER_WORKDIR}
|
||||
|
||||
COPY ./CMakeLists.txt .
|
||||
RUN cd build && \
|
||||
cmake -DCMAKE_BUILD_TYPE=Debug .. && \
|
||||
make -j${CPU_COUNT} protoc grpc_cpp_plugin
|
||||
|
||||
#########################################################################################################
|
||||
# parse proto and gettext
|
||||
#########################################################################################################
|
||||
From proto_grpc as proto_parse
|
||||
|
||||
ENV DOCKER_WORKDIR="/code"
|
||||
WORKDIR ${DOCKER_WORKDIR}
|
||||
|
||||
RUN mkdir src && \
|
||||
cd src && \
|
||||
mkdir cpp
|
||||
COPY ./src/proto ./src/proto
|
||||
COPY ./unix_parse_proto.sh .
|
||||
|
||||
RUN chmod +x unix_parse_proto.sh && \
|
||||
./unix_parse_proto.sh
|
||||
|
||||
|
||||
#########################################################################################################
|
||||
# Build debug
|
||||
#########################################################################################################
|
||||
From proto_parse as build_debug
|
||||
|
||||
ENV DOCKER_WORKDIR="/code"
|
||||
|
||||
USER root
|
||||
WORKDIR ${DOCKER_WORKDIR}
|
||||
|
||||
COPY ./src/cpp ./src/cpp
|
||||
COPY ./src/LOCALE ./src/LOCALE
|
||||
COPY ./compile_pot.sh .
|
||||
COPY ./files_to_translate.txt .
|
||||
|
||||
RUN chmod +x compile_pot.sh && \
|
||||
./compile_pot.sh
|
||||
|
||||
RUN cd build && \
|
||||
cmake -DCMAKE_BUILD_TYPE=Debug .. && \
|
||||
make -j$(nproc)
|
||||
|
||||
CMD bash
|
||||
|
||||
#########################################################################################################
|
||||
# run debug
|
||||
#########################################################################################################
|
||||
FROM ubuntu:latest as login_server_debug
|
||||
|
||||
WORKDIR "/usr/bin"
|
||||
|
||||
#RUN apt-get update && \
|
||||
# apt-get install -y --no-install-recommends gdb && \
|
||||
# apt-get autoclean && \
|
||||
# apt-get autoremove && \
|
||||
# apt-get clean && \
|
||||
# rm -rf /var/lib/apt/lists/*
|
||||
|
||||
VOLUME /var/log/grd_login
|
||||
|
||||
COPY --from=build_debug /code/build/bin/Gradido_LoginServer /usr/bin/
|
||||
COPY --from=build_debug /code/build/lib/libmariadb.so.3 /usr/lib/
|
||||
#COPY --from=build_debug /code/build/lib/libPocoNetSSLd.so.64 /usr/lib/libPocoNetSSLd.so.64
|
||||
RUN chmod +x /usr/bin/Gradido_LoginServer
|
||||
EXPOSE 1200
|
||||
EXPOSE 1201
|
||||
|
||||
#CMD gdb -ex=r Gradido_LoginServer
|
||||
CMD Gradido_LoginServer
|
||||
111
login_server/FindOpenSSL.cmake
Normal file
111
login_server/FindOpenSSL.cmake
Normal file
@ -0,0 +1,111 @@
|
||||
|
||||
|
||||
function(conan_message MESSAGE_OUTPUT)
|
||||
if(NOT CONAN_CMAKE_SILENT_OUTPUT)
|
||||
message(${ARGV${0}})
|
||||
endif()
|
||||
endfunction()
|
||||
|
||||
|
||||
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
|
||||
conan_message(STATUS "Conan: Using autogenerated FindOpenSSL.cmake")
|
||||
# Global approach
|
||||
set(OpenSSL_FOUND 1)
|
||||
set(OpenSSL_VERSION "1.0.2o")
|
||||
|
||||
find_package_handle_standard_args(OpenSSL REQUIRED_VARS
|
||||
OpenSSL_VERSION VERSION_VAR OpenSSL_VERSION)
|
||||
mark_as_advanced(OpenSSL_FOUND OpenSSL_VERSION)
|
||||
|
||||
|
||||
set(OpenSSL_INCLUDE_DIRS "${CONAN_INCLUDE_DIRS_OPENSSL}")
|
||||
set(OpenSSL_INCLUDE_DIR "${CONAN_INCLUDE_DIRS_OPENSSL}")
|
||||
set(OpenSSL_INCLUDES "${CONAN_INCLUDE_DIRS_OPENSSL}")
|
||||
set(OpenSSL_RES_DIRS "${CONAN_RES_DIRS_OPENSSL}")
|
||||
set(OPENSSL_ROOT_DIR "${CONAN_OPENSSL_ROOT}")
|
||||
set(OPENSSL_DIR "${CONAN_OPENSSL_ROOT}")
|
||||
set(OpenSSL_DEFINITIONS )
|
||||
set(OpenSSL_LINKER_FLAGS_LIST
|
||||
"$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,SHARED_LIBRARY>:>"
|
||||
"$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,MODULE_LIBRARY>:>"
|
||||
"$<$<STREQUAL:$<TARGET_PROPERTY:TYPE>,EXECUTABLE>:>"
|
||||
)
|
||||
set(OpenSSL_COMPILE_DEFINITIONS )
|
||||
set(OpenSSL_COMPILE_OPTIONS_LIST "" "")
|
||||
set(OpenSSL_COMPILE_OPTIONS_C "")
|
||||
set(OpenSSL_COMPILE_OPTIONS_CXX "")
|
||||
set(OpenSSL_LIBRARIES_TARGETS "") # Will be filled later, if CMake 3
|
||||
set(OpenSSL_LIBRARIES "") # Will be filled later
|
||||
set(OpenSSL_LIBS "") # Same as OpenSSL_LIBRARIES
|
||||
set(OpenSSL_FRAMEWORKS_FOUND "") # Will be filled later
|
||||
set(OpenSSL_BUILD_MODULES_PATHS )
|
||||
|
||||
|
||||
mark_as_advanced(OpenSSL_INCLUDE_DIRS
|
||||
OpenSSL_INCLUDE_DIR
|
||||
OpenSSL_INCLUDES
|
||||
OpenSSL_DEFINITIONS
|
||||
OpenSSL_LINKER_FLAGS_LIST
|
||||
OpenSSL_COMPILE_DEFINITIONS
|
||||
OpenSSL_COMPILE_OPTIONS_LIST
|
||||
OpenSSL_LIBRARIES
|
||||
OpenSSL_LIBS
|
||||
OpenSSL_LIBRARIES_TARGETS)
|
||||
|
||||
# Find the real .lib/.a and add them to OpenSSL_LIBS and OpenSSL_LIBRARY_LIST
|
||||
set(OpenSSL_LIBRARY_LIST ssl crypto dl pthread)
|
||||
set(OpenSSL_LIB_DIRS "${CONAN_LIB_DIRS_OPENSSL}")
|
||||
|
||||
# Gather all the libraries that should be linked to the targets (do not touch existing variables):
|
||||
set(_OpenSSL_DEPENDENCIES "zlib::zlib")
|
||||
|
||||
conan_package_library_targets("${OpenSSL_LIBRARY_LIST}" # libraries
|
||||
"${OpenSSL_LIB_DIRS}" # package_libdir
|
||||
"${_OpenSSL_DEPENDENCIES}" # deps
|
||||
OpenSSL_LIBRARIES # out_libraries
|
||||
OpenSSL_LIBRARIES_TARGETS # out_libraries_targets
|
||||
"" # build_type
|
||||
"OpenSSL") # package_name
|
||||
|
||||
set(OpenSSL_LIBS ${OpenSSL_LIBRARIES})
|
||||
|
||||
# We need to add our requirements too
|
||||
set(OpenSSL_LIBRARIES_TARGETS "${OpenSSL_LIBRARIES_TARGETS};zlib::zlib")
|
||||
set(OpenSSL_LIBRARIES "${OpenSSL_LIBRARIES};zlib::zlib")
|
||||
|
||||
set(CMAKE_MODULE_PATH "/home/dario/.conan/data/OpenSSL/1.0.2o/conan/stable/package/b781af3f476d0aa5070a0a35b544db7a3c193cc8/" ${CMAKE_MODULE_PATH})
|
||||
set(CMAKE_PREFIX_PATH "/home/dario/.conan/data/OpenSSL/1.0.2o/conan/stable/package/b781af3f476d0aa5070a0a35b544db7a3c193cc8/" ${CMAKE_PREFIX_PATH})
|
||||
|
||||
foreach(_BUILD_MODULE_PATH ${OpenSSL_BUILD_MODULES_PATHS})
|
||||
include(${_BUILD_MODULE_PATH})
|
||||
endforeach()
|
||||
|
||||
if(NOT ${CMAKE_VERSION} VERSION_LESS "3.0")
|
||||
# Target approach
|
||||
if(NOT TARGET OpenSSL::OpenSSL)
|
||||
add_library(OpenSSL::OpenSSL INTERFACE IMPORTED)
|
||||
if(OpenSSL_INCLUDE_DIRS)
|
||||
set_target_properties(OpenSSL::OpenSSL PROPERTIES INTERFACE_INCLUDE_DIRECTORIES
|
||||
"${OpenSSL_INCLUDE_DIRS}")
|
||||
endif()
|
||||
set_property(TARGET OpenSSL::OpenSSL PROPERTY INTERFACE_LINK_LIBRARIES
|
||||
"${OpenSSL_LIBRARIES_TARGETS};${OpenSSL_LINKER_FLAGS_LIST}")
|
||||
set_property(TARGET OpenSSL::OpenSSL PROPERTY INTERFACE_COMPILE_DEFINITIONS
|
||||
${OpenSSL_COMPILE_DEFINITIONS})
|
||||
set_property(TARGET OpenSSL::OpenSSL PROPERTY INTERFACE_COMPILE_OPTIONS
|
||||
"${OpenSSL_COMPILE_OPTIONS_LIST}")
|
||||
|
||||
# Library dependencies
|
||||
include(CMakeFindDependencyMacro)
|
||||
|
||||
if(NOT zlib_FOUND)
|
||||
find_dependency(zlib REQUIRED)
|
||||
else()
|
||||
message(STATUS "Dependency zlib already found")
|
||||
endif()
|
||||
|
||||
endif()
|
||||
endif()
|
||||
@ -1,17 +1,6 @@
|
||||
# get dependencies
|
||||
git submodule update --init --recursive
|
||||
|
||||
# build dependencies ed25519
|
||||
cd dependencies/iroha-ed25519
|
||||
mkdir build
|
||||
cd build
|
||||
# for windows with visual studio 14 2015
|
||||
# cmake .. -G"Visual Studio 14 2015 Win64" -DEDIMPL=ref10 -DHASH=sha2_sphlib -DRANDOM=bcryptgen -DBUILD=STATIC
|
||||
# for linux
|
||||
cmake .. -DEDIMPL=ref10 -DHASH=sha2_sphlib -DRANDOM=bcryptgen -DBUILD=STATIC
|
||||
make
|
||||
|
||||
cd ../../../
|
||||
|
||||
cd dependencies/mariadb-connector-c
|
||||
mkdir build
|
||||
@ -22,10 +11,19 @@ cd ../../../
|
||||
|
||||
# get more dependencies with conan (need conan from https://conan.io/)
|
||||
mkdir build && cd build
|
||||
conan remote add inexor https://api.bintray.com/conan/inexorgame/inexor-conan
|
||||
# // not used anymore
|
||||
# conan remote add inexor https://api.bintray.com/conan/inexorgame/inexor-conan
|
||||
# not needed, but bincrafter
|
||||
# conan install .. -s build_type=Debug
|
||||
conan install ..
|
||||
|
||||
# build Makefile with cmake
|
||||
cmake ..
|
||||
|
||||
make grpc
|
||||
# under windows build at least release for protoc.exe and grpc c++ plugin
|
||||
cd ../
|
||||
./unix_parse_proto.sh
|
||||
cd build
|
||||
make
|
||||
|
||||
|
||||
0
login_server/compile_pot.sh
Normal file → Executable file
0
login_server/compile_pot.sh
Normal file → Executable file
@ -1,17 +0,0 @@
|
||||
#!/bin/bash
|
||||
if [ ! -d "./src/cpp/proto" ] ; then
|
||||
mkdir ./src/cpp/proto
|
||||
fi
|
||||
if [ ! -d "./src/cpp/proto/gradido" ] ; then
|
||||
mkdir ./src/cpp/proto/gradido
|
||||
fi
|
||||
|
||||
protoc --cpp_out=./src/cpp/proto --proto_path=./src/proto ./src/proto/gradido/*.proto
|
||||
|
||||
#if [ ! -d "./src/cpp/proto/hedera" ] ; then
|
||||
# mkdir ./src/cpp/proto/hedera
|
||||
#fi
|
||||
|
||||
|
||||
#./protoc --cpp_out=./src/cpp/proto/hedera --proto_path=./src/proto/hedera/hedera-protobuf/src/main/proto ./src/proto/hedera/hedera-protobuf/src/main/proto/*.proto
|
||||
|
||||
@ -1,10 +1,13 @@
|
||||
[requires]
|
||||
Poco/1.9.4@pocoproject/stable
|
||||
libsodium/1.0.18@bincrafters/stable
|
||||
protobuf/3.9.1@bincrafters/stable
|
||||
boost/1.71.0@conan/stable
|
||||
gtest/1.8.1@bincrafters/stable
|
||||
|
||||
[generators]
|
||||
cmake
|
||||
|
||||
[options]
|
||||
Poco:enable_data_sqlite=False
|
||||
Poco:enable_mongodb=False
|
||||
Poco:enable_redis=False
|
||||
|
||||
1
login_server/dependencies/cmake-modules
Submodule
1
login_server/dependencies/cmake-modules
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 7304f680be32915e772466ebddc5b7d3b453abd9
|
||||
1
login_server/dependencies/grpc
Submodule
1
login_server/dependencies/grpc
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 7d7e4567625db7cfebf8969a225948097a3f9f89
|
||||
@ -1 +0,0 @@
|
||||
Subproject commit 1fdf5b6e10be2b1d7118aa3c32dc7acde02cb0cd
|
||||
@ -1 +1 @@
|
||||
Subproject commit 1f7480118acfe12be9e356827aa30ae9b9eca9a7
|
||||
Subproject commit 159540fe8c8f30b281748fe8a1b79e8b17993a67
|
||||
1
login_server/dependencies/poco
Submodule
1
login_server/dependencies/poco
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 3fc3e5f5b8462f7666952b43381383a79b8b5d92
|
||||
1
login_server/doc/.gitignore
vendored
Normal file
1
login_server/doc/.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
||||
html
|
||||
16
login_server/parse_proto.sh
Normal file
16
login_server/parse_proto.sh
Normal file
@ -0,0 +1,16 @@
|
||||
#!/bin/bash
|
||||
if [ ! -d "./src/cpp/proto" ] ; then
|
||||
mkdir ./src/cpp/proto
|
||||
fi
|
||||
if [ ! -d "./src/cpp/proto/gradido" ] ; then
|
||||
mkdir ./src/cpp/proto/gradido
|
||||
fi
|
||||
|
||||
./protoc --cpp_out=./src/cpp/proto --proto_path=./src/proto ./src/proto/gradido/*.proto
|
||||
|
||||
if [ ! -d "./src/cpp/proto/hedera" ] ; then
|
||||
mkdir ./src/cpp/proto/hedera
|
||||
fi
|
||||
|
||||
|
||||
./protoc --plugin=protoc-gen-grpc=./grpc_cpp_plugin.exe --cpp_out=./src/cpp/proto/hedera --grpc_out=./src/cpp/proto/hedera --proto_path=./src/proto/hedera/hedera-protobuf/src/main/proto ./src/proto/hedera/hedera-protobuf/src/main/proto/*.proto
|
||||
9
login_server/skeema/gradido_login/app_access_tokens.sql
Normal file
9
login_server/skeema/gradido_login/app_access_tokens.sql
Normal file
@ -0,0 +1,9 @@
|
||||
CREATE TABLE `app_access_tokens` (
|
||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
||||
`user_id` int NOT NULL,
|
||||
`access_code` bigint unsigned NOT NULL,
|
||||
`created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`updated` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `access_code` (`access_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
8
login_server/skeema/gradido_login/crypto_keys.sql
Normal file
8
login_server/skeema/gradido_login/crypto_keys.sql
Normal file
@ -0,0 +1,8 @@
|
||||
CREATE TABLE `crypto_keys` (
|
||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
||||
`private_key` varbinary(80) NOT NULL,
|
||||
`public_key` binary(32) NOT NULL,
|
||||
`crypto_key_type_id` int NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE(`public_key`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
@ -1,15 +1,15 @@
|
||||
CREATE TABLE `elopage_buys` (
|
||||
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
||||
`elopage_user_id` int NOT NULL,
|
||||
`affiliate_program_id` int NOT NULL,
|
||||
`publisher_id` int NOT NULL,
|
||||
`order_id` int NOT NULL,
|
||||
`product_id` int NOT NULL,
|
||||
`product_price` int NOT NULL,
|
||||
`payer_email` varchar(255) COLLATE utf8_bin NOT NULL,
|
||||
`publisher_email` varchar(255) COLLATE utf8_bin NOT NULL,
|
||||
`payer_email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
|
||||
`publisher_email` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
|
||||
`payed` tinyint NOT NULL,
|
||||
`success_date` datetime NOT NULL,
|
||||
`event` varchar(255) CHARACTER SET utf8mb4 NOT NULL,
|
||||
`event` varchar(255) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
CREATE TABLE `email_opt_in` (
|
||||
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
||||
`user_id` int NOT NULL,
|
||||
`verification_code` bigint unsigned NOT NULL,
|
||||
`email_opt_in_type_id` int NOT NULL,
|
||||
`created` datetime NOT NULL DEFAULT current_timestamp(),
|
||||
`resend_count` int DEFAULT 0,
|
||||
`updated` DATETIME on update CURRENT_TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`resend_count` int DEFAULT '0',
|
||||
`updated` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `verification_code` (`verification_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
CREATE TABLE `email_opt_in_types` (
|
||||
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) NOT NULL,
|
||||
`description` varchar(255) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
|
||||
10
login_server/skeema/gradido_login/groups.sql
Normal file
10
login_server/skeema/gradido_login/groups.sql
Normal file
@ -0,0 +1,10 @@
|
||||
CREATE TABLE `groups` (
|
||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
||||
`alias` varchar(190) NOT NULL,
|
||||
`name` varchar(255) NOT NULL,
|
||||
`url` varchar(255) NOT NULL,
|
||||
`home` varchar(255) DEFAULT "/",
|
||||
`description` text,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `alias` (`alias`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
12
login_server/skeema/gradido_login/hedera_accounts.sql
Normal file
12
login_server/skeema/gradido_login/hedera_accounts.sql
Normal file
@ -0,0 +1,12 @@
|
||||
CREATE TABLE `hedera_accounts` (
|
||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
||||
`user_id` int unsigned NOT NULL,
|
||||
`account_hedera_id` int unsigned NOT NULL,
|
||||
`account_key_id` int unsigned NOT NULL,
|
||||
`balance` bigint unsigned NOT NULL DEFAULT '0',
|
||||
`network_type` int NOT NULL DEFAULT '0',
|
||||
`updated` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `account_hedera_id` (`account_hedera_id`),
|
||||
UNIQUE KEY `account_key_id` (`account_key_id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
7
login_server/skeema/gradido_login/hedera_ids.sql
Normal file
7
login_server/skeema/gradido_login/hedera_ids.sql
Normal file
@ -0,0 +1,7 @@
|
||||
CREATE TABLE `hedera_ids` (
|
||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
||||
`shardNum` bigint NOT NULL DEFAULT '0',
|
||||
`realmNum` bigint NOT NULL DEFAULT '0',
|
||||
`num` bigint NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
16
login_server/skeema/gradido_login/hedera_topics.sql
Normal file
16
login_server/skeema/gradido_login/hedera_topics.sql
Normal file
@ -0,0 +1,16 @@
|
||||
CREATE TABLE `hedera_topics` (
|
||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
||||
`topic_hedera_id` int unsigned NOT NULL,
|
||||
`name` VARCHAR(255) NOT NULL DEFAULT '',
|
||||
`auto_renew_account_hedera_id` int unsigned DEFAULT NULL,
|
||||
`auto_renew_period` int unsigned NOT NULL DEFAULT '0',
|
||||
`group_id` int unsigned NOT NULL,
|
||||
`admin_key_id` int unsigned DEFAULT NULL,
|
||||
`submit_key_id` int unsigned DEFAULT NULL,
|
||||
`current_timeout` DATETIME NOT NULL DEFAULT '2000-01-01 00:00:00',
|
||||
`sequence_number` bigint unsigned DEFAULT '0',
|
||||
`running_hash` VARBINARY(64) DEFAULT NULL,
|
||||
`running_hash_version` int unsigned DEFAULT 0,
|
||||
`updated` DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
@ -0,0 +1,19 @@
|
||||
INSERT INTO `groups` (`id`, `alias`, `name`, `url`, `home`, `description`) VALUES
|
||||
(1, 'dockerStage2', 'docker stage2 gradido group', 'localhost', '/', 'gradido test group for docker and stage2');
|
||||
|
||||
INSERT INTO `hedera_ids` (`id`, `shardNum`, `realmNum`, `num`) VALUES
|
||||
(1, 0, 0, 3),
|
||||
(2, 0, 0, 3327),
|
||||
(3, 0, 0, 413151);
|
||||
|
||||
INSERT INTO `node_servers` (`id`, `url`, `port`, `group_id`, `server_type`, `node_hedera_id`, `last_live_sign`) VALUES
|
||||
(1, 'http://0.testnet.hedera.com', 50211, 0, 4, 1, '2000-01-01 00:00:00');
|
||||
|
||||
INSERT INTO `hedera_accounts` (`id`, `user_id`, `account_hedera_id`, `account_key_id`, `balance`, `network_type`, `updated`) VALUES
|
||||
(1, 1, 2, 1, 1000000000000, 1, '2021-01-07 10:22:52');
|
||||
|
||||
INSERT INTO `hedera_topics` (`id`, `topic_hedera_id`, `name`, `auto_renew_account_hedera_id`, `auto_renew_period`, `group_id`, `admin_key_id`, `submit_key_id`, `current_timeout`, `sequence_number`, `running_hash`, `running_hash_version`, `updated`) VALUES
|
||||
(1, 3, 'dockerStage2', 1, 7890000, 1, 0, 0, '2021-06-08 23:17:19', 0, NULL, 0, '2021-03-09 16:42:34');
|
||||
|
||||
|
||||
|
||||
10
login_server/skeema/gradido_login/node_servers.sql
Normal file
10
login_server/skeema/gradido_login/node_servers.sql
Normal file
@ -0,0 +1,10 @@
|
||||
CREATE TABLE `node_servers` (
|
||||
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`url` VARCHAR(255) NOT NULL,
|
||||
`port` INT UNSIGNED NOT NULL,
|
||||
`group_id` INT UNSIGNED NULL DEFAULT '0',
|
||||
`server_type` INT UNSIGNED NOT NULL DEFAULT '0',
|
||||
`node_hedera_id` INT UNSIGNED NULL DEFAULT '0',
|
||||
`last_live_sign` DATETIME NOT NULL DEFAULT '2000-01-01 00:00:00',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
13
login_server/skeema/gradido_login/pending_tasks.sql
Normal file
13
login_server/skeema/gradido_login/pending_tasks.sql
Normal file
@ -0,0 +1,13 @@
|
||||
CREATE TABLE `pending_tasks` (
|
||||
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`user_id` int UNSIGNED DEFAULT 0,
|
||||
`hedera_id` int UNSIGNED DEFAULT 0,
|
||||
`request` varbinary(2048) NOT NULL,
|
||||
`created` datetime NOT NULL,
|
||||
`finished` datetime DEFAULT '2000-01-01 000000',
|
||||
`result_json` varchar(255) DEFAULT NULL,
|
||||
`task_type_id` int UNSIGNED NOT NULL,
|
||||
`child_pending_task_id` int UNSIGNED DEFAULT 0,
|
||||
`parent_pending_task_id` int UNSIGNED DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE = InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
@ -1,7 +1,7 @@
|
||||
CREATE TABLE `roles` (
|
||||
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) NOT NULL,
|
||||
`description` varchar(255) NOT NULL,
|
||||
`flags` bigint NOT NULL DEFAULT 0,
|
||||
`flags` bigint NOT NULL DEFAULT '0',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
CREATE TABLE `user_backups` (
|
||||
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
||||
`user_id` int NOT NULL,
|
||||
`passphrase` text NOT NULL,
|
||||
`mnemonic_type` int DEFAULT '-1',
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
CREATE TABLE `user_roles` (
|
||||
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
||||
`user_id` int NOT NULL,
|
||||
`role_id` int NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
|
||||
@ -1,16 +1,19 @@
|
||||
CREATE TABLE `users` (
|
||||
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`email` varchar(191) NOT NULL,
|
||||
`first_name` varchar(150) NOT NULL,
|
||||
`last_name` varchar(255) DEFAULT '',
|
||||
`password` bigint unsigned DEFAULT 0,
|
||||
`pubkey` binary(32) DEFAULT NULL,
|
||||
`privkey` binary(80) DEFAULT NULL,
|
||||
`created` datetime NOT NULL DEFAULT current_timestamp(),
|
||||
`email_checked` tinyint NOT NULL DEFAULT 0,
|
||||
`passphrase_shown` tinyint NOT NULL DEFAULT 0,
|
||||
`language` varchar(4) NOT NULL DEFAULT 'de',
|
||||
`disabled` BOOLEAN NULL DEFAULT FALSE,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `email` (`email`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
CREATE TABLE `users` (
|
||||
`id` int unsigned NOT NULL AUTO_INCREMENT,
|
||||
`email` varchar(191) NOT NULL,
|
||||
`first_name` varchar(150) NOT NULL,
|
||||
`last_name` varchar(255) DEFAULT '',
|
||||
`username` varchar(255) DEFAULT '',
|
||||
`password` bigint unsigned DEFAULT '0',
|
||||
`pubkey` binary(32) DEFAULT NULL,
|
||||
`privkey` binary(80) DEFAULT NULL,
|
||||
`email_hash` binary(32) DEFAULT NULL,
|
||||
`created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
`email_checked` tinyint NOT NULL DEFAULT '0',
|
||||
`passphrase_shown` tinyint NOT NULL DEFAULT '0',
|
||||
`language` varchar(4) NOT NULL DEFAULT 'de',
|
||||
`disabled` tinyint DEFAULT '0',
|
||||
`group_id` int unsigned DEFAULT 0,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `email` (`email`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
|
||||
@ -1,339 +0,0 @@
|
||||
#include "KeyPair.h"
|
||||
|
||||
#include <memory.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
#include "../SingletonManager/ConnectionManager.h"
|
||||
|
||||
#include "Poco/Types.h"
|
||||
|
||||
#include "Passphrase.h"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
using namespace Poco::Data::Keywords;
|
||||
|
||||
#define STR_BUFFER_SIZE 25
|
||||
|
||||
|
||||
|
||||
KeyPair::KeyPair()
|
||||
: mPrivateKey(nullptr), mSodiumSecret(nullptr)
|
||||
{
|
||||
// TODO: set memory to zero for
|
||||
// unsigned char mPublicKey[ed25519_pubkey_SIZE];
|
||||
// unsigned char mSodiumPublic[crypto_sign_PUBLICKEYBYTES];
|
||||
memset(mPublicKey, 0, ed25519_pubkey_SIZE);
|
||||
memset(mSodiumPublic, 0, crypto_sign_PUBLICKEYBYTES);
|
||||
}
|
||||
|
||||
KeyPair::~KeyPair()
|
||||
{
|
||||
auto mm = MemoryManager::getInstance();
|
||||
//printf("[KeyPair::~KeyPair] privkey: %d, soduium privkey: %d \n", mPrivateKey, mSodiumSecret);
|
||||
if (mPrivateKey) {
|
||||
//delete mPrivateKey;
|
||||
mm->releaseMemory(mPrivateKey);
|
||||
mPrivateKey = nullptr;
|
||||
}
|
||||
if (mSodiumSecret) {
|
||||
//delete mSodiumSecret;
|
||||
mm->releaseMemory(mSodiumSecret);
|
||||
mSodiumSecret = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
std::string KeyPair::passphraseTransform(const std::string& passphrase, const Mnemonic* currentWordSource, const Mnemonic* targetWordSource)
|
||||
{
|
||||
if (!currentWordSource || !targetWordSource) {
|
||||
return "";
|
||||
}
|
||||
if (targetWordSource == currentWordSource) {
|
||||
return passphrase;
|
||||
}
|
||||
auto word_indices = createWordIndices(passphrase, currentWordSource);
|
||||
if (!word_indices) {
|
||||
return "";
|
||||
}
|
||||
|
||||
return createClearPassphraseFromWordIndices(word_indices, targetWordSource);
|
||||
}
|
||||
|
||||
bool KeyPair::generateFromPassphrase(const char* passphrase, const Mnemonic* word_source)
|
||||
{
|
||||
auto er = ErrorManager::getInstance();
|
||||
auto mm = MemoryManager::getInstance();
|
||||
// libsodium doc: https://libsodium.gitbook.io/doc/advanced/hmac-sha2
|
||||
// https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki
|
||||
//crypto_auth_hmacsha512_keygen
|
||||
auto word_indices = createWordIndices(passphrase, word_source);
|
||||
if (!word_indices) {
|
||||
return false;
|
||||
}
|
||||
|
||||
std::string clearPassphrase =
|
||||
createClearPassphraseFromWordIndices(word_indices, &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER]);
|
||||
|
||||
// printf("clear passphrase: %s\n", clearPassphrase.data());
|
||||
sha_context state;
|
||||
|
||||
unsigned char hash[SHA_512_SIZE];
|
||||
//crypto_auth_hmacsha512_state state;
|
||||
size_t word_index_size = sizeof(word_indices);
|
||||
//crypto_auth_hmacsha512_init(&state, (unsigned char*)word_indices, sizeof(word_indices));
|
||||
|
||||
sha512_init(&state);
|
||||
sha512_update(&state, *word_indices, word_indices->size());
|
||||
sha512_update(&state, (unsigned char*)clearPassphrase.data(), clearPassphrase.size());
|
||||
//crypto_auth_hmacsha512_update(&state, (unsigned char*)passphrase, pass_phrase_size);
|
||||
sha512_final(&state, hash);
|
||||
//crypto_auth_hmacsha512_final(&state, hash);
|
||||
|
||||
/*
|
||||
// debug passphrase
|
||||
printf("\passsphrase: <%s>\n", passphrase);
|
||||
printf("size word indices: %u\n", word_indices->size());
|
||||
std::string word_indicesHex = getHex(*word_indices, word_indices->size());
|
||||
printf("word_indices: \n%s\n", word_indicesHex.data());
|
||||
printf("word_indices: \n");
|
||||
Poco::UInt64* word_indices_p = (Poco::UInt64*)(word_indices->data());
|
||||
for (int i = 0; i < PHRASE_WORD_COUNT; i++) {
|
||||
if (i > 0) printf(" ");
|
||||
printf("%4hu", word_indices_p[i]);
|
||||
}
|
||||
printf("\n");
|
||||
|
||||
printf("\nclear passphrase: \n%s\n", clearPassphrase.data());
|
||||
std::string hex_clearPassphrase = getHex((const unsigned char*)clearPassphrase.data(), clearPassphrase.size());
|
||||
printf("passphrase bin: \n%s\n\n", hex_clearPassphrase.data());
|
||||
|
||||
//*/
|
||||
|
||||
mm->releaseMemory(word_indices);
|
||||
|
||||
|
||||
//ed25519_create_keypair(public_key, private_key, hash);
|
||||
private_key_t prv_key_t;
|
||||
memcpy(prv_key_t.data, hash, 32);
|
||||
public_key_t pbl_key_t;
|
||||
ed25519_derive_public_key(&prv_key_t, &pbl_key_t);
|
||||
|
||||
//memcpy(private_key, prv_key_t.data, 32);
|
||||
if (!mPrivateKey) {
|
||||
//delete mPrivateKey;
|
||||
mPrivateKey = mm->getFreeMemory(ed25519_privkey_SIZE);
|
||||
if (!mPrivateKey) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
//mPrivateKey = new ObfusArray(ed25519_privkey_SIZE, prv_key_t.data);
|
||||
|
||||
memcpy(*mPrivateKey, prv_key_t.data, ed25519_privkey_SIZE);
|
||||
|
||||
memcpy(mPublicKey, pbl_key_t.data, ed25519_pubkey_SIZE);
|
||||
|
||||
if (!mSodiumSecret) {
|
||||
//delete mSodiumSecret;
|
||||
//mm->releaseMemory(mSodiumSecret);
|
||||
mSodiumSecret = mm->getFreeMemory(crypto_sign_SECRETKEYBYTES);
|
||||
}
|
||||
//unsigned char sodium_secret[crypto_sign_SECRETKEYBYTES];
|
||||
|
||||
|
||||
crypto_sign_seed_keypair(mSodiumPublic, *mSodiumSecret, *mPrivateKey);
|
||||
|
||||
|
||||
// print hex for all keys for debugging
|
||||
/* printf("// ********** Keys ************* //\n");
|
||||
printf("Public: \t%s\n", getHex(mPublicKey, ed25519_pubkey_SIZE).data());
|
||||
printf("Private: \t%s\n", getHex(*mPrivateKey, mPrivateKey->size()).data());
|
||||
printf("Sodium Public: \t%s\n", getHex(mSodiumPublic, crypto_sign_PUBLICKEYBYTES).data());
|
||||
printf("Sodium Private: \t%s\n", getHex(*mSodiumSecret, mSodiumSecret->size()).data());
|
||||
printf("// ********* Keys End ************ //\n");
|
||||
*/
|
||||
//printf("[KeyPair::generateFromPassphrase] finished!\n");
|
||||
// using
|
||||
return true;
|
||||
}
|
||||
|
||||
bool KeyPair::generateFromPassphrase(const std::string& passphrase)
|
||||
{
|
||||
//static bool validatePassphrase(const std::string& passphrase, Mnemonic** wordSource = nullptr);
|
||||
Mnemonic* wordSource = nullptr;
|
||||
if (validatePassphrase(passphrase, &wordSource)) {
|
||||
return generateFromPassphrase(passphrase.data(), wordSource);
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
||||
MemoryBin* KeyPair::createWordIndices(const std::string& passphrase, const Mnemonic* word_source)
|
||||
{
|
||||
auto er = ErrorManager::getInstance();
|
||||
auto mm = MemoryManager::getInstance();
|
||||
|
||||
auto word_indices = mm->getFreeMemory(sizeof(Poco::UInt64) * PHRASE_WORD_COUNT);
|
||||
Poco::UInt64* word_indices_p = (Poco::UInt64*)(word_indices->data());
|
||||
//Poco::UInt64 word_indices_old[PHRASE_WORD_COUNT] = { 0 };
|
||||
//memset(word_indices_old, 0, PHRASE_WORD_COUNT * sizeof(Poco::UInt64));// *sizeof(unsigned long));
|
||||
memset(*word_indices, 0, word_indices->size());
|
||||
|
||||
//DHASH key = DRMakeStringHash(passphrase);
|
||||
size_t pass_phrase_size = passphrase.size();
|
||||
|
||||
char acBuffer[STR_BUFFER_SIZE]; memset(acBuffer, 0, STR_BUFFER_SIZE);
|
||||
size_t buffer_cursor = 0;
|
||||
|
||||
// get word indices for hmac key
|
||||
unsigned char word_cursor = 0;
|
||||
for (auto it = passphrase.begin(); it != passphrase.end(); it++)
|
||||
{
|
||||
if (*it == ' ') {
|
||||
if (buffer_cursor < 3) {
|
||||
continue;
|
||||
}
|
||||
if (PHRASE_WORD_COUNT > word_cursor && word_source->isWordExist(acBuffer)) {
|
||||
word_indices_p[word_cursor] = word_source->getWordIndex(acBuffer);
|
||||
//word_indices_old[word_cursor] = word_source->getWordIndex(acBuffer);
|
||||
}
|
||||
else {
|
||||
er->addError(new ParamError("KeyPair::generateFromPassphrase", "word didn't exist", acBuffer));
|
||||
er->sendErrorsAsEmail();
|
||||
mm->releaseMemory(word_indices);
|
||||
return nullptr;
|
||||
}
|
||||
word_cursor++;
|
||||
memset(acBuffer, 0, STR_BUFFER_SIZE);
|
||||
buffer_cursor = 0;
|
||||
|
||||
}
|
||||
else {
|
||||
acBuffer[buffer_cursor++] = *it;
|
||||
}
|
||||
}
|
||||
if (PHRASE_WORD_COUNT > word_cursor && word_source->isWordExist(acBuffer)) {
|
||||
word_indices_p[word_cursor] = word_source->getWordIndex(acBuffer);
|
||||
//word_indices_old[word_cursor] = word_source->getWordIndex(acBuffer);
|
||||
word_cursor++;
|
||||
}
|
||||
//printf("word cursor: %d\n", word_cursor);
|
||||
/*if (memcmp(word_indices_p, word_indices_old, word_indices->size()) != 0) {
|
||||
|
||||
printf("not identical\n");
|
||||
memcpy(word_indices_p, word_indices_old, word_indices->size());
|
||||
}*/
|
||||
return word_indices;
|
||||
}
|
||||
|
||||
std::string KeyPair::createClearPassphraseFromWordIndices(MemoryBin* word_indices, const Mnemonic* word_source)
|
||||
{
|
||||
Poco::UInt64* word_indices_p = (Poco::UInt64*)word_indices->data();
|
||||
std::string clearPassphrase;
|
||||
for (int i = 0; i < PHRASE_WORD_COUNT; i++) {
|
||||
if (i * sizeof(Poco::UInt64) >= word_indices->size()) break;
|
||||
auto word = word_source->getWord(word_indices_p[i]);
|
||||
if (word) {
|
||||
clearPassphrase += word;
|
||||
clearPassphrase += " ";
|
||||
}
|
||||
}
|
||||
return clearPassphrase;
|
||||
}
|
||||
|
||||
std::string KeyPair::filterPassphrase(const std::string& passphrase)
|
||||
{
|
||||
return Passphrase::filter(passphrase);
|
||||
}
|
||||
|
||||
std::string KeyPair::getPubkeyHex()
|
||||
{
|
||||
const size_t hexSize = crypto_sign_PUBLICKEYBYTES * 2 + 1;
|
||||
|
||||
char hexString[hexSize];
|
||||
memset(hexString, 0, hexSize);
|
||||
sodium_bin2hex(hexString, hexSize, mSodiumPublic, crypto_sign_PUBLICKEYBYTES);
|
||||
|
||||
return std::string(hexString);
|
||||
}
|
||||
|
||||
std::string KeyPair::getHex(const unsigned char* data, Poco::UInt32 size)
|
||||
{
|
||||
auto mm = MemoryManager::getInstance();
|
||||
|
||||
Poco::UInt32 hexSize = size * 2 + 1;
|
||||
auto hexMem = mm->getFreeMemory(hexSize);
|
||||
//char* hexString = (char*)malloc(hexSize);
|
||||
memset(*hexMem, 0, hexSize);
|
||||
sodium_bin2hex(*hexMem, hexSize, data, size);
|
||||
std::string hex = (char*)*hexMem;
|
||||
// free(hexString);
|
||||
mm->releaseMemory(hexMem);
|
||||
|
||||
return hex;
|
||||
}
|
||||
|
||||
std::string KeyPair::getHex(const MemoryBin* data)
|
||||
{
|
||||
return getHex(*data, data->size());
|
||||
}
|
||||
|
||||
bool KeyPair::savePrivKey(int userId)
|
||||
{
|
||||
auto cm = ConnectionManager::getInstance();
|
||||
auto em = ErrorManager::getInstance();
|
||||
auto mysql_session = cm->getConnection(CONNECTION_MYSQL_LOGIN_SERVER);
|
||||
Poco::Data::Statement update(mysql_session);
|
||||
Poco::Data::BLOB privkey_blob((const unsigned char*)(*mPrivateKey), mPrivateKey->size());
|
||||
|
||||
update << "UPDATE users set privkey = ? where id = ?",
|
||||
use(privkey_blob), use(userId);
|
||||
|
||||
try {
|
||||
if (update.execute() != 1) {
|
||||
em->addError(new ParamError("KeyPair::savePrivKey", "error writing privkey, user not found? ", std::to_string(userId)));
|
||||
em->sendErrorsAsEmail();
|
||||
return false;
|
||||
}
|
||||
} catch (Poco::Exception& ex) {
|
||||
em->addError(new ParamError("KeyPair::savePrivKey", "exception by running mysql", ex.displayText()));
|
||||
em->sendErrorsAsEmail();
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
bool KeyPair::isPubkeysTheSame(const unsigned char* pubkey) const
|
||||
{
|
||||
return sodium_memcmp(pubkey, mPublicKey, ed25519_pubkey_SIZE) == 0;
|
||||
}
|
||||
|
||||
bool KeyPair::validatePassphrase(const std::string& passphrase, Mnemonic** wordSource/* = nullptr*/)
|
||||
{
|
||||
std::istringstream iss(passphrase);
|
||||
std::vector<std::string> results(std::istream_iterator<std::string>{iss},
|
||||
std::istream_iterator<std::string>());
|
||||
|
||||
for (int i = 0; i < ServerConfig::Mnemonic_Types::MNEMONIC_MAX; i++) {
|
||||
Mnemonic& m = ServerConfig::g_Mnemonic_WordLists[i];
|
||||
bool existAll = true;
|
||||
for (auto it = results.begin(); it != results.end(); it++) {
|
||||
if (*it == "\0" || *it == "" || it->size() < 3) continue;
|
||||
if (!m.isWordExist(*it)) {
|
||||
if (i == 1) {
|
||||
int zahl = 0;
|
||||
}
|
||||
//printf("wordlist: %d, word not found: %s\n", i, it->data());
|
||||
existAll = false;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
if (existAll) {
|
||||
if (wordSource) {
|
||||
*wordSource = &m;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
}
|
||||
@ -1,69 +0,0 @@
|
||||
#ifndef GRADIDO_LOGIN_SERVER_CRYPTO_KEY_PAIR
|
||||
#define GRADIDO_LOGIN_SERVER_CRYPTO_KEY_PAIR
|
||||
|
||||
#include "Obfus_array.h"
|
||||
#include "../SingletonManager/MemoryManager.h"
|
||||
#include "mnemonic.h"
|
||||
|
||||
#include "ed25519/ed25519.h"
|
||||
#include <sodium.h>
|
||||
|
||||
class UserWriteKeysIntoDB;
|
||||
class UserGenerateKeys;
|
||||
class DebugPassphrasePage;
|
||||
class User;
|
||||
class RepairDefectPassphrase;
|
||||
|
||||
// TODO: https://libsodium.gitbook.io/doc/advanced/ed25519-curve25519
|
||||
class KeyPair
|
||||
{
|
||||
friend UserWriteKeysIntoDB;
|
||||
friend UserGenerateKeys;
|
||||
friend DebugPassphrasePage;
|
||||
friend User;
|
||||
friend RepairDefectPassphrase;
|
||||
public:
|
||||
KeyPair();
|
||||
~KeyPair();
|
||||
|
||||
bool generateFromPassphrase(const char* passphrase, const Mnemonic* word_source);
|
||||
bool generateFromPassphrase(const std::string& passphrase);
|
||||
static std::string passphraseTransform(const std::string& passphrase, const Mnemonic* currentWordSource, const Mnemonic* targetWordSource);
|
||||
static std::string filterPassphrase(const std::string& passphrase);
|
||||
static bool validatePassphrase(const std::string& passphrase, Mnemonic** wordSource = nullptr);
|
||||
|
||||
std::string getPubkeyHex();
|
||||
bool savePrivKey(int userId);
|
||||
static std::string getHex(const unsigned char* data, Poco::UInt32 size);
|
||||
static std::string getHex(const MemoryBin* data);
|
||||
|
||||
inline const unsigned char* getPublicKey() const { return mSodiumPublic; }
|
||||
|
||||
bool isPubkeysTheSame(const unsigned char* pubkey) const;
|
||||
|
||||
protected:
|
||||
const MemoryBin* getPrivateKey() const { return mSodiumSecret; }
|
||||
|
||||
static MemoryBin* createWordIndices(const std::string& passphrase, const Mnemonic* word_source);
|
||||
static std::string createClearPassphraseFromWordIndices(MemoryBin* word_indices, const Mnemonic* word_source);
|
||||
|
||||
|
||||
private:
|
||||
// 32 Byte
|
||||
//! \brief ed25519 ref10 private key
|
||||
MemoryBin* mPrivateKey;
|
||||
|
||||
// 64 Byte
|
||||
//! \brief ed25519 libsodium private key
|
||||
MemoryBin* mSodiumSecret;
|
||||
|
||||
// 32 Byte
|
||||
//! \brief ed25519 ref10 public key
|
||||
unsigned char mPublicKey[ed25519_pubkey_SIZE];
|
||||
|
||||
// 32 Byte
|
||||
//! \brief ed25519 libsodium public key
|
||||
unsigned char mSodiumPublic[crypto_sign_PUBLICKEYBYTES];
|
||||
};
|
||||
|
||||
#endif //GRADIDO_LOGIN_SERVER_CRYPTO_KEY_PAIR
|
||||
@ -151,13 +151,22 @@ MemoryBin* KeyPairEd25519::sign(const unsigned char* message, size_t messageSize
|
||||
|
||||
}
|
||||
|
||||
MemoryBin* KeyPairEd25519::getCryptedPrivKey(const Poco::AutoPtr<AuthenticatedEncryption> password) const
|
||||
bool KeyPairEd25519::verify(const std::string& message, const std::string& signature) const
|
||||
{
|
||||
if (message == "" || signature == "") return false;
|
||||
if (crypto_sign_verify_detached((const unsigned char*)signature.data(), (const unsigned char*)message.data(), message.size(), mSodiumPublic) != 0) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
MemoryBin* KeyPairEd25519::getCryptedPrivKey(const Poco::AutoPtr<SecretKeyCryptography> password) const
|
||||
{
|
||||
if (password.isNull()) return nullptr;
|
||||
if (!mSodiumSecret) return nullptr;
|
||||
|
||||
MemoryBin* encryptedKey = nullptr;
|
||||
if (AuthenticatedEncryption::AUTH_ENCRYPT_OK == password->encrypt(mSodiumSecret, &encryptedKey)) {
|
||||
if (SecretKeyCryptography::AUTH_ENCRYPT_OK == password->encrypt(mSodiumSecret, &encryptedKey)) {
|
||||
return encryptedKey;
|
||||
}
|
||||
else {
|
||||
|
||||
@ -9,12 +9,14 @@
|
||||
* \date: 2020-06-04
|
||||
*
|
||||
* \brief: Key Pairs class for ed25519 keys, used for default gradido transactions
|
||||
* TODO: add verify method
|
||||
*/
|
||||
|
||||
|
||||
#include "sodium.h"
|
||||
#include "AuthenticatedEncryption.h"
|
||||
#include "SecretKeyCryptography.h"
|
||||
#include "Passphrase.h"
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
|
||||
class KeyPairEd25519 : public IKeyPair
|
||||
{
|
||||
@ -35,7 +37,11 @@ public:
|
||||
inline MemoryBin* sign(const std::string& bodyBytes) const { return sign((const unsigned char*)bodyBytes.data(), bodyBytes.size()); }
|
||||
MemoryBin* sign(const unsigned char* message, size_t messageSize) const;
|
||||
|
||||
bool verify(const std::string& message, const std::string& signature) const;
|
||||
|
||||
inline const unsigned char* getPublicKey() const { return mSodiumPublic; }
|
||||
inline std::string getPublicKeyHex() const { return DataTypeConverter::binToHex(mSodiumPublic, getPublicKeySize()); }
|
||||
const static size_t getPublicKeySize() { return crypto_sign_PUBLICKEYBYTES; }
|
||||
|
||||
inline bool isTheSame(const KeyPairEd25519& b) const {
|
||||
return 0 == sodium_memcmp(mSodiumPublic, b.mSodiumPublic, crypto_sign_PUBLICKEYBYTES);
|
||||
@ -63,7 +69,7 @@ public:
|
||||
inline bool hasPrivateKey() const { return mSodiumSecret != nullptr; }
|
||||
|
||||
//! \brief only way to get a private key.. encrypted
|
||||
MemoryBin* getCryptedPrivKey(const Poco::AutoPtr<AuthenticatedEncryption> password) const;
|
||||
MemoryBin* getCryptedPrivKey(const Poco::AutoPtr<SecretKeyCryptography> password) const;
|
||||
|
||||
protected:
|
||||
|
||||
@ -75,6 +81,9 @@ private:
|
||||
//! \brief ed25519 libsodium private key
|
||||
//!
|
||||
//! Why it is a pointer and the public is an array?
|
||||
//! Because MemoryBin should be replaced by a memory obfuscation class which make it harder to steal the private key from computer memory
|
||||
//! And because private key can be nullptr for example to verify a signed message
|
||||
|
||||
//! TODO: replace MemoryBin by a memory obfuscation class which make it hard to steal the private key from memory
|
||||
MemoryBin* mSodiumSecret;
|
||||
|
||||
|
||||
221
login_server/src/cpp/Crypto/KeyPairHedera.cpp
Normal file
221
login_server/src/cpp/Crypto/KeyPairHedera.cpp
Normal file
@ -0,0 +1,221 @@
|
||||
#include "KeyPairHedera.h"
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
#include <assert.h>
|
||||
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
|
||||
KeyPairHedera::KeyPairHedera()
|
||||
: mPrivateKey(nullptr)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
KeyPairHedera::KeyPairHedera(const unsigned char* privateKey, size_t privateKeySize, const unsigned char* publicKey/* = nullptr*/, size_t publicKeySize/* = 0*/)
|
||||
: mPrivateKey(nullptr)
|
||||
{
|
||||
auto derPrefixPriv = DataTypeConverter::hexToBin("302e020100300506032b657004220420");
|
||||
auto derPrefixPub = DataTypeConverter::hexToBin("302a300506032b6570032100");
|
||||
|
||||
auto mm = MemoryManager::getInstance();
|
||||
|
||||
if (privateKey) {
|
||||
switch (privateKeySize) {
|
||||
case 48:
|
||||
// key with prefix
|
||||
if (0 == sodium_memcmp(privateKey, *derPrefixPriv, derPrefixPriv->size())) {
|
||||
//int crypto_sign_seed_keypair(unsigned char *pk, unsigned char *sk, const unsigned char *seed);
|
||||
auto seed = mm->getFreeMemory(crypto_sign_ed25519_SEEDBYTES);
|
||||
memcpy(*seed, &privateKey[derPrefixPriv->size()], crypto_sign_ed25519_SEEDBYTES);
|
||||
createKeyFromSeed(seed->data(), seed->size());
|
||||
mm->releaseMemory(seed);
|
||||
break;
|
||||
}
|
||||
case 32:
|
||||
createKeyFromSeed(privateKey, privateKeySize);
|
||||
break;
|
||||
case 64:
|
||||
//mPrivateKey = privateKey;
|
||||
if (!mPrivateKey || mPrivateKey->size() != privateKeySize) {
|
||||
if (mPrivateKey) {
|
||||
mm->releaseMemory(mPrivateKey);
|
||||
}
|
||||
mPrivateKey = mm->getFreeMemory(privateKeySize);
|
||||
memcpy(*mPrivateKey, privateKey, privateKeySize);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw Poco::Exception("[KeyPairHedera] invalid private key");
|
||||
}
|
||||
|
||||
// check public
|
||||
}
|
||||
if (publicKey) {
|
||||
switch (publicKeySize)
|
||||
{
|
||||
case 32: { // raw public key
|
||||
memcpy(mPublicKey, publicKey, publicKeySize);
|
||||
break;
|
||||
}
|
||||
case 44: // DER encoded public key
|
||||
if (0 == sodium_memcmp(publicKey, *derPrefixPub, derPrefixPub->size())) {
|
||||
memcpy(mPublicKey, &publicKey[derPrefixPub->size()], crypto_sign_PUBLICKEYBYTES);
|
||||
}
|
||||
break;
|
||||
default:
|
||||
throw Poco::Exception("[KeyPairHedera] invalid public key");
|
||||
}
|
||||
}
|
||||
auto public_key_2 = mm->getFreeMemory(crypto_sign_PUBLICKEYBYTES);
|
||||
crypto_sign_ed25519_sk_to_pk(*public_key_2, *mPrivateKey);
|
||||
if (sodium_memcmp(*public_key_2, mPublicKey, crypto_sign_PUBLICKEYBYTES) != 0) {
|
||||
throw "public keys not match";
|
||||
}
|
||||
|
||||
mm->releaseMemory(public_key_2);
|
||||
mm->releaseMemory(derPrefixPriv);
|
||||
mm->releaseMemory(derPrefixPub);
|
||||
}
|
||||
KeyPairHedera::KeyPairHedera(const MemoryBin* privateKey, const MemoryBin* publicKey /* = nullptr*/)
|
||||
: KeyPairHedera(privateKey->data(), privateKey->size(), publicKey->data(), publicKey->size())
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
KeyPairHedera::KeyPairHedera(const std::vector<unsigned char>& privateKey, const unsigned char* publicKey/* = nullptr*/, size_t publicKeySize/* = 0*/)
|
||||
: KeyPairHedera(privateKey.data(), privateKey.size(), publicKey, publicKeySize)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
KeyPairHedera::~KeyPairHedera()
|
||||
{
|
||||
auto mm = MemoryManager::getInstance();
|
||||
if (mPrivateKey) {
|
||||
mm->releaseMemory(mPrivateKey);
|
||||
mPrivateKey = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
KeyPairHedera* KeyPairHedera::create()
|
||||
{
|
||||
/*
|
||||
The crypto_sign_keypair() function randomly generates a secret key and a corresponding public key.
|
||||
The public key is put into pk (crypto_sign_PUBLICKEYBYTES bytes)
|
||||
and the secret key into sk (crypto_sign_SECRETKEYBYTES bytes).
|
||||
*/
|
||||
|
||||
assert(getPublicKeySize() == crypto_sign_PUBLICKEYBYTES);
|
||||
|
||||
auto mm = MemoryManager::getInstance();
|
||||
auto private_key = mm->getFreeMemory(crypto_sign_SECRETKEYBYTES);
|
||||
auto public_key = mm->getFreeMemory(getPublicKeySize());
|
||||
|
||||
crypto_sign_keypair(*public_key, *private_key);
|
||||
return new KeyPairHedera(private_key, public_key);
|
||||
}
|
||||
|
||||
|
||||
void KeyPairHedera::createKeyFromSeed(const unsigned char* seed, size_t seedSize)
|
||||
{
|
||||
assert(seed && seedSize == crypto_sign_ed25519_SEEDBYTES);
|
||||
|
||||
auto mm = MemoryManager::getInstance();
|
||||
auto secret_key = mm->getFreeMemory(crypto_sign_SECRETKEYBYTES);
|
||||
crypto_sign_seed_keypair(mPublicKey, *secret_key, seed);
|
||||
|
||||
if (mPrivateKey) {
|
||||
mm->releaseMemory(mPrivateKey);
|
||||
}
|
||||
mPrivateKey = secret_key;
|
||||
|
||||
// iroha
|
||||
//ed25519_privkey_SIZE
|
||||
//ed25519_derive_public_key(const private_key_t* sk,public_key_t* pk);
|
||||
}
|
||||
|
||||
MemoryBin* KeyPairHedera::sign(const unsigned char* message, size_t messageSize) const
|
||||
{
|
||||
if (!message || !messageSize) return nullptr;
|
||||
if (!mPrivateKey) return nullptr;
|
||||
auto mm = MemoryManager::getInstance();
|
||||
auto em = ErrorManager::getInstance();
|
||||
|
||||
const static char functionName[] = "KeyPairHedera::sign";
|
||||
|
||||
auto signBinBuffer = mm->getFreeMemory(crypto_sign_BYTES);
|
||||
unsigned long long actualSignLength = 0;
|
||||
|
||||
if (crypto_sign_detached(*signBinBuffer, &actualSignLength, message, messageSize, *mPrivateKey)) {
|
||||
em->addError(new Error(functionName, "sign failed"));
|
||||
auto messageHex = DataTypeConverter::binToHex(message, messageSize);
|
||||
em->addError(new ParamError(functionName, "message as hex", messageHex));
|
||||
mm->releaseMemory(signBinBuffer);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
if (crypto_sign_verify_detached(*signBinBuffer, message, messageSize, mPublicKey) != 0) {
|
||||
// Incorrect signature!
|
||||
//printf("c[KeyBuffer::%s] sign verify failed\n", __FUNCTION__);
|
||||
em->addError(new Error(functionName, "sign verify failed"));
|
||||
auto messageHex = DataTypeConverter::binToHex(message, messageSize);
|
||||
em->addError(new ParamError(functionName, "message as hex", messageHex));
|
||||
mm->releaseMemory(signBinBuffer);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
// debug
|
||||
/*const size_t hex_sig_size = crypto_sign_BYTES * 2 + 1;
|
||||
char sig_hex[hex_sig_size];
|
||||
sodium_bin2hex(sig_hex, hex_sig_size, *signBinBuffer, crypto_sign_BYTES);
|
||||
printf("[User::sign] signature hex: %s\n", sig_hex);
|
||||
*/
|
||||
|
||||
return signBinBuffer;
|
||||
|
||||
}
|
||||
|
||||
bool KeyPairHedera::verify(const unsigned char* message, size_t messageSize, MemoryBin* signature) const
|
||||
{
|
||||
if (crypto_sign_verify_detached(*signature, message, messageSize, mPublicKey) != 0) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
MemoryBin* KeyPairHedera::getCryptedPrivKey(const Poco::AutoPtr<SecretKeyCryptography> password) const
|
||||
{
|
||||
if (password.isNull()) return nullptr;
|
||||
if (!mPrivateKey) return nullptr;
|
||||
|
||||
auto private_key_hex_string = DataTypeConverter::binToHex(mPrivateKey);
|
||||
printf("[KeyPairHedera::getCryptedPrivKey] private key hex: %s\n", private_key_hex_string.data());
|
||||
|
||||
MemoryBin* encryptedKey = nullptr;
|
||||
if (SecretKeyCryptography::AUTH_ENCRYPT_OK == password->encrypt(mPrivateKey, &encryptedKey)) {
|
||||
auto encrypted_private_key_hex_string = DataTypeConverter::binToHex(encryptedKey);
|
||||
printf("[KeyPairHedera::getCryptedPrivKey] encryptet private key hex: %s\n", encrypted_private_key_hex_string.data());
|
||||
return encryptedKey;
|
||||
}
|
||||
else {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
MemoryBin* KeyPairHedera::getPrivateKeyCopy() const
|
||||
{
|
||||
if (!mPrivateKey) return nullptr;
|
||||
auto mm = MemoryManager::getInstance();
|
||||
MemoryBin* private_key_copy = mm->getFreeMemory(mPrivateKey->size());
|
||||
memcpy(*private_key_copy, *mPrivateKey, mPrivateKey->size());
|
||||
return private_key_copy;
|
||||
}
|
||||
|
||||
MemoryBin* KeyPairHedera::getPublicKeyCopy() const
|
||||
{
|
||||
auto mm = MemoryManager::getInstance();
|
||||
auto public_key = mm->getFreeMemory(crypto_sign_PUBLICKEYBYTES);
|
||||
memcpy(*public_key, mPublicKey, crypto_sign_PUBLICKEYBYTES);
|
||||
return public_key;
|
||||
}
|
||||
95
login_server/src/cpp/Crypto/KeyPairHedera.h
Normal file
95
login_server/src/cpp/Crypto/KeyPairHedera.h
Normal file
@ -0,0 +1,95 @@
|
||||
#ifndef __GRADIDO_LOGIN_SERVER_CRYPTO_HEDERA_KEYS_H
|
||||
#define __GRADIDO_LOGIN_SERVER_CRYPTO_HEDERA_KEYS_H
|
||||
|
||||
#include "IKeyPair.h"
|
||||
|
||||
/*!
|
||||
* \author: Dario Rekowski
|
||||
*
|
||||
* \date: 2020-08-28
|
||||
*
|
||||
* \brief: Key Pairs class for ed25519 keys, used by hedera for transaction sign
|
||||
*/
|
||||
|
||||
|
||||
#include "sodium.h"
|
||||
#include "SecretKeyCryptography.h"
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
|
||||
class KeyPairHedera : public IKeyPair
|
||||
{
|
||||
public:
|
||||
//! \param privateKey: copy
|
||||
//! \param publicKey: copy
|
||||
//!
|
||||
KeyPairHedera(const unsigned char* privateKey, size_t privateKeySize, const unsigned char* publicKey = nullptr, size_t publicKeySize = 0);
|
||||
KeyPairHedera(const MemoryBin* privateKey, const MemoryBin* publicKey = nullptr);
|
||||
KeyPairHedera(const std::vector<unsigned char>& privateKey, const unsigned char* publicKey = nullptr, size_t publicKeySize = 0);
|
||||
|
||||
|
||||
static KeyPairHedera* create();
|
||||
|
||||
~KeyPairHedera();
|
||||
|
||||
|
||||
//! \return caller take ownership of return value
|
||||
MemoryBin* sign(const MemoryBin* message) const { return sign(message->data(), message->size()); }
|
||||
inline MemoryBin* sign(const std::string& bodyBytes) const { return sign((const unsigned char*)bodyBytes.data(), bodyBytes.size()); }
|
||||
MemoryBin* sign(const unsigned char* message, size_t messageSize) const;
|
||||
|
||||
bool verify(const unsigned char* message, size_t messageSize, MemoryBin* signature) const;
|
||||
|
||||
inline const unsigned char* getPublicKey() const { return mPublicKey; }
|
||||
MemoryBin* getPublicKeyCopy() const;
|
||||
inline std::string getPublicKeyHex() const { return DataTypeConverter::binToHex(mPublicKey, getPublicKeySize()); }
|
||||
const static size_t getPublicKeySize() {return crypto_sign_PUBLICKEYBYTES;}
|
||||
|
||||
inline bool isTheSame(const KeyPairHedera& b) const {
|
||||
return 0 == sodium_memcmp(mPublicKey, b.mPublicKey, getPublicKeySize());
|
||||
}
|
||||
inline bool isTheSame(const unsigned char* pubkey) const {
|
||||
if (!pubkey)
|
||||
return false;
|
||||
return 0 == sodium_memcmp(mPublicKey, pubkey, getPublicKeySize());
|
||||
}
|
||||
//! \return 0 if the same
|
||||
//! \return -1 if not the same
|
||||
//! \return 1 if hasn't private key
|
||||
inline int isTheSame(const MemoryBin* privkey) const {
|
||||
if (!mPrivateKey) return 1;
|
||||
if (privkey->size() != mPrivateKey->size()) return -1;
|
||||
return sodium_memcmp(*mPrivateKey, *privkey, privkey->size());
|
||||
}
|
||||
|
||||
inline bool operator == (const KeyPairHedera& b) const { return isTheSame(b); }
|
||||
inline bool operator != (const KeyPairHedera& b) const { return !isTheSame(b); }
|
||||
|
||||
inline bool operator == (const unsigned char* b) const { return isTheSame(b); }
|
||||
inline bool operator != (const unsigned char* b) const { return !isTheSame(b); }
|
||||
|
||||
inline bool hasPrivateKey() const { return mPrivateKey != nullptr; }
|
||||
|
||||
//! \brief
|
||||
MemoryBin* getCryptedPrivKey(const Poco::AutoPtr<SecretKeyCryptography> password) const;
|
||||
MemoryBin* getPrivateKeyCopy() const;
|
||||
inline std::string getPrivateKeyHex(const Poco::AutoPtr<SecretKeyCryptography> password) const { if (!mPrivateKey) return "0x0"; return DataTypeConverter::binToHex(mPrivateKey); }
|
||||
|
||||
protected:
|
||||
|
||||
KeyPairHedera();
|
||||
void createKeyFromSeed(const unsigned char* seed, size_t seedSize);
|
||||
|
||||
|
||||
private:
|
||||
// 64 Byte
|
||||
//! \brief ed25519 libsodium private key
|
||||
//!
|
||||
//! TODO: replace MemoryBin by a memory obfuscation class which make it hard to steal the private key from memory
|
||||
MemoryBin* mPrivateKey;
|
||||
|
||||
// 32 Byte
|
||||
//! \brief ed25519 libsodium public key
|
||||
unsigned char mPublicKey[crypto_sign_PUBLICKEYBYTES];
|
||||
};
|
||||
|
||||
#endif //__GRADIDO_LOGIN_SERVER_CRYPTO_HEDERA_KEYS_H
|
||||
@ -133,6 +133,11 @@ Poco::AutoPtr<Passphrase> Passphrase::transform(const Mnemonic* targetWordSource
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Poco::AutoPtr<Passphrase> Passphrase::create(const std::string& passphrase, const Mnemonic* wordSource)
|
||||
{
|
||||
return new Passphrase(passphrase, wordSource);
|
||||
}
|
||||
|
||||
Poco::AutoPtr<Passphrase> Passphrase::create(const MemoryBin* wordIndices, const Mnemonic* wordSource)
|
||||
{
|
||||
if (PHRASE_WORD_COUNT * sizeof(Poco::UInt16) >= wordIndices->size()) {
|
||||
|
||||
@ -16,6 +16,7 @@ public:
|
||||
|
||||
static Poco::AutoPtr<Passphrase> create(const Poco::UInt16 wordIndices[PHRASE_WORD_COUNT], const Mnemonic* wordSource);
|
||||
static Poco::AutoPtr<Passphrase> create(const MemoryBin* wordIndices, const Mnemonic* wordSource);
|
||||
static Poco::AutoPtr<Passphrase> create(const std::string& passphrase, const Mnemonic* wordSource);
|
||||
//! \brief generate new passphrase with random
|
||||
static Poco::AutoPtr<Passphrase> generate(const Mnemonic* wordSource);
|
||||
static const Mnemonic* detectMnemonic(const std::string& passphrase, const KeyPairEd25519* keyPair = nullptr);
|
||||
|
||||
@ -1,22 +1,22 @@
|
||||
#include "AuthenticatedEncryption.h"
|
||||
#include "SecretKeyCryptography.h"
|
||||
|
||||
#include "sodium.h"
|
||||
#include "../ServerConfig.h"
|
||||
#include <assert.h>
|
||||
#include "../lib/Profiler.h"
|
||||
|
||||
AuthenticatedEncryption::AuthenticatedEncryption()
|
||||
SecretKeyCryptography::SecretKeyCryptography()
|
||||
: mOpsLimit(10), mMemLimit(33554432), mAlgo(2), mEncryptionKey(nullptr), mEncryptionKeyHash(0)
|
||||
{
|
||||
}
|
||||
|
||||
AuthenticatedEncryption::AuthenticatedEncryption(unsigned long long opslimit, size_t memlimit, int algo)
|
||||
SecretKeyCryptography::SecretKeyCryptography(unsigned long long opslimit, size_t memlimit, int algo)
|
||||
: mOpsLimit(opslimit), mMemLimit(memlimit), mAlgo(algo), mEncryptionKey(nullptr), mEncryptionKeyHash(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
AuthenticatedEncryption::~AuthenticatedEncryption()
|
||||
SecretKeyCryptography::~SecretKeyCryptography()
|
||||
{
|
||||
if (mEncryptionKey) {
|
||||
MemoryManager::getInstance()->releaseMemory(mEncryptionKey);
|
||||
@ -24,7 +24,7 @@ AuthenticatedEncryption::~AuthenticatedEncryption()
|
||||
}
|
||||
}
|
||||
|
||||
AuthenticatedEncryption::ResultType AuthenticatedEncryption::createKey(const std::string& salt_parameter, const std::string& passwd)
|
||||
SecretKeyCryptography::ResultType SecretKeyCryptography::createKey(const std::string& salt_parameter, const std::string& passwd)
|
||||
{
|
||||
assert(crypto_hash_sha512_BYTES >= crypto_pwhash_SALTBYTES);
|
||||
|
||||
@ -76,10 +76,10 @@ AuthenticatedEncryption::ResultType AuthenticatedEncryption::createKey(const std
|
||||
assert(ServerConfig::g_ServerCryptoKey);
|
||||
crypto_shorthash((unsigned char*)&mEncryptionKeyHash, *mEncryptionKey, crypto_box_SEEDBYTES, *ServerConfig::g_ServerCryptoKey);
|
||||
|
||||
return AUTH_ENCRYPT_OK;
|
||||
return AUTH_CREATE_ENCRYPTION_KEY_SUCCEED;
|
||||
}
|
||||
|
||||
AuthenticatedEncryption::ResultType AuthenticatedEncryption::encrypt(const MemoryBin* message, MemoryBin** encryptedMessage) const
|
||||
SecretKeyCryptography::ResultType SecretKeyCryptography::encrypt(const MemoryBin* message, MemoryBin** encryptedMessage) const
|
||||
{
|
||||
assert(message && encryptedMessage);
|
||||
std::shared_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
@ -111,7 +111,7 @@ AuthenticatedEncryption::ResultType AuthenticatedEncryption::encrypt(const Memor
|
||||
return AUTH_ENCRYPT_OK;
|
||||
}
|
||||
|
||||
AuthenticatedEncryption::ResultType AuthenticatedEncryption::decrypt(const unsigned char* encryptedMessage, size_t encryptedMessageSize, MemoryBin** message) const
|
||||
SecretKeyCryptography::ResultType SecretKeyCryptography::decrypt(const unsigned char* encryptedMessage, size_t encryptedMessageSize, MemoryBin** message) const
|
||||
{
|
||||
assert(message);
|
||||
std::shared_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
@ -139,7 +139,7 @@ AuthenticatedEncryption::ResultType AuthenticatedEncryption::decrypt(const unsig
|
||||
return AUTH_DECRYPT_OK;
|
||||
}
|
||||
|
||||
const char* AuthenticatedEncryption::getErrorMessage(ResultType type)
|
||||
const char* SecretKeyCryptography::getErrorMessage(ResultType type)
|
||||
{
|
||||
switch (type) {
|
||||
case AUTH_ENCRYPT_OK: return "everything is ok";
|
||||
@ -17,19 +17,20 @@
|
||||
*
|
||||
* \date: 07-06-2020
|
||||
*
|
||||
* \brief: Wrapper Class for make using libsodium authenticated encryption easy, used for encrypt private keys for user
|
||||
* \brief: Wrapper Class for make using libsodium secret key encryption easy, used for encrypt private keys for user with pwhash
|
||||
*
|
||||
*/
|
||||
|
||||
typedef Poco::UInt64 KeyHashed;
|
||||
|
||||
class AuthenticatedEncryption : public AutoPtrContainer
|
||||
class SecretKeyCryptography : public AutoPtrContainer
|
||||
{
|
||||
public:
|
||||
|
||||
enum ResultType {
|
||||
AUTH_ENCRYPT_OK,
|
||||
AUTH_DECRYPT_OK,
|
||||
AUTH_CREATE_ENCRYPTION_KEY_SUCCEED,
|
||||
AUTH_CREATE_ENCRYPTION_KEY_FAILED,
|
||||
AUTH_NO_KEY,
|
||||
AUTH_ENCRYPT_MESSAGE_FAILED,
|
||||
@ -37,20 +38,20 @@ public:
|
||||
};
|
||||
|
||||
//! \brief init with default algorithms parameter
|
||||
AuthenticatedEncryption();
|
||||
SecretKeyCryptography();
|
||||
//! \brief init with custom algorithms parameter
|
||||
//!
|
||||
//! details see in libsodium crypto_pwhash
|
||||
AuthenticatedEncryption(unsigned long long opslimit, size_t memlimit, int algo);
|
||||
SecretKeyCryptography(unsigned long long opslimit, size_t memlimit, int algo);
|
||||
|
||||
~AuthenticatedEncryption();
|
||||
~SecretKeyCryptography();
|
||||
|
||||
|
||||
inline KeyHashed getKeyHashed() const { std::shared_lock<std::shared_mutex> _lock(mWorkingMutex); return mEncryptionKeyHash; }
|
||||
inline bool operator == (const Poco::AutoPtr<AuthenticatedEncryption>& b) const {
|
||||
inline bool operator == (const Poco::AutoPtr<SecretKeyCryptography>& b) const {
|
||||
return isTheSame(b);
|
||||
}
|
||||
inline bool isTheSame(const Poco::AutoPtr<AuthenticatedEncryption>& b) const {
|
||||
inline bool isTheSame(const Poco::AutoPtr<SecretKeyCryptography>& b) const {
|
||||
std::shared_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
if (b.isNull()) return false;
|
||||
return mEncryptionKeyHash == b->getKeyHashed();
|
||||
@ -1,267 +1,280 @@
|
||||
#include "Gradido_LoginServer.h"
|
||||
#include "ServerConfig.h"
|
||||
#include "HTTPInterface/PageRequestHandlerFactory.h"
|
||||
#include "JSONInterface/JsonRequestHandlerFactory.h"
|
||||
|
||||
#include "lib/Profiler.h"
|
||||
|
||||
#include "SingletonManager/ConnectionManager.h"
|
||||
#include "SingletonManager/SessionManager.h"
|
||||
#include "SingletonManager/EmailManager.h"
|
||||
|
||||
#include "controller/User.h"
|
||||
|
||||
#include "Poco/Util/HelpFormatter.h"
|
||||
#include "Poco/Net/ServerSocket.h"
|
||||
#include "Poco/Net/HTTPServer.h"
|
||||
#include "Poco/Net/SSLManager.h"
|
||||
#include "Poco/Environment.h"
|
||||
#include "Poco/Logger.h"
|
||||
#include "Poco/Path.h"
|
||||
#include "Poco/AsyncChannel.h"
|
||||
#include "Poco/SimpleFileChannel.h"
|
||||
#include "Poco/ConsoleChannel.h"
|
||||
#include "Poco/SplitterChannel.h"
|
||||
#include "MySQL/Poco/Connector.h"
|
||||
|
||||
|
||||
#include <sodium.h>
|
||||
|
||||
|
||||
|
||||
Gradido_LoginServer::Gradido_LoginServer()
|
||||
: _helpRequested(false)
|
||||
{
|
||||
}
|
||||
|
||||
Gradido_LoginServer::~Gradido_LoginServer()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void Gradido_LoginServer::initialize(Application& self)
|
||||
{
|
||||
loadConfiguration(); // load default configuration files, if present
|
||||
ServerApplication::initialize(self);
|
||||
}
|
||||
|
||||
void Gradido_LoginServer::uninitialize()
|
||||
{
|
||||
ServerApplication::uninitialize();
|
||||
}
|
||||
|
||||
void Gradido_LoginServer::defineOptions(Poco::Util::OptionSet& options)
|
||||
{
|
||||
ServerApplication::defineOptions(options);
|
||||
|
||||
/*options.addOption(
|
||||
Poco::Util::Option("help", "h", "display help information on command line arguments")
|
||||
.required(false)
|
||||
.repeatable(false));*/
|
||||
options.addOption(
|
||||
Poco::Util::Option("config", "c", "use non default config file (default is /etc/grd_login.properties)", false)
|
||||
.repeatable(false)
|
||||
.argument("Gradido_LoginServer.properties", true)
|
||||
.callback(Poco::Util::OptionCallback<Gradido_LoginServer>(this, &Gradido_LoginServer::handleOption)));
|
||||
|
||||
}
|
||||
|
||||
void Gradido_LoginServer::handleOption(const std::string& name, const std::string& value)
|
||||
{
|
||||
//printf("handle option: %s with value: %s\n", name.data(), value.data());
|
||||
if (name == "config") {
|
||||
mConfigPath = value;
|
||||
return;
|
||||
}
|
||||
ServerApplication::handleOption(name, value);
|
||||
if (name == "help") _helpRequested = true;
|
||||
|
||||
}
|
||||
|
||||
void Gradido_LoginServer::displayHelp()
|
||||
{
|
||||
Poco::Util::HelpFormatter helpFormatter(options());
|
||||
helpFormatter.setCommand(commandName());
|
||||
helpFormatter.setUsage("OPTIONS");
|
||||
helpFormatter.setHeader("Gradido Login Server");
|
||||
helpFormatter.format(std::cout);
|
||||
}
|
||||
|
||||
void Gradido_LoginServer::createConsoleFileAsyncLogger(std::string name, std::string filePath)
|
||||
{
|
||||
Poco::AutoPtr<Poco::ConsoleChannel> logConsoleChannel(new Poco::ConsoleChannel);
|
||||
Poco::AutoPtr<Poco::SimpleFileChannel> logFileChannel(new Poco::SimpleFileChannel(filePath));
|
||||
logFileChannel->setProperty("rotation", "500 K");
|
||||
Poco::AutoPtr<Poco::SplitterChannel> logSplitter(new Poco::SplitterChannel);
|
||||
logSplitter->addChannel(logConsoleChannel);
|
||||
logSplitter->addChannel(logFileChannel);
|
||||
|
||||
Poco::AutoPtr<Poco::AsyncChannel> logAsyncChannel(new Poco::AsyncChannel(logSplitter));
|
||||
|
||||
Poco::Logger& log = Poco::Logger::get(name);
|
||||
log.setChannel(logAsyncChannel);
|
||||
log.setLevel("information");
|
||||
}
|
||||
|
||||
int Gradido_LoginServer::main(const std::vector<std::string>& args)
|
||||
{
|
||||
|
||||
Profiler usedTime;
|
||||
if (_helpRequested)
|
||||
{
|
||||
displayHelp();
|
||||
}
|
||||
else
|
||||
{
|
||||
// ********** logging ************************************
|
||||
std::string log_Path = "/var/log/grd_login/";
|
||||
//#ifdef _WIN32
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
log_Path = "./";
|
||||
#endif
|
||||
|
||||
// init speed logger
|
||||
Poco::AutoPtr<Poco::SimpleFileChannel> speedLogFileChannel(new Poco::SimpleFileChannel(log_Path + "speedLog.txt"));
|
||||
/*
|
||||
The optional log file rotation mode:
|
||||
never: no rotation (default)
|
||||
<n>: rotate if file size exceeds <n> bytes
|
||||
<n> K: rotate if file size exceeds <n> Kilobytes
|
||||
<n> M: rotate if file size exceeds <n> Megabytes
|
||||
*/
|
||||
speedLogFileChannel->setProperty("rotation", "500 K");
|
||||
Poco::AutoPtr<Poco::AsyncChannel> speedLogAsyncChannel(new Poco::AsyncChannel(speedLogFileChannel));
|
||||
|
||||
Poco::Logger& speedLogger = Poco::Logger::get("SpeedLog");
|
||||
speedLogger.setChannel(speedLogAsyncChannel);
|
||||
speedLogger.setLevel("information");
|
||||
|
||||
// logging for request handling
|
||||
createConsoleFileAsyncLogger("requestLog", log_Path + "requestLog.txt");
|
||||
|
||||
// error logging
|
||||
createConsoleFileAsyncLogger("errorLog", log_Path + "errorLog.txt");
|
||||
Poco::Logger& errorLog = Poco::Logger::get("errorLog");
|
||||
|
||||
createConsoleFileAsyncLogger("emailLog", log_Path + "emailLog.txt");
|
||||
|
||||
// *************** load from config ********************************************
|
||||
|
||||
std::string cfg_Path = Poco::Path::config() + "grd_login/grd_login.properties";
|
||||
if (mConfigPath != "") {
|
||||
cfg_Path = mConfigPath;
|
||||
}
|
||||
|
||||
try {
|
||||
loadConfiguration(cfg_Path);
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
errorLog.error("error loading config: %s from path: %s", ex.displayText(), cfg_Path);
|
||||
}
|
||||
|
||||
unsigned short port = (unsigned short)config().getInt("HTTPServer.port", 9980);
|
||||
unsigned short json_port = (unsigned short)config().getInt("JSONServer.port", 1201);
|
||||
|
||||
|
||||
//printf("show mnemonic list: \n");
|
||||
//printf(ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER].getCompleteWordList().data());
|
||||
if (!ServerConfig::initServerCrypto(config())) {
|
||||
//printf("[Gradido_LoginServer::%s] error init server crypto\n", __FUNCTION__);
|
||||
errorLog.error("[Gradido_LoginServer::main] error init server crypto");
|
||||
return Application::EXIT_CONFIG;
|
||||
}
|
||||
|
||||
// first check time for crypto
|
||||
auto testUser = new User("email@google.de", "Max", "Mustermann");
|
||||
Profiler timeUsed;
|
||||
testUser->validatePwd("haz27Newpassword", nullptr);
|
||||
ServerConfig::g_FakeLoginSleepTime = (int)std::round(timeUsed.millis());
|
||||
delete testUser;
|
||||
|
||||
Poco::Int64 i1 = randombytes_random();
|
||||
Poco::Int64 i2 = randombytes_random();
|
||||
ServerConfig::g_ServerKeySeed->put(1, i1 | (i2 << 8));
|
||||
|
||||
ServerConfig::initEMailAccount(config());
|
||||
EmailManager::getInstance()->init(config());
|
||||
|
||||
// start cpu scheduler
|
||||
uint8_t worker_count = Poco::Environment::processorCount() * 2;
|
||||
|
||||
ServerConfig::g_CPUScheduler = new UniLib::controller::CPUSheduler(worker_count, "Default Worker");
|
||||
ServerConfig::g_CryptoCPUScheduler = new UniLib::controller::CPUSheduler(2, "Crypto Worker");
|
||||
|
||||
// load up connection configs
|
||||
// register MySQL connector
|
||||
Poco::Data::MySQL::Connector::registerConnector();
|
||||
//Poco::Data::MySQL::Connector::KEY;
|
||||
auto conn = ConnectionManager::getInstance();
|
||||
//conn->setConnection()
|
||||
//printf("try connect login server mysql db\n");
|
||||
try {
|
||||
conn->setConnectionsFromConfig(config(), CONNECTION_MYSQL_LOGIN_SERVER);
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
// maybe we in docker environment and db needs some time to start up
|
||||
// let's wait 10 seconds
|
||||
int count = 10;
|
||||
while (count > 0) {
|
||||
printf("\rwait on mysql/mariadb %d seconds...", count);
|
||||
count--;
|
||||
Poco::Thread::sleep(1000);
|
||||
}
|
||||
conn->setConnectionsFromConfig(config(), CONNECTION_MYSQL_LOGIN_SERVER);
|
||||
}
|
||||
//printf("try connect php server mysql \n");
|
||||
//conn->setConnectionsFromConfig(config(), CONNECTION_MYSQL_PHP_SERVER);
|
||||
|
||||
SessionManager::getInstance()->init();
|
||||
// put urandom on linux servers
|
||||
//srand();
|
||||
|
||||
Poco::Net::initializeSSL();
|
||||
if(!ServerConfig::initSSLClientContext()) {
|
||||
//printf("[Gradido_LoginServer::%s] error init server SSL Client\n", __FUNCTION__);
|
||||
errorLog.error("[Gradido_LoginServer::main] error init server SSL Client\n");
|
||||
return Application::EXIT_CONFIG;
|
||||
}
|
||||
|
||||
// schedule email verification resend
|
||||
controller::User::checkIfVerificationEmailsShouldBeResend(ServerConfig::g_CronJobsTimer);
|
||||
|
||||
// HTTP Interface Server
|
||||
// set-up a server socket
|
||||
Poco::Net::ServerSocket svs(port);
|
||||
// set-up a HTTPServer instance
|
||||
Poco::ThreadPool& pool = Poco::ThreadPool::defaultPool();
|
||||
Poco::Net::HTTPServer srv(new PageRequestHandlerFactory, svs, new Poco::Net::HTTPServerParams);
|
||||
ServerConfig::g_ServerKeySeed->put(7, 918276611);
|
||||
|
||||
// start the HTTPServer
|
||||
srv.start();
|
||||
|
||||
// JSON Interface Server
|
||||
Poco::Net::ServerSocket json_svs(json_port);
|
||||
Poco::Net::HTTPServer json_srv(new JsonRequestHandlerFactory, json_svs, new Poco::Net::HTTPServerParams);
|
||||
|
||||
// start the json server
|
||||
json_srv.start();
|
||||
|
||||
printf("[Gradido_LoginServer::main] started in %s\n", usedTime.string().data());
|
||||
// wait for CTRL-C or kill
|
||||
waitForTerminationRequest();
|
||||
|
||||
// Stop the HTTPServer
|
||||
srv.stop();
|
||||
// Stop the json server
|
||||
json_srv.stop();
|
||||
|
||||
ServerConfig::unload();
|
||||
Poco::Net::uninitializeSSL();
|
||||
// Optional: Delete all global objects allocated by libprotobuf.
|
||||
google::protobuf::ShutdownProtobufLibrary();
|
||||
|
||||
}
|
||||
return Application::EXIT_OK;
|
||||
}
|
||||
|
||||
#include "Gradido_LoginServer.h"
|
||||
#include "ServerConfig.h"
|
||||
#include "HTTPInterface/PageRequestHandlerFactory.h"
|
||||
#include "JSONInterface/JsonRequestHandlerFactory.h"
|
||||
|
||||
#include "lib/Profiler.h"
|
||||
|
||||
#include "SingletonManager/ConnectionManager.h"
|
||||
#include "SingletonManager/SessionManager.h"
|
||||
#include "SingletonManager/EmailManager.h"
|
||||
#include "SingletonManager/PendingTasksManager.h"
|
||||
#include "SingletonManager/CronManager.h"
|
||||
|
||||
#include "controller/User.h"
|
||||
|
||||
#include "Crypto/SecretKeyCryptography.h"
|
||||
|
||||
#include "Poco/Util/HelpFormatter.h"
|
||||
#include "Poco/Net/ServerSocket.h"
|
||||
#include "Poco/Net/HTTPServer.h"
|
||||
#include "Poco/Net/SSLManager.h"
|
||||
#include "Poco/Environment.h"
|
||||
#include "Poco/Logger.h"
|
||||
#include "Poco/Path.h"
|
||||
#include "Poco/AsyncChannel.h"
|
||||
#include "Poco/SimpleFileChannel.h"
|
||||
#include "Poco/ConsoleChannel.h"
|
||||
#include "Poco/SplitterChannel.h"
|
||||
#include "MySQL/Poco/Connector.h"
|
||||
|
||||
|
||||
#include <sodium.h>
|
||||
|
||||
|
||||
|
||||
Gradido_LoginServer::Gradido_LoginServer()
|
||||
: _helpRequested(false)
|
||||
{
|
||||
}
|
||||
|
||||
Gradido_LoginServer::~Gradido_LoginServer()
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void Gradido_LoginServer::initialize(Application& self)
|
||||
{
|
||||
loadConfiguration(); // load default configuration files, if present
|
||||
ServerApplication::initialize(self);
|
||||
}
|
||||
|
||||
void Gradido_LoginServer::uninitialize()
|
||||
{
|
||||
ServerApplication::uninitialize();
|
||||
}
|
||||
|
||||
void Gradido_LoginServer::defineOptions(Poco::Util::OptionSet& options)
|
||||
{
|
||||
ServerApplication::defineOptions(options);
|
||||
|
||||
/*options.addOption(
|
||||
Poco::Util::Option("help", "h", "display help information on command line arguments")
|
||||
.required(false)
|
||||
.repeatable(false));*/
|
||||
options.addOption(
|
||||
Poco::Util::Option("config", "c", "use non default config file (default is /etc/grd_login.properties)", false)
|
||||
.repeatable(false)
|
||||
.argument("Gradido_LoginServer.properties", true)
|
||||
.callback(Poco::Util::OptionCallback<Gradido_LoginServer>(this, &Gradido_LoginServer::handleOption)));
|
||||
|
||||
}
|
||||
|
||||
void Gradido_LoginServer::handleOption(const std::string& name, const std::string& value)
|
||||
{
|
||||
//printf("handle option: %s with value: %s\n", name.data(), value.data());
|
||||
if (name == "config") {
|
||||
mConfigPath = value;
|
||||
return;
|
||||
}
|
||||
ServerApplication::handleOption(name, value);
|
||||
if (name == "help") _helpRequested = true;
|
||||
}
|
||||
|
||||
void Gradido_LoginServer::displayHelp()
|
||||
{
|
||||
Poco::Util::HelpFormatter helpFormatter(options());
|
||||
helpFormatter.setCommand(commandName());
|
||||
helpFormatter.setUsage("OPTIONS");
|
||||
helpFormatter.setHeader("Gradido Login Server");
|
||||
helpFormatter.format(std::cout);
|
||||
}
|
||||
|
||||
void Gradido_LoginServer::createConsoleFileAsyncLogger(std::string name, std::string filePath)
|
||||
{
|
||||
Poco::AutoPtr<Poco::ConsoleChannel> logConsoleChannel(new Poco::ConsoleChannel);
|
||||
Poco::AutoPtr<Poco::SimpleFileChannel> logFileChannel(new Poco::SimpleFileChannel(filePath));
|
||||
logFileChannel->setProperty("rotation", "500 K");
|
||||
Poco::AutoPtr<Poco::SplitterChannel> logSplitter(new Poco::SplitterChannel);
|
||||
logSplitter->addChannel(logConsoleChannel);
|
||||
logSplitter->addChannel(logFileChannel);
|
||||
|
||||
Poco::AutoPtr<Poco::AsyncChannel> logAsyncChannel(new Poco::AsyncChannel(logSplitter));
|
||||
|
||||
Poco::Logger& log = Poco::Logger::get(name);
|
||||
log.setChannel(logAsyncChannel);
|
||||
log.setLevel("information");
|
||||
}
|
||||
|
||||
int Gradido_LoginServer::main(const std::vector<std::string>& args)
|
||||
{
|
||||
Profiler usedTime;
|
||||
if (_helpRequested)
|
||||
{
|
||||
displayHelp();
|
||||
}
|
||||
else
|
||||
{
|
||||
// ********** logging ************************************
|
||||
std::string log_Path = "/var/log/grd_login/";
|
||||
//#ifdef _WIN32
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
log_Path = "./";
|
||||
#endif
|
||||
|
||||
// init speed logger
|
||||
Poco::AutoPtr<Poco::SimpleFileChannel> speedLogFileChannel(new Poco::SimpleFileChannel(log_Path + "speedLog.txt"));
|
||||
/*
|
||||
The optional log file rotation mode:
|
||||
never: no rotation (default)
|
||||
<n>: rotate if file size exceeds <n> bytes
|
||||
<n> K: rotate if file size exceeds <n> Kilobytes
|
||||
<n> M: rotate if file size exceeds <n> Megabytes
|
||||
*/
|
||||
speedLogFileChannel->setProperty("rotation", "500 K");
|
||||
Poco::AutoPtr<Poco::AsyncChannel> speedLogAsyncChannel(new Poco::AsyncChannel(speedLogFileChannel));
|
||||
|
||||
Poco::Logger& speedLogger = Poco::Logger::get("SpeedLog");
|
||||
speedLogger.setChannel(speedLogAsyncChannel);
|
||||
speedLogger.setLevel("information");
|
||||
|
||||
// logging for request handling
|
||||
createConsoleFileAsyncLogger("requestLog", log_Path + "requestLog.txt");
|
||||
|
||||
// error logging
|
||||
createConsoleFileAsyncLogger("errorLog", log_Path + "errorLog.txt");
|
||||
Poco::Logger& errorLog = Poco::Logger::get("errorLog");
|
||||
|
||||
createConsoleFileAsyncLogger("emailLog", log_Path + "emailLog.txt");
|
||||
|
||||
// *************** load from config ********************************************
|
||||
|
||||
std::string cfg_Path = Poco::Path::config() + "grd_login/";
|
||||
try {
|
||||
loadConfiguration(cfg_Path + "grd_login.properties");
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
errorLog.error("error loading config: %s", ex.displayText());
|
||||
}
|
||||
|
||||
unsigned short port = (unsigned short)config().getInt("HTTPServer.port", 9980);
|
||||
unsigned short json_port = (unsigned short)config().getInt("JSONServer.port", 1201);
|
||||
|
||||
|
||||
//printf("show mnemonic list: \n");
|
||||
//printf(ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER].getCompleteWordList().data());
|
||||
if (!ServerConfig::initServerCrypto(config())) {
|
||||
//printf("[Gradido_LoginServer::%s] error init server crypto\n", __FUNCTION__);
|
||||
errorLog.error("[Gradido_LoginServer::main] error init server crypto");
|
||||
return Application::EXIT_CONFIG;
|
||||
}
|
||||
|
||||
// first check time for crypto
|
||||
SecretKeyCryptography test_crypto;
|
||||
Profiler timeUsed;
|
||||
if (test_crypto.createKey("email@google.de", "haz27Newpassword") != SecretKeyCryptography::AUTH_CREATE_ENCRYPTION_KEY_SUCCEED) {
|
||||
errorLog.error("[Gradido_LoginServer::main] error create secure pwd hash");
|
||||
return Application::EXIT_SOFTWARE;
|
||||
}
|
||||
ServerConfig::g_FakeLoginSleepTime = (int)std::round(timeUsed.millis());
|
||||
|
||||
Poco::Int64 i1 = randombytes_random();
|
||||
Poco::Int64 i2 = randombytes_random();
|
||||
ServerConfig::g_ServerKeySeed->put(1, i1 | (i2 << 8));
|
||||
|
||||
ServerConfig::initEMailAccount(config());
|
||||
EmailManager::getInstance()->init(config());
|
||||
|
||||
// start cpu scheduler
|
||||
uint8_t worker_count = (uint8_t)config().getInt("cpu_worker", Poco::Environment::processorCount() * 2);
|
||||
|
||||
ServerConfig::g_CPUScheduler = new UniLib::controller::CPUSheduler(worker_count, "Default Worker");
|
||||
ServerConfig::g_CryptoCPUScheduler = new UniLib::controller::CPUSheduler(2, "Crypto Worker");
|
||||
|
||||
|
||||
// load up connection configs
|
||||
// register MySQL connector
|
||||
try {
|
||||
Poco::Data::MySQL::Connector::registerConnector();
|
||||
} catch(Poco::Exception& ex) {
|
||||
errorLog.error("[Gradido_LoginServer::main] Poco Exception by register MySQL Connector: %s", ex.displayText());
|
||||
return Application::EXIT_CONFIG;
|
||||
}
|
||||
|
||||
auto conn = ConnectionManager::getInstance();
|
||||
//conn->setConnection()
|
||||
//printf("try connect login server mysql db\n");
|
||||
try {
|
||||
conn->setConnectionsFromConfig(config(), CONNECTION_MYSQL_LOGIN_SERVER);
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
// maybe we in docker environment and db needs some time to start up
|
||||
// let's wait 10 seconds
|
||||
int count = 10;
|
||||
while (count > 0) {
|
||||
printf("\rwait on mysql/mariadb %d seconds...", count);
|
||||
count--;
|
||||
Poco::Thread::sleep(1000);
|
||||
}
|
||||
conn->setConnectionsFromConfig(config(), CONNECTION_MYSQL_LOGIN_SERVER);
|
||||
}
|
||||
//printf("try connect php server mysql \n");
|
||||
//conn->setConnectionsFromConfig(config(), CONNECTION_MYSQL_PHP_SERVER);
|
||||
|
||||
SessionManager::getInstance()->init();
|
||||
// put urandom on linux servers
|
||||
//srand();
|
||||
|
||||
Poco::Net::initializeSSL();
|
||||
if(!ServerConfig::initSSLClientContext()) {
|
||||
//printf("[Gradido_LoginServer::%s] error init server SSL Client\n", __FUNCTION__);
|
||||
errorLog.error("[Gradido_LoginServer::main] error init server SSL Client");
|
||||
return Application::EXIT_CONFIG;
|
||||
}
|
||||
|
||||
// schedule email verification resend
|
||||
controller::User::checkIfVerificationEmailsShouldBeResend(ServerConfig::g_CronJobsTimer);
|
||||
controller::User::addMissingEmailHashes();
|
||||
|
||||
// HTTP Interface Server
|
||||
// set-up a server socket
|
||||
Poco::Net::ServerSocket svs(port);
|
||||
// set-up a HTTPServer instance
|
||||
Poco::ThreadPool& pool = Poco::ThreadPool::defaultPool();
|
||||
Poco::Net::HTTPServer srv(new PageRequestHandlerFactory, svs, new Poco::Net::HTTPServerParams);
|
||||
ServerConfig::g_ServerKeySeed->put(7, 918276611);
|
||||
|
||||
// start the HTTPServer
|
||||
srv.start();
|
||||
|
||||
// JSON Interface Server
|
||||
Poco::Net::ServerSocket json_svs(json_port);
|
||||
Poco::Net::HTTPServer json_srv(new JsonRequestHandlerFactory, json_svs, new Poco::Net::HTTPServerParams);
|
||||
|
||||
// start the json server
|
||||
json_srv.start();
|
||||
|
||||
// load pending tasks not finished in last session
|
||||
PendingTasksManager::getInstance()->load();
|
||||
int php_server_ping = config().getInt("phpServer.ping", 600000);
|
||||
CronManager::getInstance()->init(php_server_ping);
|
||||
|
||||
printf("[Gradido_LoginServer::main] started in %s\n", usedTime.string().data());
|
||||
// wait for CTRL-C or kill
|
||||
waitForTerminationRequest();
|
||||
|
||||
CronManager::getInstance()->stop();
|
||||
|
||||
// Stop the HTTPServer
|
||||
srv.stop();
|
||||
// Stop the json server
|
||||
json_srv.stop();
|
||||
|
||||
ServerConfig::unload();
|
||||
Poco::Net::uninitializeSSL();
|
||||
// Optional: Delete all global objects allocated by libprotobuf.
|
||||
google::protobuf::ShutdownProtobufLibrary();
|
||||
|
||||
}
|
||||
return Application::EXIT_OK;
|
||||
}
|
||||
@ -7,10 +7,11 @@
|
||||
|
||||
#line 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
|
||||
#include "../Crypto/KeyPair.h"
|
||||
#include "../Crypto/KeyPairEd25519.h"
|
||||
#include "../Crypto/Passphrase.h"
|
||||
#include "../SingletonManager/ConnectionManager.h"
|
||||
|
||||
#include "../controller/UserBackups.h"
|
||||
#include "../controller/UserBackup.h"
|
||||
|
||||
#include "Poco/Data/Binding.h"
|
||||
using namespace Poco::Data::Keywords;
|
||||
@ -20,7 +21,7 @@ typedef Poco::Tuple<int, Poco::Nullable<Poco::Data::BLOB>, std::string> UserBack
|
||||
struct SListEntry
|
||||
{
|
||||
Poco::AutoPtr<controller::User> user;
|
||||
std::vector<Poco::AutoPtr<controller::UserBackups>> backups;
|
||||
std::vector<Poco::AutoPtr<controller::UserBackup>> backups;
|
||||
};
|
||||
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
@ -42,11 +43,11 @@ void AdminCheckUserBackup::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
if (_compressResponse) response.set("Content-Encoding", "gzip");
|
||||
|
||||
Poco::Net::HTMLForm form(request, request.stream());
|
||||
#line 25 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
#line 26 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
|
||||
const char* pageName = "Admin Check User Backups";
|
||||
auto cm = ConnectionManager::getInstance();
|
||||
KeyPair keys;
|
||||
|
||||
std::list<SListEntry> notMatchingEntrys;
|
||||
|
||||
auto con = cm->getConnection(CONNECTION_MYSQL_LOGIN_SERVER);
|
||||
@ -65,21 +66,24 @@ void AdminCheckUserBackup::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
if(pubkey.isNull()) {
|
||||
continue;
|
||||
}
|
||||
auto passphrase = KeyPair::filterPassphrase(tuple.get<2>());
|
||||
auto passphrase = Passphrase::filter(tuple.get<2>());
|
||||
auto user_id = tuple.get<0>();
|
||||
Mnemonic* wordSource = nullptr;
|
||||
if(!User::validatePassphrase(passphrase, &wordSource)) {
|
||||
KeyPairEd25519 key_pair(pubkey.value().content().data());
|
||||
|
||||
auto wordSource = Passphrase::detectMnemonic(passphrase);
|
||||
if(!wordSource) {
|
||||
addError(new Error("admin Check user backup", "invalid passphrase"), false);
|
||||
addError(new ParamError("admin Check user backup", "passphrase", passphrase.data()), false);
|
||||
addError(new ParamError("admin Check user backup", "user id", user_id), false);
|
||||
continue;
|
||||
} else {
|
||||
keys.generateFromPassphrase(passphrase.data(), wordSource);
|
||||
}
|
||||
}
|
||||
auto passphrase_object = Passphrase::create(passphrase, wordSource);
|
||||
auto key_pair_from_passhrase = KeyPairEd25519::create(passphrase_object);
|
||||
bool matching = false;
|
||||
if(keys.isPubkeysTheSame(pubkey.value().content().data())) {
|
||||
if(key_pair_from_passhrase->isTheSame(key_pair)) {
|
||||
matching = true;
|
||||
}
|
||||
delete key_pair_from_passhrase;
|
||||
if(user_id != last_user_id) {
|
||||
last_user_id = user_id;
|
||||
if(matching) continue;
|
||||
@ -94,7 +98,7 @@ void AdminCheckUserBackup::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
SListEntry entry;
|
||||
entry.user = controller::User::create();
|
||||
entry.user->load(user_id);
|
||||
entry.backups = controller::UserBackups::load(user_id);
|
||||
entry.backups = controller::UserBackup::load(user_id);
|
||||
|
||||
notMatchingEntrys.push_back(entry);
|
||||
|
||||
@ -177,11 +181,11 @@ void AdminCheckUserBackup::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << "<div class=\"grd_container\">\n";
|
||||
responseStream << "\t<h1>Admin Check User Backup</h1>\n";
|
||||
responseStream << "\t";
|
||||
#line 91 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
#line 95 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t<p><b>Unmatching count: ";
|
||||
#line 92 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
#line 96 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
responseStream << ( notMatchingEntrys.size() );
|
||||
responseStream << "</b></p>\n";
|
||||
responseStream << "\t<table>\n";
|
||||
@ -190,34 +194,34 @@ void AdminCheckUserBackup::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << "\t\t</thead>\n";
|
||||
responseStream << "\t\t<tbody>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 98 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
#line 102 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
for(auto it = notMatchingEntrys.begin(); it != notMatchingEntrys.end(); it++) {
|
||||
auto userModel = (*it).user->getModel();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<tr>\n";
|
||||
responseStream << "\t\t\t\t<td>";
|
||||
#line 102 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
#line 106 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
responseStream << ( userModel->getID() );
|
||||
responseStream << "</td>\n";
|
||||
responseStream << "\t\t\t\t<td>";
|
||||
#line 103 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
#line 107 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
responseStream << ( userModel->getFirstName() );
|
||||
responseStream << "</td>\n";
|
||||
responseStream << "\t\t\t\t<td>";
|
||||
#line 104 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
#line 108 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
responseStream << ( userModel->getLastName() );
|
||||
responseStream << "</td>\n";
|
||||
responseStream << "\t\t\t\t<td>";
|
||||
#line 105 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
#line 109 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
responseStream << ( userModel->getEmail() );
|
||||
responseStream << "</td>\n";
|
||||
responseStream << "\t\t\t\t<td>";
|
||||
#line 106 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
#line 110 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
responseStream << ( (*it).backups.size() );
|
||||
responseStream << "</td>\n";
|
||||
responseStream << "\t\t\t\t</tr>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 108 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
#line 112 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t</tbody>\n";
|
||||
responseStream << "</div>\n";
|
||||
|
||||
233
login_server/src/cpp/HTTPInterface/AdminGroupsPage.cpp
Normal file
233
login_server/src/cpp/HTTPInterface/AdminGroupsPage.cpp
Normal file
@ -0,0 +1,233 @@
|
||||
#include "AdminGroupsPage.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\\src\\cpsp\\adminGroups.cpsp"
|
||||
|
||||
#include "../controller/Group.h"
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
AdminGroupsPage::AdminGroupsPage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void AdminGroupsPage::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 10 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminGroups.cpsp"
|
||||
|
||||
const char* pageName = "Gruppen";
|
||||
|
||||
auto user = mSession->getNewUser();
|
||||
|
||||
// add
|
||||
if(!form.empty()) {
|
||||
auto alias = form.get("group-alias");
|
||||
if(alias == "")
|
||||
{
|
||||
addError(new Error("Add Group", "Alias is empty!"));
|
||||
}
|
||||
else
|
||||
{
|
||||
auto newGroup = controller::Group::create(
|
||||
alias,
|
||||
form.get("group-name", ""),
|
||||
form.get("group-url", ""),
|
||||
form.get("group-home", ""),
|
||||
form.get("group-desc", "")
|
||||
);
|
||||
newGroup->getModel()->insertIntoDB(false);
|
||||
}
|
||||
}
|
||||
|
||||
// select all
|
||||
auto groups = controller::Group::listAll();
|
||||
//auto groups = controller::Group::load("gdd1");
|
||||
//std::vector<Poco::SharedPtr<controller::Group>> groups;
|
||||
|
||||
#line 3 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.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_large.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\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( pageName );
|
||||
responseStream << "</title>\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 12 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/main.css\">\n";
|
||||
#line 13 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
if(withMaterialIcons) { responseStream << "\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 14 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/materialdesignicons.min.css\">\n";
|
||||
#line 15 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</head>\n";
|
||||
responseStream << "<body>\n";
|
||||
responseStream << " <div class=\"layout\">\n";
|
||||
responseStream << "\t\t<div class=\"sidebar1 nav-menu initial\">\n";
|
||||
responseStream << "\t\t\t<div class=\"nav-vertical\">\n";
|
||||
responseStream << "\t\t\t\t<ul>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 22 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
if(!user.isNull()) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<li><a href=\"";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( user->getGroupBaseUrl() );
|
||||
responseStream << "/\"><span class=\"link-title\">Startseite</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 24 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 25 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/groups\"><span class=\"link-title\">Gruppen</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 26 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/nodes\"><span class=\"link-title\">Node Server</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 27 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/hedera_account\"><span class=\"link-title\">Hedera Accounts</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 28 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/topic\"><span class=\"link-title\">Hedera Topics</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t</ul>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t\t<div class=\"content\">";
|
||||
// end include header_large.cpsp
|
||||
responseStream << "\n";
|
||||
#line 41 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminGroups.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "<div class=\"center-form-container\">\n";
|
||||
responseStream << "\t<div class=\"content-list\">\n";
|
||||
responseStream << "\t\t<div class=\"content-list-title\">\n";
|
||||
responseStream << "\t\t\t<h2>Alle Gruppen</h2>\n";
|
||||
responseStream << "\t\t</div>\t\n";
|
||||
responseStream << "\t\t<div class=\"content-list-table\">\n";
|
||||
responseStream << "\t\t\t<div class=\"row\">\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c0\">ID</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c2\">Name</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c2\">Alias</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c3\">Url</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c2\">Home</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c5\">";
|
||||
#line 54 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminGroups.cpsp"
|
||||
responseStream << ( gettext("Description") );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 56 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminGroups.cpsp"
|
||||
for(auto it = groups.begin(); it != groups.end(); it++) {
|
||||
auto group_model = (*it)->getModel(); responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<div class=\"row\">\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c0\">";
|
||||
#line 59 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminGroups.cpsp"
|
||||
responseStream << ( group_model->getID() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c2\">";
|
||||
#line 60 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminGroups.cpsp"
|
||||
responseStream << ( group_model->getName() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c2\">";
|
||||
#line 61 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminGroups.cpsp"
|
||||
responseStream << ( group_model->getAlias() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c3\">";
|
||||
#line 62 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminGroups.cpsp"
|
||||
responseStream << ( group_model->getUrl() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c2\">";
|
||||
#line 63 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminGroups.cpsp"
|
||||
responseStream << ( group_model->getHome() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c5\">";
|
||||
#line 64 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminGroups.cpsp"
|
||||
responseStream << ( group_model->getDescription());
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 66 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminGroups.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "\t<div class=\"center-form-title\">\n";
|
||||
responseStream << "\t <h3>Eine neue Gruppe anlegen</h3>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "\t<div class=\"center-form-form\">\n";
|
||||
responseStream << "\t\t<form method=\"POST\">\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"group-name\">Name</label>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"group-name\" type=\"text\" name=\"group-name\"/>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"group-alias\">Alias</label>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"group-alias\" type=\"text\" name=\"group-alias\"/>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"group-url\">Url</label>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"group-url\" type=\"text\" name=\"group-url\"/>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"group-home\" title=\"Startpage link\">Home</label>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"group-home\" type=\"text\" name=\"group-home\"/>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"group-desc\">";
|
||||
#line 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminGroups.cpsp"
|
||||
responseStream << ( gettext("Description"));
|
||||
responseStream << "</label>\n";
|
||||
responseStream << "\t\t\t<textarea class=\"form-control\" name=\"group-desc\" rows=\"3\" maxlength=\"150\" id=\"group-desc\"></textarea>\n";
|
||||
responseStream << "\t\t\t<input class=\"center-form-submit form-button\" type=\"submit\" name=\"submit\" value=\"";
|
||||
#line 84 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminGroups.cpsp"
|
||||
responseStream << ( gettext("Add Group") );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t</form>\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\\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\\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
|
||||
responseStream << "\n";
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
20
login_server/src/cpp/HTTPInterface/AdminGroupsPage.h
Normal file
20
login_server/src/cpp/HTTPInterface/AdminGroupsPage.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef AdminGroupsPage_INCLUDED
|
||||
#define AdminGroupsPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class AdminGroupsPage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
AdminGroupsPage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // AdminGroupsPage_INCLUDED
|
||||
548
login_server/src/cpp/HTTPInterface/AdminHederaAccountPage.cpp
Normal file
548
login_server/src/cpp/HTTPInterface/AdminHederaAccountPage.cpp
Normal file
@ -0,0 +1,548 @@
|
||||
#include "AdminHederaAccountPage.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\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
|
||||
|
||||
#include "../controller/HederaAccount.h"
|
||||
#include "../controller/HederaId.h"
|
||||
#include "../controller/CryptoKey.h"
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
#include "../lib/Profiler.h"
|
||||
#include "../lib/Success.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
#include "Poco/URI.h"
|
||||
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
AdminHederaAccountPage::AdminHederaAccountPage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void AdminHederaAccountPage::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 22 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
|
||||
const char* pageName = "Hedera Account";
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto mm = MemoryManager::getInstance();
|
||||
auto user = mSession->getNewUser();
|
||||
int auto_renew_period = 604800; // 7 Tage
|
||||
int auto_renew_account = 0;
|
||||
double initial_balance = 0.0;
|
||||
Profiler hedera_time;
|
||||
std::string hedera_time_string;
|
||||
|
||||
Poco::URI uri(request.getURI());
|
||||
auto uri_query = uri.getQueryParameters();
|
||||
std::string action = "";
|
||||
Poco::AutoPtr<controller::HederaAccount> query_hedera_account;
|
||||
|
||||
// parsing get query params
|
||||
if(uri_query.size() >= 2) {
|
||||
if(uri_query[0].first == "action") {
|
||||
action = uri_query[0].second;
|
||||
}
|
||||
if(uri_query[1].first == "account_id") {
|
||||
std::string account_id_from_query;
|
||||
int account_id = 0;
|
||||
account_id_from_query = uri_query[1].second;
|
||||
if(DataTypeConverter::strToInt(account_id_from_query, account_id) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int Convert Error", "Error converting account_id_from_query to int"));
|
||||
} else {
|
||||
auto hedera_accounts = controller::HederaAccount::load("id", account_id);
|
||||
if(!hedera_accounts.size() || hedera_accounts[0].isNull()) {
|
||||
addError(new Error("Action", "hedera account not found"));
|
||||
} else {
|
||||
query_hedera_account = hedera_accounts[0];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// actions
|
||||
if(!query_hedera_account.isNull())
|
||||
{
|
||||
if(action == "updateBalance")
|
||||
{
|
||||
hedera_time.reset();
|
||||
if(query_hedera_account->hederaAccountGetBalance(user)) {
|
||||
addNotification(new ParamSuccess("Hedera", "crypto get balance success in ", hedera_time.string()));
|
||||
} else {
|
||||
addError(new ParamError("Hedera", "crypto get balance failed in ", hedera_time.string()));
|
||||
}
|
||||
}
|
||||
else if(action == "changeEncryption")
|
||||
{
|
||||
if(query_hedera_account->changeEncryption(user)) {
|
||||
addNotification(new Success("Hedera Account", "success in changing encryption"));
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(!form.empty()) // add or create
|
||||
{
|
||||
auto creationButton = form.get("create","");
|
||||
if(creationButton != "") {
|
||||
|
||||
// collect
|
||||
auto auto_renew_account_string = form.get("account-auto-renew-account", "0");
|
||||
auto auto_renew_period_string = form.get("account-auto-renew-period", "604800");
|
||||
auto account_initial_balance_string = form.get("account-initial-balance", "0");
|
||||
|
||||
if(!sm->isValid(auto_renew_account_string, VALIDATE_ONLY_INTEGER)) {
|
||||
addError(new Error("Account", "auto renew account id not an integer"));
|
||||
} else {
|
||||
if(DataTypeConverter::strToInt(auto_renew_account_string, auto_renew_account) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int convert error", "Error converting auto renew account id to int"));
|
||||
}
|
||||
}
|
||||
|
||||
if(!sm->isValid(auto_renew_period_string, VALIDATE_ONLY_INTEGER)) {
|
||||
addError(new Error("Account", "auto renew period not an integer"));
|
||||
} else {
|
||||
if(DataTypeConverter::strToInt(auto_renew_period_string, auto_renew_period) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int convert error", "Error converting auto renew period to int"));
|
||||
}
|
||||
}
|
||||
|
||||
if(!sm->isValid(account_initial_balance_string, VALIDATE_ONLY_DECIMAL)) {
|
||||
addError(new Error("Account", "initial balance not an decimal"));
|
||||
} else {
|
||||
if(DataTypeConverter::strToDouble(account_initial_balance_string, initial_balance) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Double convert error", "Error converting initial balance to double"));
|
||||
}
|
||||
}
|
||||
if(0 == errorCount())
|
||||
{
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
// collect
|
||||
auto shardNumString = form.get("account-shard-num", "0");
|
||||
auto realmNumString = form.get("account-realm-num", "0");
|
||||
auto numString = form.get("account-num", "0");
|
||||
auto privateKeyString = form.get("account-private-key", "");
|
||||
auto privateKeyEncryptedString = form.get("account-private-key-encrypted", "false");
|
||||
auto publicKeyString = form.get("account-public-key", "");
|
||||
auto networkTypeString = form.get("account-network-type", "0");
|
||||
|
||||
//printf("private key encrypted: %s\n", privateKeyEncryptedString.data());
|
||||
|
||||
int shardNum = 0;
|
||||
int realmNum = 0;
|
||||
int num = 0;
|
||||
int networkType = 0;
|
||||
|
||||
MemoryBin* private_key = nullptr;
|
||||
MemoryBin* public_key = nullptr;
|
||||
|
||||
// validate
|
||||
if(!sm->isValid(shardNumString, VALIDATE_ONLY_INTEGER)) {
|
||||
addError(new Error("Account ID", "shard num not integer"));
|
||||
} else {
|
||||
if(DataTypeConverter::strToInt(shardNumString, shardNum) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int Convert Error", "Error converting shardNumString to int"));
|
||||
}
|
||||
}
|
||||
if(!sm->isValid(realmNumString, VALIDATE_ONLY_INTEGER)) {
|
||||
addError(new Error("Account ID", "realm num not integer"));
|
||||
} else {
|
||||
if(DataTypeConverter::strToInt(realmNumString, realmNum) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int Convert Error", "Error converting realmNumString to int"));
|
||||
}
|
||||
}
|
||||
if(!sm->isValid(numString, VALIDATE_ONLY_INTEGER)) {
|
||||
addError(new Error("Account ID", "num not integer"));
|
||||
} else {
|
||||
if(DataTypeConverter::strToInt(numString, num) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int Convert Error", "Error converting num to int"));
|
||||
}
|
||||
}
|
||||
if(!sm->isValid(privateKeyString, VALIDATE_ONLY_HEX)) {
|
||||
addError(new Error("Account Keys", "private key not hex"));
|
||||
}
|
||||
if(!sm->isValid(publicKeyString, VALIDATE_ONLY_HEX)) {
|
||||
addError(new Error("Account Keys", "public key not hex"));
|
||||
}
|
||||
if(!sm->isValid(networkTypeString, VALIDATE_ONLY_INTEGER)) {
|
||||
addError(new Error("Network Type", "not integer"));
|
||||
} else {
|
||||
if(DataTypeConverter::strToInt(networkTypeString, networkType) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int Convert Error", "Error converting network type to int"));
|
||||
}
|
||||
if(networkType < 0 || networkType >= (int)ServerConfig::HEDERA_NET_COUNT) {
|
||||
addError(new Error("Network Type", "invalid value"));
|
||||
}
|
||||
}
|
||||
|
||||
if(0 == errorCount()) {
|
||||
|
||||
auto hedera_id = controller::HederaId::create(shardNum, realmNum, num);
|
||||
|
||||
private_key = DataTypeConverter::hexToBin(privateKeyString);
|
||||
public_key = DataTypeConverter::hexToBin(publicKeyString);
|
||||
|
||||
|
||||
KeyPairHedera key_pair(private_key, public_key);
|
||||
auto crypto_key = controller::CryptoKey::load(key_pair.getPublicKey(), crypto_sign_PUBLICKEYBYTES);
|
||||
|
||||
if(crypto_key.isNull()) {
|
||||
crypto_key = controller::CryptoKey::create(&key_pair, user, privateKeyEncryptedString == "true");
|
||||
if(!crypto_key->getModel()->insertIntoDB(true)) {
|
||||
addError(new Error("DB Error", "Error saving crypto key in DB"));
|
||||
}
|
||||
} else {
|
||||
printf("crypto key found in db\n");
|
||||
}
|
||||
if(0 == errorCount()) {
|
||||
|
||||
if(hedera_id->isExistInDB()) {
|
||||
auto hedera_account = controller::HederaAccount::load(hedera_id);
|
||||
if(hedera_account.isNull()) {
|
||||
addError(new Error("DB Error", "Couldn't load hedera account from db, but it should exist"));
|
||||
} else {
|
||||
addError(new Error("Hedera Account", "Account already exist (same account id"));
|
||||
}
|
||||
|
||||
} else {
|
||||
auto hedera_account = controller::HederaAccount::create(
|
||||
user->getModel()->getID(),
|
||||
hedera_id->getModel()->getID(),
|
||||
crypto_key->getModel()->getID(),
|
||||
0,
|
||||
(ServerConfig::HederaNetworkType)networkType
|
||||
);
|
||||
if(!hedera_account->getModel()->insertIntoDB(false)) {
|
||||
addError(new Error("DB Error", "Error saving hedera account into DB"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
mm->releaseMemory(private_key);
|
||||
mm->releaseMemory(public_key);
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!query_hedera_account.isNull()) {
|
||||
getErrors(query_hedera_account);
|
||||
}
|
||||
// list accounts
|
||||
auto hedera_accounts = controller::HederaAccount::load("user_id", user->getModel()->getID());
|
||||
|
||||
#line 3 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.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_large.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\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( pageName );
|
||||
responseStream << "</title>\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 12 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/main.css\">\n";
|
||||
#line 13 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
if(withMaterialIcons) { responseStream << "\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 14 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/materialdesignicons.min.css\">\n";
|
||||
#line 15 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</head>\n";
|
||||
responseStream << "<body>\n";
|
||||
responseStream << " <div class=\"layout\">\n";
|
||||
responseStream << "\t\t<div class=\"sidebar1 nav-menu initial\">\n";
|
||||
responseStream << "\t\t\t<div class=\"nav-vertical\">\n";
|
||||
responseStream << "\t\t\t\t<ul>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 22 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
if(!user.isNull()) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<li><a href=\"";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( user->getGroupBaseUrl() );
|
||||
responseStream << "/\"><span class=\"link-title\">Startseite</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 24 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 25 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/groups\"><span class=\"link-title\">Gruppen</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 26 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/nodes\"><span class=\"link-title\">Node Server</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 27 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/hedera_account\"><span class=\"link-title\">Hedera Accounts</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 28 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/topic\"><span class=\"link-title\">Hedera Topics</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t</ul>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t\t<div class=\"content\">";
|
||||
// end include header_large.cpsp
|
||||
responseStream << "\n";
|
||||
responseStream << "<style type=\"text/css\">\n";
|
||||
responseStream << "\t.center-form-form .input-40 {\n";
|
||||
responseStream << "\t\tmargin-left:0;\n";
|
||||
responseStream << "\t\twidth:40%;\n";
|
||||
responseStream << "\t\tdisplay:inline-block;\n";
|
||||
responseStream << "\t}\n";
|
||||
responseStream << "\t\n";
|
||||
responseStream << "</style>\n";
|
||||
#line 238 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "<div class=\"center-form-container\">\n";
|
||||
responseStream << "\t<div class=\"content-list\">\n";
|
||||
responseStream << "\t\t<div class=\"content-list-title\">\n";
|
||||
responseStream << "\t\t\t<h2>Deine Hedera Accounts</h2>\n";
|
||||
responseStream << "\t\t</div>\t\n";
|
||||
responseStream << "\t\t<div class=\"content-list-table\">\n";
|
||||
responseStream << "\t\t\t<div class=\"row\">\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c2\">Hedera Id</div>\t\t\t\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c3\">Balance</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c2\">Server Type</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c3\">Verschlüsselt?</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c3\">Last Updated</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c5\">Aktionen</div>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 254 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
for(auto it = hedera_accounts.begin(); it != hedera_accounts.end(); it++) {
|
||||
auto hedera_account_model = (*it)->getModel();
|
||||
auto updateUrl = ServerConfig::g_serverPath + "/hedera_account?action=updateBalance&account_id=" + std::to_string(hedera_account_model->getID());
|
||||
std::string changeEncryption("");
|
||||
if(hedera_account_model->getUserId() == user->getModel()->getID()) {
|
||||
changeEncryption = ServerConfig::g_serverPath + "/hedera_account?action=changeEncryption&account_id=" + std::to_string(hedera_account_model->getID());
|
||||
}
|
||||
auto isEncrypted = (*it)->getCryptoKey()->getModel()->isEncrypted();
|
||||
//printf("change encryption: %s\n", changeEncryption.data());
|
||||
|
||||
std::string kabuto_url = "https://explorer.kabuto.sh/";;
|
||||
|
||||
if(hedera_account_model->getNetworkType() == ServerConfig::HEDERA_TESTNET) {
|
||||
kabuto_url += "testnet/";
|
||||
} else if(hedera_account_model->getNetworkType() == ServerConfig::HEDERA_MAINNET) {
|
||||
kabuto_url += "mainnet/";
|
||||
}
|
||||
kabuto_url += "id/";
|
||||
auto hedera_id_string = (*it)->getHederaId()->getModel()->toString();
|
||||
kabuto_url += hedera_id_string;
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<div class=\"row\">\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c2\"><a href=\"";
|
||||
#line 276 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( kabuto_url );
|
||||
responseStream << "\" title=\"Hedera Block Explorer - Kabuto\" target=\"_blank\">";
|
||||
#line 276 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( hedera_id_string );
|
||||
responseStream << "</a></div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c3\">";
|
||||
#line 277 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( hedera_account_model->getBalanceString() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c2\">";
|
||||
#line 278 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( model::table::HederaAccount::hederaNetworkTypeToString(hedera_account_model->getNetworkType()) );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c3 ";
|
||||
#line 279 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( isEncrypted ? "success-color" : "alert-color");
|
||||
responseStream << "\">";
|
||||
#line 279 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( isEncrypted ? "Ja": "Nein" );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c3\">";
|
||||
#line 280 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( hedera_account_model->getUpdatedString() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c5\">\n";
|
||||
responseStream << "\t\t\t\t\t\t<button class=\"form-button\" title=\"Anfrage an Hedera, aktuell kostenlos\" onclick=\"window.location.href='";
|
||||
#line 282 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( updateUrl );
|
||||
responseStream << "'\" >\n";
|
||||
responseStream << "\t\t\t\t\t\t\tUpdate Balance\n";
|
||||
responseStream << "\t\t\t\t\t\t</button>\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 285 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
if(changeEncryption != "") { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<button class=\"form-button\" title=\"Ändere den Verschlüsselungsstatus des Private Keys in der Datenbank\" onclick=\"window.location.href='";
|
||||
#line 286 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( changeEncryption );
|
||||
responseStream << "'\">\n";
|
||||
responseStream << "\t\t\t\t\t\t\t\tChange Encryption\n";
|
||||
responseStream << "\t\t\t\t\t\t\t</button>\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 289 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 292 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "\t<div class=\"center-form-title\">\n";
|
||||
responseStream << "\t <h3>Ein existierenden Account eintragen</h3>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "\t<div class=\"center-form-form\">\n";
|
||||
responseStream << "\t\t<form method=\"POST\" action=\"";
|
||||
#line 299 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
responseStream << "/hedera_account\">\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\">Hedera Account ID</label>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"account-shard-num\" placeholder=\"shard\" type=\"number\" name=\"account-shard-num\"/>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"account-realm-num\" placeholder=\"realm\" type=\"number\" name=\"account-realm-num\"/>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"account-num\" placeholder=\"num\" type=\"number\" name=\"account-num\"/>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"account-private-key\">Private Key</label>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"account-private-key\" type=\"text\" name=\"account-private-key\"/>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"account-private-key-encrypted\" title=\"Wenn er verschlüsselt ist, kannst nur du Hedera Transaktionen damit bezahlen, wenn er nicht verschlüsselt ist kann er für alle Hedera Transaktionen automatisch verwendet werden. Ich empfehle dafür ein separates Konto mit wenigen Hashbars anzulegen.\">Private Key verschlüsseln?</label>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"account-private-key-encrypted\" type=\"checkbox\" name=\"account-private-key-encrypted\" value=\"true\"/>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"account-public-key\">Public Key</label>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"account-public-key\" type=\"text\" name=\"account-public-key\"/>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"account-network-type\">Network Type</label>\n";
|
||||
responseStream << "\t\t\t<select class=\"form-control\" name=\"account-network-type\" id=\"account-network-type\">\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 312 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
for(int i = 0; i < ServerConfig::HEDERA_NET_COUNT; i++) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<option value=\"";
|
||||
#line 313 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( i );
|
||||
responseStream << "\">";
|
||||
#line 313 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( model::table::HederaAccount::hederaNetworkTypeToString((ServerConfig::HederaNetworkType)i) );
|
||||
responseStream << "</option>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 314 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t</select>\n";
|
||||
responseStream << "\t\t\t<input class=\"center-form-submit form-button\" type=\"submit\" name=\"add\" value=\"";
|
||||
#line 316 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( gettext("Add Account") );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t\t</form>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "\t<div class=\"center-form-title\">\n";
|
||||
responseStream << "\t\t<h3>Ein neuen Account anlegen</h3>\n";
|
||||
responseStream << "\t\t<p>Bei Hedera einen neuen Account anlegen und zum Start Hashbars von einem existierenden Account überweisen.</p>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "\t<div class=\"center-form-form\">\n";
|
||||
responseStream << "\t\t<form method=\"POST\" action=\"";
|
||||
#line 324 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
responseStream << "/hedera_account\">\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"account-auto-renew-account\">Auto Renew and Founding Hedera Account</label>\n";
|
||||
responseStream << "\t\t\t<select name=\"account-auto-renew-account\" id=\"account-auto-renew-account\">\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 327 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
for(auto it = hedera_accounts.begin(); it != hedera_accounts.end(); it++) {
|
||||
auto model = (*it)->getModel();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<option title=\"";
|
||||
#line 330 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( model->toString() );
|
||||
responseStream << "\" value=\"";
|
||||
#line 330 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( model->getID() );
|
||||
responseStream << "\" ";
|
||||
#line 330 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
if(auto_renew_account == model->getID()) { responseStream << "selected=\"selected\"";
|
||||
#line 330 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
} responseStream << ">";
|
||||
#line 330 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( (*it)->toShortSelectOptionName() );
|
||||
responseStream << "</option>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 331 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t</select>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"account-auto-renew-period\">Auto Renew Period in seconds</label>\n";
|
||||
responseStream << "\t\t\t<div><input class=\"form-control input-40\" id=\"account-auto-renew-period\" value=\"";
|
||||
#line 334 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( auto_renew_period );
|
||||
responseStream << "\" type=\"number\" name=\"account-auto-renew-period\"/><span style=\"margin-left:8px\" id=\"readable-auto-renew-period\"></span><div>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"account-initial-balance\">Initial Balance for new Account (taken from founding account)</label>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"account-initial-balance\" name=\"account-initial-balance\" type=\"number\" step=\"0.00000001\" value=\"";
|
||||
#line 336 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( std::to_string(initial_balance) );
|
||||
responseStream << "\" />\n";
|
||||
responseStream << "\t\t\t<input class=\"center-form-submit form-button\" type=\"submit\" name=\"create\" value=\"";
|
||||
#line 337 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( gettext("Create Account") );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t\t</form>\n";
|
||||
responseStream << "\t</div>\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\\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\\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
|
||||
responseStream << "\n";
|
||||
responseStream << "<script type=\"text/javascript\" src=\"";
|
||||
#line 342 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminHederaAccount.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "/js/time_calculations.js\"></script>\n";
|
||||
responseStream << "<script type=\"text/javascript\">\n";
|
||||
responseStream << "\tvar input = document.getElementById(\"account-auto-renew-period\");\n";
|
||||
responseStream << "\tvar span = document.getElementById(\"readable-auto-renew-period\");\n";
|
||||
responseStream << "\tspan.innerHTML = '~ ' + getExactTimeDuration(input.value);\n";
|
||||
responseStream << "\tinput.addEventListener('keyup', function(e) {\n";
|
||||
responseStream << "\t\tspan.innerHTML = '~ ' + getExactTimeDuration(input.value);\n";
|
||||
responseStream << "\t});\n";
|
||||
responseStream << "\t\n";
|
||||
responseStream << "</script>\n";
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
20
login_server/src/cpp/HTTPInterface/AdminHederaAccountPage.h
Normal file
20
login_server/src/cpp/HTTPInterface/AdminHederaAccountPage.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef AdminHederaAccountPage_INCLUDED
|
||||
#define AdminHederaAccountPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class AdminHederaAccountPage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
AdminHederaAccountPage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // AdminHederaAccountPage_INCLUDED
|
||||
374
login_server/src/cpp/HTTPInterface/AdminNodeServerPage.cpp
Normal file
374
login_server/src/cpp/HTTPInterface/AdminNodeServerPage.cpp
Normal file
@ -0,0 +1,374 @@
|
||||
#include "AdminNodeServerPage.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\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
|
||||
|
||||
#include "../controller/NodeServer.h"
|
||||
#include "../controller/Group.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
AdminNodeServerPage::AdminNodeServerPage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void AdminNodeServerPage::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 15 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
|
||||
const char* pageName = "Node Server";
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto user = mSession->getNewUser();
|
||||
|
||||
// add
|
||||
if(!form.empty()) {
|
||||
// collect
|
||||
auto url = form.get("node-server-url", "");
|
||||
auto portString = form.get("node-server-port", "");
|
||||
auto nodeServerTypeString = form.get("node-server-type", "0");
|
||||
auto shardNumString = form.get("account-shard-num", "0");
|
||||
auto realmNumString = form.get("account-realm-num", "0");
|
||||
auto numString = form.get("account-num", "0");
|
||||
auto nodeServerGroupString = form.get("node-server-group", "");
|
||||
|
||||
int port = 0;
|
||||
int shardNum = 0;
|
||||
int realmNum = 0;
|
||||
int num = 0;
|
||||
model::table::NodeServerType nodeServerType = model::table::NODE_SERVER_NONE;
|
||||
int group_id = 0;
|
||||
|
||||
|
||||
// validate
|
||||
if(!sm->isValid(url, VALIDATE_ONLY_URL)) {
|
||||
addError(new ParamError("Node Server", "Url not valid, must start with http or https", url));
|
||||
|
||||
}
|
||||
if(!sm->isValid(portString, VALIDATE_ONLY_INTEGER)) {
|
||||
addError(new Error("Node Server", "Port isn't valid integer"));
|
||||
} else {
|
||||
if(DataTypeConverter::strToInt(portString, port) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int convert error", "Error converting port to int"));
|
||||
}
|
||||
}
|
||||
|
||||
if(!sm->isValid(nodeServerTypeString, VALIDATE_ONLY_INTEGER)) {
|
||||
addError(new Error("Node Server Type", "not integer"));
|
||||
} else {
|
||||
int node_server_type_int = 0;
|
||||
if(DataTypeConverter::strToInt(nodeServerTypeString, node_server_type_int) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int Convert Error", "Error converting node server type to int"));
|
||||
}
|
||||
if(node_server_type_int < 0 || node_server_type_int >= (int)model::table::NODE_SERVER_TYPE_COUNT) {
|
||||
addError(new Error("Node Server Type", "invalid value"));
|
||||
} else {
|
||||
nodeServerType = (model::table::NodeServerType)node_server_type_int;
|
||||
}
|
||||
}
|
||||
if(model::table::NodeServerIsHederaNode(nodeServerType)) {
|
||||
|
||||
if(!sm->isValid(shardNumString, VALIDATE_ONLY_INTEGER)) {
|
||||
addError(new Error("Account ID", "shard num not integer"));
|
||||
} else {
|
||||
if(DataTypeConverter::strToInt(shardNumString, shardNum) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int Convert Error", "Error converting shardNumString to int"));
|
||||
}
|
||||
}
|
||||
if(!sm->isValid(realmNumString, VALIDATE_ONLY_INTEGER)) {
|
||||
addError(new Error("Account ID", "realm num not integer"));
|
||||
} else {
|
||||
if(DataTypeConverter::strToInt(realmNumString, realmNum) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int Convert Error", "Error converting realmNumString to int"));
|
||||
}
|
||||
}
|
||||
if(!sm->isValid(numString, VALIDATE_ONLY_INTEGER)) {
|
||||
addError(new Error("Account ID", "num not integer"));
|
||||
} else {
|
||||
if(DataTypeConverter::strToInt(numString, num) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int Convert Error", "Error converting num to int"));
|
||||
}
|
||||
}
|
||||
} else if(model::table::NodeServerHasGroup(nodeServerType)) {
|
||||
if(!sm->isValid(nodeServerGroupString, VALIDATE_ONLY_INTEGER)) {
|
||||
addError(new Error("Group id", "group_id not integer"));
|
||||
} else {
|
||||
if(DataTypeConverter::strToInt(nodeServerGroupString, group_id) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int Convert Error", "Error converting group_id to int"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(0 == errorCount()) {
|
||||
int hedera_id_int = 0;
|
||||
if(NodeServerIsHederaNode(nodeServerType)) {
|
||||
auto hedera_id = controller::HederaId::create(shardNum, realmNum, num);
|
||||
hedera_id_int = hedera_id->getModel()->getID();
|
||||
}
|
||||
|
||||
auto node_server = controller::NodeServer::create(
|
||||
url, port, group_id, (model::table::NodeServerType)nodeServerType, hedera_id_int
|
||||
);
|
||||
if(!node_server->getModel()->insertIntoDB(false)) {
|
||||
addError(new Error("DB Error", "Error saving Node Server in DB"));
|
||||
}
|
||||
}
|
||||
}
|
||||
auto groups = controller::Group::listAll();
|
||||
std::map<int, int> group_indices;
|
||||
int count = 0;
|
||||
for(auto it = groups.begin(); it != groups.end(); it++) {
|
||||
group_indices.insert(std::pair<int, int>((*it)->getModel()->getID(), count));
|
||||
count++;
|
||||
}
|
||||
|
||||
auto node_servers = controller::NodeServer::listAll();
|
||||
|
||||
|
||||
#line 3 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.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_large.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\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( pageName );
|
||||
responseStream << "</title>\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 12 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/main.css\">\n";
|
||||
#line 13 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
if(withMaterialIcons) { responseStream << "\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 14 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/materialdesignicons.min.css\">\n";
|
||||
#line 15 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</head>\n";
|
||||
responseStream << "<body>\n";
|
||||
responseStream << " <div class=\"layout\">\n";
|
||||
responseStream << "\t\t<div class=\"sidebar1 nav-menu initial\">\n";
|
||||
responseStream << "\t\t\t<div class=\"nav-vertical\">\n";
|
||||
responseStream << "\t\t\t\t<ul>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 22 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
if(!user.isNull()) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<li><a href=\"";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( user->getGroupBaseUrl() );
|
||||
responseStream << "/\"><span class=\"link-title\">Startseite</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 24 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 25 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/groups\"><span class=\"link-title\">Gruppen</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 26 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/nodes\"><span class=\"link-title\">Node Server</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 27 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/hedera_account\"><span class=\"link-title\">Hedera Accounts</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 28 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/topic\"><span class=\"link-title\">Hedera Topics</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t</ul>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t\t<div class=\"content\">";
|
||||
// end include header_large.cpsp
|
||||
responseStream << "\n";
|
||||
#line 127 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "<div class=\"center-form-container\">\n";
|
||||
responseStream << "\t<div class=\"content-list\">\n";
|
||||
responseStream << "\t\t<div class=\"content-list-title\">\n";
|
||||
responseStream << "\t\t\t<h2>Alle Node Server</h2>\n";
|
||||
responseStream << "\t\t</div>\t\n";
|
||||
responseStream << "\t\t<div class=\"content-list-table\">\n";
|
||||
responseStream << "\t\t\t<div class=\"row\">\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c4\">Server Type</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c5\">Url:Port</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c3\">Group / Hedera Id</div>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 139 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
for(auto it = node_servers.begin(); it != node_servers.end(); it++) {
|
||||
auto node_server_model = (*it)->getModel();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<div class=\"row\">\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c4\">";
|
||||
#line 143 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
responseStream << ( model::table::NodeServer::nodeServerTypeToString(node_server_model->getNodeServerType()) );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c5\">";
|
||||
#line 144 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
responseStream << ( node_server_model->getUrlWithPort() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c3\">\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 146 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
if(node_server_model->isHederaNode()) {
|
||||
auto hedera_id_model = (*it)->getHederaId()->getModel(); responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t\t";
|
||||
#line 148 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
responseStream << ( hedera_id_model->toString() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 149 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
} else if(node_server_model->hasGroup()){
|
||||
auto groupIt = group_indices.find(node_server_model->getGroupId());
|
||||
if(groupIt != group_indices.end()) {
|
||||
auto group_model = groups[groupIt->second]->getModel(); responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t\t\t<span title=\"";
|
||||
#line 153 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
responseStream << ( group_model->getDescription() );
|
||||
responseStream << "\">";
|
||||
#line 153 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
responseStream << ( group_model->getName() );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t";
|
||||
#line 154 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t\t\t";
|
||||
#line 155 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
responseStream << ( node_server_model->getGroupId() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t\t";
|
||||
#line 156 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 157 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 160 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "\t<div class=\"center-form-title\">\n";
|
||||
responseStream << "\t <h3>Ein Node Server hinzufügen</h3>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "\t<div class=\"center-form-form\">\n";
|
||||
responseStream << "\t\t<form method=\"POST\">\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"node-server-url\">URL</label>\n";
|
||||
responseStream << "\t\t\t<input required class=\"form-control\" id=\"node-server-url\" name=\"node-server-url\"/>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"node-server-port\">Port</label>\n";
|
||||
responseStream << "\t\t\t<input required class=\"form-control\" id=\"node-server-port\" name=\"node-server-port\" type=\"number\"/>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"node-server-type\">Network Type</label>\n";
|
||||
responseStream << "\t\t\t<select class=\"form-control\" name=\"node-server-type\" id=\"node-server-type\">\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 174 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
for(int i = 1; i < model::table::NODE_SERVER_TYPE_COUNT; i++) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<option value=\"";
|
||||
#line 175 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
responseStream << ( i );
|
||||
responseStream << "\">";
|
||||
#line 175 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
responseStream << ( model::table::NodeServer::nodeServerTypeToString((model::table::NodeServerType)i) );
|
||||
responseStream << "</option>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 176 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t</select>\n";
|
||||
responseStream << "\t\t\t<fieldset>\n";
|
||||
responseStream << "\t\t\t\t<legend>Nur für Hedera Nodes</legend>\n";
|
||||
responseStream << "\t\t\t\t<label class=\"form-label\">Hedera Account ID</label>\n";
|
||||
responseStream << "\t\t\t\t<input class=\"form-control\" id=\"account-shard-num\" placeholder=\"shard\" type=\"number\" name=\"account-shard-num\"/>\n";
|
||||
responseStream << "\t\t\t\t<input class=\"form-control\" id=\"account-realm-num\" placeholder=\"realm\" type=\"number\" name=\"account-realm-num\"/>\n";
|
||||
responseStream << "\t\t\t\t<input class=\"form-control\" id=\"account-num\" placeholder=\"num\" type=\"number\" name=\"account-num\"/>\n";
|
||||
responseStream << "\t\t\t</fieldset>\n";
|
||||
responseStream << "\t\t\t<fieldset>\n";
|
||||
responseStream << "\t\t\t\t<legend>Nur für Gradido Nodes</legend>\n";
|
||||
responseStream << "\t\t\t\t<label class=\"form-label\" for=\"node-server-group\">Gradido Gruppe</label>\n";
|
||||
responseStream << "\t\t\t\t<select class=\"form-control\" name=\"node-server-group\">\n";
|
||||
responseStream << "\t\t\t\t\t<option value=\"-1\">Keine Gruppe</option>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 190 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
for(auto it = groups.begin(); it != groups.end(); it++) {
|
||||
auto group_model = (*it)->getModel(); responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<option title=\"";
|
||||
#line 192 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
responseStream << ( group_model->getDescription() );
|
||||
responseStream << "\" value=\"";
|
||||
#line 192 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
responseStream << ( group_model->getID() );
|
||||
responseStream << "\">";
|
||||
#line 192 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
responseStream << ( group_model->getName() );
|
||||
responseStream << "</option>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 193 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t</select>\n";
|
||||
responseStream << "\t\t\t</fieldset>\n";
|
||||
responseStream << "\t\t\t\n";
|
||||
responseStream << "\t\t\t<input class=\"center-form-submit form-button\" type=\"submit\" name=\"submit\" value=\"";
|
||||
#line 197 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServer.cpsp"
|
||||
responseStream << ( gettext("Add Node") );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t</form>\n";
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\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\\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\\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
|
||||
responseStream << "\n";
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
20
login_server/src/cpp/HTTPInterface/AdminNodeServerPage.h
Normal file
20
login_server/src/cpp/HTTPInterface/AdminNodeServerPage.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef AdminNodeServerPage_INCLUDED
|
||||
#define AdminNodeServerPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class AdminNodeServerPage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
AdminNodeServerPage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // AdminNodeServerPage_INCLUDED
|
||||
866
login_server/src/cpp/HTTPInterface/AdminNodeServerTestPage.cpp
Normal file
866
login_server/src/cpp/HTTPInterface/AdminNodeServerTestPage.cpp
Normal file
@ -0,0 +1,866 @@
|
||||
#include "AdminNodeServerTestPage.h"
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
#include "Poco/Net/HTTPServerResponse.h"
|
||||
#include "Poco/Net/HTMLForm.h"
|
||||
#include "Poco/DeflatingStream.h"
|
||||
|
||||
|
||||
#line 6 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
|
||||
|
||||
#include "../controller/NodeServer.h"
|
||||
#include "../controller/User.h"
|
||||
#include "../controller/HederaTopic.h"
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
#include "../lib/Profiler.h"
|
||||
#include "../lib/JsonRPCRequest.h"
|
||||
#include "../model/gradido/Transaction.h"
|
||||
|
||||
#include "Poco/Thread.h"
|
||||
#include "Poco/DateTime.h"
|
||||
#include "Poco/JSON/Stringifier.h"
|
||||
|
||||
enum PageType
|
||||
{
|
||||
PAGE_CHOOSE_TEST,
|
||||
PAGE_RUN_4_SET_TEST,
|
||||
PAGE_GET_TRANSACTION_RPC_CALL
|
||||
};
|
||||
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
void AdminNodeServerTestPage::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 28 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
|
||||
const char* pageName = "Node Server Test";
|
||||
PageType page = PAGE_CHOOSE_TEST;
|
||||
Poco::AutoPtr<controller::NodeServer> node_server;
|
||||
Poco::AutoPtr<controller::NodeServer> node_server2;
|
||||
Poco::AutoPtr<controller::User> user;
|
||||
Poco::AutoPtr<controller::HederaTopic> hedera_topic;
|
||||
Poco::AutoPtr<controller::HederaTopic> hedera_topic2;
|
||||
int hedera_timeout = 4;
|
||||
int sleep_ms_between_transactions = 1000;
|
||||
|
||||
bool steps[8]; memset(steps, 1, 8 * sizeof(bool));
|
||||
|
||||
|
||||
if(!form.empty())
|
||||
{
|
||||
auto node_server_id_string = form.get("test-node-servers", "");
|
||||
if(node_server_id_string != "") {
|
||||
int node_server_id = 0;
|
||||
if(DataTypeConverter::NUMBER_PARSE_OKAY == DataTypeConverter::strToInt(node_server_id_string, node_server_id )) {
|
||||
node_server = controller::NodeServer::load(node_server_id);
|
||||
}
|
||||
}
|
||||
node_server_id_string = form.get("test-node-servers2", "");
|
||||
if(node_server_id_string != "") {
|
||||
int node_server_id = 0;
|
||||
if(DataTypeConverter::NUMBER_PARSE_OKAY == DataTypeConverter::strToInt(node_server_id_string, node_server_id )) {
|
||||
node_server2 = controller::NodeServer::load(node_server_id);
|
||||
}
|
||||
}
|
||||
auto topic_id_string = form.get("test-hedera-topic", "");
|
||||
if(topic_id_string != "") {
|
||||
int topic_id = 0;
|
||||
if(DataTypeConverter::NUMBER_PARSE_OKAY == DataTypeConverter::strToInt(topic_id_string, topic_id)) {
|
||||
hedera_topic = controller::HederaTopic::load(topic_id);
|
||||
}
|
||||
}
|
||||
topic_id_string = form.get("test-hedera-topic2", "");
|
||||
if(topic_id_string != "") {
|
||||
int topic_id = 0;
|
||||
if(DataTypeConverter::NUMBER_PARSE_OKAY == DataTypeConverter::strToInt(topic_id_string, topic_id)) {
|
||||
hedera_topic2 = controller::HederaTopic::load(topic_id);
|
||||
}
|
||||
}
|
||||
auto test_timeout_string = form.get("test-timeout", "");
|
||||
if(test_timeout_string != "") {
|
||||
DataTypeConverter::strToInt(test_timeout_string, hedera_timeout);
|
||||
}
|
||||
auto test_part_timeout_string = form.get("test-part-timeout", "");
|
||||
if(test_part_timeout_string != "") {
|
||||
DataTypeConverter::strToInt(test_part_timeout_string, sleep_ms_between_transactions);
|
||||
}
|
||||
auto submit = form.get("submit", "");
|
||||
if(submit == "Run 6-Test") {
|
||||
page = PAGE_RUN_4_SET_TEST;
|
||||
} else if(submit == "json-rpc getTransactions") {
|
||||
page = PAGE_GET_TRANSACTION_RPC_CALL;
|
||||
}
|
||||
std::string step_temp;
|
||||
for(int i = 0; i < 8; i++) {
|
||||
std::string name = "step-";
|
||||
name += std::to_string(i+2);
|
||||
step_temp = form.get(name, "");
|
||||
if(step_temp == "1") {
|
||||
steps[i] = true;
|
||||
} else {
|
||||
steps[i] = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
auto node_servers = controller::NodeServer::load(model::table::NODE_SERVER_GRADIDO_NODE);
|
||||
auto hedera_topics = controller::HederaTopic::listAll();
|
||||
|
||||
#line 3 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.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_large.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\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( pageName );
|
||||
responseStream << "</title>\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 12 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/main.css\">\n";
|
||||
#line 13 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
if(withMaterialIcons) { responseStream << "\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 14 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/materialdesignicons.min.css\">\n";
|
||||
#line 15 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</head>\n";
|
||||
responseStream << "<body>\n";
|
||||
responseStream << " <div class=\"layout\">\n";
|
||||
responseStream << "\t\t<div class=\"sidebar1 nav-menu initial\">\n";
|
||||
responseStream << "\t\t\t<div class=\"nav-vertical\">\n";
|
||||
responseStream << "\t\t\t\t<ul>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 22 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
if(!user.isNull()) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<li><a href=\"";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( user->getGroupBaseUrl() );
|
||||
responseStream << "/\"><span class=\"link-title\">Startseite</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 24 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 25 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/groups\"><span class=\"link-title\">Gruppen</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 26 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/nodes\"><span class=\"link-title\">Node Server</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 27 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/hedera_account\"><span class=\"link-title\">Hedera Accounts</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 28 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/topic\"><span class=\"link-title\">Hedera Topics</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t</ul>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t\t<div class=\"content\">";
|
||||
// end include header_large.cpsp
|
||||
responseStream << "\n";
|
||||
#line 103 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "<div class=\"center-form-container\">\n";
|
||||
responseStream << "\t<!-- Tab links -->\n";
|
||||
responseStream << "\t<div class=\"tab\">\n";
|
||||
responseStream << "\t <button class=\"tablinks ";
|
||||
#line 107 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(PAGE_RUN_4_SET_TEST == page) { responseStream << " active ";
|
||||
#line 107 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\" onclick=\"openTab(event, 'test-4')\">Test 6-Set (3 AddMember, Creation, 2 Transfer)</button>\n";
|
||||
responseStream << "\t <button class=\"tablinks ";
|
||||
#line 108 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(PAGE_GET_TRANSACTION_RPC_CALL == page) { responseStream << " active ";
|
||||
#line 108 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\" onclick=\"openTab(event, 'gn-jsonrpc')\" title=\"call via json-rpc to gradido node with getTransactions\">getTransactions</button>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "\t<div id=\"test-4\" class=\"tabcontent\" ";
|
||||
#line 110 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(PAGE_RUN_4_SET_TEST == page) { responseStream << " style=\"display:block\" ";
|
||||
#line 110 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << ">\n";
|
||||
responseStream << "\t\t<div class=\"center-form-title\">\n";
|
||||
responseStream << "\t\t\t<h3>Test 6-Set (3 AddMember, Creation, 2 Transfer)</</h3>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t\t<div class=\"center-form-form\">\n";
|
||||
responseStream << "\t\t\t<form method=\"POST\" action=\"";
|
||||
#line 115 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/adminNodeServerTest\">\n";
|
||||
responseStream << "\t\t\t\t<p>1. Create three new accounts and show user public keys for comparisation</p>\n";
|
||||
responseStream << "\t\t\t\t<p><input class=\"form-checkbox\" type=\"checkbox\" ";
|
||||
#line 117 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(steps[0]) { responseStream << " checked=\"checked\" ";
|
||||
#line 117 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << " name=\"step-2\" value=\"1\"/> 2. Send a add-member transaction to hedera topic with one signature (first user)</p>\n";
|
||||
responseStream << "\t\t\t\t<p><input class=\"form-checkbox\" type=\"checkbox\" ";
|
||||
#line 118 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(steps[1]) { responseStream << " checked=\"checked\" ";
|
||||
#line 118 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << " name=\"step-3\" value=\"1\"/> 3. Send a add-member transaction to hedera topic with two signatures (first user and second user)</p>\n";
|
||||
responseStream << "\t\t\t\t<p><input class=\"form-checkbox\" type=\"checkbox\" ";
|
||||
#line 119 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(steps[2]) { responseStream << " checked=\"checked\" ";
|
||||
#line 119 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << " name=\"step-4\" value=\"1\"/> 4. Send a creation transaction to second user, signed by first user</p>\n";
|
||||
responseStream << "\t\t\t\t<p><input class=\"form-checkbox\" type=\"checkbox\" ";
|
||||
#line 120 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(steps[3]) { responseStream << " checked=\"checked\" ";
|
||||
#line 120 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << " name=\"step-5\" value=\"1\"/> 5. Send a transfer transaction from second user to first user signed by second user</p>\n";
|
||||
responseStream << "\t\t\t\t<p><input class=\"form-checkbox\" type=\"checkbox\" ";
|
||||
#line 121 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(steps[4]) { responseStream << " checked=\"checked\" ";
|
||||
#line 121 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << " name=\"step-6\" value=\"1\"/> 6. Send a add-member transaction to hedera topic 2 with one signature (third user)</p>\n";
|
||||
responseStream << "\t\t\t\t<p><input class=\"form-checkbox\" type=\"checkbox\" ";
|
||||
#line 122 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(steps[5]) { responseStream << " checked=\"checked\" ";
|
||||
#line 122 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << " name=\"step-7\" value=\"1\"/> 7. Send a cross group transfer from second user to third user signed by second user</p>\n";
|
||||
responseStream << "\t\t\t\t<p><input class=\"form-checkbox\" type=\"checkbox\" ";
|
||||
#line 123 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(steps[6]) { responseStream << " checked=\"checked\" ";
|
||||
#line 123 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << " name=\"step-8\" value=\"1\"/> 8. Wait x seconds to give hedera time to process transactions</p>\n";
|
||||
responseStream << "\t\t\t\t<p><input class=\"form-checkbox\" type=\"checkbox\" ";
|
||||
#line 124 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(steps[7]) { responseStream << " checked=\"checked\" ";
|
||||
#line 124 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << " name=\"step-9\" value=\"1\"/> 9. Ask choosen node for transaction and print result</p>\n";
|
||||
responseStream << "\t\t\t\t<fieldset>\n";
|
||||
responseStream << "\t\t\t\t\t<legend>Group 1 </legend>\n";
|
||||
responseStream << "\t\t\t\t\t<label class=\"form-label\" for=\"test-node-servers\">Node Server for tests</label>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 128 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(node_servers.size() == 0) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<a href=\"";
|
||||
#line 129 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/nodes\"><span class=\"link-title\">Edit Node-Servers</span></a>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 130 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<select name=\"test-node-servers\" id=\"test-node-servers\">\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 132 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
for(auto it = node_servers.begin(); it != node_servers.end(); it++) {
|
||||
auto model = (*it)->getModel();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<option title=\"";
|
||||
#line 135 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->toString() );
|
||||
responseStream << "\" value=\"";
|
||||
#line 135 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->getID() );
|
||||
responseStream << "\" ";
|
||||
#line 135 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(!node_server.isNull() && node_server->getModel()->getID() == model->getID()) { responseStream << "selected=\"selected\"";
|
||||
#line 135 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << ">";
|
||||
#line 135 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->getUrlWithPort() );
|
||||
responseStream << ", group: ";
|
||||
#line 135 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->getGroupId() );
|
||||
responseStream << "</option>\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 136 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t</select>\n";
|
||||
responseStream << "\t\t\t\t\t<label class=\"form-label\" for=\"test-hedera-topic\">Hedera Topic for tests</label>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 139 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(hedera_topics.size() == 0) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<a href=\"";
|
||||
#line 140 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/topic\"><span class=\"link-title\">Edit Hedera-Topics</span></a>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 141 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<select name=\"test-hedera-topic\" id=\"test-hedera-topic\">\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 143 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
for(auto it = hedera_topics.begin(); it != hedera_topics.end(); it++) {
|
||||
auto model = (*it)->getModel();
|
||||
auto hedera_account = (*it)->getAutoRenewAccount();
|
||||
if(hedera_account->getModel()->getNetworkType() != ServerConfig::HEDERA_TESTNET) {
|
||||
continue;
|
||||
}
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<option title=\"";
|
||||
#line 150 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->toString() );
|
||||
responseStream << "\" value=\"";
|
||||
#line 150 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->getID() );
|
||||
responseStream << "\" ";
|
||||
#line 150 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(!hedera_topic.isNull() && hedera_topic->getModel()->getID() == model->getID()) { responseStream << "selected=\"selected\"";
|
||||
#line 150 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << ">";
|
||||
#line 150 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->getName() );
|
||||
responseStream << ", group: ";
|
||||
#line 150 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->getGroupId() );
|
||||
responseStream << "</option>\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 151 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t</select>\n";
|
||||
responseStream << "\t\t\t\t</fieldset>\n";
|
||||
responseStream << "\t\t\t\t<fieldset>\n";
|
||||
responseStream << "\t\t\t\t\t<legend>Group 2 </legend>\n";
|
||||
responseStream << "\t\t\t\t\t<label class=\"form-label\" for=\"test-node-servers2\">Node Server for tests</label>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 157 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(node_servers.size() == 0) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<a href=\"";
|
||||
#line 158 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/nodes\"><span class=\"link-title\">Edit Node-Servers</span></a>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 159 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<select name=\"test-node-servers2\" id=\"test-node-servers2\">\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 161 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
for(auto it = node_servers.begin(); it != node_servers.end(); it++) {
|
||||
auto model = (*it)->getModel();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<option title=\"";
|
||||
#line 164 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->toString() );
|
||||
responseStream << "\" value=\"";
|
||||
#line 164 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->getID() );
|
||||
responseStream << "\" ";
|
||||
#line 164 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(!node_server2.isNull() && node_server2->getModel()->getID() == model->getID()) { responseStream << "selected=\"selected\"";
|
||||
#line 164 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << ">";
|
||||
#line 164 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->getUrlWithPort() );
|
||||
responseStream << ", group: ";
|
||||
#line 164 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->getGroupId() );
|
||||
responseStream << "</option>\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 165 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t</select>\n";
|
||||
responseStream << "\t\t\t\t\t<label class=\"form-label\" for=\"test-hedera-topic2\">Hedera Topic for tests</label>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 168 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(hedera_topics.size() == 0) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<a href=\"";
|
||||
#line 169 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/topic\"><span class=\"link-title\">Edit Hedera-Topics</span></a>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 170 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<select name=\"test-hedera-topic2\" id=\"test-hedera-topic2\">\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 172 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
for(auto it = hedera_topics.begin(); it != hedera_topics.end(); it++) {
|
||||
auto model = (*it)->getModel();
|
||||
auto hedera_account = (*it)->getAutoRenewAccount();
|
||||
if(hedera_account->getModel()->getNetworkType() != ServerConfig::HEDERA_TESTNET) {
|
||||
continue;
|
||||
}
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<option title=\"";
|
||||
#line 179 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->toString() );
|
||||
responseStream << "\" value=\"";
|
||||
#line 179 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->getID() );
|
||||
responseStream << "\" ";
|
||||
#line 179 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(!hedera_topic2.isNull() && hedera_topic2->getModel()->getID() == model->getID()) { responseStream << "selected=\"selected\"";
|
||||
#line 179 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << ">";
|
||||
#line 179 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->getName() );
|
||||
responseStream << ", group: ";
|
||||
#line 179 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->getGroupId() );
|
||||
responseStream << "</option>\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 180 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t</select>\n";
|
||||
responseStream << "\t\t\t\t</fieldset>\n";
|
||||
responseStream << "\t\t\t\t\n";
|
||||
responseStream << "\t\t\t\t<label class=\"form-label\" for=\"test-timeout\">Timeout waiting for hedera in seconds</label>\n";
|
||||
responseStream << "\t\t\t\t<input name=\"test-timeout\" id=\"test-timeout\" type=\"number\" value=\"";
|
||||
#line 185 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( hedera_timeout );
|
||||
responseStream << "\"> seconds \n";
|
||||
responseStream << "\t\t\t\t<label class=\"form-label\" for=\"test-part-timeout\">Timeout between transactions to prevent out-of-order</label>\n";
|
||||
responseStream << "\t\t\t\t<input name=\"test-part-timeout\" id=\"test-part-timeout\" type=\"number\" value=\"";
|
||||
#line 187 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( sleep_ms_between_transactions );
|
||||
responseStream << "\"> ms\n";
|
||||
responseStream << "\t\t\t\t<input class=\"center-form-submit form-button\" type=\"submit\" name=\"submit\" value=\"Run 6-Test\">\n";
|
||||
responseStream << "\t\t\t</form>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "\t<div id=\"gn-jsonrpc\" class=\"tabcontent\" ";
|
||||
#line 192 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(PAGE_GET_TRANSACTION_RPC_CALL == page) { responseStream << " style=\"display:block\" ";
|
||||
#line 192 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << ">\n";
|
||||
responseStream << "\t\t<div class=\"center-form-title\">\n";
|
||||
responseStream << "\t\t\t<h3>Test 4-Set (2 AddMember, Creation, Transfer)</</h3>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t\t<div class=\"center-form-form\">\n";
|
||||
responseStream << "\t\t\t<form method=\"POST\" action=\"";
|
||||
#line 197 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/adminNodeServerTest\">\n";
|
||||
responseStream << "\t\t\t\t<label class=\"form-label\" for=\"test-node-servers\">Node Server to call</label>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 199 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(node_servers.size() == 0) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<a href=\"";
|
||||
#line 200 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/nodes\"><span class=\"link-title\">Edit Node-Servers</span></a>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 201 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<select name=\"test-node-servers\" id=\"test-node-servers\">\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 203 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
for(auto it = node_servers.begin(); it != node_servers.end(); it++) {
|
||||
auto model = (*it)->getModel();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<option title=\"";
|
||||
#line 206 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->toString() );
|
||||
responseStream << "\" value=\"";
|
||||
#line 206 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->getID() );
|
||||
responseStream << "\" ";
|
||||
#line 206 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(!node_server.isNull() && node_server->getModel()->getID() == model->getID()) { responseStream << "selected=\"selected\"";
|
||||
#line 206 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << ">";
|
||||
#line 206 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->getUrlWithPort() );
|
||||
responseStream << ", group: ";
|
||||
#line 206 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( model->getGroupId() );
|
||||
responseStream << "</option>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 207 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t</select>\n";
|
||||
responseStream << "\t\t\t\t<input class=\"center-form-submit form-button\" type=\"submit\" name=\"submit\" value=\"json-rpc getTransactions\">\n";
|
||||
responseStream << "\t\t\t</form>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "\t";
|
||||
#line 213 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(PAGE_RUN_4_SET_TEST == page && !hedera_topic.isNull() && !node_server.isNull()) { responseStream << "\n";
|
||||
responseStream << "\t<ul>\n";
|
||||
responseStream << "\t\t<li>\n";
|
||||
responseStream << "\t\t\t<p>1. Create three new accounts and show user public keys for comparisation: </p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 217 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
|
||||
Profiler time2;
|
||||
auto group_id = hedera_topic->getModel()->getGroupId();
|
||||
auto group_id2 = hedera_topic2->getModel()->getGroupId();
|
||||
auto user_group = controller::Group::load(group_id);
|
||||
auto user_group2 = controller::Group::load(group_id2);
|
||||
auto mnemonic_type = ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER;
|
||||
|
||||
std::string password1 = "hsaj(2askaslASlllak3wjjeudsaj";
|
||||
auto user_1 = controller::User::create("testEmail@google.de", "Max", "Mustermann", group_id);
|
||||
auto passphrase_1 = Passphrase::generate(&ServerConfig::g_Mnemonic_WordLists[mnemonic_type]);
|
||||
auto gradido_key_pair_1 = KeyPairEd25519::create(passphrase_1);
|
||||
user_1->setGradidoKeyPair(gradido_key_pair_1);
|
||||
user_1->login(password1);
|
||||
|
||||
std::string password2 = "uweia8saiSale,dsasA";
|
||||
auto user_2 = controller::User::create("testEmail2@google.de", "MJax", "Mustrermann", group_id);
|
||||
auto passphrase_2 = Passphrase::generate(&ServerConfig::g_Mnemonic_WordLists[mnemonic_type]);
|
||||
auto gradido_key_pair_2 = KeyPairEd25519::create(passphrase_2);
|
||||
user_2->setGradidoKeyPair(gradido_key_pair_2);
|
||||
user_2->login(password2);
|
||||
|
||||
std::string password3 = "jaue_skaiellasealaK";
|
||||
auto user_3 = controller::User::create("testEmail3@gmail.com", "Morpheus", "Miaufull", group_id2);
|
||||
auto passphrase_3 = Passphrase::generate(&ServerConfig::g_Mnemonic_WordLists[mnemonic_type]);
|
||||
auto gradido_key_pair_3 = KeyPairEd25519::create(passphrase_3);
|
||||
user_3->setGradidoKeyPair(gradido_key_pair_3);
|
||||
user_3->login(password3);
|
||||
responseStream << "\t\t\t\n";
|
||||
responseStream << "\t\t\t<fieldset><legend>";
|
||||
#line 246 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( user_group->getModel()->getName() );
|
||||
responseStream << "</legend>\n";
|
||||
responseStream << "\t\t\t\t<p>User 1: ";
|
||||
#line 247 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( user_1->getPublicHex() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t<p>User 2: ";
|
||||
#line 248 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( user_2->getPublicHex() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t</fieldset>\n";
|
||||
responseStream << "\t\t\t<fieldset><legend>";
|
||||
#line 250 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( user_group2->getModel()->getName() );
|
||||
responseStream << "</legend>\n";
|
||||
responseStream << "\t\t\t\t<p>User 3: ";
|
||||
#line 251 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( user_3->getPublicHex() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t</fieldset>\n";
|
||||
responseStream << "\t\t\t<p>Time: ";
|
||||
#line 253 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( time2.string() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t</li>\n";
|
||||
responseStream << "\t\t<li>\n";
|
||||
responseStream << "\t\t\t<p>2. Send a add-member transaction to hedera topic with one signature (first user)</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 257 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
|
||||
time2.reset();
|
||||
if(!steps[0]) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<p>skipped</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 261 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} else {
|
||||
auto transaction1 = model::gradido::Transaction::createGroupMemberUpdate(user_1, user_group);
|
||||
transaction1->getTransactionBody()->getGroupMemberUpdate()->setMinSignatureCount(1);
|
||||
transaction1->sign(user_1);
|
||||
auto transaction1_json = transaction1->getTransactionAsJson(true);
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>";
|
||||
#line 267 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( DataTypeConverter::replaceNewLineWithBr(transaction1_json) );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 268 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>Time: ";
|
||||
#line 269 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( time2.string() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t</li>\n";
|
||||
responseStream << "\t\t<li>\n";
|
||||
responseStream << "\t\t\t<p>3. Send a add-member transaction to hedera topic with two signatures (first user and second user)</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 273 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
|
||||
time2.reset();
|
||||
if(!steps[1]) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<p>skipped</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 277 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} else {
|
||||
auto transaction2 = model::gradido::Transaction::createGroupMemberUpdate(user_2, user_group);
|
||||
transaction2->getTransactionBody()->getGroupMemberUpdate()->setMinSignatureCount(2);
|
||||
transaction2->sign(user_2);
|
||||
// wait before sending fourth transaction, gn seems to crash by more than 3 transaction at nearly the same time
|
||||
Poco::Thread::sleep(sleep_ms_between_transactions);
|
||||
transaction2->sign(user_1);
|
||||
auto transaction2_json = transaction2->getTransactionAsJson(true);
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>";
|
||||
#line 286 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( DataTypeConverter::replaceNewLineWithBr(transaction2_json) );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 287 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>Time: ";
|
||||
#line 288 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( time2.string() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t</li>\n";
|
||||
responseStream << "\t\t<li>\n";
|
||||
responseStream << "\t\t\t<p>4. Send a creation transaction to second user, signed by first user</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 292 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
|
||||
time2.reset();
|
||||
if(!steps[2]) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<p>skipped</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 296 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} else {
|
||||
auto transaction3 = model::gradido::Transaction::createCreation(user_2, 10000000, Poco::DateTime(), "Test Creation");
|
||||
// wait before sending fourth transaction, gn seems to crash by more than 3 transaction at nearly the same time
|
||||
Poco::Thread::sleep(sleep_ms_between_transactions);
|
||||
transaction3->sign(user_1);
|
||||
auto transaction3_json = transaction3->getTransactionAsJson(true);
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>";
|
||||
#line 303 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( DataTypeConverter::replaceNewLineWithBr(transaction3_json) );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 304 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>Time: ";
|
||||
#line 305 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( time2.string() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t</li>\n";
|
||||
responseStream << "\t\t<li>\n";
|
||||
responseStream << "\t\t\t<p>5. Send a transfer transaction from second user to first user signed by second user</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 309 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
|
||||
time2.reset();
|
||||
if(!steps[3]) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<p>skipped</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 313 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} else {
|
||||
auto user_1_pubkey = user_1->getModel()->getPublicKeyCopy();
|
||||
auto transaction4 = model::gradido::Transaction::createTransfer(user_2, user_1_pubkey, user_group, 5000000, "Test Transfer");
|
||||
// wait before sending fourth transaction, gn seems to crash by more than 3 transaction at nearly the same time
|
||||
Poco::Thread::sleep(sleep_ms_between_transactions);
|
||||
transaction4[0]->sign(user_2);
|
||||
auto transaction4_json = transaction4[0]->getTransactionAsJson(true);
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>";
|
||||
#line 321 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( DataTypeConverter::replaceNewLineWithBr(transaction4_json) );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 322 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>Time: ";
|
||||
#line 323 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( time2.string() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t</li>\n";
|
||||
responseStream << "\t\t<li>\n";
|
||||
responseStream << "\t\t\t<p>6. Send a add-member transaction to hedera topic 2 with one signature (third user)</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 327 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
|
||||
time2.reset();
|
||||
if(!steps[4]) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<p>skipped</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 331 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} else {
|
||||
auto transaction5 = model::gradido::Transaction::createGroupMemberUpdate(user_3, user_group2);
|
||||
transaction5->getTransactionBody()->getGroupMemberUpdate()->setMinSignatureCount(1);
|
||||
Poco::Thread::sleep(sleep_ms_between_transactions);
|
||||
transaction5->sign(user_3);
|
||||
auto transaction5_json = transaction5->getTransactionAsJson(true);
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>";
|
||||
#line 338 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( DataTypeConverter::replaceNewLineWithBr(transaction5_json) );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 339 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>Time: ";
|
||||
#line 340 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( time2.string() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t</li>\n";
|
||||
responseStream << "\t\t<li>\n";
|
||||
responseStream << "\t\t\t<p>7. Send a cross group transfer from second user to third user signed by second user</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 344 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
|
||||
time2.reset();
|
||||
if(!steps[5]) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<p>skipped</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 348 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} else {
|
||||
auto user_3_pubkey = user_3->getModel()->getPublicKeyCopy();
|
||||
auto transaction6 = model::gradido::Transaction::createTransfer(user_2, user_3_pubkey, user_group2, 4000000, "Test Group Transfer", false);
|
||||
if(!transaction6.size()) {
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<div class=\"alert alert-error\" role=\"alert\">\n";
|
||||
responseStream << "\t\t\t\t\t<i class=\"material-icons-outlined\">report_problem</i>\n";
|
||||
responseStream << "\t\t\t\t\t<span>Error creating Transaction</span>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 357 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
|
||||
} else {
|
||||
Poco::Thread::sleep(sleep_ms_between_transactions);
|
||||
transaction6[0]->sign(user_2);
|
||||
auto transaction6_json = transaction6[0]->getTransactionAsJson(true);
|
||||
auto paired_transaction = transaction6[0]->getPairedTransaction();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<p>";
|
||||
#line 364 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( DataTypeConverter::replaceNewLineWithBr(transaction6_json) );
|
||||
responseStream << "</p>\t\t\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 365 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(!paired_transaction.isNull()) {
|
||||
auto transaction6_2_json = paired_transaction->getTransactionAsJson(true);
|
||||
responseStream << "<p>";
|
||||
#line 367 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( DataTypeConverter::replaceNewLineWithBr(transaction6_2_json) );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 368 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 369 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 370 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << " \n";
|
||||
responseStream << "\t\t\t<p>Time: ";
|
||||
#line 371 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( time2.string() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t</li>\n";
|
||||
responseStream << "\t\t<li>\n";
|
||||
responseStream << "\t\t\t<p>8. Wait ";
|
||||
#line 374 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( hedera_timeout );
|
||||
responseStream << " seconds to give hedera time to process transactions</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 375 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
if(!steps[6]) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<p>skipped</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 377 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} else {
|
||||
Poco::Thread::sleep(hedera_timeout * 1000);
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t</li>\n";
|
||||
responseStream << "\t\t<li>\n";
|
||||
responseStream << "\t\t\t<p>9. Ask choosen node for transaction and print result</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 383 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
time2.reset();
|
||||
if(!steps[7] || node_server.isNull()) {
|
||||
responseStream << "<p>skipped</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 386 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} else {
|
||||
auto node_server_model = node_server->getModel();
|
||||
JsonRPCRequest jsonrpc(node_server_model->getUrl(), node_server_model->getPort());
|
||||
Poco::JSON::Object params;
|
||||
params.set("groupAlias", user_group->getModel()->getAlias());
|
||||
params.set("lastKnownSequenceNumber", 0);
|
||||
auto gn_answear = jsonrpc.request("getTransactions", params);
|
||||
if(!gn_answear.isNull()) {
|
||||
std::stringstream ss;
|
||||
Poco::JSON::Stringifier::stringify(gn_answear, ss, 4, -1, Poco::JSON_PRESERVE_KEY_ORDER);
|
||||
std::string answear_string = ss.str(); responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 397 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( DataTypeConverter::replaceNewLineWithBr(answear_string) );
|
||||
#line 397 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
|
||||
}
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>Time: ";
|
||||
#line 400 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( time2.string() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t</li>\n";
|
||||
responseStream << "\t</ul>\n";
|
||||
responseStream << "\t";
|
||||
#line 403 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} else if(PAGE_GET_TRANSACTION_RPC_CALL == page && !node_server.isNull()) {
|
||||
Profiler time3;
|
||||
auto node_server_model = node_server->getModel();
|
||||
auto user_group = controller::Group::load(node_server_model->getGroupId());
|
||||
JsonRPCRequest jsonrpc(node_server_model->getUrl(), node_server_model->getPort());
|
||||
Poco::JSON::Object params;
|
||||
params.set("groupAlias", user_group->getModel()->getAlias());
|
||||
params.set("lastKnownSequenceNumber", 0);
|
||||
auto gn_answear = jsonrpc.request("getTransactions", params);
|
||||
if(!gn_answear.isNull()) {
|
||||
std::stringstream ss;
|
||||
Poco::JSON::Stringifier::stringify(gn_answear, ss, 4, -1, Poco::JSON_PRESERVE_KEY_ORDER);
|
||||
std::string answear_string = ss.str(); responseStream << "\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 416 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( DataTypeConverter::replaceNewLineWithBr(answear_string) );
|
||||
#line 416 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
|
||||
}
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t<p>Time: ";
|
||||
#line 419 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( time3.string() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t";
|
||||
#line 420 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\n";
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "<script type=\"text/javascript\" src=\"";
|
||||
#line 423 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminNodeServerTest.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "/js/tabs.js\"></script>\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\\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\\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
|
||||
responseStream << "\n";
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
18
login_server/src/cpp/HTTPInterface/AdminNodeServerTestPage.h
Normal file
18
login_server/src/cpp/HTTPInterface/AdminNodeServerTestPage.h
Normal file
@ -0,0 +1,18 @@
|
||||
#ifndef AdminNodeServerTestPage_INCLUDED
|
||||
#define AdminNodeServerTestPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "PageRequestMessagedHandler.h"
|
||||
|
||||
|
||||
class AdminNodeServerTestPage: public PageRequestMessagedHandler
|
||||
{
|
||||
public:
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // AdminNodeServerTestPage_INCLUDED
|
||||
558
login_server/src/cpp/HTTPInterface/AdminTopicPage.cpp
Normal file
558
login_server/src/cpp/HTTPInterface/AdminTopicPage.cpp
Normal file
@ -0,0 +1,558 @@
|
||||
#include "AdminTopicPage.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\\src\\cpsp\\adminTopic.cpsp"
|
||||
|
||||
#include "../controller/HederaAccount.h"
|
||||
#include "../controller/HederaTopic.h"
|
||||
#include "../controller/Group.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
#include "../lib/Profiler.h"
|
||||
#include "../lib/Success.h"
|
||||
|
||||
#include "Poco/Timespan.h"
|
||||
#include "Poco/URI.h"
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
AdminTopicPage::AdminTopicPage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void AdminTopicPage::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 21 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
|
||||
const char* pageName = "Topic";
|
||||
auto user = mSession->getNewUser();
|
||||
auto sm = SessionManager::getInstance();
|
||||
Profiler hedera_time;
|
||||
|
||||
std::string name = "";
|
||||
std::string topic_id_string = "";
|
||||
int auto_renew_account = 0;
|
||||
int auto_renew_period = 7890000; // 3 Monate
|
||||
|
||||
int group_id = 0;
|
||||
|
||||
Poco::URI uri(request.getURI());
|
||||
auto uri_query = uri.getQueryParameters();
|
||||
std::string action = "";
|
||||
Poco::AutoPtr<controller::HederaTopic> query_hedera_topic;
|
||||
|
||||
// parsing get query params
|
||||
if(uri_query.size() >= 2) {
|
||||
if(uri_query[0].first == "action") {
|
||||
action = uri_query[0].second;
|
||||
}
|
||||
if(uri_query[1].first == "topic_id") {
|
||||
std::string topic_id_from_query;
|
||||
int topic_id = 0;
|
||||
topic_id_from_query = uri_query[1].second;
|
||||
if(DataTypeConverter::strToInt(topic_id_from_query, topic_id) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int Convert Error", "Error converting topic_id_from_query to int"));
|
||||
} else {
|
||||
auto hedera_topic = controller::HederaTopic::load(topic_id);
|
||||
if(hedera_topic.isNull()) {
|
||||
addError(new Error("Action", "hedera topic not found"));
|
||||
} else {
|
||||
query_hedera_topic = hedera_topic;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
// actions
|
||||
if(!query_hedera_topic.isNull())
|
||||
{
|
||||
if(action == "getTopicInfos")
|
||||
{
|
||||
hedera_time.reset();
|
||||
if(query_hedera_topic->updateWithGetTopicInfos(user)) {
|
||||
addNotification(new ParamSuccess("Hedera", "hedera get topic infos success in ", hedera_time.string()));
|
||||
} else {
|
||||
addError(new ParamError("Hedera", "hedera get topic infos failed in ", hedera_time.string()));
|
||||
}
|
||||
getErrors(query_hedera_topic);
|
||||
}
|
||||
}
|
||||
else if(!form.empty())
|
||||
{
|
||||
name = form.get("topic-name", "");
|
||||
topic_id_string = form.get("topic-id", "");
|
||||
auto auto_renew_account_string = form.get("topic-auto-renew-account", "0");
|
||||
auto auto_renew_period_string = form.get("topic-auto-renew-period", "7890000");
|
||||
auto group_id_string = form.get("topic-group", "-1");
|
||||
Poco::AutoPtr<controller::HederaId> topic_id;
|
||||
|
||||
if(topic_id_string != "" && sm->isValid(topic_id_string, VALIDATE_HEDERA_ID)) {
|
||||
topic_id = controller::HederaId::create(topic_id_string);
|
||||
if(topic_id.isNull()) {
|
||||
addError(new Error("Hedera Id", "cannot parse hedera id"));
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if(name != "" && !sm->isValid(name, VALIDATE_NAME)) {
|
||||
addError(new Error("Topic", "Name not valid, at least 3 Character"));
|
||||
}
|
||||
|
||||
if(!sm->isValid(auto_renew_account_string, VALIDATE_ONLY_INTEGER)) {
|
||||
addError(new Error("Topic", "auto renew account id not an integer"));
|
||||
} else {
|
||||
if(DataTypeConverter::strToInt(auto_renew_account_string, auto_renew_account) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int convert error", "Error converting auto renew account id to int"));
|
||||
}
|
||||
}
|
||||
|
||||
if(!sm->isValid(auto_renew_period_string, VALIDATE_ONLY_INTEGER)) {
|
||||
addError(new Error("Topic", "auto renew period not an integer"));
|
||||
} else {
|
||||
if(DataTypeConverter::strToInt(auto_renew_period_string, auto_renew_period) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int convert error", "Error converting auto renew period to int"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(!sm->isValid(group_id_string, VALIDATE_ONLY_INTEGER)) {
|
||||
addError(new Error("Topic", "group_id not an integer"));
|
||||
} else {
|
||||
if(DataTypeConverter::strToInt(group_id_string, group_id) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int convert error", "Error converting group_id to int"));
|
||||
}
|
||||
}
|
||||
//const std::string& name, int autoRenewAccountId, int autoRenewPeriod, int groupId
|
||||
|
||||
// add or create topic?
|
||||
// add topic
|
||||
if(!topic_id.isNull()) {
|
||||
if(topic_id->getModel()->insertIntoDB(true)) {
|
||||
auto hedera_topic = controller::HederaTopic::loadFromHedera(topic_id, group_id, user);
|
||||
if(!hedera_topic.isNull()) {
|
||||
hedera_topic->getModel()->insertIntoDB(false);
|
||||
} else {
|
||||
addError(new Error("Hedera Topic", "error load topic from hedera"));
|
||||
}
|
||||
} else {
|
||||
addError(new Error("Hedera Id", "Error saving hedera id"));
|
||||
}
|
||||
// create topic
|
||||
} else {
|
||||
auto hedera_topic = controller::HederaTopic::create(name, auto_renew_account, auto_renew_period, group_id);
|
||||
if(!hedera_topic->getModel()->insertIntoDB(true)) {
|
||||
addError(new Error("Topic", "error saving into db"));
|
||||
} else {
|
||||
auto payer = controller::HederaAccount::load(auto_renew_account);
|
||||
if(payer.isNull()) {
|
||||
addError(new Error("Payer", "payer account not found"));
|
||||
} else {
|
||||
auto hedera_task = hedera_topic->createTopic(payer, user);
|
||||
if(hedera_task.isNull()) {
|
||||
addError(new Error("Create Topic", "Failed"));
|
||||
getErrors(hedera_topic);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
auto hedera_accounts = controller::HederaAccount::load("user_id", user->getModel()->getID());
|
||||
//std::vector<Poco::AutoPtr<controller::HederaAccount>> hedera_accounts;
|
||||
|
||||
auto groups = controller::Group::listAll();
|
||||
std::map<int, int> group_indices;
|
||||
int count = 0;
|
||||
for(auto it = groups.begin(); it != groups.end(); it++) {
|
||||
group_indices.insert(std::pair<int, int>((*it)->getModel()->getID(), count));
|
||||
count++;
|
||||
}
|
||||
|
||||
auto hedera_topics = controller::HederaTopic::listAll();
|
||||
//std::vector<Poco::AutoPtr<controller::HederaTopic>> hedera_topics;
|
||||
|
||||
#line 3 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.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_large.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\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( pageName );
|
||||
responseStream << "</title>\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 12 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/main.css\">\n";
|
||||
#line 13 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
if(withMaterialIcons) { responseStream << "\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 14 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/materialdesignicons.min.css\">\n";
|
||||
#line 15 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</head>\n";
|
||||
responseStream << "<body>\n";
|
||||
responseStream << " <div class=\"layout\">\n";
|
||||
responseStream << "\t\t<div class=\"sidebar1 nav-menu initial\">\n";
|
||||
responseStream << "\t\t\t<div class=\"nav-vertical\">\n";
|
||||
responseStream << "\t\t\t\t<ul>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 22 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
if(!user.isNull()) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<li><a href=\"";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( user->getGroupBaseUrl() );
|
||||
responseStream << "/\"><span class=\"link-title\">Startseite</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 24 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 25 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/groups\"><span class=\"link-title\">Gruppen</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 26 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/nodes\"><span class=\"link-title\">Node Server</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 27 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/hedera_account\"><span class=\"link-title\">Hedera Accounts</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t\t<li><a href=\"";
|
||||
#line 28 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_large.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/topic\"><span class=\"link-title\">Hedera Topics</span></a></li>\n";
|
||||
responseStream << "\t\t\t\t</ul>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t\t<div class=\"content\">";
|
||||
// end include header_large.cpsp
|
||||
responseStream << "\n";
|
||||
responseStream << "<style type=\"text/css\">\n";
|
||||
responseStream << "\t.center-form-form .input-40 {\n";
|
||||
responseStream << "\t\tmargin-left:0;\n";
|
||||
responseStream << "\t\twidth:40%;\n";
|
||||
responseStream << "\t\tdisplay:inline-block;\n";
|
||||
responseStream << "\t}\n";
|
||||
responseStream << "\t\n";
|
||||
responseStream << "</style>\n";
|
||||
#line 180 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "<div class=\"content-container info-container\">\n";
|
||||
responseStream << "\t<h1>Topic Admin Page</h1>\n";
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "<div class=\"center-form-container\">\n";
|
||||
responseStream << "\t<div class=\"content-list\">\n";
|
||||
responseStream << "\t\t<div class=\"content-list-title\">\n";
|
||||
responseStream << "\t\t\t<h2>Hedera Topics</h2>\n";
|
||||
responseStream << "\t\t</div>\t\n";
|
||||
responseStream << "\t\t<div class=\"content-list-table\">\n";
|
||||
responseStream << "\t\t\t<div class=\"row\">\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c3\">Topic ID</div>\t\t\t\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c3\">Name</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c3\">Network Type</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c4\">Auto Renew Account Balance</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c4\">Auto Renew Period</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c3\">Group ID</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c3\">Current Timeout</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c2\">Sequence Number</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c3\" title=\"Last Time Get update from Hedera\">Last Updated</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c5\">Aktionen</div>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 202 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
for(auto it = hedera_topics.begin(); it != hedera_topics.end(); it++) {
|
||||
auto hedera_topic_model = (*it)->getModel();
|
||||
auto updateUrl = ServerConfig::g_serverPath + "/topic?action=getTopicInfos&topic_id=" + std::to_string(hedera_topic_model->getID());
|
||||
std::string kabuto_url = "https://explorer.kabuto.sh/";//testnet/id/0.0.132132;
|
||||
|
||||
|
||||
auto auto_renew_account = (*it)->getAutoRenewAccount();
|
||||
auto renew_account_model = auto_renew_account->getModel();
|
||||
|
||||
if(renew_account_model->getNetworkType() == ServerConfig::HEDERA_TESTNET) {
|
||||
kabuto_url += "testnet/";
|
||||
} else if(renew_account_model->getNetworkType() == ServerConfig::HEDERA_MAINNET) {
|
||||
kabuto_url += "mainnet/";
|
||||
}
|
||||
kabuto_url += "id/";
|
||||
|
||||
std::string timeout_color = "success-color";
|
||||
if(hedera_topic_model->getCurrentTimeout() < Poco::DateTime()) {
|
||||
timeout_color = "alert-color";
|
||||
} else if((hedera_topic_model->getCurrentTimeout() - Poco::DateTime()) < Poco::Timespan(2,0,0,0,0)) {
|
||||
timeout_color = "orange-color";
|
||||
}
|
||||
std::string topic_hedera_id_string = "";
|
||||
auto topic_hedera_id = (*it)->getTopicHederaId();
|
||||
if(!topic_hedera_id.isNull()) {
|
||||
topic_hedera_id_string = topic_hedera_id->getModel()->toString();
|
||||
kabuto_url += topic_hedera_id_string;
|
||||
}
|
||||
|
||||
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<div class=\"row\">\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c3\"><a title=\"Hedera Block Explorer - Kabuto\" target=\"_blank\" href=\"";
|
||||
#line 234 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( kabuto_url );
|
||||
responseStream << "\">";
|
||||
#line 234 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( topic_hedera_id_string );
|
||||
responseStream << "</a></div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c3\">";
|
||||
#line 235 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( hedera_topic_model->getName() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c3\">";
|
||||
#line 236 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( model::table::HederaAccount::hederaNetworkTypeToString(renew_account_model->getNetworkType()) );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c4\">";
|
||||
#line 237 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( renew_account_model->getBalanceString() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c4\">";
|
||||
#line 238 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( hedera_topic_model->getAutoRenewPeriodString() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c3\">";
|
||||
#line 239 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( hedera_topic_model->getGroupId() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c3 ";
|
||||
#line 240 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( timeout_color );
|
||||
responseStream << "\">";
|
||||
#line 240 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( hedera_topic_model->getCurrentTimeoutString() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c2\">";
|
||||
#line 241 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( hedera_topic_model->getSequenceNumber() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c3\">";
|
||||
#line 242 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( hedera_topic_model->getUpdatedString() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c5\">";
|
||||
#line 243 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
if(!topic_hedera_id.isNull()) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<button class=\"form-button\" title=\"Query on Hedera, cost some fees\" onclick=\"window.location.href='";
|
||||
#line 244 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( updateUrl );
|
||||
responseStream << "'\" >\n";
|
||||
responseStream << "\t\t\t\t\t\t\tget topic infos\n";
|
||||
responseStream << "\t\t\t\t\t\t</button>\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 247 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 250 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "\t<!-- Tab links -->\n";
|
||||
responseStream << "\t<div class=\"tab\">\n";
|
||||
responseStream << "\t <button class=\"tablinks\" onclick=\"openTab(event, 'topic-create')\">New Topic</button>\n";
|
||||
responseStream << "\t <button class=\"tablinks\" onclick=\"openTab(event, 'topic-add')\">Add Topic</button>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "\t<div id=\"topic-create\" class=\"tabcontent\">\n";
|
||||
responseStream << "\t\t<div class=\"center-form-title\">\n";
|
||||
responseStream << "\t\t\t<h3>Ein neues Topic anlegen</h3>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t\t<div class=\"center-form-form\">\n";
|
||||
responseStream << "\t\t\t<form method=\"POST\" action=\"";
|
||||
#line 263 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
responseStream << "/topic\">\n";
|
||||
responseStream << "\t\t\t\t<label class=\"form-label\" for=\"topic-name\">Name</label>\n";
|
||||
responseStream << "\t\t\t\t<input type=\"text\" class=\"form-control\" id=\"topic-name\" name=\"topic-name\" value=\"";
|
||||
#line 265 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( name );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t\t\t\t<label class=\"form-label\" for=\"topic-auto-renew-account\">Auto Renew Hedera Account</label>\n";
|
||||
responseStream << "\t\t\t\t<select name=\"topic-auto-renew-account\" id=\"topic-auto-renew-account\">\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 268 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
for(auto it = hedera_accounts.begin(); it != hedera_accounts.end(); it++) {
|
||||
auto model = (*it)->getModel();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<option title=\"";
|
||||
#line 271 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( model->toString() );
|
||||
responseStream << "\" value=\"";
|
||||
#line 271 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( model->getID() );
|
||||
responseStream << "\" ";
|
||||
#line 271 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
if(auto_renew_account == model->getID()) { responseStream << "selected=\"selected\"";
|
||||
#line 271 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
} responseStream << ">";
|
||||
#line 271 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( (*it)->toShortSelectOptionName() );
|
||||
responseStream << "</option>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 272 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t</select>\n";
|
||||
responseStream << "\t\t\t\t<label class=\"form-label\" for=\"topic-auto-renew-period\">Auto Renew Period in seconds</label>\n";
|
||||
responseStream << "\t\t\t\t<div><input class=\"form-control input-40\" id=\"topic-auto-renew-period\" value=\"";
|
||||
#line 275 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( auto_renew_period );
|
||||
responseStream << "\" type=\"number\" name=\"topic-auto-renew-period\"/><span style=\"margin-left:8px\" id=\"readable-auto-renew-period\"></span></div>\n";
|
||||
responseStream << "\t\t\t\t<label class=\"form-label\" for=\"topic-group\">Group</label>\n";
|
||||
responseStream << "\t\t\t\t<select class=\"form-control\" name=\"topic-group\" id=\"topic-group\">\t\t\t\n";
|
||||
responseStream << "\t\t\t\t\t<option value=\"-1\">Keine Gruppe</option>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 279 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
for(auto it = groups.begin(); it != groups.end(); it++) {
|
||||
auto group_model = (*it)->getModel(); responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<option title=\"";
|
||||
#line 281 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( group_model->getDescription() );
|
||||
responseStream << "\" value=\"";
|
||||
#line 281 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( group_model->getID() );
|
||||
responseStream << "\" ";
|
||||
#line 281 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
if(group_id == group_model->getID()) { responseStream << "selected=\"selected\"";
|
||||
#line 281 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
} responseStream << ">";
|
||||
#line 281 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( group_model->getName() );
|
||||
responseStream << "</option>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 282 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t</select>\n";
|
||||
responseStream << "\t\t\t\t\n";
|
||||
responseStream << "\t\t\t\t<input class=\"center-form-submit form-button\" type=\"submit\" name=\"submit\" value=\"";
|
||||
#line 285 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( gettext("Create Topic") );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t\t\t</form>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "\t<div id=\"topic-add\" class=\"tabcontent\">\n";
|
||||
responseStream << "\t\t<div class=\"center-form-title\">\n";
|
||||
responseStream << "\t\t\t<h3>Ein bestehendes Topic eintragen</h3>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t\t<div class=\"center-form-form\">\n";
|
||||
responseStream << "\t\t\t<form method=\"POST\" action=\"";
|
||||
#line 294 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
responseStream << "/topic\">\n";
|
||||
responseStream << "\t\t\t\t<label class=\"form-label\" for=\"topic-id\">TopicId</label>\n";
|
||||
responseStream << "\t\t\t\t<input type=\"text\" class=\"form-control\" id=\"topic-id\" name=\"topic-id\" value=\"";
|
||||
#line 296 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( topic_id_string );
|
||||
responseStream << "\" placeholder=\"0.0.XXXX\">\n";
|
||||
responseStream << "\t\t\t\t<label class=\"form-label\" for=\"topic-group\">Group</label>\n";
|
||||
responseStream << "\t\t\t\t<select class=\"form-control\" name=\"topic-group\" id=\"topic-group\">\t\t\t\n";
|
||||
responseStream << "\t\t\t\t\t<option value=\"-1\">Keine Gruppe</option>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 300 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
for(auto it = groups.begin(); it != groups.end(); it++) {
|
||||
auto group_model = (*it)->getModel(); responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<option title=\"";
|
||||
#line 302 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( group_model->getDescription() );
|
||||
responseStream << "\" value=\"";
|
||||
#line 302 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( group_model->getID() );
|
||||
responseStream << "\" ";
|
||||
#line 302 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
if(group_id == group_model->getID()) { responseStream << "selected=\"selected\"";
|
||||
#line 302 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
} responseStream << ">";
|
||||
#line 302 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( group_model->getName() );
|
||||
responseStream << "</option>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 303 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t</select>\n";
|
||||
responseStream << "\t\t\t\t\n";
|
||||
responseStream << "\t\t\t\t<input class=\"center-form-submit form-button\" type=\"submit\" name=\"submit\" value=\"";
|
||||
#line 306 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( gettext("Add Topic") );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t\t\t</form>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t</div>\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\\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\\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
|
||||
responseStream << "\n";
|
||||
responseStream << "<script type=\"text/javascript\" src=\"";
|
||||
#line 312 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "/js/time_calculations.js\"></script>\n";
|
||||
responseStream << "<script type=\"text/javascript\" src=\"";
|
||||
#line 313 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminTopic.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "/js/tabs.js\"></script>\n";
|
||||
responseStream << "<script type=\"text/javascript\">\n";
|
||||
responseStream << "\tvar input = document.getElementById(\"topic-auto-renew-period\");\n";
|
||||
responseStream << "\tvar span = document.getElementById(\"readable-auto-renew-period\");\n";
|
||||
responseStream << "\tspan.innerHTML = '~ ' + getExactTimeDuration(input.value);\n";
|
||||
responseStream << "\tinput.addEventListener('keyup', function(e) {\n";
|
||||
responseStream << "\t\tspan.innerHTML = '~ ' + getExactTimeDuration(input.value);\n";
|
||||
responseStream << "\t});\n";
|
||||
responseStream << "\t\n";
|
||||
responseStream << "</script>";
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
20
login_server/src/cpp/HTTPInterface/AdminTopicPage.h
Normal file
20
login_server/src/cpp/HTTPInterface/AdminTopicPage.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef AdminTopicPage_INCLUDED
|
||||
#define AdminTopicPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class AdminTopicPage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
AdminTopicPage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // AdminTopicPage_INCLUDED
|
||||
@ -10,7 +10,7 @@
|
||||
// includes
|
||||
#include "../controller/User.h"
|
||||
#include "../controller/EmailVerificationCode.h"
|
||||
#include "../controller/UserBackups.h"
|
||||
#include "../controller/UserBackup.h"
|
||||
|
||||
|
||||
enum PageState
|
||||
@ -43,7 +43,7 @@ void AdminUserPasswordReset::handleRequest(Poco::Net::HTTPServerRequest& request
|
||||
PageState state = PAGE_ASK_EMAIL;
|
||||
Poco::AutoPtr<controller::User> user = controller::User::create();
|
||||
Poco::AutoPtr<controller::EmailVerificationCode> code;
|
||||
Poco::AutoPtr<controller::UserBackups> userBackup;
|
||||
Poco::AutoPtr<controller::UserBackup> userBackup;
|
||||
bool validUser = false;
|
||||
std::string pageName = "Admin User Passwort Reset";
|
||||
|
||||
@ -69,11 +69,11 @@ void AdminUserPasswordReset::handleRequest(Poco::Net::HTTPServerRequest& request
|
||||
}
|
||||
}
|
||||
|
||||
auto backups = controller::UserBackups::load(userId);
|
||||
auto backups = controller::UserBackup::load(userId);
|
||||
auto userPubkey = user->getModel()->getPublicKey();
|
||||
for(auto it = backups.begin(); it != backups.end(); it++) {
|
||||
auto keys = (*it)->getKeyPair();
|
||||
if(keys->isPubkeysTheSame(userPubkey)) {
|
||||
if(keys->isTheSame(userPubkey)) {
|
||||
userBackup = *it;
|
||||
break;
|
||||
}
|
||||
@ -235,7 +235,7 @@ void AdminUserPasswordReset::handleRequest(Poco::Net::HTTPServerRequest& request
|
||||
responseStream << "Bitte schreibe sie dir auf und packe sie gut weg.\n";
|
||||
responseStream << "\n";
|
||||
#line 105 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
responseStream << ( controller::UserBackups::formatPassphrase(userBackup->getPassphrase(ServerConfig::Mnemonic_Types::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER)) );
|
||||
responseStream << ( controller::UserBackup::formatPassphrase(userBackup->getPassphrase(ServerConfig::Mnemonic_Types::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER)) );
|
||||
responseStream << "\n";
|
||||
responseStream << " \n";
|
||||
responseStream << "\n";
|
||||
|
||||
@ -42,6 +42,7 @@ void CheckEmailPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
auto lm = LanguageManager::getInstance();
|
||||
auto em = EmailManager::getInstance();
|
||||
|
||||
auto user = mSession->getNewUser();
|
||||
auto lang = chooseLanguage(request);
|
||||
auto langCatalog = lm->getFreeCatalog(lang);
|
||||
unsigned long long verificationCode = 0;
|
||||
@ -142,7 +143,7 @@ void CheckEmailPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << " </div>";
|
||||
// end include header.cpsp
|
||||
responseStream << "\n";
|
||||
#line 68 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 69 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "<div class=\"center-form-container\">\n";
|
||||
@ -176,85 +177,85 @@ void CheckEmailPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "\n";
|
||||
responseStream << " <div class=\"center-form-title\">\n";
|
||||
responseStream << " <h1>";
|
||||
#line 72 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 73 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( langCatalog->gettext("E-Mail verifizieren") );
|
||||
responseStream << "</h1>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"center-form-form\">\n";
|
||||
responseStream << " <form action=\"";
|
||||
#line 75 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
#line 76 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "account/checkEmail\" method=\"GET\">\n";
|
||||
responseStream << "\t";
|
||||
#line 76 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 77 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
if(EMAIL_ACTIVATED == state) { responseStream << "\n";
|
||||
responseStream << "\t\t<p>";
|
||||
#line 77 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 78 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Deine E-Mail wurde erfolgreich bestätigt. Du kannst nun Gradidos versenden.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t<a class=\"link-button\" href=\"";
|
||||
#line 78 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
#line 79 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "\">";
|
||||
#line 78 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 79 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Zur Startseite") );
|
||||
responseStream << "</a>\n";
|
||||
responseStream << "\t";
|
||||
#line 79 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << " <label class=\"form-label\" for=\"email-verification-code\">";
|
||||
#line 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 81 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Bitte gib deinen E-Mail Verification Code ein:"));
|
||||
responseStream << "</label>\n";
|
||||
responseStream << " <input class=\"form-control\" type=\"number\" name=\"email-verification-code\" id=\"email-verification-code\" placeholder=\"";
|
||||
#line 81 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Email Verification Code"));
|
||||
responseStream << "\" ";
|
||||
#line 81 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
if(verificationCode) { responseStream << "value=\"";
|
||||
#line 81 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( verificationCode );
|
||||
responseStream << "\" ";
|
||||
#line 81 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
} responseStream << ">\n";
|
||||
responseStream << " <button type=\"submit\" class=\"center-form-submit form-button\">";
|
||||
#line 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 83 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Überprüfe Code"));
|
||||
responseStream << "</button>\n";
|
||||
responseStream << " </form>\n";
|
||||
responseStream << " <!--<p>\n";
|
||||
responseStream << "\t";
|
||||
#line 85 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 86 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Du hast bisher keinen Code erhalten?"));
|
||||
responseStream << "<br>\n";
|
||||
responseStream << "\t";
|
||||
#line 86 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 87 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( langCatalog->gettext("E-Mail erneut zuschicken (in Arbeit)"));
|
||||
responseStream << "\n";
|
||||
responseStream << " </p>-->\n";
|
||||
responseStream << " <p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 89 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 90 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Funktioniert dein E-Mail Verification Code nicht?"));
|
||||
responseStream << "<br>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 90 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 91 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Schicke uns eine E-Mail und wir kümmern uns darum: "));
|
||||
responseStream << "<br>\n";
|
||||
responseStream << " <b><a href=\"mailto:";
|
||||
#line 91 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 92 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( em->getAdminReceiver());
|
||||
responseStream << "?subject=Invalid E-Mail Verification Code&body=Hallo Dario,%0D%0A%0D%0Amein E-Mail Verification-Code: ";
|
||||
#line 91 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 92 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( verificationCode );
|
||||
responseStream << " funktioniert nicht,%0D%0Akannst du das prüfen?%0D%0A%0D%0AMit freundlichen Grüßen%0D%0A\">";
|
||||
#line 91 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 92 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( langCatalog->gettext("E-Mail an Support schicken"));
|
||||
responseStream << "</a></b>\n";
|
||||
responseStream << "\t </p>\n";
|
||||
responseStream << " </form>\n";
|
||||
responseStream << " ";
|
||||
#line 94 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
#line 95 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "</div>\n";
|
||||
|
||||
@ -10,14 +10,18 @@
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../SingletonManager/SingletonTaskObserver.h"
|
||||
#include "../SingletonManager/EmailManager.h"
|
||||
#include "../model/TransactionCreation.h"
|
||||
#include "../model/TransactionTransfer.h"
|
||||
#include "../SingletonManager/PendingTasksManager.h"
|
||||
#include "../model/gradido/TransactionCreation.h"
|
||||
#include "../model/gradido/TransactionTransfer.h"
|
||||
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
|
||||
#include "Poco/Thread.h"
|
||||
|
||||
enum PageState {
|
||||
PAGE_TRANSACTION_CREATION,
|
||||
PAGE_TRANSACTION_TRANSFER,
|
||||
PAGE_TRANSACTION_GROUP_ADD_MEMBER,
|
||||
PAGE_NO_TRANSACTIONS,
|
||||
PAGE_USER_DATA_CORRUPTED
|
||||
};
|
||||
@ -42,23 +46,43 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
|
||||
const char* pageName = gettext("Überprüfe Transaktion");
|
||||
auto account_user = mSession->getNewUser();
|
||||
auto user = account_user;
|
||||
auto user_model = account_user->getModel();
|
||||
auto em = EmailManager::getInstance();
|
||||
auto pt = PendingTasksManager::getInstance();
|
||||
auto userBalance = account_user->getBalance();
|
||||
std::string memo = "";
|
||||
bool hasErrors = false;
|
||||
bool enableLogout = true;
|
||||
bool enableSign = true;
|
||||
int skip_count = 0;
|
||||
int pending_task_id = 0;
|
||||
|
||||
std::string community_server_base_path = ServerConfig::g_php_serverPath;
|
||||
if(user_model->getGroupId() != 0) {
|
||||
community_server_base_path = user->getGroupBaseUrl();
|
||||
}
|
||||
|
||||
PageState state = PAGE_NO_TRANSACTIONS;
|
||||
|
||||
|
||||
if(!user_model->isEmailChecked()) {
|
||||
addError(new Error(gettext("E-Mail Aktivierung"), gettext("E-Mail wurde noch nicht aktiviert, du kannst leider noch keine Transaktionen ausführen!")));
|
||||
hasErrors = true;
|
||||
}
|
||||
|
||||
|
||||
bool transaction_finalize_run = false;
|
||||
bool transaction_finalize_result = false;
|
||||
auto transactions_to_sign = pt->getTransactionsUserMustSign(account_user);
|
||||
|
||||
//Poco::AutoPtr<controller::PendingTask> pending_task;
|
||||
model::gradido::Transaction* transaction = nullptr;
|
||||
Poco::AutoPtr<model::gradido::TransactionBody> transaction_body;
|
||||
|
||||
if(!form.empty())
|
||||
{
|
||||
transaction = dynamic_cast<model::gradido::Transaction*>(transactions_to_sign[0].get());
|
||||
transaction_body = transaction->getTransactionBody();
|
||||
|
||||
if(!form.empty()) {
|
||||
auto ok = form.get("ok", "");
|
||||
auto abort = form.get("abort", "");
|
||||
@ -116,25 +140,171 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
breakCount++;
|
||||
Poco::Thread::sleep(10);
|
||||
}*/
|
||||
auto lastExternReferer = mSession->getLastReferer();
|
||||
//lastExternReferer = "";
|
||||
if(lastExternReferer != "" && lastExternReferer.find("transaction-send-coins") == std::string::npos) {
|
||||
//printf("last extern referer: %s\n", lastExternReferer.data());
|
||||
response.redirect(lastExternReferer);
|
||||
auto pending_task_id_string = form.get("pending-task-id", "");
|
||||
int pending_task_id = 0;
|
||||
if(DataTypeConverter::NUMBER_PARSE_OKAY == DataTypeConverter::strToInt(pending_task_id_string, pending_task_id))
|
||||
{
|
||||
// make sure we have the correct transaction
|
||||
transaction = nullptr;
|
||||
printf("transaction_body isNull: %d\n", transaction_body.isNull());
|
||||
transaction_body.assign(nullptr);
|
||||
for(auto it = transactions_to_sign.begin(); it != transactions_to_sign.end(); it++)
|
||||
{
|
||||
if((*it)->getModel()->getID() == pending_task_id) {
|
||||
transaction = dynamic_cast<model::gradido::Transaction*>(it->get());
|
||||
transaction_body = transaction->getTransactionBody();
|
||||
printf("set new transaction and transaction_body\n");
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(abort != "")
|
||||
/*
|
||||
auto ok = form.get("ok", "");
|
||||
auto abort = form.get("abort", "");
|
||||
auto skip = form.get("skip", "");
|
||||
auto skip_count_str = form.get("skip-count", "0");
|
||||
auto pending_task_id_string = form.get("pending-task-id", "");
|
||||
DataTypeConverter::strToInt(skip_count_str, skip_count);
|
||||
|
||||
if(DataTypeConverter::NUMBER_PARSE_OKAY == DataTypeConverter::strToInt(pending_task_id_string, pending_task_id))
|
||||
{
|
||||
// load transaction from pending task manager
|
||||
pending_task = pt->getPendingTask(pending_task_id);
|
||||
if(!pending_task.isNull() && pending_task->getModel()->isGradidoTransaction())
|
||||
*/
|
||||
{
|
||||
transaction = dynamic_cast<model::gradido::Transaction*>(pending_task.get());
|
||||
if(transaction->hasSigned(account_user)) {
|
||||
transaction = nullptr;
|
||||
} else {
|
||||
transaction_body = transaction->getTransactionBody();
|
||||
}
|
||||
|
||||
if(abort != "")
|
||||
{
|
||||
//mSession->finalizeTransaction(false, true);
|
||||
//
|
||||
if(transaction && transaction->getModel()->getUserId() == user_model->getID())
|
||||
{
|
||||
transaction->deleteFromDB();
|
||||
transaction = nullptr;
|
||||
}
|
||||
}
|
||||
else if(ok != "")
|
||||
{
|
||||
if(!account_user->hasPassword()) {
|
||||
auto pwd = form.get("sign-password", "");
|
||||
auto loginResult = account_user->login(pwd);
|
||||
switch(loginResult) {
|
||||
case 0:
|
||||
addError(new Error(gettext("Passwort"), gettext("Das Passwort stimmt nicht. Bitte verwende dein Passwort von der Registrierung")));
|
||||
hasErrors = true;
|
||||
break;
|
||||
case -1:
|
||||
case -2:
|
||||
addError(new Error(gettext("Passwort"), gettext("Gespeicherte Daten sind korrupt!")));
|
||||
hasErrors = true;
|
||||
state = PAGE_USER_DATA_CORRUPTED;
|
||||
enableSign = false;
|
||||
break;
|
||||
case -3:
|
||||
addError(new Error(gettext("Passwort"), gettext("Passwortprüfung läuft schon, bitte versuche es in 1-2 Minuten erneut.")));
|
||||
hasErrors = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(!hasErrors) {
|
||||
//mSession->finalizeTransaction(true, false);
|
||||
if(transaction && transaction->sign(account_user)) {
|
||||
transaction = nullptr;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if(skip != "")
|
||||
{
|
||||
skip_count++;
|
||||
transaction = nullptr;
|
||||
}
|
||||
} else {
|
||||
addError(new Error(gettext("Input Error"), gettext("Task no found")));
|
||||
}
|
||||
} else {
|
||||
response.redirect(ServerConfig::g_php_serverPath + "state-balances/overview");
|
||||
addError(new Error(gettext("Form Error"), gettext("error with field")));
|
||||
}
|
||||
}
|
||||
|
||||
auto transactions_user_must_sign = pt->getTransactionsUserMustSign(account_user);
|
||||
std::vector<Poco::AutoPtr<controller::PendingTask>> transactions_someone_must_sign;
|
||||
// TODO: work with community server roles
|
||||
if(user_model->getRole() == model::table::ROLE_ADMIN) {
|
||||
transactions_someone_must_sign = pt->getTransactionSomeoneMustSign(account_user);
|
||||
}
|
||||
std::vector<Poco::AutoPtr<controller::PendingTask>> transactions_to_sign;
|
||||
bool transaction_removeable = false;
|
||||
int transaction_to_sign_index = 0;
|
||||
if(!transaction)
|
||||
{
|
||||
if(transactions_user_must_sign.size() > skip_count) {
|
||||
transactions_to_sign = transactions_user_must_sign;
|
||||
transaction_to_sign_index = skip_count;
|
||||
} else if(transactions_someone_must_sign.size() > (skip_count - transactions_user_must_sign.size())) {
|
||||
transactions_to_sign = transactions_someone_must_sign;
|
||||
transaction_to_sign_index = skip_count - transactions_user_must_sign.size();
|
||||
}
|
||||
|
||||
if(transactions_to_sign.size() > transaction_to_sign_index)
|
||||
{
|
||||
transaction = dynamic_cast<model::gradido::Transaction*>(transactions_to_sign[transaction_to_sign_index].get());
|
||||
transaction_body = transaction->getTransactionBody();
|
||||
// user can only delete there own transactions
|
||||
// TODO: Auto timeout for community transactions
|
||||
if(transaction->getModel()->getUserId() == user_model->getID()) {
|
||||
transaction_removeable = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
size_t sumTransactions = transactions_user_must_sign.size() + transactions_someone_must_sign.size();
|
||||
if(sumTransactions == 0)
|
||||
{
|
||||
auto lastExternReferer = mSession->getLastReferer();
|
||||
auto callerUri = mSession->getCallerUri();
|
||||
//lastExternReferer = "";
|
||||
account_user->reload();
|
||||
if(callerUri != "") {
|
||||
response.redirect(callerUri);
|
||||
} else if(lastExternReferer != "" && lastExternReferer.find("transaction-send-coins") == std::string::npos) {
|
||||
response.redirect(lastExternReferer);
|
||||
} else if(!account_user->getModel()->getGroupId()) {
|
||||
response.redirect(getBaseUrl() + "/userUpdateGroup");
|
||||
} else {
|
||||
response.redirect(account_user->getGroupBaseUrl() + "/state-balances/overview");
|
||||
}
|
||||
return;
|
||||
}
|
||||
auto processingTransaction = mSession->getNextReadyTransaction(¬ReadyTransactions);
|
||||
if(sumTransactions > 0) {
|
||||
|
||||
if(transactions_user_must_sign.size() > 0)
|
||||
{
|
||||
enableLogout = false;
|
||||
}
|
||||
if(PAGE_NO_TRANSACTIONS == state && !processingTransaction.isNull()) {
|
||||
auto transactionType = processingTransaction->getType();
|
||||
if(PAGE_NO_TRANSACTIONS == state && transaction && !transaction_body.isNull())
|
||||
{
|
||||
auto transactionType = transaction_body->getType();
|
||||
memo = transaction_body->getMemo();
|
||||
switch(transactionType) {
|
||||
case TRANSACTION_CREATION: state = PAGE_TRANSACTION_CREATION; break;
|
||||
case TRANSACTION_TRANSFER: state = PAGE_TRANSACTION_TRANSFER; break;
|
||||
case model::gradido::TRANSACTION_CREATION: state = PAGE_TRANSACTION_CREATION; break;
|
||||
case model::gradido::TRANSACTION_TRANSFER: state = PAGE_TRANSACTION_TRANSFER; break;
|
||||
case model::gradido::TRANSACTION_GROUP_MEMBER_UPDATE:
|
||||
state = PAGE_TRANSACTION_GROUP_ADD_MEMBER;
|
||||
//community_server_base_path
|
||||
break;
|
||||
}
|
||||
if(model::gradido::TRANSACTION_GROUP_MEMBER_UPDATE != transactionType)
|
||||
{
|
||||
if(!user_model->isEmailChecked()) {
|
||||
addError(new Error(gettext("E-Mail Aktivierung"), gettext("E-Mail wurde noch nicht aktiviert, du kannst leider noch keine Transaktionen ausführen!")));
|
||||
hasErrors = true;
|
||||
enableSign = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -156,6 +326,7 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << ( pageName );
|
||||
responseStream << "</title>\n";
|
||||
responseStream << " <link href=\"";
|
||||
/*
|
||||
#line 8 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "favicon.ico\" type=\"image/x-icon\" rel=\"icon\" />\n";
|
||||
@ -170,7 +341,22 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << " <script src=\"";
|
||||
#line 11 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "js/basic.js\"></script>\n";
|
||||
*/
|
||||
#line 8 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( community_server_base_path );
|
||||
responseStream << "/favicon.ico\" type=\"image/x-icon\" rel=\"icon\" />\n";
|
||||
responseStream << " <link href=\"";
|
||||
#line 9 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( community_server_base_path );
|
||||
responseStream << "/favicon.ico\" type=\"image/x-icon\" rel=\"shortcut icon\" />\n";
|
||||
responseStream << " <link rel=\"stylesheet\" href=\"";
|
||||
#line 10 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( community_server_base_path );
|
||||
responseStream << "/css/main.css\" />\n";
|
||||
responseStream << " <script src=\"";
|
||||
#line 11 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( community_server_base_path );
|
||||
responseStream << "/js/basic.js\"></script>\n";
|
||||
responseStream << "</head>\n";
|
||||
responseStream << "\n";
|
||||
responseStream << "<body>\n";
|
||||
@ -179,6 +365,7 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"sidebar1 nav-menu initial\">\n";
|
||||
responseStream << " <a href=\"";
|
||||
/*
|
||||
#line 19 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "\">\n";
|
||||
@ -194,10 +381,27 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << " <img src=\"";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_schrift_half.png\" class=\"logo big visible\" alt=\"Logo\">\n";
|
||||
*/
|
||||
#line 19 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( community_server_base_path );
|
||||
responseStream << "\">\n";
|
||||
responseStream << " <picture class=\"logo big visible\">\n";
|
||||
responseStream << " <source srcset=\"";
|
||||
#line 21 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( community_server_base_path );
|
||||
responseStream << "/img/logo_schrift_half.webp\" type=\"image/webp\">\n";
|
||||
responseStream << " <source srcset=\"";
|
||||
#line 22 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( community_server_base_path );
|
||||
responseStream << "/img/logo_schrift_half.png\" type=\"image/png\">\n";
|
||||
responseStream << " <img src=\"";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( community_server_base_path );
|
||||
responseStream << "/img/logo_schrift_half.png\" class=\"logo big visible\" alt=\"Logo\">\n";
|
||||
responseStream << " </picture>\n";
|
||||
responseStream << " <picture class=\"logo small\">\n";
|
||||
responseStream << " <source srcset=\"";
|
||||
/*
|
||||
#line 26 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_half.webp\" type=\"image/webp\">\n";
|
||||
@ -208,7 +412,18 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << " <img src=\"";
|
||||
#line 28 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_half.png\" class=\"logo small\" alt=\"Logo\">\n";
|
||||
*/
|
||||
#line 26 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( community_server_base_path );
|
||||
responseStream << "/img/logo_half.webp\" type=\"image/webp\">\n";
|
||||
responseStream << " <source srcset=\"";
|
||||
#line 27 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( community_server_base_path );
|
||||
responseStream << "/img/logo_half.png\" type=\"image/png\">\n";
|
||||
responseStream << " <img src=\"";
|
||||
#line 28 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( community_server_base_path );
|
||||
responseStream << "/img/logo_half.png\" class=\"logo small\" alt=\"Logo\">\n";
|
||||
responseStream << " </picture>\n";
|
||||
responseStream << " </a>\n";
|
||||
responseStream << " <div>\n";
|
||||
@ -222,10 +437,13 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << " <ul>\n";
|
||||
responseStream << " <li><a href=\"";
|
||||
#line 37 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "state-balances/overview\" class=\"\"><i class=\"material-icons-outlined nav-icon \" title=\"Kontoübersicht ( ";
|
||||
#line 37 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( TransactionBase::amountToString(userBalance) );
|
||||
//responseStream << ( ServerConfig::g_php_serverPath );
|
||||
#line 37 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( community_server_base_path );
|
||||
responseStream << "/state-balances/overview\" class=\"\"><i class=\"material-icons-outlined nav-icon \" title=\"Kontoübersicht ( ";
|
||||
#line 37 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( model::gradido::TransactionBase::amountToString(userBalance) );
|
||||
// responseStream << ( TransactionBase::amountToString(userBalance) );
|
||||
responseStream << " GDD )\">account_balance_wallet</i><span\n";
|
||||
responseStream << " class=\"link-title\">Kontoübersicht ( ";
|
||||
#line 38 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
@ -233,12 +451,19 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << " GDD )</span></a></li>\n";
|
||||
responseStream << " <li><a href=\"";
|
||||
#line 39 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "dashboard/index\" class=\"\"><i class=\"material-icons-outlined nav-icon \" title=\"Startseite\">home</i><span\n";
|
||||
//responseStream << ( ServerConfig::g_php_serverPath );
|
||||
//responseStream << "dashboard/index\" class=\"\"><i class=\"material-icons-outlined nav-icon \" title=\"Startseite\">home</i><span\n";
|
||||
//responseStream << " class=\"link-title\">Startseite</span></a></li>\n";
|
||||
//responseStream << " <li class=' selected'><a href=\"";
|
||||
#line 41 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
//responseStream << ( ServerConfig::g_php_serverPath );
|
||||
#line 39 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( community_server_base_path );
|
||||
responseStream << "/dashboard/index\" class=\"\"><i class=\"material-icons-outlined nav-icon \" title=\"Startseite\">home</i><span\n";
|
||||
responseStream << " class=\"link-title\">Startseite</span></a></li>\n";
|
||||
responseStream << " <li class=' selected'><a href=\"";
|
||||
#line 41 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
#line 41 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( community_server_base_path );
|
||||
responseStream << "transaction-send-coins/create\" class=\"\"><i class=\"material-icons-outlined nav-icon \"\n";
|
||||
responseStream << " title=\"Überweisung\">account_balance</i><span class=\"link-title\">Überweisung</span></a></li>\n";
|
||||
responseStream << " <li><a href=\"https://elopage.com/s/gradido/sign_in\" class=\"\" target=\"_blank\"><i class=\"material-icons-outlined nav-icon \"\n";
|
||||
@ -249,7 +474,10 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << " <div class=\"content\">\n";
|
||||
responseStream << " <div class=\"nav-content\">\n";
|
||||
responseStream << " <ul class='nav-content-list'>\n";
|
||||
responseStream << " <li><a href=\"/\" class=\"\"><span class=\"link-title\">Startseite</span></a></li>\n";
|
||||
responseStream << " <li><a href=\"";
|
||||
#line 51 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( community_server_base_path );
|
||||
responseStream << "/\" class=\"\"><span class=\"link-title\">Startseite</span></a></li>\n";
|
||||
responseStream << " <li class='nav-content-separator'>-</li>\n";
|
||||
responseStream << " <li class='selected'><span class=\"link-title\">";
|
||||
#line 53 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
@ -259,6 +487,7 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << " </div>";
|
||||
// end include header_navi_chr.cpsp
|
||||
responseStream << "\n";
|
||||
/*
|
||||
#line 126 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(transaction_finalize_run) { responseStream << "\n";
|
||||
responseStream << "<div class=\"col-md-10 equel-grid mb-3\">\n";
|
||||
@ -339,196 +568,368 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
} responseStream << "\n";
|
||||
responseStream << " ";
|
||||
#line 154 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
*/
|
||||
#line 192 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"´
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "<div class=\"col-md-10 equel-grid mb-3\">\n";
|
||||
responseStream << "\t<small class=\"text-gray d-block mt-3\">\n";
|
||||
responseStream << "\t";
|
||||
#line 212 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(sumTransactions == 0) { responseStream << "\n";
|
||||
responseStream << "\t\t";
|
||||
#line 213 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Es gibt zurzeit keine Transaktionen zum bestätigen") );
|
||||
responseStream << "\n";
|
||||
responseStream << " ";
|
||||
#line 214 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else { responseStream << "\t\n";
|
||||
responseStream << "\t\t<p>";
|
||||
#line 215 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( sumTransactions );
|
||||
responseStream << " ";
|
||||
#line 215 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Transaktionen warten darauf bestätigt zu werden.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 216 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(skip_count > 0) { responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>";
|
||||
#line 217 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( skip_count );
|
||||
responseStream << " ";
|
||||
#line 217 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Transaktionen übersprungen.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 218 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 219 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t</small>\n";
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "<div class=\"content-container main-container\">\n";
|
||||
responseStream << "\t<div class=\"action-form\">\n";
|
||||
responseStream << "\t\t<p class=\"form-header\">";
|
||||
#line 159 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 224 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Transaktion Unterzeichnen") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t<div class=\"form-content\">\n";
|
||||
responseStream << "\t\t";
|
||||
#line 161 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 226 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(state == PAGE_TRANSACTION_TRANSFER) {
|
||||
auto transferTransaction = processingTransaction->getTransferTransaction();
|
||||
memo = transferTransaction->getMemo();
|
||||
auto transferTransaction = transaction_body->getTransferTransaction();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>";
|
||||
#line 165 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 229 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Überweisung") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t<div class=\"content-table\">\n";
|
||||
responseStream << "\t\t\t <div class=\"content-row content-row-header\">\n";
|
||||
responseStream << "\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 168 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 232 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Konto") );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 169 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 233 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Gradido") );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t ";
|
||||
#line 171 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 235 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
for(int i = 0; i < transferTransaction->getKontoTableSize(); i++) { responseStream << "\t\t\t\t\t\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 172 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 236 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if((i+1) % 2 == 0) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<div class=\"content-row content-row\">\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 174 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 238 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<div class=\"content-row content-row-bg\">\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 176 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 240 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 177 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 241 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( transferTransaction->getKontoNameCell(i) );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 178 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 242 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(((i+1) % 2) == 0 && transferTransaction->getTargetGroupAlias() != "") { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t (";
|
||||
#line 243 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( transferTransaction->getTargetGroupAlias() );
|
||||
responseStream << ")\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 244 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 245 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( transferTransaction->getAmountCell(i) );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t ";
|
||||
#line 180 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 247 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t ";
|
||||
#line 182 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 249 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else if(PAGE_TRANSACTION_CREATION == state) {
|
||||
auto creationTransaction = processingTransaction->getCreationTransaction();
|
||||
auto creationTransaction = transaction_body->getCreationTransaction();
|
||||
auto transactionUser = creationTransaction->getUser();
|
||||
memo = creationTransaction->getMemo();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<p>";
|
||||
#line 187 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 253 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Schöpfung") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"content-table\">\n";
|
||||
responseStream << "\t\t\t\t <div class=\"content-row content-row-header\">\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 190 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 256 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Konto") );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 191 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 257 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Zieldatum") );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 192 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 258 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Gradido") );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t <div class=\"content-row content-row-bg\">\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 195 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(transactionUser) { responseStream << "\n";
|
||||
#line 261 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(!transactionUser.isNull()) {
|
||||
auto user_model = transactionUser->getModel();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 196 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( transactionUser->getFirstName() );
|
||||
#line 264 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( user_model->getFirstName() );
|
||||
responseStream << " ";
|
||||
#line 196 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( transactionUser->getLastName() );
|
||||
#line 264 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( user_model->getLastName() );
|
||||
responseStream << " <";
|
||||
#line 196 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( transactionUser->getEmail() );
|
||||
#line 264 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( user_model->getEmail() );
|
||||
responseStream << "></span>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 197 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 265 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<span class=\"content-cell\">0x";
|
||||
#line 198 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 266 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( creationTransaction->getPublicHex() );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 199 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 267 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 200 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 268 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( creationTransaction->getTargetDateString() );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell success-color\">";
|
||||
#line 201 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 269 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( creationTransaction->getAmountString() );
|
||||
responseStream << " GDD</span>\n";
|
||||
responseStream << "\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t ";
|
||||
#line 272 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else if(PAGE_TRANSACTION_GROUP_ADD_MEMBER == state) {
|
||||
auto groupMemberUpdateTransaction = transaction_body->getGroupMemberUpdate();
|
||||
auto groups = controller::Group::load(groupMemberUpdateTransaction->getTargetGroupAlias());
|
||||
Poco::AutoPtr<model::table::Group> group_model;
|
||||
Poco::AutoPtr<controller::User> user;
|
||||
if(groups.size() == 1 && !groups[0].isNull()) group_model = groups[0]->getModel();
|
||||
auto user_id = transaction->getModel()->getUserId();
|
||||
if(user_id == user_model->getID()) {
|
||||
user = account_user;
|
||||
} else {
|
||||
user = controller::User::sload(user_id);
|
||||
}
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t <p>";
|
||||
#line 285 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Benutzer zu einer Gruppe hinzufügen") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t <div class=\"content-table\">\n";
|
||||
responseStream << "\t\t\t\t<p>";
|
||||
#line 287 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(!user.isNull()) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<b>Benutzer:</b> ";
|
||||
#line 288 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( user->getEmailWithNames() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 289 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<b>Account public key:</b> ";
|
||||
#line 290 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( groupMemberUpdateTransaction->getPublicKeyHex() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 291 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 292 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(!group_model.isNull()) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<p><b>";
|
||||
#line 293 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Gruppe") );
|
||||
responseStream << ":</b></p>\n";
|
||||
responseStream << "\t\t\t\t\t<ul>\n";
|
||||
responseStream << "\t\t\t\t\t\t<li>";
|
||||
#line 295 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Name") );
|
||||
responseStream << ": ";
|
||||
#line 295 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( group_model->getName() );
|
||||
responseStream << "</li>\n";
|
||||
responseStream << "\t\t\t\t\t\t<li>";
|
||||
#line 296 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Alias") );
|
||||
responseStream << ": ";
|
||||
#line 296 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( group_model->getAlias() );
|
||||
responseStream << "</li>\n";
|
||||
responseStream << "\t\t\t\t\t\t<li>";
|
||||
#line 297 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Url") );
|
||||
responseStream << ": <a href=\"";
|
||||
#line 297 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( group_model->getUrl() );
|
||||
responseStream << "/pages/visitor\" target=\"_blank\">";
|
||||
#line 297 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( group_model->getUrl() );
|
||||
responseStream << "</a></li>\n";
|
||||
responseStream << "\t\t\t\t\t\t<li>";
|
||||
#line 298 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( group_model->getDescription() );
|
||||
responseStream << "</li>\n";
|
||||
responseStream << "\t\t\t\t\t</ul>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 300 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 301 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Unbekannte Gruppe") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 302 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 303 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Es haben bereits ") );
|
||||
#line 303 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( std::to_string(transaction->getSignCount()) );
|
||||
#line 303 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext(" unterzeichnet") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t \n";
|
||||
responseStream << "\t\t\t ";
|
||||
#line 204 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 306 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else if(PAGE_USER_DATA_CORRUPTED == state) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<p class=\"alert-color\">";
|
||||
#line 205 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 307 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Es gibt ein Problem mit deinen gespeicherten Daten, bitte wende dich an den"));
|
||||
responseStream << "<a href=\"mailto:";
|
||||
#line 205 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 307 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( em->getAdminReceiver());
|
||||
responseStream << "?subject=Corrupt User Data&body=Hallo Dario,%0D%0A%0D%0Ameine Benutzer Daten sind korrupt.%0D%0Akannst du das prüfen?%0D%0A%0D%0AMit freundlichen Grüßen%0D%0A\">";
|
||||
#line 205 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 307 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << (gettext("Support") );
|
||||
responseStream << "</a></p>\n";
|
||||
responseStream << "\t\t\t ";
|
||||
#line 206 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 308 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t<div class=\"content-table\">\n";
|
||||
responseStream << "\t\t\t <div class=\"content-row content-row-header\">\n";
|
||||
responseStream << "\t\t\t\t<span class=\"content-cell\">Aktives Konto</span>\n";
|
||||
responseStream << "\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t <div class=\"content-row\">\n";
|
||||
responseStream << "\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 212 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << "\t\t\t ";
|
||||
#line 309 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(PAGE_NO_TRANSACTIONS == state) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<a href=\"";
|
||||
#line 310 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "\">";
|
||||
#line 310 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Zurück") );
|
||||
responseStream << "</a>\n";
|
||||
responseStream << "\t\t\t ";
|
||||
#line 311 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<div class=\"content-table\">\n";
|
||||
responseStream << "\t\t\t\t <div class=\"content-row content-row-header\">\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">Aktives Konto</span>\n";
|
||||
responseStream << "\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t <div class=\"content-row\">\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 317 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( user_model->getNameWithEmailHtml() );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t<div class=\"content-table\">\n";
|
||||
responseStream << "\t\t\t <div class=\"content-row content-row-header\">\n";
|
||||
responseStream << "\t\t\t\t<span class=\"content-cell\">Verwendungszweck</span>\n";
|
||||
responseStream << "\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t <div class=\"content-row content-row-bg\">\n";
|
||||
responseStream << "\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 220 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << "\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"content-table\">\n";
|
||||
responseStream << "\t\t\t\t <div class=\"content-row content-row-header\">\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">Verwendungszweck</span>\n";
|
||||
responseStream << "\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t <div class=\"content-row content-row-bg\">\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 325 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( memo );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t<form>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 224 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << "\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t<form>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 329 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(transaction) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<input type=\"hidden\" name=\"pending-task-id\" value=\"";
|
||||
#line 330 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( transaction->getModel()->getID() );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 331 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<input type=\"hidden\" name=\"skip-count\" value=\"";
|
||||
#line 332 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( skip_count );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 333 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(!account_user->hasPassword()) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t <div class=\"form-group\">\n";
|
||||
responseStream << "\t\t\t\t\t <label for=\"sign-password\">";
|
||||
#line 226 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << "\t\t\t\t\t <div class=\"form-group\">\n";
|
||||
responseStream << "\t\t\t\t\t\t <label for=\"sign-password\">";
|
||||
#line 335 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Ich brauche nochmal dein Passwort") );
|
||||
responseStream << "</label>\n";
|
||||
responseStream << "\t\t\t\t\t <input type=\"password\" class=\"form-control\" id=\"sign-password\" name=\"sign-password\" placeholder=\"";
|
||||
#line 227 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << "\t\t\t\t\t\t <input type=\"password\" class=\"form-control\" id=\"sign-password\" name=\"sign-password\" placeholder=\"";
|
||||
#line 336 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Passwort") );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 229 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << "\t\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 338 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 230 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(PAGE_USER_DATA_CORRUPTED != state && user_model->isEmailChecked()) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<button type=\"submit\" class=\"form-button\" name=\"ok\" value=\"ok\">\n";
|
||||
responseStream << "\t\t\t\t\t\t<i class=\"material-icons-outlined\">verified_user</i>\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 233 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 339 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(enableSign && !hasErrors) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<button type=\"submit\" class=\"form-button\" name=\"ok\" value=\"ok\">\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<i class=\"material-icons-outlined\">verified_user</i>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t";
|
||||
#line 342 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Transaktion unterzeichnen") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t</button>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 235 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<button type=\"submit\" class=\"form-button button-cancel\" name=\"abort\" value=\"abort\">\n";
|
||||
responseStream << "\t\t\t\t\t<i class=\"material-icons-outlined\">delete</i>\n";
|
||||
responseStream << "\t\t\t\t\t\t</button>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 238 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
#line 344 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 345 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(transaction_removeable) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<button type=\"submit\" class=\"form-button button-cancel\" name=\"abort\" value=\"abort\">\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<i class=\"material-icons-outlined\">delete</i>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t";
|
||||
#line 348 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Transaktion verwerfen") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t</button>\n";
|
||||
@ -541,8 +942,26 @@ void CheckTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << "\t\t\t\t\t</button>\t\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 245 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t</form>\n";
|
||||
responseStream << "\t\t\t\t\t\t</button>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 350 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<button type=\"submit\" class=\"form-button button-cancel\" name=\"skip\" value=\"skip\">\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<i class=\"material-icons-outlined\">debug-step-over</i>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t";
|
||||
#line 353 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Transaktion überspringen") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t</button>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 355 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t</form>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 357 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "</div>\n";
|
||||
|
||||
@ -31,13 +31,16 @@ void DashboardPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::N
|
||||
#line 11 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
|
||||
const char* pageName = "Dashboard";
|
||||
auto user = mSession->getNewUser();
|
||||
auto user_model = user->getModel();
|
||||
//Poco::Net::NameValueCollection cookies;
|
||||
//request.getCookies(cookies);
|
||||
if(!form.empty()) {
|
||||
//form.get("email-verification-code")
|
||||
}
|
||||
auto uri_start = ServerConfig::g_serverPath;//request.serverParams().getServerName();
|
||||
response.redirect(ServerConfig::g_php_serverPath + "/");
|
||||
auto uri_start = getBaseUrl();
|
||||
//response.redirect(ServerConfig::g_php_serverPath);
|
||||
response.redirect(user->getGroupBaseUrl());
|
||||
return;
|
||||
std::ostream& _responseStream = response.send();
|
||||
Poco::DeflatingOutputStream _gzipStream(_responseStream, Poco::DeflatingStreamBuf::STREAM_GZIP, 1);
|
||||
@ -109,34 +112,34 @@ void DashboardPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::N
|
||||
responseStream << "\n";
|
||||
responseStream << "<div class=\"grd_container\">\n";
|
||||
responseStream << "\t<h1>Willkommen ";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
responseStream << ( mSession->getUser()->getFirstName() );
|
||||
#line 26 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
responseStream << ( user_model->getFirstName() );
|
||||
responseStream << " ";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
responseStream << ( mSession->getUser()->getLastName() );
|
||||
#line 26 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
responseStream << ( user_model->getLastName() );
|
||||
responseStream << "</h1>\n";
|
||||
responseStream << "\t";
|
||||
#line 24 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
#line 27 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
responseStream << ( mSession->getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t<h3>Status</h3>\n";
|
||||
responseStream << "\t<p>";
|
||||
#line 26 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
#line 29 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
responseStream << ( mSession->getSessionStateString() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t";
|
||||
#line 27 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
#line 30 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
if(mSession->getSessionState() == SESSION_STATE_EMAIL_VERIFICATION_SEND) { responseStream << "\n";
|
||||
responseStream << "\t<p>Verification Code E-Mail wurde erfolgreich an dich verschickt, bitte schaue auch in dein Spam-Verzeichnis nach wenn du sie nicht findest und klicke auf den Link den du dort findest oder kopiere den Code hier her:</p>\n";
|
||||
responseStream << "\t<form method=\"GET\" action=\"";
|
||||
#line 29 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
#line 32 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
responseStream << ( uri_start );
|
||||
responseStream << "/checkEmail\">\n";
|
||||
responseStream << "\t\t<input type=\"number\" name=\"email-verification-code\">\n";
|
||||
responseStream << "\t\t<input class=\"grd-form-bn-succeed grd_clickable\" type=\"submit\" value=\"Überprüfe Code\">\n";
|
||||
responseStream << "\t</form>\n";
|
||||
responseStream << "\t";
|
||||
#line 33 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
#line 36 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
} else if(mSession->getSessionState() == SESSION_STATE_EMAIL_VERIFICATION_WRITTEN) { responseStream << "\n";
|
||||
responseStream << "\t<p>Hast du schon eine E-Mail mit einem Verification Code erhalten? Wenn ja kannst du ihn hier hinein kopieren:</p>\n";
|
||||
responseStream << "\t<form method=\"GET\" action=\"checkEmail\">\n";
|
||||
@ -144,14 +147,14 @@ void DashboardPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::N
|
||||
responseStream << "\t\t<input class=\"grd-form-bn-succeed grd_clickable\" type=\"submit\" value=\"Überprüfe Code\">\n";
|
||||
responseStream << "\t</form>\n";
|
||||
responseStream << "\t";
|
||||
#line 39 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
#line 42 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t<a class=\"grd-form-bn\" href=\"";
|
||||
#line 40 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
#line 43 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
responseStream << ( uri_start );
|
||||
responseStream << "/logout\">Abmelden</a>\n";
|
||||
responseStream << "\t<a class=\"grd-form-bn\" href=\"";
|
||||
#line 41 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
#line 44 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
responseStream << ( uri_start );
|
||||
responseStream << "/user_delete\">Account löschen</a>\n";
|
||||
responseStream << "</div>\n";
|
||||
@ -159,10 +162,13 @@ void DashboardPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::N
|
||||
responseStream << "\t<div class=\"grd-left-bar-section\">\n";
|
||||
responseStream << "\t\t<ul class=\"grd-no-style\">\n";
|
||||
responseStream << "\t\t <li><a href=\"";
|
||||
#line 46 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
#line 49 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
responseStream << ( user->getGroupBaseUrl() );
|
||||
responseStream << "\" class=\"grd-nav-bn\">Startseite</a>\n";
|
||||
responseStream << "\t\t <li><a href=\"./account/logout\" class=\"grd-nav-bn\">Logout</a></li>\n";
|
||||
responseStream << "\t\t <li><a href=\"";
|
||||
#line 50 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
responseStream << ( uri_start );
|
||||
responseStream << "/logout\" class=\"grd-nav-bn\">Logout</a></li>\n";
|
||||
responseStream << "\t\t</ul>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "</nav>\n";
|
||||
|
||||
@ -8,7 +8,7 @@
|
||||
#line 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
#include "../Crypto/KeyPair.h"
|
||||
#include "../Crypto/Passphrase.h"
|
||||
|
||||
struct WordChecked {
|
||||
WordChecked() : index(0), bSet(false) {};
|
||||
@ -69,7 +69,7 @@ void DebugMnemonicPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poc
|
||||
{
|
||||
if("" != form.get("check_word", ""))
|
||||
{
|
||||
auto word = KeyPair::filterPassphrase(form.get("word", ""));
|
||||
auto word = Passphrase::filter(form.get("word", ""));
|
||||
if("" != word) {
|
||||
checkedWord.bSet = true;
|
||||
checkedWord.word = word;
|
||||
|
||||
@ -7,7 +7,8 @@
|
||||
|
||||
#line 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
|
||||
#include "../Crypto/KeyPair.h"
|
||||
#include "../Crypto/KeyPairEd25519.h"
|
||||
#include "../controller/User.h"
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
@ -27,44 +28,34 @@ void DebugPassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, P
|
||||
if (_compressResponse) response.set("Content-Encoding", "gzip");
|
||||
|
||||
Poco::Net::HTMLForm form(request, request.stream());
|
||||
#line 10 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
#line 11 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
|
||||
const char* pageName = "Debug Passphrase";
|
||||
auto mm = MemoryManager::getInstance();
|
||||
KeyPair keys;
|
||||
std::string privKeyHex = "";
|
||||
|
||||
KeyPairEd25519* keys = nullptr;
|
||||
std::string privKeyCryptedHex = "";
|
||||
User::passwordHashed pwdHashed = 0;
|
||||
Poco::UInt64 pwdHashed = 0;
|
||||
Poco::AutoPtr<controller::User> existingUser;
|
||||
if(!form.empty()) {
|
||||
auto passphrase = KeyPair::filterPassphrase(form.get("passphrase", ""));
|
||||
Mnemonic* wordSource = nullptr;
|
||||
if(!User::validatePassphrase(passphrase, &wordSource)) {
|
||||
auto passphrase_string = form.get("passphrase", "");
|
||||
auto wordSource = Passphrase::detectMnemonic(passphrase_string);
|
||||
if(!wordSource) {
|
||||
addError(new Error("debug Passphrase", "invalid passphrase"), false);
|
||||
} else {
|
||||
keys.generateFromPassphrase(passphrase.data(), wordSource);
|
||||
keys = KeyPairEd25519::create(Passphrase::create(passphrase_string, wordSource));
|
||||
}
|
||||
auto email = form.get("email", "");
|
||||
auto newUser = new User(email.data(), "first_name", "last_name");
|
||||
|
||||
|
||||
if(email != "") {
|
||||
existingUser = controller::User::create();
|
||||
existingUser->load(email);
|
||||
}
|
||||
newUser->validatePwd(form.get("password", ""), this);
|
||||
pwdHashed = newUser->getPwdHashed();
|
||||
auto privKey = keys.getPrivateKey();
|
||||
if(privKey) {
|
||||
privKeyHex = KeyPair::getHex(privKey);
|
||||
auto privKeyCrypted = newUser->encrypt(privKey);
|
||||
if(privKeyCrypted) {
|
||||
privKeyCryptedHex = KeyPair::getHex(privKeyCrypted);
|
||||
mm->releaseMemory(privKeyCrypted);
|
||||
if(1 == existingUser->load(email)) {
|
||||
auto user_model = existingUser->getModel();
|
||||
pwdHashed = user_model->getPasswordHashed();
|
||||
if(user_model->hasPrivateKeyEncrypted()) {
|
||||
privKeyCryptedHex = user_model->getPrivateKeyEncryptedHex();
|
||||
}
|
||||
}
|
||||
}
|
||||
getErrors(newUser);
|
||||
delete newUser;
|
||||
}
|
||||
|
||||
|
||||
@ -139,7 +130,7 @@ void DebugPassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, P
|
||||
responseStream << "<div class=\"grd_container\">\n";
|
||||
responseStream << "\t<h1>Debug Passphrase</h1>\n";
|
||||
responseStream << "\t";
|
||||
#line 53 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
#line 44 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t<form method=\"POST\">\n";
|
||||
@ -148,51 +139,51 @@ void DebugPassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, P
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<label for=\"email\">E-Mail</label>\n";
|
||||
responseStream << "\t\t\t\t<input id=\"email\" type=\"email\" name=\"email\" value=\"";
|
||||
#line 59 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
#line 50 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("email") : "" );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<label for=\"password\">Passwort</label>\n";
|
||||
responseStream << "\t\t\t\t<input id=\"password\" type=\"password\" name=\"password\"/>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t<textarea style=\"width:100%;height:100px\" name=\"passphrase\">";
|
||||
#line 65 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
#line 52 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("passphrase", "") : "" );
|
||||
responseStream << "</textarea>\n";
|
||||
responseStream << "\t\t</fieldset>\n";
|
||||
responseStream << "\t\t<input class=\"grd-form-bn grd-form-bn-succeed\" type=\"submit\" name=\"submit\" value=\"Debug\">\n";
|
||||
responseStream << "\t</form>\n";
|
||||
responseStream << "\t<p>Public key:<br>";
|
||||
#line 69 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
responseStream << ( keys.getPubkeyHex() );
|
||||
responseStream << "\t";
|
||||
#line 56 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
if(keys) { responseStream << "\n";
|
||||
responseStream << "\t\t<p>Public key:<br>";
|
||||
#line 57 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
responseStream << ( keys->getPublicKeyHex() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t<p>Private Key:<br>";
|
||||
#line 70 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
responseStream << ( privKeyHex );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t<p>Passwort Hashed:<br>";
|
||||
#line 71 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
responseStream << ( std::to_string(pwdHashed) );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t<p>Private key crypted:<br>";
|
||||
#line 72 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
responseStream << "\t\t<p>Private key crypted:<br>";
|
||||
#line 58 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
responseStream << ( privKeyCryptedHex );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t";
|
||||
#line 73 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
if(!existingUser.isNull()) {
|
||||
auto userModel = existingUser->getModel();
|
||||
auto dbPubkey = userModel->getPublicKey();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t<p>user Public: <br>";
|
||||
#line 77 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
responseStream << ( KeyPair::getHex(dbPubkey, ed25519_pubkey_SIZE) );
|
||||
responseStream << "\t\t<p>Passwort Hashed:<br>";
|
||||
#line 59 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
responseStream << ( std::to_string(pwdHashed) );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 60 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
if(!existingUser.isNull()) {
|
||||
auto userModel = existingUser->getModel();
|
||||
auto dbPubkey = userModel->getPublicKey();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>user Public: <br>";
|
||||
#line 64 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
responseStream << ( keys->getPublicKeyHex() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 65 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 78 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
#line 66 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</div>\n";
|
||||
#line 68 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.cpsp"
|
||||
if(keys) delete keys; responseStream << "\n";
|
||||
// begin include footer.cpsp
|
||||
responseStream << " <div class=\"center-bottom\">\n";
|
||||
responseStream << " <p>Copyright © Gradido 2020</p>\n";
|
||||
|
||||
@ -8,10 +8,12 @@
|
||||
#line 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
|
||||
#include "sodium.h"
|
||||
#include "../proto/gradido/GradidoTransaction.pb.h"
|
||||
#include "../proto/gradido/TransactionBody.pb.h"
|
||||
#include "../controller/User.h"
|
||||
#include "../model/TransactionBase.h"
|
||||
#include "../model/TransactionCreation.h"
|
||||
#include "../model/gradido/TransactionBase.h"
|
||||
#include "../model/gradido/TransactionCreation.h"
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
@ -31,10 +33,11 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
if (_compressResponse) response.set("Content-Encoding", "gzip");
|
||||
|
||||
Poco::Net::HTMLForm form(request, request.stream());
|
||||
#line 14 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 16 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
|
||||
const char* pageName = "Decode Transaction";
|
||||
model::messages::gradido::TransactionBody transactionBody;
|
||||
proto::gradido::TransactionBody transactionBody;
|
||||
proto::gradido::GradidoTransaction transaction;
|
||||
bool decoded = false;
|
||||
bool adminUser = false;
|
||||
if(mSession && mSession->getNewUser()) {
|
||||
@ -51,6 +54,7 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
size_t resultingBinSize = 0;
|
||||
size_t base64_size = base64.size();
|
||||
bool encodingValid = false;
|
||||
bool encodedTransaction = false;
|
||||
if (!sodium_base642bin(
|
||||
binBuffer, base64_size,
|
||||
base64.data(), base64_size,
|
||||
@ -63,9 +67,10 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
base64.data(), base64_size,
|
||||
nullptr, &resultingBinSize, nullptr,
|
||||
sodium_base64_VARIANT_URLSAFE_NO_PADDING)) {
|
||||
//encodingValid = true;
|
||||
encodingValid = true;
|
||||
//free(binBuffer);
|
||||
addError(new Error("ProcessingTransaction", "it is maybe a Transaction, but I support only TransactionBodys"), false);
|
||||
//addError(new Error("ProcessingTransaction", "it is maybe a Transaction, but I support only TransactionBodys"), false);
|
||||
encodedTransaction = true;
|
||||
}
|
||||
if(false == encodingValid) {
|
||||
free(binBuffer);
|
||||
@ -73,11 +78,24 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
} else {
|
||||
std::string binString((char*)binBuffer, resultingBinSize);
|
||||
free(binBuffer);
|
||||
|
||||
if (!transactionBody.ParseFromString(binString)) {
|
||||
addError(new Error("ProcessingTransaction", "error creating Transaction from binary Message"), false);
|
||||
if(!encodedTransaction) {
|
||||
|
||||
if (!transactionBody.ParseFromString(binString)) {
|
||||
addError(new Error("ProcessingTransaction", "error creating Transaction Body from binary Message"), false);
|
||||
} else {
|
||||
decoded = true;
|
||||
}
|
||||
} else {
|
||||
decoded = true;
|
||||
|
||||
if(!transaction.ParseFromString(binString)) {
|
||||
addError(new Error("ProcessingTransaction", "error creating Transaction from binary Message"), false);
|
||||
} else {
|
||||
if(!transactionBody.ParseFromString(transaction.body_bytes())) {
|
||||
addError(new Error("ProcessingTransaction", "error creating Transaction Body from Transaction body bytes"), false);
|
||||
} else {
|
||||
decoded = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -158,84 +176,79 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << "<div class=\"grd_container\">\n";
|
||||
responseStream << "\t<h1>Transaktion dekodieren</h1>\n";
|
||||
responseStream << "\t";
|
||||
#line 72 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 90 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t<form method=\"POST\">\n";
|
||||
responseStream << "\t\t<fieldset class=\"grd_container_small\">\n";
|
||||
responseStream << "\t\t\t<legend>Transaktion dekodieren</legend>\n";
|
||||
responseStream << "\t\t\t<textarea style=\"width:100%;height:100px\" name=\"transaction\">";
|
||||
#line 76 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 94 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("transaction", "") : "" );
|
||||
responseStream << "</textarea>\n";
|
||||
responseStream << "\t\t</fieldset>\n";
|
||||
responseStream << "\t\t<input class=\"grd-form-bn grd-form-bn-succeed\" type=\"submit\" name=\"submit\" value=\"Dekodieren\">\n";
|
||||
responseStream << "\t</form>\n";
|
||||
responseStream << "\t";
|
||||
#line 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 98 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
if(decoded) { responseStream << "\n";
|
||||
responseStream << "\t\t<p><b>Verwendungszweck:</b></p>\n";
|
||||
responseStream << "\t\t<p>";
|
||||
#line 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 100 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( transactionBody.memo() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 83 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 101 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
if(transactionBody.has_transfer()) {
|
||||
auto transfer = transactionBody.transfer();
|
||||
char hex[65]; memset(hex, 0, 65);
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t<h3>Transfer</h3>\n";
|
||||
responseStream << "\t\t<b>Sender</b>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 88 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
for(int i = 0; i < transfer.senderamounts_size(); i++) {
|
||||
auto sender = transfer.senderamounts(i);
|
||||
char hex[65]; memset(hex, 0, 65);
|
||||
sodium_bin2hex(hex, 65, (const unsigned char*)sender.ed25519_sender_pubkey().data(), sender.ed25519_sender_pubkey().size());
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>pubkey: ";
|
||||
#line 93 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( hex );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t<p>amount: ";
|
||||
#line 94 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( TransactionBase::amountToString(sender.amount()) );
|
||||
responseStream << " GDD</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 95 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t<b>Receiver</b>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 97 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
for(int i = 0; i < transfer.receiveramounts_size(); i++) {
|
||||
auto receiver = transfer.receiveramounts(i);
|
||||
char hex[65]; memset(hex, 0, 65);
|
||||
sodium_bin2hex(hex, 65, (const unsigned char*)receiver.ed25519_receiver_pubkey().data(), receiver.ed25519_receiver_pubkey().size());
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>pubkey: ";
|
||||
#line 102 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( hex );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t<p>amount: ";
|
||||
#line 103 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( TransactionBase::amountToString(receiver.amount()) );
|
||||
responseStream << " GDD</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 104 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t";
|
||||
responseStream << "\t\t\t";
|
||||
#line 105 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
if(transfer.has_local()) {
|
||||
auto local_transfer = transfer.local();
|
||||
auto sender_pubkey = local_transfer.sender().pubkey();
|
||||
auto receiver_pubkey = local_transfer.receiver();
|
||||
sodium_bin2hex(hex, 65, (const unsigned char*)sender_pubkey.data(), sender_pubkey.size());
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<h3>Local Transfer</h3>\n";
|
||||
responseStream << "\t\t\t\t<b>From: </b>";
|
||||
#line 112 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( hex );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 113 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
sodium_bin2hex(hex, 65, (const unsigned char*)receiver_pubkey.data(), receiver_pubkey.size()); responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<b>To: </b>";
|
||||
#line 114 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( hex );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<b>Amount: </b>";
|
||||
#line 115 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( model::gradido::TransactionBase::amountToString(local_transfer.sender().amount()) );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 116 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<h3>- Not implemented yet (Group Transfer) -</h3>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 118 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t";
|
||||
#line 120 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} else if(transactionBody.has_creation()) {
|
||||
auto creation = transactionBody.creation();
|
||||
|
||||
// model::gradido::TransactionCreation creationObject("", creation);
|
||||
TransactionCreation creationObject("", creation);
|
||||
auto receiver = creation.receiveramount();
|
||||
auto receiver = creation.receiver();
|
||||
char hex[65]; memset(hex, 0, 65);
|
||||
sodium_bin2hex(hex, 65, (const unsigned char*)receiver.ed25519_receiver_pubkey().data(), receiver.ed25519_receiver_pubkey().size());
|
||||
sodium_bin2hex(hex, 65, (const unsigned char*)receiver.pubkey().data(), receiver.pubkey().size());
|
||||
|
||||
Poco::AutoPtr<controller::User> user = nullptr;
|
||||
if(adminUser) {
|
||||
user = controller::User::create();
|
||||
if(!user->load((const unsigned char*)receiver.ed25519_receiver_pubkey().data())) {
|
||||
if(!user->load((const unsigned char*)receiver.pubkey().data())) {
|
||||
user.assign(nullptr);
|
||||
}
|
||||
}
|
||||
@ -243,36 +256,60 @@ void DecodeTransactionPage::handleRequest(Poco::Net::HTTPServerRequest& request,
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t<h3>Creation</h3>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 122 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 139 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
if(!adminUser || user.isNull() || !user->getModel()) { responseStream << "\n";
|
||||
responseStream << "\t\t<p>pubkey: ";
|
||||
#line 123 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 140 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( hex );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 124 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 141 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t<p>user: </p>\n";
|
||||
responseStream << "\t\t<p>";
|
||||
#line 126 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 143 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( user->getModel()->toHTMLString() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 127 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 144 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t<p>amount: ";
|
||||
#line 128 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( TransactionBase::amountToString(receiver.amount()) );
|
||||
#line 145 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( model::gradido::TransactionBase::amountToString(receiver.amount()) );
|
||||
responseStream << " GDD</p>\n";
|
||||
responseStream << "\t\t<p>target date: ";
|
||||
#line 129 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 146 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( creationObject.getTargetDateString() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 130 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 147 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} else if(transactionBody.has_group_member_update()) {
|
||||
auto group_member_update = transactionBody.group_member_update();
|
||||
auto paired_transaction_id = group_member_update.paired_transaction_id();
|
||||
std::string paired_transaction_string = std::to_string(paired_transaction_id.seconds()) + "." + std::to_string(paired_transaction_id.nanos());
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t<h3>Group Member Update</h3>\n";
|
||||
responseStream << "\t\t\t<p><b>Target group alias: </b>";
|
||||
#line 153 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( group_member_update.target_group() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t<p><b>Paired transaction id: </b>";
|
||||
#line 154 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( paired_transaction_string );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t<p><b>Member Update Type: </b>";
|
||||
#line 155 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( proto::gradido::GroupMemberUpdate_MemberUpdateType_Name(group_member_update.member_update_type()) );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t<p><b>User Public Key Hex: </b>";
|
||||
#line 156 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
responseStream << ( DataTypeConverter::pubkeyToHex((const unsigned char*)group_member_update.user_pubkey().data()) );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 157 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 131 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
#line 158 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</div>\n";
|
||||
// begin include footer.cpsp
|
||||
|
||||
@ -321,7 +321,7 @@ int HandleElopageRequestTask::run()
|
||||
mEmail = mRequestData.get("payer[email]", "");
|
||||
mFirstName = mRequestData.get("payer[first_name]", "");
|
||||
mLastName = mRequestData.get("payer[last_name]", "");
|
||||
auto newUser = controller::User::create(mEmail, mFirstName, mLastName);
|
||||
auto newUser = controller::User::create(mEmail, mFirstName, mLastName, 0);
|
||||
|
||||
/* printf("LastName: %s\n", mLastName.data());
|
||||
for (int i = 0; i < mLastName.size(); i++) {
|
||||
|
||||
@ -4,7 +4,7 @@
|
||||
|
||||
#include "PageRequestMessagedHandler.h"
|
||||
#include "../tasks/CPUTask.h"
|
||||
#include "../lib/ErrorList.h"
|
||||
#include "../lib/NotificationList.h"
|
||||
|
||||
#include "Poco/Net/NameValueCollection.h"
|
||||
|
||||
@ -14,7 +14,7 @@ public:
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
class HandleElopageRequestTask : public UniLib::controller::CPUTask, protected ErrorList
|
||||
class HandleElopageRequestTask : public UniLib::controller::CPUTask, protected NotificationList
|
||||
{
|
||||
public:
|
||||
HandleElopageRequestTask(Poco::Net::NameValueCollection& requestData);
|
||||
|
||||
@ -36,9 +36,9 @@ void Error500Page::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
|
||||
|
||||
const char* pageName = "Error";
|
||||
response.setStatusAndReason(Poco::Net::HTTPResponse::HTTP_INTERNAL_SERVER_ERROR);
|
||||
Poco::AutoPtr<User> user;
|
||||
Poco::AutoPtr<controller::User> user;
|
||||
if(mSession) {
|
||||
auto user = mSession->getUser();
|
||||
auto user = mSession->getNewUser();
|
||||
}
|
||||
// begin include header_old.cpsp
|
||||
responseStream << "\n";
|
||||
@ -111,7 +111,7 @@ void Error500Page::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
|
||||
if(mSession) { responseStream << "\n";
|
||||
responseStream << "\t\t";
|
||||
#line 21 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\Error500.cpsp"
|
||||
responseStream << ( mSession->getErrorsHtml() );
|
||||
responseStream << ( mSession->getErrorsHtmlNewFormat() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 22 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\Error500.cpsp"
|
||||
@ -121,7 +121,7 @@ void Error500Page::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
|
||||
if(!user.isNull()) { responseStream << "\n";
|
||||
responseStream << "\t\t";
|
||||
#line 24 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\Error500.cpsp"
|
||||
responseStream << ( user->getErrorsHtml() );
|
||||
responseStream << ( user->getModel()->getErrorsHtmlNewFormat() );
|
||||
responseStream << " \n";
|
||||
responseStream << "\t";
|
||||
#line 25 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\Error500.cpsp"
|
||||
|
||||
@ -1,365 +1,462 @@
|
||||
#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();
|
||||
}
|
||||
#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\\src\\cpsp\\login.cpsp"
|
||||
|
||||
#include "../gettext.h"
|
||||
|
||||
#include "Poco/Net/HTTPCookie.h"
|
||||
#include "Poco/Net/HTTPServerParams.h"
|
||||
#include "Poco/URI.h"
|
||||
#include "Poco/Logger.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../SingletonManager/LanguageManager.h"
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
|
||||
#include "../lib/JsonRequest.h"
|
||||
|
||||
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\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 22 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp"
|
||||
|
||||
const char* pageName = "Login";
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto lm = LanguageManager::getInstance();
|
||||
auto em = ErrorManager::getInstance();
|
||||
|
||||
auto uri = Poco::URI(request.getURI());
|
||||
auto query_parameter = uri.getQueryParameters();
|
||||
std::string caller_uri = "";
|
||||
|
||||
auto lang = chooseLanguage(request);
|
||||
//printf("choose language return: %d\n", lang);
|
||||
auto langCatalog = lm->getFreeCatalog(lang);
|
||||
|
||||
std::string presetEmail("");
|
||||
if(mSession && mSession->getNewUser()) {
|
||||
presetEmail = mSession->getNewUser()->getModel()->getEmail();
|
||||
}
|
||||
/*
|
||||
if(mSession && mSession->getUser()) {
|
||||
presetEmail = mSession->getUser()->getEmail();
|
||||
}
|
||||
*/
|
||||
|
||||
if(!form.empty()) {
|
||||
|
||||
caller_uri = form.get("caller_uri", "");
|
||||
//printf("form.get: caller_uri: %s\n", caller_uri.data());
|
||||
|
||||
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_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();
|
||||
*/
|
||||
|
||||
/*if(mSession) {
|
||||
printf("start with session: %d\n", mSession->getHandle());
|
||||
} else {
|
||||
printf("start without session\n");
|
||||
}*/
|
||||
|
||||
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);
|
||||
|
||||
// TODO: check for valid url
|
||||
if(caller_uri != "") {
|
||||
mSession->setCallerUri(caller_uri);
|
||||
}
|
||||
response.addCookie(mSession->getLoginCookie());
|
||||
} else {
|
||||
langCatalog = mSession->getLanguageCatalog();
|
||||
if(caller_uri == "") {
|
||||
caller_uri = mSession->getCallerUri();
|
||||
}
|
||||
}
|
||||
|
||||
//printf("after session: caller_uri: %s\n", caller_uri.data());
|
||||
|
||||
|
||||
if(email != "" && password != "") {
|
||||
|
||||
UserState 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 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);
|
||||
mSession = nullptr;
|
||||
}
|
||||
sm->deleteLoginCookies(request, response);
|
||||
break;
|
||||
case USER_NO_GROUP:
|
||||
response.redirect(getBaseUrl() + "/userUpdateGroup");
|
||||
return;
|
||||
case USER_NO_PRIVATE_KEY:
|
||||
case USER_COMPLETE:
|
||||
case USER_EMAIL_NOT_ACTIVATED:
|
||||
for(auto it = query_parameter.begin(); it != query_parameter.end(); it++) {
|
||||
printf("query parameter: %s: %s\n", it->first.data(), it->second.data());
|
||||
if(it->first == "caller_uri") {
|
||||
std::string redirect_url = it->second;
|
||||
redirect_url += "?session_id=" + std::to_string(mSession->getHandle());
|
||||
response.redirect(redirect_url);
|
||||
}
|
||||
}
|
||||
auto referer = request.find("Referer");
|
||||
std::string refererString;
|
||||
if (referer != request.end()) {
|
||||
refererString = referer->second;
|
||||
}
|
||||
if(caller_uri != "")
|
||||
{
|
||||
std::string redirect_url = caller_uri;
|
||||
redirect_url += "?session_id=" + std::to_string(mSession->getHandle());
|
||||
response.redirect(redirect_url);
|
||||
}
|
||||
else if(lastExternReferer != "") {
|
||||
printf("redirect to: %s (last extern referer)\n", lastExternReferer.data());
|
||||
response.redirect(lastExternReferer);
|
||||
}
|
||||
else if(refererString != "" && refererString != "/" &&
|
||||
refererString.find("login") == std::string::npos &&
|
||||
refererString.find("logout") == std::string::npos &&
|
||||
refererString.find("user_delete") == std::string::npos &&
|
||||
refererString != getBaseUrl() + request.getURI() &&
|
||||
refererString != user->getGroupBaseUrl() + request.getURI())
|
||||
{
|
||||
std::string uri = request.getURI();
|
||||
printf("request uri: %s, redirect to: %s\n", uri.data(), refererString.data());
|
||||
response.redirect(refererString);
|
||||
}
|
||||
else
|
||||
{
|
||||
if(user->getModel()->getGroupId() != 0) {
|
||||
printf("redirect to: %s/\n", user->getGroupBaseUrl().data());
|
||||
|
||||
auto group = controller::Group::load(user->getModel()->getGroupId());
|
||||
|
||||
response.redirect(user->getGroupBaseUrl() + "/");
|
||||
} else {
|
||||
response.redirect("https://" + request.getHost() + "/");
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
} else if(!langUpdatedByBtn && caller_uri == "") {
|
||||
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);
|
||||
}
|
||||
|
||||
std::string form_action_url = ServerConfig::g_serverPath + "/";
|
||||
if(mSession && !mSession->getNewUser().isNull()) {
|
||||
form_action_url = mSession->getNewUser()->getGroupBaseUrl() + "/";
|
||||
} else {
|
||||
form_action_url = getBaseUrl() + "/";
|
||||
}
|
||||
|
||||
#line 3 "F:\\Gradido\\gradido_login_server\\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\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( pageName );
|
||||
responseStream << "</title>\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 12 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/main.css\">\n";
|
||||
#line 13 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
if(withMaterialIcons) { responseStream << "\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 14 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/materialdesignicons.min.css\">\n";
|
||||
#line 15 "F:\\Gradido\\gradido_login_server\\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\\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\\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\\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\\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 234 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "<!--<input type=\"hidden\" name=\"lang\" value=\"";
|
||||
#line 235 "F:\\Gradido\\gradido_login_server\\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\\src\\cpsp\\flags.cpsp"
|
||||
if(lang != LANG_EN) { responseStream << "class=\"flag-btn\"";
|
||||
#line 3 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\flags.cpsp"
|
||||
}
|
||||
else { responseStream << "class=\"flag-btn\" disabled";
|
||||
#line 4 "F:\\Gradido\\gradido_login_server\\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\\src\\cpsp\\flags.cpsp"
|
||||
if(lang != LANG_DE) { responseStream << "class=\"flag-btn\"";
|
||||
#line 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\flags.cpsp"
|
||||
}
|
||||
else { responseStream << "class=\"flag-btn\" disabled";
|
||||
#line 8 "F:\\Gradido\\gradido_login_server\\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 239 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( form_action_url );
|
||||
responseStream << "\" method=\"POST\">\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" type=\"text\" name=\"login-email\" placeholder=\"";
|
||||
#line 240 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext("E-Mail") );
|
||||
responseStream << "\" value=\"";
|
||||
#line 240 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( presetEmail );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" type=\"password\" name=\"login-password\" placeholder=\"";
|
||||
#line 241 "F:\\Gradido\\gradido_login_server\\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 242 "F:\\Gradido\\gradido_login_server\\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 247 "F:\\Gradido\\gradido_login_server\\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=\"";
|
||||
#line 177 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
responseStream << "/registerDirect\">\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 249 "F:\\Gradido\\gradido_login_server\\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 253 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/resetPassword\">";
|
||||
#line 253 "F:\\Gradido\\gradido_login_server\\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\\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\\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();
|
||||
}
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
|
||||
#include "ConfigPage.h"
|
||||
#include "LoginPage.h"
|
||||
#include "RegisterPage.h"
|
||||
//#include "RegisterPage.h"
|
||||
#include "HandleFileRequest.h"
|
||||
#include "DashboardPage.h"
|
||||
#include "CheckEmailPage.h"
|
||||
@ -16,6 +16,7 @@
|
||||
#include "ElopageWebhook.h"
|
||||
#include "ElopageWebhookLight.h"
|
||||
#include "UpdateUserPasswordPage.h"
|
||||
#include "UserUpdateGroupPage.h"
|
||||
#include "Error500Page.h"
|
||||
#include "CheckTransactionPage.h"
|
||||
#include "ResetPassword.h"
|
||||
@ -27,6 +28,11 @@
|
||||
#include "PassphrasedTransaction.h"
|
||||
#include "AdminUserPasswordReset.h"
|
||||
#include "RegisterDirectPage.h"
|
||||
#include "AdminGroupsPage.h"
|
||||
#include "AdminTopicPage.h"
|
||||
#include "AdminHederaAccountPage.h"
|
||||
#include "AdminNodeServerPage.h"
|
||||
#include "AdminNodeServerTestPage.h"
|
||||
|
||||
#include "DecodeTransactionPage.h"
|
||||
#include "RepairDefectPassphrase.h"
|
||||
@ -46,6 +52,17 @@ PageRequestHandlerFactory::PageRequestHandlerFactory()
|
||||
ServerConfig::g_ServerKeySeed->put(8, DRRandom::r64());
|
||||
}
|
||||
|
||||
Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::basicSetup(PageRequestMessagedHandler* handler, const Poco::Net::HTTPServerRequest& request, Profiler profiler)
|
||||
{
|
||||
handler->setHost(request.getHost());
|
||||
handler->setProfiler(profiler);
|
||||
auto login_server_path = request.find("grd-login-server-path");
|
||||
if (login_server_path != request.end()) {
|
||||
handler->setLoginServerPath("/" + login_server_path->second);
|
||||
}
|
||||
return handler;
|
||||
}
|
||||
|
||||
Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(const Poco::Net::HTTPServerRequest& request)
|
||||
{
|
||||
//printf("request uri: %s\n", request.getURI().data());
|
||||
@ -71,17 +88,12 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c
|
||||
|
||||
if (url_first_part == "/elopage_webhook_261") {
|
||||
mLogging.information(dateTimeString + " call from elopage");
|
||||
//printf("call from elopage\n");
|
||||
auto pageRequestHandler = new ElopageWebhook;
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new ElopageWebhook, request, timeUsed);
|
||||
}
|
||||
|
||||
if (url_first_part == "/elopage_webhook_211") {
|
||||
mLogging.information(dateTimeString + " call from elopage light");
|
||||
auto pageRequestHandler = new ElopageWebhookLight;
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new ElopageWebhookLight, request, timeUsed);
|
||||
}
|
||||
|
||||
// check if user has valid session
|
||||
@ -124,87 +136,76 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c
|
||||
}*/
|
||||
if (url_first_part.size() >= 9 && url_first_part.substr(0,9) == "/register") {
|
||||
//if (url_first_part == "/register" || url_first_part == "/registerDirect" ) {
|
||||
auto pageRequestHandler = new RegisterDirectPage;
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new RegisterDirectPage, request, timeUsed);
|
||||
}
|
||||
if (url_first_part == "/resetPassword") {
|
||||
auto resetPassword = new ResetPassword;
|
||||
resetPassword->setProfiler(timeUsed);
|
||||
return resetPassword;
|
||||
return basicSetup(new ResetPassword, request, timeUsed);
|
||||
}
|
||||
|
||||
if (url_first_part == "/decode_transaction") {
|
||||
mLogging.information(dateTimeString + " decode");
|
||||
auto pageRequestHandler = new DecodeTransactionPage(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new DecodeTransactionPage(s), request, timeUsed);
|
||||
}
|
||||
if (url_first_part == "/passphrased_transaction") {
|
||||
auto pageRequestHandler = new PassphrasedTransaction();
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new PassphrasedTransaction, request, timeUsed);
|
||||
}
|
||||
if (url_first_part == "/adminNodeServerTest") {
|
||||
return basicSetup(new AdminNodeServerTestPage, request, timeUsed);
|
||||
}
|
||||
if (s) {
|
||||
if (externReferer != "") {
|
||||
s->setLastReferer(externReferer);
|
||||
}
|
||||
model::table::User* userModel = nullptr;
|
||||
auto user = s->getUser();
|
||||
auto newUser = s->getNewUser();
|
||||
if (newUser) userModel = newUser->getModel();
|
||||
if (s->errorCount() || (!user.isNull() && user->errorCount()) || (userModel && userModel->errorCount())) {
|
||||
if (!user.isNull() && user->errorCount()) {
|
||||
s->getErrors(user);
|
||||
}
|
||||
if (s->errorCount() || (userModel && userModel->errorCount())) {
|
||||
if (userModel && userModel->errorCount()) {
|
||||
s->getErrors(userModel);
|
||||
}
|
||||
s->sendErrorsAsEmail();
|
||||
auto pageRequestHandler = new Error500Page(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new Error500Page(s), request, timeUsed);
|
||||
}
|
||||
if (url_first_part == "/error500") {
|
||||
auto pageRequestHandler = new Error500Page(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new Error500Page(s), request, timeUsed);
|
||||
}
|
||||
if (url_first_part == "/userUpdateGroup") {
|
||||
return basicSetup(new UserUpdateGroupPage(s), request, timeUsed);
|
||||
}
|
||||
|
||||
if (url_first_part == "/transform_passphrase") {
|
||||
auto pageRequestHandler = new TranslatePassphrase(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new TranslatePassphrase(s), request, timeUsed);
|
||||
}
|
||||
if (url_first_part == "/repairPassphrase") {
|
||||
auto pageRequestHandler = new RepairDefectPassphrase(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new RepairDefectPassphrase(s), request, timeUsed);
|
||||
}
|
||||
if (userModel && userModel->getRole() == model::table::ROLE_ADMIN) {
|
||||
if (url_first_part == "/adminRegister") {
|
||||
auto pageRequestHandler = new RegisterAdminPage(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new RegisterAdminPage(s), request, timeUsed);
|
||||
}
|
||||
if (url_first_part == "/debugPassphrase") {
|
||||
auto pageRequestHandler = new DebugPassphrasePage(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new DebugPassphrasePage(s), request, timeUsed);
|
||||
}
|
||||
if (url_first_part == "/debugMnemonic") {
|
||||
auto pageRequestHandler = new DebugMnemonicPage(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new DebugMnemonicPage(s), request, timeUsed);
|
||||
}
|
||||
if (url_first_part == "/checkUserBackups") {
|
||||
auto pageRequestHandler = new AdminCheckUserBackup(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new AdminCheckUserBackup(s), request, timeUsed);
|
||||
}
|
||||
if (url_first_part == "/adminUserPasswordReset") {
|
||||
auto pageRequestHandler = new AdminUserPasswordReset(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new AdminUserPasswordReset(s), request, timeUsed);
|
||||
}
|
||||
if (url_first_part == "/groups") {
|
||||
return basicSetup(new AdminGroupsPage(s), request, timeUsed);
|
||||
}
|
||||
if (url_first_part == "/topic") {
|
||||
return basicSetup(new AdminTopicPage(s), request, timeUsed);
|
||||
}
|
||||
if (url_first_part == "/hedera_account") {
|
||||
return basicSetup(new AdminHederaAccountPage(s), request, timeUsed);
|
||||
}
|
||||
if (url_first_part == "/nodes") {
|
||||
return basicSetup(new AdminNodeServerPage(s), request, timeUsed);
|
||||
}
|
||||
}
|
||||
|
||||
@ -213,36 +214,30 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c
|
||||
// remove cookie(s)
|
||||
|
||||
//printf("session released\n");
|
||||
auto pageRequestHandler = new LoginPage(nullptr);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new LoginPage(nullptr), request, timeUsed);
|
||||
}
|
||||
if(url_first_part == "/user_delete") {
|
||||
if(s->deleteUser()) {
|
||||
sm->releaseSession(s);
|
||||
auto pageRequestHandler = new LoginPage(nullptr);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
|
||||
return basicSetup(new LoginPage(nullptr), request, timeUsed);
|
||||
}
|
||||
}
|
||||
auto sessionState = s->getSessionState();
|
||||
//printf("session state: %s\n", s->getSessionStateString());
|
||||
if (url_first_part == "/updateUserPassword") {
|
||||
auto pageRequestHandler = new UpdateUserPasswordPage(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new UpdateUserPasswordPage(s), request, timeUsed);
|
||||
}
|
||||
if (url_first_part == "/checkTransactions") {
|
||||
auto pageRequestHandler = new CheckTransactionPage(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new CheckTransactionPage(s), request, timeUsed);
|
||||
|
||||
}
|
||||
if(s && newUser && newUser->hasPassword() && newUser->hasPublicKey()) {
|
||||
//printf("[PageRequestHandlerFactory] go to dashboard page with user\n");
|
||||
auto pageRequestHandler = new DashboardPage(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new DashboardPage(s), request, timeUsed);
|
||||
}
|
||||
if (url_first_part == "/login" || url_first_part == "/") {
|
||||
return basicSetup(new LoginPage(s), request, timeUsed);
|
||||
}
|
||||
|
||||
} else {
|
||||
@ -251,14 +246,10 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(c
|
||||
return new ConfigPage;
|
||||
}
|
||||
else if (url_first_part == "/login") {
|
||||
auto pageRequestHandler = new LoginPage(nullptr);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new LoginPage(nullptr), request, timeUsed);
|
||||
}
|
||||
}
|
||||
auto pageRequestHandler = new LoginPage(nullptr);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new LoginPage(nullptr), request, timeUsed);
|
||||
//return new HandleFileRequest;
|
||||
//return new PageRequestHandlerFactory;
|
||||
}
|
||||
@ -287,9 +278,7 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::handleCheckEmail(Sessi
|
||||
|
||||
// if no verification code given or error with given code, show form
|
||||
if (!verificationCode) {
|
||||
auto pageRequestHandler = new CheckEmailPage(session);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new CheckEmailPage(session), request, timeUsed);
|
||||
}
|
||||
|
||||
// we have a verification code, now let's check that thing
|
||||
@ -316,9 +305,7 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::handleCheckEmail(Sessi
|
||||
}
|
||||
else {
|
||||
//sm->releaseSession(session);
|
||||
auto pageRequestHandler = new CheckEmailPage(session);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new CheckEmailPage(session), request, timeUsed);
|
||||
}
|
||||
}
|
||||
// suitable session found or created
|
||||
@ -328,9 +315,7 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::handleCheckEmail(Sessi
|
||||
assert(session->getNewUser());
|
||||
if (!session->getNewUser()->hasPassword()) {
|
||||
// user has no password, maybe account created from elopage webhook
|
||||
auto pageRequestHandler = new UpdateUserPasswordPage(session);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new UpdateUserPasswordPage(session), request, timeUsed);
|
||||
}
|
||||
/*
|
||||
//! \return 1 = konto already exist
|
||||
@ -352,39 +337,29 @@ Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::handleCheckEmail(Sessi
|
||||
} else {
|
||||
pageRequestHandler = new PassphrasePage(session);
|
||||
}
|
||||
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(pageRequestHandler, request, timeUsed);
|
||||
|
||||
}
|
||||
else if (1 == retUpdateEmailVerification) {
|
||||
//auto user = session->getUser();
|
||||
//LoginPage* loginPage = new LoginPage(session);
|
||||
//loginPage->setProfiler(timeUsed);
|
||||
CheckEmailPage* check_email_page = new CheckEmailPage(session);
|
||||
check_email_page->setProfiler(timeUsed);
|
||||
return check_email_page;
|
||||
//return loginPage;
|
||||
return basicSetup(new CheckEmailPage(session), request, timeUsed);
|
||||
}
|
||||
else if (-1 == retUpdateEmailVerification) {
|
||||
auto checkEmail = new CheckEmailPage(session);
|
||||
checkEmail->setProfiler(timeUsed);
|
||||
checkEmail->getErrors(session);
|
||||
sm->releaseSession(session);
|
||||
return checkEmail;
|
||||
|
||||
return basicSetup(checkEmail, request, timeUsed);
|
||||
}
|
||||
else if (-2 == retUpdateEmailVerification) {
|
||||
auto errorPage = new Error500Page(session);
|
||||
errorPage->setProfiler(timeUsed);
|
||||
return errorPage;
|
||||
return basicSetup(new Error500Page(session), request, timeUsed);
|
||||
}
|
||||
|
||||
}
|
||||
if (session) {
|
||||
sm->releaseSession(session);
|
||||
}
|
||||
|
||||
auto pageRequestHandler = new CheckEmailPage(nullptr);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
return basicSetup(new CheckEmailPage(nullptr), request, timeUsed);
|
||||
}
|
||||
|
||||
@ -6,6 +6,7 @@
|
||||
#include "Poco/Logger.h"
|
||||
#include "../model/Session.h"
|
||||
#include "../lib/Profiler.h"
|
||||
#include "PageRequestMessagedHandler.h"
|
||||
|
||||
#define HTTP_PAGES_COUNT 1
|
||||
|
||||
@ -18,6 +19,8 @@ public:
|
||||
protected:
|
||||
Poco::Net::HTTPRequestHandler* handleCheckEmail(Session* session, const std::string uri, const Poco::Net::HTTPServerRequest& request, Profiler timeUsed);
|
||||
|
||||
Poco::Net::HTTPRequestHandler* basicSetup(PageRequestMessagedHandler* handler, const Poco::Net::HTTPServerRequest& request, Profiler profiler);
|
||||
|
||||
Poco::RegularExpression mRemoveGETParameters;
|
||||
Poco::Logger& mLogging;
|
||||
};
|
||||
|
||||
@ -8,6 +8,12 @@
|
||||
// detect also lang field from form get
|
||||
const Poco::RegularExpression PageRequestMessagedHandler::mDetectLanguageGET("^(?:/[a-zA-Z0-9/_-]*)?(?:/(en|de)|\\?.*lang=(en|de))");
|
||||
|
||||
PageRequestMessagedHandler::PageRequestMessagedHandler()
|
||||
: mLoginServerPath("/account")
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
Languages PageRequestMessagedHandler::chooseLanguage(Poco::Net::HTTPServerRequest& request, std::string lang_btn /*= ""*/)
|
||||
{
|
||||
|
||||
@ -69,4 +75,12 @@ unsigned long long PageRequestMessagedHandler::getLastGetAsU64(const std::string
|
||||
return 0;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
std::string PageRequestMessagedHandler::getBaseUrl()
|
||||
{
|
||||
if (ServerConfig::g_ServerSetupType == ServerConfig::SERVER_TYPE_TEST) {
|
||||
return "http://" + mHost + mLoginServerPath;
|
||||
}
|
||||
return "https://" + mHost + mLoginServerPath;
|
||||
}
|
||||
@ -2,7 +2,7 @@
|
||||
#define PAGE_REQUEST_MESSAGE_HANDLER_INCLUDED
|
||||
|
||||
#include "../model/Session.h"
|
||||
#include "../lib/ErrorList.h"
|
||||
#include "../lib/NotificationList.h"
|
||||
#include "../lib/Profiler.h"
|
||||
|
||||
#include "../SingletonManager/LanguageManager.h"
|
||||
@ -11,12 +11,14 @@
|
||||
#include "Poco/Net/HTMLForm.h"
|
||||
#include "Poco/RegularExpression.h"
|
||||
|
||||
class PageRequestMessagedHandler : public Poco::Net::HTTPRequestHandler, public ErrorList
|
||||
class PageRequestMessagedHandler : public Poco::Net::HTTPRequestHandler, public NotificationList
|
||||
{
|
||||
public:
|
||||
PageRequestMessagedHandler() {}
|
||||
PageRequestMessagedHandler();
|
||||
|
||||
inline void setProfiler(Profiler profiler) { mTimeProfiler = profiler; }
|
||||
inline void setHost(const std::string &host) { mHost = host; }
|
||||
inline void setLoginServerPath(const std::string& loginServerPath) { mLoginServerPath = loginServerPath; }
|
||||
//Poco::Net::HTTPRequestHandler* createRequestHandler(const Poco::Net::HTTPServerRequest& request);
|
||||
|
||||
protected:
|
||||
@ -26,8 +28,11 @@ protected:
|
||||
virtual Languages chooseLanguage(Poco::Net::HTTPServerRequest& request, std::string lang_btn = "");
|
||||
|
||||
unsigned long long getLastGetAsU64(const std::string& uri);
|
||||
std::string getBaseUrl();
|
||||
|
||||
Profiler mTimeProfiler;
|
||||
std::string mHost;
|
||||
std::string mLoginServerPath;
|
||||
|
||||
};
|
||||
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../SingletonManager/LanguageManager.h"
|
||||
#include "../Crypto/KeyPair.h"
|
||||
#include "../Crypto/KeyPairEd25519.h"
|
||||
#include "../ServerConfig.h"
|
||||
//#include "Poco/Net/HTTPServerParams.h"
|
||||
|
||||
@ -89,13 +89,15 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
auto registerKeyChoice = form.get("passphrase", "no");
|
||||
std::string oldPassphrase = "";
|
||||
if (registerKeyChoice == "no") {
|
||||
auto oldPassphrase = KeyPair::filterPassphrase(form.get("passphrase-existing", ""));
|
||||
auto oldPassphrase = Passphrase::filter(form.get("passphrase-existing", ""));
|
||||
|
||||
if(oldPassphrase != "") {
|
||||
if (User::validatePassphrase(oldPassphrase, &wordSource)) {
|
||||
auto word_source = Passphrase::detectMnemonic(oldPassphrase);
|
||||
if (word_source) {
|
||||
// passphrase is valid
|
||||
if(PAGE_FORCE_ASK_PASSPHRASE == state) {
|
||||
auto compareResult = mSession->comparePassphraseWithSavedKeys(oldPassphrase, wordSource);
|
||||
|
||||
auto compareResult = mSession->comparePassphraseWithSavedKeys(oldPassphrase, word_source);
|
||||
if(-2 == compareResult) {
|
||||
response.redirect(ServerConfig::g_serverPath + "/error500");
|
||||
return;
|
||||
@ -117,7 +119,8 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
}
|
||||
}
|
||||
else if (registerKeyChoice == "yes") {
|
||||
mSession->generatePassphrase();
|
||||
auto passphrase = Passphrase::generate(wordSource);
|
||||
mSession->setPassphrase(passphrase);
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -125,7 +128,7 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
// double check passphrase
|
||||
auto passphrase = mSession->getOldPassphrase();
|
||||
auto langWordSource = wordSource;
|
||||
if("" != passphrase && !User::validatePassphrase(passphrase, &wordSource)) {
|
||||
if("" != passphrase && !Passphrase::detectMnemonic(passphrase)) {
|
||||
addError(new Error("PassphrasePage", "Invalid Passphrase after double check"));
|
||||
addError(new ParamError("PassphrasePage", "passphrase", passphrase.data()));
|
||||
if(!mSession->getNewUser().isNull()) {
|
||||
@ -138,8 +141,8 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
}
|
||||
//printf("wordSource: %d, langWordSource: %d\n", (int)wordSource, (int)langWordSource);
|
||||
if(wordSource != langWordSource) {
|
||||
mSession->generatePassphrase();
|
||||
User::validatePassphrase(passphrase, &wordSource);
|
||||
//mSession->generatePassphrase();
|
||||
mSession->setPassphrase(Passphrase::generate(wordSource));
|
||||
}
|
||||
|
||||
if(mSession->getSessionState() == SESSION_STATE_PASSPHRASE_GENERATED && state != PAGE_ASK_ENSURE_PASSPHRASE) {
|
||||
@ -159,7 +162,7 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
#line 3 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
|
||||
bool withMaterialIcons = false;
|
||||
#line 138 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 141 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
withMaterialIcons = true; std::ostream& _responseStream = response.send();
|
||||
Poco::DeflatingOutputStream _gzipStream(_responseStream, Poco::DeflatingStreamBuf::STREAM_GZIP, 1);
|
||||
std::ostream& responseStream = _compressResponse ? _gzipStream : _responseStream;
|
||||
@ -251,9 +254,9 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << " <div class=\"grid-body\">";
|
||||
// end include login_header.cpsp
|
||||
responseStream << "\n";
|
||||
#line 139 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 142 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
if(state == PAGE_ASK_ENSURE_PASSPHRASE) { responseStream << "<div style=\"display:none\"> ";
|
||||
#line 139 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 142 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
// begin include flags.cpsp
|
||||
@ -283,93 +286,93 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "</div>";
|
||||
// end include flags.cpsp
|
||||
responseStream << "\n";
|
||||
#line 141 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 144 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
if(state == PAGE_ASK_ENSURE_PASSPHRASE) { responseStream << "</div> ";
|
||||
#line 141 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 144 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "<div class=\"row mb-3\" ";
|
||||
#line 142 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 145 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
if(state != PAGE_ASK_ENSURE_PASSPHRASE) { responseStream << " style=\"margin-top:70px;\" ";
|
||||
#line 142 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 145 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
} responseStream << ">\n";
|
||||
responseStream << "\t<h2 class=\"mx-auto\">";
|
||||
#line 143 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 146 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( pageTitle );
|
||||
responseStream << ": ";
|
||||
#line 143 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 146 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( pageSubtitle );
|
||||
responseStream << "</h2>\n";
|
||||
responseStream << "\t";
|
||||
#line 144 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 147 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
if(state == PAGE_SHOW_PASSPHRASE) { responseStream << "\n";
|
||||
responseStream << "\t\t<h4 class=\"mx-auto\">";
|
||||
#line 145 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 148 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Passphrase abschreiben") );
|
||||
responseStream << "</h4>\n";
|
||||
responseStream << "\t";
|
||||
#line 146 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 149 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "<div class=\"item-wrapper\">\n";
|
||||
responseStream << "\t<div class=\"row mb-3\">\n";
|
||||
responseStream << "\t";
|
||||
#line 150 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 153 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
if(state == PAGE_SHOW_PASSPHRASE) { responseStream << "\n";
|
||||
responseStream << "\t <div class=\"col-md-10 mx-auto\">\n";
|
||||
responseStream << "\t\t<div class=\"form-group row showcase_row_area\">\n";
|
||||
responseStream << "\t\t\t<form method=\"POST\" action=\"";
|
||||
#line 153 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 156 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( uri_start );
|
||||
responseStream << "/passphrase\">\n";
|
||||
responseStream << "\t\t\t <div class=\"col-md-12 col-lg-12 \">\n";
|
||||
responseStream << "\t\t\t\t<div class=\"alert\">\n";
|
||||
responseStream << "\t\t\t\t <h5 class=\"alert-heading\">";
|
||||
#line 156 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 159 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Was ist eine Passphrase?") );
|
||||
responseStream << "</h5>\n";
|
||||
responseStream << "\t\t\t\t <p>";
|
||||
#line 157 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 160 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Deine Passphrase besteht aus den im grünen Feld angezeigten Wörtern.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t <p>";
|
||||
#line 158 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 161 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Sie dient deiner Sicherheit.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t <p>";
|
||||
#line 159 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 162 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Du brauchst deine Passphrase um dein Konto wiederherzustellen, wenn du mal dein Passwort vergessen haben solltest.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t<h5 class=\"alert-heading\">";
|
||||
#line 161 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 164 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Deine Passphrase (Groß/Kleinschreibung beachten)") );
|
||||
responseStream << ":</h5>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"col-lg-12 col-md-12 mx-auto alert alert-primary\" style=\"text-align:center\">\n";
|
||||
responseStream << "\t\t\t\t <p>";
|
||||
#line 163 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( mSession->getPassphrase() );
|
||||
#line 166 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( mSession->getPassphrase()->getString() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"alert\">\n";
|
||||
responseStream << "\t\t\t\t <h5 class=\"alert-heading\">";
|
||||
#line 166 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 169 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Was zu tun ist:") );
|
||||
responseStream << "</h5>\n";
|
||||
responseStream << "\t\t\t\t <p>";
|
||||
#line 167 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 170 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Schreibe dir die obenstehende Passphrase <b>von Hand</b> auf ein Blatt Papier!") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t <p>";
|
||||
#line 168 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 171 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Speichere sie auf keinen Fall auf deinem Rechner oder Mobilgerät!!") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t <p>";
|
||||
#line 169 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 172 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Bewahre sie an einem sicheren Ort auf!") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t<input type=\"submit\" class=\"btn btn-sm btn-primary pull-right\" name=\"nextEnsure\" value=\"";
|
||||
#line 171 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 174 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Weiter") );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t </div>\n";
|
||||
@ -377,7 +380,7 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t </div>\n";
|
||||
responseStream << "\t ";
|
||||
#line 176 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 179 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
} else if(state == PAGE_ASK_ENSURE_PASSPHRASE) { responseStream << "\n";
|
||||
responseStream << "\t <style type=\"text/css\">\n";
|
||||
responseStream << "\t\tbutton:disabled {\n";
|
||||
@ -392,45 +395,45 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "\t\t\t<div class=\"row mb-3\">\n";
|
||||
responseStream << "\t\t\t <div class=\"col-md-10 mx-auto\">\n";
|
||||
responseStream << "\t\t\t\t<form method=\"POST\" action=\"";
|
||||
#line 189 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 192 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( uri_start );
|
||||
responseStream << "/passphrase\">\n";
|
||||
responseStream << "\t\t\t\t <div class=\"form-group row showcase_row_area\">\n";
|
||||
responseStream << "\t\t\t\t\t<form method=\"POST\" action=\"";
|
||||
#line 191 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 194 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( uri_start );
|
||||
responseStream << "/passphrase\">\n";
|
||||
responseStream << "\t\t\t\t\t\t<div class=\"col-md-12 col-lg-12 \">\n";
|
||||
responseStream << "\t\t\t\t\t\t <div class=\"alert\">\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<h5 class=\"alert-heading\">";
|
||||
#line 194 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 197 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Was zu tun ist:") );
|
||||
responseStream << "</h5>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<p>";
|
||||
#line 195 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 198 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Hast du dir deine Passphrase gemerkt?") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<p>";
|
||||
#line 196 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 199 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Dann zeig es mir. Zur Unterstützung gebe ich dir deine Wörter aber in anderer Reihenfolge.") );
|
||||
responseStream << "<p>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<p>";
|
||||
#line 197 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 200 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Klicke sie an um sie einzusetzen.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<p>";
|
||||
#line 198 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 201 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Überprüfe dabei, ob du alle Wörter richtig geschrieben hast!") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t\t\t <div id=\"gradido-mithril-passphrase\"></div>\n";
|
||||
responseStream << "\t\t\t\t\t\t <noscript>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<p>";
|
||||
#line 202 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 205 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Weil du kein Javascript verwendest geht es direkt weiter. Hast du dir deine Passphrase gemerkt oder aufgeschrieben?") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<input type=\"submit\" class=\"btn btn-sm btn-primary pull-right\" name=\"btnChecked\" value=\"";
|
||||
#line 203 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 206 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Ja") );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t\t\t\t </noscript>\n";
|
||||
@ -444,23 +447,23 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t\t<script type=\"text/javascript\">\n";
|
||||
responseStream << "\t\t\tvar mnemonicWords = ";
|
||||
#line 214 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 217 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
wordSource->getSortedWordList().stringify(responseStream); responseStream << ";\n";
|
||||
responseStream << "\t\t\tvar passphrase = \"";
|
||||
#line 215 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( mSession->getPassphrase() );
|
||||
#line 218 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( mSession->getPassphrase()->getString() );
|
||||
responseStream << "\";\n";
|
||||
responseStream << "\t\t\tlanguage = \"";
|
||||
#line 216 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 219 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( lm->keyForLanguage(lang) );
|
||||
responseStream << "\";\n";
|
||||
responseStream << "\t\t</script>\n";
|
||||
responseStream << "\t\t<script src=\"";
|
||||
#line 218 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 221 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "js/ensurePassphrase.min.js\" type=\"text/javascript\"></script>\n";
|
||||
responseStream << "\t ";
|
||||
#line 219 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 222 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
} else if(state == PAGE_ASK_PASSPHRASE) { responseStream << "\n";
|
||||
responseStream << "\t <style type=\"text/css\">\n";
|
||||
responseStream << "\t\t.hidden-on-load {\n";
|
||||
@ -492,21 +495,21 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "\t\t <div class=\"col-md-12 col-lg-12 \">\n";
|
||||
responseStream << "\t\t\t<div class=\"col-lg-12 col-md-12 mx-auto alert alert-primary\" style=\"text-align:center\">\n";
|
||||
responseStream << "\t\t\t <p>";
|
||||
#line 249 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 252 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Deine E-Mail Adresse wurde erfolgreich bestätigt.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t<form method=\"POST\" action=\"";
|
||||
#line 251 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 254 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( uri_start );
|
||||
responseStream << "/passphrase\">\n";
|
||||
responseStream << "\t\t\t\t<div class=\"alert\">\n";
|
||||
responseStream << "\t\t\t\t <h5 class=\"alert-heading\">";
|
||||
#line 253 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 256 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Neue Gradido Adresse anlegen / wiederherstellen") );
|
||||
responseStream << "</h5>\n";
|
||||
responseStream << "\t\t\t\t <p>";
|
||||
#line 254 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 257 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Möchtest du ein neues Gradido-Konto anlegen oder ein bestehendes wiederherstellen?") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t \n";
|
||||
@ -518,7 +521,7 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "\t\t\t\t\t\t\t\t<label for=\"passphrase-new-yes\" class=\"radio-label mr-4\">\n";
|
||||
responseStream << "\t\t\t\t\t\t\t\t\t<input id=\"passphrase-new-yes\" name=\"passphrase\" type=\"radio\" value=\"yes\" onchange=\"showHidePassphraseCointainer(this);\" checked/>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t\t\t";
|
||||
#line 263 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 266 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Neues Konto anlegen") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t\t\t\t<i class=\"input-frame\"></i>\n";
|
||||
@ -528,7 +531,7 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "\t\t\t\t\t\t\t\t<label for=\"passphrase-new-no\" class=\"radio-label mr-4\">\n";
|
||||
responseStream << "\t\t\t\t\t\t\t\t\t<input id=\"passphrase-new-no\" name=\"passphrase\" type=\"radio\" value=\"no\" onchange=\"showHidePassphraseCointainer(this);\"/>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t\t\t";
|
||||
#line 270 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 273 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Bestehendes Konto wiederherstellen") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t\t\t\t<i class=\"input-frame\"></i>\n";
|
||||
@ -538,18 +541,18 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "\t\t\t\t\t\t<div id=\"passphrase-existing-container\" class=\"hidden-on-load\">\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<label for=\"passphrase-existing\">\n";
|
||||
responseStream << "\t\t\t\t\t\t\t\t";
|
||||
#line 277 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 280 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Falls du ein bestehendes Konto wiederherstellen willst, gib hier deine Passphrase ein:") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t\t\t<i class=\"input-frame\"></i>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t</label>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<textarea id=\"passphrase-existing\" class=\"form-control\" name=\"passphrase-existing\" cols=\"12\" rows=\"5\">";
|
||||
#line 280 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 283 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("passphrase-existing", "") : "" );
|
||||
responseStream << "</textarea>\n";
|
||||
responseStream << "\t\t\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t\t\t<button type=\"submit\" class=\"btn btn-sm btn-primary pull-right\" name=\"submit\">";
|
||||
#line 282 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 285 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Weiter") );
|
||||
responseStream << "</button>\n";
|
||||
responseStream << "\t\t\t\t\t</div>\n";
|
||||
@ -557,40 +560,40 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "\t\t\t</form>\n";
|
||||
responseStream << "\t\t </div>\n";
|
||||
responseStream << "\t\t <!--<a href=\"";
|
||||
#line 287 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 290 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( uri_start );
|
||||
responseStream << "/passphrase\" class=\"btn btn-sm btn-primary pull-right\" name=\"next\">";
|
||||
#line 287 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 290 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Weiter") );
|
||||
responseStream << "</a>-->\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t </div>\n";
|
||||
responseStream << "\t ";
|
||||
#line 290 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 293 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
} else if(state == PAGE_FORCE_ASK_PASSPHRASE) { responseStream << "\n";
|
||||
responseStream << "\t <div class=\"col-md-10 mx-auto\">\n";
|
||||
responseStream << "\t\t<div class=\"form-group row showcase_row_area\">\n";
|
||||
responseStream << "\t\t <div class=\"col-md-12 col-lg-12 \">\n";
|
||||
responseStream << "\t\t\t<h5 class=\"alert-heading\">";
|
||||
#line 294 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 297 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Konto wiederherstellen / Neues Passwort anlegen") );
|
||||
responseStream << "</h5>\n";
|
||||
responseStream << "\t\t\t<div class=\"col-lg-12 col-md-12 mx-auto alert alert-primary\" style=\"text-align:center\">\n";
|
||||
responseStream << "\t\t\t <p>";
|
||||
#line 296 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 299 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Um dein Konto wiederherzustellen und dir ein Neues Passwort auswählen zu können, tippe hier bitte die Wörter deiner Passphrase in der richtigen Reihenfolge ein, welche du dir aufgeschrieben hast.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t<form method=\"POST\" action=\"";
|
||||
#line 298 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 301 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( uri_start );
|
||||
responseStream << "/passphrase\">\n";
|
||||
responseStream << "\t\t\t\t<textarea class=\"form-control\" name=\"passphrase-existing\" cols=\"12\" rows=\"5\">";
|
||||
#line 299 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 302 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("passphrase-existing", "") : "" );
|
||||
responseStream << "</textarea>\n";
|
||||
responseStream << "\t\t\t\t<button type=\"submit\" class=\"btn btn-sm btn-primary pull-right\" name=\"submit\">";
|
||||
#line 300 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 303 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Weiter") );
|
||||
responseStream << "</button>\n";
|
||||
responseStream << "\t\t\t</form>\n";
|
||||
@ -598,18 +601,18 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t </div>\n";
|
||||
responseStream << "\t ";
|
||||
#line 305 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 308 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t<div class=\"col-md-10 mx-auto\">\n";
|
||||
responseStream << "\t\t\t<div class=\"form-group row showcase_row_area\">\n";
|
||||
responseStream << "\t\t\t <div class=\"col-md-12 col-lg-12 \">\n";
|
||||
responseStream << "\t\t\t\t<div class=\"col-lg-8 col-md-10 mx-auto alert alert-danger\" style=\"text-align:center\">\n";
|
||||
responseStream << "\t\t\t\t <h5 class=\"alert-heading\">";
|
||||
#line 310 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 313 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Fehler") );
|
||||
responseStream << "</h5>\n";
|
||||
responseStream << "\t\t\t\t <p>";
|
||||
#line 311 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 314 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( gettext("Ungültige Seite, wenn du das siehst stimmt hier etwas nicht. Bitte wende dich an den Server-Admin.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
@ -617,7 +620,7 @@ void PassphrasePage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t ";
|
||||
#line 316 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
#line 319 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "</div>\n";
|
||||
|
||||
@ -9,7 +9,7 @@
|
||||
|
||||
#include "../SingletonManager/MemoryManager.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../Crypto/KeyPair.h"
|
||||
#include "../Crypto/KeyPairEd25519.h"
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
#include "Poco/JSON/Object.h"
|
||||
@ -39,29 +39,28 @@ void PassphrasedTransaction::handleRequest(Poco::Net::HTTPServerRequest& request
|
||||
|
||||
std::string pageName = "Gradidos mit Passphrase überweisen";
|
||||
PageState state = PAGE_STATE_INPUT;
|
||||
Mnemonic* wordSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER];
|
||||
Mnemonic* wordSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER_FIXED_CASES];
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto mm = MemoryManager::getInstance();
|
||||
std::string errorString ="";
|
||||
|
||||
if(!form.empty()) {
|
||||
auto passphrase = form.get("passphrase", "");
|
||||
bool passphraseValid = User::validatePassphrase(passphrase, &wordSource);
|
||||
auto passphrase_obj = Passphrase::create(passphrase, wordSource);
|
||||
|
||||
bool keysGenerated = false;
|
||||
KeyPair keys;
|
||||
if(!passphraseValid)
|
||||
{
|
||||
KeyPairEd25519* keys = nullptr;
|
||||
if(!passphrase_obj.isNull()) {
|
||||
addError(new Error("Passphrase", "Fehler beim validieren der Passphrase"));
|
||||
}
|
||||
else
|
||||
{
|
||||
keysGenerated = keys.generateFromPassphrase(passphrase.data(), wordSource);
|
||||
if(!keysGenerated)
|
||||
else {
|
||||
keys = KeyPairEd25519::create(passphrase_obj);
|
||||
if(!keys)
|
||||
{
|
||||
addError(new Error("Passphrase", "Konnte keine Keys aus der Passphrase generieren"));
|
||||
}
|
||||
}
|
||||
if(passphraseValid && keysGenerated)
|
||||
if(keys)
|
||||
{
|
||||
// create session only for transaction
|
||||
int session_id = 0;
|
||||
@ -69,7 +68,7 @@ void PassphrasedTransaction::handleRequest(Poco::Net::HTTPServerRequest& request
|
||||
// create payload
|
||||
Poco::JSON::Object requestJson;
|
||||
Poco::JSON::Object pubkeys;
|
||||
pubkeys.set("sender", keys.getPubkeyHex());
|
||||
pubkeys.set("sender", keys->getPublicKeyHex());
|
||||
pubkeys.set("receiver", form.get("recevier", ""));
|
||||
requestJson.set("method", "moveTransaction");
|
||||
requestJson.set("pubkeys", pubkeys);
|
||||
@ -120,7 +119,8 @@ void PassphrasedTransaction::handleRequest(Poco::Net::HTTPServerRequest& request
|
||||
Poco::Thread::sleep(10);
|
||||
currentActiveTransaction = session->getNextReadyTransaction();
|
||||
}
|
||||
if(!currentActiveTransaction->isTransfer()) {
|
||||
auto transaction_body = currentActiveTransaction->getTransactionBody();
|
||||
if(transaction_body.isNull() || !transaction_body->isTransfer()) {
|
||||
addError(new Error("Transaction", "Falsche Transaktion, bitte erst alle anderen Transaktionen abschließen und dann Seite neuladen"));
|
||||
} else {
|
||||
//auto signing = new SigningTransaction(currentActiveTransaction, user);
|
||||
@ -145,6 +145,8 @@ void PassphrasedTransaction::handleRequest(Poco::Net::HTTPServerRequest& request
|
||||
if(session) {
|
||||
sm->releaseSession(session);
|
||||
}
|
||||
delete keys;
|
||||
keys = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
@ -217,39 +219,39 @@ void PassphrasedTransaction::handleRequest(Poco::Net::HTTPServerRequest& request
|
||||
responseStream << "</div>\n";
|
||||
// end include header_old.cpsp
|
||||
responseStream << "\n";
|
||||
#line 137 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
#line 139 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
if("" == errorString) { responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 138 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
#line 140 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
responseStream << ( errorString );
|
||||
responseStream << "\n";
|
||||
#line 139 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
#line 141 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "<div class=\"grd_container\">\n";
|
||||
responseStream << "\t";
|
||||
#line 141 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
#line 143 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 142 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
#line 144 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
if(PAGE_STATE_INPUT == state) { responseStream << "\n";
|
||||
responseStream << "\t\n";
|
||||
responseStream << "\t\t<fieldset class=\"grd_container_small\">\n";
|
||||
responseStream << "\t\t<form method=\"POST\">\n";
|
||||
responseStream << "\t\t\t<p><label style=\"width:auto\" for=\"passphrase\">Sender Passphrase</label></p>\n";
|
||||
responseStream << "\t\t\t<p><textarea style=\"width:100%;height:100px\" name=\"passphrase\">";
|
||||
#line 147 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
#line 149 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("passphrase", "") : "" );
|
||||
responseStream << "</textarea></p>\n";
|
||||
responseStream << "\t\t\t<p><label style=\"width:auto\" for=\"memo-text\">Verwendungszweck für Überweisung:</label></p>\n";
|
||||
responseStream << "\t\t\t<p><textarea name=\"memo\" id=\"memo-text\" rows=\"4\">";
|
||||
#line 149 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
#line 151 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("memo-text", "") : "" );
|
||||
responseStream << "</textarea></p>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<label for=\"recevier\">Empfänger Public Key Hex</label>\n";
|
||||
responseStream << "\t\t\t\t<input id=\"recevier\" type=\"recevier\" recevier=\"email\" value=\"";
|
||||
#line 152 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
#line 154 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("recevier") : "" );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
@ -257,15 +259,15 @@ void PassphrasedTransaction::handleRequest(Poco::Net::HTTPServerRequest& request
|
||||
responseStream << "\t\t</form>\n";
|
||||
responseStream << "\t\t</fieldset>\n";
|
||||
responseStream << "\t";
|
||||
#line 157 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
#line 159 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
} else if(PAGE_STATE_SUCCESS == state) { responseStream << "\n";
|
||||
responseStream << "\t\t<p>Gradidos wurden erfolgreich überwiesen.</p>\n";
|
||||
responseStream << "\t\t<a href=\"";
|
||||
#line 159 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
#line 161 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
responseStream << "/passphrased_transaction\">Weitere Gradidos überweisen</a>\n";
|
||||
responseStream << "\t";
|
||||
#line 160 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
#line 162 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</div>\n";
|
||||
// begin include footer.cpsp
|
||||
|
||||
164
login_server/src/cpp/HTTPInterface/PassphrasedTransaction.cpsp
Normal file
164
login_server/src/cpp/HTTPInterface/PassphrasedTransaction.cpsp
Normal file
@ -0,0 +1,164 @@
|
||||
<%@ page class="PassphrasedTransaction" %>
|
||||
<%@ page form="true" %>
|
||||
<%@ page compressed="true" %>
|
||||
<%@ page baseClass="PageRequestMessagedHandler" %>
|
||||
<%@ header include="PageRequestMessagedHandler.h" %>
|
||||
<%!
|
||||
#include "../SingletonManager/MemoryManager.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../Crypto/KeyPairEd25519.h"
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
#include "Poco/JSON/Object.h"
|
||||
#include "Poco/JSON/Parser.h"
|
||||
#include "Poco/Net/HTTPSClientSession.h"
|
||||
#include "Poco/Net/HTTPRequest.h"
|
||||
#include "Poco/Net/HTTPResponse.h"
|
||||
|
||||
enum PageState {
|
||||
PAGE_STATE_INPUT,
|
||||
PAGE_STATE_SUCCESS
|
||||
};
|
||||
%>
|
||||
<%%
|
||||
std::string pageName = "Gradidos mit Passphrase überweisen";
|
||||
PageState state = PAGE_STATE_INPUT;
|
||||
Mnemonic* wordSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER_FIXED_CASES];
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto mm = MemoryManager::getInstance();
|
||||
std::string errorString ="";
|
||||
|
||||
if(!form.empty()) {
|
||||
auto passphrase = form.get("passphrase", "");
|
||||
auto passphrase_obj = Passphrase::create(passphrase, wordSource);
|
||||
|
||||
bool keysGenerated = false;
|
||||
KeyPairEd25519* keys = nullptr;
|
||||
if(!passphrase_obj.isNull()) {
|
||||
addError(new Error("Passphrase", "Fehler beim validieren der Passphrase"));
|
||||
}
|
||||
else {
|
||||
keys = KeyPairEd25519::create(passphrase_obj);
|
||||
if(!keys)
|
||||
{
|
||||
addError(new Error("Passphrase", "Konnte keine Keys aus der Passphrase generieren"));
|
||||
}
|
||||
}
|
||||
if(keys)
|
||||
{
|
||||
// create session only for transaction
|
||||
int session_id = 0;
|
||||
auto session = sm->getNewSession(&session_id);
|
||||
// create payload
|
||||
Poco::JSON::Object requestJson;
|
||||
Poco::JSON::Object pubkeys;
|
||||
pubkeys.set("sender", keys->getPublicKeyHex());
|
||||
pubkeys.set("receiver", form.get("recevier", ""));
|
||||
requestJson.set("method", "moveTransaction");
|
||||
requestJson.set("pubkeys", pubkeys);
|
||||
requestJson.set("memo", form.get("memo", ""));
|
||||
requestJson.set("session_id", session_id);
|
||||
|
||||
printf("[PassphrasedTransaction] prepare request\n");
|
||||
|
||||
// send to php server
|
||||
Poco::Net::HTTPSClientSession httpsClientSession(ServerConfig::g_php_serverHost, 443);
|
||||
Poco::Net::HTTPRequest request(Poco::Net::HTTPRequest::HTTP_POST, "/JsonRequestHandler");
|
||||
|
||||
request.setChunkedTransferEncoding(true);
|
||||
std::ostream& requestStream = httpsClientSession.sendRequest(request);
|
||||
requestJson.stringify(requestStream);
|
||||
|
||||
Poco::Net::HTTPResponse response;
|
||||
std::istream& request_stream = httpsClientSession.receiveResponse(response);
|
||||
|
||||
std::stringstream responseStringStream;
|
||||
for (std::string line; std::getline(request_stream, line); ) {
|
||||
responseStringStream << line << std::endl;
|
||||
}
|
||||
|
||||
// extract parameter from request
|
||||
Poco::JSON::Parser jsonParser;
|
||||
Poco::Dynamic::Var parsedJson;
|
||||
|
||||
printf("[PassphrasedTransaction] parse request result\n");
|
||||
try {
|
||||
parsedJson = jsonParser.parse(responseStringStream);
|
||||
|
||||
Poco::JSON::Object object = *parsedJson.extract<Poco::JSON::Object::Ptr>();
|
||||
auto jsonState = object.get("state");
|
||||
std::string stateString = jsonState.convert<std::string>();
|
||||
if (stateString == "error") {
|
||||
addError(new Error("Transfer", "php server return error"));
|
||||
if (!object.isNull("msg")) {
|
||||
addError(new ParamError("php server", "msg:", object.get("msg").convert<std::string>().data()));
|
||||
}
|
||||
if (!object.isNull("details")) {
|
||||
addError(new ParamError("php server", "details:", object.get("details").convert<std::string>().data()));
|
||||
}
|
||||
} else if(stateString == "success") {
|
||||
printf("[PassphrasedTransaction] request success, wait on transaction ready\n");
|
||||
auto currentActiveTransaction = session->getNextReadyTransaction();
|
||||
while(currentActiveTransaction.isNull()) {
|
||||
Poco::Thread::sleep(10);
|
||||
currentActiveTransaction = session->getNextReadyTransaction();
|
||||
}
|
||||
auto transaction_body = currentActiveTransaction->getTransactionBody();
|
||||
if(transaction_body.isNull() || !transaction_body->isTransfer()) {
|
||||
addError(new Error("Transaction", "Falsche Transaktion, bitte erst alle anderen Transaktionen abschließen und dann Seite neuladen"));
|
||||
} else {
|
||||
//auto signing = new SigningTransaction(currentActiveTransaction, user);
|
||||
printf("[PassphrasedTransaction] cannot sign, implementation missing\n");
|
||||
/*if(!signing->run()) {
|
||||
|
||||
} else {
|
||||
addError(new Error("Transaction", "Fehler beim signieren, bitter erneut versuchen"));
|
||||
}*/
|
||||
// remove transaction from list
|
||||
//mSession->finalizeTransaction(true, true);
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
//printf("[JsonRequestHandler::handleRequest] Exception: %s\n", ex.displayText().data());
|
||||
addError(new ParamError("Transfer", "Fehler beim erstellen der Transaktion, bitte erneut versuchen", ex.displayText().data()));
|
||||
errorString = responseStringStream.str();
|
||||
sm->releaseSession(session);
|
||||
session = nullptr;
|
||||
}
|
||||
if(session) {
|
||||
sm->releaseSession(session);
|
||||
}
|
||||
delete keys;
|
||||
keys = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
%><%@ include file="header_old.cpsp" %>
|
||||
<% if("" == errorString) { %>
|
||||
<%= errorString %>
|
||||
<% } %>
|
||||
<div class="grd_container">
|
||||
<%= getErrorsHtml() %>
|
||||
<% if(PAGE_STATE_INPUT == state) { %>
|
||||
|
||||
<fieldset class="grd_container_small">
|
||||
<form method="POST">
|
||||
<p><label style="width:auto" for="passphrase">Sender Passphrase</label></p>
|
||||
<p><textarea style="width:100%;height:100px" name="passphrase"><%= !form.empty() ? form.get("passphrase", "") : "" %></textarea></p>
|
||||
<p><label style="width:auto" for="memo-text">Verwendungszweck für Überweisung:</label></p>
|
||||
<p><textarea name="memo" id="memo-text" rows="4"><%= !form.empty() ? form.get("memo-text", "") : "" %></textarea></p>
|
||||
<p class="grd_small">
|
||||
<label for="recevier">Empfänger Public Key Hex</label>
|
||||
<input id="recevier" type="recevier" recevier="email" value="<%= !form.empty() ? form.get("recevier") : "" %>"/>
|
||||
</p>
|
||||
<p><input type="submit" style="width:auto" name="transfer" value="Guthaben auf neue Adresse überweisen!"></p>
|
||||
</form>
|
||||
</fieldset>
|
||||
<% } else if(PAGE_STATE_SUCCESS == state) { %>
|
||||
<p>Gradidos wurden erfolgreich überwiesen.</p>
|
||||
<a href="<%= ServerConfig::g_serverPath %>/passphrased_transaction">Weitere Gradidos überweisen</a>
|
||||
<% } %>
|
||||
</div>
|
||||
<%@ include file="footer.cpsp" %>
|
||||
@ -5,12 +5,16 @@
|
||||
#include "Poco/DeflatingStream.h"
|
||||
|
||||
|
||||
#line 7 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\registerAdmin.cpsp"
|
||||
#line 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerAdmin.cpsp"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../controller/Group.h"
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
|
||||
#include "Poco/Net/HTTPCookie.h"
|
||||
#include "../ServerConfig.h"
|
||||
#line 1 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#line 1 "D:\\code\\gradido\\gradido_login_server_grpc\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
@ -29,21 +33,37 @@ void RegisterAdminPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poc
|
||||
if (_compressResponse) response.set("Content-Encoding", "gzip");
|
||||
|
||||
Poco::Net::HTMLForm form(request, request.stream());
|
||||
#line 12 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\registerAdmin.cpsp"
|
||||
#line 18 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerAdmin.cpsp"
|
||||
|
||||
const char* pageName = "Admin Registrieren";
|
||||
//auto sm = SessionManager::getInstance();
|
||||
auto sm = SessionManager::getInstance();
|
||||
|
||||
bool userReturned = false;
|
||||
|
||||
if(!form.empty()) {
|
||||
userReturned = mSession->adminCreateUser(
|
||||
form.get("register-first-name", ""),
|
||||
form.get("register-last-name", ""),
|
||||
form.get("register-email", "")
|
||||
);
|
||||
getErrors(mSession);
|
||||
auto group_id_string = form.get("register-group", "0");
|
||||
int group_id = 0;
|
||||
if(!sm->isValid(group_id_string, VALIDATE_ONLY_INTEGER)) {
|
||||
addError(new Error("Group id", "group_id not integer"));
|
||||
} else {
|
||||
if(DataTypeConverter::strToInt(group_id_string, group_id) != DataTypeConverter::NUMBER_PARSE_OKAY) {
|
||||
addError(new Error("Int Convert Error", "Error converting group_id to int"));
|
||||
}
|
||||
}
|
||||
if(!errorCount()) {
|
||||
userReturned = mSession->adminCreateUser(
|
||||
form.get("register-first-name", ""),
|
||||
form.get("register-last-name", ""),
|
||||
form.get("register-email", ""),
|
||||
group_id,
|
||||
getBaseUrl()
|
||||
);
|
||||
getErrors(mSession);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
auto groups = controller::Group::listAll();
|
||||
|
||||
|
||||
std::ostream& _responseStream = response.send();
|
||||
@ -58,12 +78,12 @@ void RegisterAdminPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poc
|
||||
responseStream << "<meta charset=\"UTF-8\">\n";
|
||||
responseStream << "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\n";
|
||||
responseStream << "<title>Gradido Login Server: ";
|
||||
#line 9 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_old.cpsp"
|
||||
#line 9 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
responseStream << ( pageName );
|
||||
responseStream << "</title>\n";
|
||||
responseStream << "<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"css/styles.min.css\">-->\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 11 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_old.cpsp"
|
||||
#line 11 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "/css/styles.css\">\n";
|
||||
responseStream << "<style type=\"text/css\" >\n";
|
||||
@ -108,7 +128,7 @@ void RegisterAdminPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poc
|
||||
responseStream << "<div class=\"versionstring dev-info\">\n";
|
||||
responseStream << "\t<p class=\"grd_small\">Login Server in Entwicklung</p>\n";
|
||||
responseStream << "\t<p class=\"grd_small\">Alpha ";
|
||||
#line 53 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_old.cpsp"
|
||||
#line 53 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
responseStream << ( ServerConfig::g_versionString );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "</div>\n";
|
||||
@ -117,11 +137,11 @@ void RegisterAdminPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poc
|
||||
responseStream << "<div class=\"grd_container\">\n";
|
||||
responseStream << "\t<h1>Einen neuen Account anlegen</h1>\n";
|
||||
responseStream << "\t";
|
||||
#line 31 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\registerAdmin.cpsp"
|
||||
#line 53 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerAdmin.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 32 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\registerAdmin.cpsp"
|
||||
#line 54 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerAdmin.cpsp"
|
||||
if(!form.empty() && userReturned) { responseStream << "\n";
|
||||
responseStream << "\t\t<div class=\"grd_text-max-width\">\n";
|
||||
responseStream << "\t\t\t<div class=\"grd_text\">\n";
|
||||
@ -129,11 +149,11 @@ void RegisterAdminPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poc
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t\t<a href=\"";
|
||||
#line 38 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\registerAdmin.cpsp"
|
||||
#line 60 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerAdmin.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverHost );
|
||||
responseStream << "\">Zurück</a>\n";
|
||||
responseStream << "\t";
|
||||
#line 39 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\registerAdmin.cpsp"
|
||||
#line 61 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerAdmin.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t<form method=\"POST\">\n";
|
||||
responseStream << "\t\t\n";
|
||||
@ -143,30 +163,49 @@ void RegisterAdminPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poc
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<label for=\"register-first-name\">Vorname</label>\n";
|
||||
responseStream << "\t\t\t\t<input id=\"register-first-name\" type=\"text\" name=\"register-first-name\" value=\"";
|
||||
#line 47 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\registerAdmin.cpsp"
|
||||
#line 69 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerAdmin.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("register-first-name") : "" );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<label for=\"register-last-name\">Nachname</label>\n";
|
||||
responseStream << "\t\t\t\t<input id=\"register-last-name\" type=\"text\" name=\"register-last-name\" value=\"";
|
||||
#line 51 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\registerAdmin.cpsp"
|
||||
#line 73 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerAdmin.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("register-last-name") : "" );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<label for=\"register-email\">E-Mail</label>\n";
|
||||
responseStream << "\t\t\t\t<input id=\"register-email\" type=\"email\" name=\"register-email\" value=\"";
|
||||
#line 55 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\registerAdmin.cpsp"
|
||||
#line 77 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerAdmin.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("register-email") : "" );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t<select class=\"form-control\" name=\"register-group\">\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerAdmin.cpsp"
|
||||
for(auto it = groups.begin(); it != groups.end(); it++) {
|
||||
auto group_model = (*it)->getModel(); responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<option title=\"";
|
||||
#line 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerAdmin.cpsp"
|
||||
responseStream << ( group_model->getDescription() );
|
||||
responseStream << "\" value=\"";
|
||||
#line 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerAdmin.cpsp"
|
||||
responseStream << ( group_model->getID() );
|
||||
responseStream << "\">";
|
||||
#line 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerAdmin.cpsp"
|
||||
responseStream << ( group_model->getName() );
|
||||
responseStream << "</option>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 83 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerAdmin.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t</select>\n";
|
||||
responseStream << "\t\t</fieldset>\n";
|
||||
responseStream << "\t\t<input class=\"grd-form-bn grd-form-bn-succeed\" type=\"submit\" name=\"submit\" value=\"Anmelden\">\n";
|
||||
responseStream << "\t\t\n";
|
||||
responseStream << "\t</form>\n";
|
||||
responseStream << "\t";
|
||||
#line 61 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\registerAdmin.cpsp"
|
||||
#line 89 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerAdmin.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</div>\n";
|
||||
// begin include footer.cpsp
|
||||
@ -176,14 +215,14 @@ void RegisterAdminPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poc
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"bottomleft\">\n";
|
||||
responseStream << " ";
|
||||
#line 6 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\footer.cpsp"
|
||||
#line 6 "F:\\Gradido\\gradido_login_server\\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"
|
||||
#line 10 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\footer.cpsp"
|
||||
responseStream << ( ServerConfig::g_versionString );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << " </div>\n";
|
||||
|
||||
@ -8,7 +8,10 @@
|
||||
#line 6 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerDirect.cpsp"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../controller/Group.h"
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
#include "Poco/Net/HTTPCookie.h"
|
||||
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
@ -22,14 +25,18 @@ void RegisterDirectPage::handleRequest(Poco::Net::HTTPServerRequest& request, Po
|
||||
if (_compressResponse) response.set("Content-Encoding", "gzip");
|
||||
|
||||
Poco::Net::HTMLForm form(request, request.stream());
|
||||
#line 10 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerDirect.cpsp"
|
||||
#line 13 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerDirect.cpsp"
|
||||
|
||||
const char* pageName = "Registrieren";
|
||||
auto sm = SessionManager::getInstance();
|
||||
|
||||
bool userReturned = false;
|
||||
std::string caller_uri;
|
||||
|
||||
if(!form.empty()) {
|
||||
|
||||
caller_uri = form.get("caller_uri", "");
|
||||
|
||||
if(form.get("register-password2", "") != form.get("register-password", "")) {
|
||||
addError(new Error("Passwort", "Passwörter sind nicht identisch."), false);
|
||||
} else {
|
||||
@ -38,23 +45,39 @@ void RegisterDirectPage::handleRequest(Poco::Net::HTTPServerRequest& request, Po
|
||||
session = sm->getNewSession();
|
||||
auto user_host = request.clientAddress().host();
|
||||
session->setClientIp(user_host);
|
||||
session->setCallerUri(caller_uri);
|
||||
response.addCookie(session->getLoginCookie());
|
||||
}
|
||||
|
||||
userReturned = session->createUserDirect(
|
||||
form.get("register-first-name", ""),
|
||||
form.get("register-last-name", ""),
|
||||
form.get("register-email", ""),
|
||||
form.get("register-password", "")
|
||||
);
|
||||
printf("caller uri after session: %s\n", caller_uri.data());
|
||||
auto email = form.get("register-email", "");
|
||||
auto password = form.get("register-password", "");
|
||||
if(email != "" && password != "") {
|
||||
|
||||
userReturned = session->createUserDirect(
|
||||
form.get("register-first-name", ""),
|
||||
form.get("register-last-name", ""),
|
||||
email,
|
||||
password,
|
||||
getBaseUrl()
|
||||
);
|
||||
}
|
||||
|
||||
getErrors(session);
|
||||
|
||||
if(!errorCount()) {
|
||||
if(!errorCount() && userReturned) {
|
||||
auto user_host = request.clientAddress().host();
|
||||
session->setClientIp(user_host);
|
||||
response.addCookie(session->getLoginCookie());
|
||||
response.redirect(ServerConfig::g_php_serverPath + "/");
|
||||
if(caller_uri == "") {
|
||||
caller_uri = session->getCallerUri();
|
||||
}
|
||||
if(caller_uri != "") {
|
||||
std::string redirect_url = caller_uri;
|
||||
redirect_url += "?session_id=" + std::to_string(session->getHandle());
|
||||
response.redirect(redirect_url);
|
||||
return;
|
||||
}
|
||||
response.redirect(getBaseUrl() + "/userUpdateGroup");
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -64,6 +87,8 @@ void RegisterDirectPage::handleRequest(Poco::Net::HTTPServerRequest& request, Po
|
||||
// remove old cookies if exist
|
||||
sm->deleteLoginCookies(request, response);
|
||||
}
|
||||
|
||||
|
||||
#line 3 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
|
||||
bool withMaterialIcons = false;
|
||||
@ -121,7 +146,7 @@ void RegisterDirectPage::handleRequest(Poco::Net::HTTPServerRequest& request, Po
|
||||
responseStream << " </div>";
|
||||
// end include header.cpsp
|
||||
responseStream << "\n";
|
||||
#line 52 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerDirect.cpsp"
|
||||
#line 77 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerDirect.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "<div class=\"center-form-container\">\n";
|
||||
@ -133,18 +158,18 @@ void RegisterDirectPage::handleRequest(Poco::Net::HTTPServerRequest& request, Po
|
||||
responseStream << "\t\t\t<p>Bitte gib deine Daten um einen Account anzulegen:</p>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"register-first-name\">Vorname</label>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"register-first-name\" type=\"text\" name=\"register-first-name\" value=\"";
|
||||
#line 61 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerDirect.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("register-first-name") : "" );
|
||||
#line 86 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerDirect.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("register-first-name", "") : "" );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"register-last-name\">Nachname</label>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"register-last-name\" type=\"text\" name=\"register-last-name\" value=\"";
|
||||
#line 63 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerDirect.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("register-last-name") : "" );
|
||||
#line 88 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerDirect.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("register-last-name", "") : "" );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"register-email\">E-Mail</label>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"register-email\" type=\"email\" name=\"register-email\" value=\"";
|
||||
#line 65 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerDirect.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("register-email") : "" );
|
||||
#line 90 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerDirect.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("register-email", "") : "" );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"register-password\">Passwort</label>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"register-password\" type=\"password\" name=\"register-password\"/>\n";
|
||||
|
||||
@ -1,211 +0,0 @@
|
||||
#include "RegisterPage.h"
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
#include "Poco/Net/HTTPServerResponse.h"
|
||||
#include "Poco/Net/HTMLForm.h"
|
||||
#include "Poco/DeflatingStream.h"
|
||||
|
||||
|
||||
#line 6 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\register.cpsp"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "Poco/Net/HTTPCookie.h"
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
void RegisterPage::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 10 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\register.cpsp"
|
||||
|
||||
const char* pageName = "Registrieren";
|
||||
auto sm = SessionManager::getInstance();
|
||||
|
||||
bool userReturned = false;
|
||||
|
||||
if(!form.empty()) {
|
||||
if(form.get("register-password2", "") != form.get("register-password", "")) {
|
||||
addError(new Error("Passwort", "Passwörter sind nicht identisch."), false);
|
||||
} else {
|
||||
auto session = sm->getSession(request);
|
||||
if(!session) {
|
||||
session = sm->getNewSession();
|
||||
auto user_host = request.clientAddress().host();
|
||||
session->setClientIp(user_host);
|
||||
response.addCookie(session->getLoginCookie());
|
||||
}
|
||||
|
||||
userReturned = session->createUser(
|
||||
form.get("register-first-name", ""),
|
||||
form.get("register-last-name", ""),
|
||||
form.get("register-email", ""),
|
||||
form.get("register-password", "")
|
||||
);
|
||||
getErrors(session);
|
||||
}
|
||||
|
||||
} else {
|
||||
// on enter login page with empty form
|
||||
// remove old cookies if exist
|
||||
sm->deleteLoginCookies(request, response);
|
||||
}
|
||||
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_old.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.0\">\n";
|
||||
responseStream << "<title>Gradido Login Server: ";
|
||||
#line 9 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
responseStream << ( pageName );
|
||||
responseStream << "</title>\n";
|
||||
responseStream << "<!--<link rel=\"stylesheet\" type=\"text/css\" href=\"css/styles.min.css\">-->\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 11 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "/css/styles.css\">\n";
|
||||
responseStream << "<style type=\"text/css\" >\n";
|
||||
responseStream << ".grd_container\n";
|
||||
responseStream << "{\n";
|
||||
responseStream << " max-width:820px;\n";
|
||||
responseStream << " margin-left:auto;\n";
|
||||
responseStream << " margin-right:auto;\n";
|
||||
responseStream << "}\n";
|
||||
responseStream << "\n";
|
||||
responseStream << "input:not([type='radio']) {\n";
|
||||
responseStream << "\twidth:200px;\n";
|
||||
responseStream << "}\n";
|
||||
responseStream << "label:not(.grd_radio_label) {\n";
|
||||
responseStream << "\twidth:80px;\n";
|
||||
responseStream << "\tdisplay:inline-block;\n";
|
||||
responseStream << "}\n";
|
||||
responseStream << ".grd_container_small\n";
|
||||
responseStream << "{\n";
|
||||
responseStream << " max-width:500px;\n";
|
||||
responseStream << "}\n";
|
||||
responseStream << ".grd_text {\n";
|
||||
responseStream << " max-width:550px;\n";
|
||||
responseStream << " margin-bottom: 5px;\n";
|
||||
responseStream << "}\n";
|
||||
responseStream << ".dev-info {\n";
|
||||
responseStream << "\tposition: fixed;\n";
|
||||
responseStream << "\tcolor:grey;\n";
|
||||
responseStream << "\tfont-size: smaller;\n";
|
||||
responseStream << "\tleft:8px;\n";
|
||||
responseStream << "}\n";
|
||||
responseStream << ".grd-time-used { \n";
|
||||
responseStream << " bottom:0;\n";
|
||||
responseStream << "} \n";
|
||||
responseStream << "\n";
|
||||
responseStream << ".versionstring {\n";
|
||||
responseStream << "\ttop:0;\n";
|
||||
responseStream << "}\n";
|
||||
responseStream << "</style>\n";
|
||||
responseStream << "</head>\n";
|
||||
responseStream << "<body>\n";
|
||||
responseStream << "<div class=\"versionstring dev-info\">\n";
|
||||
responseStream << "\t<p class=\"grd_small\">Login Server in Entwicklung</p>\n";
|
||||
responseStream << "\t<p class=\"grd_small\">Alpha ";
|
||||
#line 53 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
responseStream << ( ServerConfig::g_versionString );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "</div>\n";
|
||||
// end include header_old.cpsp
|
||||
responseStream << "\n";
|
||||
responseStream << "<div class=\"grd_container\">\n";
|
||||
responseStream << "\t<h1>Einen neuen Account anlegen</h1>\n";
|
||||
responseStream << "\t";
|
||||
#line 45 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\register.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 46 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\register.cpsp"
|
||||
if(!form.empty() && userReturned) { responseStream << "\n";
|
||||
responseStream << "\t\t<div class=\"grd_text-max-width\">\n";
|
||||
responseStream << "\t\t\t<div class=\"grd_text\">\n";
|
||||
responseStream << "\t\t\t\tDeine Anmeldung wird verarbeitet und es wird dir eine E-Mail zugeschickt. \n";
|
||||
responseStream << "\t\t\t\tWenn sie da ist, befolge ihren Anweisungen. \n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t";
|
||||
#line 53 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\register.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t<form method=\"POST\">\n";
|
||||
responseStream << "\t\t\n";
|
||||
responseStream << "\t\t<fieldset class=\"grd_container_small\">\n";
|
||||
responseStream << "\t\t\t<legend>Account anlegen</legend>\n";
|
||||
responseStream << "\t\t\t<p>Bitte gebe deine Daten um einen Account anzulegen</p>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<label for=\"register-first-name\">Vorname</label>\n";
|
||||
responseStream << "\t\t\t\t<input id=\"register-first-name\" type=\"text\" name=\"register-first-name\" value=\"";
|
||||
#line 61 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\register.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("register-first-name") : "" );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<label for=\"register-last-name\">Nachname</label>\n";
|
||||
responseStream << "\t\t\t\t<input id=\"register-last-name\" type=\"text\" name=\"register-last-name\" value=\"";
|
||||
#line 65 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\register.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("register-last-name") : "" );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<label for=\"register-email\">E-Mail</label>\n";
|
||||
responseStream << "\t\t\t\t<input id=\"register-email\" type=\"email\" name=\"register-email\" value=\"";
|
||||
#line 69 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\register.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("register-email") : "" );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<label for=\"register-password\">Passwort</label>\n";
|
||||
responseStream << "\t\t\t\t<input id=\"register-password\" type=\"password\" name=\"register-password\"/>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<label for=\"register-password\">Passwort Bestätigung</label>\n";
|
||||
responseStream << "\t\t\t\t<input id=\"register-password2\" type=\"password\" name=\"register-password2\"/>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t</fieldset>\n";
|
||||
responseStream << "\t\t<input class=\"grd-form-bn grd-form-bn-succeed\" type=\"submit\" name=\"submit\" value=\"Anmelden\">\n";
|
||||
responseStream << "\t\t\n";
|
||||
responseStream << "\t</form>\n";
|
||||
responseStream << "\t";
|
||||
#line 83 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\register.cpsp"
|
||||
} responseStream << "\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\\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\\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
|
||||
responseStream << "\n";
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
@ -1,18 +0,0 @@
|
||||
#ifndef RegisterPage_INCLUDED
|
||||
#define RegisterPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "PageRequestMessagedHandler.h"
|
||||
|
||||
|
||||
class RegisterPage: public PageRequestMessagedHandler
|
||||
{
|
||||
public:
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // RegisterPage_INCLUDED
|
||||
@ -9,11 +9,10 @@
|
||||
|
||||
#include "../SingletonManager/MemoryManager.h"
|
||||
#include "../SingletonManager/EmailManager.h"
|
||||
#include "../Crypto/KeyPair.h"
|
||||
#include "../Crypto/Passphrase.h"
|
||||
#include "../Crypto/KeyPairEd25519.h"
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
#include "../controller/UserBackups.h"
|
||||
#include "../controller/UserBackup.h"
|
||||
#include "../tasks/SigningTransaction.h"
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
@ -53,7 +52,7 @@ void RepairDefectPassphrase::handleRequest(Poco::Net::HTTPServerRequest& request
|
||||
if (_compressResponse) response.set("Content-Encoding", "gzip");
|
||||
|
||||
Poco::Net::HTMLForm form(request, request.stream());
|
||||
#line 36 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
#line 35 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
|
||||
auto mm = MemoryManager::getInstance();
|
||||
auto em = EmailManager::getInstance();
|
||||
@ -85,7 +84,7 @@ void RepairDefectPassphrase::handleRequest(Poco::Net::HTTPServerRequest& request
|
||||
else
|
||||
{
|
||||
mSession->setPassphrase(passphrase);
|
||||
auto newPassphraseModel = controller::UserBackups::create(
|
||||
auto newPassphraseModel = controller::UserBackup::create(
|
||||
user_model->getID(),
|
||||
passphrase->getString(),
|
||||
ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER_FIXED_CASES
|
||||
@ -161,11 +160,11 @@ void RepairDefectPassphrase::handleRequest(Poco::Net::HTTPServerRequest& request
|
||||
} else if(stateString == "success") {
|
||||
printf("[repairDefectPassphrase] request success, wait on transaction ready\n");
|
||||
auto currentActiveTransaction = mSession->getNextReadyTransaction();
|
||||
while(currentActiveTransaction.isNull()) {
|
||||
while(currentActiveTransaction.isNull() || currentActiveTransaction->getTransactionBody().isNull()) {
|
||||
Poco::Thread::sleep(10);
|
||||
currentActiveTransaction = mSession->getNextReadyTransaction();
|
||||
}
|
||||
if(!currentActiveTransaction->isTransfer()) {
|
||||
if(!currentActiveTransaction->getTransactionBody()->isTransfer()) {
|
||||
addError(new Error("Transaction", "Falsche Transaktion, bitte erst alle anderen Transaktionen abschließen und dann Seite neuladen"));
|
||||
} else {
|
||||
auto signing = new SigningTransaction(currentActiveTransaction, new_user);
|
||||
@ -270,26 +269,26 @@ void RepairDefectPassphrase::handleRequest(Poco::Net::HTTPServerRequest& request
|
||||
responseStream << "</div>\n";
|
||||
// end include header_old.cpsp
|
||||
responseStream << "\n";
|
||||
#line 185 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
#line 184 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
if("" != errorString) { responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 186 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
#line 185 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
responseStream << ( errorString );
|
||||
responseStream << "\n";
|
||||
#line 187 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
#line 186 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "<div class=\"grd_container\">\n";
|
||||
responseStream << "\t";
|
||||
#line 189 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
#line 188 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t<h1>Konto reparieren</h1>\n";
|
||||
responseStream << "\t<p>Der Login-Server hat festgestellt das die gespeicherte Passphrase nicht zu deinem Konto passt.</p>\n";
|
||||
responseStream << "\t";
|
||||
#line 192 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
#line 191 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
if(GENERATE_PASSPHRASE == state) { responseStream << "\n";
|
||||
responseStream << "\t\t";
|
||||
#line 193 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
#line 192 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
if(new_user->canDecryptPrivateKey()) { responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>Dein Privat Key konnte noch entschlüsselt werden. Es könnte also eine neue Passphrase generiert werden und dein aktueller Kontostand\n";
|
||||
responseStream << "\t\t\tauf die neue Adresse transferiert werden. </p>\n";
|
||||
@ -297,27 +296,27 @@ void RepairDefectPassphrase::handleRequest(Poco::Net::HTTPServerRequest& request
|
||||
responseStream << "\t\t\t\t<input type=\"submit\" style=\"width:auto;\" name=\"generate\" value=\"Neue Passphrase generieren!\">\n";
|
||||
responseStream << "\t\t\t</form>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 199 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
#line 198 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>Dein Privat Key konnte nicht entschlüsselt werden. Bitte wende dich an den Admin: <a href=\"mailto:";
|
||||
#line 200 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
#line 199 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
responseStream << ( adminEmail);
|
||||
responseStream << "\">";
|
||||
#line 200 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
#line 199 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
responseStream << ( adminEmail );
|
||||
responseStream << "</a></p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 201 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
#line 200 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 202 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
#line 201 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
} else if(SHOW_PASSPHRASE == state) { responseStream << "\n";
|
||||
responseStream << "\t\t<p>Deine neue Passphrase, bitte schreibe sie dir auf (am besten auf einen Zettel) und hebe sie gut auf. \n";
|
||||
responseStream << "\t\tDu brauchst sie wenn du dein Passwort vergessen hast oder dein Konto umziehen möchtest:</p>\n";
|
||||
responseStream << "\t\t<fieldset><legend>Deine neue Passphrase:</legend>\n";
|
||||
responseStream << "\t\t\t<div class=\"grd_container_small grd_container\">\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 207 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
#line 206 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
responseStream << ( mSession->getPassphrase()->getString() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
@ -328,15 +327,15 @@ void RepairDefectPassphrase::handleRequest(Poco::Net::HTTPServerRequest& request
|
||||
responseStream << "\t\t\t<p><input type=\"submit\" style=\"width:auto\" name=\"transfer\" value=\"Guthaben auf neue Adresse überweisen!\"></p>\n";
|
||||
responseStream << "\t\t</form>\n";
|
||||
responseStream << "\t";
|
||||
#line 215 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
#line 214 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
} else if(FINISH == state) { responseStream << "\n";
|
||||
responseStream << "\t\t<p>Neue Daten erfolgreich gespeichert, bitte logge dich nun aus. Danach kannst du dich gerne wieder einloggen und müsstest dein Guthaben wieder auf deinem Konto haben.</p>\n";
|
||||
responseStream << "\t\t<a class=\"grd-nav-bn\" href=\"";
|
||||
#line 217 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
#line 216 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath + "/logout" );
|
||||
responseStream << "\">Ausloggen</a>\n";
|
||||
responseStream << "\t";
|
||||
#line 218 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
#line 217 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</div>\n";
|
||||
// begin include footer.cpsp
|
||||
|
||||
@ -11,7 +11,7 @@
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../SingletonManager/EmailManager.h"
|
||||
#include "../controller/User.h"
|
||||
#include "../controller/UserBackups.h"
|
||||
#include "../controller/UserBackup.h"
|
||||
|
||||
enum PageState {
|
||||
PAGE_EMAIL_ASK,
|
||||
@ -95,7 +95,7 @@ void ResetPassword::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::N
|
||||
// send reset password email
|
||||
int result = 0;
|
||||
if(user_exist) {
|
||||
result = session->sendResetPasswordEmail(user, sendUserEmail);
|
||||
result = session->sendResetPasswordEmail(user, sendUserEmail, getBaseUrl());
|
||||
}
|
||||
|
||||
if(2 == result) {
|
||||
@ -187,7 +187,7 @@ void ResetPassword::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::N
|
||||
responseStream << " <div class=\"center-form-form\">\n";
|
||||
responseStream << "\t\t\t\t<form action=\"";
|
||||
#line 110 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/resetPassword\">\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"item-wrapper\">\n";
|
||||
responseStream << "\t\t\t\t\t <div class=\"form-group\">\n";
|
||||
@ -244,7 +244,7 @@ void ResetPassword::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::N
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<form action=\"";
|
||||
#line 123 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
responseStream << ( getBaseUrl() );
|
||||
responseStream << "/resetPassword\">\n";
|
||||
responseStream << "\t\t\t\t\t<label class=\"form-label\" for=\"email\">";
|
||||
#line 124 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
|
||||
@ -40,7 +40,8 @@ void SaveKeysPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
|
||||
const char* pageName = "Daten auf Server speichern?";
|
||||
bool hasErrors = mSession->errorCount() > 0;
|
||||
// crypto key only in memory, if user has tipped in his passwort in this session
|
||||
bool hasPassword = mSession->getUser()->hasCryptoKey();
|
||||
auto user = mSession->getNewUser();
|
||||
bool hasPassword = user->getModel()->hasPrivateKeyEncrypted();
|
||||
PageState state = PAGE_ASK;
|
||||
auto uri_start = ServerConfig::g_php_serverPath;//request.serverParams().getServerName();
|
||||
|
||||
@ -161,11 +162,11 @@ void SaveKeysPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
|
||||
responseStream << "<div class=\"grd_container\">\n";
|
||||
responseStream << "\t<h1>Daten speichern</h1>\n";
|
||||
responseStream << "\t";
|
||||
#line 75 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
#line 76 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 76 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
#line 77 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
if(state == PAGE_ASK) { responseStream << "\n";
|
||||
responseStream << "\t<form method=\"POST\">\n";
|
||||
responseStream << "\t\t<fieldset>\n";
|
||||
@ -180,7 +181,7 @@ void SaveKeysPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
|
||||
responseStream << "\t\t\t\t<label class=\"grd_radio_label\" for=\"save-privkey-yes\">Ja, bitte speichern!</label>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 89 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
#line 90 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
if(!hasPassword) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<p>Ich brauche nochmal dein Passwort wenn du dich für ja entscheidest.</p>\n";
|
||||
responseStream << "\t\t\t\t<p class=\"grd_small\">\n";
|
||||
@ -188,7 +189,7 @@ void SaveKeysPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
|
||||
responseStream << "\t\t\t\t\t<input id=\"save-privkey-password\" type=\"password\" name=\"save-privkey-password\"/>\n";
|
||||
responseStream << "\t\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 95 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
#line 96 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<input id=\"save-privkey-no\" type=\"radio\" name=\"save-privkey\" value=\"no\"/>\n";
|
||||
@ -213,15 +214,15 @@ void SaveKeysPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
|
||||
responseStream << "\t\t<input class=\"grd-form-bn grd-form-bn-succeed\" type=\"submit\" value=\"Speichern\">\n";
|
||||
responseStream << "\t</form>\n";
|
||||
responseStream << "\t";
|
||||
#line 118 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
#line 119 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
} else if(state == PAGE_SHOW_PUBKEY) { responseStream << "\n";
|
||||
responseStream << "\t\t<div class=\"grd_text\">\n";
|
||||
responseStream << "\t\t\t<p>";
|
||||
#line 120 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
#line 121 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
responseStream << ( gettext("Daten gespeichert!") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t<p>";
|
||||
#line 121 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
#line 122 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
responseStream << ( gettext("Deine Daten wurden verschlüsselt und gespeichert.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t<!--<p>Je nach Auswahl werden deine Daten nun verschlüsselt und gespeichert. </p>-->\n";
|
||||
@ -229,27 +230,27 @@ void SaveKeysPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Ne
|
||||
responseStream << "\t\t\t<!--<p>Deine Gradido Adresse (Hex): </p>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_textarea\">\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 126 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
responseStream << ( mSession->getUser()->getPublicKeyHex() );
|
||||
#line 127 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
responseStream << ( user->getModel()->getPublicKeyHex() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t</p>-->\n";
|
||||
responseStream << "\t\t\t<a class=\"grd-form-bn\" href=\"";
|
||||
#line 128 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
#line 129 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
responseStream << ( uri_start );
|
||||
responseStream << "\">Zurück zur Startseite</a>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t";
|
||||
#line 130 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
#line 131 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
} else if(state == PAGE_ERROR) { responseStream << "\n";
|
||||
responseStream << "\t\t<div class=\"grd_text\">\n";
|
||||
responseStream << "\t\t\t<p>Ein Fehler trat auf, bitte versuche es erneut oder wende dich an den Server-Admin</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 133 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
#line 134 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
responseStream << ( mSession->getSessionStateString() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t";
|
||||
#line 135 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
#line 136 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</div>\n";
|
||||
// begin include footer.cpsp
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
|
||||
#line 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
|
||||
#include "../Crypto/KeyPair.h"
|
||||
#include "../Crypto/KeyPairEd25519.h"
|
||||
#include "../ServerConfig.h"
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
|
||||
@ -50,16 +50,17 @@ void TranslatePassphrase::handleRequest(Poco::Net::HTTPServerRequest& request, P
|
||||
{
|
||||
|
||||
inputPassphrase = form.get("inputPassphrase", "");
|
||||
auto localPassphrase = KeyPair::filterPassphrase(inputPassphrase);
|
||||
auto localPassphrase = Passphrase::filter(inputPassphrase);
|
||||
|
||||
auto btnGenerate = form.get("btnGenerate", "");
|
||||
if("" != btnGenerate) {
|
||||
mSession->generatePassphrase();
|
||||
localPassphrase = mSession->getOldPassphrase();
|
||||
auto passphrase_gen = Passphrase::generate(wordSource);
|
||||
|
||||
localPassphrase = passphrase_gen->getString();
|
||||
inputPassphrase = localPassphrase;
|
||||
}
|
||||
|
||||
if(localPassphrase != "" && !User::validatePassphrase(localPassphrase, &wordSource)) {
|
||||
auto passphrase_object = Passphrase::create(localPassphrase, wordSource);
|
||||
if(localPassphrase != "" && passphrase_object.isNull() || !passphrase_object->checkIfValid()) {
|
||||
addError(new Error(
|
||||
gettext("Fehler"),
|
||||
gettext("Diese Passphrase ist ungültig, bitte überprüfen oder neu generieren (lassen).")
|
||||
@ -70,7 +71,8 @@ void TranslatePassphrase::handleRequest(Poco::Net::HTTPServerRequest& request, P
|
||||
} else {
|
||||
targetSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER];
|
||||
}
|
||||
passphrase = KeyPair::passphraseTransform(localPassphrase, wordSource, targetSource);
|
||||
auto transformed_passphrase_obj = passphrase_object->transform(targetSource);
|
||||
passphrase = transformed_passphrase_obj->getString();
|
||||
}
|
||||
|
||||
|
||||
@ -197,7 +199,7 @@ void TranslatePassphrase::handleRequest(Poco::Net::HTTPServerRequest& request, P
|
||||
responseStream << "\n";
|
||||
responseStream << "<div class=\"row mb-3\" style=\"margin-top:70px;\">\n";
|
||||
responseStream << "\t<h2 class=\"mx-auto\">";
|
||||
#line 59 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
#line 61 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
responseStream << ( gettext("Passphrase umwandeln") );
|
||||
responseStream << "</h2>\n";
|
||||
responseStream << "</div>\n";
|
||||
@ -208,57 +210,57 @@ void TranslatePassphrase::handleRequest(Poco::Net::HTTPServerRequest& request, P
|
||||
responseStream << "\t <div class=\"col-md-12 col-lg-12 \">\n";
|
||||
responseStream << "\t\t<div class=\"alert alert-orange\">\n";
|
||||
responseStream << "\t\t <h5 class=\"alert-heading\">";
|
||||
#line 67 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
#line 69 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
responseStream << ( gettext("Was zu tun ist:") );
|
||||
responseStream << "</h5>\n";
|
||||
responseStream << "\t\t <p>";
|
||||
#line 68 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
#line 70 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
responseStream << ( gettext("Kopiere/schreibe deine Passphrase in die Textbox und du bekommst sie in die jeweils andere Sprache umgewandelt.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t <p>";
|
||||
#line 69 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
#line 71 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
responseStream << ( gettext("Du kannst mit beiden Varianten dein Konto wiederherstellen oder dein Passwort ändern.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t </div>\n";
|
||||
responseStream << "\t <div class=\"col-lg-12 col-md-12 mb-5\">\n";
|
||||
responseStream << "\t\t<form action=\"";
|
||||
#line 73 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
#line 75 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
responseStream << ( uri_start );
|
||||
responseStream << "/transform_passphrase\">\n";
|
||||
responseStream << "\t\t <div class=\"form-group row-showcase_row_area\">\n";
|
||||
responseStream << "\t\t\t<textarea name=\"inputPassphrase\" cols=\"20\" rows=\"10\" id=\"inputPassphrase\" class=\"form-control\" placeholder=\"";
|
||||
#line 75 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
#line 77 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
responseStream << ( gettext("deine Passphrase") );
|
||||
responseStream << "\">";
|
||||
#line 75 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
#line 77 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
responseStream << ( inputPassphrase );
|
||||
responseStream << "</textarea>\n";
|
||||
responseStream << "\t\t </div>\n";
|
||||
responseStream << "\t\t <input name=\"btnTransform\" type=\"submit\" value=\"Umwandeln\" class=\"btn btn btn-orange\">\n";
|
||||
responseStream << "\t\t ";
|
||||
#line 78 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
#line 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
if(model::table::ROLE_ADMIN == role) { responseStream << "\n";
|
||||
responseStream << "\t\t\t<input name=\"btnGenerate\" type=\"submit\" value=\"Neue generieren\" class=\"btn btn-secondary\">\n";
|
||||
responseStream << "\t\t ";
|
||||
#line 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
#line 82 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t</form>\n";
|
||||
responseStream << "\t </div>\n";
|
||||
responseStream << "\t ";
|
||||
#line 83 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
#line 85 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
if(passphrase != "") { responseStream << "\n";
|
||||
responseStream << "\t\t<div class=\"col-lg-12 col-md-12\">\n";
|
||||
responseStream << "\t\t\t<div class=\"alert alert-success\">\n";
|
||||
responseStream << "\t\t\t\t<h5 class=\"alert-heading\">Umgewandelte Passphrase: </h5>\n";
|
||||
responseStream << "\t\t\t\t<p>";
|
||||
#line 87 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
#line 89 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
responseStream << ( passphrase );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t ";
|
||||
#line 90 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
#line 92 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t </div>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
|
||||
303
login_server/src/cpp/HTTPInterface/UserUpdateGroupPage.cpp
Normal file
303
login_server/src/cpp/HTTPInterface/UserUpdateGroupPage.cpp
Normal file
@ -0,0 +1,303 @@
|
||||
#include "UserUpdateGroupPage.h"
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
#include "Poco/Net/HTTPServerResponse.h"
|
||||
#include "Poco/Net/HTMLForm.h"
|
||||
#include "Poco/DeflatingStream.h"
|
||||
|
||||
|
||||
#line 6 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
|
||||
|
||||
#include "../controller/Group.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../SingletonManager/PendingTasksManager.h"
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
#include "../model/gradido/Transaction.h"
|
||||
|
||||
enum PageState {
|
||||
PAGE_STATE_OVERVIEW,
|
||||
PAGE_STATE_REQUEST_IS_RUNNING,
|
||||
PAGE_STATE_NO_GROUPS
|
||||
};
|
||||
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
UserUpdateGroupPage::UserUpdateGroupPage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void UserUpdateGroupPage::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 21 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
|
||||
const char* pageName = gettext("Gruppe wählen");
|
||||
auto user = mSession->getNewUser();
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto pt = PendingTasksManager::getInstance();
|
||||
PageState state = PAGE_STATE_OVERVIEW;
|
||||
|
||||
auto groups = controller::Group::listAll();
|
||||
Poco::AutoPtr<controller::Group> choosen_group;
|
||||
|
||||
if(!form.empty()) {
|
||||
auto group_id_string = form.get("group_id", "");
|
||||
if(group_id_string == "") {
|
||||
addError(new Error(gettext("Fehler"), gettext("HTML Form Fehler")));
|
||||
} else {
|
||||
int group_id = 0;
|
||||
if(DataTypeConverter::NUMBER_PARSE_OKAY == DataTypeConverter::strToInt(group_id_string, group_id)) {
|
||||
std::string group_alias = "";
|
||||
|
||||
for(auto it = groups.begin(); it != groups.end(); it++) {
|
||||
auto group_model = (*it)->getModel();
|
||||
if(group_model->getID() == group_id) {
|
||||
choosen_group = *it;
|
||||
}
|
||||
}
|
||||
if(choosen_group.isNull()) {
|
||||
addError(new Error(gettext("Fehler"), gettext("Interner Fehler")));
|
||||
} else {
|
||||
auto addGroupMemberTransaction =
|
||||
model::gradido::Transaction::createGroupMemberUpdate(user, choosen_group);
|
||||
response.redirect(ServerConfig::g_serverPath + "/checkTransactions");
|
||||
return;
|
||||
state = PAGE_STATE_REQUEST_IS_RUNNING;
|
||||
}
|
||||
} else {
|
||||
addError(new Error(gettext("Fehler"), gettext("HTML Value Type Fehler")));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
if(groups.size() == 0) {
|
||||
if(user->getModel()->getRole() == model::table::ROLE_ADMIN) {
|
||||
response.redirect(getBaseUrl() + "/groups");
|
||||
return;
|
||||
}
|
||||
state = PAGE_STATE_NO_GROUPS;
|
||||
|
||||
} else {
|
||||
auto referer = request.find("Referer");
|
||||
std::string refererString;
|
||||
if (referer != request.end()) {
|
||||
refererString = referer->second;
|
||||
}
|
||||
|
||||
|
||||
|
||||
pt->lock("userUpdateGroup Page");
|
||||
auto has_pending_group_add_member_task = pt->hasPendingTask(user, model::table::TASK_TYPE_GROUP_ADD_MEMBER);
|
||||
auto referer_was_checkTransaction = refererString.find("checkTransactions") != std::string::npos;
|
||||
if(has_pending_group_add_member_task) {
|
||||
state = PAGE_STATE_REQUEST_IS_RUNNING;
|
||||
std::vector<Poco::AutoPtr<controller::PendingTask>> tasks = pt->getPendingTasks(user, model::table::TASK_TYPE_GROUP_ADD_MEMBER);
|
||||
// should be only one
|
||||
Poco::AutoPtr<model::gradido::Transaction> transaction = tasks[0].cast<model::gradido::Transaction>();
|
||||
if(transaction->getSignCount() == 0) {
|
||||
|
||||
pt->unlock();
|
||||
response.redirect(getBaseUrl() + "/checkTransactions");
|
||||
return;
|
||||
}
|
||||
} else if(referer_was_checkTransaction && user->getModel()->getGroupId()) {
|
||||
pt->unlock();
|
||||
response.redirect(user->getGroupBaseUrl());
|
||||
return;
|
||||
}
|
||||
|
||||
pt->unlock();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
#line 3 "F:\\Gradido\\gradido_login_server\\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\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( pageName );
|
||||
responseStream << "</title>\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 12 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/main.css\">\n";
|
||||
#line 13 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
if(withMaterialIcons) { responseStream << "\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 14 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/materialdesignicons.min.css\">\n";
|
||||
#line 15 "F:\\Gradido\\gradido_login_server\\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\\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\\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\\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\\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 104 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "<div class=\"content-list\">\n";
|
||||
responseStream << "\t";
|
||||
#line 106 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
if(PAGE_STATE_OVERVIEW == state ) { responseStream << "\n";
|
||||
responseStream << " <div class=\"content-list-title\">\n";
|
||||
responseStream << " <h1>";
|
||||
#line 108 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
responseStream << ( gettext("Gruppe wählen") );
|
||||
responseStream << "</h1>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << "\t<p>";
|
||||
#line 110 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
responseStream << ( gettext("Bitte wähle die Gruppe/Gemeinschaft aus, zu der du gehörst.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t<p>";
|
||||
#line 111 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
responseStream << ( gettext("Du bekommst eine Bestätigungsmail, nachdem dein Beitritt bestätigt wurde.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t<form method=\"POST\">\n";
|
||||
responseStream << "\t\t<div class=\"content-list-table\">\n";
|
||||
responseStream << "\t\t\t<div class=\"row\">\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c1\">";
|
||||
#line 115 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
responseStream << ( gettext("Auswahl") );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c2\">Name</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c2\">Alias</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c4\">Url</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"cell header-cell c5\">";
|
||||
#line 119 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
responseStream << ( gettext("Description") );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 121 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
for(auto it = groups.begin(); it != groups.end(); it++) {
|
||||
auto group_model = (*it)->getModel(); responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<div class=\"row\">\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c1\"><input type=\"radio\" class=\"form-control\" name=\"group_id\" value=\"";
|
||||
#line 124 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
responseStream << ( group_model->getID());
|
||||
responseStream << "\" /></div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c2\">";
|
||||
#line 125 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
responseStream << ( group_model->getName() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c2\">";
|
||||
#line 126 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
responseStream << ( group_model->getAlias() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c4\">";
|
||||
#line 127 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
responseStream << ( group_model->getUrl() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"cell c5\">";
|
||||
#line 128 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
responseStream << ( group_model->getDescription());
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 130 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t<input class=\"grd-form-bn grd-form-bn-succeed grd_clickable\" type=\"submit\" name=\"submit\" value=\"";
|
||||
#line 131 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
responseStream << ( gettext("Beitrittsanfrage senden") );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t</form>\n";
|
||||
responseStream << "\t";
|
||||
#line 134 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
} else if(PAGE_STATE_REQUEST_IS_RUNNING == state) { responseStream << "\n";
|
||||
responseStream << "\t\t<p>";
|
||||
#line 135 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
responseStream << ( gettext("Deine Beitrittsanfrage wird bearbeitet, du bekommst eine E-Mail wenn sie bestätigt oder abgelehnt wurde.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t<p><a href=\"";
|
||||
#line 136 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
responseStream << "/logout\">";
|
||||
#line 136 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
responseStream << ( gettext("Abmelden") );
|
||||
responseStream << "</a></p>\n";
|
||||
responseStream << "\t";
|
||||
#line 137 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
} else if(PAGE_STATE_NO_GROUPS == state) { responseStream << "\n";
|
||||
responseStream << "\t\t<p>";
|
||||
#line 138 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
responseStream << ( gettext("Noch keine Gruppen vorhanden, bitte warte bis der Admin welche hinzugefügt hat.") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 139 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\userUpdateGroup.cpsp"
|
||||
} responseStream << "\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\\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\\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
|
||||
responseStream << "\n";
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
20
login_server/src/cpp/HTTPInterface/UserUpdateGroupPage.h
Normal file
20
login_server/src/cpp/HTTPInterface/UserUpdateGroupPage.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef UserUpdateGroupPage_INCLUDED
|
||||
#define UserUpdateGroupPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class UserUpdateGroupPage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
UserUpdateGroupPage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // UserUpdateGroupPage_INCLUDED
|
||||
@ -2,7 +2,7 @@
|
||||
|
||||
#include <string>
|
||||
#include "ServerConfig.h"
|
||||
#include "Crypto/KeyPair.h"
|
||||
//#include "Crypto/KeyPair.h"
|
||||
#include "Crypto/KeyPairEd25519.h"
|
||||
#include "lib/DataTypeConverter.h"
|
||||
|
||||
@ -38,27 +38,36 @@ namespace ImportantTests {
|
||||
|
||||
// test old key pair implementation
|
||||
|
||||
KeyPair keys;
|
||||
//KeyPair keys;
|
||||
bool errorsOccured = false;
|
||||
std::string filtered_1_de = KeyPair::filterPassphrase(passphrase_1_de);
|
||||
keys.generateFromPassphrase(filtered_1_de.data(), de_words);
|
||||
if (keys.getPubkeyHex() != passphrase_1_pubkey_hex) {
|
||||
std::string filtered_1_de = Passphrase::filter(passphrase_1_de);
|
||||
KeyPairEd25519* keys = nullptr;
|
||||
keys = KeyPairEd25519::create(Passphrase::create(filtered_1_de, de_words));
|
||||
std::string public_key_hex = keys->getPublicKeyHex();
|
||||
|
||||
if (std::string(public_key_hex.data(), public_key_hex.size() - 1) != passphrase_1_pubkey_hex) {
|
||||
printf("1 de incorrect\n");
|
||||
errorsOccured = true;
|
||||
}
|
||||
keys.generateFromPassphrase(passphrase_1_en.data(), en_words);
|
||||
if (keys.getPubkeyHex() != passphrase_1_pubkey_hex) {
|
||||
delete keys;
|
||||
keys = KeyPairEd25519::create(Passphrase::create(passphrase_1_en, en_words));
|
||||
public_key_hex = keys->getPublicKeyHex();
|
||||
if (std::string(public_key_hex.data(), public_key_hex.size() - 1) != passphrase_1_pubkey_hex) {
|
||||
printf("1 en incorrect\n");
|
||||
errorsOccured = true;
|
||||
}
|
||||
std::string filtered_2_de = KeyPair::filterPassphrase(passphrase_2_de);
|
||||
keys.generateFromPassphrase(filtered_2_de.data(), de_words);
|
||||
if (keys.getPubkeyHex() != passphrase_2_pubkey_hex) {
|
||||
std::string filtered_2_de = Passphrase::filter(passphrase_2_de);
|
||||
delete keys;
|
||||
keys = KeyPairEd25519::create(Passphrase::create(filtered_2_de, de_words));
|
||||
public_key_hex = keys->getPublicKeyHex();
|
||||
if (std::string(public_key_hex.data(), public_key_hex.size() - 1) != passphrase_2_pubkey_hex) {
|
||||
printf("2 de incorrect\n");
|
||||
errorsOccured = true;
|
||||
}
|
||||
keys.generateFromPassphrase(passphrase_2_en.data(), en_words);
|
||||
if (keys.getPubkeyHex() != passphrase_2_pubkey_hex) {
|
||||
delete keys;
|
||||
keys = KeyPairEd25519::create(Passphrase::create(passphrase_2_en, en_words));
|
||||
public_key_hex = keys->getPublicKeyHex();
|
||||
if (std::string(public_key_hex.data(), public_key_hex.size() - 1) != passphrase_2_pubkey_hex) {
|
||||
printf("2 en incorrect\n");
|
||||
errorsOccured = true;
|
||||
}
|
||||
|
||||
59
login_server/src/cpp/JSONInterface/JsonAppLogin.cpp
Normal file
59
login_server/src/cpp/JSONInterface/JsonAppLogin.cpp
Normal file
@ -0,0 +1,59 @@
|
||||
#include "JsonAppLogin.h"
|
||||
|
||||
#include "Poco/URI.h"
|
||||
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
|
||||
#include "../controller/AppAccessToken.h"
|
||||
#include "../controller/User.h"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
|
||||
|
||||
Poco::JSON::Object* JsonAppLogin::handle(Poco::Dynamic::Var params)
|
||||
{
|
||||
Poco::UInt64 access_token_code;
|
||||
if (params.isVector()) {
|
||||
try {
|
||||
const Poco::URI::QueryParameters queryParams = params.extract<Poco::URI::QueryParameters>();
|
||||
for (auto it = queryParams.begin(); it != queryParams.end(); it++) {
|
||||
if (it->first == "access_token") {
|
||||
auto numberParseResult = DataTypeConverter::strToInt(it->second, access_token_code);
|
||||
if (DataTypeConverter::NUMBER_PARSE_OKAY != numberParseResult) {
|
||||
return stateError("error parsing access token", DataTypeConverter::numberParseStateToString(numberParseResult));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
//auto var = params[0];
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
return stateError("error parsing query params, Poco Error", ex.displayText());
|
||||
}
|
||||
}
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto access_token = controller::AppAccessToken::load(access_token_code);
|
||||
if (access_token.isNull()) {
|
||||
return stateError("access token not found");
|
||||
}
|
||||
Poco::Timespan max_age;
|
||||
max_age.assign(7, 0, 0, 0, 0);
|
||||
if (access_token->getAge() > max_age) {
|
||||
access_token->deleteFromDB();
|
||||
return stateError("access token to old");
|
||||
}
|
||||
access_token->getModel()->update();
|
||||
auto session = sm->getNewSession();
|
||||
auto user = controller::User::create();
|
||||
if (1 != user->load(access_token->getModel()->getUserId())) {
|
||||
return stateError("access token invalid");
|
||||
}
|
||||
session->setUser(user);
|
||||
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
result->set("state", "success");
|
||||
result->set("session_id", session->getHandle());
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
16
login_server/src/cpp/JSONInterface/JsonAppLogin.h
Normal file
16
login_server/src/cpp/JSONInterface/JsonAppLogin.h
Normal file
@ -0,0 +1,16 @@
|
||||
#ifndef __JSON_INTERFACE_JSON_APP_LOGIN_H_
|
||||
#define __JSON_INTERFACE_JSON_APP_LOGIN_H_
|
||||
|
||||
#include "JsonRequestHandler.h"
|
||||
|
||||
class JsonAppLogin : public JsonRequestHandler
|
||||
{
|
||||
public:
|
||||
Poco::JSON::Object* handle(Poco::Dynamic::Var params);
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif // __JSON_INTERFACE_JSON_APP_LOGIN_H_
|
||||
46
login_server/src/cpp/JSONInterface/JsonAquireAccessToken.cpp
Normal file
46
login_server/src/cpp/JSONInterface/JsonAquireAccessToken.cpp
Normal file
@ -0,0 +1,46 @@
|
||||
#include "JsonAquireAccessToken.h"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
|
||||
#include "../controller/AppAccessToken.h"
|
||||
#include "../controller/Group.h"
|
||||
|
||||
|
||||
Poco::JSON::Object* JsonAquireAccessToken::handle(Poco::Dynamic::Var params)
|
||||
{
|
||||
if (!mSession || mSession->getNewUser().isNull()) {
|
||||
auto session_result = checkAndLoadSession(params, true);
|
||||
if (session_result) {
|
||||
return session_result;
|
||||
}
|
||||
}
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
result->set("state", "success");
|
||||
auto user = mSession->getNewUser();
|
||||
auto user_id = user->getModel()->getID();
|
||||
auto access_tokens = controller::AppAccessToken::load(user_id);
|
||||
Poco::AutoPtr<controller::AppAccessToken> access_token;
|
||||
if (access_tokens.size() > 0) {
|
||||
access_token = access_tokens[0];
|
||||
access_token->getModel()->update();
|
||||
}
|
||||
else {
|
||||
access_token = controller::AppAccessToken::create(user_id);
|
||||
// for a bit faster return
|
||||
UniLib::controller::TaskPtr task = new model::table::ModelInsertTask(access_token->getModel(), false, true);
|
||||
task->scheduleTask(task);
|
||||
// default
|
||||
//access_token->getModel()->insertIntoDB(false);
|
||||
}
|
||||
|
||||
result->set("access_token", std::to_string(access_token->getModel()->getCode()));
|
||||
|
||||
auto group_base_url = user->getGroupBaseUrl();
|
||||
auto group = controller::Group::load(user->getModel()->getGroupId());
|
||||
if (!group.isNull()) {
|
||||
result->set("group_base_url", group->getModel()->getUrl());
|
||||
}
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
16
login_server/src/cpp/JSONInterface/JsonAquireAccessToken.h
Normal file
16
login_server/src/cpp/JSONInterface/JsonAquireAccessToken.h
Normal file
@ -0,0 +1,16 @@
|
||||
#ifndef __JSON_INTERFACE_JSON_ACQUIRE_ACCESS_TOKEN_
|
||||
#define __JSON_INTERFACE_JSON_ACQUIRE_ACCESS_TOKEN_
|
||||
|
||||
#include "JsonRequestHandler.h"
|
||||
|
||||
class JsonAquireAccessToken : public JsonRequestHandler
|
||||
{
|
||||
public:
|
||||
Poco::JSON::Object* handle(Poco::Dynamic::Var params);
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif // __JSON_INTERFACE_JSON_ACQUIRE_ACCESS_TOKEN_
|
||||
268
login_server/src/cpp/JSONInterface/JsonCreateTransaction.cpp
Normal file
268
login_server/src/cpp/JSONInterface/JsonCreateTransaction.cpp
Normal file
@ -0,0 +1,268 @@
|
||||
#include "JsonCreateTransaction.h"
|
||||
|
||||
#include "../controller/User.h"
|
||||
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
|
||||
#include "../model/gradido/Transaction.h"
|
||||
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
|
||||
Poco::JSON::Object* JsonCreateTransaction::handle(Poco::Dynamic::Var params)
|
||||
{
|
||||
auto sm = SessionManager::getInstance();
|
||||
|
||||
int session_id = 0;
|
||||
std::string transaction_type;
|
||||
|
||||
// if is json object
|
||||
if (params.type() == typeid(Poco::JSON::Object::Ptr)) {
|
||||
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
|
||||
/// Throws a RangeException if the value does not fit
|
||||
/// into the result variable.
|
||||
/// Throws a NotImplementedException if conversion is
|
||||
/// not available for the given type.
|
||||
/// Throws InvalidAccessException if Var is empty.
|
||||
try {
|
||||
paramJsonObject->get("session_id").convert(session_id);
|
||||
paramJsonObject->get("transaction_type").convert(transaction_type);
|
||||
paramJsonObject->get("memo").convert(mMemo);
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
return stateError("json exception", ex.displayText());
|
||||
}
|
||||
}
|
||||
else {
|
||||
return stateError("parameter format unknown");
|
||||
}
|
||||
|
||||
if (!session_id) {
|
||||
return stateError("session_id invalid");
|
||||
}
|
||||
|
||||
mSession = sm->getSession(session_id);
|
||||
if (!mSession) {
|
||||
return stateError("session not found");
|
||||
}
|
||||
auto user = mSession->getNewUser();
|
||||
if (user.isNull()) {
|
||||
auto em = ErrorManager::getInstance();
|
||||
em->addError(new Error("JsonCreateTransaction", "session hasn't a user, check code"));
|
||||
em->sendErrorsAsEmail();
|
||||
return customStateError("code error", "user is zero");
|
||||
}
|
||||
|
||||
getTargetGroup(params);
|
||||
if (transaction_type == "transfer") {
|
||||
return transfer(params);
|
||||
}
|
||||
else if (transaction_type == "creation") {
|
||||
return creation(params);
|
||||
}
|
||||
else if (transaction_type == "groupMemberUpdate") {
|
||||
return groupMemberUpdate(params);
|
||||
}
|
||||
|
||||
return stateError("transaction_type unknown");
|
||||
|
||||
}
|
||||
|
||||
Poco::JSON::Object* JsonCreateTransaction::transfer(Poco::Dynamic::Var params)
|
||||
{
|
||||
auto target_pubkey = getTargetPubkey(params);
|
||||
if (!target_pubkey) {
|
||||
return customStateError("not found", "receiver not found");
|
||||
}
|
||||
|
||||
auto user = mSession->getNewUser();
|
||||
Poco::UInt32 amount = 0;
|
||||
auto mm = MemoryManager::getInstance();
|
||||
Poco::JSON::Object* result = nullptr;
|
||||
|
||||
if (params.type() == typeid(Poco::JSON::Object::Ptr)) {
|
||||
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
|
||||
try {
|
||||
paramJsonObject->get("amount").convert(amount);
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
result = stateError("json exception", ex.displayText());
|
||||
}
|
||||
}
|
||||
else {
|
||||
result = stateError("parameter format unknown");
|
||||
}
|
||||
if (result) {
|
||||
mm->releaseMemory(target_pubkey);
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!mReceiverUser.isNull() && mReceiverUser->getModel()) {
|
||||
auto receiver_user_model = mReceiverUser->getModel();
|
||||
if (receiver_user_model->isDisabled()) {
|
||||
result = customStateError("disabled", "receiver is disabled");
|
||||
}
|
||||
if (!mTargetGroup.isNull() && receiver_user_model->getGroupId() != mTargetGroup->getModel()->getID()) {
|
||||
result = stateError("user not in group", "receiver user isn't in target group");
|
||||
}
|
||||
}
|
||||
if (!result) {
|
||||
model::gradido::Transaction::createTransfer(mSession->getNewUser(), target_pubkey, mTargetGroup, amount, mMemo);
|
||||
result = stateSuccess();
|
||||
}
|
||||
mm->releaseMemory(target_pubkey);
|
||||
return result;
|
||||
}
|
||||
Poco::JSON::Object* JsonCreateTransaction::creation(Poco::Dynamic::Var params)
|
||||
{
|
||||
auto target_pubkey = getTargetPubkey(params);
|
||||
if (!target_pubkey) {
|
||||
return customStateError("not found", "receiver not found");
|
||||
}
|
||||
|
||||
Poco::UInt32 amount = 0;
|
||||
Poco::DateTime target_date;
|
||||
auto mm = MemoryManager::getInstance();
|
||||
Poco::JSON::Object* result = nullptr;
|
||||
|
||||
if (params.type() == typeid(Poco::JSON::Object::Ptr))
|
||||
{
|
||||
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
|
||||
try {
|
||||
paramJsonObject->get("amount").convert(amount);
|
||||
paramJsonObject->get("target_date").convert(target_date);
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
result = stateError("json exception", ex.displayText());
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
result = stateError("parameter format unknown");
|
||||
}
|
||||
|
||||
if (amount <= 0 || amount > 10000000) {
|
||||
result = customStateError("invalid parameter", "invalid amount", "GDD amount in GDD cent ]0,10000000]");
|
||||
}
|
||||
|
||||
if (mReceiverUser.isNull()) {
|
||||
mReceiverUser = controller::User::create();
|
||||
if (1 != mReceiverUser->load(target_pubkey->data())) {
|
||||
mReceiverUser.assign(nullptr);
|
||||
result = customStateError("not found", "receiver not found");
|
||||
}
|
||||
}
|
||||
|
||||
if (result) {
|
||||
mm->releaseMemory(target_pubkey);
|
||||
return result;
|
||||
}
|
||||
|
||||
if (!mReceiverUser.isNull() && mReceiverUser->getModel()) {
|
||||
auto receiver_user_model = mReceiverUser->getModel();
|
||||
|
||||
if (receiver_user_model->isDisabled()) {
|
||||
result = customStateError("disabled", "receiver is disabled");
|
||||
}
|
||||
if (!receiver_user_model->getGroupId()) {
|
||||
result = stateError("receiver user hasn't group");
|
||||
}
|
||||
if (receiver_user_model->getGroupId() != mSession->getNewUser()->getModel()->getGroupId()) {
|
||||
result = stateError("user not in group", "target user is in another group");
|
||||
}
|
||||
}
|
||||
|
||||
if(!result) {
|
||||
model::gradido::Transaction::createCreation(mReceiverUser, amount, target_date, mMemo);
|
||||
result = stateSuccess();
|
||||
}
|
||||
mm->releaseMemory(target_pubkey);
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
Poco::JSON::Object* JsonCreateTransaction::groupMemberUpdate(Poco::Dynamic::Var params)
|
||||
{
|
||||
if (mTargetGroup.isNull()) {
|
||||
return stateError("target_group not found");
|
||||
}
|
||||
model::gradido::Transaction::createGroupMemberUpdate(mSession->getNewUser(), mTargetGroup);
|
||||
return stateSuccess();
|
||||
|
||||
}
|
||||
MemoryBin* JsonCreateTransaction::getTargetPubkey(Poco::Dynamic::Var params)
|
||||
{
|
||||
std::string email;
|
||||
std::string target_username;
|
||||
std::string target_pubkey_hex;
|
||||
|
||||
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
|
||||
auto fields = paramJsonObject->getNames();
|
||||
try {
|
||||
for (auto it = fields.begin(); it != fields.end(); it++) {
|
||||
if (*it == "target_email") {
|
||||
paramJsonObject->get("target_email").convert(email);
|
||||
break;
|
||||
}
|
||||
if (*it == "target_username") {
|
||||
paramJsonObject->get("target_username").convert(target_username);
|
||||
break;
|
||||
}
|
||||
if (*it == "target_pubkey") {
|
||||
paramJsonObject->get("target_pubkey").convert(target_pubkey_hex);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
return nullptr;
|
||||
}
|
||||
mReceiverUser = controller::User::create();
|
||||
int result_count = 0;
|
||||
|
||||
MemoryBin* result = nullptr;
|
||||
if (email != "") {
|
||||
result_count = mReceiverUser->load(email);
|
||||
}
|
||||
else if (target_username != "") {
|
||||
int group_id = 0;
|
||||
if (!mTargetGroup.isNull()) {
|
||||
group_id = mTargetGroup->getModel()->getID();
|
||||
} else {
|
||||
mSession->getNewUser()->getModel()->getGroupId();
|
||||
}
|
||||
result_count = mReceiverUser->getModel()->loadFromDB({ "username", "group_id" }, target_username, group_id, model::table::MYSQL_CONDITION_AND);
|
||||
}
|
||||
else if (target_pubkey_hex != "") {
|
||||
result = DataTypeConverter::hexToBin(target_pubkey_hex);
|
||||
}
|
||||
if (1 == result_count) {
|
||||
result = mReceiverUser->getModel()->getPublicKeyCopy();
|
||||
}
|
||||
else {
|
||||
mReceiverUser.assign(nullptr);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
bool JsonCreateTransaction::getTargetGroup(Poco::Dynamic::Var params)
|
||||
{
|
||||
std::string target_group_alias;
|
||||
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
|
||||
try
|
||||
{
|
||||
auto target_group = paramJsonObject->get("target_group");
|
||||
if (!target_group.isEmpty()) {
|
||||
target_group.convert(target_group_alias);
|
||||
auto groups = controller::Group::load(target_group_alias);
|
||||
if (groups.size() == 1) {
|
||||
mTargetGroup = groups[0];
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
return false;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
27
login_server/src/cpp/JSONInterface/JsonCreateTransaction.h
Normal file
27
login_server/src/cpp/JSONInterface/JsonCreateTransaction.h
Normal file
@ -0,0 +1,27 @@
|
||||
#ifndef __JSON_INTERFACE_JSON_CREATE_TRANSACTION_
|
||||
#define __JSON_INTERFACE_JSON_CREATE_TRANSACTION_
|
||||
|
||||
#include "JsonRequestHandler.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../controller/Group.h"
|
||||
|
||||
class JsonCreateTransaction : public JsonRequestHandler
|
||||
{
|
||||
public:
|
||||
JsonCreateTransaction() : mSession(nullptr) {}
|
||||
Poco::JSON::Object* handle(Poco::Dynamic::Var params);
|
||||
|
||||
protected:
|
||||
Poco::JSON::Object* transfer(Poco::Dynamic::Var params);
|
||||
Poco::JSON::Object* creation(Poco::Dynamic::Var params);
|
||||
Poco::JSON::Object* groupMemberUpdate(Poco::Dynamic::Var params);
|
||||
MemoryBin* getTargetPubkey(Poco::Dynamic::Var params);
|
||||
bool getTargetGroup(Poco::Dynamic::Var params);
|
||||
|
||||
Session* mSession;
|
||||
std::string mMemo;
|
||||
Poco::AutoPtr<controller::Group> mTargetGroup;
|
||||
Poco::AutoPtr<controller::User> mReceiverUser;
|
||||
};
|
||||
|
||||
#endif // __JSON_INTERFACE_JSON_CREATE_TRANSACTION_
|
||||
@ -1,108 +1,114 @@
|
||||
#include "JsonCreateUser.h"
|
||||
|
||||
#include "../model/email/Email.h"
|
||||
#include "../controller/User.h"
|
||||
#include "../controller/EmailVerificationCode.h"
|
||||
|
||||
#include "../SingletonManager/EmailManager.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
|
||||
#include "../tasks/AuthenticatedEncryptionCreateKeyTask.h"
|
||||
|
||||
Poco::JSON::Object* JsonCreateUser::handle(Poco::Dynamic::Var params)
|
||||
{
|
||||
std::string email;
|
||||
std::string first_name;
|
||||
std::string last_name;
|
||||
std::string password;
|
||||
bool login_after_register = false;
|
||||
int emailType;
|
||||
auto em = EmailManager::getInstance();
|
||||
auto sm = SessionManager::getInstance();
|
||||
|
||||
// if is json object
|
||||
if (params.type() == typeid(Poco::JSON::Object::Ptr)) {
|
||||
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
|
||||
/// Throws a RangeException if the value does not fit
|
||||
/// into the result variable.
|
||||
/// Throws a NotImplementedException if conversion is
|
||||
/// not available for the given type.
|
||||
/// Throws InvalidAccessException if Var is empty.
|
||||
try {
|
||||
paramJsonObject->get("email").convert(email);
|
||||
paramJsonObject->get("first_name").convert(first_name);
|
||||
paramJsonObject->get("last_name").convert(last_name);
|
||||
paramJsonObject->get("emailType").convert(emailType);
|
||||
|
||||
if ((ServerConfig::g_AllowUnsecureFlags & ServerConfig::UNSECURE_PASSWORD_REQUESTS)) {
|
||||
paramJsonObject->get("password").convert(password);
|
||||
}
|
||||
if (!paramJsonObject->isNull("login_after_register")) {
|
||||
paramJsonObject->get("login_after_register").convert(login_after_register);
|
||||
}
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
return stateError("json exception", ex.displayText());
|
||||
}
|
||||
}
|
||||
else {
|
||||
return stateError("parameter format unknown");
|
||||
}
|
||||
|
||||
auto user = controller::User::create();
|
||||
if (user->load(email) > 0) {
|
||||
return customStateError("exist", "user already exist");
|
||||
}
|
||||
|
||||
if (password.size()) {
|
||||
ErrorList errors;
|
||||
if (!sm->checkPwdValidation(password, &errors)) {
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
result->set("state", "error");
|
||||
result->set("msg", errors.getLastError()->getString(false));
|
||||
if (errors.errorCount()) {
|
||||
result->set("details", errors.getLastError()->getString(false));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
// create user
|
||||
user = controller::User::create(email, first_name, last_name);
|
||||
auto userModel = user->getModel();
|
||||
Session* session = nullptr;
|
||||
|
||||
if (!userModel->insertIntoDB(true)) {
|
||||
userModel->sendErrorsAsEmail();
|
||||
return stateError("insert user failed");
|
||||
}
|
||||
if (password.size()) {
|
||||
session = sm->getNewSession();
|
||||
session->setUser(user);
|
||||
session->generateKeys(true, true);
|
||||
session->setClientIp(mClientIP);
|
||||
|
||||
// calculate encryption key, could need some time, will save encrypted privkey to db
|
||||
UniLib::controller::TaskPtr create_authenticated_encrypten_key = new AuthenticatedEncryptionCreateKeyTask(user, password);
|
||||
create_authenticated_encrypten_key->scheduleTask(create_authenticated_encrypten_key);
|
||||
}
|
||||
|
||||
auto emailOptIn = controller::EmailVerificationCode::create(userModel->getID(), model::table::EMAIL_OPT_IN_REGISTER);
|
||||
auto emailOptInModel = emailOptIn->getModel();
|
||||
if (!emailOptInModel->insertIntoDB(false)) {
|
||||
emailOptInModel->sendErrorsAsEmail();
|
||||
return stateError("insert emailOptIn failed");
|
||||
}
|
||||
|
||||
em->addEmail(new model::Email(emailOptIn, user, model::Email::convertTypeFromInt(emailType)));
|
||||
|
||||
if (login_after_register && session) {
|
||||
Poco::JSON::Object* result = stateSuccess();
|
||||
|
||||
result->set("session_id", session->getHandle());
|
||||
return result;
|
||||
}
|
||||
|
||||
return stateSuccess();
|
||||
|
||||
#include "JsonCreateUser.h"
|
||||
|
||||
#include "../model/email/Email.h"
|
||||
#include "../controller/User.h"
|
||||
#include "../controller/EmailVerificationCode.h"
|
||||
|
||||
#include "../SingletonManager/EmailManager.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
|
||||
#include "../tasks/AuthenticatedEncryptionCreateKeyTask.h"
|
||||
|
||||
Poco::JSON::Object* JsonCreateUser::handle(Poco::Dynamic::Var params)
|
||||
{
|
||||
std::string email;
|
||||
std::string first_name;
|
||||
std::string last_name;
|
||||
std::string password;
|
||||
bool login_after_register = false;
|
||||
int emailType;
|
||||
int group_id;
|
||||
|
||||
auto em = EmailManager::getInstance();
|
||||
auto sm = SessionManager::getInstance();
|
||||
|
||||
// if is json object
|
||||
if (params.type() == typeid(Poco::JSON::Object::Ptr)) {
|
||||
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
|
||||
/// Throws a RangeException if the value does not fit
|
||||
/// into the result variable.
|
||||
/// Throws a NotImplementedException if conversion is
|
||||
/// not available for the given type.
|
||||
/// Throws InvalidAccessException if Var is empty.
|
||||
try {
|
||||
paramJsonObject->get("email").convert(email);
|
||||
paramJsonObject->get("first_name").convert(first_name);
|
||||
paramJsonObject->get("last_name").convert(last_name);
|
||||
paramJsonObject->get("emailType").convert(emailType);
|
||||
paramJsonObject->get("group_id").convert(group_id);
|
||||
|
||||
if ((ServerConfig::g_AllowUnsecureFlags & ServerConfig::UNSECURE_PASSWORD_REQUESTS)) {
|
||||
paramJsonObject->get("password").convert(password);
|
||||
}
|
||||
if (!paramJsonObject->isNull("login_after_register")) {
|
||||
paramJsonObject->get("login_after_register").convert(login_after_register);
|
||||
}
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
return stateError("json exception", ex.displayText());
|
||||
}
|
||||
}
|
||||
else {
|
||||
return stateError("parameter format unknown");
|
||||
}
|
||||
|
||||
auto user = controller::User::create();
|
||||
if (user->load(email) > 0) {
|
||||
/*Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
result->set("state", "exist");
|
||||
result->set("msg", "user already exist");
|
||||
return result;*/
|
||||
return customStateError("exist", "user already exist");
|
||||
}
|
||||
|
||||
if (password.size()) {
|
||||
NotificationList errors;
|
||||
if (!sm->checkPwdValidation(password, &errors)) {
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
result->set("state", "error");
|
||||
result->set("msg", errors.getLastError()->getString(false));
|
||||
if (errors.errorCount()) {
|
||||
result->set("details", errors.getLastError()->getString(false));
|
||||
}
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
// create user
|
||||
user = controller::User::create(email, first_name, last_name, group_id);
|
||||
auto userModel = user->getModel();
|
||||
Session* session = nullptr;
|
||||
|
||||
if (!userModel->insertIntoDB(true)) {
|
||||
userModel->sendErrorsAsEmail();
|
||||
return stateError("insert user failed");
|
||||
}
|
||||
if (password.size()) {
|
||||
session = sm->getNewSession();
|
||||
session->setUser(user);
|
||||
session->generateKeys(true, true);
|
||||
session->setClientIp(mClientIP);
|
||||
|
||||
// calculate encryption key, could need some time, will save encrypted privkey to db
|
||||
UniLib::controller::TaskPtr create_authenticated_encrypten_key = new AuthenticatedEncryptionCreateKeyTask(user, password);
|
||||
create_authenticated_encrypten_key->scheduleTask(create_authenticated_encrypten_key);
|
||||
}
|
||||
|
||||
auto emailOptIn = controller::EmailVerificationCode::create(userModel->getID(), model::table::EMAIL_OPT_IN_REGISTER);
|
||||
auto emailOptInModel = emailOptIn->getModel();
|
||||
if (!emailOptInModel->insertIntoDB(false)) {
|
||||
emailOptInModel->sendErrorsAsEmail();
|
||||
return stateError("insert emailOptIn failed");
|
||||
}
|
||||
|
||||
em->addEmail(new model::Email(emailOptIn, user, model::Email::convertTypeFromInt(emailType)));
|
||||
|
||||
if (login_after_register && session) {
|
||||
Poco::JSON::Object* result = stateSuccess();
|
||||
|
||||
result->set("session_id", session->getHandle());
|
||||
return result;
|
||||
}
|
||||
|
||||
return stateSuccess();
|
||||
}
|
||||
@ -4,6 +4,7 @@
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../SingletonManager/SingletonTaskObserver.h"
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
#include "../SingletonManager/PendingTasksManager.h"
|
||||
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
|
||||
@ -12,52 +13,19 @@ 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();
|
||||
|
||||
if (params.isStruct()) {
|
||||
session_id = params["session_id"];
|
||||
//std::string miau = params["miau"];
|
||||
}
|
||||
else if (params.isVector()) {
|
||||
try {
|
||||
const Poco::URI::QueryParameters queryParams = params.extract<Poco::URI::QueryParameters>();
|
||||
for (auto it = queryParams.begin(); it != queryParams.end(); it++) {
|
||||
if (it->first == "session_id") {
|
||||
auto numberParseResult = DataTypeConverter::strToInt(it->second, session_id);
|
||||
if (DataTypeConverter::NUMBER_PARSE_OKAY != numberParseResult) {
|
||||
return stateError("error parsing session_id", DataTypeConverter::numberParseStateToString(numberParseResult));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
//auto var = params[0];
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
return stateError("error parsing query params, Poco Error", ex.displayText());
|
||||
}
|
||||
}
|
||||
|
||||
if (!session_id) {
|
||||
return stateError("empty session id");
|
||||
}
|
||||
|
||||
auto session = sm->getSession(session_id);
|
||||
if (!session) {
|
||||
return customStateError("not found", "session not found");
|
||||
}
|
||||
|
||||
auto userNew = session->getNewUser();
|
||||
//auto user = session->getUser();
|
||||
if (userNew.isNull()) {
|
||||
return customStateError("not found", "Session didn't contain user");
|
||||
}
|
||||
auto userModel = userNew->getModel();
|
||||
if(userModel.isNull()) {
|
||||
return customStateError("not found", "User is empty");
|
||||
//if(!mClientIp.isLoopback())
|
||||
auto session_check_result = checkAndLoadSession(params, false);
|
||||
if (session_check_result) {
|
||||
return session_check_result;
|
||||
}
|
||||
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
result->set("state", "success");
|
||||
result->set("clientIP", session->getClientIp().toString());
|
||||
//result->set("clientIP", mSession->getClientIp().toString());
|
||||
auto userNew = mSession->getNewUser();
|
||||
try {
|
||||
result->set("user", userNew->getJson());
|
||||
}
|
||||
@ -71,12 +39,20 @@ Poco::JSON::Object* JsonGetLogin::handle(Poco::Dynamic::Var params)
|
||||
em->addError(new Error("JsonGetLogin::handle", "generic exception calling userModel->getJson: "));
|
||||
em->sendErrorsAsEmail();
|
||||
}
|
||||
result->set("Transaction.pending", session->getProcessingTransactionCount());
|
||||
auto executing = observer->getTaskCount(userModel->getEmail(), TASK_OBSERVER_SIGN_TRANSACTION);
|
||||
int pending = 0;
|
||||
auto user_must_sign = pt->getTransactionsUserMustSign(userNew);
|
||||
pending = user_must_sign.size();
|
||||
result->set("Transactions.pending", pending);
|
||||
|
||||
auto some_must_sign = pt->getTransactionSomeoneMustSign(userNew);
|
||||
//pending = some_must_sign.size();
|
||||
result->set("Transactions.can_signed", some_must_sign.size());
|
||||
|
||||
auto executing = observer->getTaskCount(userNew->getModel()->getEmail(), TASK_OBSERVER_SIGN_TRANSACTION);
|
||||
if (executing < 0) {
|
||||
executing = 0;
|
||||
}
|
||||
result->set("Transaction.executing", executing);
|
||||
result->set("Transactions.executing", executing);
|
||||
//printf("pending: %d\n", session->getProcessingTransactionCount());
|
||||
//std::string user_string = userModel->toString();
|
||||
//printf("[JsonGetLogin] %s\n", user_string.data());
|
||||
|
||||
68
login_server/src/cpp/JSONInterface/JsonNetworkInfos.cpp
Normal file
68
login_server/src/cpp/JSONInterface/JsonNetworkInfos.cpp
Normal file
@ -0,0 +1,68 @@
|
||||
#include "JsonNetworkInfos.h"
|
||||
|
||||
#include "../controller/Group.h"
|
||||
|
||||
Poco::JSON::Object* JsonNetworkInfos::handle(Poco::Dynamic::Var params)
|
||||
{
|
||||
/*
|
||||
'ask' => ['groups']
|
||||
*/
|
||||
// incoming
|
||||
|
||||
Poco::JSON::Array::Ptr askArray;
|
||||
|
||||
// if is json object
|
||||
if (params.type() == typeid(Poco::JSON::Object::Ptr)) {
|
||||
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
|
||||
/// Throws a RangeException if the value does not fit
|
||||
/// into the result variable.
|
||||
/// Throws a NotImplementedException if conversion is
|
||||
/// not available for the given type.
|
||||
/// Throws InvalidAccessException if Var is empty.
|
||||
try {
|
||||
askArray = paramJsonObject->getArray("ask");
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
return stateError("json exception", ex.displayText());
|
||||
}
|
||||
}
|
||||
else {
|
||||
return stateError("parameter format unknown");
|
||||
}
|
||||
|
||||
|
||||
if (askArray.isNull()) {
|
||||
return stateError("ask is zero or not an array");
|
||||
}
|
||||
|
||||
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
result->set("state", "success");
|
||||
Poco::JSON::Array jsonErrorsArray;
|
||||
Poco::JSON::Object json_network_infos;
|
||||
|
||||
for (auto it = askArray->begin(); it != askArray->end(); it++) {
|
||||
auto parameter = *it;
|
||||
std::string parameterString;
|
||||
try {
|
||||
parameter.convert(parameterString);
|
||||
if (parameterString == "groups") {
|
||||
auto groups = controller::Group::listAll();
|
||||
Poco::JSON::Array json_groups;
|
||||
for (auto it = groups.begin(); it != groups.end(); it++) {
|
||||
auto group_model = (*it)->getModel();
|
||||
json_groups.add(group_model->getAlias());
|
||||
}
|
||||
json_network_infos.set("groups", json_groups);
|
||||
}
|
||||
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
jsonErrorsArray.add("ask parameter invalid");
|
||||
}
|
||||
}
|
||||
result->set("errors", jsonErrorsArray);
|
||||
result->set("data", json_network_infos);
|
||||
return result;
|
||||
|
||||
}
|
||||
16
login_server/src/cpp/JSONInterface/JsonNetworkInfos.h
Normal file
16
login_server/src/cpp/JSONInterface/JsonNetworkInfos.h
Normal file
@ -0,0 +1,16 @@
|
||||
#ifndef __JSON_INTERFACE_JSON_NETWORK_INFOS_
|
||||
#define __JSON_INTERFACE_JSON_NETWORK_INFOS_
|
||||
|
||||
#include "JsonRequestHandler.h"
|
||||
|
||||
class JsonNetworkInfos : public JsonRequestHandler
|
||||
{
|
||||
public:
|
||||
Poco::JSON::Object* handle(Poco::Dynamic::Var params);
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif // __JSON_INTERFACE_JSON_GET_USERS_
|
||||
@ -1,141 +1,211 @@
|
||||
#include "JsonRequestHandler.h"
|
||||
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
#include "Poco/Net/HTTPServerResponse.h"
|
||||
|
||||
#include "Poco/URI.h"
|
||||
#include "Poco/DeflatingStream.h"
|
||||
|
||||
#include "Poco/JSON/Parser.h"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
|
||||
|
||||
void JsonRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response)
|
||||
{
|
||||
|
||||
response.setChunkedTransferEncoding(false);
|
||||
response.setContentType("application/json");
|
||||
if (ServerConfig::g_AllowUnsecureFlags & ServerConfig::UNSECURE_CORS_ALL) {
|
||||
response.set("Access-Control-Allow-Origin", "*");
|
||||
response.set("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
|
||||
}
|
||||
//bool _compressResponse(request.hasToken("Accept-Encoding", "gzip"));
|
||||
//if (_compressResponse) response.set("Content-Encoding", "gzip");
|
||||
|
||||
std::ostream& responseStream = response.send();
|
||||
//Poco::DeflatingOutputStream _gzipStream(_responseStream, Poco::DeflatingStreamBuf::STREAM_GZIP, 1);
|
||||
//std::ostream& responseStream = _compressResponse ? _gzipStream : _responseStream;
|
||||
|
||||
auto method = request.getMethod();
|
||||
std::istream& request_stream = request.stream();
|
||||
Poco::JSON::Object* json_result = nullptr;
|
||||
if (method == "POST" || method == "PUT") {
|
||||
// extract parameter from request
|
||||
Poco::Dynamic::Var parsedResult = parseJsonWithErrorPrintFile(request_stream);
|
||||
|
||||
if (parsedResult.size() != 0) {
|
||||
json_result = handle(parsedResult);
|
||||
}
|
||||
else {
|
||||
json_result = stateError("empty body");
|
||||
}
|
||||
|
||||
}
|
||||
else if(method == "GET") {
|
||||
Poco::URI uri(request.getURI());
|
||||
auto queryParameters = uri.getQueryParameters();
|
||||
json_result = handle(queryParameters);
|
||||
}
|
||||
|
||||
if (json_result) {
|
||||
if (!json_result->isNull("session_id")) {
|
||||
int session_id = 0;
|
||||
try {
|
||||
json_result->get("session_id").convert(session_id);
|
||||
}
|
||||
catch (Poco::Exception& e) {
|
||||
ErrorList erros;
|
||||
erros.addError(new Error("json request", "invalid session_id"));
|
||||
erros.sendErrorsAsEmail();
|
||||
}
|
||||
if (session_id) {
|
||||
auto session = SessionManager::getInstance()->getSession(session_id);
|
||||
response.addCookie(session->getLoginCookie());
|
||||
}
|
||||
}
|
||||
json_result->stringify(responseStream);
|
||||
delete json_result;
|
||||
}
|
||||
|
||||
//if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
|
||||
|
||||
Poco::Dynamic::Var JsonRequestHandler::parseJsonWithErrorPrintFile(std::istream& request_stream, ErrorList* errorHandler /* = nullptr*/, const char* functionName /* = nullptr*/)
|
||||
{
|
||||
// debugging answer
|
||||
|
||||
std::stringstream responseStringStream;
|
||||
for (std::string line; std::getline(request_stream, line); ) {
|
||||
responseStringStream << line << std::endl;
|
||||
}
|
||||
|
||||
// extract parameter from request
|
||||
Poco::JSON::Parser jsonParser;
|
||||
Poco::Dynamic::Var parsedJson;
|
||||
try {
|
||||
parsedJson = jsonParser.parse(responseStringStream.str());
|
||||
|
||||
return parsedJson;
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
if (errorHandler) {
|
||||
errorHandler->addError(new ParamError(functionName, "error parsing request answer", ex.displayText().data()));
|
||||
errorHandler->sendErrorsAsEmail(responseStringStream.str());
|
||||
}
|
||||
std::string dateTimeString = Poco::DateTimeFormatter::format(Poco::DateTime(), "%d_%m_%yT%H_%M_%S");
|
||||
std::string filename = dateTimeString + "_response.html";
|
||||
FILE* f = fopen(filename.data(), "wt");
|
||||
if (f) {
|
||||
std::string responseString = responseStringStream.str();
|
||||
fwrite(responseString.data(), 1, responseString.size(), f);
|
||||
fclose(f);
|
||||
}
|
||||
return Poco::Dynamic::Var();
|
||||
}
|
||||
return Poco::Dynamic::Var();
|
||||
}
|
||||
|
||||
Poco::JSON::Object* JsonRequestHandler::stateError(const char* msg, std::string details)
|
||||
{
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
result->set("state", "error");
|
||||
result->set("msg", msg);
|
||||
if (details != "") {
|
||||
result->set("details", details);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Poco::JSON::Object* JsonRequestHandler::stateSuccess()
|
||||
{
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
result->set("state", "success");
|
||||
return result;
|
||||
}
|
||||
|
||||
Poco::JSON::Object* JsonRequestHandler::customStateError(const char* state, const char* msg, std::string details/* = ""*/)
|
||||
{
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
result->set("state", state);
|
||||
result->set("msg", msg);
|
||||
if (details != "") {
|
||||
result->set("details", details);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
#include "JsonRequestHandler.h"
|
||||
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
#include "Poco/Net/HTTPServerResponse.h"
|
||||
|
||||
#include "Poco/URI.h"
|
||||
#include "Poco/DeflatingStream.h"
|
||||
|
||||
#include "Poco/JSON/Parser.h"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
|
||||
JsonRequestHandler::JsonRequestHandler()
|
||||
: mSession(nullptr)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
JsonRequestHandler::JsonRequestHandler(Session* session)
|
||||
: mSession(session)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void JsonRequestHandler::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response)
|
||||
{
|
||||
response.setChunkedTransferEncoding(false);
|
||||
response.setContentType("application/json");
|
||||
if (ServerConfig::g_AllowUnsecureFlags & ServerConfig::UNSECURE_CORS_ALL) {
|
||||
response.set("Access-Control-Allow-Origin", "*");
|
||||
response.set("Access-Control-Allow-Headers", "Access-Control-Allow-Headers, Origin,Accept, X-Requested-With, Content-Type, Access-Control-Request-Method, Access-Control-Request-Headers");
|
||||
}
|
||||
//bool _compressResponse(request.hasToken("Accept-Encoding", "gzip"));
|
||||
//if (_compressResponse) response.set("Content-Encoding", "gzip");
|
||||
|
||||
std::ostream& responseStream = response.send();
|
||||
//Poco::DeflatingOutputStream _gzipStream(_responseStream, Poco::DeflatingStreamBuf::STREAM_GZIP, 1);
|
||||
//std::ostream& responseStream = _compressResponse ? _gzipStream : _responseStream;
|
||||
|
||||
mClientIp = request.clientAddress().host();
|
||||
|
||||
auto method = request.getMethod();
|
||||
std::istream& request_stream = request.stream();
|
||||
Poco::JSON::Object* json_result = nullptr;
|
||||
if (method == "POST" || method == "PUT") {
|
||||
// extract parameter from request
|
||||
Poco::Dynamic::Var parsedResult = parseJsonWithErrorPrintFile(request_stream);
|
||||
|
||||
if (parsedResult.size() != 0) {
|
||||
json_result = handle(parsedResult);
|
||||
}
|
||||
else {
|
||||
json_result = stateError("empty body");
|
||||
}
|
||||
}
|
||||
else if(method == "GET") {
|
||||
Poco::URI uri(request.getURI());
|
||||
auto queryParameters = uri.getQueryParameters();
|
||||
json_result = handle(queryParameters);
|
||||
}
|
||||
|
||||
if (json_result) {
|
||||
if (!json_result->isNull("session_id")) {
|
||||
int session_id = 0;
|
||||
try {
|
||||
json_result->get("session_id").convert(session_id);
|
||||
}
|
||||
catch (Poco::Exception& e) {
|
||||
NotificationList erros;
|
||||
erros.addError(new Error("json request", "invalid session_id"));
|
||||
erros.sendErrorsAsEmail();
|
||||
}
|
||||
if (session_id) {
|
||||
auto session = SessionManager::getInstance()->getSession(session_id);
|
||||
response.addCookie(session->getLoginCookie());
|
||||
}
|
||||
}
|
||||
json_result->stringify(responseStream);
|
||||
delete json_result;
|
||||
}
|
||||
|
||||
//if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
|
||||
|
||||
Poco::Dynamic::Var JsonRequestHandler::parseJsonWithErrorPrintFile(std::istream& request_stream, NotificationList* errorHandler /* = nullptr*/, const char* functionName /* = nullptr*/)
|
||||
{
|
||||
// debugging answer
|
||||
|
||||
std::stringstream responseStringStream;
|
||||
for (std::string line; std::getline(request_stream, line); ) {
|
||||
responseStringStream << line << std::endl;
|
||||
}
|
||||
|
||||
// extract parameter from request
|
||||
Poco::JSON::Parser jsonParser;
|
||||
Poco::Dynamic::Var parsedJson;
|
||||
try {
|
||||
parsedJson = jsonParser.parse(responseStringStream.str());
|
||||
|
||||
return parsedJson;
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
if (errorHandler) {
|
||||
errorHandler->addError(new ParamError(functionName, "error parsing request answer", ex.displayText().data()));
|
||||
errorHandler->sendErrorsAsEmail(responseStringStream.str());
|
||||
}
|
||||
std::string dateTimeString = Poco::DateTimeFormatter::format(Poco::DateTime(), "%d_%m_%yT%H_%M_%S");
|
||||
std::string filename = dateTimeString + "_response.html";
|
||||
FILE* f = fopen(filename.data(), "wt");
|
||||
if (f) {
|
||||
std::string responseString = responseStringStream.str();
|
||||
fwrite(responseString.data(), 1, responseString.size(), f);
|
||||
fclose(f);
|
||||
}
|
||||
return Poco::Dynamic::Var();
|
||||
}
|
||||
return Poco::Dynamic::Var();
|
||||
}
|
||||
|
||||
Poco::JSON::Object* JsonRequestHandler::stateError(const char* msg, std::string details)
|
||||
{
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
result->set("state", "error");
|
||||
result->set("msg", msg);
|
||||
if (details != "") {
|
||||
result->set("details", details);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Poco::JSON::Object* JsonRequestHandler::stateSuccess()
|
||||
{
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
result->set("state", "success");
|
||||
return result;
|
||||
}
|
||||
|
||||
Poco::JSON::Object* JsonRequestHandler::customStateError(const char* state, const char* msg, std::string details/* = ""*/)
|
||||
{
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
result->set("state", state);
|
||||
result->set("msg", msg);
|
||||
if (details != "") {
|
||||
result->set("details", details);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
Poco::JSON::Object* JsonRequestHandler::checkAndLoadSession(Poco::Dynamic::Var params, bool checkIp/* = false*/)
|
||||
{
|
||||
int session_id = 0;
|
||||
auto sm = SessionManager::getInstance();
|
||||
|
||||
if (params.isStruct()) {
|
||||
session_id = params["session_id"];
|
||||
//std::string miau = params["miau"];
|
||||
}
|
||||
else if (params.isVector()) {
|
||||
try {
|
||||
const Poco::URI::QueryParameters queryParams = params.extract<Poco::URI::QueryParameters>();
|
||||
for (auto it = queryParams.begin(); it != queryParams.end(); it++) {
|
||||
if (it->first == "session_id") {
|
||||
auto numberParseResult = DataTypeConverter::strToInt(it->second, session_id);
|
||||
if (DataTypeConverter::NUMBER_PARSE_OKAY != numberParseResult) {
|
||||
return stateError("error parsing session_id", DataTypeConverter::numberParseStateToString(numberParseResult));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
//auto var = params[0];
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
return stateError("error parsing query params, Poco Error", ex.displayText());
|
||||
}
|
||||
}
|
||||
|
||||
if (!session_id) {
|
||||
return stateError("empty session id");
|
||||
}
|
||||
|
||||
auto session = sm->getSession(session_id);
|
||||
if (!session) {
|
||||
return customStateError("not found", "session not found");
|
||||
}
|
||||
if (checkIp) {
|
||||
if (mClientIp.isLoopback()) {
|
||||
return stateError("client ip is loop back ip");
|
||||
}
|
||||
if (!session->isIPValid(mClientIp)) {
|
||||
return stateError("client ip differ from login client ip");
|
||||
}
|
||||
}
|
||||
auto userNew = session->getNewUser();
|
||||
//auto user = session->getUser();
|
||||
if (userNew.isNull()) {
|
||||
return customStateError("not found", "Session didn't contain user");
|
||||
}
|
||||
auto userModel = userNew->getModel();
|
||||
if (userModel.isNull()) {
|
||||
return customStateError("not found", "User is empty");
|
||||
}
|
||||
mSession = session;
|
||||
return nullptr;
|
||||
|
||||
}
|
||||
|
||||
@ -3,22 +3,32 @@
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
#include "Poco/JSON/Object.h"
|
||||
|
||||
#include "../lib/ErrorList.h"
|
||||
#include "../model/Session.h"
|
||||
#include "../lib/NotificationList.h"
|
||||
|
||||
|
||||
class JsonRequestHandler : public Poco::Net::HTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
|
||||
JsonRequestHandler();
|
||||
JsonRequestHandler(Session* session);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
|
||||
virtual Poco::JSON::Object* handle(Poco::Dynamic::Var params) = 0;
|
||||
|
||||
static Poco::Dynamic::Var parseJsonWithErrorPrintFile(std::istream& request_stream, ErrorList* errorHandler = nullptr, const char* functionName = nullptr);
|
||||
static Poco::Dynamic::Var parseJsonWithErrorPrintFile(std::istream& request_stream, NotificationList* errorHandler = nullptr, const char* functionName = nullptr);
|
||||
|
||||
inline void setSession(Session* session) { mSession = session; }
|
||||
|
||||
protected:
|
||||
Poco::JSON::Object* mResultJson;
|
||||
Poco::Net::IPAddress mClientIp;
|
||||
Session* mSession;
|
||||
|
||||
Poco::JSON::Object* checkAndLoadSession(Poco::Dynamic::Var params, bool checkIp = false);
|
||||
|
||||
static Poco::JSON::Object* stateError(const char* msg, std::string details = "");
|
||||
static Poco::JSON::Object* customStateError(const char* state, const char* msg, std::string details = "");
|
||||
static Poco::JSON::Object* stateSuccess();
|
||||
|
||||
@ -1,74 +1,134 @@
|
||||
#include "JsonRequestHandlerFactory.h"
|
||||
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
|
||||
#include "JsonCreateUser.h"
|
||||
#include "JsonGetLogin.h"
|
||||
#include "JsonUnknown.h"
|
||||
#include "JsonTransaction.h"
|
||||
#include "JsonGetRunningUserTasks.h"
|
||||
#include "JsonGetUsers.h"
|
||||
#include "JsonAdminEmailVerificationResend.h"
|
||||
#include "JsonGetUserInfos.h"
|
||||
#include "JsonUpdateUserInfos.h"
|
||||
#include "JsonUnsecureLogin.h"
|
||||
#include "JsonLogout.h"
|
||||
|
||||
JsonRequestHandlerFactory::JsonRequestHandlerFactory()
|
||||
: mRemoveGETParameters("^/([a-zA-Z0-9_-]*)"), mLogging(Poco::Logger::get("requestLog"))
|
||||
{
|
||||
}
|
||||
|
||||
Poco::Net::HTTPRequestHandler* JsonRequestHandlerFactory::createRequestHandler(const Poco::Net::HTTPServerRequest& request)
|
||||
{
|
||||
std::string uri = request.getURI();
|
||||
std::string url_first_part;
|
||||
std::stringstream logStream;
|
||||
|
||||
mRemoveGETParameters.extract(uri, url_first_part);
|
||||
|
||||
std::string dateTimeString = Poco::DateTimeFormatter::format(Poco::DateTime(), "%d.%m.%y %H:%M:%S");
|
||||
logStream << dateTimeString << " call " << uri;
|
||||
|
||||
mLogging.information(logStream.str());
|
||||
|
||||
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());
|
||||
client_host = Poco::Net::IPAddress(client_host_string);
|
||||
|
||||
if (url_first_part == "/login") {
|
||||
return new JsonGetLogin;
|
||||
}
|
||||
else if (url_first_part == "/checkTransaction") {
|
||||
return new JsonTransaction;
|
||||
}
|
||||
else if (url_first_part == "/getRunningUserTasks") {
|
||||
return new JsonGetRunningUserTasks;
|
||||
}
|
||||
else if (url_first_part == "/getUsers") {
|
||||
return new JsonGetUsers;
|
||||
}
|
||||
else if (url_first_part == "/createUser") {
|
||||
return new JsonCreateUser(client_host);
|
||||
}
|
||||
else if (url_first_part == "/adminEmailVerificationResend") {
|
||||
return new JsonAdminEmailVerificationResend;
|
||||
}
|
||||
else if (url_first_part == "/getUserInfos") {
|
||||
return new JsonGetUserInfos;
|
||||
}
|
||||
else if (url_first_part == "/updateUserInfos") {
|
||||
return new JsonUpdateUserInfos;
|
||||
}
|
||||
else if (url_first_part == "/unsecureLogin" && (ServerConfig::g_AllowUnsecureFlags & ServerConfig::UNSECURE_PASSWORD_REQUESTS)) {
|
||||
return new JsonUnsecureLogin(client_host);
|
||||
}
|
||||
else if (url_first_part == "/logout") {
|
||||
return new JsonLogout(client_host);
|
||||
}
|
||||
return new JsonUnknown;
|
||||
}
|
||||
#include "JsonRequestHandlerFactory.h"
|
||||
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
|
||||
#include "JsonAdminEmailVerificationResend.h"
|
||||
#include "JsonAppLogin.h"
|
||||
#include "JsonAquireAccessToken.h"
|
||||
#include "JsonCreateTransaction.h"
|
||||
#include "JsonCreateUser.h"
|
||||
#include "JsonGetLogin.h"
|
||||
#include "JsonUnknown.h"
|
||||
#include "JsonTransaction.h"
|
||||
#include "JsonGetRunningUserTasks.h"
|
||||
#include "JsonGetUsers.h"
|
||||
#include "JsonLogout.h"
|
||||
#include "JsonNetworkInfos.h"
|
||||
#include "JsonGetUserInfos.h"
|
||||
#include "JsonUnsecureLogin.h"
|
||||
#include "JsonUpdateUserInfos.h"
|
||||
#include "JsonUnsecureLogin.h"
|
||||
#include "JsonLogout.h"
|
||||
#include "JsonSearch.h"
|
||||
|
||||
|
||||
JsonRequestHandlerFactory::JsonRequestHandlerFactory()
|
||||
: mRemoveGETParameters("^/([a-zA-Z0-9_-]*)"), mLogging(Poco::Logger::get("requestLog"))
|
||||
{
|
||||
}
|
||||
|
||||
Poco::Net::HTTPRequestHandler* JsonRequestHandlerFactory::createRequestHandler(const Poco::Net::HTTPServerRequest& request)
|
||||
{
|
||||
std::string uri = request.getURI();
|
||||
std::string url_first_part;
|
||||
std::stringstream logStream;
|
||||
|
||||
mRemoveGETParameters.extract(uri, url_first_part);
|
||||
|
||||
std::string dateTimeString = Poco::DateTimeFormatter::format(Poco::DateTime(), "%d.%m.%y %H:%M:%S");
|
||||
logStream << dateTimeString << " call " << uri;
|
||||
|
||||
mLogging.information(logStream.str());
|
||||
|
||||
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());
|
||||
client_host = Poco::Net::IPAddress(client_host_string);
|
||||
|
||||
// check if user has valid session
|
||||
Poco::Net::NameValueCollection cookies;
|
||||
request.getCookies(cookies);
|
||||
|
||||
int session_id = 0;
|
||||
|
||||
try {
|
||||
session_id = atoi(cookies.get("GRADIDO_LOGIN").data());
|
||||
}
|
||||
catch (...) {}
|
||||
|
||||
auto sm = SessionManager::getInstance();
|
||||
Session* s = nullptr;
|
||||
if (!session_id) {
|
||||
s = sm->getSession(session_id);
|
||||
}
|
||||
|
||||
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());
|
||||
client_host = Poco::Net::IPAddress(client_host_string);
|
||||
|
||||
if (url_first_part == "/login") {
|
||||
return new JsonGetLogin;
|
||||
}
|
||||
else if (url_first_part == "/checkTransaction") {
|
||||
return new JsonTransaction;
|
||||
}
|
||||
else if (url_first_part == "/createTransaction") {
|
||||
return new JsonCreateTransaction;
|
||||
}
|
||||
else if (url_first_part == "/getRunningUserTasks") {
|
||||
return new JsonGetRunningUserTasks;
|
||||
}
|
||||
else if (url_first_part == "/getUsers") {
|
||||
return new JsonGetUsers;
|
||||
}
|
||||
else if (url_first_part == "/networkInfos") {
|
||||
return new JsonNetworkInfos;
|
||||
}
|
||||
else if (url_first_part == "/createUser") {
|
||||
return new JsonCreateUser(client_host);
|
||||
}
|
||||
else if (url_first_part == "/adminEmailVerificationResend") {
|
||||
return new JsonAdminEmailVerificationResend;
|
||||
}
|
||||
else if (url_first_part == "/getUserInfos") {
|
||||
return new JsonGetUserInfos;
|
||||
}
|
||||
else if (url_first_part == "/updateUserInfos") {
|
||||
return new JsonUpdateUserInfos;
|
||||
}
|
||||
else if (url_first_part == "/search") {
|
||||
return new JsonSearch;
|
||||
}
|
||||
else if (url_first_part == "/unsecureLogin" && (ServerConfig::g_AllowUnsecureFlags & ServerConfig::UNSECURE_PASSWORD_REQUESTS)) {
|
||||
return new JsonUnsecureLogin(client_host);
|
||||
}
|
||||
else if (url_first_part == "/logout") {
|
||||
return new JsonLogout(client_host);
|
||||
}
|
||||
else if (url_first_part == "/acquireAccessToken") {
|
||||
auto requestHandler = new JsonAquireAccessToken;
|
||||
requestHandler->setSession(s);
|
||||
return requestHandler;
|
||||
}
|
||||
else if (url_first_part == "/unsecureLogin" && (ServerConfig::g_AllowUnsecureFlags & ServerConfig::UNSECURE_PASSWORD_REQUESTS)) {
|
||||
return new JsonUnsecureLogin(client_host);
|
||||
}
|
||||
else if (url_first_part == "/appLogin") {
|
||||
return new JsonAppLogin;
|
||||
}
|
||||
else if (url_first_part == "/appLogout") {
|
||||
if (s) {
|
||||
sm->releaseSession(s);
|
||||
}
|
||||
}
|
||||
else if (url_first_part == "/logout") {
|
||||
return new JsonLogout(client_host);
|
||||
}
|
||||
|
||||
return new JsonUnknown;
|
||||
}
|
||||
|
||||
89
login_server/src/cpp/JSONInterface/JsonSearch.cpp
Normal file
89
login_server/src/cpp/JSONInterface/JsonSearch.cpp
Normal file
@ -0,0 +1,89 @@
|
||||
#include "JsonSearch.h"
|
||||
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
#include "../controller/User.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
|
||||
Poco::JSON::Object* JsonSearch::handle(Poco::Dynamic::Var params)
|
||||
{
|
||||
/*
|
||||
'ask' = ['account_publickey' => '<email_blake2b_base64>']
|
||||
*/
|
||||
// incoming
|
||||
|
||||
Poco::JSON::Object::Ptr ask;
|
||||
|
||||
// if is json object
|
||||
if (params.type() == typeid(Poco::JSON::Object::Ptr)) {
|
||||
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
|
||||
/// Throws a RangeException if the value does not fit
|
||||
/// into the result variable.
|
||||
/// Throws a NotImplementedException if conversion is
|
||||
/// not available for the given type.
|
||||
/// Throws InvalidAccessException if Var is empty.
|
||||
try {
|
||||
ask = paramJsonObject->getObject("ask");
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
return stateError("json exception", ex.displayText());
|
||||
}
|
||||
}
|
||||
else {
|
||||
return stateError("parameter format unknown");
|
||||
}
|
||||
|
||||
|
||||
if (ask.isNull()) {
|
||||
return stateError("ask is zero or not an object");
|
||||
}
|
||||
|
||||
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
result->set("state", "success");
|
||||
Poco::JSON::Array jsonErrorsArray;
|
||||
Poco::JSON::Object result_fields;
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto mm = MemoryManager::getInstance();
|
||||
for (auto it = ask->begin(); it != ask->end(); it++) {
|
||||
std::string name = it->first;
|
||||
auto value = it->second;
|
||||
|
||||
|
||||
try {
|
||||
if ("account_publickey" == name) {
|
||||
if (!value.isString()) {
|
||||
jsonErrorsArray.add("account_publickey isn't a string");
|
||||
}
|
||||
else {
|
||||
MemoryBin* email_hash = nullptr;
|
||||
if (sm->isValid(value, VALIDATE_ONLY_HEX)) {
|
||||
email_hash = DataTypeConverter::hexToBin(value);
|
||||
}
|
||||
if (!email_hash) {
|
||||
email_hash = DataTypeConverter::base64ToBin(value);
|
||||
}
|
||||
if (!email_hash) {
|
||||
jsonErrorsArray.add("account_publickey isn't valid base64 or hex");
|
||||
}
|
||||
else {
|
||||
auto user = controller::User::create();
|
||||
user->load(email_hash);
|
||||
mm->releaseMemory(email_hash);
|
||||
auto user_model = user->getModel();
|
||||
auto public_key_base64 = DataTypeConverter::binToBase64(user_model->getPublicKey(), user_model->getPublicKeySize());
|
||||
result_fields.set("account_publickey", public_key_base64);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
jsonErrorsArray.add("update parameter invalid");
|
||||
}
|
||||
}
|
||||
|
||||
result->set("errors", jsonErrorsArray);
|
||||
result->set("results", result_fields);
|
||||
result->set("state", "success");
|
||||
|
||||
return result;
|
||||
}
|
||||
24
login_server/src/cpp/JSONInterface/JsonSearch.h
Normal file
24
login_server/src/cpp/JSONInterface/JsonSearch.h
Normal file
@ -0,0 +1,24 @@
|
||||
#ifndef __JSON_INTERFACE_JSON_SEARCH_
|
||||
#define __JSON_INTERFACE_JSON_SEARCH_
|
||||
|
||||
#include "JsonRequestHandler.h"
|
||||
|
||||
/*!
|
||||
* @author Dario Rekowski
|
||||
* @date 2020-09-28
|
||||
* @brief search for public informations (no session_id needed), like account id for email hash
|
||||
*
|
||||
*
|
||||
*/
|
||||
|
||||
class JsonSearch : public JsonRequestHandler
|
||||
{
|
||||
public:
|
||||
Poco::JSON::Object* handle(Poco::Dynamic::Var params);
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif // __JSON_INTERFACE_JSON_SEARCH_
|
||||
@ -1,175 +1,171 @@
|
||||
#include "JsonTransaction.h"
|
||||
#include "Poco/URI.h"
|
||||
#include "Poco/Dynamic/Struct.h"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
Poco::JSON::Object* JsonTransaction::handle(Poco::Dynamic::Var params)
|
||||
{
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
int session_id = 0;
|
||||
|
||||
// if is json object
|
||||
if (params.type() == typeid(Poco::JSON::Object::Ptr)) {
|
||||
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
|
||||
|
||||
try {
|
||||
/// Throws a RangeException if the value does not fit
|
||||
/// into the result variable.
|
||||
/// Throws a NotImplementedException if conversion is
|
||||
/// not available for the given type.
|
||||
/// Throws InvalidAccessException if Var is empty.
|
||||
paramJsonObject->get("session_id").convert(session_id);
|
||||
auto sm = SessionManager::getInstance();
|
||||
if (session_id != 0) {
|
||||
auto session = sm->getSession(session_id);
|
||||
if (!session) {
|
||||
result->set("state", "error");
|
||||
result->set("msg", "session not found");
|
||||
return result;
|
||||
}
|
||||
|
||||
int balance = 0;
|
||||
|
||||
if (!paramJsonObject->isNull("balance")) {
|
||||
paramJsonObject->get("balance").convert(balance);
|
||||
if (balance) {
|
||||
auto u = session->getUser();
|
||||
if (u) {
|
||||
u->setBalance(balance);
|
||||
}
|
||||
auto nu = session->getNewUser();
|
||||
if (!nu.isNull()) {
|
||||
nu->setBalance(balance);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string transactionBase64String;
|
||||
Poco::Dynamic::Var transaction_base64 = paramJsonObject->get("transaction_base64");
|
||||
bool auto_sign = false;
|
||||
auto auto_sign_json = paramJsonObject->get("auto_sign");
|
||||
if (!auto_sign_json.isEmpty()) {
|
||||
auto_sign_json.convert(auto_sign);
|
||||
}
|
||||
|
||||
if (transaction_base64.isString()) {
|
||||
paramJsonObject->get("transaction_base64").convert(transactionBase64String);
|
||||
|
||||
if (!session->startProcessingTransaction(transactionBase64String, auto_sign)) {
|
||||
if (auto_sign) {
|
||||
auto errorJson = session->getErrorsArray();
|
||||
result->set("state", "error");
|
||||
result->set("msg", "error processing transaction");
|
||||
result->set("details", errorJson);
|
||||
return result;
|
||||
}
|
||||
auto lastError = session->getLastError();
|
||||
if (lastError) delete lastError;
|
||||
result->set("state", "error");
|
||||
result->set("msg", "already enlisted");
|
||||
return result;
|
||||
}
|
||||
|
||||
} else {
|
||||
Poco::DynamicStruct ds = *paramJsonObject;
|
||||
int alreadyEnlisted = 0;
|
||||
|
||||
for (int i = 0; i < ds["transaction_base64"].size(); i++) {
|
||||
ds["transaction_base64"][i].convert(transactionBase64String);
|
||||
if (!session->startProcessingTransaction(transactionBase64String, auto_sign)) {
|
||||
auto lastError = session->getLastError();
|
||||
if (lastError) delete lastError;
|
||||
alreadyEnlisted++;
|
||||
}
|
||||
}
|
||||
|
||||
if (alreadyEnlisted > 0) {
|
||||
result->set("state", "warning");
|
||||
result->set("msg", std::to_string(alreadyEnlisted) + " already enlisted");
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
result->set("state", "success");
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
printf("[JsonTransaction::handle] try to use params as jsonObject: %s\n", ex.displayText().data());
|
||||
result->set("state", "error");
|
||||
result->set("msg", "json exception");
|
||||
result->set("details", ex.displayText());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
else if (params.isVector()) {
|
||||
const Poco::URI::QueryParameters queryParams = params.extract<Poco::URI::QueryParameters>();
|
||||
auto transactionIT = queryParams.begin();
|
||||
for (auto it = queryParams.begin(); it != queryParams.end(); it++) {
|
||||
if (it->first == "session_id") {
|
||||
session_id = stoi(it->second);
|
||||
//break;
|
||||
}
|
||||
else if (it->first == "transaction_base64") {
|
||||
transactionIT = it;
|
||||
}
|
||||
}
|
||||
if (session_id) {
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto session = sm->getSession(session_id);
|
||||
if (!session) {
|
||||
result->set("state", "error");
|
||||
result->set("msg", "session not found");
|
||||
return result;
|
||||
}
|
||||
if (!session->startProcessingTransaction(transactionIT->second)) {
|
||||
auto lastError = session->getLastError();
|
||||
if (lastError) delete lastError;
|
||||
result->set("state", "error");
|
||||
result->set("msg", "already enlisted");
|
||||
return result;
|
||||
}
|
||||
result->set("state", "success");
|
||||
return result;
|
||||
}
|
||||
else {
|
||||
result->set("state", "error");
|
||||
result->set("msg", "session id not set");
|
||||
return result;
|
||||
}
|
||||
}
|
||||
else if (params.isStruct()) {
|
||||
result->set("state", "error");
|
||||
result->set("msg", "struct not implemented yet");
|
||||
}
|
||||
else if (params.isArray()) {
|
||||
result->set("state", "error");
|
||||
result->set("msg", "array not implemented yet");
|
||||
}
|
||||
else if (params.isList()) {
|
||||
result->set("state", "error");
|
||||
result->set("msg", "list not implemented yet");
|
||||
}
|
||||
else if (params.isString()) {
|
||||
result->set("state", "error");
|
||||
result->set("msg", "string not implemented yet");
|
||||
}
|
||||
else if (params.isDeque()) {
|
||||
result->set("state", "error");
|
||||
result->set("msg", "deque not implemented yet");
|
||||
}
|
||||
else {
|
||||
|
||||
result->set("state", "error");
|
||||
result->set("msg", "format not implemented");
|
||||
result->set("details", std::string(params.type().name()));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#include "JsonTransaction.h"
|
||||
#include "Poco/URI.h"
|
||||
#include "Poco/Dynamic/Struct.h"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
Poco::JSON::Object* JsonTransaction::handle(Poco::Dynamic::Var params)
|
||||
{
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
int session_id = 0;
|
||||
|
||||
// if is json object
|
||||
if (params.type() == typeid(Poco::JSON::Object::Ptr)) {
|
||||
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
|
||||
|
||||
try {
|
||||
/// Throws a RangeException if the value does not fit
|
||||
/// into the result variable.
|
||||
/// Throws a NotImplementedException if conversion is
|
||||
/// not available for the given type.
|
||||
/// Throws InvalidAccessException if Var is empty.
|
||||
paramJsonObject->get("session_id").convert(session_id);
|
||||
auto sm = SessionManager::getInstance();
|
||||
if (session_id != 0) {
|
||||
auto session = sm->getSession(session_id);
|
||||
if (!session) {
|
||||
result->set("state", "error");
|
||||
result->set("msg", "session not found");
|
||||
return result;
|
||||
}
|
||||
|
||||
int balance = 0;
|
||||
|
||||
if (!paramJsonObject->isNull("balance")) {
|
||||
paramJsonObject->get("balance").convert(balance);
|
||||
if (balance) {
|
||||
auto nu = session->getNewUser();
|
||||
if (!nu.isNull()) {
|
||||
nu->setBalance(balance);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
std::string transactionBase64String;
|
||||
Poco::Dynamic::Var transaction_base64 = paramJsonObject->get("transaction_base64");
|
||||
int alreadyEnlisted = 0;
|
||||
bool auto_sign = false;
|
||||
auto auto_sign_json = paramJsonObject->get("auto_sign");
|
||||
if (!auto_sign_json.isEmpty()) {
|
||||
auto_sign_json.convert(auto_sign);
|
||||
}
|
||||
|
||||
if (transaction_base64.isString()) {
|
||||
paramJsonObject->get("transaction_base64").convert(transactionBase64String);
|
||||
|
||||
if (!session->startProcessingTransaction(transactionBase64String, auto_sign)) {
|
||||
if (auto_sign) {
|
||||
auto errorJson = session->getErrorsArray();
|
||||
result->set("state", "error");
|
||||
result->set("msg", "error processing transaction");
|
||||
result->set("details", errorJson);
|
||||
return result;
|
||||
}
|
||||
auto lastError = session->getLastError();
|
||||
if (lastError) delete lastError;
|
||||
result->set("state", "error");
|
||||
result->set("msg", "already enlisted");
|
||||
return result;
|
||||
}
|
||||
|
||||
} else {
|
||||
Poco::DynamicStruct ds = *paramJsonObject;
|
||||
int alreadyEnlisted = 0;
|
||||
|
||||
for (int i = 0; i < ds["transaction_base64"].size(); i++) {
|
||||
ds["transaction_base64"][i].convert(transactionBase64String);
|
||||
if (!session->startProcessingTransaction(transactionBase64String, auto_sign)) {
|
||||
auto lastError = session->getLastError();
|
||||
if (lastError) delete lastError;
|
||||
alreadyEnlisted++;
|
||||
}
|
||||
}
|
||||
|
||||
if (alreadyEnlisted > 0) {
|
||||
result->set("state", "warning");
|
||||
result->set("msg", std::to_string(alreadyEnlisted) + " already enlisted");
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
result->set("state", "success");
|
||||
return result;
|
||||
}
|
||||
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
printf("[JsonTransaction::handle] try to use params as jsonObject: %s\n", ex.displayText().data());
|
||||
result->set("state", "error");
|
||||
result->set("msg", "json exception");
|
||||
result->set("details", ex.displayText());
|
||||
return result;
|
||||
}
|
||||
}
|
||||
else if (params.isVector()) {
|
||||
const Poco::URI::QueryParameters queryParams = params.extract<Poco::URI::QueryParameters>();
|
||||
auto transactionIT = queryParams.begin();
|
||||
for (auto it = queryParams.begin(); it != queryParams.end(); it++) {
|
||||
if (it->first == "session_id") {
|
||||
session_id = stoi(it->second);
|
||||
//break;
|
||||
}
|
||||
else if (it->first == "transaction_base64") {
|
||||
transactionIT = it;
|
||||
}
|
||||
}
|
||||
if (session_id) {
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto session = sm->getSession(session_id);
|
||||
if (!session) {
|
||||
result->set("state", "error");
|
||||
result->set("msg", "session not found");
|
||||
return result;
|
||||
}
|
||||
if (!session->startProcessingTransaction(transactionIT->second)) {
|
||||
auto lastError = session->getLastError();
|
||||
if (lastError) delete lastError;
|
||||
result->set("state", "error");
|
||||
result->set("msg", "already enlisted");
|
||||
return result;
|
||||
}
|
||||
result->set("state", "success");
|
||||
return result;
|
||||
}
|
||||
else {
|
||||
result->set("state", "error");
|
||||
result->set("msg", "session id not set");
|
||||
return result;
|
||||
}
|
||||
}
|
||||
else if (params.isStruct()) {
|
||||
result->set("state", "error");
|
||||
result->set("msg", "struct not implemented yet");
|
||||
}
|
||||
else if (params.isArray()) {
|
||||
result->set("state", "error");
|
||||
result->set("msg", "array not implemented yet");
|
||||
}
|
||||
else if (params.isList()) {
|
||||
result->set("state", "error");
|
||||
result->set("msg", "list not implemented yet");
|
||||
}
|
||||
else if (params.isString()) {
|
||||
result->set("state", "error");
|
||||
result->set("msg", "string not implemented yet");
|
||||
}
|
||||
else if (params.isDeque()) {
|
||||
result->set("state", "error");
|
||||
result->set("meg", "deque not implemented yet");
|
||||
}
|
||||
else {
|
||||
|
||||
result->set("state", "error");
|
||||
result->set("msg", "format not implemented");
|
||||
result->set("details", std::string(params.type().name()));
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -52,7 +52,7 @@ Poco::JSON::Object* JsonUnsecureLogin::handle(Poco::Dynamic::Var params)
|
||||
return stateError("user with email not found", email);
|
||||
}
|
||||
|
||||
ErrorList pwd_errors;
|
||||
NotificationList pwd_errors;
|
||||
Poco::JSON::Object* result = new Poco::JSON::Object;
|
||||
|
||||
if (!password.size() || !sm->checkPwdValidation(password, &pwd_errors)) {
|
||||
@ -110,5 +110,4 @@ Poco::JSON::Object* JsonUnsecureLogin::handle(Poco::Dynamic::Var params)
|
||||
sm->releaseSession(session);
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user