diff --git a/src/cpp/HTTPInterface/AdminCheckUserBackup.cpp b/src/cpp/HTTPInterface/AdminCheckUserBackup.cpp index 2f195c037..5ba2c0eca 100644 --- a/src/cpp/HTTPInterface/AdminCheckUserBackup.cpp +++ b/src/cpp/HTTPInterface/AdminCheckUserBackup.cpp @@ -52,13 +52,13 @@ void AdminCheckUserBackup::handleRequest(Poco::Net::HTTPServerRequest& request, auto con = cm->getConnection(CONNECTION_MYSQL_LOGIN_SERVER); Poco::Data::Statement select(con); std::list 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)" + 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>(); @@ -76,9 +76,21 @@ void AdminCheckUserBackup::handleRequest(Poco::Net::HTTPServerRequest& request, } else { keys.generateFromPassphrase(passphrase.data(), wordSource); } + bool matching = false; if(keys.isPubkeysTheSame(pubkey.value().content().data())) { - continue; + 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); @@ -165,11 +177,11 @@ void AdminCheckUserBackup::handleRequest(Poco::Net::HTTPServerRequest& request, responseStream << "
\n"; responseStream << "\t

Admin Check User Backup

\n"; responseStream << "\t"; -#line 79 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" +#line 91 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" responseStream << ( getErrorsHtml() ); responseStream << "\n"; responseStream << "\t

Unmatching count: "; -#line 80 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" +#line 92 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" responseStream << ( notMatchingEntrys.size() ); responseStream << "

\n"; responseStream << "\t\n"; @@ -178,34 +190,34 @@ void AdminCheckUserBackup::handleRequest(Poco::Net::HTTPServerRequest& request, responseStream << "\t\t\n"; responseStream << "\t\t\n"; responseStream << "\t\t\t"; -#line 86 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" +#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\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t\t\n"; responseStream << "\t\t\t"; -#line 96 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" +#line 108 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" } responseStream << "\n"; responseStream << "\t\t\n"; responseStream << "\n"; diff --git a/src/cpsp/adminCheckUserBackup.cpsp b/src/cpsp/adminCheckUserBackup.cpsp index 29734912b..8751c8348 100644 --- a/src/cpsp/adminCheckUserBackup.cpsp +++ b/src/cpsp/adminCheckUserBackup.cpsp @@ -31,13 +31,13 @@ struct SListEntry auto con = cm->getConnection(CONNECTION_MYSQL_LOGIN_SERVER); Poco::Data::Statement select(con); std::list 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)" + 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>(); @@ -55,9 +55,21 @@ struct SListEntry } else { keys.generateFromPassphrase(passphrase.data(), wordSource); } + bool matching = false; if(keys.isPubkeysTheSame(pubkey.value().content().data())) { - continue; + 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);
"; -#line 90 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" +#line 102 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" responseStream << ( userModel->getID() ); responseStream << ""; -#line 91 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" +#line 103 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" responseStream << ( userModel->getFirstName() ); responseStream << ""; -#line 92 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" +#line 104 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" responseStream << ( userModel->getLastName() ); responseStream << ""; -#line 93 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" +#line 105 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" responseStream << ( userModel->getEmail() ); responseStream << ""; -#line 94 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" +#line 106 "F:\\Gradido\\gradido_login_server\\src\\cpsp\\adminCheckUserBackup.cpsp" responseStream << ( (*it).backups.size() ); responseStream << "