mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
Add 'login_server/' from commit 'ca71af1817a801db9a108c205bc298250d498c4b'
git-subtree-dir: login_server git-subtree-mainline: 09ebb40de21084bb10ee466429d900a5e757d349 git-subtree-split: ca71af1817a801db9a108c205bc298250d498c4b
This commit is contained in:
commit
ac99a7097e
7
login_server/.gitignore
vendored
Normal file
7
login_server/.gitignore
vendored
Normal file
@ -0,0 +1,7 @@
|
||||
src/cpsp/lib*
|
||||
src/cpsp/cpspc
|
||||
src/cpsp/compile_unix.sh
|
||||
src/cpsp/*.h
|
||||
src/cpsp/*.cpp
|
||||
src/cpp/proto/
|
||||
build*/
|
||||
15
login_server/.gitmodules
vendored
Normal file
15
login_server/.gitmodules
vendored
Normal file
@ -0,0 +1,15 @@
|
||||
[submodule "dependencies/tinf"]
|
||||
path = dependencies/tinf
|
||||
url = https://github.com/jibsen/tinf.git
|
||||
[submodule "dependencies/mariadb-connector-c"]
|
||||
path = dependencies/mariadb-connector-c
|
||||
url = https://github.com/MariaDB/mariadb-connector-c.git
|
||||
[submodule "src/proto"]
|
||||
path = src/proto
|
||||
url = https://github.com/gradido/gradido_protocol.git
|
||||
[submodule "dependencies/iroha-ed25519"]
|
||||
path = dependencies/iroha-ed25519
|
||||
url = https://github.com/gradido/iroha-ed25519.git
|
||||
[submodule "dependencies/spirit-po"]
|
||||
path = dependencies/spirit-po
|
||||
url = https://github.com/cbeck88/spirit-po.git
|
||||
176
login_server/CMakeLists.txt
Normal file
176
login_server/CMakeLists.txt
Normal file
@ -0,0 +1,176 @@
|
||||
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(WIN32)
|
||||
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(WIN32)
|
||||
|
||||
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(WIN32)
|
||||
target_link_libraries(Gradido_LoginServer libmariadb protoc protobuf -pthread)
|
||||
endif(WIN32)
|
||||
|
||||
# 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(WIN32)
|
||||
target_link_libraries(Gradido_LoginServer_Test libmariadb protoc protobuf -pthread)
|
||||
endif(WIN32)
|
||||
|
||||
add_test(NAME main COMMAND Gradido_LoginServer_Test)
|
||||
2573
login_server/Doxyfile
Normal file
2573
login_server/Doxyfile
Normal file
File diff suppressed because it is too large
Load Diff
31
login_server/README
Normal file
31
login_server/README
Normal file
@ -0,0 +1,31 @@
|
||||
# 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
|
||||
cd build
|
||||
cmake -DWITH_SSL=OFF ..
|
||||
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
|
||||
# conan install .. -s build_type=Debug
|
||||
conan install ..
|
||||
|
||||
# build Makefile with cmake
|
||||
cmake ..
|
||||
|
||||
2
login_server/compile_pot.sh
Normal file
2
login_server/compile_pot.sh
Normal file
@ -0,0 +1,2 @@
|
||||
#!/bin/bash
|
||||
xgettext -D src/cpp -p src/LOCALE -o messages.pot --from-code=UTF-8 --files-from=files_to_translate.txt
|
||||
17
login_server/compile_proto.sh
Executable file
17
login_server/compile_proto.sh
Executable file
@ -0,0 +1,17 @@
|
||||
#!/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
|
||||
|
||||
10
login_server/conanfile.txt
Normal file
10
login_server/conanfile.txt
Normal file
@ -0,0 +1,10 @@
|
||||
[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
|
||||
|
||||
1
login_server/dependencies/iroha-ed25519
Submodule
1
login_server/dependencies/iroha-ed25519
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 1fdf5b6e10be2b1d7118aa3c32dc7acde02cb0cd
|
||||
1
login_server/dependencies/mariadb-connector-c
Submodule
1
login_server/dependencies/mariadb-connector-c
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 1f7480118acfe12be9e356827aa30ae9b9eca9a7
|
||||
1
login_server/dependencies/spirit-po
Submodule
1
login_server/dependencies/spirit-po
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 336789e62363357d87894983e6cbdd6da6c838ea
|
||||
1
login_server/dependencies/tinf
Submodule
1
login_server/dependencies/tinf
Submodule
@ -0,0 +1 @@
|
||||
Subproject commit 9929246b87f0946b124cfa2a89894b8943b0b072
|
||||
9
login_server/files_to_translate.txt
Normal file
9
login_server/files_to_translate.txt
Normal file
@ -0,0 +1,9 @@
|
||||
HTTPInterface/LoginPage.cpp
|
||||
HTTPInterface/CheckEmailPage.cpp
|
||||
HTTPInterface/ResetPassword.cpp
|
||||
HTTPInterface/PassphrasePage.cpp
|
||||
model/Session.cpp
|
||||
model/email/Email.cpp
|
||||
model/email/EmailCustomReply.cpp
|
||||
model/email/EmailNotificationCreation.cpp
|
||||
model/email/EmailNotificationTransfer.cpp
|
||||
15
login_server/skeema/gradido_login/elopage_buys.sql
Normal file
15
login_server/skeema/gradido_login/elopage_buys.sql
Normal file
@ -0,0 +1,15 @@
|
||||
CREATE TABLE `elopage_buys` (
|
||||
`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,
|
||||
`payed` tinyint NOT NULL,
|
||||
`success_date` datetime NOT NULL,
|
||||
`event` varchar(255) CHARACTER SET utf8mb4 NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
11
login_server/skeema/gradido_login/email_opt_in.sql
Normal file
11
login_server/skeema/gradido_login/email_opt_in.sql
Normal file
@ -0,0 +1,11 @@
|
||||
CREATE TABLE `email_opt_in` (
|
||||
`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,
|
||||
PRIMARY KEY (`id`),
|
||||
UNIQUE KEY `verification_code` (`verification_code`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
6
login_server/skeema/gradido_login/email_opt_in_types.sql
Normal file
6
login_server/skeema/gradido_login/email_opt_in_types.sql
Normal file
@ -0,0 +1,6 @@
|
||||
CREATE TABLE `email_opt_in_types` (
|
||||
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) NOT NULL,
|
||||
`description` varchar(255) NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
7
login_server/skeema/gradido_login/roles.sql
Normal file
7
login_server/skeema/gradido_login/roles.sql
Normal file
@ -0,0 +1,7 @@
|
||||
CREATE TABLE `roles` (
|
||||
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`name` varchar(255) NOT NULL,
|
||||
`description` varchar(255) NOT NULL,
|
||||
`flags` bigint NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
7
login_server/skeema/gradido_login/user_backups.sql
Normal file
7
login_server/skeema/gradido_login/user_backups.sql
Normal file
@ -0,0 +1,7 @@
|
||||
CREATE TABLE `user_backups` (
|
||||
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`user_id` int NOT NULL,
|
||||
`passphrase` text NOT NULL,
|
||||
`mnemonic_type` int DEFAULT '-1',
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
6
login_server/skeema/gradido_login/user_roles.sql
Normal file
6
login_server/skeema/gradido_login/user_roles.sql
Normal file
@ -0,0 +1,6 @@
|
||||
CREATE TABLE `user_roles` (
|
||||
`id` int UNSIGNED NOT NULL AUTO_INCREMENT,
|
||||
`user_id` int NOT NULL,
|
||||
`role_id` int NOT NULL,
|
||||
PRIMARY KEY (`id`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
|
||||
16
login_server/skeema/gradido_login/users.sql
Normal file
16
login_server/skeema/gradido_login/users.sql
Normal file
@ -0,0 +1,16 @@
|
||||
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 NOT NULL,
|
||||
`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;
|
||||
BIN
login_server/src/LOCALE/de_DE.mo
Normal file
BIN
login_server/src/LOCALE/de_DE.mo
Normal file
Binary file not shown.
419
login_server/src/LOCALE/de_DE.po
Normal file
419
login_server/src/LOCALE/de_DE.po
Normal file
@ -0,0 +1,419 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-05-28 10:50+0200\n"
|
||||
"PO-Revision-Date: 2020-05-28 10:54+0200\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: de_DE\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.3.1\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:85
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:124
|
||||
msgid "Login"
|
||||
msgstr "Anmeldung"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:85
|
||||
msgid "E-Mail or password isn't right, please try again!"
|
||||
msgstr ""
|
||||
"E-Mail und Passwort Kombination stimmen nicht, bitte versuche es erneut. "
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:88
|
||||
#, fuzzy
|
||||
#| msgid "Password"
|
||||
msgid "Passwort"
|
||||
msgstr "Passwort"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:88
|
||||
msgid ""
|
||||
"Passwort wird noch berechnet, bitte versuche es in etwa 1 Minute erneut."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:91
|
||||
msgid "Account"
|
||||
msgstr "Konto"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:91
|
||||
msgid "E-Mail Address not checked, do you already get one?"
|
||||
msgstr ""
|
||||
"E-Mail Adresse wurde noch nicht überprüft. Hast du schon in deine E-Mails "
|
||||
"geschaut? Bitte schau auch in dein Spam-Verzeichnis nach."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:124
|
||||
msgid "Username and password are needed!"
|
||||
msgstr "E-Mail und Passwort werden benötigt!"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:175
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:50
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:54
|
||||
#: model/Session.cpp:163 model/Session.cpp:170 model/Session.cpp:209
|
||||
#: model/Session.cpp:234
|
||||
msgid "E-Mail"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:178
|
||||
msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:180
|
||||
msgid " Login "
|
||||
msgstr "Anmeldung"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:182
|
||||
msgid "You haven't any account yet? Please follow the link to create one."
|
||||
msgstr "Du hast noch kein Gradido-Konto?"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:183
|
||||
msgid "Create New Account"
|
||||
msgstr "Neues Konto erstellen"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:186
|
||||
msgid "Passwort vergessen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:97
|
||||
msgid "Bitte gebe deinen E-Mail Verification Code ein:"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:98
|
||||
#: model/Session.cpp:186
|
||||
#, fuzzy
|
||||
#| msgid "E-Mail Verification"
|
||||
msgid "Email Verification Code"
|
||||
msgstr "E-Mail Überprüfung"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:100
|
||||
msgid "Überprüfe Code"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:104
|
||||
msgid "Du hast bisher keinen Code erhalten?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:105
|
||||
msgid "E-Mail erneut zuschicken (in Arbeit)"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:108
|
||||
msgid "Funktioniert dein E-Mail Verification Code nicht?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:109
|
||||
msgid "Schicke uns eine E-Mail und wir kümmern uns darum: "
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:110
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:133
|
||||
msgid "E-Mail an Support schicken"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:50
|
||||
msgid "E-Mail Adresse konnte nicht gefunden werden oder ist nicht aktiviert."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:54
|
||||
msgid "E-Mail Adresse nicht angegeben."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:59
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:74
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:26
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:94
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:114
|
||||
#: model/Session.cpp:495 model/Session.cpp:507 model/Session.cpp:515
|
||||
msgid "Passphrase"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:59
|
||||
msgid "Bitte wähle eine Option aus."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:74
|
||||
msgid "Ungültige Option"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:107
|
||||
msgid "Gebe bitte hier deine E-Mail Adresse an:"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:109
|
||||
msgid "Hast du dir deine Passphrase notiert oder gemerkt?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:113
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:196
|
||||
msgid "Ja"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:118
|
||||
msgid "Nein"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:123
|
||||
msgid "Absenden"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:127
|
||||
msgid "Dir wird eine E-Mail zugeschickt um dein Passwort zurückzusetzen."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:129
|
||||
msgid "Der Admin hat eine E-Mail bekommen und wird sich bei dir melden."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:131
|
||||
msgid ""
|
||||
"Du hast bereits eine E-Mail bekommen. Bitte schau auch in dein Spam-"
|
||||
"Verzeichnis nach. "
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:132
|
||||
msgid ""
|
||||
"Du hast wirklich keine E-Mail erhalten und auch schon ein paar Minuten "
|
||||
"gewartet?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:27
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:256
|
||||
msgid "Neues Konto anlegen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:28
|
||||
msgid "2/3"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:94
|
||||
msgid ""
|
||||
"Diese Passphrase ist ungültig, bitte überprüfen oder neu "
|
||||
"generieren (lassen)."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:114
|
||||
msgid "intern error please try again later"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:129
|
||||
msgid "3/3"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:132
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:135
|
||||
msgid "1/3"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:134
|
||||
msgid "Neues Passwort anlegen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:153
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:188
|
||||
msgid "Was zu tun ist:"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:154
|
||||
msgid ""
|
||||
"Schreibe dir deine Passphrase auf und packe sie gut weg. Du brauchst sie um "
|
||||
"deine Adresse wiederherzustellen. Wenn du sie verlierst, sind auch deine "
|
||||
"Gradidos verloren."
|
||||
msgstr ""
|
||||
"Schreibe dir deine Passphrase auf oder drucke sie aus und bewahre sie <b>in "
|
||||
"Papier-Form</b> an einem sicheren Ort auf (speichere sie nicht auf deinem "
|
||||
"Rechner oder Mobilgerät)! Du brauchst deine Passphrase um dein Konto "
|
||||
"wiederherzustellen, wenn du mal dein Passort vergessen haben solltest. "
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:157
|
||||
msgid "Deine Passphrase (Groß/Kleinschreibung beachten)"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:161
|
||||
msgid "Was ist eine Passphrase?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:162
|
||||
msgid ""
|
||||
"Die Passphrase kommt aus dem Crypto-Bereich und ist ein Weg einen "
|
||||
"komplizierte kryptografischen Schlüssel in einer lesbaren Form darzustellen."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:163
|
||||
msgid ""
|
||||
"Der neue Gradido basiert technisch auf einer Kryptowährung (wie z.B. "
|
||||
"Bitcoin) um maximale Sicherheit zu erreichen."
|
||||
msgstr ""
|
||||
"Der neue Gradido basiert technisch auf einer Kryptowährung (wie z.B. "
|
||||
"Bitcoin) um für dich die maximale Sicherheit zu gewährleisten."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:165
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:275
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:280
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:293
|
||||
msgid "Weiter"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:189
|
||||
msgid "Hast du dir deine Passphrase gemerkt?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:190
|
||||
msgid ""
|
||||
"Dann zeig es mir. Zur Unterstützung gebe ich dir deine Wörter aber in "
|
||||
"anderer Reihenfolge."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:191
|
||||
msgid "Klicke sie an um sie einzusetzen."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:195
|
||||
msgid ""
|
||||
"Weil du kein Javascript verwendest geht es direkt weiter. Hast du dir deine "
|
||||
"Passphrase gemerkt oder aufgeschrieben?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:242
|
||||
msgid "Deine E-Mail Adresse wurde erfolgreich bestätigt."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:246
|
||||
msgid "Neue Gradido Adresse anlegen / wiederherstellen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:247
|
||||
msgid ""
|
||||
"Möchtest du ein neues Gradido-Konto anlegen oder ein bestehendes "
|
||||
"wiederherstellen?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:263
|
||||
msgid "Bestehendes Konto wiederherstellen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:270
|
||||
msgid ""
|
||||
"Falls du ein bestehendes Konto wiederherstellen willst, gib hier deine "
|
||||
"Passphrase ein:"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:288
|
||||
msgid "Konto wiederherstellen / Neues Passwort anlegen"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:289
|
||||
msgid ""
|
||||
"Um dein Konto wiederherzustellen, 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."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:303
|
||||
msgid "Fehler"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:304
|
||||
msgid ""
|
||||
"Ungültige Seite, wenn du das siehst stimmt hier etwas nicht. Bitte wende "
|
||||
"dich an den Server-Admin."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:149 model/Session.cpp:180 model/Session.cpp:700
|
||||
#: model/Session.cpp:706 model/Session.cpp:1005
|
||||
msgid "Benutzer"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:149
|
||||
msgid "Eingeloggter Benutzer ist kein Admin"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:155 model/Session.cpp:201
|
||||
msgid "Vorname"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:155 model/Session.cpp:159 model/Session.cpp:201
|
||||
#: model/Session.cpp:205
|
||||
msgid ""
|
||||
"Bitte gebe einen Namen an. Mindestens 3 Zeichen, keines folgender Zeichen "
|
||||
"<>&;"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:159 model/Session.cpp:205
|
||||
msgid "Nachname"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:163 model/Session.cpp:209
|
||||
msgid "Bitte gebe eine gültige E-Mail Adresse an."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:170 model/Session.cpp:234
|
||||
msgid "Für diese E-Mail Adresse gibt es bereits einen Account"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:180 model/Session.cpp:186
|
||||
msgid "Fehler beim speichern!"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:379 model/Session.cpp:438 model/Session.cpp:881
|
||||
#: model/Session.cpp:889
|
||||
msgid "E-Mail Verification"
|
||||
msgstr "E-Mail Überprüfung"
|
||||
|
||||
#: model/Session.cpp:379
|
||||
msgid "Du hast dein Konto bereits aktiviert!"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:438
|
||||
msgid "Falscher Code für aktiven Login"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:495
|
||||
msgid "Deine Passphrase ist ungütig"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:507
|
||||
msgid "Ein Fehler trat auf, bitte versuche es erneut"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:515
|
||||
msgid "Das ist nicht die richtige Passphrase."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:700
|
||||
msgid "Konnte Community Server nicht erreichen. E-Mail an den Admin ist raus."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:706
|
||||
msgid ""
|
||||
"Fehler beim Löschen des Accounts. Bitte logge dich erneut ein und "
|
||||
"versuche es nochmal."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:881
|
||||
msgid "Konnte kein passendes Konto finden."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:889
|
||||
msgid "Fehler beim laden des Benutzers."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:1005
|
||||
msgid "Kein gültiger Benutzer, bitte logge dich erneut ein."
|
||||
msgstr ""
|
||||
|
||||
#~ msgid "Gradido: E-Mail Verification"
|
||||
#~ msgstr "Gradido: E-Mail Überprüfung"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Der Code stimmt nicht, bitte überprüfe ihn nochmal oder "
|
||||
#~ "registriere dich erneut oder wende dich an den Server-Admin"
|
||||
#~ msgstr ""
|
||||
#~ "Der Code stimmt nicht, bitte überprüfe ihn nochmal oder "
|
||||
#~ "schreibe mir eine E-Mail an: coin@gradido.net."
|
||||
BIN
login_server/src/LOCALE/en_GB.mo
Normal file
BIN
login_server/src/LOCALE/en_GB.mo
Normal file
Binary file not shown.
428
login_server/src/LOCALE/en_GB.po
Normal file
428
login_server/src/LOCALE/en_GB.po
Normal file
@ -0,0 +1,428 @@
|
||||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: \n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2020-05-28 10:50+0200\n"
|
||||
"PO-Revision-Date: 2020-05-28 10:53+0200\n"
|
||||
"Last-Translator: \n"
|
||||
"Language-Team: \n"
|
||||
"Language: en_GB\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"X-Generator: Poedit 2.3.1\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:85
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:124
|
||||
msgid "Login"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:85
|
||||
msgid "E-Mail or password isn't right, please try again!"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:88
|
||||
msgid "Passwort"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:88
|
||||
msgid ""
|
||||
"Passwort wird noch berechnet, bitte versuche es in etwa 1 Minute erneut."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:91
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:91
|
||||
msgid "E-Mail Address not checked, do you already get one?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:124
|
||||
msgid "Username and password are needed!"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:175
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:50
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:54
|
||||
#: model/Session.cpp:163 model/Session.cpp:170 model/Session.cpp:209
|
||||
#: model/Session.cpp:234
|
||||
msgid "E-Mail"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:178
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:180
|
||||
msgid " Login "
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:182
|
||||
msgid "You haven't any account yet? Please follow the link to create one."
|
||||
msgstr "Don't have an Gradido-account yet?"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:183
|
||||
msgid "Create New Account"
|
||||
msgstr "Sign Up"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:186
|
||||
msgid "Passwort vergessen"
|
||||
msgstr "Reset Password"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:97
|
||||
msgid "Bitte gebe deinen E-Mail Verification Code ein:"
|
||||
msgstr "Please enter your E-Mail Verification Code:"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:98
|
||||
#: model/Session.cpp:186
|
||||
msgid "Email Verification Code"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:100
|
||||
msgid "Überprüfe Code"
|
||||
msgstr "Check Code"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:104
|
||||
msgid "Du hast bisher keinen Code erhalten?"
|
||||
msgstr "You didn't get a code yet?"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:105
|
||||
msgid "E-Mail erneut zuschicken (in Arbeit)"
|
||||
msgstr "Re-Send E-Mail (work in progress)"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:108
|
||||
msgid "Funktioniert dein E-Mail Verification Code nicht?"
|
||||
msgstr "Your E-Mail Verfication Code doesn't work?"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:109
|
||||
msgid "Schicke uns eine E-Mail und wir kümmern uns darum: "
|
||||
msgstr "Send us a E-Mail and we take care of it:"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:110
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:133
|
||||
msgid "E-Mail an Support schicken"
|
||||
msgstr "Send E-Mail to support"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:50
|
||||
msgid "E-Mail Adresse konnte nicht gefunden werden oder ist nicht aktiviert."
|
||||
msgstr "E-Mail not found or not activated."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:54
|
||||
msgid "E-Mail Adresse nicht angegeben."
|
||||
msgstr "Please give your E-Mail Address."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:59
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:74
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:26
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:94
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:114
|
||||
#: model/Session.cpp:495 model/Session.cpp:507 model/Session.cpp:515
|
||||
msgid "Passphrase"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:59
|
||||
msgid "Bitte wähle eine Option aus."
|
||||
msgstr "Please choose one Option."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:74
|
||||
msgid "Ungültige Option"
|
||||
msgstr "Invalid option"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:107
|
||||
msgid "Gebe bitte hier deine E-Mail Adresse an:"
|
||||
msgstr "Please enter a valid email."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:109
|
||||
msgid "Hast du dir deine Passphrase notiert oder gemerkt?"
|
||||
msgstr "Do you memorized your passphrase?"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:113
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:196
|
||||
msgid "Ja"
|
||||
msgstr "Yes"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:118
|
||||
msgid "Nein"
|
||||
msgstr "No"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:123
|
||||
msgid "Absenden"
|
||||
msgstr "Send"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:127
|
||||
msgid "Dir wird eine E-Mail zugeschickt um dein Passwort zurückzusetzen."
|
||||
msgstr "You get an E-Mail to reset your password."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:129
|
||||
msgid "Der Admin hat eine E-Mail bekommen und wird sich bei dir melden."
|
||||
msgstr "The Admin get an E-Mail, wait on his replay."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:131
|
||||
msgid ""
|
||||
"Du hast bereits eine E-Mail bekommen. Bitte schau auch in dein Spam-"
|
||||
"Verzeichnis nach. "
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:132
|
||||
msgid ""
|
||||
"Du hast wirklich keine E-Mail erhalten und auch schon ein paar Minuten "
|
||||
"gewartet?"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:27
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:256
|
||||
msgid "Neues Konto anlegen"
|
||||
msgstr "Create new Account"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:28
|
||||
msgid "2/3"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:94
|
||||
msgid ""
|
||||
"Diese Passphrase ist ungültig, bitte überprüfen oder neu "
|
||||
"generieren (lassen)."
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:114
|
||||
msgid "intern error please try again later"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:129
|
||||
msgid "3/3"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:132
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:135
|
||||
msgid "1/3"
|
||||
msgstr ""
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:134
|
||||
msgid "Neues Passwort anlegen"
|
||||
msgstr "Create new Password"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:153
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:188
|
||||
msgid "Was zu tun ist:"
|
||||
msgstr "What to do:"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:154
|
||||
msgid ""
|
||||
"Schreibe dir deine Passphrase auf und packe sie gut weg. Du brauchst sie um "
|
||||
"deine Adresse wiederherzustellen. Wenn du sie verlierst, sind auch deine "
|
||||
"Gradidos verloren."
|
||||
msgstr ""
|
||||
"Write down your passphrase and put it away well. You need it to restore your "
|
||||
"address. If you lose them, your Gradidos are lost too."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:157
|
||||
msgid "Deine Passphrase (Groß/Kleinschreibung beachten)"
|
||||
msgstr "Your Passphrase"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:161
|
||||
msgid "Was ist eine Passphrase?"
|
||||
msgstr "What is a passphrase?"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:162
|
||||
msgid ""
|
||||
"Die Passphrase kommt aus dem Crypto-Bereich und ist ein Weg einen "
|
||||
"komplizierte kryptografischen Schlüssel in einer lesbaren Form darzustellen."
|
||||
msgstr ""
|
||||
"The passphrase comes from the crypto area and is a way to represent a "
|
||||
"complicated cryptographic key in a legible form."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:163
|
||||
msgid ""
|
||||
"Der neue Gradido basiert technisch auf einer Kryptowährung (wie z.B. "
|
||||
"Bitcoin) um maximale Sicherheit zu erreichen."
|
||||
msgstr ""
|
||||
"The new Gradido is technically based on a cryptocurrency (such as Bitcoin) "
|
||||
"to achieve maximum security for you."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:165
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:275
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:280
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:293
|
||||
msgid "Weiter"
|
||||
msgstr "Next"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:189
|
||||
msgid "Hast du dir deine Passphrase gemerkt?"
|
||||
msgstr "Do you memorized your passphrase?"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:190
|
||||
msgid ""
|
||||
"Dann zeig es mir. Zur Unterstützung gebe ich dir deine Wörter aber in "
|
||||
"anderer Reihenfolge."
|
||||
msgstr ""
|
||||
"Then show me. I will give you your words in a different order as support."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:191
|
||||
msgid "Klicke sie an um sie einzusetzen."
|
||||
msgstr "Click on it to use it."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:195
|
||||
msgid ""
|
||||
"Weil du kein Javascript verwendest geht es direkt weiter. Hast du dir deine "
|
||||
"Passphrase gemerkt oder aufgeschrieben?"
|
||||
msgstr ""
|
||||
"Because you don't use javascript it goes straight on. Did you remember or "
|
||||
"write down your passphrase?"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:242
|
||||
msgid "Deine E-Mail Adresse wurde erfolgreich bestätigt."
|
||||
msgstr "Your email address has been successfully confirmed."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:246
|
||||
msgid "Neue Gradido Adresse anlegen / wiederherstellen"
|
||||
msgstr "Create / restore new Gradido address"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:247
|
||||
msgid ""
|
||||
"Möchtest du ein neues Gradido-Konto anlegen oder ein bestehendes "
|
||||
"wiederherstellen?"
|
||||
msgstr ""
|
||||
"Do you want to restore an existing Gradido account or create a new one?"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:263
|
||||
msgid "Bestehendes Konto wiederherstellen"
|
||||
msgstr "Restore existing Account"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:270
|
||||
msgid ""
|
||||
"Falls du ein bestehendes Konto wiederherstellen willst, gib hier deine "
|
||||
"Passphrase ein:"
|
||||
msgstr ""
|
||||
"If you want to restore an existing account, enter your passphrase here:"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:288
|
||||
msgid "Konto wiederherstellen / Neues Passwort anlegen"
|
||||
msgstr "Restore account / create new password"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:289
|
||||
msgid ""
|
||||
"Um dein Konto wiederherzustellen, 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."
|
||||
msgstr ""
|
||||
"To restore your account and to be able to choose a new password, please type "
|
||||
"in the words of your passphrase in the correct order, which you have written "
|
||||
"down."
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:303
|
||||
msgid "Fehler"
|
||||
msgstr "Erro"
|
||||
|
||||
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:304
|
||||
msgid ""
|
||||
"Ungültige Seite, wenn du das siehst stimmt hier etwas nicht. Bitte wende "
|
||||
"dich an den Server-Admin."
|
||||
msgstr ""
|
||||
"Invalid page, if you see that something is wrong here. Please contact the "
|
||||
"server admin."
|
||||
|
||||
#: model/Session.cpp:149 model/Session.cpp:180 model/Session.cpp:700
|
||||
#: model/Session.cpp:706 model/Session.cpp:1005
|
||||
msgid "Benutzer"
|
||||
msgstr "User"
|
||||
|
||||
#: model/Session.cpp:149
|
||||
msgid "Eingeloggter Benutzer ist kein Admin"
|
||||
msgstr "Logged in user is not admin"
|
||||
|
||||
#: model/Session.cpp:155 model/Session.cpp:201
|
||||
msgid "Vorname"
|
||||
msgstr "Firstname"
|
||||
|
||||
#: model/Session.cpp:155 model/Session.cpp:159 model/Session.cpp:201
|
||||
#: model/Session.cpp:205
|
||||
msgid ""
|
||||
"Bitte gebe einen Namen an. Mindestens 3 Zeichen, keines folgender Zeichen "
|
||||
"<>&;"
|
||||
msgstr "Please enter your Name. At least 3 Character, without <>& and ;"
|
||||
|
||||
#: model/Session.cpp:159 model/Session.cpp:205
|
||||
msgid "Nachname"
|
||||
msgstr "Lastname"
|
||||
|
||||
#: model/Session.cpp:163 model/Session.cpp:209
|
||||
msgid "Bitte gebe eine gültige E-Mail Adresse an."
|
||||
msgstr "Please enter a valid email."
|
||||
|
||||
#: model/Session.cpp:170 model/Session.cpp:234
|
||||
msgid "Für diese E-Mail Adresse gibt es bereits einen Account"
|
||||
msgstr "This email has an account already."
|
||||
|
||||
#: model/Session.cpp:180 model/Session.cpp:186
|
||||
msgid "Fehler beim speichern!"
|
||||
msgstr "Error while saving!"
|
||||
|
||||
#: model/Session.cpp:379 model/Session.cpp:438 model/Session.cpp:881
|
||||
#: model/Session.cpp:889
|
||||
msgid "E-Mail Verification"
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:379
|
||||
msgid "Du hast dein Konto bereits aktiviert!"
|
||||
msgstr "You already activated your account!"
|
||||
|
||||
#: model/Session.cpp:438
|
||||
msgid "Falscher Code für aktiven Login"
|
||||
msgstr "Wrong Code for active Login."
|
||||
|
||||
#: model/Session.cpp:495
|
||||
msgid "Deine Passphrase ist ungütig"
|
||||
msgstr "Your passphrase is invalid"
|
||||
|
||||
#: model/Session.cpp:507
|
||||
msgid "Ein Fehler trat auf, bitte versuche es erneut"
|
||||
msgstr "An error occurred, please try again"
|
||||
|
||||
#: model/Session.cpp:515
|
||||
msgid "Das ist nicht die richtige Passphrase."
|
||||
msgstr "This is not the correct passphrase."
|
||||
|
||||
#: model/Session.cpp:700
|
||||
msgid "Konnte Community Server nicht erreichen. E-Mail an den Admin ist raus."
|
||||
msgstr "Couldn't connect to the community server, send E-Mail to admin."
|
||||
|
||||
#: model/Session.cpp:706
|
||||
msgid ""
|
||||
"Fehler beim Löschen des Accounts. Bitte logge dich erneut ein und "
|
||||
"versuche es nochmal."
|
||||
msgstr "Error by deleting the account. Please re-login and try again."
|
||||
|
||||
#: model/Session.cpp:881
|
||||
msgid "Konnte kein passendes Konto finden."
|
||||
msgstr "This Account didn't seem to exist."
|
||||
|
||||
#: model/Session.cpp:889
|
||||
msgid "Fehler beim laden des Benutzers."
|
||||
msgstr ""
|
||||
|
||||
#: model/Session.cpp:1005
|
||||
msgid "Kein gültiger Benutzer, bitte logge dich erneut ein."
|
||||
msgstr "Invalid User, please re-login."
|
||||
|
||||
#~ msgid "*Das Konto muss nach dem 01.09.2019 angelegt worden sein."
|
||||
#~ msgstr "* The account must have been created after September 1st, 2019."
|
||||
|
||||
#~ msgid "Nein, bitte ein neues erstellen!"
|
||||
#~ msgstr "No, please create a new one!"
|
||||
|
||||
#~ msgid "Deine Passphrase"
|
||||
#~ msgstr "Your passphrase"
|
||||
|
||||
#~ msgid ""
|
||||
#~ "Der Code stimmt nicht, bitte überprüfe ihn nochmal oder "
|
||||
#~ "registriere dich erneut oder wende dich an den Server-Admin"
|
||||
#~ msgstr ""
|
||||
#~ "The email verification code isn't correct. Please check at spell errors "
|
||||
#~ "and try again or ask the server admin."
|
||||
153
login_server/src/cpp/Crypto/AuthenticatedEncryption.cpp
Normal file
153
login_server/src/cpp/Crypto/AuthenticatedEncryption.cpp
Normal file
@ -0,0 +1,153 @@
|
||||
#include "AuthenticatedEncryption.h"
|
||||
|
||||
#include "sodium.h"
|
||||
#include "../ServerConfig.h"
|
||||
#include <assert.h>
|
||||
#include "../lib/Profiler.h"
|
||||
|
||||
AuthenticatedEncryption::AuthenticatedEncryption()
|
||||
: mOpsLimit(10), mMemLimit(33554432), mAlgo(2), mEncryptionKey(nullptr), mEncryptionKeyHash(0)
|
||||
{
|
||||
}
|
||||
|
||||
AuthenticatedEncryption::AuthenticatedEncryption(unsigned long long opslimit, size_t memlimit, int algo)
|
||||
: mOpsLimit(opslimit), mMemLimit(memlimit), mAlgo(algo), mEncryptionKey(nullptr), mEncryptionKeyHash(0)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
AuthenticatedEncryption::~AuthenticatedEncryption()
|
||||
{
|
||||
if (mEncryptionKey) {
|
||||
MemoryManager::getInstance()->releaseMemory(mEncryptionKey);
|
||||
mEncryptionKey = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
AuthenticatedEncryption::ResultType AuthenticatedEncryption::createKey(const std::string& salt_parameter, const std::string& passwd)
|
||||
{
|
||||
assert(crypto_hash_sha512_BYTES >= crypto_pwhash_SALTBYTES);
|
||||
|
||||
auto mm = MemoryManager::getInstance();
|
||||
auto app_secret = ServerConfig::g_CryptoAppSecret;
|
||||
|
||||
assert(app_secret);
|
||||
Profiler timeUsed;
|
||||
std::unique_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
if (timeUsed.millis() > 10) {
|
||||
printf("[AuthenticatedEncryption::createKey] wait %s on getting lock\n", timeUsed.string().data());
|
||||
timeUsed.reset();
|
||||
}
|
||||
|
||||
// use hash512 because existing data where calculated with that, but could be also changed to hash256
|
||||
auto hash512_salt = mm->getFreeMemory(crypto_hash_sha512_BYTES); // need at least crypto_pwhash_SALTBYTES 16U
|
||||
|
||||
crypto_hash_sha512_state state;
|
||||
crypto_hash_sha512_init(&state);
|
||||
//crypto_hash_sha512_update
|
||||
crypto_hash_sha512_update(&state, (const unsigned char*)salt_parameter.data(), salt_parameter.size());
|
||||
crypto_hash_sha512_update(&state, *app_secret, app_secret->size());
|
||||
crypto_hash_sha512_final(&state, *hash512_salt);
|
||||
|
||||
if (timeUsed.millis() > 200) {
|
||||
printf("[AuthenticatedEncryption::createKey] %s calculating sha512\n", timeUsed.string().data());
|
||||
timeUsed.reset();
|
||||
}
|
||||
|
||||
//unsigned char* key = (unsigned char *)malloc(crypto_box_SEEDBYTES); // 32U
|
||||
//ObfusArray* key = new ObfusArray(crypto_box_SEEDBYTES);
|
||||
if (!mEncryptionKey) {
|
||||
mEncryptionKey = mm->getFreeMemory(crypto_box_SEEDBYTES);
|
||||
}
|
||||
//Bin32Bytes* key = mm->get32Bytes();
|
||||
|
||||
// generate encryption key, should take a bit longer to make brute force attacks hard
|
||||
if (crypto_pwhash(*mEncryptionKey, mEncryptionKey->size(), passwd.data(), passwd.size(), *hash512_salt, mOpsLimit, mMemLimit, mAlgo) != 0) {
|
||||
mm->releaseMemory(mEncryptionKey);
|
||||
mEncryptionKey = nullptr;
|
||||
|
||||
return AUTH_CREATE_ENCRYPTION_KEY_FAILED;
|
||||
}
|
||||
if (timeUsed.millis() > 400) {
|
||||
printf("[AuthenticatedEncryption::createKey] %s calculating pwd hash\n", timeUsed.string().data());
|
||||
}
|
||||
// generate hash from key for compare
|
||||
assert(sizeof(KeyHashed) >= crypto_shorthash_BYTES);
|
||||
assert(ServerConfig::g_ServerCryptoKey);
|
||||
crypto_shorthash((unsigned char*)&mEncryptionKeyHash, *mEncryptionKey, crypto_box_SEEDBYTES, *ServerConfig::g_ServerCryptoKey);
|
||||
|
||||
return AUTH_ENCRYPT_OK;
|
||||
}
|
||||
|
||||
AuthenticatedEncryption::ResultType AuthenticatedEncryption::encrypt(const MemoryBin* message, MemoryBin** encryptedMessage) const
|
||||
{
|
||||
assert(message && encryptedMessage);
|
||||
std::shared_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
|
||||
if (!mEncryptionKey) {
|
||||
return AUTH_NO_KEY;
|
||||
}
|
||||
|
||||
size_t message_len = message->size();
|
||||
size_t ciphertext_len = crypto_secretbox_MACBYTES + message_len;
|
||||
|
||||
unsigned char nonce[crypto_secretbox_NONCEBYTES];
|
||||
// we use a hardcoded value for nonce
|
||||
// TODO: use a dynamic value, save it along with the other parameters
|
||||
memset(nonce, 31, crypto_secretbox_NONCEBYTES);
|
||||
|
||||
auto mm = MemoryManager::getInstance();
|
||||
auto ciphertext = mm->getFreeMemory(ciphertext_len);
|
||||
memset(*ciphertext, 0, ciphertext_len);
|
||||
|
||||
if (0 != crypto_secretbox_easy(*ciphertext, *message, message_len, nonce, *mEncryptionKey)) {
|
||||
mm->releaseMemory(ciphertext);
|
||||
|
||||
return AUTH_ENCRYPT_MESSAGE_FAILED;
|
||||
}
|
||||
|
||||
*encryptedMessage = ciphertext;
|
||||
|
||||
return AUTH_ENCRYPT_OK;
|
||||
}
|
||||
|
||||
AuthenticatedEncryption::ResultType AuthenticatedEncryption::decrypt(const unsigned char* encryptedMessage, size_t encryptedMessageSize, MemoryBin** message) const
|
||||
{
|
||||
assert(message);
|
||||
std::shared_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
|
||||
if (!mEncryptionKey) {
|
||||
return AUTH_NO_KEY;
|
||||
}
|
||||
|
||||
size_t decryptSize = encryptedMessageSize - crypto_secretbox_MACBYTES;
|
||||
//unsigned char* decryptBuffer = (unsigned char*)malloc(decryptSize);
|
||||
auto mm = MemoryManager::getInstance();
|
||||
//ObfusArray* decryptedData = new ObfusArray(decryptSize);
|
||||
auto decryptedData = mm->getFreeMemory(decryptSize);
|
||||
unsigned char nonce[crypto_secretbox_NONCEBYTES];
|
||||
// we use a hardcoded value for nonce
|
||||
// TODO: use a dynamic value, save it along with the other parameters
|
||||
memset(nonce, 31, crypto_secretbox_NONCEBYTES);
|
||||
|
||||
if (crypto_secretbox_open_easy(*decryptedData, encryptedMessage, encryptedMessageSize, nonce, *mEncryptionKey)) {
|
||||
mm->releaseMemory(decryptedData);
|
||||
return AUTH_DECRYPT_MESSAGE_FAILED;
|
||||
}
|
||||
*message = decryptedData;
|
||||
|
||||
return AUTH_DECRYPT_OK;
|
||||
}
|
||||
|
||||
const char* AuthenticatedEncryption::getErrorMessage(ResultType type)
|
||||
{
|
||||
switch (type) {
|
||||
case AUTH_ENCRYPT_OK: return "everything is ok";
|
||||
//case AUTH_ENCRYPT_SHA2_TO_SMALL: return "libsodium crypto_hash_sha512_BYTES is to small to use as crypto_pwhash_SALTBYTES";
|
||||
case AUTH_CREATE_ENCRYPTION_KEY_FAILED: return "error creating encryption key, maybe to much memory requested?";
|
||||
case AUTH_NO_KEY: return "no encryption key generated";
|
||||
case AUTH_ENCRYPT_MESSAGE_FAILED: return "message encryption failed";
|
||||
case AUTH_DECRYPT_MESSAGE_FAILED: return "message decryption failed";
|
||||
}
|
||||
return "<unknown>";
|
||||
}
|
||||
101
login_server/src/cpp/Crypto/AuthenticatedEncryption.h
Normal file
101
login_server/src/cpp/Crypto/AuthenticatedEncryption.h
Normal file
@ -0,0 +1,101 @@
|
||||
#ifndef __GRADIDO_LOGIN_SERVER_CRYPTO_AUTHENTICATED_ENCRYPTION_H
|
||||
#define __GRADIDO_LOGIN_SERVER_CRYPTO_AUTHENTICATED_ENCRYPTION_H
|
||||
|
||||
|
||||
#include "../SingletonManager/MemoryManager.h"
|
||||
#include "../lib/AutoPtrContainer.h"
|
||||
|
||||
#include "Poco/AutoPtr.h"
|
||||
|
||||
#include <shared_mutex>
|
||||
#include <vector>
|
||||
|
||||
|
||||
/*!
|
||||
*
|
||||
* \author: Dario Rekowski
|
||||
*
|
||||
* \date: 07-06-2020
|
||||
*
|
||||
* \brief: Wrapper Class for make using libsodium authenticated encryption easy, used for encrypt private keys for user
|
||||
*
|
||||
*/
|
||||
|
||||
typedef Poco::UInt64 KeyHashed;
|
||||
|
||||
class AuthenticatedEncryption : public AutoPtrContainer
|
||||
{
|
||||
public:
|
||||
|
||||
enum ResultType {
|
||||
AUTH_ENCRYPT_OK,
|
||||
AUTH_DECRYPT_OK,
|
||||
AUTH_CREATE_ENCRYPTION_KEY_FAILED,
|
||||
AUTH_NO_KEY,
|
||||
AUTH_ENCRYPT_MESSAGE_FAILED,
|
||||
AUTH_DECRYPT_MESSAGE_FAILED
|
||||
};
|
||||
|
||||
//! \brief init with default algorithms parameter
|
||||
AuthenticatedEncryption();
|
||||
//! \brief init with custom algorithms parameter
|
||||
//!
|
||||
//! details see in libsodium crypto_pwhash
|
||||
AuthenticatedEncryption(unsigned long long opslimit, size_t memlimit, int algo);
|
||||
|
||||
~AuthenticatedEncryption();
|
||||
|
||||
|
||||
inline KeyHashed getKeyHashed() const { std::shared_lock<std::shared_mutex> _lock(mWorkingMutex); return mEncryptionKeyHash; }
|
||||
inline bool operator == (const Poco::AutoPtr<AuthenticatedEncryption>& b) const {
|
||||
return isTheSame(b);
|
||||
}
|
||||
inline bool isTheSame(const Poco::AutoPtr<AuthenticatedEncryption>& b) const {
|
||||
std::shared_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
if (b.isNull()) return false;
|
||||
return mEncryptionKeyHash == b->getKeyHashed();
|
||||
}
|
||||
inline bool operator == (const KeyHashed& hash) const {
|
||||
return mEncryptionKeyHash == hash;
|
||||
}
|
||||
|
||||
inline bool hasKey() const { std::shared_lock<std::shared_mutex> _lock(mWorkingMutex); return mEncryptionKey != nullptr; }
|
||||
|
||||
//! \brief generate encryption key, with default parameter use ca. 300 ms
|
||||
//!
|
||||
//! should be call from task, running in g_CryptoCPUScheduler, lock shared mutex for writing
|
||||
//! \param salt_parameter for example email
|
||||
//! \return AUTH_CREATE_ENCRYPTION_KEY_FAILED call strerror(errno) for more details
|
||||
ResultType createKey(const std::string& salt_parameter, const std::string& passwd);
|
||||
|
||||
ResultType encrypt(const MemoryBin* message, MemoryBin** encryptedMessage) const;
|
||||
|
||||
inline ResultType decrypt(const MemoryBin* encryptedMessage, MemoryBin** message) const {
|
||||
return decrypt(encryptedMessage->data(), encryptedMessage->size(), message);
|
||||
}
|
||||
//! \brief same as the other decrypt only in other format
|
||||
//! \param encryptedMessage format from Poco Binary Data from DB, like returned from model/table/user for encrypted private key
|
||||
inline ResultType decrypt(const std::vector<unsigned char>& encryptedMessage, MemoryBin** message) const {
|
||||
return decrypt(encryptedMessage.data(), encryptedMessage.size(), message);
|
||||
}
|
||||
//! \brief raw decrypt function, actual implementation
|
||||
ResultType decrypt(const unsigned char* encryptedMessage, size_t encryptedMessageSize, MemoryBin** message) const;
|
||||
|
||||
static const char* getErrorMessage(ResultType type);
|
||||
|
||||
protected:
|
||||
// algorithms parameter
|
||||
unsigned long long mOpsLimit;
|
||||
size_t mMemLimit;
|
||||
int mAlgo;
|
||||
|
||||
// encryption key and hash
|
||||
MemoryBin* mEncryptionKey;
|
||||
KeyHashed mEncryptionKeyHash;
|
||||
|
||||
mutable std::shared_mutex mWorkingMutex;
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif //__GRADIDO_LOGIN_SERVER_CRYPTO_AUTHENTICATED_ENCRYPTION_H
|
||||
286
login_server/src/cpp/Crypto/DRRandom.cpp
Normal file
286
login_server/src/cpp/Crypto/DRRandom.cpp
Normal file
@ -0,0 +1,286 @@
|
||||
#include "DRRandom.h"
|
||||
#include "Obfus_array.h"
|
||||
|
||||
/* This program by D E Knuth is in the public domain and freely copyable.
|
||||
* It is explained in Seminumerical Algorithms, 3rd edition, Section 3.6
|
||||
* (or in the errata to the 2nd edition --- see
|
||||
* http://www-cs-faculty.stanford.edu/~knuth/taocp.html
|
||||
* in the changes to Volume 2 on pages 171 and following). */
|
||||
|
||||
/* N.B. The MODIFICATIONS introduced in the 9th printing (2002) are
|
||||
included here; there's no backwards compatibility with the original. */
|
||||
|
||||
/* This version also adopts Brendan McKay's suggestion to
|
||||
accommodate naive users who forget to call ran_start(seed). */
|
||||
|
||||
/* If you find any bugs, please report them immediately to
|
||||
* taocp@cs.stanford.edu
|
||||
* (and you will be rewarded if the bug is genuine). Thanks! */
|
||||
|
||||
/************ see the book for explanations and caveats! *******************/
|
||||
/************ in particular, you need two's complement arithmetic **********/
|
||||
// Random-Array
|
||||
#define KK 100 /* the long lag */
|
||||
#define LL 37 /* the short lag */
|
||||
#define MM (1L<<30) /* the modulus */
|
||||
#define mod_diff(x,y) (((x)-(y))&(MM-1)) /* subtraction mod MM */
|
||||
#define mod_sum(x,y) (((x)+(y))-(int)((x)+(y))) /* (x+y) mod 1.0 */
|
||||
#ifndef __STDC__
|
||||
#define __STDC__
|
||||
#endif
|
||||
|
||||
long ran_x[KK]; /* the generator state */
|
||||
double ran_u[KK]; /* the generator state */
|
||||
|
||||
#ifdef __STDC__
|
||||
void ran_array(long aa[],int n)
|
||||
#else
|
||||
void ran_array(aa,n) /* put n new random numbers in aa */
|
||||
long *aa; /* destination */
|
||||
int n; /* array length (must be at least KK) */
|
||||
#endif
|
||||
{
|
||||
register int i,j;
|
||||
DISASM_MISALIGN;
|
||||
for (j=0;j<KK;j++) aa[j]=ran_x[j];
|
||||
for (;j<n;j++) aa[j]=mod_diff(aa[j-KK],aa[j-LL]);
|
||||
for (i=0;i<LL;i++,j++) ran_x[i]=mod_diff(aa[j-KK],aa[j-LL]);
|
||||
for (;i<KK;i++,j++) ran_x[i]=mod_diff(aa[j-KK],ran_x[i-LL]);
|
||||
}
|
||||
|
||||
/* the following routines are from exercise 3.6--15 */
|
||||
/* after calling ran_start, get new randoms by, e.g., "x=ran_arr_next()" */
|
||||
|
||||
#define QUALITY 1009 /* recommended quality level for high-res use */
|
||||
long ran_arr_buf[QUALITY];
|
||||
long ran_arr_dummy=-1, ran_arr_started=-1;
|
||||
long *ran_arr_ptr=&ran_arr_dummy; /* the next random number, or -1 */
|
||||
|
||||
#define TT 70 /* guaranteed separation between streams */
|
||||
#define is_odd(x) ((x)&1) /* units bit of x */
|
||||
|
||||
#ifdef __STDC__
|
||||
void ran_start(long seed)
|
||||
#else
|
||||
void ran_start(seed) /* do this before using ran_array */
|
||||
long seed; /* selector for different streams */
|
||||
#endif
|
||||
{
|
||||
register int t,j;
|
||||
long x[KK+KK-1]; /* the preparation buffer */
|
||||
register long ss=(seed+2)&(MM-2);
|
||||
for (j=0;j<KK;j++) {
|
||||
x[j]=ss; /* bootstrap the buffer */
|
||||
ss<<=1; if (ss>=MM) ss-=MM-2; /* cyclic shift 29 bits */
|
||||
}
|
||||
x[1]++; /* make x[1] (and only x[1]) odd */
|
||||
for (ss=seed&(MM-1),t=TT-1; t; ) {
|
||||
for (j=KK-1;j>0;j--) x[j+j]=x[j], x[j+j-1]=0; /* "square" */
|
||||
for (j=KK+KK-2;j>=KK;j--)
|
||||
x[j-(KK-LL)]=mod_diff(x[j-(KK-LL)],x[j]),
|
||||
x[j-KK]=mod_diff(x[j-KK],x[j]);
|
||||
if (is_odd(ss)) { /* "multiply by z" */
|
||||
for (j=KK;j>0;j--) x[j]=x[j-1];
|
||||
x[0]=x[KK]; /* shift the buffer cyclically */
|
||||
x[LL]=mod_diff(x[LL],x[KK]);
|
||||
}
|
||||
if (ss) ss>>=1; else t--;
|
||||
}
|
||||
DISASM_MISALIGN;
|
||||
for (j=0;j<LL;j++) ran_x[j+KK-LL]=x[j];
|
||||
for (;j<KK;j++) ran_x[j-LL]=x[j];
|
||||
for (j=0;j<10;j++) ran_array(x,KK+KK-1); /* warm things up */
|
||||
ran_arr_ptr=&ran_arr_started;
|
||||
}
|
||||
|
||||
#define ran_arr_next() (*ran_arr_ptr>=0? *ran_arr_ptr++: ran_arr_cycle())
|
||||
long ran_arr_cycle()
|
||||
{
|
||||
if (ran_arr_ptr==&ran_arr_dummy)
|
||||
ran_start(314159L); /* the user forgot to initialize */
|
||||
ran_array(ran_arr_buf,QUALITY);
|
||||
ran_arr_buf[KK]=-1;
|
||||
ran_arr_ptr=ran_arr_buf+1;
|
||||
return ran_arr_buf[0];
|
||||
}
|
||||
|
||||
// **************************************************************************************************************
|
||||
// **************************************************************************************************************
|
||||
|
||||
// Random-Float Array
|
||||
|
||||
#ifdef __STDC__
|
||||
void ranf_array(double aa[], int n)
|
||||
#else
|
||||
void ranf_array(aa,n) /* put n new random fractions in aa */
|
||||
double *aa; /* destination */
|
||||
int n; /* array length (must be at least KK) */
|
||||
#endif
|
||||
{
|
||||
register int i,j;
|
||||
DISASM_MISALIGN;
|
||||
for (j=0;j<KK;j++) aa[j]=ran_u[j];
|
||||
for (;j<n;j++) aa[j]=mod_sum(aa[j-KK],aa[j-LL]);
|
||||
for (i=0;i<LL;i++,j++) ran_u[i]=mod_sum(aa[j-KK],aa[j-LL]);
|
||||
for (;i<KK;i++,j++) ran_u[i]=mod_sum(aa[j-KK],ran_u[i-LL]);
|
||||
}
|
||||
|
||||
/* the following routines are adapted from exercise 3.6--15 */
|
||||
/* after calling ranf_start, get new randoms by, e.g., "x=ranf_arr_next()" */
|
||||
|
||||
//#define QUALITY 1009 /* recommended quality level for high-res use */
|
||||
double ranf_arr_buf[QUALITY];
|
||||
double ranf_arr_dummy=-1.0, ranf_arr_started=-1.0;
|
||||
double *ranf_arr_ptr=&ranf_arr_dummy; /* the next random fraction, or -1 */
|
||||
|
||||
//#define TT 70 /* guaranteed separation between streams */
|
||||
//#define is_odd(s) ((s)&1)
|
||||
|
||||
#ifdef __STDC__
|
||||
void ranf_start(long seed)
|
||||
#else
|
||||
void ranf_start(seed) /* do this before using ranf_array */
|
||||
long seed; /* selector for different streams */
|
||||
#endif
|
||||
{
|
||||
register int t,s,j;
|
||||
double u[KK+KK-1];
|
||||
double ulp=(1.0/(1L<<30))/(1L<<22); /* 2 to the -52 */
|
||||
double ss=2.0*ulp*((seed&0x3fffffff)+2);
|
||||
|
||||
for (j=0;j<KK;j++) {
|
||||
u[j]=ss; /* bootstrap the buffer */
|
||||
ss+=ss; if (ss>=1.0) ss-=1.0-2*ulp; /* cyclic shift of 51 bits */
|
||||
}
|
||||
u[1]+=ulp; /* make u[1] (and only u[1]) "odd" */
|
||||
for (s=seed&0x3fffffff,t=TT-1; t; ) {
|
||||
for (j=KK-1;j>0;j--)
|
||||
u[j+j]=u[j],u[j+j-1]=0.0; /* "square" */
|
||||
for (j=KK+KK-2;j>=KK;j--) {
|
||||
u[j-(KK-LL)]=mod_sum(u[j-(KK-LL)],u[j]);
|
||||
u[j-KK]=mod_sum(u[j-KK],u[j]);
|
||||
}
|
||||
if (is_odd(s)) { /* "multiply by z" */
|
||||
for (j=KK;j>0;j--) u[j]=u[j-1];
|
||||
u[0]=u[KK]; /* shift the buffer cyclically */
|
||||
u[LL]=mod_sum(u[LL],u[KK]);
|
||||
}
|
||||
if (s) s>>=1; else t--;
|
||||
}
|
||||
for (j=0;j<LL;j++) ran_u[j+KK-LL]=u[j];
|
||||
for (;j<KK;j++) ran_u[j-LL]=u[j];
|
||||
for (j=0;j<10;j++) ranf_array(u,KK+KK-1); /* warm things up */
|
||||
ranf_arr_ptr=&ranf_arr_started;
|
||||
}
|
||||
|
||||
#define ranf_arr_next() (*ranf_arr_ptr>=0? *ranf_arr_ptr++: ranf_arr_cycle())
|
||||
double ranf_arr_cycle()
|
||||
{
|
||||
if (ranf_arr_ptr==&ranf_arr_dummy)
|
||||
ranf_start(314159L); /* the user forgot to initialize */
|
||||
ranf_array(ranf_arr_buf,QUALITY);
|
||||
ranf_arr_buf[KK]=-1;
|
||||
ranf_arr_ptr=ranf_arr_buf+1;
|
||||
return ranf_arr_buf[0];
|
||||
}
|
||||
|
||||
// **************************************************************************************************************
|
||||
// **************************************************************************************************************
|
||||
#ifndef u32
|
||||
typedef Poco::UInt32 u32;
|
||||
typedef Poco::UInt32 uint;
|
||||
#endif
|
||||
// XORshift Quelle: http://de.wikipedia.org/wiki/Xorshift
|
||||
u32 xorshift_x = 123456789;
|
||||
u32 xorshift_y = 362436069;
|
||||
u32 xorshift_z = 521288629;
|
||||
u32 xorshift_w = 88675123;
|
||||
u32 xorshift()
|
||||
{
|
||||
/* 32 Bit periodenlänge
|
||||
xorshiftSeed ^= xorshiftSeed << 13;
|
||||
xorshiftSeed ^= xorshiftSeed >> 17;
|
||||
xorshiftSeed ^= xorshiftSeed << 5;
|
||||
return xorshiftSeed;
|
||||
* */
|
||||
|
||||
u32 t = xorshift_x ^ (xorshift_x << 11);
|
||||
xorshift_x = xorshift_y; xorshift_y = xorshift_z; xorshift_z = xorshift_w;
|
||||
xorshift_w ^= (xorshift_w >> 19) ^ t ^ (t >> 8);
|
||||
|
||||
return xorshift_w;
|
||||
}
|
||||
void xorshift_seed(u32 seed)
|
||||
{
|
||||
xorshift_x = seed;
|
||||
xorshift();
|
||||
}
|
||||
|
||||
// **************************************************************************************************************
|
||||
// **************************************************************************************************************
|
||||
|
||||
// static vars
|
||||
long random_buffer[KK];
|
||||
uint rand_buffer_cursor = KK;
|
||||
double randomf_buffer[KK];
|
||||
uint randf_buffer_cursor = KK;
|
||||
|
||||
//***************************************************************************************************************
|
||||
void DRRandom::seed(long seed)
|
||||
{
|
||||
//DRLog.writeToLog("[DRRandom::seed] seed reinit: %d\n", seed);
|
||||
ran_start(seed);
|
||||
xorshift_seed(seed);
|
||||
DISASM_FALSERET;
|
||||
rand_buffer_cursor = KK;
|
||||
seedf(seed);
|
||||
}
|
||||
|
||||
void DRRandom::seedf(long seed)
|
||||
{
|
||||
ranf_start(seed);
|
||||
randf_buffer_cursor = KK;
|
||||
}
|
||||
|
||||
long DRRandom::core2_rand()
|
||||
{
|
||||
// return xorshift();
|
||||
if(rand_buffer_cursor >= KK)
|
||||
{
|
||||
rand_buffer_cursor = 0;
|
||||
ran_array(random_buffer, KK);
|
||||
}
|
||||
NULLPAD_10;
|
||||
return random_buffer[rand_buffer_cursor++];
|
||||
}
|
||||
|
||||
double DRRandom::core2_randf()
|
||||
{
|
||||
if(randf_buffer_cursor >= KK)
|
||||
{
|
||||
randf_buffer_cursor = 0;
|
||||
ranf_array(randomf_buffer, KK);
|
||||
}
|
||||
return randomf_buffer[randf_buffer_cursor++];
|
||||
}
|
||||
|
||||
Poco::Int64 DRRandom::r64()
|
||||
{
|
||||
Poco::Int64 r1 = core2_rand();
|
||||
Poco::Int64 r2 = core2_rand();///*0x00000000ffffffff &*/ (core2_rand() << 8);
|
||||
//u64 r12 = r1 | (r2 << 8);
|
||||
//printf("r1: %lld, %llx, r2: %lld, %llx, r1|2: %lld, %llx\n", r1, r1, r2, r2, r12, r12);
|
||||
DISASM_FALSERET;
|
||||
return r1 | (r2 << 8);
|
||||
}
|
||||
double DRRandom::rDouble(double max, double min)
|
||||
{
|
||||
double value = core2_randf();
|
||||
//printf("rDouble: %f\n", value);
|
||||
return min + (max - min) * value;
|
||||
}
|
||||
|
||||
int DRRandom::rInt(int max, int min)
|
||||
{
|
||||
return min + (core2_rand() % (max-min+1));
|
||||
}
|
||||
58
login_server/src/cpp/Crypto/DRRandom.h
Normal file
58
login_server/src/cpp/Crypto/DRRandom.h
Normal file
@ -0,0 +1,58 @@
|
||||
/*/*************************************************************************
|
||||
* *
|
||||
* Core, Core-Lib for my programs, Core doesn't need any libraries *
|
||||
* Copyright (C) 2012, 2013, 2014 Dario Rekowski *
|
||||
* Email: ***REMOVED*** Web: ***REMOVED*** *
|
||||
* *
|
||||
* This program is free software: you can redistribute it and/or modify *
|
||||
* it under the terms of the GNU General Public License as published by *
|
||||
* the Free Software Foundation, either version 3 of the License, or *
|
||||
* any later version. *
|
||||
* *
|
||||
* This program is distributed in the hope that it will be useful, *
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of *
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
|
||||
* GNU General Public License for more details. *
|
||||
* *
|
||||
* You should have received a copy of the GNU General Public License *
|
||||
* along with this program. If not, see <http://www.gnu.org/licenses/>. *
|
||||
* *
|
||||
***************************************************************************/
|
||||
|
||||
/*
|
||||
* File: DRRandom.h
|
||||
* Author: dario
|
||||
*
|
||||
* Created on 25. August 2011, 13:28
|
||||
*/
|
||||
|
||||
#ifndef __DR_CORE2_RANDOM__
|
||||
#define __DR_CORE2_RANDOM__
|
||||
|
||||
#include "Poco/Types.h"
|
||||
|
||||
class DRRandom
|
||||
{
|
||||
public:
|
||||
DRRandom() {}
|
||||
|
||||
static long core2_rand();
|
||||
static double core2_randf();
|
||||
static Poco::Int64 r64();
|
||||
static double rDouble(double max, double min);
|
||||
static float rReal(float fMax, float fMin)
|
||||
{
|
||||
return static_cast<float>(rDouble(fMax, fMin));
|
||||
}
|
||||
|
||||
static int rInt(int max, int min);
|
||||
|
||||
|
||||
static void seed(long seed);
|
||||
static void seedf(long seed);
|
||||
private:
|
||||
};
|
||||
|
||||
|
||||
#endif /* __DR_CORE2_RANDOM__ */
|
||||
|
||||
0
login_server/src/cpp/Crypto/IKeyPair.cpp
Normal file
0
login_server/src/cpp/Crypto/IKeyPair.cpp
Normal file
25
login_server/src/cpp/Crypto/IKeyPair.h
Normal file
25
login_server/src/cpp/Crypto/IKeyPair.h
Normal file
@ -0,0 +1,25 @@
|
||||
#ifndef __GRADIDO_LOGIN_SERVER_CRYPTO_I_KEY_PAIR_H
|
||||
#define __GRADIDO_LOGIN_SERVER_CRYPTO_I_KEY_PAIR_H
|
||||
|
||||
/*!
|
||||
*
|
||||
* \author: Dario Rekowski
|
||||
*
|
||||
* \date: 2020-06-04
|
||||
*
|
||||
* \brief: Interface for Key Pair classes, generate key pair from passphrase
|
||||
*
|
||||
*/
|
||||
|
||||
#include "../SingletonManager/MemoryManager.h"
|
||||
|
||||
class IKeyPair
|
||||
{
|
||||
public:
|
||||
//! \return caller take ownership of return value
|
||||
virtual MemoryBin* sign(const MemoryBin* message) const = 0 ;
|
||||
|
||||
|
||||
};
|
||||
|
||||
#endif //__GRADIDO_LOGIN_SERVER_CRYPTO_I_KEY_PAIR_H
|
||||
339
login_server/src/cpp/Crypto/KeyPair.cpp
Normal file
339
login_server/src/cpp/Crypto/KeyPair.cpp
Normal file
@ -0,0 +1,339 @@
|
||||
#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;
|
||||
}
|
||||
69
login_server/src/cpp/Crypto/KeyPair.h
Normal file
69
login_server/src/cpp/Crypto/KeyPair.h
Normal file
@ -0,0 +1,69 @@
|
||||
#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
|
||||
167
login_server/src/cpp/Crypto/KeyPairEd25519.cpp
Normal file
167
login_server/src/cpp/Crypto/KeyPairEd25519.cpp
Normal file
@ -0,0 +1,167 @@
|
||||
|
||||
#include "KeyPairEd25519.h"
|
||||
#include <assert.h>
|
||||
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
|
||||
|
||||
|
||||
KeyPairEd25519::KeyPairEd25519(MemoryBin* privateKey)
|
||||
: mSodiumSecret(privateKey)
|
||||
{
|
||||
//memcpy(mSodiumPublic, publicKey, crypto_sign_PUBLICKEYBYTES);
|
||||
// read pubkey from private key, so we are sure it is the correct pubkey for the private key
|
||||
|
||||
crypto_sign_ed25519_sk_to_pk(mSodiumPublic, *privateKey);
|
||||
}
|
||||
|
||||
KeyPairEd25519::KeyPairEd25519(const unsigned char* publicKey)
|
||||
: mSodiumSecret(nullptr)
|
||||
{
|
||||
memcpy(mSodiumPublic, publicKey, crypto_sign_PUBLICKEYBYTES);
|
||||
}
|
||||
|
||||
KeyPairEd25519::KeyPairEd25519()
|
||||
: mSodiumSecret(nullptr)
|
||||
{
|
||||
memset(mSodiumPublic, 0, crypto_sign_PUBLICKEYBYTES);
|
||||
}
|
||||
|
||||
KeyPairEd25519::~KeyPairEd25519()
|
||||
{
|
||||
if (mSodiumSecret) {
|
||||
MemoryManager::getInstance()->releaseMemory(mSodiumSecret);
|
||||
mSodiumSecret = nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
KeyPairEd25519* KeyPairEd25519::create(const Poco::AutoPtr<Passphrase> passphrase)
|
||||
{
|
||||
//auto er = ErrorManager::getInstance();
|
||||
auto mm = MemoryManager::getInstance();
|
||||
assert(!passphrase.isNull());
|
||||
// libsodium doc: https://libsodium.gitbook.io/doc/advanced/hmac-sha2
|
||||
// https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki
|
||||
|
||||
auto word_indices = passphrase->getWordIndices();
|
||||
|
||||
if (!word_indices || (!word_indices[0] && !word_indices[1] && !word_indices[2] && !word_indices[3])) {
|
||||
return nullptr;
|
||||
}
|
||||
std::string clear_passphrase = passphrase->createClearPassphrase();
|
||||
|
||||
|
||||
unsigned char hash[crypto_hash_sha512_BYTES];
|
||||
|
||||
crypto_hash_sha512_state state;
|
||||
crypto_hash_sha512_init(&state);
|
||||
|
||||
// **** convert word indices into uint64 ****
|
||||
// To prevent breaking existing passphrase-hash combinations word indices will be put into 64 Bit Variable to mimic first implementation of algorithms
|
||||
auto valueSize = sizeof(Poco::UInt64);
|
||||
Poco::UInt64 value = 0;
|
||||
for (int i = 0; i < PHRASE_WORD_COUNT; i++) {
|
||||
value = word_indices[i];
|
||||
crypto_hash_sha512_update(&state, (const unsigned char*)&value, valueSize);
|
||||
}
|
||||
// **** end converting into uint64 *****
|
||||
crypto_hash_sha512_update(&state, (unsigned char*)clear_passphrase.data(), clear_passphrase.size());
|
||||
crypto_hash_sha512_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());
|
||||
|
||||
//*/
|
||||
|
||||
KeyPairEd25519* key_pair = new KeyPairEd25519;
|
||||
if (!key_pair->mSodiumSecret) {
|
||||
key_pair->mSodiumSecret = mm->getFreeMemory(crypto_sign_SECRETKEYBYTES);
|
||||
}
|
||||
|
||||
crypto_sign_seed_keypair(key_pair->mSodiumPublic, *key_pair->mSodiumSecret, hash);
|
||||
|
||||
return key_pair;
|
||||
|
||||
// print hex for all keys for debugging
|
||||
/* printf("// ********** Keys ************* //\n");
|
||||
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
|
||||
}
|
||||
MemoryBin* KeyPairEd25519::sign(const unsigned char* message, size_t messageSize) const
|
||||
//MemoryBin* KeyPairEd25519::sign(const MemoryBin* message) const
|
||||
{
|
||||
|
||||
if (!message || !messageSize) return nullptr;
|
||||
if (!mSodiumSecret) return nullptr;
|
||||
auto mm = MemoryManager::getInstance();
|
||||
auto em = ErrorManager::getInstance();
|
||||
|
||||
const static char functionName[] = "KeyPairEd25519::sign";
|
||||
|
||||
auto signBinBuffer = mm->getFreeMemory(crypto_sign_BYTES);
|
||||
unsigned long long actualSignLength = 0;
|
||||
|
||||
if (crypto_sign_detached(*signBinBuffer, &actualSignLength, message, messageSize, *mSodiumSecret)) {
|
||||
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, mSodiumPublic) != 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;
|
||||
|
||||
}
|
||||
|
||||
MemoryBin* KeyPairEd25519::getCryptedPrivKey(const Poco::AutoPtr<AuthenticatedEncryption> password) const
|
||||
{
|
||||
if (password.isNull()) return nullptr;
|
||||
if (!mSodiumSecret) return nullptr;
|
||||
|
||||
MemoryBin* encryptedKey = nullptr;
|
||||
if (AuthenticatedEncryption::AUTH_ENCRYPT_OK == password->encrypt(mSodiumSecret, &encryptedKey)) {
|
||||
return encryptedKey;
|
||||
}
|
||||
else {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
}
|
||||
86
login_server/src/cpp/Crypto/KeyPairEd25519.h
Normal file
86
login_server/src/cpp/Crypto/KeyPairEd25519.h
Normal file
@ -0,0 +1,86 @@
|
||||
#ifndef __GRADIDO_LOGIN_SERVER_CRYPTO_ED25519_H
|
||||
#define __GRADIDO_LOGIN_SERVER_CRYPTO_ED25519_H
|
||||
|
||||
#include "IKeyPair.h"
|
||||
|
||||
/*!
|
||||
* \author: Dario Rekowski
|
||||
*
|
||||
* \date: 2020-06-04
|
||||
*
|
||||
* \brief: Key Pairs class for ed25519 keys, used for default gradido transactions
|
||||
*/
|
||||
|
||||
|
||||
#include "sodium.h"
|
||||
#include "AuthenticatedEncryption.h"
|
||||
#include "Passphrase.h"
|
||||
|
||||
class KeyPairEd25519 : public IKeyPair
|
||||
{
|
||||
public:
|
||||
//! \param privateKey: take ownership, release after object destruction
|
||||
//! \param publicKey: copy
|
||||
KeyPairEd25519(MemoryBin* privateKey);
|
||||
KeyPairEd25519(const unsigned char* publicKey);
|
||||
|
||||
~KeyPairEd25519();
|
||||
|
||||
//! \param passphrase must contain word indices
|
||||
//! \return create KeyPairEd25519, caller muss call delete at return after finish
|
||||
static KeyPairEd25519* create(const Poco::AutoPtr<Passphrase> passphrase);
|
||||
|
||||
//! \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;
|
||||
|
||||
inline const unsigned char* getPublicKey() const { return mSodiumPublic; }
|
||||
|
||||
inline bool isTheSame(const KeyPairEd25519& b) const {
|
||||
return 0 == sodium_memcmp(mSodiumPublic, b.mSodiumPublic, crypto_sign_PUBLICKEYBYTES);
|
||||
}
|
||||
inline bool isTheSame(const unsigned char* pubkey) const {
|
||||
if (!pubkey)
|
||||
return false;
|
||||
return 0 == sodium_memcmp(mSodiumPublic, pubkey, crypto_sign_PUBLICKEYBYTES);
|
||||
}
|
||||
//! \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 (!mSodiumSecret) return 1;
|
||||
if (privkey->size() != mSodiumSecret->size()) return -1;
|
||||
return sodium_memcmp(*mSodiumSecret, *privkey, privkey->size());
|
||||
}
|
||||
|
||||
inline bool operator == (const KeyPairEd25519& b) const { return isTheSame(b); }
|
||||
inline bool operator != (const KeyPairEd25519& 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 mSodiumSecret != nullptr; }
|
||||
|
||||
//! \brief only way to get a private key.. encrypted
|
||||
MemoryBin* getCryptedPrivKey(const Poco::AutoPtr<AuthenticatedEncryption> password) const;
|
||||
|
||||
protected:
|
||||
|
||||
KeyPairEd25519();
|
||||
|
||||
|
||||
private:
|
||||
// 64 Byte
|
||||
//! \brief ed25519 libsodium private key
|
||||
//!
|
||||
//! Why it is a pointer and the public is an array?
|
||||
//! TODO: replace MemoryBin by a memory obfuscation class which make it hard to steal the private key from memory
|
||||
MemoryBin* mSodiumSecret;
|
||||
|
||||
// 32 Byte
|
||||
//! \brief ed25519 libsodium public key
|
||||
unsigned char mSodiumPublic[crypto_sign_PUBLICKEYBYTES];
|
||||
};
|
||||
|
||||
#endif //__GRADIDO_LOGIN_SERVER_CRYPTO_ED25519_H
|
||||
97
login_server/src/cpp/Crypto/Obfus_array.cpp
Normal file
97
login_server/src/cpp/Crypto/Obfus_array.cpp
Normal file
@ -0,0 +1,97 @@
|
||||
#include "Obfus_array.h"
|
||||
#include <sodium.h>
|
||||
#include <memory.h>
|
||||
#include <math.h>
|
||||
#include <assert.h>
|
||||
|
||||
ObfusArray::ObfusArray(size_t size, const unsigned char * data)
|
||||
: m_arraySize(0), m_offsetSize(0), m_dataSize(size), m_Data(nullptr)
|
||||
{
|
||||
m_arraySize = size + 2 + randombytes_random() % (int)roundf(size*0.25f);
|
||||
m_Data = (unsigned char*)malloc(m_arraySize);
|
||||
|
||||
m_offsetSize = randombytes_random() % (int)roundf((m_arraySize - m_dataSize) * 0.8f);
|
||||
|
||||
//printf("[ObfusArray::ObfusArray] array_size: %d, start by: %lld, size: %u, offset: %u\n",
|
||||
//m_arraySize, m_Data, size, m_offsetSize);
|
||||
|
||||
assert(m_arraySize - m_offsetSize >= size);
|
||||
|
||||
uint32_t* d = (uint32_t*)m_Data;
|
||||
size_t dMax = (size_t)floorf(m_arraySize / 4.0f);
|
||||
|
||||
//printf("d start by: %lld, dMax: %u\n", d, dMax);
|
||||
size_t i = 0;
|
||||
DISASM_MISALIGN;
|
||||
for (size_t i = 0; i < dMax; i++) {
|
||||
d[i] = randombytes_random();
|
||||
}
|
||||
for (size_t i = m_arraySize - 4; i < m_arraySize; i++) {
|
||||
m_Data[i] = (unsigned char)randombytes_random();
|
||||
}
|
||||
//d[m_arraySize - 4] = randombytes_random();
|
||||
DISASM_FALSERET;
|
||||
/* other stuff can be done here that won't be disassembled */
|
||||
memcpy(&m_Data[m_offsetSize], data, size);
|
||||
//printf("[ObfusArray] data: %lld\n", (int64_t)m_Data);
|
||||
}
|
||||
|
||||
ObfusArray::ObfusArray(size_t size)
|
||||
: m_arraySize(0), m_offsetSize(0), m_dataSize(size), m_Data(nullptr)
|
||||
{
|
||||
m_arraySize = size + 2 + randombytes_random() % (int)roundf(size*0.25f);
|
||||
m_Data = (unsigned char*)malloc(m_arraySize);
|
||||
|
||||
m_offsetSize = randombytes_random() % (int)roundf((m_arraySize - m_dataSize) * 0.8f);
|
||||
|
||||
//printf("[ObfusArray::ObfusArray] array_size: %d, start by: %lld, size: %u, offset: %u\n",
|
||||
//m_arraySize, m_Data, size, m_offsetSize);
|
||||
|
||||
assert(m_arraySize - m_offsetSize >= size);
|
||||
|
||||
uint32_t* d = (uint32_t*)m_Data;
|
||||
size_t dMax = (size_t)floorf(m_arraySize / 4.0f);
|
||||
|
||||
//printf("d start by: %lld, dMax: %u\n", d, dMax);
|
||||
size_t i = 0;
|
||||
DISASM_MISALIGN;
|
||||
for (size_t i = 0; i < dMax; i++) {
|
||||
d[i] = randombytes_random();
|
||||
}
|
||||
DISASM_FALSERET;
|
||||
for (size_t i = m_arraySize - 4; i < m_arraySize; i++) {
|
||||
m_Data[i] = (unsigned char)randombytes_random();
|
||||
}
|
||||
//d[m_arraySize - 4] = randombytes_random();
|
||||
|
||||
}
|
||||
|
||||
/*
|
||||
ObfusArray::ObfusArray(size_t size, const unsigned char * data)
|
||||
: m_arraySize(64), m_offsetSize(0), m_dataSize(size)
|
||||
{
|
||||
memset(m_Data, 0, m_arraySize);
|
||||
memcpy(m_Data, data, size);
|
||||
//printf("[ObfusArray] data: %lld\n", (int64_t)m_Data);
|
||||
}
|
||||
*/
|
||||
ObfusArray::~ObfusArray()
|
||||
{
|
||||
|
||||
//printf("[ObfusArray::~ObfusArray] data: %lld\n", (int64_t)m_Data);
|
||||
if (m_Data) {
|
||||
|
||||
free(m_Data);
|
||||
m_Data = nullptr;
|
||||
}
|
||||
//printf("[ObfusArray::~ObfusArray] finish\n");
|
||||
|
||||
}
|
||||
|
||||
void ObfusArray::put(size_t i, Poco::UInt64 value)
|
||||
{
|
||||
if ((i + 1) * 8 >= m_dataSize) return;
|
||||
DISASM_FALSERET;
|
||||
unsigned char* p = &m_Data[m_offsetSize + (i * 8)];
|
||||
memcpy(p, &value, sizeof(Poco::UInt64));
|
||||
}
|
||||
78
login_server/src/cpp/Crypto/Obfus_array.h
Normal file
78
login_server/src/cpp/Crypto/Obfus_array.h
Normal file
@ -0,0 +1,78 @@
|
||||
#ifndef GRADIDO_LOGIN_SERVER_CRYPTO_OBFUS_ARRAY
|
||||
#define GRADIDO_LOGIN_SERVER_CRYPTO_OBFUS_ARRAY
|
||||
|
||||
#include <stdio.h>
|
||||
#include "Poco/Types.h"
|
||||
|
||||
#ifdef _ENABLE_ASSEMBLER_OBFUS //_MSC_VER
|
||||
// Quelle: https://mycomputersciencebooks.files.wordpress.com/2017/08/secure-programming-in-c-and-c.pdf
|
||||
// Kapitel 12.16
|
||||
#define NULLPAD_START __asm {
|
||||
pushl %eax
|
||||
movl %esp, %eax
|
||||
}
|
||||
#define NULLPAD __asm {
|
||||
addb %al, (%eax)
|
||||
}
|
||||
#define NULLPAD_END __asm {
|
||||
popl %eax
|
||||
}
|
||||
#define NULLPAD_10 NULLPAD_START; NULLPAD; NULLPAD; NULLPAD; NULLPAD; NULLPAD; NULLPAD_END
|
||||
|
||||
|
||||
#define DISASM_MISALIGN __asm __volatile ( \
|
||||
" pushl %eax \n" \
|
||||
" cmpl %eax, %eax \n" \
|
||||
" jz 0f \n" \
|
||||
" .byte 0x0F \n" \
|
||||
"0: \n" \
|
||||
" popl %eax \n")
|
||||
|
||||
#define DISASM_FALSERET __asm __volatile ( \
|
||||
" pushl %ecx /* save registers */\n" \
|
||||
" pushl %ebx \n" \
|
||||
" pushl %edx \n" \
|
||||
" movl %esp, %ebx /* save ebp, esp */\n" \
|
||||
" movl %ebp, %esp \n" \
|
||||
" popl %ebp /* save old %ebp */\n" \
|
||||
" popl %ecx /* save return addr */\n" \
|
||||
" lea 0f, %edx /* edx = addr of 0: */\n" \
|
||||
" pushl %edx /* return addr = edx */\n" \
|
||||
" ret \n" \
|
||||
" .byte 0x0F /* off-by-one byte */\n" \
|
||||
"0: \n" \
|
||||
" pushl %ecx /* restore ret addr */\n" \
|
||||
" pushl %ebp /* restore old &ebp */\n" \
|
||||
" movl %esp, %ebp /* restore ebp, esp */\n" \
|
||||
" movl %ebx, %esp \n" \
|
||||
" popl %ebx \n" \
|
||||
" popl %ecx \n")
|
||||
#else
|
||||
#define NULLPAD_10
|
||||
#define DISASM_MISALIGN
|
||||
#define DISASM_FALSERET
|
||||
#endif
|
||||
|
||||
class ObfusArray
|
||||
{
|
||||
public:
|
||||
ObfusArray(size_t size, const unsigned char * data);
|
||||
ObfusArray(size_t size);
|
||||
~ObfusArray();
|
||||
|
||||
inline operator const unsigned char*() const {return &m_Data[m_offsetSize];}
|
||||
inline operator unsigned char*() { return &m_Data[m_offsetSize]; }
|
||||
|
||||
inline size_t size() const { return m_dataSize;}
|
||||
|
||||
void put(size_t i, Poco::UInt64 value);
|
||||
|
||||
private:
|
||||
size_t m_arraySize;
|
||||
size_t m_offsetSize;
|
||||
size_t m_dataSize;
|
||||
unsigned char* m_Data;
|
||||
//unsigned char m_Data[64];
|
||||
};
|
||||
|
||||
#endif //GRADIDO_LOGIN_SERVER_CRYPTO_OBFUS_ARRAY
|
||||
386
login_server/src/cpp/Crypto/Passphrase.cpp
Normal file
386
login_server/src/cpp/Crypto/Passphrase.cpp
Normal file
@ -0,0 +1,386 @@
|
||||
#include "Passphrase.h"
|
||||
|
||||
#include "Poco/Types.h"
|
||||
#include "Poco/Tuple.h"
|
||||
|
||||
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
|
||||
#include "KeyPairEd25519.h"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
|
||||
#define STR_BUFFER_SIZE 25
|
||||
|
||||
static std::vector<Poco::Tuple<int, std::string>> g_specialChars = {
|
||||
{ 0xa4, "auml" },{ 0x84, "Auml" },
|
||||
{ 0xbc, "uuml" },{ 0x9c, "Uuml" },
|
||||
{ 0xb6, "ouml" },{ 0x96, "Ouml" },
|
||||
{ 0x9f, "szlig" }
|
||||
};
|
||||
|
||||
Passphrase::Passphrase(const std::string& passphrase, const Mnemonic* wordSource)
|
||||
: mPassphraseString(filter(passphrase)), mWordSource(wordSource)
|
||||
{
|
||||
memset(mWordIndices, 0, PHRASE_WORD_COUNT * sizeof(Poco::UInt16));
|
||||
getWordIndices();
|
||||
}
|
||||
|
||||
|
||||
std::string Passphrase::filter(const std::string& passphrase)
|
||||
{
|
||||
std::string filteredPassphrase;
|
||||
auto passphrase_size = passphrase.size();
|
||||
|
||||
for (int i = 0; i < passphrase_size; i++) {
|
||||
unsigned char c = passphrase.data()[i];
|
||||
// asci 128 even by utf8 (hex)
|
||||
// 0000 0000 – 0000 007F
|
||||
// utf8
|
||||
if (c > 0x0000007F) {
|
||||
int additionalUtfByteCount = 0;
|
||||
//filteredPassphrase += c;
|
||||
if ((c & 0x00000080) == 0x00000080) {
|
||||
// c3 a4 => ä
|
||||
// c3 bc => ü
|
||||
// c3 b6 => ö
|
||||
// c3 84 => Ä
|
||||
// c3 96 => Ö
|
||||
// c3 9c => Ü
|
||||
// c3 9f => ß
|
||||
|
||||
|
||||
|
||||
unsigned char c2 = passphrase.data()[i + 1];
|
||||
bool insertedHtmlEntitie = false;
|
||||
for (auto it = g_specialChars.begin(); it != g_specialChars.end(); it++) {
|
||||
if (c2 == it->get<0>()) {
|
||||
auto htmlEntitie = it->get<1>();
|
||||
filteredPassphrase += "&";
|
||||
filteredPassphrase += htmlEntitie;
|
||||
filteredPassphrase += ";";
|
||||
i++;
|
||||
insertedHtmlEntitie = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (insertedHtmlEntitie) continue;
|
||||
additionalUtfByteCount = 1;
|
||||
}
|
||||
else if ((c & 0x00000800) == 0x00000800) {
|
||||
additionalUtfByteCount = 2;
|
||||
}
|
||||
else if ((c & 0x00010000) == 0x00010000) {
|
||||
additionalUtfByteCount = 3;
|
||||
}
|
||||
for (int j = 0; j <= additionalUtfByteCount; j++) {
|
||||
filteredPassphrase += passphrase.data()[i + j];
|
||||
i++;
|
||||
}
|
||||
}
|
||||
else {
|
||||
// 32 = Space
|
||||
// 65 = A
|
||||
// 90 = Z
|
||||
// 97 = a
|
||||
// 122 = z
|
||||
// 59 = ;
|
||||
// 38 = &
|
||||
if (c == 32 || c == 59 || c == 38 ||
|
||||
(c >= 65 && c <= 90) ||
|
||||
(c >= 97 && c <= 122)) {
|
||||
filteredPassphrase += c;
|
||||
}
|
||||
else if (c == '\n' || c == '\r') {
|
||||
filteredPassphrase += ' ';
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
return filteredPassphrase;
|
||||
}
|
||||
|
||||
Poco::AutoPtr<Passphrase> Passphrase::transform(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);*/
|
||||
// Poco::SharedPtr<Passphrase> transformedPassphrase = new Passphrase()
|
||||
|
||||
if (!targetWordSource || !mWordSource) {
|
||||
return nullptr;
|
||||
}
|
||||
if (targetWordSource == mWordSource) {
|
||||
duplicate();
|
||||
return this;
|
||||
}
|
||||
if (createWordIndices()) {
|
||||
return create(mWordIndices, targetWordSource);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
Poco::AutoPtr<Passphrase> Passphrase::create(const MemoryBin* wordIndices, const Mnemonic* wordSource)
|
||||
{
|
||||
if (PHRASE_WORD_COUNT * sizeof(Poco::UInt16) >= wordIndices->size()) {
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
const Poco::UInt16* word_indices_p = (const Poco::UInt16*)wordIndices->data();
|
||||
return create(word_indices_p, wordSource);
|
||||
}
|
||||
|
||||
std::string Passphrase::createClearPassphrase() const
|
||||
{
|
||||
auto word_indices = getWordIndices();
|
||||
std::string clear_passphrase;
|
||||
auto word_source = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER];
|
||||
for (int i = 0; i < PHRASE_WORD_COUNT; i++) {
|
||||
auto word = word_source->getWord(word_indices[i]);
|
||||
if (word) {
|
||||
clear_passphrase += word;
|
||||
clear_passphrase += " ";
|
||||
}
|
||||
}
|
||||
return clear_passphrase;
|
||||
}
|
||||
|
||||
Poco::AutoPtr<Passphrase> Passphrase::create(const Poco::UInt16 wordIndices[PHRASE_WORD_COUNT], const Mnemonic* wordSource)
|
||||
{
|
||||
std::string clearPassphrase;
|
||||
for (int i = 0; i < PHRASE_WORD_COUNT; i++) {
|
||||
auto word = wordSource->getWord(wordIndices[i]);
|
||||
if (word) {
|
||||
clearPassphrase += word;
|
||||
clearPassphrase += " ";
|
||||
}
|
||||
else {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
return new Passphrase(clearPassphrase, wordSource);
|
||||
}
|
||||
|
||||
Poco::AutoPtr<Passphrase> Passphrase::generate(const Mnemonic* wordSource)
|
||||
{
|
||||
auto em = ErrorManager::getInstance();
|
||||
auto mm = MemoryManager::getInstance();
|
||||
auto word_indices = mm->getFreeMemory(PHRASE_WORD_COUNT * sizeof(Poco::UInt16));
|
||||
Poco::UInt16* word_indices_p = (Poco::UInt16*)word_indices->data();
|
||||
|
||||
for (int i = 0; i < PHRASE_WORD_COUNT; i++) {
|
||||
word_indices_p[i] = randombytes_random() % 2048;
|
||||
}
|
||||
auto result_passphrase = create(word_indices_p, wordSource);
|
||||
mm->releaseMemory(word_indices);
|
||||
|
||||
return result_passphrase;
|
||||
/*
|
||||
|
||||
unsigned int random_indices[PHRASE_WORD_COUNT];
|
||||
|
||||
unsigned int str_sizes[PHRASE_WORD_COUNT];
|
||||
unsigned int phrase_buffer_size = 0;
|
||||
static const char* function_name = "Passphrase::generate";
|
||||
bool error_reloading_mnemonic_word_list = false;
|
||||
int loop_trys = 0;
|
||||
Poco::RegularExpression check_valid_word("^[a-zA-ZÄÖÜäöüß&;]*$");
|
||||
|
||||
// TODO: make sure words didn't double
|
||||
for (int i = 0; i < PHRASE_WORD_COUNT; i++) {
|
||||
random_indices[i] = randombytes_random() % 2048;
|
||||
auto word = wordSource->getWord(random_indices[i]);
|
||||
if (loop_trys > 10 || error_reloading_mnemonic_word_list) {
|
||||
return nullptr;
|
||||
}
|
||||
if (!word) {
|
||||
em->addError(new ParamError(function_name, "empty word get for index", random_indices[i]));
|
||||
em->sendErrorsAsEmail();
|
||||
|
||||
random_indices[i] = randombytes_random() % 2048;
|
||||
word = wordSource->getWord(random_indices[i]);
|
||||
if (!word) return nullptr;
|
||||
|
||||
}
|
||||
else {
|
||||
if (!check_valid_word.match(word, 0, Poco::RegularExpression::RE_NOTEMPTY)) {
|
||||
em->addError(new ParamError(function_name, "invalid word", word));
|
||||
em->addError(new Error(function_name, "try to reload mnemonic word list, but this error is maybe evidence for a serious memory problem!!!"));
|
||||
if (!ServerConfig::loadMnemonicWordLists()) {
|
||||
em->addError(new Error(function_name, "error reloading mnemonic word lists"));
|
||||
error_reloading_mnemonic_word_list = true;
|
||||
}
|
||||
else {
|
||||
i = 0;
|
||||
loop_trys++;
|
||||
}
|
||||
em->sendErrorsAsEmail();
|
||||
}
|
||||
}
|
||||
str_sizes[i] = strlen(word);
|
||||
phrase_buffer_size += str_sizes[i];
|
||||
}
|
||||
phrase_buffer_size += PHRASE_WORD_COUNT + 1;
|
||||
|
||||
std::string phrase_buffer(phrase_buffer_size, '\0');
|
||||
int phrase_buffer_cursor = 0;
|
||||
|
||||
for (int i = 0; i < PHRASE_WORD_COUNT; i++) {
|
||||
memcpy(&phrase_buffer[phrase_buffer_cursor], wordSource->getWord(random_indices[i]), str_sizes[i]);
|
||||
|
||||
phrase_buffer_cursor += str_sizes[i];
|
||||
phrase_buffer[phrase_buffer_cursor++] = ' ';
|
||||
}
|
||||
|
||||
|
||||
return create(;
|
||||
*/
|
||||
}
|
||||
|
||||
bool Passphrase::createWordIndices()
|
||||
{
|
||||
auto er = ErrorManager::getInstance();
|
||||
auto mm = MemoryManager::getInstance();
|
||||
const char* functionName = "Passphrase::createWordIndices";
|
||||
|
||||
if (!mWordSource) {
|
||||
er->addError(new Error(functionName, "word source is empty"));
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
//DHASH key = DRMakeStringHash(passphrase);
|
||||
size_t pass_phrase_size = mPassphraseString.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 = mPassphraseString.begin(); it != mPassphraseString.end(); it++)
|
||||
{
|
||||
if (*it == ' ') {
|
||||
if (buffer_cursor < 3) {
|
||||
continue;
|
||||
}
|
||||
if (PHRASE_WORD_COUNT > word_cursor && mWordSource->isWordExist(acBuffer)) {
|
||||
mWordIndices[word_cursor] = mWordSource->getWordIndex(acBuffer);
|
||||
//word_indices_old[word_cursor] = word_source->getWordIndex(acBuffer);
|
||||
}
|
||||
else {
|
||||
er->addError(new ParamError(functionName, "word didn't exist", acBuffer));
|
||||
er->sendErrorsAsEmail();
|
||||
return false;
|
||||
}
|
||||
word_cursor++;
|
||||
memset(acBuffer, 0, STR_BUFFER_SIZE);
|
||||
buffer_cursor = 0;
|
||||
|
||||
}
|
||||
else {
|
||||
acBuffer[buffer_cursor++] = *it;
|
||||
}
|
||||
}
|
||||
if (PHRASE_WORD_COUNT > word_cursor && mWordSource->isWordExist(acBuffer)) {
|
||||
mWordIndices[word_cursor] = mWordSource->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 true;
|
||||
}
|
||||
|
||||
const Poco::UInt16* Passphrase::getWordIndices()
|
||||
{
|
||||
if (!(mWordIndices[0] | mWordIndices[1] | mWordIndices[2] | mWordIndices[3])) {
|
||||
if (createWordIndices()) return mWordIndices;
|
||||
}
|
||||
return mWordIndices;
|
||||
}
|
||||
|
||||
const Poco::UInt16* Passphrase::getWordIndices() const
|
||||
{
|
||||
return mWordIndices;
|
||||
}
|
||||
|
||||
bool Passphrase::checkIfValid()
|
||||
{
|
||||
std::istringstream iss(mPassphraseString);
|
||||
std::vector<std::string> results(std::istream_iterator<std::string>{iss},
|
||||
std::istream_iterator<std::string>());
|
||||
|
||||
bool existAll = true;
|
||||
for (auto it = results.begin(); it != results.end(); it++) {
|
||||
if (*it == "\0" || *it == "" || it->size() < 3) continue;
|
||||
if (!mWordSource->isWordExist(*it)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
const Mnemonic* Passphrase::detectMnemonic(const std::string& passphrase, const KeyPairEd25519* keyPair /* = nullptr*/)
|
||||
{
|
||||
std::istringstream iss(passphrase);
|
||||
std::vector<std::string> results(std::istream_iterator<std::string>{iss},
|
||||
std::istream_iterator<std::string>());
|
||||
|
||||
|
||||
std::string user_public_key_hex;
|
||||
|
||||
if (keyPair) {
|
||||
user_public_key_hex = DataTypeConverter::pubkeyToHex(keyPair->getPublicKey());
|
||||
printf("user public key hex: %s\n", user_public_key_hex.data());
|
||||
}
|
||||
|
||||
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)) {
|
||||
existAll = false;
|
||||
// leave inner for-loop
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (existAll) {
|
||||
if (keyPair) {
|
||||
Poco::AutoPtr<Passphrase> test_passphrase = new Passphrase(passphrase, &m);
|
||||
test_passphrase->createWordIndices();
|
||||
auto key_pair = KeyPairEd25519::create(test_passphrase);
|
||||
if (key_pair) {
|
||||
std::string current_key_pair = DataTypeConverter::pubkeyToHex(key_pair->getPublicKey());
|
||||
printf("public key hex to compare: %s\n", current_key_pair.data());
|
||||
|
||||
if (*key_pair != *keyPair) {
|
||||
delete key_pair;
|
||||
continue;
|
||||
}
|
||||
else {
|
||||
delete key_pair;
|
||||
}
|
||||
}
|
||||
}
|
||||
return &ServerConfig::g_Mnemonic_WordLists[i];
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
59
login_server/src/cpp/Crypto/Passphrase.h
Normal file
59
login_server/src/cpp/Crypto/Passphrase.h
Normal file
@ -0,0 +1,59 @@
|
||||
#ifndef __GRADIDO_LOGIN_SERVER_CRYPTO_PASSPHRASE_H
|
||||
#define __GRADIDO_LOGIN_SERVER_CRYPTO_PASSPHRASE_H
|
||||
|
||||
//#include <string>
|
||||
#include "mnemonic.h"
|
||||
#include "../SingletonManager/MemoryManager.h"
|
||||
#include "../lib/AutoPtrContainer.h"
|
||||
#include "Poco/AutoPtr.h"
|
||||
|
||||
class KeyPairEd25519;
|
||||
|
||||
class Passphrase : public AutoPtrContainer
|
||||
{
|
||||
public:
|
||||
Passphrase(const std::string& passphrase, const Mnemonic* wordSource);
|
||||
|
||||
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);
|
||||
//! \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);
|
||||
|
||||
//! \brief transform passphrase into another language/mnemonic source
|
||||
//! \return this if targetWordSource is the same as mWordSource
|
||||
Poco::AutoPtr<Passphrase> transform(const Mnemonic* targetWordSource);
|
||||
|
||||
//! \brief create clear passphrase from word indices from bitcoin word list (bip0039)
|
||||
//!
|
||||
//! Used by hashing function to get really the same string,
|
||||
//! even user has typed in some not filtered character
|
||||
std::string createClearPassphrase() const;
|
||||
|
||||
//! \brief replace utf8 characters with html special character encoding
|
||||
//!
|
||||
//! TODO: add more utf8 chars for other languages as they needed
|
||||
static std::string filter(const std::string& passphrase);
|
||||
|
||||
//! \return true if all words in passphrase existing in mWordSource
|
||||
bool checkIfValid();
|
||||
|
||||
const Poco::UInt16* getWordIndices();
|
||||
const Poco::UInt16* getWordIndices() const;
|
||||
|
||||
//! \return true if ok
|
||||
bool createWordIndices();
|
||||
|
||||
//! \brief please handle with care! should be only seen by user and admin
|
||||
const std::string& getString() const { return mPassphraseString; }
|
||||
|
||||
protected:
|
||||
|
||||
|
||||
std::string mPassphraseString;
|
||||
const Mnemonic* mWordSource;
|
||||
Poco::UInt16 mWordIndices[PHRASE_WORD_COUNT];
|
||||
};
|
||||
|
||||
#endif // __GRADIDO_LOGIN_SERVER_CRYPTO_PASSPHRASE
|
||||
|
||||
0
login_server/src/cpp/Crypto/ServerCrypto.cpp
Normal file
0
login_server/src/cpp/Crypto/ServerCrypto.cpp
Normal file
9
login_server/src/cpp/Crypto/ServerCrypto.h
Normal file
9
login_server/src/cpp/Crypto/ServerCrypto.h
Normal file
@ -0,0 +1,9 @@
|
||||
#ifndef GRADIDO_LOGIN_SERVER_CRYPTO_SERVER_CRYPTO
|
||||
#define GRADIDO_LOGIN_SERVER_CRYPTO_SERVER_CRYPTO
|
||||
|
||||
class ServerCrypto
|
||||
{
|
||||
|
||||
};
|
||||
|
||||
#endif // GRADIDO_LOGIN_SERVER_CRYPTO_SERVER_CRYPTO
|
||||
361
login_server/src/cpp/Crypto/mnemonic.cpp
Normal file
361
login_server/src/cpp/Crypto/mnemonic.cpp
Normal file
@ -0,0 +1,361 @@
|
||||
|
||||
|
||||
#include "mnemonic.h"
|
||||
#include <memory>
|
||||
#include <cstring>
|
||||
#include <assert.h>
|
||||
#include <mutex>
|
||||
#include "../dependencies/tinf/src/tinf.h"
|
||||
|
||||
#include "DRRandom.h"
|
||||
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
#include "Poco/RegularExpression.h"
|
||||
|
||||
static Poco::RegularExpression g_checkValidWord("^[a-zA-ZÄÖÜäöüß&;]*$");
|
||||
|
||||
Mnemonic::Mnemonic()
|
||||
{
|
||||
memset(mWords, 0, 2048);
|
||||
// mWordHashIndices.resize(2048);
|
||||
}
|
||||
|
||||
Mnemonic::~Mnemonic()
|
||||
{
|
||||
clear();
|
||||
}
|
||||
|
||||
|
||||
|
||||
int Mnemonic::init(void(*fill_words_func)(unsigned char*), unsigned int original_size, unsigned int compressed_size)
|
||||
{
|
||||
std::unique_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
clear();
|
||||
|
||||
unsigned char* buffer = (unsigned char*)malloc(compressed_size);
|
||||
unsigned char* uncompressed_buffer = (unsigned char*)malloc(original_size + 1);
|
||||
memset(uncompressed_buffer, 0, original_size + 1);
|
||||
fill_words_func(buffer);
|
||||
|
||||
// uncompress
|
||||
unsigned int original_size_cpy = original_size;
|
||||
|
||||
if (tinf_gzip_uncompress(uncompressed_buffer, &original_size_cpy, buffer, compressed_size) != TINF_OK) {
|
||||
free(buffer);
|
||||
free(uncompressed_buffer);
|
||||
return -1;
|
||||
}
|
||||
if (original_size_cpy != original_size) {
|
||||
free(buffer);
|
||||
free(uncompressed_buffer);
|
||||
return -2;
|
||||
}
|
||||
else {
|
||||
free(buffer);
|
||||
|
||||
DRRandom::seed(compressed_size);
|
||||
|
||||
|
||||
//printf("c[Mnemonic::%s] uncompressing success\n", __FUNCTION__);
|
||||
// fill words in array and hashList
|
||||
std::string uncompressed_file_name = "uncompressed_buffer";
|
||||
uncompressed_file_name += std::to_string(original_size);
|
||||
uncompressed_file_name += ".txt";
|
||||
FILE* f = fopen(uncompressed_file_name.data(), "w");
|
||||
if (f) {
|
||||
fwrite(uncompressed_buffer, sizeof(char), original_size, f);
|
||||
fclose(f);
|
||||
}
|
||||
|
||||
unsigned short cursor = 0;
|
||||
u32 word_begin = 0, word_end = 0;
|
||||
|
||||
for (unsigned int i = 0; i < original_size; i++) {
|
||||
if (cursor >= 2048) {
|
||||
return -3;
|
||||
}
|
||||
if (uncompressed_buffer[i] == ',' || i == original_size - 1) {
|
||||
word_end = i;
|
||||
|
||||
u32 word_size = word_end - word_begin;
|
||||
if (word_size < 3) {
|
||||
printf("[%s] ERROR! word is smaller than 3, word size: %d, index: %d \n",
|
||||
__FUNCTION__, word_size, cursor
|
||||
);
|
||||
char acBuffer[22]; memset(acBuffer, 0, 22);
|
||||
int _start = word_end - 10;
|
||||
if (_start < 0) {
|
||||
_start = 0;
|
||||
}
|
||||
memcpy(acBuffer, &uncompressed_buffer[_start], 20);
|
||||
printf("word_end: %d, word_begin: %d, part: %s\n", word_end, word_begin, acBuffer);
|
||||
}
|
||||
if (word_end < word_begin) {
|
||||
printf("%c %c %c\n", uncompressed_buffer[i - 1], uncompressed_buffer[i], uncompressed_buffer[i + 1]);
|
||||
printf("%s\n", uncompressed_buffer);
|
||||
continue;
|
||||
}
|
||||
if (uncompressed_buffer[i] != ',') {
|
||||
//printf("last char: %c\n", uncompressed_buffer[i]);
|
||||
word_size++;
|
||||
}
|
||||
// + 1 for null terminating
|
||||
mWords[cursor] = (char*)malloc(word_size + 1);
|
||||
|
||||
// fill hash list for fast reverse lookup
|
||||
memset(mWords[cursor], 0, word_size + 1);
|
||||
if (word_begin + word_size > original_size) {
|
||||
printf("c[Mnemonic::%s] word goes out of array bounds\n", __FUNCTION__);
|
||||
free(uncompressed_buffer);
|
||||
return -4;
|
||||
}
|
||||
memcpy(mWords[cursor], &uncompressed_buffer[word_begin], word_size);
|
||||
//printf("%d: %s\n", cursor, mWords[cursor]);
|
||||
|
||||
DHASH word_hash = DRMakeStringHash(mWords[cursor]);
|
||||
//mWordHashIndices.addByHash(word_hash, (void*)cursor);
|
||||
auto result = mWordHashIndices.insert(WordHashEntry(word_hash, cursor));
|
||||
if (!result.second) {
|
||||
// handle hash collision
|
||||
auto it_collide = mHashCollisionWords.find(word_hash);
|
||||
if (it_collide == mHashCollisionWords.end()) {
|
||||
std::map<std::string, unsigned short> collidedWordsMap;
|
||||
collidedWordsMap.insert(HashCollideWordEntry(mWords[result.first->second], result.first->second));
|
||||
auto result2 = mHashCollisionWords.insert(std::pair<DHASH, std::map<std::string, unsigned short>>(word_hash, collidedWordsMap));
|
||||
if (!result2.second) {
|
||||
free(uncompressed_buffer);
|
||||
printf("c[Mnemonc::%s] error inserting hash collided word map\n", __FUNCTION__);
|
||||
return -6;
|
||||
}
|
||||
it_collide = result2.first;
|
||||
}
|
||||
assert(it_collide != mHashCollisionWords.end());
|
||||
|
||||
auto result3 = it_collide->second.insert(HashCollideWordEntry(mWords[cursor], cursor));
|
||||
if (!result3.second) {
|
||||
free(uncompressed_buffer);
|
||||
printf("c[Mnemonc::%s] error inserting hash collided word entry\n", __FUNCTION__);
|
||||
return -7;
|
||||
}
|
||||
|
||||
//printf("c[Mnemonic::%s] error inserting word, hash collision?\n", __FUNCTION__);
|
||||
//printf("current word: %s\n", mWords[cursor]);
|
||||
//printf("existing word: %s\n", mWords[result.first->second]);
|
||||
}
|
||||
|
||||
word_begin = i + 1;
|
||||
cursor++;
|
||||
}
|
||||
}
|
||||
//printf("c[Mnemonic::%s] before freeing uncompressed buffer \n", __FUNCTION__);
|
||||
free(uncompressed_buffer);
|
||||
|
||||
// remove hash colliding entrys from regular map
|
||||
for (auto it_collide = mHashCollisionWords.begin(); it_collide != mHashCollisionWords.end(); it_collide++) {
|
||||
mWordHashIndices.erase(it_collide->first);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
//printf("c[Mnemonic::%s] before freeing buffer \n", __FUNCTION__);
|
||||
free(buffer);
|
||||
return -5;
|
||||
}
|
||||
|
||||
short Mnemonic::getWordIndex(const char* word) const
|
||||
{
|
||||
std::shared_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
DHASH word_hash = DRMakeStringHash(word);
|
||||
auto it = mWordHashIndices.find(word_hash);
|
||||
if (it != mWordHashIndices.end()) {
|
||||
return it->second;
|
||||
}
|
||||
auto it_collide = mHashCollisionWords.find(word_hash);
|
||||
if (it_collide != mHashCollisionWords.end()) {
|
||||
auto it_collided_word = it_collide->second.find(word);
|
||||
if (it_collided_word != it_collide->second.end()) {
|
||||
return it_collided_word->second;
|
||||
}
|
||||
}
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
bool Mnemonic::isWordExist(const std::string& word) const
|
||||
{
|
||||
return getWordIndex(word.data()) != -1;
|
||||
//DHASH word_hash = DRMakeStringHash(word.data());
|
||||
//return mWordHashIndices.find(word_hash) != mWordHashIndices.end();
|
||||
}
|
||||
*/
|
||||
|
||||
const char* Mnemonic::getWord(short index) const {
|
||||
//std::shared_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
|
||||
if (index < 2048 && index >= 0) {
|
||||
std::string word;
|
||||
{
|
||||
std::shared_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
word = mWords[index];
|
||||
}
|
||||
|
||||
if (!g_checkValidWord.match(word, 0, Poco::RegularExpression::RE_NOTEMPTY)) {
|
||||
auto em = ErrorManager::getInstance();
|
||||
const char* function_name = "Mnemonic::getWord";
|
||||
em->addError(new ParamError(function_name, "invalid word", word));
|
||||
em->addError(new Error(function_name, "try to reload mnemonic word list, but this error is maybe evidence for a serious memory problem!!!"));
|
||||
|
||||
if (!ServerConfig::loadMnemonicWordLists()) {
|
||||
em->addError(new Error(function_name, "error reloading mnemonic word lists"));
|
||||
em->sendErrorsAsEmail();
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
{
|
||||
std::shared_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
word = mWords[index];
|
||||
}
|
||||
if (!g_checkValidWord.match(word, 0, Poco::RegularExpression::RE_NOTEMPTY)) {
|
||||
em->addError(new Error(function_name, "word invalid after reload mnemonic word lists"));
|
||||
em->sendErrorsAsEmail();
|
||||
return nullptr;
|
||||
}
|
||||
em->sendErrorsAsEmail();
|
||||
|
||||
}
|
||||
|
||||
{
|
||||
std::shared_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
return mWords[index];
|
||||
}
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
void Mnemonic::clear()
|
||||
{
|
||||
//Poco::Mutex::ScopedLock _lock(mWorkingMutex, 500);
|
||||
for (int i = 0; i < 2048; i++) {
|
||||
if (mWords[i]) {
|
||||
free(mWords[i]);
|
||||
}
|
||||
}
|
||||
memset(mWords, 0, 2048);
|
||||
mWordHashIndices.clear();
|
||||
mHashCollisionWords.clear();
|
||||
}
|
||||
|
||||
#include "Poco/RegularExpression.h"
|
||||
|
||||
std::string Mnemonic::getCompleteWordList()
|
||||
{
|
||||
std::shared_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
std::string result("");
|
||||
//std::string toReplaced[] = { "auml", "ouml", "uuml", "Auml", "Ouml", "Uuml", "szlig" };
|
||||
Poco::RegularExpression toReplaced[] = {
|
||||
std::string("ä"),
|
||||
std::string("ö"),
|
||||
std::string("ü"),
|
||||
std::string("Ä"),
|
||||
std::string("Ö"),
|
||||
std::string("Uuml;"),
|
||||
std::string("ß")
|
||||
};
|
||||
std::string replaceStrings[] = { "ä", "ö", "ü", "Ä", "Ö", "Ü", "ß" };
|
||||
for (int i = 0; i < 2048; i++) {
|
||||
if (mWords[i]) {
|
||||
std::string word = mWords[i];
|
||||
for (int s = 0; s < 7; s++) {
|
||||
toReplaced[s].subst(word, replaceStrings[s], Poco::RegularExpression::RE_GLOBAL);
|
||||
}
|
||||
|
||||
result += std::to_string(i) + ": " + word + "\n";
|
||||
}
|
||||
else {
|
||||
result += std::to_string(i) + ": <word empty>\n";
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// comparison, not case sensitive.
|
||||
bool compare_nocase(const std::string& first, const std::string& second)
|
||||
{
|
||||
unsigned int i = 0;
|
||||
while ((i < first.length()) && (i < second.length()))
|
||||
{
|
||||
if (tolower(first[i]) < tolower(second[i])) return true;
|
||||
else if (tolower(first[i]) > tolower(second[i])) return false;
|
||||
++i;
|
||||
}
|
||||
return (first.length() < second.length());
|
||||
}
|
||||
|
||||
std::string Mnemonic::getCompleteWordListSorted()
|
||||
{
|
||||
std::shared_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
std::string result("");
|
||||
|
||||
std::list<std::string> words;
|
||||
for (int i = 0; i < 2048; i++) {
|
||||
if (mWords[i]) {
|
||||
words.push_back(mWords[i]);
|
||||
}
|
||||
else {
|
||||
printf("missing word on %d\n", i);
|
||||
}
|
||||
}
|
||||
words.sort(compare_nocase);
|
||||
|
||||
//std::string toReplaced[] = { "auml", "ouml", "uuml", "Auml", "Ouml", "Uuml", "szlig" };
|
||||
Poco::RegularExpression toReplaced[] = {
|
||||
std::string("ä"),
|
||||
std::string("ö"),
|
||||
std::string("ü"),
|
||||
std::string("Ä"),
|
||||
std::string("Ö"),
|
||||
std::string("Uuml;"),
|
||||
std::string("ß")
|
||||
};
|
||||
std::string replaceStrings[] = { "ä", "ö", "ü", "Ä", "Ö", "Ü", "ß" };
|
||||
int i = 0;
|
||||
for(auto it = words.begin(); it != words.end(); it++) {
|
||||
std::string word = *it;
|
||||
for (int s = 0; s < 7; s++) {
|
||||
toReplaced[s].subst(word, replaceStrings[s], Poco::RegularExpression::RE_GLOBAL);
|
||||
}
|
||||
|
||||
result += std::to_string(i) + ": " + word + "\n";
|
||||
i++;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
void Mnemonic::printToFile(const char* filename)
|
||||
{
|
||||
std::shared_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
FILE* f = fopen(filename, "wt");
|
||||
if (f) {
|
||||
auto words = getCompleteWordListSorted();
|
||||
fwrite(words.data(), 1, words.size(), f);
|
||||
fclose(f);
|
||||
}
|
||||
}
|
||||
|
||||
Poco::JSON::Array Mnemonic::getSortedWordList()
|
||||
{
|
||||
std::shared_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
std::list<std::string> words;
|
||||
for (auto it = mWordHashIndices.begin(); it != mWordHashIndices.end(); it++) {
|
||||
words.push_back(mWords[it->second]);
|
||||
}
|
||||
words.sort();
|
||||
Poco::JSON::Array json;
|
||||
for (auto it = words.begin(); it != words.end(); it++) {
|
||||
json.add(*it);
|
||||
}
|
||||
// json.stringify()
|
||||
return json;
|
||||
}
|
||||
67
login_server/src/cpp/Crypto/mnemonic.h
Normal file
67
login_server/src/cpp/Crypto/mnemonic.h
Normal file
@ -0,0 +1,67 @@
|
||||
#ifndef DR_MNEMONIC_H
|
||||
#define DR_MNEMONIC_H
|
||||
|
||||
/*!
|
||||
*
|
||||
* @author: einhornimmond
|
||||
*
|
||||
* @date: 16.06.19
|
||||
*
|
||||
* @desc: Class for handling mnemonic word list, unpacking, reverse lookup
|
||||
*
|
||||
*/
|
||||
|
||||
#include "../lib/DRHashList.h"
|
||||
#include <string>
|
||||
#include <shared_mutex>
|
||||
#include <map>
|
||||
#include <list>
|
||||
|
||||
#include "Poco/JSON/Array.h"
|
||||
|
||||
#define PHRASE_WORD_COUNT 24
|
||||
|
||||
|
||||
class Mnemonic
|
||||
{
|
||||
public:
|
||||
Mnemonic();
|
||||
~Mnemonic();
|
||||
|
||||
int init(void(*fill_words_func)(unsigned char*), unsigned int original_size, unsigned int compressed_size);
|
||||
|
||||
const char* getWord(short index) const;
|
||||
short getWordIndex(const char* word) const;
|
||||
inline bool isWordExist(const std::string& word) const {
|
||||
std::shared_lock<std::shared_mutex> _lock(mWorkingMutex);
|
||||
return getWordIndex(word.data()) != -1;
|
||||
}
|
||||
// using only for debugging
|
||||
std::string getCompleteWordList();
|
||||
|
||||
std::string getCompleteWordListSorted();
|
||||
|
||||
Poco::JSON::Array getSortedWordList();
|
||||
|
||||
void printToFile(const char* filename);
|
||||
|
||||
protected:
|
||||
|
||||
void clear();
|
||||
|
||||
struct HashCollisionWords {
|
||||
DHASH hash;
|
||||
std::vector<std::string> words;
|
||||
};
|
||||
|
||||
char* mWords[2048];
|
||||
//DRHashList mWordHashIndices;
|
||||
typedef std::pair<DHASH, unsigned short> WordHashEntry;
|
||||
typedef std::pair<std::string, unsigned short> HashCollideWordEntry;
|
||||
std::map<DHASH, unsigned short> mWordHashIndices;
|
||||
std::map<DHASH, std::map<std::string, unsigned short>> mHashCollisionWords;
|
||||
mutable std::shared_mutex mWorkingMutex;
|
||||
|
||||
};
|
||||
|
||||
#endif //DR_MNEMONIC_H
|
||||
11
login_server/src/cpp/Crypto/mnemonic_bip0039.h
Normal file
11
login_server/src/cpp/Crypto/mnemonic_bip0039.h
Normal file
File diff suppressed because one or more lines are too long
11
login_server/src/cpp/Crypto/mnemonic_german.h
Normal file
11
login_server/src/cpp/Crypto/mnemonic_german.h
Normal file
File diff suppressed because one or more lines are too long
11
login_server/src/cpp/Crypto/mnemonic_german2.h
Normal file
11
login_server/src/cpp/Crypto/mnemonic_german2.h
Normal file
File diff suppressed because one or more lines are too long
237
login_server/src/cpp/Gradido_LoginServer.cpp
Normal file
237
login_server/src/cpp/Gradido_LoginServer.cpp
Normal file
@ -0,0 +1,237 @@
|
||||
#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));
|
||||
}
|
||||
|
||||
void Gradido_LoginServer::handleOption(const std::string& name, const std::string& value)
|
||||
{
|
||||
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
|
||||
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");
|
||||
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;
|
||||
}
|
||||
|
||||
41
login_server/src/cpp/Gradido_LoginServer.h
Normal file
41
login_server/src/cpp/Gradido_LoginServer.h
Normal file
@ -0,0 +1,41 @@
|
||||
#ifndef Gradido_LoginServer_INCLUDED
|
||||
#define Gradido_LoginServer_INCLUDED
|
||||
|
||||
#include "Poco/Util/ServerApplication.h"
|
||||
|
||||
class Gradido_LoginServer : public Poco::Util::ServerApplication
|
||||
{
|
||||
|
||||
/// The main application class.
|
||||
///
|
||||
/// This class handles command-line arguments and
|
||||
/// configuration files.
|
||||
/// Start the Gradido_LoginServer executable with the help
|
||||
/// option (/help on Windows, --help on Unix) for
|
||||
/// the available command line options.
|
||||
///
|
||||
|
||||
|
||||
public:
|
||||
Gradido_LoginServer();
|
||||
~Gradido_LoginServer();
|
||||
|
||||
protected:
|
||||
void initialize(Application& self);
|
||||
|
||||
void uninitialize();
|
||||
|
||||
void defineOptions(Poco::Util::OptionSet& options);
|
||||
|
||||
void handleOption(const std::string& name, const std::string& value);
|
||||
void displayHelp();
|
||||
|
||||
int main(const std::vector<std::string>& args);
|
||||
|
||||
void createConsoleFileAsyncLogger(std::string name, std::string filePath);
|
||||
|
||||
private:
|
||||
bool _helpRequested;
|
||||
};
|
||||
|
||||
#endif //Gradido_LoginServer_INCLUDED
|
||||
249
login_server/src/cpp/HTTPInterface/AdminCheckUserBackup.cpp
Normal file
249
login_server/src/cpp/HTTPInterface/AdminCheckUserBackup.cpp
Normal file
@ -0,0 +1,249 @@
|
||||
#include "AdminCheckUserBackup.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\\adminCheckUserBackup.cpsp"
|
||||
|
||||
#include "../Crypto/KeyPair.h"
|
||||
#include "../SingletonManager/ConnectionManager.h"
|
||||
|
||||
#include "../controller/UserBackups.h"
|
||||
|
||||
#include "Poco/Data/Binding.h"
|
||||
using namespace Poco::Data::Keywords;
|
||||
|
||||
typedef Poco::Tuple<int, Poco::Nullable<Poco::Data::BLOB>, std::string> UserBackupTuple;
|
||||
|
||||
struct SListEntry
|
||||
{
|
||||
Poco::AutoPtr<controller::User> user;
|
||||
std::vector<Poco::AutoPtr<controller::UserBackups>> backups;
|
||||
};
|
||||
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
AdminCheckUserBackup::AdminCheckUserBackup(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void AdminCheckUserBackup::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 25 "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);
|
||||
Poco::Data::Statement select(con);
|
||||
std::list<UserBackupTuple> userBackupEntrys;
|
||||
select << "SELECT u.id, u.pubkey, b.passphrase FROM users as u LEFT JOIN user_backups as b on(u.id = b.user_id) order by u.id"
|
||||
, into(userBackupEntrys);
|
||||
|
||||
size_t resultCount = 0;
|
||||
try {
|
||||
resultCount = select.execute();
|
||||
int last_user_id = 0;
|
||||
for(auto it = userBackupEntrys.begin(); it != userBackupEntrys.end(); it++) {
|
||||
auto tuple = *it;
|
||||
auto pubkey = tuple.get<1>();
|
||||
if(pubkey.isNull()) {
|
||||
continue;
|
||||
}
|
||||
auto passphrase = KeyPair::filterPassphrase(tuple.get<2>());
|
||||
auto user_id = tuple.get<0>();
|
||||
Mnemonic* wordSource = nullptr;
|
||||
if(!User::validatePassphrase(passphrase, &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);
|
||||
}
|
||||
bool matching = false;
|
||||
if(keys.isPubkeysTheSame(pubkey.value().content().data())) {
|
||||
matching = true;
|
||||
}
|
||||
if(user_id != last_user_id) {
|
||||
last_user_id = user_id;
|
||||
if(matching) continue;
|
||||
} else {
|
||||
auto lastEntry = notMatchingEntrys.back();
|
||||
if(lastEntry.user->getModel()->getID() == user_id && matching == true) {
|
||||
notMatchingEntrys.pop_back();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
SListEntry entry;
|
||||
entry.user = controller::User::create();
|
||||
entry.user->load(user_id);
|
||||
entry.backups = controller::UserBackups::load(user_id);
|
||||
|
||||
notMatchingEntrys.push_back(entry);
|
||||
|
||||
}
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
addError(new ParamError("adminCheckUserBackup", "mysql error", ex.displayText().data()), 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_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>Admin Check User Backup</h1>\n";
|
||||
responseStream << "\t";
|
||||
#line 91 "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"
|
||||
responseStream << ( notMatchingEntrys.size() );
|
||||
responseStream << "</b></p>\n";
|
||||
responseStream << "\t<table>\n";
|
||||
responseStream << "\t\t<thead>\n";
|
||||
responseStream << "\t\t\t<tr><th>id</th><th>Vorname</th><th>Nachname</th><th>E-Mail</th><th>backups count</tr>\n";
|
||||
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"
|
||||
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"
|
||||
responseStream << ( userModel->getID() );
|
||||
responseStream << "</td>\n";
|
||||
responseStream << "\t\t\t\t<td>";
|
||||
#line 103 "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"
|
||||
responseStream << ( userModel->getLastName() );
|
||||
responseStream << "</td>\n";
|
||||
responseStream << "\t\t\t\t<td>";
|
||||
#line 105 "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"
|
||||
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"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t</tbody>\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/AdminCheckUserBackup.h
Normal file
20
login_server/src/cpp/HTTPInterface/AdminCheckUserBackup.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef AdminCheckUserBackup_INCLUDED
|
||||
#define AdminCheckUserBackup_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class AdminCheckUserBackup: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
AdminCheckUserBackup(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // AdminCheckUserBackup_INCLUDED
|
||||
282
login_server/src/cpp/HTTPInterface/AdminUserPasswordReset.cpp
Normal file
282
login_server/src/cpp/HTTPInterface/AdminUserPasswordReset.cpp
Normal file
@ -0,0 +1,282 @@
|
||||
#include "AdminUserPasswordReset.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\\adminUserPasswordReset.cpsp"
|
||||
|
||||
// includes
|
||||
#include "../controller/User.h"
|
||||
#include "../controller/EmailVerificationCode.h"
|
||||
#include "../controller/UserBackups.h"
|
||||
|
||||
|
||||
enum PageState
|
||||
{
|
||||
PAGE_ASK_EMAIL,
|
||||
PAGE_SHOW_EMAIL
|
||||
};
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
AdminUserPasswordReset::AdminUserPasswordReset(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void AdminUserPasswordReset::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 19 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
|
||||
// code
|
||||
PageState state = PAGE_ASK_EMAIL;
|
||||
Poco::AutoPtr<controller::User> user = controller::User::create();
|
||||
Poco::AutoPtr<controller::EmailVerificationCode> code;
|
||||
Poco::AutoPtr<controller::UserBackups> userBackup;
|
||||
bool validUser = false;
|
||||
std::string pageName = "Admin User Passwort Reset";
|
||||
|
||||
if(!form.empty()) {
|
||||
auto email = form.get("user-email", "");
|
||||
|
||||
if("" != email) {
|
||||
if(1 != user->load(email)) {
|
||||
addError(new Error("Benutzer Email", "Konnte keinen passenden Benutzer finden!"));
|
||||
} else {
|
||||
validUser = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(validUser) {
|
||||
auto userId = user->getModel()->getID();
|
||||
code = controller::EmailVerificationCode::load(userId, model::table::EMAIL_OPT_IN_RESET_PASSWORD);
|
||||
if(code.isNull()) {
|
||||
code = controller::EmailVerificationCode::create(userId, model::table::EMAIL_OPT_IN_RESET_PASSWORD);
|
||||
if(!code->getModel()->insertIntoDB(false)) {
|
||||
addError(new Error("E-Mail Verification Code", "Fehler beim speichern!"));
|
||||
getErrors(code->getModel());
|
||||
}
|
||||
}
|
||||
|
||||
auto backups = controller::UserBackups::load(userId);
|
||||
auto userPubkey = user->getModel()->getPublicKey();
|
||||
for(auto it = backups.begin(); it != backups.end(); it++) {
|
||||
auto keys = (*it)->getKeyPair();
|
||||
if(keys->isPubkeysTheSame(userPubkey)) {
|
||||
userBackup = *it;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(userBackup.isNull()) {
|
||||
addError(new Error("User Backup", "Kein passendes User Backup gefunden!"));
|
||||
}
|
||||
|
||||
if(!userBackup.isNull() && !code.isNull()) {
|
||||
state = PAGE_SHOW_EMAIL;
|
||||
}
|
||||
}
|
||||
|
||||
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";
|
||||
#line 70 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t<h1>Admin User Passwort Reset</h1>\n";
|
||||
responseStream << "\t<p>Ein Benutzer hat ein Passwort Reset angefordert, hat aber seine Passphrase nicht.</p>\n";
|
||||
responseStream << "\t";
|
||||
#line 73 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
if(PAGE_ASK_EMAIL == state) { responseStream << "\n";
|
||||
responseStream << "\t\t<fieldset class=\"grd_container_small\">\n";
|
||||
responseStream << "\t\t<form method=\"POST\">\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<label for=\"user-email\">Benutzer E-Mail</label>\n";
|
||||
responseStream << "\t\t\t\t<input id=\"user-email\" type=\"text\" name=\"user-email\" value=\"";
|
||||
#line 78 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
responseStream << ( !form.empty() ? form.get("user-email") : "" );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t<p><input type=\"submit\" style=\"width:auto\" value=\"Anzeigen\"></p>\n";
|
||||
responseStream << "\t\t</form>\n";
|
||||
responseStream << "\t\t</fieldset>\n";
|
||||
responseStream << "\t";
|
||||
#line 83 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 84 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
if(validUser) {
|
||||
auto userModel = user->getModel(); responseStream << "\n";
|
||||
responseStream << "\t\t<h3>Benutzer gefunden</h3>\n";
|
||||
responseStream << "\t\t<ul>\n";
|
||||
responseStream << "\t\t\t<li>";
|
||||
#line 88 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
responseStream << ( userModel->getFirstName() );
|
||||
responseStream << " ";
|
||||
#line 88 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
responseStream << ( userModel->getLastName() );
|
||||
responseStream << "</li>\n";
|
||||
responseStream << "\t\t\t<li>";
|
||||
#line 89 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
responseStream << ( userModel->getEmail() );
|
||||
responseStream << "</li>\n";
|
||||
responseStream << "\t\t\t<li>Public Key: ";
|
||||
#line 90 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
responseStream << ( userModel->getPublicKeyHex() );
|
||||
responseStream << "</li>\n";
|
||||
responseStream << "\t\t\t<li>E-Mail überprüft: ";
|
||||
#line 91 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
responseStream << ( std::to_string(userModel->isEmailChecked()) );
|
||||
responseStream << "</li>\n";
|
||||
responseStream << "\t\t\t<li>Private Key verschlüsselt: ";
|
||||
#line 92 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
responseStream << ( std::to_string(userModel->hasPrivateKeyEncrypted()) );
|
||||
responseStream << "</li>\n";
|
||||
responseStream << "\t\t\t<li>Passwort gesetzt: ";
|
||||
#line 93 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
responseStream << ( std::to_string(userModel->getPasswordHashed() != 0) );
|
||||
responseStream << "</li>\n";
|
||||
responseStream << "\t\t</ul>\n";
|
||||
responseStream << "\t";
|
||||
#line 95 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 96 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
if(PAGE_SHOW_EMAIL == state) { responseStream << "\n";
|
||||
responseStream << "\t\t<fieldset><legend>E-Mail</legend>\n";
|
||||
responseStream << "\t\t\t<p>An: ";
|
||||
#line 98 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
responseStream << ( user->getEmailWithNames() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t<p><label style=\"width:auto\" for=\"memo-text\">E-Mail Text:</label></p>\n";
|
||||
responseStream << "<pre>Liebe(r) ";
|
||||
#line 100 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
responseStream << ( user->getModel()->getFirstName() );
|
||||
responseStream << ",\n";
|
||||
responseStream << "\n";
|
||||
responseStream << "hier findest du deine Passphrase mit dessen Hilfe du dir ein neues Passwort einstellen kannst.\n";
|
||||
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 << "\n";
|
||||
responseStream << " \n";
|
||||
responseStream << "\n";
|
||||
responseStream << "Unter diesem Link kannst du dir mit Hilfe der Passphrase ein neues Passwort setzen:\n";
|
||||
#line 110 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.cpsp"
|
||||
responseStream << ( code->getLink() );
|
||||
responseStream << "\n";
|
||||
responseStream << " \n";
|
||||
responseStream << "\n";
|
||||
responseStream << "Liebe Grüße\n";
|
||||
responseStream << "Dario, Softwareentwickler bei Gradido\n";
|
||||
responseStream << "</pre>\n";
|
||||
responseStream << "\t\t</fieldset>\n";
|
||||
responseStream << "\t";
|
||||
#line 117 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminUserPasswordReset.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";
|
||||
responseStream << "\t\n";
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
20
login_server/src/cpp/HTTPInterface/AdminUserPasswordReset.h
Normal file
20
login_server/src/cpp/HTTPInterface/AdminUserPasswordReset.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef AdminUserPasswordReset_INCLUDED
|
||||
#define AdminUserPasswordReset_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class AdminUserPasswordReset: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
AdminUserPasswordReset(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // AdminUserPasswordReset_INCLUDED
|
||||
286
login_server/src/cpp/HTTPInterface/CheckEmailPage.cpp
Normal file
286
login_server/src/cpp/HTTPInterface/CheckEmailPage.cpp
Normal file
@ -0,0 +1,286 @@
|
||||
#include "CheckEmailPage.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\\checkEmail.cpsp"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../SingletonManager/LanguageManager.h"
|
||||
#include "../SingletonManager/EmailManager.h"
|
||||
enum PageState
|
||||
{
|
||||
MAIL_NOT_SEND,
|
||||
ASK_VERIFICATION_CODE,
|
||||
EMAIL_ACTIVATED,
|
||||
KONTO_ALREADY_EXIST
|
||||
};
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
CheckEmailPage::CheckEmailPage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void CheckEmailPage::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 19 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
|
||||
const char* pageName = "Email Verification";
|
||||
auto lm = LanguageManager::getInstance();
|
||||
auto em = EmailManager::getInstance();
|
||||
|
||||
auto lang = chooseLanguage(request);
|
||||
auto langCatalog = lm->getFreeCatalog(lang);
|
||||
unsigned long long verificationCode = 0;
|
||||
|
||||
PageState state = ASK_VERIFICATION_CODE;
|
||||
|
||||
if(mSession && model::table::EMAIL_OPT_IN_REGISTER_DIRECT == mSession->getEmailVerificationType())
|
||||
{
|
||||
state = EMAIL_ACTIVATED;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if(!form.empty()) {
|
||||
auto langBtn = form.get("lang-btn", "");
|
||||
auto verficationCodeStr = form.get("email-verification-code", "0");
|
||||
try {
|
||||
verificationCode = stoull(verficationCodeStr);
|
||||
} catch(...) {
|
||||
verificationCode = 0;
|
||||
}
|
||||
auto updatedLang = LANG_NULL;
|
||||
if(langBtn != "") {
|
||||
lang = chooseLanguage(request, langBtn);
|
||||
langCatalog = lm->getFreeCatalog(lang);
|
||||
}
|
||||
}
|
||||
|
||||
// remove old cookies if exist
|
||||
auto sm = SessionManager::getInstance();
|
||||
sm->deleteLoginCookies(request, response, mSession);
|
||||
|
||||
if(mSession) {
|
||||
getErrors(mSession);
|
||||
if(mSession->getSessionState() < SESSION_STATE_EMAIL_VERIFICATION_SEND) {
|
||||
//state = MAIL_NOT_SEND;
|
||||
}
|
||||
}
|
||||
auto hasErrors = errorCount() > 0;
|
||||
if(!verificationCode) {
|
||||
verificationCode = getLastGetAsU64(request.getURI());
|
||||
}
|
||||
}
|
||||
#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 68 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
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-title\">\n";
|
||||
responseStream << " <h1>";
|
||||
#line 72 "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 );
|
||||
responseStream << "account/checkEmail\" method=\"GET\">\n";
|
||||
responseStream << "\t";
|
||||
#line 76 "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"
|
||||
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 );
|
||||
responseStream << "\">";
|
||||
#line 78 "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"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << " <label class=\"form-label\" for=\"email-verification-code\">";
|
||||
#line 80 "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"
|
||||
responseStream << ( langCatalog->gettext("Email Verification Code"));
|
||||
responseStream << "\" ";
|
||||
#line 81 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
if(verificationCode) { responseStream << "value=\"";
|
||||
#line 81 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp"
|
||||
responseStream << ( verificationCode );
|
||||
responseStream << "\" ";
|
||||
#line 81 "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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</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";
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
20
login_server/src/cpp/HTTPInterface/CheckEmailPage.h
Normal file
20
login_server/src/cpp/HTTPInterface/CheckEmailPage.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef CheckEmailPage_INCLUDED
|
||||
#define CheckEmailPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class CheckEmailPage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
CheckEmailPage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // CheckEmailPage_INCLUDED
|
||||
533
login_server/src/cpp/HTTPInterface/CheckTransactionPage.cpp
Normal file
533
login_server/src/cpp/HTTPInterface/CheckTransactionPage.cpp
Normal file
@ -0,0 +1,533 @@
|
||||
#include "CheckTransactionPage.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\\checkTransaction.cpsp"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../SingletonManager/SingletonTaskObserver.h"
|
||||
#include "../SingletonManager/EmailManager.h"
|
||||
#include "../model/TransactionCreation.h"
|
||||
#include "../model/TransactionTransfer.h"
|
||||
|
||||
#include "Poco/Thread.h"
|
||||
|
||||
enum PageState {
|
||||
PAGE_TRANSACTION_CREATION,
|
||||
PAGE_TRANSACTION_TRANSFER,
|
||||
PAGE_NO_TRANSACTIONS,
|
||||
PAGE_USER_DATA_CORRUPTED
|
||||
};
|
||||
|
||||
|
||||
|
||||
CheckTransactionPage::CheckTransactionPage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void CheckTransactionPage::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 24 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
|
||||
const char* pageName = gettext("Überprüfe Transaktion");
|
||||
auto account_user = mSession->getNewUser();
|
||||
auto user_model = account_user->getModel();
|
||||
auto em = EmailManager::getInstance();
|
||||
auto userBalance = account_user->getBalance();
|
||||
std::string memo = "";
|
||||
bool hasErrors = false;
|
||||
bool enableLogout = true;
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
if(!form.empty()) {
|
||||
auto ok = form.get("ok", "");
|
||||
auto abort = form.get("abort", "");
|
||||
if(abort != "") {
|
||||
mSession->finalizeTransaction(false, true);
|
||||
} 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;
|
||||
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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
size_t notReadyTransactions = 0;
|
||||
size_t sumTransactions = mSession->getProcessingTransactionCount();
|
||||
if(sumTransactions == 0) {
|
||||
/*auto observer = SingletonTaskObserver::getInstance();
|
||||
auto emailHash = DRMakeStringHash(mSession->getUser()->getEmail());
|
||||
int breakCount = 0;
|
||||
while(observer->getTaskCount(emailHash, TASK_OBSERVER_SIGN_TRANSACTION) > 0) {
|
||||
if(breakCount > 100) break;
|
||||
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);
|
||||
} else {
|
||||
response.redirect(ServerConfig::g_php_serverPath + "state-balances/overview");
|
||||
}
|
||||
return;
|
||||
}
|
||||
auto processingTransaction = mSession->getNextReadyTransaction(¬ReadyTransactions);
|
||||
if(sumTransactions > 0) {
|
||||
enableLogout = false;
|
||||
}
|
||||
if(PAGE_NO_TRANSACTIONS == state && !processingTransaction.isNull()) {
|
||||
auto transactionType = processingTransaction->getType();
|
||||
switch(transactionType) {
|
||||
case TRANSACTION_CREATION: state = PAGE_TRANSACTION_CREATION; break;
|
||||
case TRANSACTION_TRANSFER: state = PAGE_TRANSACTION_TRANSFER; break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
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_navi_chr.cpsp
|
||||
responseStream << "<!DOCTYPE html>\n";
|
||||
responseStream << "<html>\n";
|
||||
responseStream << "\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 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( pageName );
|
||||
responseStream << "</title>\n";
|
||||
responseStream << " <link href=\"";
|
||||
#line 8 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
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 << ( ServerConfig::g_php_serverPath );
|
||||
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 << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/main.css\" />\n";
|
||||
responseStream << " <script src=\"";
|
||||
#line 11 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "js/basic.js\"></script>\n";
|
||||
responseStream << "</head>\n";
|
||||
responseStream << "\n";
|
||||
responseStream << "<body>\n";
|
||||
responseStream << " <div class=\"layout\">\n";
|
||||
responseStream << " <div class=\"header-notify\">\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"sidebar1 nav-menu initial\">\n";
|
||||
responseStream << " <a href=\"";
|
||||
#line 19 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
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 << ( ServerConfig::g_php_serverPath );
|
||||
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 << ( ServerConfig::g_php_serverPath );
|
||||
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 << ( ServerConfig::g_php_serverPath );
|
||||
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\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
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 << ( ServerConfig::g_php_serverPath );
|
||||
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 << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_half.png\" class=\"logo small\" alt=\"Logo\">\n";
|
||||
responseStream << " </picture>\n";
|
||||
responseStream << " </a>\n";
|
||||
responseStream << " <div>\n";
|
||||
responseStream << " <i class=\"material-icons-outlined nav-main-button\">menu</i>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"flash-messages\" onclick=\"this.classList.add('hidden')\">";
|
||||
#line 34 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( getErrorsHtmlNewFormat() );
|
||||
responseStream << "</div>\n";
|
||||
responseStream << " <div class=\"nav-vertical\">\n";
|
||||
responseStream << " <ul>\n";
|
||||
responseStream << " <li><a href=\"";
|
||||
#line 37 "F:\\Gradido\\gradido_login_server\\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\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
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\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( TransactionBase::amountToString(userBalance) );
|
||||
responseStream << " GDD )</span></a></li>\n";
|
||||
responseStream << " <li><a href=\"";
|
||||
#line 39 "F:\\Gradido\\gradido_login_server\\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 << " class=\"link-title\">Startseite</span></a></li>\n";
|
||||
responseStream << " <li class=' selected'><a href=\"";
|
||||
#line 41 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
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";
|
||||
responseStream << " title=\"Mitgliederbereich\">people_alt</i><span class=\"link-title\">Mitgliederbereich</span></a></li>\n";
|
||||
responseStream << " </ul>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
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 class='nav-content-separator'>-</li>\n";
|
||||
responseStream << " <li class='selected'><span class=\"link-title\">";
|
||||
#line 53 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_navi_chr.cpsp"
|
||||
responseStream << ( pageName );
|
||||
responseStream << "</span></li>\n";
|
||||
responseStream << " </ul>\n";
|
||||
responseStream << " </div>";
|
||||
// end include header_navi_chr.cpsp
|
||||
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 112 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(sumTransactions > 0 && sumTransactions - notReadyTransactions != 1) { responseStream << "\n";
|
||||
responseStream << "\t\t";
|
||||
#line 113 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(notReadyTransactions > 0) { responseStream << " \n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 114 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( sumTransactions - notReadyTransactions );
|
||||
responseStream << " ";
|
||||
#line 114 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("von") );
|
||||
responseStream << " ";
|
||||
#line 114 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( sumTransactions );
|
||||
responseStream << " ";
|
||||
#line 114 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Transaktionen sind bereit zum bestätigen") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t";
|
||||
#line 115 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 116 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( sumTransactions );
|
||||
responseStream << " ";
|
||||
#line 116 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Transaktionen warten darauf bestätigt zu werden.") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t";
|
||||
#line 117 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 118 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 119 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(state == PAGE_NO_TRANSACTIONS) { responseStream << "\n";
|
||||
responseStream << "\t\t";
|
||||
#line 120 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(sumTransactions == 0) { responseStream << "\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 121 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Es gibt zurzeit keine Transaktionen zum bestätigen") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t";
|
||||
#line 122 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else { responseStream << "\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 123 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Transaktion(en) werden noch vorbereitet, bitte lade die Seite in wenigen Augenblicken erneut.") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t";
|
||||
#line 124 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << " ";
|
||||
#line 125 "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 130 "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 132 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(state == PAGE_TRANSACTION_TRANSFER) {
|
||||
auto transferTransaction = processingTransaction->getTransferTransaction();
|
||||
memo = transferTransaction->getMemo();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>";
|
||||
#line 136 "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 139 "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 140 "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 142 "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 143 "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 145 "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 147 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 148 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( transferTransaction->getKontoNameCell(i) );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t";
|
||||
#line 149 "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 151 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t ";
|
||||
#line 153 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} else if(PAGE_TRANSACTION_CREATION == state) {
|
||||
auto creationTransaction = processingTransaction->getCreationTransaction();
|
||||
auto transactionUser = creationTransaction->getUser();
|
||||
memo = creationTransaction->getMemo();
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<p>";
|
||||
#line 158 "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 161 "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 162 "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 163 "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 166 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
if(transactionUser) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 167 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( transactionUser->getFirstName() );
|
||||
responseStream << " ";
|
||||
#line 167 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( transactionUser->getLastName() );
|
||||
responseStream << " <";
|
||||
#line 167 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( transactionUser->getEmail() );
|
||||
responseStream << "></span>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 168 "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 169 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( creationTransaction->getPublicHex() );
|
||||
responseStream << "</span>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 170 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<span class=\"content-cell\">";
|
||||
#line 171 "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 172 "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\t ";
|
||||
#line 175 "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 176 "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 176 "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 176 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << (gettext("Support") );
|
||||
responseStream << "</a></p>\n";
|
||||
responseStream << "\t\t\t ";
|
||||
#line 177 "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 183 "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 191 "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 195 "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 197 "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 198 "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 200 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 201 "F:\\Gradido\\gradido_login_server\\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 204 "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 206 "F:\\Gradido\\gradido_login_server\\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";
|
||||
#line 209 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkTransaction.cpsp"
|
||||
responseStream << ( gettext("Transaktion verwerfen") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t</button>\n";
|
||||
responseStream << "\t\t\t</form>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "</div>\n";
|
||||
// begin include footer_chr.cpsp
|
||||
responseStream << "</div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"footer\">\n";
|
||||
responseStream << " <ul class=\"nav-horizontal\">\n";
|
||||
responseStream << " <li><a href=\"https://gradido.net/de/datenschutz/\" target=\"_blank\">Datenschutzerklärung</a></li>\n";
|
||||
responseStream << " <li><a href=\"https://gradido.net/de/impressum/\" target=\"_blank\">Impressum</a></li>\n";
|
||||
responseStream << " </ul>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"nav-bottom\">\n";
|
||||
responseStream << " <small class=\"\">Copyright © 2020 Gradido</small>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"bottomleft\">\n";
|
||||
responseStream << " ";
|
||||
#line 13 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\footer_chr.cpsp"
|
||||
responseStream << ( mTimeProfiler.string() );
|
||||
responseStream << "\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"bottomright\">\n";
|
||||
responseStream << " <p>Community Server in Entwicklung</p>\n";
|
||||
responseStream << " <p>Alpha ";
|
||||
#line 17 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\footer_chr.cpsp"
|
||||
responseStream << ( ServerConfig::g_versionString );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << "</body>\n";
|
||||
responseStream << "\n";
|
||||
responseStream << "</html>";
|
||||
// end include footer_chr.cpsp
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
20
login_server/src/cpp/HTTPInterface/CheckTransactionPage.h
Normal file
20
login_server/src/cpp/HTTPInterface/CheckTransactionPage.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef CheckTransactionPage_INCLUDED
|
||||
#define CheckTransactionPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class CheckTransactionPage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
CheckTransactionPage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // CheckTransactionPage_INCLUDED
|
||||
151
login_server/src/cpp/HTTPInterface/ConfigPage.cpp
Normal file
151
login_server/src/cpp/HTTPInterface/ConfigPage.cpp
Normal file
@ -0,0 +1,151 @@
|
||||
#include "ConfigPage.h"
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
#include "Poco/Net/HTTPServerResponse.h"
|
||||
#include "Poco/Net/HTMLForm.h"
|
||||
#include "Poco/DeflatingStream.h"
|
||||
|
||||
|
||||
#line 4 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\config.cpsp"
|
||||
|
||||
const char* pageName = "Config";
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
void ConfigPage::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 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";
|
||||
responseStream << "<h1>Config</h1>\n";
|
||||
responseStream << "<form method=\"POST\">\n";
|
||||
responseStream << "\t<div class=\"grd_container\">\n";
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t<fieldset class=\"grd_container_small\">\n";
|
||||
responseStream << "\t\t\t<legend>Server Admin Key</legend>\n";
|
||||
responseStream << "\t\t\t<p>Möchtest du einen neuen Server Key generieren oder einen existierenden verwenden?</p>\n";
|
||||
responseStream << "\t\t\t<p>Wenn du bereits einen besitzt kopiere bitte den Merksatz dafür in die Textarea.</p>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<input id=\"server-admin-key-new-yes\" type=\"radio\" name=\"new-server-admin-key\" value=\"yes\" checked/>\n";
|
||||
responseStream << "\t\t\t\t<label for=\"server-admin-key-new-yes\">Einen neuen generieren!</label>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<input id=\"server-admin-key-new-no\" type=\"radio\" name=\"new-server-admin-key\" value=\"no\"/>\n";
|
||||
responseStream << "\t\t\t\t<label for=\"server-admin-key-new-no\">Einen existierenden verwenden!</label>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t<textarea style=\"width:100%;height:100px\" name=\"server-admin-key-existing\"></textarea>\n";
|
||||
responseStream << "\t\t</fieldset>\n";
|
||||
responseStream << "\t\t<fieldset class=\"grd_container_small\">\n";
|
||||
responseStream << "\t\t\t<legend>Login-Server (dieser Server)</legend>\n";
|
||||
responseStream << "\t\t\t<p>Bitte gebe die Daten für diesen Server an. </p>\n";
|
||||
responseStream << "\t\t\t<fieldset>\n";
|
||||
responseStream << "\t\t\t\t<legend>Datenbank</legend>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"grd-input\">\n";
|
||||
responseStream << "\t\t\t\t\t<label for=\"server-db-user\">Benutzernamen: </label>\n";
|
||||
responseStream << "\t\t\t\t\t<input id=\"server-db-user\" type=\"text\" name=\"server-db-user\" value=\"root\">\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"grd-input\">\n";
|
||||
responseStream << "\t\t\t\t\t<label for=\"server-db-pwd\">Passwort: </label>\n";
|
||||
responseStream << "\t\t\t\t\t<input id=\"server-db-pwd\" type=\"password\" name=\"server-db-pwd\" value=\"\">\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"grd-input\">\n";
|
||||
responseStream << "\t\t\t\t\t<label for=\"server-db-name\">Datenbank Name: </label>\n";
|
||||
responseStream << "\t\t\t\t\t<input id=\"server-db-name\" name=\"server-db-name\" value=\"\">\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t</fieldset>\n";
|
||||
responseStream << "\t\t\t<div class=\"grd-input\">\n";
|
||||
responseStream << "\t\t\t\t<label for=\"server-domain\">Server Name (Domain)</label>\n";
|
||||
responseStream << "\t\t\t\t<input id=\"server-domain\" name=\"server-domain\" type=\"text\">\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t</fieldset>\n";
|
||||
responseStream << "\t\t<fieldset class=\"grd_container_small\">\n";
|
||||
responseStream << "\t\t\t<legend>PHP-Server</legend>\n";
|
||||
responseStream << "\t\t\t<p>Bitte gebe hier die Daten des php-Servers an.</p>\n";
|
||||
responseStream << "\t\t\t<fieldset>\n";
|
||||
responseStream << "\t\t\t\t<legend>Datenbank</legend>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"grd-input\">\n";
|
||||
responseStream << "\t\t\t\t\t<label for=\"php-server-db-user\">Benutzernamen: </label>\n";
|
||||
responseStream << "\t\t\t\t\t<input id=\"php-server-db-user\" type=\"text\" name=\"php-server-db-user\" value=\"root\">\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"grd-input\">\n";
|
||||
responseStream << "\t\t\t\t\t<label for=\"php-server-db-pwd\">Passwort: </label>\n";
|
||||
responseStream << "\t\t\t\t\t<input id=\"php-server-db-pwd\" type=\"password\" name=\"php-server-db-pwd\" value=\"\">\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"grd-input\">\n";
|
||||
responseStream << "\t\t\t\t\t<label for=\"php-server-db-name\">Datenbank Name: </label>\n";
|
||||
responseStream << "\t\t\t\t\t<input id=\"php-server-db-name\" name=\"php-server-db-name\" value=\"\">\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t</fieldset>\n";
|
||||
responseStream << "\t\t\t<div class=\"grd-input\">\n";
|
||||
responseStream << "\t\t\t\t<label for=\"php-server-url\">PHP-Server Url (mit Port)</label>\n";
|
||||
responseStream << "\t\t\t\t<input id=\"php-server-url\" name=\"php-server-url\" type=\"text\">\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t</fieldset>\n";
|
||||
responseStream << "\t\t<input class=\"grd_bn_succeed\" type=\"submit\" name=\"submit\" value=\"Absenden\">\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "</form>\n";
|
||||
responseStream << "</body>\n";
|
||||
responseStream << "</html>\n";
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
15
login_server/src/cpp/HTTPInterface/ConfigPage.h
Normal file
15
login_server/src/cpp/HTTPInterface/ConfigPage.h
Normal file
@ -0,0 +1,15 @@
|
||||
#ifndef ConfigPage_INCLUDED
|
||||
#define ConfigPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
class ConfigPage: public Poco::Net::HTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // ConfigPage_INCLUDED
|
||||
194
login_server/src/cpp/HTTPInterface/DashboardPage.cpp
Normal file
194
login_server/src/cpp/HTTPInterface/DashboardPage.cpp
Normal file
@ -0,0 +1,194 @@
|
||||
#include "DashboardPage.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\\dashboard.cpsp"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "Poco/Net/HTTPServerParams.h"
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
DashboardPage::DashboardPage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void DashboardPage::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 11 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
|
||||
const char* pageName = "Dashboard";
|
||||
//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 + "/");
|
||||
return;
|
||||
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>Willkommen ";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
responseStream << ( mSession->getUser()->getFirstName() );
|
||||
responseStream << " ";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\dashboard.cpsp"
|
||||
responseStream << ( mSession->getUser()->getLastName() );
|
||||
responseStream << "</h1>\n";
|
||||
responseStream << "\t";
|
||||
#line 24 "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"
|
||||
responseStream << ( mSession->getSessionStateString() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t";
|
||||
#line 27 "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"
|
||||
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"
|
||||
} 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";
|
||||
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 39 "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"
|
||||
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"
|
||||
responseStream << ( uri_start );
|
||||
responseStream << "/user_delete\">Account löschen</a>\n";
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "<nav class=\"grd-left-bar expanded\" data-topbar role=\"navigation\">\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 );
|
||||
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</ul>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "</nav>\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/DashboardPage.h
Normal file
20
login_server/src/cpp/HTTPInterface/DashboardPage.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef DashboardPage_INCLUDED
|
||||
#define DashboardPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class DashboardPage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
DashboardPage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // DashboardPage_INCLUDED
|
||||
276
login_server/src/cpp/HTTPInterface/DebugMnemonicPage.cpp
Normal file
276
login_server/src/cpp/HTTPInterface/DebugMnemonicPage.cpp
Normal file
@ -0,0 +1,276 @@
|
||||
#include "DebugMnemonicPage.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\\debugMnemonic.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
#include "../Crypto/KeyPair.h"
|
||||
|
||||
struct WordChecked {
|
||||
WordChecked() : index(0), bSet(false) {};
|
||||
|
||||
int index;
|
||||
std::string word;
|
||||
std::string language;
|
||||
bool bSet;
|
||||
|
||||
std::string print()
|
||||
{
|
||||
std::string str;
|
||||
str = std::to_string(index);
|
||||
str += ": ";
|
||||
str += word;
|
||||
str += " (";
|
||||
str += language;
|
||||
str += ")";
|
||||
return str;
|
||||
}
|
||||
};
|
||||
|
||||
const char* getLanguageByMnemonicListIndex(ServerConfig::Mnemonic_Types type)
|
||||
{
|
||||
switch(type) {
|
||||
case ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER: return "de";
|
||||
case ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER_FIXED_CASES: return "de";
|
||||
case ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER: return "en";
|
||||
}
|
||||
return "unknown";
|
||||
}
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
DebugMnemonicPage::DebugMnemonicPage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void DebugMnemonicPage::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 42 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp"
|
||||
|
||||
const char* pageName = "Debug Mnemonic";
|
||||
WordChecked checkedWord;
|
||||
WordChecked checkedIndex[ServerConfig::Mnemonic_Types::MNEMONIC_MAX];
|
||||
|
||||
if(!form.empty())
|
||||
{
|
||||
if("" != form.get("check_word", ""))
|
||||
{
|
||||
auto word = KeyPair::filterPassphrase(form.get("word", ""));
|
||||
if("" != word) {
|
||||
checkedWord.bSet = true;
|
||||
checkedWord.word = word;
|
||||
|
||||
for (int i = ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER; i < ServerConfig::Mnemonic_Types::MNEMONIC_MAX; i++)
|
||||
{
|
||||
Mnemonic& m = ServerConfig::g_Mnemonic_WordLists[i];
|
||||
|
||||
if (word != "\0" && word != "" && word.size() > 3) {
|
||||
if(m.isWordExist(word)) {
|
||||
checkedWord.index = m.getWordIndex(word.data());
|
||||
checkedWord.language = getLanguageByMnemonicListIndex((ServerConfig::Mnemonic_Types)i);
|
||||
break;
|
||||
}
|
||||
}
|
||||
else {
|
||||
addError(new Error("Word", "Ungültiges Wort, es sollte länger als 3 Zeichen sein"));
|
||||
checkedWord.bSet = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if("" != form.get("check_index", ""))
|
||||
{
|
||||
try {
|
||||
auto index = stoi(form.get("index", ""));
|
||||
if(index < 0 || index >= 2048) {
|
||||
addError(new Error("Index", "Ungültiger Index, muss sich im Bereich [0:2047] bewegen"));
|
||||
} else {
|
||||
for (int i = ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER; i < ServerConfig::Mnemonic_Types::MNEMONIC_MAX; i++)
|
||||
{
|
||||
Mnemonic& m = ServerConfig::g_Mnemonic_WordLists[i];
|
||||
checkedIndex[i].bSet = true;
|
||||
checkedIndex[i].index = index;
|
||||
checkedIndex[i].word = m.getWord(index);
|
||||
checkedIndex[i].language = getLanguageByMnemonicListIndex((ServerConfig::Mnemonic_Types)i);
|
||||
}
|
||||
}
|
||||
|
||||
} catch(...) {
|
||||
addError(new Error("Index", "Ungültiger Index, keine Nummer"));
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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>Debug Mnemonic</h1>\n";
|
||||
responseStream << "\t";
|
||||
#line 104 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.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>Wort prüfen</legend>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<label for=\"word\">Word</label>\n";
|
||||
responseStream << "\t\t\t\t<input id=\"word\" type=\"text\" name=\"word\" value=\"";
|
||||
#line 110 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp"
|
||||
responseStream << ( form.get("word", "") );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t<input type=\"submit\" name=\"check_word\" value=\"Wort überprüfen\"/>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 113 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp"
|
||||
if(checkedWord.bSet) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<p>";
|
||||
#line 114 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp"
|
||||
responseStream << ( checkedWord.print() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 115 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t</fieldset>\n";
|
||||
responseStream << "\t\t<fieldset class=\"grd_container_small\">\n";
|
||||
responseStream << "\t\t\t<legend>Index prüfen</legend>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<label for=\"index\">Index</label>\n";
|
||||
responseStream << "\t\t\t\t<input id=\"index\" type=\"text\" name=\"index\" value=\"";
|
||||
#line 121 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp"
|
||||
responseStream << ( form.get("index", "") );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t<input type=\"submit\" name=\"check_index\" value=\"Index überprüfen\"/>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 124 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp"
|
||||
if(checkedIndex[0].bSet) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t<ul class=\"grd-no-style\">\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 126 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp"
|
||||
for (int i = ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER; i < ServerConfig::Mnemonic_Types::MNEMONIC_MAX; i++) { responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t<li>\n";
|
||||
responseStream << "\t\t\t\t\t";
|
||||
#line 128 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp"
|
||||
responseStream << ( checkedIndex[i].print() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t</li>\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
#line 130 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t\t\t</ul>\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 132 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugMnemonic.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t</fieldset>\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/DebugMnemonicPage.h
Normal file
20
login_server/src/cpp/HTTPInterface/DebugMnemonicPage.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef DebugMnemonicPage_INCLUDED
|
||||
#define DebugMnemonicPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class DebugMnemonicPage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
DebugMnemonicPage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // DebugMnemonicPage_INCLUDED
|
||||
221
login_server/src/cpp/HTTPInterface/DebugPassphrasePage.cpp
Normal file
221
login_server/src/cpp/HTTPInterface/DebugPassphrasePage.cpp
Normal file
@ -0,0 +1,221 @@
|
||||
#include "DebugPassphrasePage.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\\debugPassphrase.cpsp"
|
||||
|
||||
#include "../Crypto/KeyPair.h"
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
DebugPassphrasePage::DebugPassphrasePage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void DebugPassphrasePage::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\\debugPassphrase.cpsp"
|
||||
|
||||
const char* pageName = "Debug Passphrase";
|
||||
auto mm = MemoryManager::getInstance();
|
||||
KeyPair keys;
|
||||
std::string privKeyHex = "";
|
||||
std::string privKeyCryptedHex = "";
|
||||
User::passwordHashed 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)) {
|
||||
addError(new Error("debug Passphrase", "invalid passphrase"), false);
|
||||
} else {
|
||||
keys.generateFromPassphrase(passphrase.data(), 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);
|
||||
}
|
||||
}
|
||||
getErrors(newUser);
|
||||
delete newUser;
|
||||
}
|
||||
|
||||
|
||||
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>Debug Passphrase</h1>\n";
|
||||
responseStream << "\t";
|
||||
#line 53 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.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>Userdata</legend>\n";
|
||||
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"
|
||||
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"
|
||||
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 << "</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 << ( 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 << "</p>\n";
|
||||
responseStream << "\t";
|
||||
#line 78 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\debugPassphrase.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/DebugPassphrasePage.h
Normal file
20
login_server/src/cpp/HTTPInterface/DebugPassphrasePage.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef DebugPassphrasePage_INCLUDED
|
||||
#define DebugPassphrasePage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class DebugPassphrasePage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
DebugPassphrasePage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // DebugPassphrasePage_INCLUDED
|
||||
302
login_server/src/cpp/HTTPInterface/DecodeTransactionPage.cpp
Normal file
302
login_server/src/cpp/HTTPInterface/DecodeTransactionPage.cpp
Normal file
@ -0,0 +1,302 @@
|
||||
#include "DecodeTransactionPage.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\\decodeTransaction.cpsp"
|
||||
|
||||
#include "sodium.h"
|
||||
#include "../proto/gradido/TransactionBody.pb.h"
|
||||
#include "../controller/User.h"
|
||||
#include "../model/TransactionBase.h"
|
||||
#include "../model/TransactionCreation.h"
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
DecodeTransactionPage::DecodeTransactionPage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void DecodeTransactionPage::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 14 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
|
||||
const char* pageName = "Decode Transaction";
|
||||
model::messages::gradido::TransactionBody transactionBody;
|
||||
bool decoded = false;
|
||||
bool adminUser = false;
|
||||
if(mSession && mSession->getNewUser()) {
|
||||
auto user = mSession->getNewUser();
|
||||
auto model = user->getModel();
|
||||
if(model && model->getRole() == model::table::ROLE_ADMIN) {
|
||||
adminUser = true;
|
||||
}
|
||||
}
|
||||
if(!form.empty()) {
|
||||
auto base64 = form.get("transaction", "");
|
||||
if(base64 != "") {
|
||||
unsigned char* binBuffer = (unsigned char*)malloc(base64.size());
|
||||
size_t resultingBinSize = 0;
|
||||
size_t base64_size = base64.size();
|
||||
bool encodingValid = false;
|
||||
if (!sodium_base642bin(
|
||||
binBuffer, base64_size,
|
||||
base64.data(), base64_size,
|
||||
nullptr, &resultingBinSize, nullptr,
|
||||
sodium_base64_VARIANT_ORIGINAL))
|
||||
{
|
||||
encodingValid = true;
|
||||
} else if(!sodium_base642bin(
|
||||
binBuffer, base64_size,
|
||||
base64.data(), base64_size,
|
||||
nullptr, &resultingBinSize, nullptr,
|
||||
sodium_base64_VARIANT_URLSAFE_NO_PADDING)) {
|
||||
//encodingValid = true;
|
||||
//free(binBuffer);
|
||||
addError(new Error("ProcessingTransaction", "it is maybe a Transaction, but I support only TransactionBodys"), false);
|
||||
}
|
||||
if(false == encodingValid) {
|
||||
free(binBuffer);
|
||||
addError(new Error("ProcessingTransaction", "error decoding base64"), false);
|
||||
} else {
|
||||
std::string binString((char*)binBuffer, resultingBinSize);
|
||||
free(binBuffer);
|
||||
|
||||
if (!transactionBody.ParseFromString(binString)) {
|
||||
addError(new Error("ProcessingTransaction", "error creating Transaction from binary Message"), false);
|
||||
} else {
|
||||
decoded = true;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
/*
|
||||
char *sodium_bin2hex(char * const hex, const size_t hex_maxlen,
|
||||
const unsigned char * const bin, const size_t bin_len);
|
||||
*/
|
||||
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>Transaktion dekodieren</h1>\n";
|
||||
responseStream << "\t";
|
||||
#line 72 "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"
|
||||
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"
|
||||
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"
|
||||
responseStream << ( transactionBody.memo() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 83 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
if(transactionBody.has_transfer()) {
|
||||
auto transfer = transactionBody.transfer();
|
||||
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";
|
||||
#line 105 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.cpsp"
|
||||
} else if(transactionBody.has_creation()) {
|
||||
auto creation = transactionBody.creation();
|
||||
TransactionCreation creationObject("", creation);
|
||||
auto receiver = creation.receiveramount();
|
||||
char hex[65]; memset(hex, 0, 65);
|
||||
sodium_bin2hex(hex, 65, (const unsigned char*)receiver.ed25519_receiver_pubkey().data(), receiver.ed25519_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())) {
|
||||
user.assign(nullptr);
|
||||
}
|
||||
}
|
||||
//pubkey
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t<h3>Creation</h3>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 122 "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"
|
||||
responseStream << ( hex );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 124 "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"
|
||||
responseStream << ( user->getModel()->toHTMLString() );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t";
|
||||
#line 127 "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()) );
|
||||
responseStream << " GDD</p>\n";
|
||||
responseStream << "\t\t<p>target date: ";
|
||||
#line 129 "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"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 131 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\decodeTransaction.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
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
20
login_server/src/cpp/HTTPInterface/DecodeTransactionPage.h
Normal file
20
login_server/src/cpp/HTTPInterface/DecodeTransactionPage.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef DecodeTransactionPage_INCLUDED
|
||||
#define DecodeTransactionPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class DecodeTransactionPage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
DecodeTransactionPage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // DecodeTransactionPage_INCLUDED
|
||||
445
login_server/src/cpp/HTTPInterface/ElopageWebhook.cpp
Normal file
445
login_server/src/cpp/HTTPInterface/ElopageWebhook.cpp
Normal file
@ -0,0 +1,445 @@
|
||||
#include "ElopageWebhook.h"
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
#include "Poco/Net/HTTPServerResponse.h"
|
||||
#include "Poco/URI.h"
|
||||
#include "Poco/Logger.h"
|
||||
#include "Poco/Data/Binding.h"
|
||||
//#include "Poco/Data/MySQL/MySQLException.h"
|
||||
|
||||
using namespace Poco::Data::Keywords;
|
||||
|
||||
#include "../SingletonManager/ConnectionManager.h"
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
#include "../tasks/PrepareEmailTask.h"
|
||||
#include "../tasks/SendEmailTask.h"
|
||||
|
||||
#include "../controller/EmailVerificationCode.h"
|
||||
#include "../model/table/ElopageBuy.h"
|
||||
|
||||
|
||||
|
||||
|
||||
void ElopageWebhook::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response)
|
||||
{
|
||||
// simply write request to file for later lookup
|
||||
//ServerConfig::writeToFile(request.stream(), "elopage_webhook_requests.txt");
|
||||
|
||||
// empty response, we didn't need to set anything
|
||||
//response.setStatus(Poco::Net::HTTPResponse::HTTP_NO_CONTENT);
|
||||
std::ostream& _responseStream = response.send();
|
||||
_responseStream << "200 OK";
|
||||
|
||||
// don't use it anymore, register now direct
|
||||
// elopage request are only logged from gpt server
|
||||
//return;
|
||||
|
||||
std::istream& stream = request.stream();
|
||||
std::string completeRequest;
|
||||
Poco::Net::NameValueCollection elopageRequestData;
|
||||
int breakCount = 100;
|
||||
while (stream.good() && breakCount > 0) {
|
||||
// char dummy;
|
||||
//char keyBuffer[30]; memset(keyBuffer, 0, 30);
|
||||
//char valueBuffer[75]; memset(valueBuffer, 0, 75);
|
||||
std::vector<char> keyBuffer(30);
|
||||
std::vector<char> valueBuffer(75);
|
||||
/*stream.get(keyBuffer, 30, '=').get(dummy)
|
||||
.get(valueBuffer, 35, '&').get(dummy);*/
|
||||
std::string line;
|
||||
std::getline(stream, line);
|
||||
int mode = 0;
|
||||
for (int i = 0; i < line.size(); i++) {
|
||||
char c = line.at(i);
|
||||
completeRequest += c;
|
||||
if (c == '\n') break;
|
||||
if (c == '+') {
|
||||
c = ' ';
|
||||
}
|
||||
if (c == '&') {
|
||||
mode = 0;
|
||||
valueBuffer.push_back('\0');
|
||||
keyBuffer.push_back('\0');
|
||||
std::string urlDecodedValue;
|
||||
try {
|
||||
Poco::URI::decode(valueBuffer.data(), urlDecodedValue);
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
Poco::Logger& logging(Poco::Logger::get("errorLog"));
|
||||
logging.error("[ElopageWebhook::handleRequest] error decoding URI: %s, exception: %s", std::string(valueBuffer.data()), ex.displayText());
|
||||
urlDecodedValue = valueBuffer.data();
|
||||
}
|
||||
elopageRequestData.set(keyBuffer.data(), urlDecodedValue);
|
||||
valueBuffer.clear();
|
||||
keyBuffer.clear();
|
||||
continue;
|
||||
}
|
||||
switch (mode) {
|
||||
case 0: // read key
|
||||
if (c == '=') {
|
||||
mode = 1;
|
||||
continue;
|
||||
}
|
||||
keyBuffer.push_back(c);
|
||||
break;
|
||||
case 1: // read value
|
||||
valueBuffer.push_back(c);
|
||||
break;
|
||||
}
|
||||
}
|
||||
valueBuffer.push_back('\0');
|
||||
keyBuffer.push_back('\0');
|
||||
|
||||
// last key-value pair
|
||||
std::string urlDecodedValue;
|
||||
try {
|
||||
Poco::URI::decode(valueBuffer.data(), urlDecodedValue);
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
Poco::Logger& logging(Poco::Logger::get("errorLog"));
|
||||
logging.error("[ElopageWebhook::handleRequest] error decoding URI (last): %s, exception: %s", std::string(valueBuffer.data()), ex.displayText());
|
||||
urlDecodedValue = valueBuffer.data();
|
||||
}
|
||||
|
||||
if (strcmp(keyBuffer.data(), "")) {
|
||||
elopageRequestData.set(keyBuffer.data(), urlDecodedValue);
|
||||
}
|
||||
|
||||
//printf("[ElopageWebhook::handleRequest] key: %s, value: %s\n", keyBuffer, valueBuffer);
|
||||
/// elopageRequestData.set(keyBuffer, valueBuffer);
|
||||
stream.good();
|
||||
breakCount--;
|
||||
}
|
||||
|
||||
// check event type
|
||||
std::string event = elopageRequestData.get("event", "");
|
||||
if (event == "lesson.viewed") {
|
||||
printf("elopage request was lesson viewed\n");
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// write stream result also to file
|
||||
static Poco::Mutex mutex;
|
||||
Profiler timeUsed;
|
||||
mutex.lock();
|
||||
|
||||
Poco::FileOutputStream file("elopage_webhook_requests.txt", std::ios::out | std::ios::app);
|
||||
|
||||
if (!file.good()) {
|
||||
Poco::Logger& logging(Poco::Logger::get("errorLog"));
|
||||
logging.error("[ElopageWebhook::handleRequest] error creating file with name: elopage_webhook_requests.txt");
|
||||
//printf("[ElopageWebhook::handleRequest] error creating file with name: elopage_webhook_requests.txt\n");
|
||||
mutex.unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
Poco::LocalDateTime now;
|
||||
|
||||
std::string dateTimeStr = Poco::DateTimeFormatter::format(now, Poco::DateTimeFormat::ISO8601_FORMAT);
|
||||
file << dateTimeStr << std::endl;
|
||||
file << completeRequest << std::endl;
|
||||
file << std::endl;
|
||||
file.close();
|
||||
std::string timeUsedStr = timeUsed.string();
|
||||
printf("[%s] time for elopage request write to file: %s\n", dateTimeStr.data(), timeUsedStr.data());
|
||||
mutex.unlock();
|
||||
|
||||
|
||||
UniLib::controller::TaskPtr handleElopageTask(new HandleElopageRequestTask(elopageRequestData));
|
||||
handleElopageTask->scheduleTask(handleElopageTask);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// ****************************************************************************
|
||||
HandleElopageRequestTask::HandleElopageRequestTask(Poco::Net::NameValueCollection& requestData)
|
||||
: CPUTask(ServerConfig::g_CPUScheduler), mRequestData(requestData)
|
||||
{
|
||||
#ifdef _UNI_LIB_DEBUG
|
||||
setName(mRequestData.get("order_id", "").data());
|
||||
#endif
|
||||
}
|
||||
|
||||
bool HandleElopageRequestTask::validateInput()
|
||||
{
|
||||
auto sm = SessionManager::getInstance();
|
||||
if (mEmail == "" || !sm->isValid(mEmail, VALIDATE_EMAIL)) {
|
||||
addError(new Error(__FUNCTION__, "email is invalid or empty"));
|
||||
return false;
|
||||
}
|
||||
if (mFirstName == "" || !sm->isValid(mFirstName, VALIDATE_NAME)) {
|
||||
addError(new Error(__FUNCTION__, "first name is invalid or empty"));
|
||||
return false;
|
||||
}
|
||||
|
||||
if (mLastName == "" || !sm->isValid(mLastName, VALIDATE_NAME)) {
|
||||
addError(new Error(__FUNCTION__, "last name is invalid or empty"));
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
void HandleElopageRequestTask::writeUserIntoDB()
|
||||
{
|
||||
printf("HandleElopageRequestTask::writeUserIntoDB\n");
|
||||
auto cm = ConnectionManager::getInstance();
|
||||
auto session = cm->getConnection(CONNECTION_MYSQL_LOGIN_SERVER);
|
||||
Poco::Data::Statement insert(session);
|
||||
insert << "INSERT INTO users (email, first_name, last_name) VALUES(?, ?, ?);",
|
||||
use(mEmail), use(mFirstName), use(mLastName);
|
||||
try {
|
||||
insert.execute();
|
||||
//printf("user written into db\n");
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
addError(new ParamError(__FUNCTION__, "mysql error", ex.displayText().data()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
int HandleElopageRequestTask::getUserIdFromDB(bool checkEmail /* = false*/)
|
||||
{
|
||||
auto cm = ConnectionManager::getInstance();
|
||||
auto session = cm->getConnection(CONNECTION_MYSQL_LOGIN_SERVER);
|
||||
Poco::Data::Statement select(session);
|
||||
std::vector<int> user_ids;
|
||||
std::vector<bool> email_checked;
|
||||
if (checkEmail) {
|
||||
select << "SELECT id, email_checked from users where email = ?;",
|
||||
into(user_ids), into(email_checked), use(mEmail);
|
||||
}
|
||||
else {
|
||||
select << "SELECT id from users where email = ?;",
|
||||
into(user_ids), use(mEmail);
|
||||
}
|
||||
try {
|
||||
select.execute();
|
||||
}
|
||||
catch (Poco::Data::ConnectionFailedException& ex) {
|
||||
addError(new ParamError(__FUNCTION__, "[ConnectionFailedException] mysql error selecting from db", ex.displayText().data()));
|
||||
addError(new ParamError(__FUNCTION__, "email: ", mEmail.data()));
|
||||
}
|
||||
catch (Poco::Data::NotConnectedException& ex) {
|
||||
addError(new ParamError(__FUNCTION__, "[NotConnectedException] mysql error selecting from db", ex.displayText().data()));
|
||||
addError(new ParamError(__FUNCTION__, "email: ", mEmail.data()));
|
||||
}
|
||||
catch (Poco::Exception& ex) {
|
||||
addError(new ParamError(__FUNCTION__, "mysql error selecting from db", ex.displayText().data()));
|
||||
addError(new ParamError(__FUNCTION__, "email: ", mEmail.data()));
|
||||
}
|
||||
if (user_ids.size() > 1) {
|
||||
std::string duplicateIds("duplicate user ids for email: ");
|
||||
duplicateIds += mEmail;
|
||||
duplicateIds += ": ";
|
||||
for (int i = 0; i < user_ids.size(); i++) {
|
||||
if (i > 0) {
|
||||
duplicateIds += ", ";
|
||||
}
|
||||
duplicateIds += std::to_string(user_ids[i]);
|
||||
}
|
||||
addError(new Error("HandleElopageRequestTask::getUserIdFromDB", duplicateIds.data()));
|
||||
sendErrorsAsEmail();
|
||||
}
|
||||
if (user_ids.size() >= 1) {
|
||||
if (email_checked.size() >= 1 && email_checked[0]) {
|
||||
addError(new Error("HandleElopageRequestTask::getUserIdFromDB", "user account already activated"));
|
||||
return 0;
|
||||
}
|
||||
return user_ids[0];
|
||||
}
|
||||
return 0;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
int HandleElopageRequestTask::run()
|
||||
{
|
||||
// get input data
|
||||
// check event type
|
||||
std::string event = mRequestData.get("event", "");
|
||||
if (event == "lesson.viewed" || event == "lesson.completed" || event == "lesson.commented") {
|
||||
return 0;
|
||||
}
|
||||
|
||||
// elopage buy
|
||||
Poco::AutoPtr<model::table::ElopageBuy> elopageBuy(new model::table::ElopageBuy(mRequestData));
|
||||
if (elopageBuy->errorCount() > 0) {
|
||||
getErrors(elopageBuy);
|
||||
}
|
||||
UniLib::controller::TaskPtr saveElopageBuy(new model::table::ModelInsertTask(elopageBuy, false));
|
||||
saveElopageBuy->scheduleTask(saveElopageBuy);
|
||||
|
||||
// check product id
|
||||
Poco::UInt64 product_id = 0;
|
||||
try {
|
||||
product_id = stoull(mRequestData.get("product[id]", "0"));
|
||||
}
|
||||
catch (const std::invalid_argument& ia) {
|
||||
std::cerr << __FUNCTION__ << "Invalid argument: " << ia.what() << '\n';
|
||||
}
|
||||
catch (const std::out_of_range& oor) {
|
||||
std::cerr << __FUNCTION__ << "Out of Range error: " << oor.what() << '\n';
|
||||
}
|
||||
catch (const std::logic_error & ler) {
|
||||
std::cerr << __FUNCTION__ << "Logical error: " << ler.what() << '\n';
|
||||
}
|
||||
catch (...) {
|
||||
std::cerr << __FUNCTION__ << "Unknown error" << '\n';
|
||||
}
|
||||
std::string order_id = mRequestData.get("order_id", "");
|
||||
auto param_error_order_id = new ParamError("HandleElopageRequestTask", "order_id", order_id.data());
|
||||
|
||||
/*!
|
||||
*
|
||||
|
||||
Registrierung – Schritt 1 von 3, 36001
|
||||
Gradido-Basis, 43741
|
||||
Premium-Mitgliedschaft, 43870
|
||||
Gold-Mitgliedschaft, 43944
|
||||
Business-Mitgliedschaft, 43960
|
||||
Förderbeitrag: 49106
|
||||
|
||||
*
|
||||
*/
|
||||
static const int valid_product_ids[] = { 36001, 43741, 43870, 43944, 43960, 49106 };
|
||||
bool valid_product_id = false;
|
||||
for (int i = 0; i < sizeof(valid_product_ids) / sizeof(int); i++) {
|
||||
if (valid_product_ids[i] == product_id) {
|
||||
valid_product_id = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
// only for product 36001 and 43741 create user accounts and send emails
|
||||
if (valid_product_id) {
|
||||
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);
|
||||
|
||||
/* printf("LastName: %s\n", mLastName.data());
|
||||
for (int i = 0; i < mLastName.size(); i++) {
|
||||
char c = mLastName.data()[i];
|
||||
printf("%d ", c);
|
||||
}
|
||||
printf("\n\n");
|
||||
*/
|
||||
|
||||
// validate input
|
||||
if (!validateInput()) {
|
||||
// if input is invalid we can stop now
|
||||
addError(param_error_order_id);
|
||||
sendErrorsAsEmail();
|
||||
return -1;
|
||||
}
|
||||
|
||||
// if user exist we can stop now
|
||||
if (getUserIdFromDB()) {
|
||||
//addError(param_error_order_id);
|
||||
//sendErrorsAsEmail();
|
||||
return -2;
|
||||
}
|
||||
|
||||
// if user with this email didn't exist
|
||||
// we can create a new user and send a email to him
|
||||
|
||||
// prepare email in advance
|
||||
// create connection to email server
|
||||
// UniLib::controller::TaskPtr prepareEmail(new PrepareEmailTask(ServerConfig::g_CPUScheduler));
|
||||
// prepareEmail->scheduleTask(prepareEmail);
|
||||
|
||||
// write user entry into db
|
||||
writeUserIntoDB();
|
||||
|
||||
// get user id from db
|
||||
int user_id = getUserIdFromDB(true);
|
||||
// we didn't get a user_id, something went wrong
|
||||
// maybe user already exist
|
||||
if (!user_id) {
|
||||
addError(new Error("User loadEntryDBId", "user_id is zero"));
|
||||
addError(param_error_order_id);
|
||||
sendErrorsAsEmail();
|
||||
return -3;
|
||||
}
|
||||
|
||||
// email verification code
|
||||
auto emailVerification = controller::EmailVerificationCode::create(user_id, model::table::EMAIL_OPT_IN_REGISTER_DIRECT);
|
||||
//Poco::AutoPtr<model::table::EmailOptIn> emailVerification(new model::table::EmailOptIn(user_id));
|
||||
|
||||
// create email verification code
|
||||
if (!emailVerification->getModel()->getCode()) {
|
||||
// exit if email verification code is empty
|
||||
addError(new Error("Email verification", "code is empty, error in random?"));
|
||||
addError(param_error_order_id);
|
||||
sendErrorsAsEmail();
|
||||
return -4;
|
||||
}
|
||||
|
||||
// write email verification code into db
|
||||
UniLib::controller::TaskPtr saveEmailVerificationCode(new model::table::ModelInsertTask(emailVerification->getModel(), true));
|
||||
saveEmailVerificationCode->scheduleTask(saveEmailVerificationCode);
|
||||
int noEMail = 0;
|
||||
|
||||
std::string noEmailString = mRequestData.get("noEmail", "0");
|
||||
try {
|
||||
noEMail = stoi(noEmailString);
|
||||
}
|
||||
catch (const std::invalid_argument& ia) {
|
||||
std::cerr << __FUNCTION__ << " Invalid argument: " << ia.what() << ", str: " << noEmailString << '\n';
|
||||
}
|
||||
catch (const std::out_of_range& oor) {
|
||||
std::cerr << __FUNCTION__ << " Out of Range error: " << oor.what() << '\n';
|
||||
}
|
||||
catch (const std::logic_error & ler) {
|
||||
std::cerr << __FUNCTION__ << " Logical error: " << ler.what() << '\n';
|
||||
}
|
||||
catch (...) {
|
||||
std::cerr << __FUNCTION__ << " Unknown error" << '\n';
|
||||
}
|
||||
|
||||
if (noEMail != 1) {
|
||||
|
||||
// send email to user
|
||||
/*auto message = new Poco::Net::MailMessage;
|
||||
|
||||
message->addRecipient(Poco::Net::MailRecipient(Poco::Net::MailRecipient::PRIMARY_RECIPIENT, mEmail));
|
||||
message->setSubject("Gradido: E-Mail Verification");
|
||||
std::stringstream ss;
|
||||
ss << "Hallo " << mFirstName << " " << mLastName << "," << std::endl << std::endl;
|
||||
ss << "Du oder jemand anderes hat sich soeben mit dieser E-Mail Adresse bei Gradido registriert. " << std::endl;
|
||||
ss << "Wenn du es warst, klicke bitte auf den Link: " << ServerConfig::g_serverPath << "/checkEmail/" << emailVerification->getModel()->getCode() << std::endl;
|
||||
//ss << "oder kopiere den Code: " << mEmailVerificationCode << " selbst dort hinein." << std::endl;
|
||||
ss << "oder kopiere den obigen Link in Dein Browserfenster." << std::endl;
|
||||
ss << std::endl;
|
||||
|
||||
ss << "Mit freundlichen " << u8"Grüßen" << std::endl;
|
||||
ss << "Dario, Gradido Server Admin" << std::endl;
|
||||
|
||||
message->addContent(new Poco::Net::StringPartSource(ss.str()));
|
||||
*/
|
||||
//UniLib::controller::TaskPtr sendEmail(new SendEmailTask(message, ServerConfig::g_CPUScheduler, 1));
|
||||
//Email(AutoPtr<controller::EmailVerificationCode> emailVerification, AutoPtr<controller::User> user, EmailType type);
|
||||
UniLib::controller::TaskPtr sendEmail(new SendEmailTask(new model::Email(emailVerification, newUser, model::EMAIL_USER_VERIFICATION_CODE), ServerConfig::g_CPUScheduler, 1));
|
||||
//sendEmail->setParentTaskPtrInArray(prepareEmail, 0);
|
||||
sendEmail->setParentTaskPtrInArray(saveEmailVerificationCode, 0);
|
||||
sendEmail->scheduleTask(sendEmail);
|
||||
}
|
||||
}
|
||||
|
||||
// if errors occured, send via email
|
||||
if (errorCount() > 1) {
|
||||
addError(param_error_order_id);
|
||||
sendErrorsAsEmail();
|
||||
}
|
||||
else {
|
||||
delete param_error_order_id;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
40
login_server/src/cpp/HTTPInterface/ElopageWebhook.h
Normal file
40
login_server/src/cpp/HTTPInterface/ElopageWebhook.h
Normal file
@ -0,0 +1,40 @@
|
||||
#ifndef Elopage_Webhook_INCLUDED
|
||||
#define Elopage_Webhook_INCLUDED
|
||||
|
||||
|
||||
#include "PageRequestMessagedHandler.h"
|
||||
#include "../tasks/CPUTask.h"
|
||||
#include "../lib/ErrorList.h"
|
||||
|
||||
#include "Poco/Net/NameValueCollection.h"
|
||||
|
||||
class ElopageWebhook : public PageRequestMessagedHandler
|
||||
{
|
||||
public:
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
class HandleElopageRequestTask : public UniLib::controller::CPUTask, protected ErrorList
|
||||
{
|
||||
public:
|
||||
HandleElopageRequestTask(Poco::Net::NameValueCollection& requestData);
|
||||
|
||||
|
||||
const char* getResourceType() const { return "HandleElopageRequestTask"; };
|
||||
int run();
|
||||
|
||||
protected:
|
||||
|
||||
// return true if at least one entry in db with this email exist
|
||||
bool validateInput();
|
||||
void writeUserIntoDB();
|
||||
int getUserIdFromDB(bool checkEmail = false);
|
||||
|
||||
Poco::Net::NameValueCollection mRequestData;
|
||||
std::string mEmail;
|
||||
std::string mFirstName;
|
||||
std::string mLastName;
|
||||
};
|
||||
|
||||
|
||||
#endif // Elopage_Webhook_INCLUDED
|
||||
67
login_server/src/cpp/HTTPInterface/ElopageWebhookLight.cpp
Normal file
67
login_server/src/cpp/HTTPInterface/ElopageWebhookLight.cpp
Normal file
@ -0,0 +1,67 @@
|
||||
#include "ElopageWebhookLight.h"
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
#include "Poco/Net/HTTPServerResponse.h"
|
||||
#include "Poco/URI.h"
|
||||
#include "Poco/Logger.h"
|
||||
#include "Poco/Data/Binding.h"
|
||||
#include "Poco/FileStream.h"
|
||||
|
||||
|
||||
|
||||
|
||||
void ElopageWebhookLight::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response)
|
||||
{
|
||||
// simply write request to file for later lookup
|
||||
//ServerConfig::writeToFile(request.stream(), "elopage_webhook_requests.txt");
|
||||
|
||||
// empty response, we didn't need to set anything
|
||||
//response.setStatus(Poco::Net::HTTPResponse::HTTP_NO_CONTENT);
|
||||
std::ostream& _responseStream = response.send();
|
||||
_responseStream << "200 OK";
|
||||
|
||||
// don't use it anymore, register now direct
|
||||
// elopage request are only logged from gpt server
|
||||
return;
|
||||
|
||||
std::istream& stream = request.stream();
|
||||
std::string completeRequest;
|
||||
Poco::Net::NameValueCollection elopageRequestData;
|
||||
int breakCount = 100;
|
||||
while (stream.good() && breakCount > 0) {
|
||||
// char dummy;
|
||||
std::string line;
|
||||
std::getline(stream, line);
|
||||
completeRequest += line;
|
||||
|
||||
stream.good();
|
||||
breakCount--;
|
||||
}
|
||||
|
||||
// write stream result also to file
|
||||
static Poco::Mutex mutex;
|
||||
Profiler timeUsed;
|
||||
mutex.lock();
|
||||
|
||||
Poco::FileOutputStream file("elopage_webhook_requests_2.txt", std::ios::out | std::ios::app);
|
||||
|
||||
if (!file.good()) {
|
||||
Poco::Logger& logging(Poco::Logger::get("errorLog"));
|
||||
logging.error("[ElopageWebhookLight::handleRequest] error creating file with name: elopage_webhook_requests_2.txt");
|
||||
//printf("[ElopageWebhook::handleRequest] error creating file with name: elopage_webhook_requests.txt\n");
|
||||
mutex.unlock();
|
||||
return;
|
||||
}
|
||||
|
||||
Poco::LocalDateTime now;
|
||||
|
||||
std::string dateTimeStr = Poco::DateTimeFormatter::format(now, Poco::DateTimeFormat::ISO8601_FORMAT);
|
||||
file << dateTimeStr << std::endl;
|
||||
file << completeRequest << std::endl;
|
||||
file << std::endl;
|
||||
file.close();
|
||||
std::string timeUsedStr = timeUsed.string();
|
||||
printf("[%s] time for elopage request light write to file and maybe wait on lock: %s\n", dateTimeStr.data(), timeUsedStr.data());
|
||||
mutex.unlock();
|
||||
|
||||
}
|
||||
|
||||
16
login_server/src/cpp/HTTPInterface/ElopageWebhookLight.h
Normal file
16
login_server/src/cpp/HTTPInterface/ElopageWebhookLight.h
Normal file
@ -0,0 +1,16 @@
|
||||
#ifndef Elopage_Webhook_LIGHT_INCLUDED
|
||||
#define Elopage_Webhook_LIGHT_INCLUDED
|
||||
|
||||
|
||||
#include "PageRequestMessagedHandler.h"
|
||||
|
||||
|
||||
class ElopageWebhookLight : public PageRequestMessagedHandler
|
||||
{
|
||||
public:
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
|
||||
#endif // Elopage_Webhook_LIGHT_INCLUDED
|
||||
155
login_server/src/cpp/HTTPInterface/Error500Page.cpp
Normal file
155
login_server/src/cpp/HTTPInterface/Error500Page.cpp
Normal file
@ -0,0 +1,155 @@
|
||||
#include "Error500Page.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\\Error500.cpsp"
|
||||
|
||||
#include <Poco/Net/HTTPResponse.h>
|
||||
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
Error500Page::Error500Page(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void Error500Page::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());
|
||||
std::ostream& _responseStream = response.send();
|
||||
Poco::DeflatingOutputStream _gzipStream(_responseStream, Poco::DeflatingStreamBuf::STREAM_GZIP, 1);
|
||||
std::ostream& responseStream = _compressResponse ? _gzipStream : _responseStream;
|
||||
responseStream << "\n";
|
||||
#line 10 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\Error500.cpsp"
|
||||
|
||||
const char* pageName = "Error";
|
||||
response.setStatusAndReason(Poco::Net::HTTPResponse::HTTP_INTERNAL_SERVER_ERROR);
|
||||
Poco::AutoPtr<User> user;
|
||||
if(mSession) {
|
||||
auto user = mSession->getUser();
|
||||
}
|
||||
// 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<h2>Ein Fehler auf dem Server trat ein, der Admin bekam eine E-Mail.</h2>\n";
|
||||
responseStream << "\t";
|
||||
#line 20 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\Error500.cpsp"
|
||||
if(mSession) { responseStream << "\n";
|
||||
responseStream << "\t\t";
|
||||
#line 21 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\Error500.cpsp"
|
||||
responseStream << ( mSession->getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 22 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\Error500.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\Error500.cpsp"
|
||||
if(!user.isNull()) { responseStream << "\n";
|
||||
responseStream << "\t\t";
|
||||
#line 24 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\Error500.cpsp"
|
||||
responseStream << ( user->getErrorsHtml() );
|
||||
responseStream << " \n";
|
||||
responseStream << "\t";
|
||||
#line 25 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\Error500.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/Error500Page.h
Normal file
20
login_server/src/cpp/HTTPInterface/Error500Page.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef Error500Page_INCLUDED
|
||||
#define Error500Page_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class Error500Page: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
Error500Page(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // Error500Page_INCLUDED
|
||||
48
login_server/src/cpp/HTTPInterface/HandleFileRequest.cpp
Normal file
48
login_server/src/cpp/HTTPInterface/HandleFileRequest.cpp
Normal file
@ -0,0 +1,48 @@
|
||||
#include "HandleFileRequest.h"
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
#include "Poco/Net/HTTPServerResponse.h"
|
||||
#include "Poco/DeflatingStream.h"
|
||||
#include "Poco/FileStream.h"
|
||||
|
||||
void HandleFileRequest::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response)
|
||||
{
|
||||
response.setChunkedTransferEncoding(true);
|
||||
|
||||
std::string uri = request.getURI();
|
||||
// check endung
|
||||
size_t last_point = uri.find_last_of('.');
|
||||
std::string endung = uri.substr(last_point+1);
|
||||
|
||||
std::string mediaType;
|
||||
|
||||
//printf("endung: %s\n", endung.data());
|
||||
if (endung == "css") {
|
||||
mediaType = "text/css";
|
||||
}
|
||||
else if (endung == "js") {
|
||||
mediaType = "text/javascript";
|
||||
}
|
||||
else if (endung == "ico") {
|
||||
mediaType = "image/x-icon";
|
||||
}
|
||||
std::string path = "data" + uri;
|
||||
printf("file path: %s\n", path.data());
|
||||
try {
|
||||
response.sendFile(path, mediaType);
|
||||
}
|
||||
catch (...) {
|
||||
std::ostream& _responseStream = response.send();
|
||||
_responseStream << "Error, file not found";
|
||||
|
||||
}
|
||||
/*
|
||||
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;
|
||||
responseStream << new Poco::FileInputStream("./data/" + uri);
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
*/
|
||||
}
|
||||
18
login_server/src/cpp/HTTPInterface/HandleFileRequest.h
Normal file
18
login_server/src/cpp/HTTPInterface/HandleFileRequest.h
Normal file
@ -0,0 +1,18 @@
|
||||
#ifndef HandleFileRequest_INCLUDED
|
||||
#define HandleFileRequest_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
class HandleFileRequest : public Poco::Net::HTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
|
||||
protected:
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // HandleFileRequest_INCLUDED
|
||||
357
login_server/src/cpp/HTTPInterface/LoginPage.cpp
Normal file
357
login_server/src/cpp/HTTPInterface/LoginPage.cpp
Normal file
@ -0,0 +1,357 @@
|
||||
#include "LoginPage.h"
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
#include "Poco/Net/HTTPServerResponse.h"
|
||||
#include "Poco/Net/HTMLForm.h"
|
||||
#include "Poco/DeflatingStream.h"
|
||||
|
||||
|
||||
#line 7 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
|
||||
#include "../gettext.h"
|
||||
|
||||
#include "Poco/Net/HTTPCookie.h"
|
||||
#include "Poco/Net/HTTPServerParams.h"
|
||||
#include "Poco/Logger.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../SingletonManager/LanguageManager.h"
|
||||
#include "../SingletonManager/ErrorManager.h"
|
||||
|
||||
#line 1 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
LoginPage::LoginPage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void LoginPage::handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response)
|
||||
{
|
||||
response.setChunkedTransferEncoding(true);
|
||||
response.setContentType("text/html");
|
||||
bool _compressResponse(request.hasToken("Accept-Encoding", "gzip"));
|
||||
if (_compressResponse) response.set("Content-Encoding", "gzip");
|
||||
|
||||
Poco::Net::HTMLForm form(request, request.stream());
|
||||
#line 18 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
|
||||
const char* pageName = "Login";
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto lm = LanguageManager::getInstance();
|
||||
auto em = ErrorManager::getInstance();
|
||||
|
||||
auto lang = chooseLanguage(request);
|
||||
//printf("choose language return: %d\n", lang);
|
||||
auto langCatalog = lm->getFreeCatalog(lang);
|
||||
|
||||
std::string presetEmail("");
|
||||
if(mSession && mSession->getUser()) {
|
||||
presetEmail = mSession->getUser()->getEmail();
|
||||
}
|
||||
|
||||
if(!form.empty()) {
|
||||
|
||||
bool langUpdatedByBtn = false;
|
||||
auto langBtn = form.get("lang", "");
|
||||
if(langBtn != "") {
|
||||
langUpdatedByBtn = true;
|
||||
}
|
||||
/*
|
||||
auto langInput = form.get("lang", "");
|
||||
auto updatedLang = LANG_NULL;
|
||||
if(langBtn != "") {
|
||||
updatedLang = chooseLanguage(request, langBtn);
|
||||
langUpdatedByBtn = true;
|
||||
} else if(langInput != "") {
|
||||
updatedLang = chooseLanguage(request, langInput);
|
||||
}
|
||||
|
||||
if(updatedLang != LANG_NULL && updatedLang != lang) {
|
||||
lang = updatedLang;
|
||||
langCatalog = lm->getFreeCatalog(lang);
|
||||
}
|
||||
*/
|
||||
auto email = form.get("login-email", "");
|
||||
auto password = form.get("login-password", "");
|
||||
|
||||
if(email != "" && password != "") {
|
||||
//auto session = sm->getSession(request);
|
||||
//if(!mSession) mSession = sm->findByEmail(email);
|
||||
if(!mSession) {
|
||||
mSession = sm->getNewSession();
|
||||
mSession->setLanguageCatalog(langCatalog);
|
||||
// get language
|
||||
// first check url, second check language header
|
||||
// for debugging client ip
|
||||
auto client_ip = request.clientAddress();
|
||||
std::string clientIpString = "client ip: ";
|
||||
clientIpString += client_ip.toString();
|
||||
Poco::Logger::get("requestLog").information(clientIpString);
|
||||
// debugging end
|
||||
auto user_host = request.clientAddress().host();
|
||||
mSession->setClientIp(user_host);
|
||||
response.addCookie(mSession->getLoginCookie());
|
||||
} else {
|
||||
langCatalog = mSession->getLanguageCatalog();
|
||||
}
|
||||
UserStates user_state;
|
||||
try {
|
||||
user_state = mSession->loadUser(email, password);
|
||||
} catch (Poco::Exception& ex) {
|
||||
addError(new ParamError("login", "exception by calling loadUser: ", ex.displayText()));
|
||||
sendErrorsAsEmail();
|
||||
addError(new Error("Error", "Intern Server error, please try again later"));
|
||||
}
|
||||
auto user = mSession->getNewUser();
|
||||
|
||||
if(user_state >= USER_LOADED_FROM_DB && !user->getModel()->getPublicKey()) {
|
||||
if(mSession->generateKeys(true, true)) {
|
||||
user_state = USER_COMPLETE;
|
||||
if(user->getModel()->isDisabled()) {
|
||||
user_state = USER_DISABLED;
|
||||
}
|
||||
}
|
||||
} else {
|
||||
//printf("pubkey exist: %p\n",user->getModel()->getPublicKey());
|
||||
}
|
||||
getErrors(mSession);
|
||||
|
||||
auto uri_start = request.serverParams().getServerName();
|
||||
auto lastExternReferer = mSession->getLastReferer();
|
||||
|
||||
printf("user_state: %d\n", user_state);
|
||||
|
||||
switch(user_state) {
|
||||
case USER_EMPTY:
|
||||
case USER_PASSWORD_INCORRECT:
|
||||
addError(new Error(langCatalog->gettext("Login"), langCatalog->gettext("E-Mail or password isn't right, please try again!")), false);
|
||||
break;
|
||||
case USER_PASSWORD_ENCRYPTION_IN_PROCESS:
|
||||
addError(new Error(langCatalog->gettext("Passwort"), langCatalog->gettext("Passwort wird noch berechnet, bitte versuche es in etwa 1 Minute erneut.")), false);
|
||||
break;
|
||||
case USER_KEYS_DONT_MATCH:
|
||||
addError(new Error(langCatalog->gettext("User"), langCatalog->gettext("Error in saved data, the server admin will look at it.")));
|
||||
break;
|
||||
case USER_DISABLED:
|
||||
addError(new Error(langCatalog->gettext("User"), langCatalog->gettext("Benutzer ist deaktiviert, kein Login möglich!")));
|
||||
if(mSession) {
|
||||
getErrors(mSession);
|
||||
sm->releaseSession(mSession);
|
||||
}
|
||||
sm->deleteLoginCookies(request, response);
|
||||
break;
|
||||
case USER_NO_PRIVATE_KEY:
|
||||
case USER_COMPLETE:
|
||||
case USER_EMAIL_NOT_ACTIVATED:
|
||||
auto referer = request.find("Referer");
|
||||
std::string refererString;
|
||||
if (referer != request.end()) {
|
||||
refererString = referer->second;
|
||||
}
|
||||
if(lastExternReferer != "") {
|
||||
//printf("redirect to: %s\n", lastExternReferer.data());
|
||||
response.redirect(lastExternReferer);
|
||||
} else if(refererString != "" &&
|
||||
refererString.find("login") == std::string::npos &&
|
||||
refererString.find("logout") == std::string::npos &&
|
||||
refererString.find("user_delete") == std::string::npos &&
|
||||
refererString != ServerConfig::g_serverPath + request.getURI()) {
|
||||
std::string uri = request.getURI();
|
||||
printf("request uri: %s, redirect to: %s\n", uri.data(), refererString.data());
|
||||
response.redirect(refererString);
|
||||
} else {
|
||||
//printf("redirect to: %s\n", ServerConfig::g_php_serverPath.data());
|
||||
response.redirect(ServerConfig::g_php_serverPath + "/");
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
} else if(!langUpdatedByBtn) {
|
||||
addError(new Error(langCatalog->gettext("Login"), langCatalog->gettext("Username and password are needed!")), false);
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
// on enter login page with empty form
|
||||
//auto session = sm->getSession(request);
|
||||
// remove old cookies and session if exist
|
||||
if(mSession) {
|
||||
getErrors(mSession);
|
||||
sm->releaseSession(mSession);
|
||||
}
|
||||
sm->deleteLoginCookies(request, response);
|
||||
}
|
||||
|
||||
#line 3 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
|
||||
bool withMaterialIcons = false;
|
||||
std::ostream& _responseStream = response.send();
|
||||
Poco::DeflatingOutputStream _gzipStream(_responseStream, Poco::DeflatingStreamBuf::STREAM_GZIP, 1);
|
||||
std::ostream& responseStream = _compressResponse ? _gzipStream : _responseStream;
|
||||
responseStream << "\n";
|
||||
// begin include header.cpsp
|
||||
responseStream << "\n";
|
||||
responseStream << "<!DOCTYPE html>\n";
|
||||
responseStream << "<html>\n";
|
||||
responseStream << "<head>\n";
|
||||
responseStream << "<meta charset=\"UTF-8\">\n";
|
||||
responseStream << "<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n";
|
||||
responseStream << "<title>Gradido Login Server: ";
|
||||
#line 11 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( pageName );
|
||||
responseStream << "</title>\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 12 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/main.css\">\n";
|
||||
#line 13 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
if(withMaterialIcons) { responseStream << "\n";
|
||||
responseStream << "<link rel=\"stylesheet\" type=\"text/css\" href=\"";
|
||||
#line 14 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "css/materialdesignicons.min.css\">\n";
|
||||
#line 15 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "</head>\n";
|
||||
responseStream << "<body>\n";
|
||||
responseStream << " <div class=\"layout\">\n";
|
||||
responseStream << " <div class=\"center-form-single\">\n";
|
||||
responseStream << " <div class=\"center-form-header\">\n";
|
||||
responseStream << " <a href=\"";
|
||||
#line 21 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "\" class=\"center-logo\">\n";
|
||||
responseStream << " <picture>\n";
|
||||
responseStream << " <source srcset=\"";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_schrift.webp\" type=\"image/webp\">\n";
|
||||
responseStream << " <source srcset=\"";
|
||||
#line 24 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_schrift.png\" type=\"image/png\">\n";
|
||||
responseStream << " <img src=\"";
|
||||
#line 25 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_schrift.png\" alt=\"logo\" />\n";
|
||||
responseStream << " </picture>\n";
|
||||
responseStream << " </a>\n";
|
||||
responseStream << " </div>";
|
||||
// end include header.cpsp
|
||||
responseStream << "\n";
|
||||
#line 167 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "<!--<input type=\"hidden\" name=\"lang\" value=\"";
|
||||
#line 168 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( LanguageManager::keyForLanguage(lang) );
|
||||
responseStream << "\">-->\n";
|
||||
responseStream << "<div class=\"center-form-container\">\n";
|
||||
responseStream << " ";
|
||||
// begin include flags.cpsp
|
||||
responseStream << "<div class=\"center-form-selectors\">\n";
|
||||
responseStream << "<form method=\"GET\" action=\"\">\n";
|
||||
responseStream << "\t<button id=\"flag-england\" name=\"lang\" value=\"en\" title=\"English\" type=\"submit\" ";
|
||||
#line 3 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\flags.cpsp"
|
||||
if(lang != LANG_EN) { responseStream << "class=\"flag-btn\"";
|
||||
#line 3 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\flags.cpsp"
|
||||
}
|
||||
else { responseStream << "class=\"flag-btn\" disabled";
|
||||
#line 4 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\flags.cpsp"
|
||||
} responseStream << ">\n";
|
||||
responseStream << "\t <span class=\"flag flag-england\"></span>\n";
|
||||
responseStream << "\t</button>\n";
|
||||
responseStream << "\t<button id=\"flag-germany\" name=\"lang\" value=\"de\" title=\"Deutsch\" type=\"submit\" ";
|
||||
#line 7 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\flags.cpsp"
|
||||
if(lang != LANG_DE) { responseStream << "class=\"flag-btn\"";
|
||||
#line 7 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\flags.cpsp"
|
||||
}
|
||||
else { responseStream << "class=\"flag-btn\" disabled";
|
||||
#line 8 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\flags.cpsp"
|
||||
} responseStream << ">\n";
|
||||
responseStream << "\t <span class=\"flag flag-germany\"></span>\n";
|
||||
responseStream << "\t</button>\n";
|
||||
responseStream << "</form>\n";
|
||||
responseStream << "</div>";
|
||||
// end include flags.cpsp
|
||||
responseStream << "\n";
|
||||
responseStream << " <div class=\"center-form-form\">\n";
|
||||
responseStream << "\t\t<form action=\"";
|
||||
#line 172 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
responseStream << "/\" method=\"POST\">\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" type=\"text\" name=\"login-email\" placeholder=\"";
|
||||
#line 173 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext("E-Mail") );
|
||||
responseStream << "\" value=\"";
|
||||
#line 173 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( presetEmail );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" type=\"password\" name=\"login-password\" placeholder=\"";
|
||||
#line 174 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Password") );
|
||||
responseStream << "\" />\n";
|
||||
responseStream << "\t\t <button type=\"submit\" name=\"submit\" class=\"center-form-submit form-button\">";
|
||||
#line 175 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext(" Login ") );
|
||||
responseStream << "</button>\n";
|
||||
responseStream << "\t\t</form>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"center-form-bottom\">\n";
|
||||
responseStream << " <div class=\"signup-link\">\n";
|
||||
responseStream << "\t <p>";
|
||||
#line 180 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext("You haven't any account yet? Please follow the link to create one.") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t <a href=\"https://elopage.com/s/gradido/registration-de/payment?locale=de\">\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 182 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Create New Account") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t </a>\n";
|
||||
responseStream << "\t </div>\n";
|
||||
responseStream << "\t\t<div class=\"reset-pwd-link\">\n";
|
||||
responseStream << "\t\t\t<a href=\"";
|
||||
#line 186 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
responseStream << "/resetPassword\">";
|
||||
#line 186 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Passwort vergessen") );
|
||||
responseStream << "</a>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "<p> </p>\n";
|
||||
responseStream << "<div class=\"container\">\n";
|
||||
responseStream << "\t<a href=\"https://docs.google.com/document/d/1jZp-DiiMPI9ZPNXmjsvOQ1BtnfDFfx8BX7CDmA8KKjY/edit?usp=sharing\" target=\"_blank\">Zum Whitepaper</a>\n";
|
||||
responseStream << "\t<br>\n";
|
||||
responseStream << "\t<br>\n";
|
||||
responseStream << "\t<a href=\"https://docs.google.com/document/d/1kcX1guOi6tDgnFHD9tf7fB_MneKTx-0nHJxzdN8ygNs/edit?usp=sharing\" target=\"_blank\">To the Whitepaper</a>\n";
|
||||
responseStream << "</div>\n";
|
||||
// begin include footer.cpsp
|
||||
responseStream << " <div class=\"center-bottom\">\n";
|
||||
responseStream << " <p>Copyright © Gradido 2020</p>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"bottomleft\">\n";
|
||||
responseStream << " ";
|
||||
#line 6 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\footer.cpsp"
|
||||
responseStream << ( mTimeProfiler.string() );
|
||||
responseStream << "\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"bottomright\">\n";
|
||||
responseStream << " <p>Login Server in Entwicklung</p>\n";
|
||||
responseStream << " <p>Alpha ";
|
||||
#line 10 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\footer.cpsp"
|
||||
responseStream << ( ServerConfig::g_versionString );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << "</body>\n";
|
||||
responseStream << "\n";
|
||||
responseStream << "</html>";
|
||||
// end include footer.cpsp
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
20
login_server/src/cpp/HTTPInterface/LoginPage.h
Normal file
20
login_server/src/cpp/HTTPInterface/LoginPage.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef LoginPage_INCLUDED
|
||||
#define LoginPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class LoginPage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
LoginPage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // LoginPage_INCLUDED
|
||||
390
login_server/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp
Normal file
390
login_server/src/cpp/HTTPInterface/PageRequestHandlerFactory.cpp
Normal file
@ -0,0 +1,390 @@
|
||||
#include "PageRequestHandlerFactory.h"
|
||||
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
#include "Poco/Net/HTMLForm.h"
|
||||
#include "Poco/DateTime.h"
|
||||
#include "Poco/DateTimeFormatter.h"
|
||||
|
||||
#include "ConfigPage.h"
|
||||
#include "LoginPage.h"
|
||||
#include "RegisterPage.h"
|
||||
#include "HandleFileRequest.h"
|
||||
#include "DashboardPage.h"
|
||||
#include "CheckEmailPage.h"
|
||||
#include "PassphrasePage.h"
|
||||
#include "SaveKeysPage.h"
|
||||
#include "ElopageWebhook.h"
|
||||
#include "ElopageWebhookLight.h"
|
||||
#include "UpdateUserPasswordPage.h"
|
||||
#include "Error500Page.h"
|
||||
#include "CheckTransactionPage.h"
|
||||
#include "ResetPassword.h"
|
||||
#include "RegisterAdminPage.h"
|
||||
#include "DebugPassphrasePage.h"
|
||||
#include "DebugMnemonicPage.h"
|
||||
#include "AdminCheckUserBackup.h"
|
||||
#include "TranslatePassphrase.h"
|
||||
#include "PassphrasedTransaction.h"
|
||||
#include "AdminUserPasswordReset.h"
|
||||
#include "RegisterDirectPage.h"
|
||||
|
||||
#include "DecodeTransactionPage.h"
|
||||
#include "RepairDefectPassphrase.h"
|
||||
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
|
||||
#include "../lib/Profiler.h"
|
||||
#include "../lib/DataTypeConverter.h"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
#include "../Crypto/DRRandom.h"
|
||||
|
||||
PageRequestHandlerFactory::PageRequestHandlerFactory()
|
||||
: mRemoveGETParameters("^/([a-zA-Z0-9_-]*)"), mLogging(Poco::Logger::get("requestLog"))
|
||||
{
|
||||
ServerConfig::g_ServerKeySeed->put(8, DRRandom::r64());
|
||||
}
|
||||
|
||||
Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::createRequestHandler(const Poco::Net::HTTPServerRequest& request)
|
||||
{
|
||||
//printf("request uri: %s\n", request.getURI().data());
|
||||
Profiler timeUsed;
|
||||
std::string uri = request.getURI();
|
||||
std::string url_first_part;
|
||||
std::string dateTimeString = Poco::DateTimeFormatter::format(Poco::DateTime(), "%d.%m.%y %H:%M:%S");
|
||||
mRemoveGETParameters.extract(uri, url_first_part);
|
||||
|
||||
std::string externReferer;
|
||||
|
||||
if (uri != "/favicon.ico") {
|
||||
//printf("[PageRequestHandlerFactory] uri: %s, first part: %s\n", uri.data(), url_first_part.data());
|
||||
auto referer = request.find("Referer");
|
||||
if (referer != request.end()) {
|
||||
//printf("referer: %s\n", referer->second.data());
|
||||
auto refererString = referer->second;
|
||||
if (refererString.find(ServerConfig::g_serverPath) == refererString.npos) {
|
||||
externReferer = refererString;
|
||||
}
|
||||
}//*/
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
if (url_first_part == "/elopage_webhook_211") {
|
||||
mLogging.information(dateTimeString + " call from elopage light");
|
||||
auto pageRequestHandler = new ElopageWebhookLight;
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
|
||||
// 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();
|
||||
auto s = sm->getSession(session_id);
|
||||
|
||||
// for debugging
|
||||
std::stringstream logStream;
|
||||
auto referer = request.find("Referer");
|
||||
logStream << dateTimeString << " call " << uri;
|
||||
if (s) {logStream << ", with session: " << std::to_string(s->getHandle()); }
|
||||
if (referer != request.end()) { logStream << ", from: " << referer->second;}
|
||||
mLogging.information(logStream.str());
|
||||
// end debugging
|
||||
|
||||
// TODO: count invalid session requests from IP and block IP for some time to prevent brute force session hijacking
|
||||
// or use log file and configure fail2ban for this to do
|
||||
|
||||
if (url_first_part == "/checkEmail") {
|
||||
//return new CheckEmailPage(s);
|
||||
//printf("url checkEmail\n");
|
||||
// if (!s) {
|
||||
return handleCheckEmail(s, uri, request, timeUsed);
|
||||
// }
|
||||
//printf("skip handleCheckEmail\n");
|
||||
}
|
||||
/*if (url_first_part == "/register") {
|
||||
auto pageRequestHandler = new RegisterPage;
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}*/
|
||||
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;
|
||||
}
|
||||
if (url_first_part == "/resetPassword") {
|
||||
auto resetPassword = new ResetPassword;
|
||||
resetPassword->setProfiler(timeUsed);
|
||||
return resetPassword;
|
||||
}
|
||||
|
||||
if (url_first_part == "/decode_transaction") {
|
||||
mLogging.information(dateTimeString + " decode");
|
||||
auto pageRequestHandler = new DecodeTransactionPage(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
if (url_first_part == "/passphrased_transaction") {
|
||||
auto pageRequestHandler = new PassphrasedTransaction();
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
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 (userModel && userModel->errorCount()) {
|
||||
s->getErrors(userModel);
|
||||
}
|
||||
s->sendErrorsAsEmail();
|
||||
auto pageRequestHandler = new Error500Page(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
if (url_first_part == "/error500") {
|
||||
auto pageRequestHandler = new Error500Page(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
if (url_first_part == "/transform_passphrase") {
|
||||
auto pageRequestHandler = new TranslatePassphrase(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
if (url_first_part == "/repairPassphrase") {
|
||||
auto pageRequestHandler = new RepairDefectPassphrase(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
if (userModel && userModel->getRole() == model::table::ROLE_ADMIN) {
|
||||
if (url_first_part == "/adminRegister") {
|
||||
auto pageRequestHandler = new RegisterAdminPage(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
if (url_first_part == "/debugPassphrase") {
|
||||
auto pageRequestHandler = new DebugPassphrasePage(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
if (url_first_part == "/debugMnemonic") {
|
||||
auto pageRequestHandler = new DebugMnemonicPage(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
if (url_first_part == "/checkUserBackups") {
|
||||
auto pageRequestHandler = new AdminCheckUserBackup(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
if (url_first_part == "/adminUserPasswordReset") {
|
||||
auto pageRequestHandler = new AdminUserPasswordReset(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
}
|
||||
|
||||
if(url_first_part == "/logout") {
|
||||
sm->releaseSession(s);
|
||||
// remove cookie(s)
|
||||
|
||||
//printf("session released\n");
|
||||
auto pageRequestHandler = new LoginPage(nullptr);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
if(url_first_part == "/user_delete") {
|
||||
if(s->deleteUser()) {
|
||||
sm->releaseSession(s);
|
||||
auto pageRequestHandler = new LoginPage(nullptr);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
}
|
||||
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;
|
||||
}
|
||||
if (url_first_part == "/checkTransactions") {
|
||||
auto pageRequestHandler = new CheckTransactionPage(s);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
} else {
|
||||
|
||||
if (url_first_part == "/config") {
|
||||
return new ConfigPage;
|
||||
}
|
||||
else if (url_first_part == "/login") {
|
||||
auto pageRequestHandler = new LoginPage(nullptr);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
}
|
||||
auto pageRequestHandler = new LoginPage(nullptr);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
//return new HandleFileRequest;
|
||||
//return new PageRequestHandlerFactory;
|
||||
}
|
||||
|
||||
Poco::Net::HTTPRequestHandler* PageRequestHandlerFactory::handleCheckEmail(Session* session, const std::string uri, const Poco::Net::HTTPServerRequest& request, Profiler timeUsed)
|
||||
{
|
||||
Poco::Net::HTMLForm form(request);
|
||||
unsigned long long verificationCode = 0;
|
||||
Languages lang = LANG_DE;
|
||||
|
||||
// if verification code is valid, go to next page, passphrase
|
||||
// login via verification code, if no session is active
|
||||
// try to get code from form get parameter
|
||||
if (!form.empty()) {
|
||||
try {
|
||||
verificationCode = stoull(form.get("email-verification-code", "0"));
|
||||
} catch (...) {}
|
||||
lang = LanguageManager::languageFromString(form.get("lang-btn", "de"));
|
||||
}
|
||||
// try to get code from uri parameter
|
||||
if (!verificationCode) {
|
||||
size_t pos = uri.find_last_of("/");
|
||||
auto str = uri.substr(pos + 1);
|
||||
DataTypeConverter::strToInt(str, verificationCode);
|
||||
}
|
||||
|
||||
// if no verification code given or error with given code, show form
|
||||
if (!verificationCode) {
|
||||
auto pageRequestHandler = new CheckEmailPage(session);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
|
||||
// we have a verification code, now let's check that thing
|
||||
auto sm = SessionManager::getInstance();
|
||||
|
||||
// no session or active session don't belong to verification code
|
||||
if (!session || session->getEmailVerificationCode() != verificationCode) {
|
||||
//sm->releaseSession(session);
|
||||
//session = nullptr;
|
||||
// it is maybe unsafe
|
||||
session = sm->findByEmailVerificationCode(verificationCode);
|
||||
}
|
||||
// no suitable session in memory, try to create one from db data
|
||||
if (!session) {
|
||||
session = sm->getNewSession();
|
||||
session->setLanguage(lang);
|
||||
if (session->loadFromEmailVerificationCode(verificationCode)) {
|
||||
// login not possible in this function, forwarded to PassphrasePage
|
||||
/*auto cookie_id = session->getHandle();
|
||||
auto user_host = request.clientAddress().host();
|
||||
session->setClientIp(user_host);
|
||||
response.addCookie(Poco::Net::HTTPCookie("user", std::to_string(cookie_id)));
|
||||
*/
|
||||
}
|
||||
else {
|
||||
//sm->releaseSession(session);
|
||||
auto pageRequestHandler = new CheckEmailPage(session);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
}
|
||||
// suitable session found or created
|
||||
if (session) {
|
||||
auto user_host = request.clientAddress().host();
|
||||
session->setClientIp(user_host);
|
||||
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 1 = konto already exist
|
||||
//! -1 = invalid code
|
||||
//! -2 = critical error
|
||||
//! 0 = ok
|
||||
*/
|
||||
// update session, mark as verified
|
||||
int retUpdateEmailVerification = session->updateEmailVerification(verificationCode);
|
||||
printf("[%s] return from update email verification: %d\n", __FUNCTION__, retUpdateEmailVerification);
|
||||
if (0 == retUpdateEmailVerification) {
|
||||
//printf("[PageRequestHandlerFactory::handleCheckEmail] timeUsed: %s\n", timeUsed.string().data());
|
||||
SessionHTTPRequestHandler* pageRequestHandler = nullptr;
|
||||
if (model::table::EMAIL_OPT_IN_REGISTER_DIRECT == session->getEmailVerificationType()) {
|
||||
printf("return check email page\n");
|
||||
pageRequestHandler = new CheckEmailPage(session);
|
||||
} else if(SESSION_STATE_RESET_PASSWORD_REQUEST == session->getSessionState()) {
|
||||
pageRequestHandler = new UpdateUserPasswordPage(session);
|
||||
} else {
|
||||
pageRequestHandler = new PassphrasePage(session);
|
||||
}
|
||||
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
|
||||
}
|
||||
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;
|
||||
}
|
||||
else if (-1 == retUpdateEmailVerification) {
|
||||
auto checkEmail = new CheckEmailPage(session);
|
||||
checkEmail->setProfiler(timeUsed);
|
||||
checkEmail->getErrors(session);
|
||||
sm->releaseSession(session);
|
||||
return checkEmail;
|
||||
}
|
||||
else if (-2 == retUpdateEmailVerification) {
|
||||
auto errorPage = new Error500Page(session);
|
||||
errorPage->setProfiler(timeUsed);
|
||||
return errorPage;
|
||||
}
|
||||
|
||||
}
|
||||
if (session) {
|
||||
sm->releaseSession(session);
|
||||
}
|
||||
|
||||
auto pageRequestHandler = new CheckEmailPage(nullptr);
|
||||
pageRequestHandler->setProfiler(timeUsed);
|
||||
return pageRequestHandler;
|
||||
}
|
||||
@ -0,0 +1,25 @@
|
||||
#ifndef __DR_PAGE_REQUEST_HANDLER_FACTORY_H
|
||||
#define __DR_PAGE_REQUEST_HANDLER_FACTORY_H
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandlerFactory.h"
|
||||
#include "Poco/RegularExpression.h"
|
||||
#include "Poco/Logger.h"
|
||||
#include "../model/Session.h"
|
||||
#include "../lib/Profiler.h"
|
||||
|
||||
#define HTTP_PAGES_COUNT 1
|
||||
|
||||
class PageRequestHandlerFactory : public Poco::Net::HTTPRequestHandlerFactory
|
||||
{
|
||||
public:
|
||||
PageRequestHandlerFactory();
|
||||
Poco::Net::HTTPRequestHandler* createRequestHandler(const Poco::Net::HTTPServerRequest& request);
|
||||
|
||||
protected:
|
||||
Poco::Net::HTTPRequestHandler* handleCheckEmail(Session* session, const std::string uri, const Poco::Net::HTTPServerRequest& request, Profiler timeUsed);
|
||||
|
||||
Poco::RegularExpression mRemoveGETParameters;
|
||||
Poco::Logger& mLogging;
|
||||
};
|
||||
|
||||
#endif // __DR_PAGE_REQUEST_HANDLER_FACTORY_H
|
||||
@ -0,0 +1,72 @@
|
||||
#include "PageRequestMessagedHandler.h"
|
||||
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
//const Poco::RegularExpression PageRequestMessagedHandler::mDetectLanguageGET("^(?:/[a-zA-Z0-9_-]*)?/(en|de)");
|
||||
// detect also lang field from form get
|
||||
const Poco::RegularExpression PageRequestMessagedHandler::mDetectLanguageGET("^(?:/[a-zA-Z0-9/_-]*)?(?:/(en|de)|\\?.*lang=(en|de))");
|
||||
|
||||
Languages PageRequestMessagedHandler::chooseLanguage(Poco::Net::HTTPServerRequest& request, std::string lang_btn /*= ""*/)
|
||||
{
|
||||
|
||||
// from Form
|
||||
Languages lang = LanguageManager::languageFromString(lang_btn);
|
||||
if (lang == LANG_NULL) {
|
||||
// from URL
|
||||
std::string uri = request.getURI();
|
||||
std::vector<std::string> matches;
|
||||
//std::string lang_str;
|
||||
mDetectLanguageGET.split(uri, matches);
|
||||
if (matches.size() > 0) {
|
||||
//for (auto it = matches.begin(); it != matches.end(); it++) {
|
||||
// printf("Matches: %s\n", it->data());
|
||||
//}
|
||||
lang = LanguageManager::languageFromString(matches[matches.size()-1]);
|
||||
}
|
||||
else {
|
||||
// from Header
|
||||
/*
|
||||
$lang = substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2);
|
||||
$acceptLang = ['fr', 'it', 'en'];
|
||||
$lang = in_array($lang, $acceptLang) ? $lang : 'en';
|
||||
*/
|
||||
std::string accept_languages = request.get("HTTP_ACCEPT_LANGUAGE", "");
|
||||
//printf("[PageRequestMessagedHandler::chooseLanguage] accept header: %s\n", accept_languages.data());
|
||||
}
|
||||
}
|
||||
|
||||
if (lang == LANG_NULL) {
|
||||
//lang = ServerConfig::g_default_locale;
|
||||
}
|
||||
|
||||
return lang;
|
||||
}
|
||||
|
||||
unsigned long long PageRequestMessagedHandler::getLastGetAsU64(const std::string& uri)
|
||||
{
|
||||
unsigned long long result = 0;
|
||||
size_t pos = uri.find_last_of("/");
|
||||
try {
|
||||
auto str = uri.substr(pos + 1);
|
||||
result = stoull(uri.substr(pos + 1));
|
||||
}
|
||||
catch (const std::invalid_argument& ia) {
|
||||
std::cerr << __FUNCTION__ << " Invalid argument: " << ia.what() << ", str: " << uri.substr(pos + 1) << '\n';
|
||||
return 0;
|
||||
}
|
||||
catch (const std::out_of_range& oor) {
|
||||
std::cerr << __FUNCTION__ << " Out of Range error: " << oor.what() << '\n';
|
||||
return 0;
|
||||
}
|
||||
catch (const std::logic_error & ler) {
|
||||
std::cerr << __FUNCTION__ << " Logical error: " << ler.what() << '\n';
|
||||
return 0;
|
||||
}
|
||||
catch (...) {
|
||||
std::cerr << __FUNCTION__ << " Unknown error" << '\n';
|
||||
return 0;
|
||||
}
|
||||
return result;
|
||||
}
|
||||
@ -0,0 +1,35 @@
|
||||
#ifndef PAGE_REQUEST_MESSAGE_HANDLER_INCLUDED
|
||||
#define PAGE_REQUEST_MESSAGE_HANDLER_INCLUDED
|
||||
|
||||
#include "../model/Session.h"
|
||||
#include "../lib/ErrorList.h"
|
||||
#include "../lib/Profiler.h"
|
||||
|
||||
#include "../SingletonManager/LanguageManager.h"
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
#include "Poco/Net/HTMLForm.h"
|
||||
#include "Poco/RegularExpression.h"
|
||||
|
||||
class PageRequestMessagedHandler : public Poco::Net::HTTPRequestHandler, public ErrorList
|
||||
{
|
||||
public:
|
||||
PageRequestMessagedHandler() {}
|
||||
|
||||
inline void setProfiler(Profiler profiler) { mTimeProfiler = profiler; }
|
||||
//Poco::Net::HTTPRequestHandler* createRequestHandler(const Poco::Net::HTTPServerRequest& request);
|
||||
|
||||
protected:
|
||||
static const Poco::RegularExpression mDetectLanguageGET;
|
||||
|
||||
inline const char* gettext(Session* session, const char* text) { if (!session || !session->getLanguageCatalog()) return text; return session->getLanguageCatalog()->gettext(text); }
|
||||
virtual Languages chooseLanguage(Poco::Net::HTTPServerRequest& request, std::string lang_btn = "");
|
||||
|
||||
unsigned long long getLastGetAsU64(const std::string& uri);
|
||||
|
||||
Profiler mTimeProfiler;
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // PAGE_REQUEST_MESSAGE_HANDLER_INCLUDED
|
||||
675
login_server/src/cpp/HTTPInterface/PassphrasePage.cpp
Normal file
675
login_server/src/cpp/HTTPInterface/PassphrasePage.cpp
Normal file
@ -0,0 +1,675 @@
|
||||
#include "PassphrasePage.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\\passphrase.cpsp"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../SingletonManager/LanguageManager.h"
|
||||
#include "../Crypto/KeyPair.h"
|
||||
#include "../ServerConfig.h"
|
||||
//#include "Poco/Net/HTTPServerParams.h"
|
||||
|
||||
enum PageState
|
||||
{
|
||||
PAGE_ASK_PASSPHRASE,
|
||||
PAGE_SHOW_PASSPHRASE,
|
||||
PAGE_ASK_ENSURE_PASSPHRASE,
|
||||
PAGE_FORCE_ASK_PASSPHRASE
|
||||
};
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
PassphrasePage::PassphrasePage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void PassphrasePage::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\\passphrase.cpsp"
|
||||
|
||||
|
||||
|
||||
chooseLanguage(request);
|
||||
const char* pageName = gettext("Passphrase");
|
||||
std::string pageTitle = gettext("Neues Konto anlegen");
|
||||
std::string pageSubtitle = gettext("2/3");
|
||||
PageState state = PAGE_ASK_PASSPHRASE;
|
||||
|
||||
// variable needed for flags
|
||||
auto lang = mSession->getLanguage();
|
||||
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto lm = LanguageManager::getInstance();
|
||||
|
||||
auto uri_start = ServerConfig::g_serverPath;//request.serverParams().getServerName();
|
||||
//Mnemonic* wordSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER];
|
||||
Mnemonic* wordSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER];
|
||||
if(lang == LANG_DE) {
|
||||
wordSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER];
|
||||
}
|
||||
|
||||
// remove old cookies if exist
|
||||
sm->deleteLoginCookies(request, response, mSession);
|
||||
// save login cookie, because maybe we've get an new session
|
||||
response.addCookie(mSession->getLoginCookie());
|
||||
|
||||
if(mSession->getSessionState() == SESSION_STATE_RESET_PASSWORD_REQUEST) {
|
||||
state = PAGE_FORCE_ASK_PASSPHRASE;
|
||||
}
|
||||
|
||||
if (!form.empty()) {
|
||||
|
||||
auto btnNext = form.get("nextEnsure", "");
|
||||
auto btnChecked = form.get("btnChecked", "");
|
||||
auto langBtn = form.get("lang", "");
|
||||
|
||||
if(btnChecked != "") {
|
||||
mSession->updateState(SESSION_STATE_PASSPHRASE_SHOWN);
|
||||
response.redirect(ServerConfig::g_serverPath + "/passphrase");
|
||||
return;
|
||||
}
|
||||
|
||||
if(btnNext != "") {
|
||||
state = PAGE_ASK_ENSURE_PASSPHRASE;
|
||||
} else if(langBtn == "") {
|
||||
auto registerKeyChoice = form.get("passphrase", "no");
|
||||
std::string oldPassphrase = "";
|
||||
if (registerKeyChoice == "no") {
|
||||
auto oldPassphrase = KeyPair::filterPassphrase(form.get("passphrase-existing", ""));
|
||||
|
||||
if(oldPassphrase != "") {
|
||||
if (User::validatePassphrase(oldPassphrase, &wordSource)) {
|
||||
// passphrase is valid
|
||||
if(PAGE_FORCE_ASK_PASSPHRASE == state) {
|
||||
auto compareResult = mSession->comparePassphraseWithSavedKeys(oldPassphrase, wordSource);
|
||||
if(-2 == compareResult) {
|
||||
response.redirect(ServerConfig::g_serverPath + "/error500");
|
||||
return;
|
||||
} else if(1 == compareResult) {
|
||||
response.redirect(ServerConfig::g_serverPath + "/updateUserPassword");
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
mSession->setPassphrase(oldPassphrase);
|
||||
mSession->updateState(SESSION_STATE_PASSPHRASE_SHOWN);
|
||||
response.redirect(ServerConfig::g_serverPath + "/saveKeys");
|
||||
return;
|
||||
//state = PAGE_SHOW_PASSPHRASE;
|
||||
}
|
||||
}
|
||||
else {
|
||||
addError(new Error(gettext("Passphrase"), gettext("Diese Passphrase ist ungültig, bitte überprüfen oder neu generieren (lassen).")), false);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (registerKeyChoice == "yes") {
|
||||
mSession->generatePassphrase();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// double check passphrase
|
||||
auto passphrase = mSession->getOldPassphrase();
|
||||
auto langWordSource = wordSource;
|
||||
if("" != passphrase && !User::validatePassphrase(passphrase, &wordSource)) {
|
||||
addError(new Error("PassphrasePage", "Invalid Passphrase after double check"));
|
||||
addError(new ParamError("PassphrasePage", "passphrase", passphrase.data()));
|
||||
if(!mSession->getNewUser().isNull()) {
|
||||
addError(new ParamError("PassphrasePage", "user email", mSession->getNewUser()->getModel()->getEmail()));
|
||||
}
|
||||
sendErrorsAsEmail();
|
||||
addError(new Error(gettext("Passphrase"), gettext("intern error please try again later")), false);
|
||||
//response.redirect(ServerConfig::g_serverPath + "/error500");
|
||||
//return;
|
||||
}
|
||||
//printf("wordSource: %d, langWordSource: %d\n", (int)wordSource, (int)langWordSource);
|
||||
if(wordSource != langWordSource) {
|
||||
mSession->generatePassphrase();
|
||||
User::validatePassphrase(passphrase, &wordSource);
|
||||
}
|
||||
|
||||
if(mSession->getSessionState() == SESSION_STATE_PASSPHRASE_GENERATED && state != PAGE_ASK_ENSURE_PASSPHRASE) {
|
||||
state = PAGE_SHOW_PASSPHRASE;
|
||||
//mSession->updateState(SESSION_STATE_PASSPHRASE_SHOWN);
|
||||
}
|
||||
if(state == PAGE_ASK_ENSURE_PASSPHRASE) {
|
||||
pageSubtitle = gettext("3/3");
|
||||
}
|
||||
else if(state == PAGE_ASK_PASSPHRASE) {
|
||||
pageSubtitle = gettext("1/3");
|
||||
} else if(state == PAGE_FORCE_ASK_PASSPHRASE) {
|
||||
pageTitle = gettext("Neues Passwort anlegen");
|
||||
pageSubtitle = gettext("1/3");
|
||||
}
|
||||
getErrors(mSession);
|
||||
#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"
|
||||
withMaterialIcons = true; std::ostream& _responseStream = response.send();
|
||||
Poco::DeflatingOutputStream _gzipStream(_responseStream, Poco::DeflatingStreamBuf::STREAM_GZIP, 1);
|
||||
std::ostream& responseStream = _compressResponse ? _gzipStream : _responseStream;
|
||||
responseStream << "\n";
|
||||
// begin include login_header.cpsp
|
||||
// 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";
|
||||
responseStream << "<div class=\"authentication-theme auth-style_1\">\n";
|
||||
responseStream << " <div class=\"row\">\n";
|
||||
responseStream << " <div class=\"col-12 logo-section\">\n";
|
||||
responseStream << " <a href=\"";
|
||||
#line 5 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login_header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "\" class=\"logo\">\n";
|
||||
responseStream << " <picture>\n";
|
||||
responseStream << "\t\t\t\t<source srcset=\"";
|
||||
#line 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login_header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_schrift.webp\" type=\"image/webp\">\n";
|
||||
responseStream << "\t\t\t\t<source srcset=\"";
|
||||
#line 8 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login_header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_schrift.png\" type=\"image/png\"> \n";
|
||||
responseStream << "\t\t\t\t<img src=\"";
|
||||
#line 9 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login_header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_schrift.png\" alt=\"logo\" />\n";
|
||||
responseStream << "\t\t\t</picture>\n";
|
||||
responseStream << " </a>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"row\">\n";
|
||||
responseStream << " <div class=\"col-lg-5 col-md-7 col-sm-9 col-11 mx-auto\">\n";
|
||||
responseStream << " <div class=\"grid\">\n";
|
||||
responseStream << " <div class=\"center-ul-container\">\n";
|
||||
responseStream << " ";
|
||||
#line 18 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login_header.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"grid-body\">";
|
||||
// end include login_header.cpsp
|
||||
responseStream << "\n";
|
||||
#line 139 "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"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
// 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";
|
||||
#line 141 "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"
|
||||
} responseStream << "\n";
|
||||
responseStream << "<div class=\"row mb-3\" ";
|
||||
#line 142 "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"
|
||||
} responseStream << ">\n";
|
||||
responseStream << "\t<h2 class=\"mx-auto\">";
|
||||
#line 143 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
responseStream << ( pageTitle );
|
||||
responseStream << ": ";
|
||||
#line 143 "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"
|
||||
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"
|
||||
responseStream << ( gettext("Passphrase abschreiben") );
|
||||
responseStream << "</h4>\n";
|
||||
responseStream << "\t";
|
||||
#line 146 "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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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() );
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
responseStream << ( gettext("Weiter") );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t</form>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t </div>\n";
|
||||
responseStream << "\t ";
|
||||
#line 176 "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";
|
||||
responseStream << "\t\t\tcursor:default;\n";
|
||||
responseStream << "\t\t}\n";
|
||||
responseStream << "\t\t.visible-modal {\n";
|
||||
responseStream << "\t\t\tbackground-color: rgba(0,0,0,0.4)\n";
|
||||
responseStream << "\t\t}\n";
|
||||
responseStream << "\t\t</style>\n";
|
||||
responseStream << "\t <div class=\"\">\n";
|
||||
responseStream << "\t\t <div class=\"item-wrapper\">\n";
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
responseStream << ( gettext("Ja") );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t\t\t\t </noscript>\n";
|
||||
responseStream << "\t\t\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t\t</form>\n";
|
||||
responseStream << "\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t</form>\n";
|
||||
responseStream << "\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t </div>\n";
|
||||
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"
|
||||
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() );
|
||||
responseStream << "\";\n";
|
||||
responseStream << "\t\t\tlanguage = \"";
|
||||
#line 216 "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"
|
||||
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"
|
||||
} else if(state == PAGE_ASK_PASSPHRASE) { responseStream << "\n";
|
||||
responseStream << "\t <style type=\"text/css\">\n";
|
||||
responseStream << "\t\t.hidden-on-load {\n";
|
||||
responseStream << "\t\t\tdisplay:none;\n";
|
||||
responseStream << "\t\t}\n";
|
||||
responseStream << "\t </style>\n";
|
||||
responseStream << "\t <noscript>\n";
|
||||
responseStream << "\t\t <script type=\"text/css\">\n";
|
||||
responseStream << "\t\t\t.hidden-on-load {\n";
|
||||
responseStream << "\t\t\t\tdisplay:block;\n";
|
||||
responseStream << "\t\t\t}\n";
|
||||
responseStream << "\t\t </script>\n";
|
||||
responseStream << "\t </noscript>\n";
|
||||
responseStream << " <script type=\"text/javascript\">\n";
|
||||
responseStream << "\t\tfunction showHidePassphraseCointainer(the) {\n";
|
||||
responseStream << "\t\t\tvar passphraseContainer = document.getElementById('passphrase-existing-container');\n";
|
||||
responseStream << "\t\t\t//console.log(the.value);\n";
|
||||
responseStream << "\t\t\tif(the.value === 'no') {\n";
|
||||
responseStream << "\t\t\t\tpassphraseContainer.classList.remove('hidden-on-load');\n";
|
||||
responseStream << "\t\t\t} else if(the.value === 'yes') {\n";
|
||||
responseStream << "\t\t\t\tpassphraseContainer.classList.add('hidden-on-load');\n";
|
||||
responseStream << "\t\t\t}\n";
|
||||
responseStream << "\t\t\t//passphrase-existing-container\n";
|
||||
responseStream << "\t\t\t//var radioNewOn = document.getElementById('passphrase-new-no');\n";
|
||||
responseStream << "\t\t}\n";
|
||||
responseStream << "\t </script>\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<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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
responseStream << ( gettext("Möchtest du ein neues Gradido-Konto anlegen oder ein bestehendes wiederherstellen?") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t\t \n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t<div class=\"row\">\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"col-md-9\">\n";
|
||||
responseStream << "\t\t\t\t\t\t<div class=\"form-group\">\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<div class=\"radio\">\n";
|
||||
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"
|
||||
responseStream << ( gettext("Neues Konto anlegen") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t\t\t\t<i class=\"input-frame\"></i>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t\t</label>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<div class=\"radio\">\n";
|
||||
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"
|
||||
responseStream << ( gettext("Bestehendes Konto wiederherstellen") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t\t\t\t\t\t\t<i class=\"input-frame\"></i>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t\t</label>\n";
|
||||
responseStream << "\t\t\t\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t\t\t</div>\n";
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
responseStream << ( gettext("Weiter") );
|
||||
responseStream << "</button>\n";
|
||||
responseStream << "\t\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t</div>\n";
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
} 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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
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"
|
||||
responseStream << ( gettext("Weiter") );
|
||||
responseStream << "</button>\n";
|
||||
responseStream << "\t\t\t</form>\n";
|
||||
responseStream << "\t\t </div>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t </div>\n";
|
||||
responseStream << "\t ";
|
||||
#line 305 "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"
|
||||
responseStream << ( gettext("Fehler") );
|
||||
responseStream << "</h5>\n";
|
||||
responseStream << "\t\t\t\t <p>";
|
||||
#line 311 "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";
|
||||
responseStream << "\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t ";
|
||||
#line 316 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "</div>\n";
|
||||
// begin include footer_ripple.cpsp
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << " <!-- content viewport ends -->\n";
|
||||
responseStream << " <!-- partial:partials/_footer.html -->\n";
|
||||
responseStream << " <footer class=\"footer\">\n";
|
||||
responseStream << " <div class=\"row\">\n";
|
||||
responseStream << " <div class=\"col-sm-6 text-center text-sm-right order-sm-1\">\n";
|
||||
responseStream << " <ul class=\"text-gray\">\n";
|
||||
responseStream << "\t\t\t\t<li><a href=\"https://gradido.net/de/datenschutz/\" target=\"_blank\">Datenschutzerklärung</a></li>\n";
|
||||
responseStream << " <li><a href=\"https://gradido.net/de/impressum/\" target=\"_blank\">Impressum</a></li>\n";
|
||||
responseStream << " </ul>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"col-sm-6 text-center text-sm-left mt-3 mt-sm-0\">\n";
|
||||
responseStream << " <small class=\"text-muted d-block\">Copyright © 2020 Gradido</small>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </footer>\n";
|
||||
responseStream << " <!-- partial -->\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <!-- page content ends -->\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"grd-time-used dev-info\">\n";
|
||||
responseStream << " ";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\footer_ripple.cpsp"
|
||||
responseStream << ( mTimeProfiler.string() );
|
||||
responseStream << "\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <!--page body ends -->\n";
|
||||
responseStream << " <!-- SCRIPT LOADING START FORM HERE /////////////-->\n";
|
||||
responseStream << " <!-- plugins:js -->\n";
|
||||
responseStream << " <!--<script src=\"../../../assets/vendors/js/core.js\"></script>-->\n";
|
||||
responseStream << " <!--<script src=\"../../../assets/vendors/js/vendor.addons.js\"></script>-->\n";
|
||||
responseStream << " <!-- endinject -->\n";
|
||||
responseStream << " <!-- Vendor Js For This Page Ends-->\n";
|
||||
responseStream << " <!--<script src=\"../../../assets/vendors/chartjs/Chart.min.js\"></script>-->\n";
|
||||
responseStream << " <!-- Vendor Js For This Page Ends-->\n";
|
||||
responseStream << " <!-- build:js -->\n";
|
||||
responseStream << " <!--<script src=\"../../../assets/js/template.js\"></script>-->\n";
|
||||
responseStream << " <script src=\"";
|
||||
#line 36 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\footer_ripple.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "/js/basic.js\"></script>\n";
|
||||
responseStream << " <!--<script src=\"../../../assets/js/dashboard.js\"></script>-->\n";
|
||||
responseStream << " <!-- endbuild -->\n";
|
||||
responseStream << " </body>\n";
|
||||
responseStream << "</html>\n";
|
||||
responseStream << " ";
|
||||
// end include footer_ripple.cpsp
|
||||
responseStream << "\n";
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
20
login_server/src/cpp/HTTPInterface/PassphrasePage.h
Normal file
20
login_server/src/cpp/HTTPInterface/PassphrasePage.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef PassphrasePage_INCLUDED
|
||||
#define PassphrasePage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class PassphrasePage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
PassphrasePage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // PassphrasePage_INCLUDED
|
||||
296
login_server/src/cpp/HTTPInterface/PassphrasedTransaction.cpp
Normal file
296
login_server/src/cpp/HTTPInterface/PassphrasedTransaction.cpp
Normal file
@ -0,0 +1,296 @@
|
||||
#include "PassphrasedTransaction.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\\PassphrasedTransaction.cpsp"
|
||||
|
||||
#include "../SingletonManager/MemoryManager.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../Crypto/KeyPair.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
|
||||
};
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
void PassphrasedTransaction::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 23 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\PassphrasedTransaction.cpsp"
|
||||
|
||||
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];
|
||||
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);
|
||||
bool keysGenerated = false;
|
||||
KeyPair keys;
|
||||
if(!passphraseValid)
|
||||
{
|
||||
addError(new Error("Passphrase", "Fehler beim validieren der Passphrase"));
|
||||
}
|
||||
else
|
||||
{
|
||||
keysGenerated = keys.generateFromPassphrase(passphrase.data(), wordSource);
|
||||
if(!keysGenerated)
|
||||
{
|
||||
addError(new Error("Passphrase", "Konnte keine Keys aus der Passphrase generieren"));
|
||||
}
|
||||
}
|
||||
if(passphraseValid && keysGenerated)
|
||||
{
|
||||
// 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.getPubkeyHex());
|
||||
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();
|
||||
}
|
||||
if(!currentActiveTransaction->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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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";
|
||||
#line 137 "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"
|
||||
responseStream << ( errorString );
|
||||
responseStream << "\n";
|
||||
#line 139 "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"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 142 "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"
|
||||
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"
|
||||
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"
|
||||
responseStream << ( !form.empty() ? form.get("recevier") : "" );
|
||||
responseStream << "\"/>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
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\t</fieldset>\n";
|
||||
responseStream << "\t";
|
||||
#line 157 "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"
|
||||
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"
|
||||
} 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();
|
||||
}
|
||||
18
login_server/src/cpp/HTTPInterface/PassphrasedTransaction.h
Normal file
18
login_server/src/cpp/HTTPInterface/PassphrasedTransaction.h
Normal file
@ -0,0 +1,18 @@
|
||||
#ifndef PassphrasedTransaction_INCLUDED
|
||||
#define PassphrasedTransaction_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "PageRequestMessagedHandler.h"
|
||||
|
||||
|
||||
class PassphrasedTransaction: public PageRequestMessagedHandler
|
||||
{
|
||||
public:
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // PassphrasedTransaction_INCLUDED
|
||||
197
login_server/src/cpp/HTTPInterface/RegisterAdminPage.cpp
Normal file
197
login_server/src/cpp/HTTPInterface/RegisterAdminPage.cpp
Normal file
@ -0,0 +1,197 @@
|
||||
#include "RegisterAdminPage.h"
|
||||
#include "Poco/Net/HTTPServerRequest.h"
|
||||
#include "Poco/Net/HTTPServerResponse.h"
|
||||
#include "Poco/Net/HTMLForm.h"
|
||||
#include "Poco/DeflatingStream.h"
|
||||
|
||||
|
||||
#line 7 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\registerAdmin.cpsp"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "Poco/Net/HTTPCookie.h"
|
||||
#include "../ServerConfig.h"
|
||||
#line 1 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
RegisterAdminPage::RegisterAdminPage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void RegisterAdminPage::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 12 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\registerAdmin.cpsp"
|
||||
|
||||
const char* pageName = "Admin Registrieren";
|
||||
//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);
|
||||
}
|
||||
|
||||
|
||||
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_production\\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"
|
||||
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_production\\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 31 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\registerAdmin.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 32 "F:\\Gradido\\gradido_login_server_production\\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";
|
||||
responseStream << "\t\t\t\tDie Anmeldung wird verarbeitet und es wird dem Benutzer eine Aktivierungs-E-Mail zugeschickt. \n";
|
||||
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"
|
||||
responseStream << ( ServerConfig::g_php_serverHost );
|
||||
responseStream << "\">Zurück</a>\n";
|
||||
responseStream << "\t";
|
||||
#line 39 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\registerAdmin.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 die Benutzer-Daten ein 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 47 "F:\\Gradido\\gradido_login_server_production\\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"
|
||||
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"
|
||||
responseStream << ( !form.empty() ? form.get("register-email") : "" );
|
||||
responseStream << "\"/>\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 61 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\registerAdmin.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_production\\src\\cpsp\\footer.cpsp"
|
||||
responseStream << ( mTimeProfiler.string() );
|
||||
responseStream << "\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"bottomright\">\n";
|
||||
responseStream << " <p>Login Server in Entwicklung</p>\n";
|
||||
responseStream << " <p>Alpha ";
|
||||
#line 10 "F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\footer.cpsp"
|
||||
responseStream << ( ServerConfig::g_versionString );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << "</body>\n";
|
||||
responseStream << "\n";
|
||||
responseStream << "</html>";
|
||||
// end include footer.cpsp
|
||||
responseStream << "\n";
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
20
login_server/src/cpp/HTTPInterface/RegisterAdminPage.h
Normal file
20
login_server/src/cpp/HTTPInterface/RegisterAdminPage.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef RegisterAdminPage_INCLUDED
|
||||
#define RegisterAdminPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class RegisterAdminPage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
RegisterAdminPage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // RegisterAdminPage_INCLUDED
|
||||
181
login_server/src/cpp/HTTPInterface/RegisterDirectPage.cpp
Normal file
181
login_server/src/cpp/HTTPInterface/RegisterDirectPage.cpp
Normal file
@ -0,0 +1,181 @@
|
||||
#include "RegisterDirectPage.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\\registerDirect.cpsp"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "Poco/Net/HTTPCookie.h"
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
void RegisterDirectPage::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\\registerDirect.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->createUserDirect(
|
||||
form.get("register-first-name", ""),
|
||||
form.get("register-last-name", ""),
|
||||
form.get("register-email", ""),
|
||||
form.get("register-password", "")
|
||||
);
|
||||
|
||||
getErrors(session);
|
||||
|
||||
if(!errorCount()) {
|
||||
auto user_host = request.clientAddress().host();
|
||||
session->setClientIp(user_host);
|
||||
response.addCookie(session->getLoginCookie());
|
||||
response.redirect(ServerConfig::g_php_serverPath + "/");
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
// on enter login page with empty form
|
||||
// remove old cookies if exist
|
||||
sm->deleteLoginCookies(request, response);
|
||||
}
|
||||
#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 52 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\registerDirect.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "<div class=\"center-form-container\">\n";
|
||||
responseStream << "\t<div class=\"center-form-title\">\n";
|
||||
responseStream << "\t <h1>Einen neuen Account anlegen</h1>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << "\t<div class=\"center-form-form\">\n";
|
||||
responseStream << "\t\t<form method=\"POST\">\n";
|
||||
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") : "" );
|
||||
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") : "" );
|
||||
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") : "" );
|
||||
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";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"register-password\">Passwort Bestätigung</label>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"register-password2\" type=\"password\" name=\"register-password2\"/>\n";
|
||||
responseStream << "\t\t\t<input class=\"center-form-submit form-button\" type=\"submit\" name=\"submit\" value=\"Anmelden\">\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();
|
||||
}
|
||||
18
login_server/src/cpp/HTTPInterface/RegisterDirectPage.h
Normal file
18
login_server/src/cpp/HTTPInterface/RegisterDirectPage.h
Normal file
@ -0,0 +1,18 @@
|
||||
#ifndef RegisterDirectPage_INCLUDED
|
||||
#define RegisterDirectPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "PageRequestMessagedHandler.h"
|
||||
|
||||
|
||||
class RegisterDirectPage: public PageRequestMessagedHandler
|
||||
{
|
||||
public:
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // RegisterDirectPage_INCLUDED
|
||||
211
login_server/src/cpp/HTTPInterface/RegisterPage.cpp
Normal file
211
login_server/src/cpp/HTTPInterface/RegisterPage.cpp
Normal file
@ -0,0 +1,211 @@
|
||||
#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();
|
||||
}
|
||||
18
login_server/src/cpp/HTTPInterface/RegisterPage.h
Normal file
18
login_server/src/cpp/HTTPInterface/RegisterPage.h
Normal file
@ -0,0 +1,18 @@
|
||||
#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
|
||||
366
login_server/src/cpp/HTTPInterface/RepairDefectPassphrase.cpp
Normal file
366
login_server/src/cpp/HTTPInterface/RepairDefectPassphrase.cpp
Normal file
@ -0,0 +1,366 @@
|
||||
#include "RepairDefectPassphrase.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\\repairDefectPassphrase.cpsp"
|
||||
|
||||
#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 "../tasks/SigningTransaction.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"
|
||||
|
||||
#include <memory>
|
||||
|
||||
enum PageState
|
||||
{
|
||||
GENERATE_PASSPHRASE,
|
||||
SHOW_PASSPHRASE,
|
||||
CREATE_TRANSACTION,
|
||||
CHECK_TRANSACTION,
|
||||
FINISH
|
||||
};
|
||||
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
RepairDefectPassphrase::RepairDefectPassphrase(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void RepairDefectPassphrase::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 36 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.cpsp"
|
||||
|
||||
auto mm = MemoryManager::getInstance();
|
||||
auto em = EmailManager::getInstance();
|
||||
auto new_user = mSession->getNewUser();
|
||||
auto user_model = new_user->getModel();
|
||||
auto adminEmail = em->getAdminReceiver();
|
||||
Mnemonic* wordSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER_FIXED_CASES];
|
||||
std::string pageName = "Repariere Defekte Passphrase";
|
||||
|
||||
std::string errorString = "";
|
||||
|
||||
PageState state = GENERATE_PASSPHRASE;
|
||||
|
||||
|
||||
if(!form.empty())
|
||||
{
|
||||
printf("form not empty\n");
|
||||
auto btn = form.get("generate", "");
|
||||
auto btn2 = form.get("transfer", "");
|
||||
printf("btn: %s\n", btn.data());
|
||||
printf("btn2: %s\n", btn2.data());
|
||||
if(btn == "Neue Passphrase generieren!")
|
||||
{
|
||||
auto passphrase = Passphrase::generate(wordSource);
|
||||
if(!passphrase->checkIfValid())
|
||||
{
|
||||
addError(new Error("Passphrase", "Fehler beim generieren oder validieren der Passphrase, evt. erneut versuchen!"));
|
||||
}
|
||||
else
|
||||
{
|
||||
mSession->setPassphrase(passphrase);
|
||||
auto newPassphraseModel = controller::UserBackups::create(
|
||||
user_model->getID(),
|
||||
passphrase->getString(),
|
||||
ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER_FIXED_CASES
|
||||
);
|
||||
auto result = newPassphraseModel->getModel()->insertIntoDB(false);
|
||||
//state = SHOW_PASSPHRASE;
|
||||
if(result) {
|
||||
state = SHOW_PASSPHRASE;
|
||||
} else {
|
||||
addError(new Error("Speichern", "Fehler beim speichern der neuen Passphrase, evt. erneut versuchen!"));
|
||||
}
|
||||
}
|
||||
}
|
||||
else if("" != btn2)
|
||||
{
|
||||
|
||||
auto passphrase = mSession->getPassphrase();
|
||||
auto new_gradido_key_pair = std::unique_ptr<KeyPairEd25519>(KeyPairEd25519::create(passphrase));
|
||||
|
||||
if(passphrase.isNull() || !passphrase->checkIfValid()) {
|
||||
addError(new Error("Passphrase", "Ungültige Passphrase, bitte neuladen"));
|
||||
}
|
||||
if(!new_gradido_key_pair) {
|
||||
addError(new Error("Keys", "Konnte keine Keys erstellen, bitte neuladen"));
|
||||
}
|
||||
// create payload
|
||||
Poco::JSON::Object requestJson;
|
||||
Poco::JSON::Object pubkeys;
|
||||
pubkeys.set("sender", user_model->getPublicKeyHex());
|
||||
pubkeys.set("receiver", DataTypeConverter::pubkeyToHex(new_gradido_key_pair->getPublicKey()));
|
||||
requestJson.set("method", "moveTransaction");
|
||||
requestJson.set("pubkeys", pubkeys);
|
||||
requestJson.set("memo", form.get("memo", ""));
|
||||
requestJson.set("session_id", mSession->getHandle());
|
||||
|
||||
printf("[repairDefectPassphrase] 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("[repairDefectPassphrase] 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("[repairDefectPassphrase] request success, wait on transaction ready\n");
|
||||
auto currentActiveTransaction = mSession->getNextReadyTransaction();
|
||||
while(currentActiveTransaction.isNull()) {
|
||||
Poco::Thread::sleep(10);
|
||||
currentActiveTransaction = mSession->getNextReadyTransaction();
|
||||
}
|
||||
if(!currentActiveTransaction->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);
|
||||
printf("[repairDefectPassphrase] before running sign\n");
|
||||
if(!signing->run()) {
|
||||
|
||||
if(new_user->setGradidoKeyPair(new_gradido_key_pair.release()) != 1) {
|
||||
addError(new Error("Neues Schlüsselpaar", "Neuer Private Key konnte nicht verschlüsselt werden!"));
|
||||
} else {
|
||||
if(user_model->updatePubkeyAndPrivkey() != 1) {
|
||||
addError(new Error("Speichern", "Fehler beim speichern der neuen Keys in die Datenbank, bitte erneut versuchen (Seite neuladen)"));
|
||||
} else {
|
||||
//printf("[repairDefectPassphrase] set state to FINISH\n");
|
||||
state = FINISH;
|
||||
}
|
||||
}
|
||||
|
||||
} 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();
|
||||
}
|
||||
|
||||
//state = CREATE_TRANSACTION;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
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";
|
||||
#line 185 "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"
|
||||
responseStream << ( errorString );
|
||||
responseStream << "\n";
|
||||
#line 187 "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"
|
||||
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"
|
||||
if(GENERATE_PASSPHRASE == state) { responseStream << "\n";
|
||||
responseStream << "\t\t";
|
||||
#line 193 "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";
|
||||
responseStream << "\t\t\t<form method=\"POST\">\n";
|
||||
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"
|
||||
} 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"
|
||||
responseStream << ( adminEmail);
|
||||
responseStream << "\">";
|
||||
#line 200 "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"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t";
|
||||
#line 202 "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"
|
||||
responseStream << ( mSession->getPassphrase()->getString() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t</fieldset>\n";
|
||||
responseStream << "\t\t<form method=\"POST\">\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\"></textarea></p>\n";
|
||||
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"
|
||||
} 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"
|
||||
responseStream << ( ServerConfig::g_serverPath + "/logout" );
|
||||
responseStream << "\">Ausloggen</a>\n";
|
||||
responseStream << "\t";
|
||||
#line 218 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\repairDefectPassphrase.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
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
20
login_server/src/cpp/HTTPInterface/RepairDefectPassphrase.h
Normal file
20
login_server/src/cpp/HTTPInterface/RepairDefectPassphrase.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef RepairDefectPassphrase_INCLUDED
|
||||
#define RepairDefectPassphrase_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class RepairDefectPassphrase: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
RepairDefectPassphrase(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // RepairDefectPassphrase_INCLUDED
|
||||
366
login_server/src/cpp/HTTPInterface/ResetPassword.cpp
Normal file
366
login_server/src/cpp/HTTPInterface/ResetPassword.cpp
Normal file
@ -0,0 +1,366 @@
|
||||
#include "ResetPassword.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\\resetPassword.cpsp"
|
||||
|
||||
#include "../SingletonManager/LanguageManager.h"
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../SingletonManager/EmailManager.h"
|
||||
#include "../controller/User.h"
|
||||
#include "../controller/UserBackups.h"
|
||||
|
||||
enum PageState {
|
||||
PAGE_EMAIL_ASK,
|
||||
PAGE_ASK,
|
||||
PAGE_WAIT_EMAIL,
|
||||
PAGE_WAIT_ADMIN,
|
||||
PAGE_EMAIL_ALREADY_SEND
|
||||
};
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
void ResetPassword::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 20 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
|
||||
PageState state = PAGE_EMAIL_ASK;
|
||||
auto lm = LanguageManager::getInstance();
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto adminReceiver = EmailManager::getInstance()->getAdminReceiver();
|
||||
|
||||
const char* pageName = "Passwort vergessen";
|
||||
auto lang = chooseLanguage(request);
|
||||
|
||||
// class="btn btn-outline-secondary flag-btn"
|
||||
// class="btn btn-secondary disabled flag-btn" disabled
|
||||
std::string eng_btn_classes = "";
|
||||
std::string de_btn_classes = "";
|
||||
|
||||
auto langCatalog = lm->getFreeCatalog(lang);
|
||||
|
||||
std::string emailInputClass = "form-control";
|
||||
std::string passphraseRadioClass = "group";
|
||||
|
||||
std::string email = "";
|
||||
|
||||
if(!form.empty()) {
|
||||
auto session = sm->getNewSession();
|
||||
email = form.get("email", "");
|
||||
auto passphraseMemorized = form.get("passphrase_memorized", "");
|
||||
auto user = controller::User::create();
|
||||
auto ask = form.get("ask_passphrase", "");
|
||||
|
||||
if(email != "")
|
||||
{
|
||||
bool user_exist = false;
|
||||
bool sendUserEmail = false;
|
||||
|
||||
if(!sm->isValid(email, VALIDATE_EMAIL)) {
|
||||
addError(new Error(gettext(session, "E-Mail"), gettext(session, "Das ist keine gültige E-Mail Adresse")), false);
|
||||
emailInputClass += " is-invalid";
|
||||
}
|
||||
user_exist = user->load(email) == 1;
|
||||
|
||||
if(ask == "true")
|
||||
{
|
||||
if(passphraseMemorized == "") {
|
||||
addError(new Error(gettext(session, "Passphrase"), gettext(session, "Bitte wähle eine Option aus.")), false);
|
||||
passphraseRadioClass += " group-is-invalid";
|
||||
} else if(passphraseMemorized == "true") {
|
||||
sendUserEmail = true;
|
||||
}
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
if(user_exist && (!user->tryLoadPassphraseUserBackup() || !user->hasPublicKey())) {
|
||||
sendUserEmail = true;
|
||||
}
|
||||
}
|
||||
|
||||
if(!errorCount())
|
||||
{
|
||||
// send reset password email
|
||||
int result = 0;
|
||||
if(user_exist) {
|
||||
result = session->sendResetPasswordEmail(user, sendUserEmail);
|
||||
}
|
||||
|
||||
if(2 == result) {
|
||||
state = PAGE_EMAIL_ALREADY_SEND;
|
||||
} else if(sendUserEmail) {
|
||||
state = PAGE_WAIT_EMAIL;
|
||||
} else {
|
||||
state = PAGE_WAIT_ADMIN;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
addError(new Error(gettext(session, "E-Mail"), gettext(session, "E-Mail Adresse nicht angegeben.")), false);
|
||||
emailInputClass += " is-invalid";
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
#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";
|
||||
responseStream << " ";
|
||||
#line 103 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t <div class=\"center-form-container\">\n";
|
||||
responseStream << "\t <div class=\"center-form-title\">\n";
|
||||
responseStream << "\t <h1>Passwort zurücksetzen</h1>\n";
|
||||
responseStream << "\t </div>\n";
|
||||
responseStream << " ";
|
||||
#line 108 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
if(state == PAGE_EMAIL_ASK) { responseStream << "\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 << "/resetPassword\">\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"item-wrapper\">\n";
|
||||
responseStream << "\t\t\t\t\t <div class=\"form-group\">\n";
|
||||
responseStream << "\t\t\t\t\t\t<label class=\"form-label\" for=\"email\">";
|
||||
#line 113 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Gib bitte hier deine E-Mail Adresse an:") );
|
||||
responseStream << "</label>\n";
|
||||
responseStream << "\t\t\t\t\t\t<input class=\"form-control\" type=\"text\" class=\"";
|
||||
#line 114 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( emailInputClass );
|
||||
responseStream << "\" name=\"email\" id=\"email\" placeholder=\"E-Mail\" value=\"";
|
||||
#line 114 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( email );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t\t\t\t\t </div>\n";
|
||||
responseStream << "\t\t\t\t\t <button type=\"submit\" class=\"center-form-submit form-button\" >";
|
||||
#line 116 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Bestätigen") );
|
||||
responseStream << "</button>\n";
|
||||
responseStream << "\t\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t</form>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t";
|
||||
#line 120 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
} else if(state == PAGE_ASK) { responseStream << "\n";
|
||||
responseStream << " <div class=\"center-form-form\">\n";
|
||||
responseStream << "\t\t\t\t";
|
||||
// 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 << "\t\t\t\t<form action=\"";
|
||||
#line 123 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( ServerConfig::g_serverPath );
|
||||
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"
|
||||
responseStream << ( langCatalog->gettext("Gib bitte hier deine E-Mail Adresse an:") );
|
||||
responseStream << "</label>\n";
|
||||
responseStream << "\t\t\t\t\t<input class=\"form-control\" type=\"text\" class=\"";
|
||||
#line 125 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( emailInputClass );
|
||||
responseStream << "\" name=\"email\" id=\"email\" placeholder=\"E-Mail\" value=\"";
|
||||
#line 125 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( email );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t\t\t\t\t<label>";
|
||||
#line 126 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Hast du dir deine Passphrase notiert oder gemerkt?") );
|
||||
responseStream << "</label>\n";
|
||||
responseStream << "\t\t\t\t\t<input class=\"form-control\" type=\"hidden\" name=\"ask_passphrase\" value=\"true\">\n";
|
||||
responseStream << "\t\t\t\t\t<div class=\"";
|
||||
#line 128 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( passphraseRadioClass );
|
||||
responseStream << "\">\n";
|
||||
responseStream << "\t\t\t\t\t\t<div class=\"radio\">\n";
|
||||
responseStream << "\t\t\t\t\t\t <label class=\"form-label\" class=\"radio-label mr-4\">\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<input class=\"form-control\" name=\"passphrase_memorized\" onclick=\"removeGroupInvalidClass()\" type=\"radio\" value=\"true\">";
|
||||
#line 131 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Ja") );
|
||||
responseStream << " <i class=\"input-frame\"></i>\n";
|
||||
responseStream << "\t\t\t\t\t\t </label>\n";
|
||||
responseStream << "\t\t\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t\t\t<div class=\"radio\">\n";
|
||||
responseStream << "\t\t\t\t\t\t <label class=\"form-label\" class=\"radio-label\">\n";
|
||||
responseStream << "\t\t\t\t\t\t\t<input class=\"form-control\" name=\"passphrase_memorized\" onclick=\"removeGroupInvalidClass()\" type=\"radio\" value=\"false\">";
|
||||
#line 136 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Nein") );
|
||||
responseStream << " <i class=\"input-frame\"></i>\n";
|
||||
responseStream << "\t\t\t\t\t\t </label>\n";
|
||||
responseStream << "\t\t\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t\t <button type=\"submit\" class=\"center-form-submit form-button\" name=\"ask\" >";
|
||||
#line 140 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Absenden") );
|
||||
responseStream << "</button>\n";
|
||||
responseStream << "\t\t\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t\t</form>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t ";
|
||||
#line 144 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
} else if(state == PAGE_WAIT_EMAIL) { responseStream << "\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 145 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Dir wird eine E-Mail zugeschickt um dein Passwort zurückzusetzen.") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t ";
|
||||
#line 146 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
} else if(state == PAGE_WAIT_ADMIN) { responseStream << "\n";
|
||||
responseStream << "\t\t\t";
|
||||
#line 147 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Der Admin hat eine E-Mail bekommen und wird sich bei dir melden.") );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t ";
|
||||
#line 148 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
} else if(state == PAGE_EMAIL_ALREADY_SEND) { responseStream << "\n";
|
||||
responseStream << "\t\t\t<p>";
|
||||
#line 149 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Du hast bereits eine E-Mail bekommen. Bitte schau auch in dein Spam-Verzeichnis nach. ") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t<p>";
|
||||
#line 150 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( langCatalog->gettext("Du hast wirklich keine E-Mail erhalten und auch schon ein paar Minuten gewartet?") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t<p><b><a href=\"mailto:";
|
||||
#line 151 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( adminReceiver );
|
||||
responseStream << "?subject=Error Reset Password email&body=Hallo Dario,%0D%0A%0D%0Aich habe keine Passwort zurücksetzen E-Mail erhalten,%0D%0Akannst du das prüfen?%0D%0A%0D%0AMit freundlichen Grüßen%0D%0A\">";
|
||||
#line 151 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
responseStream << ( langCatalog->gettext("E-Mail an Support schicken"));
|
||||
responseStream << "</a></b></p>\n";
|
||||
responseStream << "\t ";
|
||||
#line 152 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp"
|
||||
} responseStream << "\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << "\t<script type=\"text/javascript\">\n";
|
||||
responseStream << "\t\tfunction removeGroupInvalidClass() {\n";
|
||||
responseStream << "\t\t\tvar elements = document.getElementsByClassName(\"group-is-invalid\");\n";
|
||||
responseStream << "\t\t\tif(elements.length > 0) {\n";
|
||||
responseStream << "\t\t\t\telements[0].classList.remove(\"group-is-invalid\");\n";
|
||||
responseStream << "\t\t\t}\n";
|
||||
responseStream << "\t\t}\n";
|
||||
responseStream << "\t</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/ResetPassword.h
Normal file
18
login_server/src/cpp/HTTPInterface/ResetPassword.h
Normal file
@ -0,0 +1,18 @@
|
||||
#ifndef ResetPassword_INCLUDED
|
||||
#define ResetPassword_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "PageRequestMessagedHandler.h"
|
||||
|
||||
|
||||
class ResetPassword: public PageRequestMessagedHandler
|
||||
{
|
||||
public:
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // ResetPassword_INCLUDED
|
||||
280
login_server/src/cpp/HTTPInterface/SaveKeysPage.cpp
Normal file
280
login_server/src/cpp/HTTPInterface/SaveKeysPage.cpp
Normal file
@ -0,0 +1,280 @@
|
||||
#include "SaveKeysPage.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\\saveKeys.cpsp"
|
||||
|
||||
#include "Poco/Net/HTTPServerParams.h"
|
||||
|
||||
enum PageState
|
||||
{
|
||||
PAGE_ASK,
|
||||
PAGE_SHOW_PUBKEY,
|
||||
PAGE_ERROR
|
||||
};
|
||||
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header_old.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
SaveKeysPage::SaveKeysPage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void SaveKeysPage::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\\src\\cpsp\\saveKeys.cpsp"
|
||||
|
||||
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();
|
||||
PageState state = PAGE_ASK;
|
||||
auto uri_start = ServerConfig::g_php_serverPath;//request.serverParams().getServerName();
|
||||
|
||||
// skip asking user if he like to save keys and passphrase on server for now!
|
||||
state = PAGE_SHOW_PUBKEY;
|
||||
if(!mSession->generateKeys(true, true)) {
|
||||
getErrors(mSession);
|
||||
}
|
||||
/*
|
||||
if(!form.empty()) {
|
||||
// privkey
|
||||
auto savePrivkeyChoice = form.get("save-privkey");
|
||||
bool savePrivkey = false;
|
||||
if(savePrivkeyChoice == "yes") {
|
||||
if(!hasPassword) {
|
||||
// check pwd
|
||||
auto pwd = form.get("save-privkey-password", "");
|
||||
|
||||
if(!mSession->isPwdValid(pwd)) {
|
||||
addError(new Error("Passwort", "Das Passwort stimmt nicht. Bitte verwende dein Passwort von der Registrierung"), false);
|
||||
hasErrors = true;
|
||||
} else {
|
||||
savePrivkey = true;
|
||||
}
|
||||
} else {
|
||||
savePrivkey = true;
|
||||
}
|
||||
}
|
||||
if(!hasErrors) {
|
||||
auto savePassphraseChoice = form.get("save-passphrase");
|
||||
bool savePassphrase = false;
|
||||
if(savePassphraseChoice == "yes") {
|
||||
savePassphrase = true;
|
||||
}
|
||||
if(!mSession->generateKeys(savePrivkey, savePassphrase)) {
|
||||
hasErrors = true;
|
||||
} else if(mSession->getSessionState() >= SESSION_STATE_KEY_PAIR_GENERATED) {
|
||||
state = PAGE_SHOW_PUBKEY;
|
||||
|
||||
//printf("uri_start: %s\n", uri_start.data());
|
||||
//response.redirect(uri_start + "/");
|
||||
} else {
|
||||
state = PAGE_ERROR;
|
||||
}
|
||||
}
|
||||
//printf("SaveKeysPage: hasErrors: %d, session state: %d, target state: %d\n",
|
||||
//hasErrors, mSession->getSessionState(), SESSION_STATE_KEY_PAIR_GENERATED);
|
||||
}*/
|
||||
getErrors(mSession);
|
||||
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>Daten speichern</h1>\n";
|
||||
responseStream << "\t";
|
||||
#line 75 "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"
|
||||
if(state == PAGE_ASK) { responseStream << "\n";
|
||||
responseStream << "\t<form method=\"POST\">\n";
|
||||
responseStream << "\t\t<fieldset>\n";
|
||||
responseStream << "\t\t\t<legend>Gradido Private Key speichern</legend>\n";
|
||||
responseStream << "\t\t\t<div class=\"grd_text\">\n";
|
||||
responseStream << "\t\t\t\t<p>Möchtest du deinen Gradido Private Key auf dem Server mit deinem Passwort verschlüsselt speichern?</p>\n";
|
||||
responseStream << "\t\t\t\t<p>Wenn du ihn speicherst brauchst du dich in Zukunft nur mit deiner E-Mail und deinem Passwort einzuloggen.</p>\n";
|
||||
responseStream << "\t\t\t\t<p>Wenn du ihn nicht speicherst, müsstest du jedes mal wenn du eine Transaktion machen willst, deine Passphrase hier reinkopieren.</p>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<input id=\"save-privkey-yes\" type=\"radio\" name=\"save-privkey\" value=\"yes\" checked/>\n";
|
||||
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"
|
||||
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";
|
||||
responseStream << "\t\t\t\t\t<label for=\"save-privkey-password\">Passwort</label>\n";
|
||||
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"
|
||||
} 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";
|
||||
responseStream << "\t\t\t\t<label class=\"grd_radio_label\" for=\"save-privkey-no\">Nein, ich kümmere mich selbst darum!</label>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t</fieldset>\n";
|
||||
responseStream << "\t\t<fieldset>\n";
|
||||
responseStream << "\t\t\t<legend>Passphrase speichern</legend>\n";
|
||||
responseStream << "\t\t\t<div class=\"grd_text\">\n";
|
||||
responseStream << "\t\t\t\t<p>Möchtest du deine Passphrase mit dem Server-Admin-Key verschlüsselt auf dem Server gespeichert haben?</p>\n";
|
||||
responseStream << "\t\t\t\t<p>Dann kann dir der Server-Admin deine Passphrase zuschicken wenn du sie verlegt hast. </p>\n";
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<input id=\"save-passphrase-yes\" type=\"radio\" name=\"save-passphrase\" value=\"yes\" checked/>\n";
|
||||
responseStream << "\t\t\t\t<label class=\"grd_radio_label\" for=\"save-passphrase-yes\">Ja, bitte speichern!</label>\n";
|
||||
responseStream << "\t\t\t</p>\n";
|
||||
responseStream << "\t\t\t<p class=\"grd_small\">\n";
|
||||
responseStream << "\t\t\t\t<input id=\"save-passphrase-no\" type=\"radio\" name=\"save-passphrase\" value=\"no\"/>\n";
|
||||
responseStream << "\t\t\t\t<label class=\"grd_radio_label\" for=\"save-passphrase-no\">Nein, ich vertraue nur mir selbst!</label>\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\" value=\"Speichern\">\n";
|
||||
responseStream << "\t</form>\n";
|
||||
responseStream << "\t";
|
||||
#line 118 "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"
|
||||
responseStream << ( gettext("Daten gespeichert!") );
|
||||
responseStream << "</p>\n";
|
||||
responseStream << "\t\t\t<p>";
|
||||
#line 121 "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";
|
||||
responseStream << "\t\t\t<!--<p>Deine Daten werden nun verschlüsselt und gespeichert.</p>-->\n";
|
||||
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() );
|
||||
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"
|
||||
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"
|
||||
} 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"
|
||||
responseStream << ( mSession->getSessionStateString() );
|
||||
responseStream << "\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << "\t";
|
||||
#line 135 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\saveKeys.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/SaveKeysPage.h
Normal file
20
login_server/src/cpp/HTTPInterface/SaveKeysPage.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef SaveKeysPage_INCLUDED
|
||||
#define SaveKeysPage_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class SaveKeysPage: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
SaveKeysPage(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // SaveKeysPage_INCLUDED
|
||||
@ -0,0 +1,26 @@
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
Languages SessionHTTPRequestHandler::chooseLanguage(Poco::Net::HTTPServerRequest& request, std::string lang_btn /*= ""*/)
|
||||
{
|
||||
Languages lang = LANG_NULL;
|
||||
if (mSession) {
|
||||
lang = mSession->getLanguage();
|
||||
}
|
||||
Languages langCurrent = PageRequestMessagedHandler::chooseLanguage(request, lang_btn);
|
||||
if (langCurrent != LANG_NULL && lang != langCurrent) {
|
||||
lang = langCurrent;
|
||||
if (mSession) {
|
||||
mSession->setLanguage(langCurrent);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return lang;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
@ -0,0 +1,23 @@
|
||||
#ifndef SESSION_HTTP_REQUEST_HANDLER_INCLUDED
|
||||
#define SESSION_HTTP_REQUEST_HANDLER_INCLUDED
|
||||
|
||||
#include "../model/Session.h"
|
||||
#include "PageRequestMessagedHandler.h"
|
||||
|
||||
|
||||
|
||||
class SessionHTTPRequestHandler : public PageRequestMessagedHandler
|
||||
{
|
||||
public:
|
||||
SessionHTTPRequestHandler(Session* session) : mSession(session) {}
|
||||
|
||||
protected:
|
||||
Session* mSession;
|
||||
|
||||
Languages chooseLanguage(Poco::Net::HTTPServerRequest& request, std::string lang_btn = "");
|
||||
inline const char* gettext(const char* text) { if (!mSession || !mSession->getLanguageCatalog()) return text; return mSession->getLanguageCatalog()->gettext(text); }
|
||||
|
||||
};
|
||||
|
||||
|
||||
#endif // SESSION_HTTP_REQUEST_HANDLER_INCLUDED
|
||||
316
login_server/src/cpp/HTTPInterface/TranslatePassphrase.cpp
Normal file
316
login_server/src/cpp/HTTPInterface/TranslatePassphrase.cpp
Normal file
@ -0,0 +1,316 @@
|
||||
#include "TranslatePassphrase.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\\translatePassphrase.cpsp"
|
||||
|
||||
#include "../Crypto/KeyPair.h"
|
||||
#include "../ServerConfig.h"
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
TranslatePassphrase::TranslatePassphrase(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void TranslatePassphrase::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 11 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\translatePassphrase.cpsp"
|
||||
|
||||
chooseLanguage(request);
|
||||
// variable needed for flags
|
||||
auto lang = mSession->getLanguage();
|
||||
auto uri_start = ServerConfig::g_serverPath;
|
||||
const char* pageName = gettext("Passphrase Transformieren");
|
||||
std::string passphrase;
|
||||
auto role = mSession->getNewUser()->getModel()->getRole();
|
||||
std::string inputPassphrase;
|
||||
|
||||
Mnemonic* wordSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER];
|
||||
Mnemonic* targetSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER_FIXED_CASES];
|
||||
if(lang == LANG_DE) {
|
||||
wordSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER_FIXED_CASES];
|
||||
targetSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER];
|
||||
}
|
||||
|
||||
if(!form.empty())
|
||||
{
|
||||
|
||||
inputPassphrase = form.get("inputPassphrase", "");
|
||||
auto localPassphrase = KeyPair::filterPassphrase(inputPassphrase);
|
||||
|
||||
auto btnGenerate = form.get("btnGenerate", "");
|
||||
if("" != btnGenerate) {
|
||||
mSession->generatePassphrase();
|
||||
localPassphrase = mSession->getOldPassphrase();
|
||||
inputPassphrase = localPassphrase;
|
||||
}
|
||||
|
||||
if(localPassphrase != "" && !User::validatePassphrase(localPassphrase, &wordSource)) {
|
||||
addError(new Error(
|
||||
gettext("Fehler"),
|
||||
gettext("Diese Passphrase ist ungültig, bitte überprüfen oder neu generieren (lassen).")
|
||||
), false);
|
||||
} else {
|
||||
if(wordSource == &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER]) {
|
||||
targetSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_GRADIDO_BOOK_GERMAN_RANDOM_ORDER_FIXED_CASES];
|
||||
} else {
|
||||
targetSource = &ServerConfig::g_Mnemonic_WordLists[ServerConfig::MNEMONIC_BIP0039_SORTED_ORDER];
|
||||
}
|
||||
passphrase = KeyPair::passphraseTransform(localPassphrase, wordSource, targetSource);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
#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 login_header.cpsp
|
||||
// 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";
|
||||
responseStream << "<div class=\"authentication-theme auth-style_1\">\n";
|
||||
responseStream << " <div class=\"row\">\n";
|
||||
responseStream << " <div class=\"col-12 logo-section\">\n";
|
||||
responseStream << " <a href=\"";
|
||||
#line 5 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login_header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "\" class=\"logo\">\n";
|
||||
responseStream << " <picture>\n";
|
||||
responseStream << "\t\t\t\t<source srcset=\"";
|
||||
#line 7 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login_header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_schrift.webp\" type=\"image/webp\">\n";
|
||||
responseStream << "\t\t\t\t<source srcset=\"";
|
||||
#line 8 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login_header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_schrift.png\" type=\"image/png\"> \n";
|
||||
responseStream << "\t\t\t\t<img src=\"";
|
||||
#line 9 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login_header.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "img/logo_schrift.png\" alt=\"logo\" />\n";
|
||||
responseStream << "\t\t\t</picture>\n";
|
||||
responseStream << " </a>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"row\">\n";
|
||||
responseStream << " <div class=\"col-lg-5 col-md-7 col-sm-9 col-11 mx-auto\">\n";
|
||||
responseStream << " <div class=\"grid\">\n";
|
||||
responseStream << " <div class=\"center-ul-container\">\n";
|
||||
responseStream << " ";
|
||||
#line 18 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\login_header.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"grid-body\">";
|
||||
// end include login_header.cpsp
|
||||
// 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=\"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"
|
||||
responseStream << ( gettext("Passphrase umwandeln") );
|
||||
responseStream << "</h2>\n";
|
||||
responseStream << "</div>\n";
|
||||
responseStream << "<div class=\"item-wrapper\">\n";
|
||||
responseStream << "<div class=\"row mb-3\">\n";
|
||||
responseStream << " <div class=\"col-md-10 mx-auto\">\n";
|
||||
responseStream << "\t<div class=\"form-group row showcase_row_area\">\n";
|
||||
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"
|
||||
responseStream << ( gettext("Was zu tun ist:") );
|
||||
responseStream << "</h5>\n";
|
||||
responseStream << "\t\t <p>";
|
||||
#line 68 "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"
|
||||
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"
|
||||
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"
|
||||
responseStream << ( gettext("deine Passphrase") );
|
||||
responseStream << "\">";
|
||||
#line 75 "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"
|
||||
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"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t\t</form>\n";
|
||||
responseStream << "\t </div>\n";
|
||||
responseStream << "\t ";
|
||||
#line 83 "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"
|
||||
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"
|
||||
} responseStream << "\n";
|
||||
responseStream << "\t </div>\n";
|
||||
responseStream << "\t</div>\n";
|
||||
responseStream << " </div>\n";
|
||||
// begin include footer_ripple.cpsp
|
||||
responseStream << "\t\t\t</div>\n";
|
||||
responseStream << "\t\t</div>\n";
|
||||
responseStream << " <!-- content viewport ends -->\n";
|
||||
responseStream << " <!-- partial:partials/_footer.html -->\n";
|
||||
responseStream << " <footer class=\"footer\">\n";
|
||||
responseStream << " <div class=\"row\">\n";
|
||||
responseStream << " <div class=\"col-sm-6 text-center text-sm-right order-sm-1\">\n";
|
||||
responseStream << " <ul class=\"text-gray\">\n";
|
||||
responseStream << "\t\t\t\t<li><a href=\"https://gradido.net/de/datenschutz/\" target=\"_blank\">Datenschutzerklärung</a></li>\n";
|
||||
responseStream << " <li><a href=\"https://gradido.net/de/impressum/\" target=\"_blank\">Impressum</a></li>\n";
|
||||
responseStream << " </ul>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"col-sm-6 text-center text-sm-left mt-3 mt-sm-0\">\n";
|
||||
responseStream << " <small class=\"text-muted d-block\">Copyright © 2020 Gradido</small>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " </footer>\n";
|
||||
responseStream << " <!-- partial -->\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <!-- page content ends -->\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"grd-time-used dev-info\">\n";
|
||||
responseStream << " ";
|
||||
#line 23 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\footer_ripple.cpsp"
|
||||
responseStream << ( mTimeProfiler.string() );
|
||||
responseStream << "\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <!--page body ends -->\n";
|
||||
responseStream << " <!-- SCRIPT LOADING START FORM HERE /////////////-->\n";
|
||||
responseStream << " <!-- plugins:js -->\n";
|
||||
responseStream << " <!--<script src=\"../../../assets/vendors/js/core.js\"></script>-->\n";
|
||||
responseStream << " <!--<script src=\"../../../assets/vendors/js/vendor.addons.js\"></script>-->\n";
|
||||
responseStream << " <!-- endinject -->\n";
|
||||
responseStream << " <!-- Vendor Js For This Page Ends-->\n";
|
||||
responseStream << " <!--<script src=\"../../../assets/vendors/chartjs/Chart.min.js\"></script>-->\n";
|
||||
responseStream << " <!-- Vendor Js For This Page Ends-->\n";
|
||||
responseStream << " <!-- build:js -->\n";
|
||||
responseStream << " <!--<script src=\"../../../assets/js/template.js\"></script>-->\n";
|
||||
responseStream << " <script src=\"";
|
||||
#line 36 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\footer_ripple.cpsp"
|
||||
responseStream << ( ServerConfig::g_php_serverPath );
|
||||
responseStream << "/js/basic.js\"></script>\n";
|
||||
responseStream << " <!--<script src=\"../../../assets/js/dashboard.js\"></script>-->\n";
|
||||
responseStream << " <!-- endbuild -->\n";
|
||||
responseStream << " </body>\n";
|
||||
responseStream << "</html>\n";
|
||||
responseStream << " ";
|
||||
// end include footer_ripple.cpsp
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
20
login_server/src/cpp/HTTPInterface/TranslatePassphrase.h
Normal file
20
login_server/src/cpp/HTTPInterface/TranslatePassphrase.h
Normal file
@ -0,0 +1,20 @@
|
||||
#ifndef TranslatePassphrase_INCLUDED
|
||||
#define TranslatePassphrase_INCLUDED
|
||||
|
||||
|
||||
#include "Poco/Net/HTTPRequestHandler.h"
|
||||
|
||||
|
||||
#include "SessionHTTPRequestHandler.h"
|
||||
|
||||
|
||||
class TranslatePassphrase: public SessionHTTPRequestHandler
|
||||
{
|
||||
public:
|
||||
TranslatePassphrase(Session*);
|
||||
|
||||
void handleRequest(Poco::Net::HTTPServerRequest& request, Poco::Net::HTTPServerResponse& response);
|
||||
};
|
||||
|
||||
|
||||
#endif // TranslatePassphrase_INCLUDED
|
||||
214
login_server/src/cpp/HTTPInterface/UpdateUserPasswordPage.cpp
Normal file
214
login_server/src/cpp/HTTPInterface/UpdateUserPasswordPage.cpp
Normal file
@ -0,0 +1,214 @@
|
||||
#include "UpdateUserPasswordPage.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\\UpdateUserPassword.cpsp"
|
||||
|
||||
#include "../SingletonManager/SessionManager.h"
|
||||
#include "../tasks/AuthenticatedEncryptionCreateKeyTask.h"
|
||||
#include "Poco/Net/HTTPCookie.h"
|
||||
|
||||
enum PageState {
|
||||
PAGE_STATE_ASK_PASSWORD,
|
||||
PAGE_STATE_SUCCEED
|
||||
};
|
||||
|
||||
#line 1 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\header.cpsp"
|
||||
|
||||
#include "../ServerConfig.h"
|
||||
|
||||
|
||||
UpdateUserPasswordPage::UpdateUserPasswordPage(Session* arg):
|
||||
SessionHTTPRequestHandler(arg)
|
||||
{
|
||||
}
|
||||
|
||||
|
||||
void UpdateUserPasswordPage::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 17 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\UpdateUserPassword.cpsp"
|
||||
|
||||
const char* pageName = "Passwort bestimmen";
|
||||
auto user = mSession->getNewUser();
|
||||
auto sm = SessionManager::getInstance();
|
||||
auto uri_start = ServerConfig::g_serverPath;
|
||||
PageState state = PAGE_STATE_ASK_PASSWORD;
|
||||
|
||||
// remove old cookies if exist
|
||||
sm->deleteLoginCookies(request, response, mSession);
|
||||
// save login cookie, because maybe we've get an new session
|
||||
response.addCookie(mSession->getLoginCookie());
|
||||
|
||||
if(!form.empty()) {
|
||||
auto pwd = form.get("register-password", "");
|
||||
if(pwd != "") {
|
||||
if(pwd != form.get("register-password2", "")) {
|
||||
mSession->addError(new Error("Passwort", "Passwörter sind nicht identisch."), false);
|
||||
} else if(SessionManager::getInstance()->checkPwdValidation(pwd, mSession)) {
|
||||
auto sessionState = mSession->getSessionState();
|
||||
|
||||
if(user->setNewPassword(pwd) >= 0) {
|
||||
//std::string referUri = request.get("Referer", uri_start + "/");
|
||||
//printf("[updateUserPasswordPage] redirect to referUri: %s\n", referUri.data());
|
||||
|
||||
// I think we can savly assume that this session was loaded from verification code
|
||||
//! \return 1 = konto already activated
|
||||
//! -1 = invalid code
|
||||
//! -2 = critical error
|
||||
//! 0 = ok
|
||||
auto code = mSession->getEmailVerificationCode();
|
||||
int retUpdateEmailCode = 0;
|
||||
if(code) {
|
||||
retUpdateEmailCode = mSession->updateEmailVerification(mSession->getEmailVerificationCode());
|
||||
}
|
||||
//mSession->getErrors(user);
|
||||
if(-2 == retUpdateEmailCode || -1 == retUpdateEmailCode || 1 == retUpdateEmailCode) {
|
||||
response.redirect(uri_start + "/error500");
|
||||
return;
|
||||
}
|
||||
if(sessionState == SESSION_STATE_RESET_PASSWORD_REQUEST) {
|
||||
state = PAGE_STATE_SUCCEED;
|
||||
mSession->updateState(SESSION_STATE_RESET_PASSWORD_SUCCEED);
|
||||
sm->deleteLoginCookies(request, response, mSession);
|
||||
sm->releaseSession(mSession);
|
||||
mSession = nullptr;
|
||||
} else {
|
||||
response.redirect(uri_start + "/passphrase");
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if(mSession) {
|
||||
getErrors(mSession);
|
||||
}
|
||||
//getErrors(user);
|
||||
//printf("session state end [UpdateUserPassword Page]: %s\n", mSession->getSessionStateString());
|
||||
#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 76 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\UpdateUserPassword.cpsp"
|
||||
responseStream << ( getErrorsHtml() );
|
||||
responseStream << "\n";
|
||||
responseStream << "<div class=\"center-form-container\">\n";
|
||||
responseStream << "\t";
|
||||
#line 78 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\UpdateUserPassword.cpsp"
|
||||
if(PAGE_STATE_ASK_PASSWORD == state ) { responseStream << "\n";
|
||||
responseStream << " <div class=\"center-form-title\">\n";
|
||||
responseStream << " <h1>Passwort bestimmen</h1>\n";
|
||||
responseStream << " </div>\n";
|
||||
responseStream << " <div class=\"center-form-form\">\n";
|
||||
responseStream << "\t\t<form method=\"POST\">\n";
|
||||
responseStream << "\t\t\t<p>\n";
|
||||
responseStream << "\t\t\t\tBitte denke dir ein sicheres Passwort aus, das mindestens 8 Zeichen lang ist, einen Klein- und einen Großbuchstaben enthält,\n";
|
||||
responseStream << "\t\t\t\teine Zahl und eines der folgenden Sonderzeichen: @$!%*?&+-\n";
|
||||
responseStream << "\t\t\t</p>\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";
|
||||
responseStream << "\t\t\t<label class=\"form-label\" for=\"register-password2\">Passwort Bestätigung</label>\n";
|
||||
responseStream << "\t\t\t<input class=\"form-control\" id=\"register-password2\" type=\"password\" name=\"register-password2\"/>\n";
|
||||
responseStream << "\t\t\t<input class=\"grd-form-bn grd-form-bn-succeed grd_clickable\" type=\"submit\" name=\"submit\" value=\"Änderung(en) speichern\">\n";
|
||||
responseStream << "\t\t</form>\n";
|
||||
responseStream << "\t";
|
||||
#line 94 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\UpdateUserPassword.cpsp"
|
||||
} else if(PAGE_STATE_SUCCEED == state) { responseStream << "\n";
|
||||
responseStream << "\t\t<p>Deine Daten werden jetzt mit dem neuen Passwort verschlüsselt. Du kannst dich in etwa 1 Minute mit deinem neuen Passwort einloggen</p>\n";
|
||||
responseStream << "\t\t<a class=\"link-button\" href=\"";
|
||||
#line 96 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\UpdateUserPassword.cpsp"
|
||||
responseStream << ( uri_start );
|
||||
responseStream << "/login\">Zum Login</a>\n";
|
||||
responseStream << "\t";
|
||||
#line 97 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\UpdateUserPassword.cpsp"
|
||||
} responseStream << "\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";
|
||||
if (_compressResponse) _gzipStream.close();
|
||||
}
|
||||
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