Merge branch 'master' into password-component

This commit is contained in:
Moriz Wahl 2021-06-29 14:35:44 +02:00
commit e30bc667d0
80 changed files with 1896 additions and 840 deletions

View File

@ -50,13 +50,7 @@ jobs:
##########################################################################
- name: login server | Build `release` image
run: |
docker build --target release -t "gradido/login_server:release" -f ./login_server/Dockerfile login_server/
#docker save "gradido/login_server:test" > /tmp/login_server.tar
#- name: Upload Artifact
# uses: actions/upload-artifact@v2
#with:
# name: docker-login-server-test
#path: /tmp/login_server.tar
docker build -t "gradido/login_server:release" -f ./login_server/Dockerfile login_server/
##############################################################################
# JOB: DOCKER BUILD TEST COMMUNITY SERVER ####################################
@ -251,7 +245,7 @@ jobs:
##########################################################################
- name: login server | Build `test` image
run: |
docker build --target test -t "gradido/login_server:test" -f ./login_server/Dockerfile login_server/
docker build -t "gradido/login_server:test" -f ./login_server/Dockerfiles/ubuntu/Dockerfile.test login_server/
##########################################################################
# UNIT TESTS BACKEND LOGIN-SERVER #######################################
##########################################################################
@ -268,7 +262,7 @@ jobs:
report_name: Coverage Backend Login
type: lcov
result_path: ./coverage/coverage.info
min_coverage: 13
min_coverage: 25
token: ${{ github.token }}
##############################################################################
@ -300,7 +294,7 @@ jobs:
run: echo "::set-output name=id::$(docker network ls | grep github_network | awk '{ print $1 }')"
id: network
- name: Start Login-Server
run: docker run --network ${{ steps.network.outputs.id }} --name=login-server -d gradido/login_server:default
run: docker run --network ${{ steps.network.outputs.id }} --name=login-server -d gradido/login_server:with-config
- name: get login-server container id
run: echo "::set-output name=id::$(docker container ls | grep login_server | awk '{ print $1 }')"
id: login_server_container
@ -341,7 +335,7 @@ jobs:
report_name: Coverage Backend Community
type: phpunit
result_path: ./coverage/coverage.info
min_coverage: 10
min_coverage: 14
token: ${{ github.token }}
#test:

View File

@ -4,8 +4,66 @@ All notable changes to this project will be documented in this file. Dates are d
Generated by [`auto-changelog`](https://github.com/CookPete/auto-changelog).
#### [1.1.1](https://github.com/gradido/gradido/compare/1.1.0...1.1.1)
- Auto deploy [`#580`](https://github.com/gradido/gradido/pull/580)
- update transfer email text [`#574`](https://github.com/gradido/gradido/pull/574)
- update mysql because tuple has changed [`#576`](https://github.com/gradido/gradido/pull/576)
- Login fix pending transactions [`#578`](https://github.com/gradido/gradido/pull/578)
- add test to prevent bug in future [`630d667`](https://github.com/gradido/gradido/commit/630d667e996870a1bf9aa9586b0467d58419e525)
- use standard path. add nginx example [`ac249b4`](https://github.com/gradido/gradido/commit/ac249b46830a8039aec52d30b48084b50a264b6f)
- add autodeploy bash scripts [`f49cf4d`](https://github.com/gradido/gradido/commit/f49cf4d7f8054d87efa1e12055a7ef0c6d3b9872)
#### [1.1.0](https://github.com/gradido/gradido/compare/1.0.2...1.1.0)
> 17 June 2021
- add first error additional as msg [`#573`](https://github.com/gradido/gradido/pull/573)
- fix: Remove Grouping for Max Error [`#572`](https://github.com/gradido/gradido/pull/572)
- fix: API Call for Reset Password [`#571`](https://github.com/gradido/gradido/pull/571)
- Login reset password [`#570`](https://github.com/gradido/gradido/pull/570)
- Hide unuse components in profil [`#566`](https://github.com/gradido/gradido/pull/566)
- fix: Thousend Dividers on GDD Send Amount Field [`#567`](https://github.com/gradido/gradido/pull/567)
- reorganisiere Dockerfiles [`#550`](https://github.com/gradido/gradido/pull/550)
- hot fixes shown by test [`#551`](https://github.com/gradido/gradido/pull/551)
- fix to big text ths [`#565`](https://github.com/gradido/gradido/pull/565)
- feat: Trim Email on Blur [`#556`](https://github.com/gradido/gradido/pull/556)
- Mobile UI send gdd form [`#562`](https://github.com/gradido/gradido/pull/562)
- fix: Change Password Form [`#561`](https://github.com/gradido/gradido/pull/561)
- change userdata button disable rules [`#548`](https://github.com/gradido/gradido/pull/548)
- Change password require old password [`#519`](https://github.com/gradido/gradido/pull/519)
- feat: Test Forget Password [`#546`](https://github.com/gradido/gradido/pull/546)
- feat: Validate Change Username [`#545`](https://github.com/gradido/gradido/pull/545)
- Remove base input example login vue [`#524`](https://github.com/gradido/gradido/pull/524)
- Feature: Change Username [`#490`](https://github.com/gradido/gradido/pull/490)
- feat: Toaster to Display Messages [`#512`](https://github.com/gradido/gradido/pull/512)
- fix: Validation of GDD Send Amount Field [`#525`](https://github.com/gradido/gradido/pull/525)
- Community coverage [`#496`](https://github.com/gradido/gradido/pull/496)
- compare with last transaction sended [`#523`](https://github.com/gradido/gradido/pull/523)
- remove check decays for being at least 100 GDD cent [`#526`](https://github.com/gradido/gradido/pull/526)
- fix: Remove Target Date in Send Coins Request [`#518`](https://github.com/gradido/gradido/pull/518)
- Feature profile page bugs [`#511`](https://github.com/gradido/gradido/pull/511)
- fix: GDD Send Amount Input Field [`#491`](https://github.com/gradido/gradido/pull/491)
- change transfer confirmation email [`#485`](https://github.com/gradido/gradido/pull/485)
- Login wait on passwords with missing chars [`#487`](https://github.com/gradido/gradido/pull/487)
- fix problem with create User [`#486`](https://github.com/gradido/gradido/pull/486)
- Feature: Profile Page + Update API [`#474`](https://github.com/gradido/gradido/pull/474)
- add new API Call checkUsername [`#482`](https://github.com/gradido/gradido/pull/482)
- feat: Pagination Buttons for Transaction List [`#473`](https://github.com/gradido/gradido/pull/473)
- Login-Server & Community-Server Coverage [`#472`](https://github.com/gradido/gradido/pull/472)
- login without hedera [`#478`](https://github.com/gradido/gradido/pull/478)
- fix: Show Correct Version Number in Footer [`#475`](https://github.com/gradido/gradido/pull/475)
- refactor: Remove Element-UI [`#476`](https://github.com/gradido/gradido/pull/476)
- remove components Charts, Notification, SearchUser, ButtonCheckbox, Button RadioGroup, Breadcrumb [`159bff7`](https://github.com/gradido/gradido/commit/159bff71df20a5c48f93389b2f990f7fe54e53b9)
- fix bug, update dockerfiles to use dependencies without grpc [`dedcebd`](https://github.com/gradido/gradido/commit/dedcebdb95ee0f3dfd2ad62074d4181af38476a2)
- add warning to able to forward warnings from community server to client [`2fc3fe9`](https://github.com/gradido/gradido/commit/2fc3fe94a09bae199bf2f34f9df90e8fc3879c2b)
#### [1.0.2](https://github.com/gradido/gradido/compare/1.0.1...1.0.2)
> 27 May 2021
- feat: Test Transaction List [`#470`](https://github.com/gradido/gradido/pull/470)
- fixed problem with finding cpsp parse binary under windows with conan [`#471`](https://github.com/gradido/gradido/pull/471)
- fix: GDD Amount is Always Displayed with Two Digits [`#468`](https://github.com/gradido/gradido/pull/468)
- fix: Date Time Formats [`#469`](https://github.com/gradido/gradido/pull/469)
- Community ipv6 localhost [`#466`](https://github.com/gradido/gradido/pull/466)

View File

@ -151,7 +151,7 @@ class AppController extends Controller
if($last_migration) {
$current_db_version = $last_migration->db_version;
}
$php_data_version = 2;
$php_data_version = 3;
if($current_db_version < $php_data_version) {
$this->redirect(['controller' => 'Migrations', 'action' => 'migrate', 'html' => $html, 'db_version' => $current_db_version]);
}
@ -289,7 +289,7 @@ class AppController extends Controller
}
} else {
if(!$redirect) {
return ['state' => 'not found', 'msg' => 'invalid session'];
return ['state' => 'not found', 'msg' => 'invalid session', 'details' => $json];
}
if ($json['state'] === 'not found') {
$this->Flash->error(__('invalid session'));

View File

@ -69,6 +69,14 @@ class MigrationsController extends AppController
[$stateBalancesTable, 'updateAllBalances']
];
$new_db_version = 2;
} else if($current_db_version == 2) {
$commands = [
[$stateUserTransactionsTable, 'truncate'],
[$stateBalancesTable, 'truncate'],
[$transactionsTable, 'fillStateUserTransactions'],
[$stateBalancesTable, 'updateAllBalances']
];
$new_db_version = 3;
}
$migration_result = $this->callFunctions($commands);

View File

@ -165,13 +165,22 @@ class TransactionsTable extends Table
foreach($stateUserTransactions as $i => $su_transaction)
{
/*echo "i: $i<br>";
echo "state user transaction: <br>";
var_dump($su_transaction);
echo "<br>";*/
//var_dump($su_transaction);
//die("step");
// add decay transactions
// sender or receiver when user has sended money
// group name if creation
// type: gesendet / empfangen / geschöpft
// transaktion nr / id
// date
// balance
$transaction = $transaction_indiced[$su_transaction->transaction_id];
$final_transaction = [
'transaction_id' => $transaction->id,
'date' => $transaction->received,
'memo' => $transaction->memo
];
$prev = null;
if($i > 0 ) {
$prev = $stateUserTransactions[$i-1];
@ -179,18 +188,15 @@ class TransactionsTable extends Table
if($prev && $decay == true)
{
if($prev->balance > 0) {
$current = $su_transaction;
$current = $su_transaction;
$calculated_decay = $stateBalancesTable->calculateDecay($prev->balance, $prev->balance_date, $current->balance_date, true);
$balance = floatval($prev->balance - $calculated_decay['balance']);
if($balance)
if($balance > 100)
{
$final_transactions[] = [
'type' => 'decay',
$final_transactions['decay'] = [
'balance' => $balance,
'decay_duration' => $calculated_decay['interval']->format('%a days, %H hours, %I minutes, %S seconds'),
'memo' => ''
'decay_duration' => $calculated_decay['interval']->format('%a days, %H hours, %I minutes, %S seconds')
];
}
}
@ -208,52 +214,42 @@ class TransactionsTable extends Table
$creation = $transaction->transaction_creation;
$balance = $stateBalancesTable->calculateDecay($creation->amount, $creation->target_date, $transaction->received);
$final_transactions[] = [
'name' => 'Gradido Akademie',
'type' => 'creation',
'transaction_id' => $transaction->id,
'date' => $transaction->received,// $creation->target_date,
'target_date' => $creation->target_date,
'creation_amount' => $creation->amount,
'balance' => $balance,
'memo' => $transaction->memo
];
$final_transaction['name'] = 'Gradido Akademie';
$final_transaction['type'] = 'creation';
$final_transaction['target_date'] = $creation->target_date;
$final_transaction['creation_amount'] = $creation->amount;
$final_transaction['balance'] = $balance;
} else if($su_transaction->transaction_type_id == 2) { // transfer or send coins
$sendCoins = $transaction->transaction_send_coin;
$type = '';
$otherUser = null;
$final_transaction['balance'] = $sendCoins->amount;
$other_user_public = '';
if ($sendCoins->state_user_id == $user['id']) {
$type = 'send';
$final_transaction['type'] = 'send';
if(isset($involved_users[$sendCoins->receiver_user_id])) {
$otherUser = $involved_users[$sendCoins->receiver_user_id];
}
$other_user_public = bin2hex(stream_get_contents($sendCoins->receiver_public_key));
$final_transaction['pubkey'] = bin2hex(stream_get_contents($sendCoins->receiver_public_key));
} else if ($sendCoins->receiver_user_id == $user['id']) {
$type = 'receive';
$final_transaction['type'] = 'receive';
if(isset($involved_users[$sendCoins->state_user_id])) {
$otherUser = $involved_users[$sendCoins->state_user_id];
}
if($sendCoins->sender_public_key) {
$other_user_public = bin2hex(stream_get_contents($sendCoins->sender_public_key));
$final_transaction['pubkey'] = bin2hex(stream_get_contents($sendCoins->sender_public_key));
}
}
if(null == $otherUser) {
$otherUser = $stateUsersTable->newEntity();
}
$final_transactions[] = [
'name' => $otherUser->first_name . ' ' . $otherUser->last_name,
'email' => $otherUser->email,
'type' => $type,
'transaction_id' => $sendCoins->transaction_id,
'date' => $transaction->received,
'balance' => $sendCoins->amount,
'memo' => $transaction->memo,
'pubkey' => $other_user_public
];
$final_transaction['name'] = $otherUser->first_name . ' ' . $otherUser->last_name;
$final_transaction['email'] = $otherUser->email;
}
$final_transactions[] = $final_transaction;
if($i == $stateUserTransactionsCount-1 && $decay == true) {
$calculated_decay = $stateBalancesTable->calculateDecay(
$su_transaction->balance,
@ -264,16 +260,13 @@ class TransactionsTable extends Table
$duration = $decay_start_date->timeAgoInWords();
}
$balance = floatval($su_transaction->balance - $calculated_decay['balance']);
if($balance)
{
$final_transactions[] = [
'type' => 'decay',
'balance' => $balance,
'decay_duration' => $duration,
'last_decay' => true,
'memo' => ''
];
if($balance > 100) {
$final_transactions[] = [
'type' => 'decay',
'balance' => $balance,
'decay_duration' => $duration,
'memo' => ''
];
}
}
}

View File

@ -163,7 +163,8 @@ class TransactionCreation extends TransactionBase {
$transactionCreationEntity->target_date = $this->protoTransactionCreation->getTargetDate()->getSeconds();
$target_date = new FrozenTime($transactionCreationEntity->target_date);
$decayed_balance = $stateBalancesTable->calculateDecay($this->getAmount(), $target_date, $received);
//$decayed_balance = $stateBalancesTable->calculateDecay($this->getAmount(), $target_date, $received);
$balance = $this->getAmount();
if(!$this->transactionCreationsTable->save($transactionCreationEntity)) {
$this->addError('TransactionCreation::save', 'error saving transactionCreation with errors: ' . json_encode($transactionCreationEntity->getErrors()));
@ -171,13 +172,13 @@ class TransactionCreation extends TransactionBase {
}
// update state balance
$final_balance = $this->updateStateBalance($receiverUserId, $decayed_balance, $received);
$final_balance = $this->updateStateBalance($receiverUserId, $balance, $received);
if(false === $final_balance) {
return false;
}
// decay is a virtual field which is calculated from amount and now() - record_date
if(!$this->addStateUserTransaction($receiverUserId, $transaction_id, 1, $decayed_balance, $received)) {
if(!$this->addStateUserTransaction($receiverUserId, $transaction_id, 1, $balance, $received)) {
return false;
}

View File

@ -12,13 +12,16 @@ $body['gdtSum'] = $this->element('centToFloat', ['cent' => $body['gdtSum'], 'pre
foreach($body['transactions'] as $i => $transaction) {
$useCeil = false;
if(isset($transaction['last_decay']) && $transaction['last_decay']) {
if($transaction['type'] == 'decay') {
$useCeil = true;
}
$body['transactions'][$i]['balance'] = $this->element('centToFloat', ['cent' => $transaction['balance'], 'precision' => 4, 'useCeil' => $useCeil]);
if(isset($transaction['creation_amount'])) {
$body['transactions'][$i]['creation_amount'] = $this->element('centToFloat', ['cent' => $transaction['creation_amount'], 'precision' => 4]);
}
if(isset($transaction['decay'])) {
$body['transactions'][$i]['decay']['balance'] = $this->element('centToFloat', ['cent' => $transaction['decay']['balance'], 'precision' => 4]);
}
}
?><?= json_encode($body) ?>

View File

@ -8,14 +8,19 @@
$this->assign('title', __('Gradido Überweisung'));
$receiverNames = $receiverUser->first_name . ' ' . $receiverUser->last_name;
$senderNames = $senderUser->first_name . ' ' . $senderUser->last_name;
$senderNamesEmail = $senderUser->getEmailWithName();
?><?= __('Hallo') ?> <?= $receiverNames ?>,
<?= __('Du hast soeben {0} von {1} erhalten.', $this->element('printGradido', ['number' => $gdd_cent, 'raw' => true]), $senderNames) ?>
<?= __('Du hast soeben {0} von {1} erhalten.', $this->element('printGradido', ['number' => $gdd_cent, 'raw' => true]), $senderNamesEmail) ?>
<?= __('{0} schreibt:', $senderNames) ?>
<?= $memo ?>
<?= __('Bitte antworte nicht auf diese E-Mail!'); ?>
<?= __('Wenn Du ') . $senderNames . __(' per E-Mail antworten willst, schreibe stattdessen an die Adresse: '); ?>
<?= $senderUser->email ?>
<?= __('Mit freundlichen Grüßen'); ?>
Gradido Community Server

View File

@ -37,7 +37,7 @@ class Migrations2Fixture extends TestFixture
$this->records = [
[
'id' => 1,
'db_version' => 2,
'db_version' => 3,
],
];
parent::init();

View File

@ -111,7 +111,9 @@ class AppRequestControllerTest extends TestCase
]);
$this->getAndParse('/api/get-balance/' . 1211,
['state' => 'not found', 'msg' => 'invalid session']
['state' => 'not found', 'msg' => 'invalid session',
'details' => ['msg' => 'session not found', 'state' => 'not found']
]
);
}
@ -128,7 +130,9 @@ class AppRequestControllerTest extends TestCase
]);
$this->getAndParse('/api/get-balance/' ,
['state' => 'not found', 'msg' => 'invalid session']
['state' => 'not found', 'msg' => 'invalid session',
'details' => ['msg' => 'session not found', 'state' => 'not found']
]
);
}
@ -158,81 +162,81 @@ class AppRequestControllerTest extends TestCase
"state": "success",
"transactions": [
{
"name": "Gradido Akademie",
"type": "creation",
"transaction_id": 2,
"date": "2021-04-12T00:00:00+00:00",
"memo": "AGE Januar 2021",
"name": "Gradido Akademie",
"type": "creation",
"target_date": "2021-01-01T00:00:00+00:00",
"creation_amount": 10000000,
"balance": 10000000,
"memo": "AGE Januar 2021"
"balance": 10000000
},
{
"name": "Samuel Schmied",
"email": "test3.yahoo.com",
"type": "send",
"transaction_id": 3,
"date": "2021-04-12T00:00:00+00:00",
"balance": 1000000,
"memo": "test",
"pubkey": "e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2"
"balance": 1000000,
"type": "send",
"pubkey": "e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2",
"name": "Samuel Schmied",
"email": "test3.yahoo.com"
},
{
"name": "Samuel Schmied",
"email": "test3.yahoo.com",
"type": "send",
"transaction_id": 4,
"date": "2021-04-14T00:00:00+00:00",
"balance": 100000,
"memo": "test time",
"pubkey": "e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2"
"balance": 100000,
"type": "send",
"pubkey": "e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2",
"name": "Samuel Schmied",
"email": "test3.yahoo.com"
},
{
"name": "Samuel Schmied",
"email": "test3.yahoo.com",
"type": "send",
"transaction_id": 5,
"date": "2021-04-14T09:01:07+00:00",
"balance": 100000,
"memo": "test time",
"pubkey": "e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2"
"balance": 100000,
"type": "send",
"pubkey": "e3369de3623ce8446d0424c4013e7a1d71a2671ae3d7bf1e798ebf0665d145f2",
"name": "Samuel Schmied",
"email": "test3.yahoo.com"
},
{
"name": "Samuel Schmied",
"email": "test3.yahoo.com",
"type": "receive",
"transaction_id": 6,
"date": "2021-04-14T09:02:28+00:00",
"balance": 100000,
"memo": "test time 3",
"pubkey": "0000000000000000000000000000000000000000000000000000000000000000"
"balance": 100000,
"type": "receive",
"pubkey": "0000000000000000000000000000000000000000000000000000000000000000",
"name": "Samuel Schmied",
"email": "test3.yahoo.com"
},
{
"name": "Samuel Schmied",
"email": "test3.yahoo.com",
"type": "receive",
"transaction_id": 7,
"date": "2021-04-14T09:28:46+00:00",
"balance": 100000,
"memo": "test login crash",
"pubkey": "0000000000000000000000000000000000000000000000000000000000000000"
"balance": 100000,
"type": "receive",
"pubkey": "0000000000000000000000000000000000000000000000000000000000000000",
"name": "Samuel Schmied",
"email": "test3.yahoo.com"
},
{
"name": "Samuel Schmied",
"email": "test3.yahoo.com",
"type": "receive",
"transaction_id": 8,
"date": "2021-04-14T09:31:28+00:00",
"balance": 100000,
"memo": "test login crash",
"pubkey": "0000000000000000000000000000000000000000000000000000000000000000"
"balance": 100000,
"type": "receive",
"pubkey": "0000000000000000000000000000000000000000000000000000000000000000",
"name": "Samuel Schmied",
"email": "test3.yahoo.com"
}
],
"transactionExecutingCount": 0,
"count": 7,
"gdtSum": 180000,
"timeUsed": 0.5575470924377441,
"decay_date": "2021-05-28T09:35:02+00:00",
"timeUsed": 0.7237420082092285,
"decay_date": "2021-06-22T08:54:43+00:00",
"balance": 9100000,
"decay": 9100000
}';

Binary file not shown.

View File

@ -7,409 +7,505 @@ 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"
"POT-Creation-Date: 2021-06-21 13:37+0200\n"
"PO-Revision-Date: 2021-06-21 13:38+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"
"X-Generator: Poedit 3.0\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
#: build/http_pages/LoginPage.cpp:196 build/http_pages/LoginPage.cpp:275
msgid "Login"
msgstr "Anmeldung"
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:85
#: build/http_pages/LoginPage.cpp:196
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"
#: build/http_pages/LoginPage.cpp:205
msgid "Passwort"
msgstr "Passwort"
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:88
#: build/http_pages/LoginPage.cpp:205
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?"
#: build/http_pages/LoginPage.cpp:208 build/http_pages/LoginPage.cpp:211
msgid "User"
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
#: build/http_pages/LoginPage.cpp:208
msgid "Error in saved data, the server admin will look at it."
msgstr ""
#: build/http_pages/LoginPage.cpp:211
msgid "Benutzer ist deaktiviert, kein Login möglich!"
msgstr ""
#: build/http_pages/LoginPage.cpp:275
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
#: build/http_pages/LoginPage.cpp:376 src/cpp/model/Session.cpp:161
#: src/cpp/model/Session.cpp:168 src/cpp/model/Session.cpp:220
#: src/cpp/model/Session.cpp:231
msgid "E-Mail"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:178
#: build/http_pages/LoginPage.cpp:381
#: src/cpp/SingletonManager/SessionManager.cpp:603
#: src/cpp/SingletonManager/SessionManager.cpp:609
#: src/cpp/SingletonManager/SessionManager.cpp:614
#: src/cpp/SingletonManager/SessionManager.cpp:619
#: src/cpp/SingletonManager/SessionManager.cpp:624
#: src/cpp/SingletonManager/SessionManager.cpp:629
msgid "Password"
msgstr "Passwort"
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:180
#: build/http_pages/LoginPage.cpp:384
msgid " Login "
msgstr "Anmeldung"
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:182
#: build/http_pages/LoginPage.cpp:391
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
#: build/http_pages/LoginPage.cpp:395
msgid "Create New Account"
msgstr "Neues Konto erstellen"
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\login.cpsp:186
#: build/http_pages/LoginPage.cpp:403
msgid "Passwort vergessen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:97
msgid "Bitte gebe deinen E-Mail Verification Code ein:"
#: build/http_pages/CheckEmailPage.cpp:155
msgid "E-Mail verifizieren"
msgstr "E-Mail überprüfen"
#: build/http_pages/CheckEmailPage.cpp:165
msgid ""
"Deine E-Mail wurde erfolgreich bestätigt. Du kannst nun Gradidos versenden."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:98
#: model/Session.cpp:186
#, fuzzy
#| msgid "E-Mail Verification"
#: build/http_pages/CheckEmailPage.cpp:170
msgid "Zur Startseite"
msgstr ""
#: build/http_pages/CheckEmailPage.cpp:175
msgid "Bitte gib deinen E-Mail Verification Code ein:"
msgstr "Bitte gib deinen E-Mail Verification Code ein:"
#: build/http_pages/CheckEmailPage.cpp:178 src/cpp/model/Session.cpp:184
msgid "Email Verification Code"
msgstr "E-Mail Überprüfung"
msgstr "Email Verification Code"
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:100
#: build/http_pages/CheckEmailPage.cpp:185
msgid "&Uuml;berpr&uuml;fe Code"
msgstr ""
msgstr "&Uuml;berpr&uuml;fe Code"
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:104
#: build/http_pages/CheckEmailPage.cpp:190
msgid "Du hast bisher keinen Code erhalten?"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:105
#: build/http_pages/CheckEmailPage.cpp:193
msgid "E-Mail erneut zuschicken (in Arbeit)"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:108
#: build/http_pages/CheckEmailPage.cpp:198
msgid "Funktioniert dein E-Mail Verification Code nicht?"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:109
#: build/http_pages/CheckEmailPage.cpp:201
msgid "Schicke uns eine E-Mail und wir k&uuml;mmern uns darum: "
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:110
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:133
#: build/http_pages/CheckEmailPage.cpp:208
#: build/http_pages/ResetPasswordPage.cpp:273
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."
#: build/http_pages/ResetPasswordPage.cpp:174
#: build/http_pages/ResetPasswordPage.cpp:217
msgid "Gib bitte hier deine E-Mail Adresse an:"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:54
msgid "E-Mail Adresse nicht angegeben."
#: build/http_pages/ResetPasswordPage.cpp:183
msgid "Bestätigen"
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&auml;hle eine Option aus."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:74
msgid "Ung&uuml;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
#: build/http_pages/ResetPasswordPage.cpp:225
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
#: build/http_pages/ResetPasswordPage.cpp:234
#: build/http_pages/PassphrasePage.cpp:373
msgid "Ja"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:118
#: build/http_pages/ResetPasswordPage.cpp:241
msgid "Nein"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:123
#: build/http_pages/ResetPasswordPage.cpp:247
msgid "Absenden"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:127
#: build/http_pages/ResetPasswordPage.cpp:255
msgid "Dir wird eine E-Mail zugeschickt um dein Passwort zur&uuml;ckzusetzen."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:129
#: build/http_pages/ResetPasswordPage.cpp:260
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
#: build/http_pages/ResetPasswordPage.cpp:265
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
#: build/http_pages/ResetPasswordPage.cpp:268
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
#: build/http_pages/PassphrasePage.cpp:41
#: build/http_pages/PassphrasePage.cpp:111
#: build/http_pages/PassphrasePage.cpp:132 src/cpp/model/Session.cpp:465
#: src/cpp/model/Session.cpp:477 src/cpp/model/Session.cpp:491
msgid "Passphrase"
msgstr ""
#: build/http_pages/PassphrasePage.cpp:42
#: build/http_pages/PassphrasePage.cpp:451
msgid "Neues Konto anlegen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:28
#: build/http_pages/PassphrasePage.cpp:43
msgid "2/3"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:94
#: build/http_pages/PassphrasePage.cpp:111
msgid ""
"Diese Passphrase ist ung&uuml;ltig, bitte &uuml;berpr&uuml;fen oder neu "
"generieren (lassen)."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:114
#: build/http_pages/PassphrasePage.cpp:132
msgid "intern error please try again later"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:129
#: build/http_pages/PassphrasePage.cpp:147
msgid "3/3"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:132
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:135
#: build/http_pages/PassphrasePage.cpp:150
#: build/http_pages/PassphrasePage.cpp:153
msgid "1/3"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:134
#: build/http_pages/PassphrasePage.cpp:152
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:"
#: build/http_pages/PassphrasePage.cpp:270
msgid "Passphrase abschreiben"
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
#: build/http_pages/PassphrasePage.cpp:287
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."
#: build/http_pages/PassphrasePage.cpp:290
msgid "Deine Passphrase besteht aus den im grünen Feld angezeigten Wörtern."
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."
#: build/http_pages/PassphrasePage.cpp:293
msgid "Sie dient deiner Sicherheit."
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
#: build/http_pages/PassphrasePage.cpp:296
msgid ""
"Du brauchst deine Passphrase um dein Konto wiederherzustellen, wenn du mal "
"dein Passwort vergessen haben solltest."
msgstr ""
#: build/http_pages/PassphrasePage.cpp:300
msgid "Deine Passphrase (Groß/Kleinschreibung beachten)"
msgstr ""
#: build/http_pages/PassphrasePage.cpp:309
#: build/http_pages/PassphrasePage.cpp:352
msgid "Was zu tun ist:"
msgstr ""
#: build/http_pages/PassphrasePage.cpp:312
msgid ""
"Schreibe dir die obenstehende Passphrase <b>von Hand</b> auf ein Blatt "
"Papier!"
msgstr ""
#: build/http_pages/PassphrasePage.cpp:315
msgid "Speichere sie auf keinen Fall auf deinem Rechner oder Mobilgerät!!"
msgstr ""
#: build/http_pages/PassphrasePage.cpp:318
msgid "Bewahre sie an einem sicheren Ort auf!"
msgstr ""
#: build/http_pages/PassphrasePage.cpp:322
#: build/http_pages/PassphrasePage.cpp:478
#: build/http_pages/PassphrasePage.cpp:487
#: build/http_pages/PassphrasePage.cpp:511
msgid "Weiter"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:189
#: build/http_pages/PassphrasePage.cpp:355
msgid "Hast du dir deine Passphrase gemerkt?"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:190
#: build/http_pages/PassphrasePage.cpp:358
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
#: build/http_pages/PassphrasePage.cpp:361
msgid "Klicke sie an um sie einzusetzen."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:195
#: build/http_pages/PassphrasePage.cpp:364
msgid "Überprüfe dabei, ob du alle Wörter richtig geschrieben hast!"
msgstr ""
#: build/http_pages/PassphrasePage.cpp:370
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
#: build/http_pages/PassphrasePage.cpp:429
msgid "Deine E-Mail Adresse wurde erfolgreich bestätigt."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:246
#: build/http_pages/PassphrasePage.cpp:437
msgid "Neue Gradido Adresse anlegen / wiederherstellen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:247
#: build/http_pages/PassphrasePage.cpp:440
msgid ""
"Möchtest du ein neues Gradido-Konto anlegen oder ein bestehendes "
"wiederherstellen?"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:263
#: build/http_pages/PassphrasePage.cpp:460
msgid "Bestehendes Konto wiederherstellen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:270
#: build/http_pages/PassphrasePage.cpp:469
msgid ""
"Falls du ein bestehendes Konto wiederherstellen willst, gib hier deine "
"Passphrase ein:"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:288
#: build/http_pages/PassphrasePage.cpp:497
msgid "Konto wiederherstellen / Neues Passwort anlegen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:289
#: build/http_pages/PassphrasePage.cpp:501
msgid ""
"Um dein Konto wiederherzustellen, dir ein Neues Passwort auswählen zu "
"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."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:303
#: build/http_pages/PassphrasePage.cpp:524
msgid "Fehler"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:304
#: build/http_pages/PassphrasePage.cpp:527
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
#: src/cpp/model/Session.cpp:147 src/cpp/model/Session.cpp:177
#: src/cpp/model/Session.cpp:645 src/cpp/model/Session.cpp:651
#: src/cpp/model/Session.cpp:937 src/cpp/model/Session.cpp:953
msgid "Benutzer"
msgstr ""
#: model/Session.cpp:149
#: src/cpp/model/Session.cpp:147
msgid "Eingeloggter Benutzer ist kein Admin"
msgstr ""
#: model/Session.cpp:155 model/Session.cpp:201
#: src/cpp/model/Session.cpp:153 src/cpp/model/Session.cpp:212
msgid "Vorname"
msgstr ""
#: model/Session.cpp:155 model/Session.cpp:159 model/Session.cpp:201
#: model/Session.cpp:205
#: src/cpp/model/Session.cpp:153 src/cpp/model/Session.cpp:157
#: src/cpp/model/Session.cpp:212 src/cpp/model/Session.cpp:216
msgid ""
"Bitte gebe einen Namen an. Mindestens 3 Zeichen, keines folgender Zeichen "
"<>&;"
msgstr ""
#: model/Session.cpp:159 model/Session.cpp:205
#: src/cpp/model/Session.cpp:157 src/cpp/model/Session.cpp:216
msgid "Nachname"
msgstr ""
#: model/Session.cpp:163 model/Session.cpp:209
#: src/cpp/model/Session.cpp:161 src/cpp/model/Session.cpp:220
msgid "Bitte gebe eine g&uuml;ltige E-Mail Adresse an."
msgstr ""
#: model/Session.cpp:170 model/Session.cpp:234
#: src/cpp/model/Session.cpp:168
msgid "F&uuml;r diese E-Mail Adresse gibt es bereits einen Account"
msgstr ""
#: model/Session.cpp:180 model/Session.cpp:186
#: src/cpp/model/Session.cpp:177 src/cpp/model/Session.cpp:184
msgid "Fehler beim speichern!"
msgstr ""
#: model/Session.cpp:379 model/Session.cpp:438 model/Session.cpp:881
#: model/Session.cpp:889
#: src/cpp/model/Session.cpp:231
msgid "F&uuml;r diese E-Mail Adresse gibt es bereits ein Konto"
msgstr ""
#: src/cpp/model/Session.cpp:255
msgid "Server"
msgstr ""
#: src/cpp/model/Session.cpp:255
msgid "Fehler beim speichen des Kontos bitte versuche es später noch einmal"
msgstr ""
#: src/cpp/model/Session.cpp:350 src/cpp/model/Session.cpp:390
#: src/cpp/model/Session.cpp:832 src/cpp/model/Session.cpp:841
msgid "E-Mail Verification"
msgstr "E-Mail Überprüfung"
#: model/Session.cpp:379
#: src/cpp/model/Session.cpp:350
msgid "Du hast dein Konto bereits aktiviert!"
msgstr ""
#: model/Session.cpp:438
#: src/cpp/model/Session.cpp:390
msgid "Falscher Code f&uuml;r aktiven Login"
msgstr ""
#: model/Session.cpp:495
#: src/cpp/model/Session.cpp:465
msgid "Deine Passphrase ist ung&uuml;tig"
msgstr ""
#: model/Session.cpp:507
#: src/cpp/model/Session.cpp:477
msgid "Ein Fehler trat auf, bitte versuche es erneut"
msgstr ""
#: model/Session.cpp:515
#: src/cpp/model/Session.cpp:491
msgid "Das ist nicht die richtige Passphrase."
msgstr ""
#: model/Session.cpp:700
#: src/cpp/model/Session.cpp:645
msgid "Konnte Community Server nicht erreichen. E-Mail an den Admin ist raus."
msgstr ""
#: model/Session.cpp:706
#: src/cpp/model/Session.cpp:651
msgid ""
"Fehler beim L&ouml;schen des Accounts. Bitte logge dich erneut ein und "
"versuche es nochmal."
msgstr ""
#: model/Session.cpp:881
#: src/cpp/model/Session.cpp:832
msgid "Konnte kein passendes Konto finden."
msgstr ""
#: model/Session.cpp:889
#: src/cpp/model/Session.cpp:841
msgid "Fehler beim laden des Benutzers."
msgstr ""
#: model/Session.cpp:1005
#: src/cpp/model/Session.cpp:937
msgid "Kein g&uuml;ltiger Benutzer, bitte logge dich erneut ein."
msgstr ""
#~ msgid "Gradido: E-Mail Verification"
#~ msgstr "Gradido: E-Mail Überprüfung"
#: src/cpp/model/Session.cpp:953
msgid "Fehler beim generieren der Passphrase, der Admin bekommt eine E-Mail. "
msgstr ""
#: src/cpp/model/email/Email.cpp:174
msgid "Default Email Subject"
msgstr ""
#: src/cpp/model/email/Email.cpp:180
msgid "Error from Gradido Login Server"
msgstr "Fehler auf dem Gradido Login Server"
#: src/cpp/model/email/Email.cpp:200
msgid "Gradido: E-Mail Verification"
msgstr "Gradido: E-Mail Überprüfung"
#: src/cpp/model/email/Email.cpp:246
msgid "Gradido: Reset Password"
msgstr "Gradido: Passwort zurücksetzen"
#: src/cpp/SingletonManager/SessionManager.cpp:604
msgid ""
"Please enter a valid password with at least 8 characters, upper and lower "
"case letters, at least one number and one special character (@$!%*?&+-_)!"
msgstr ""
"Bitte gebe ein gültiges Password ein mit mindestens 8 Zeichen, Groß- und "
"Kleinbuchstaben, mindestens einer Zahl und einem Sonderzeichen (@$!%*?&+-_) "
"ein!"
#: src/cpp/SingletonManager/SessionManager.cpp:610
msgid "Your password is to short!"
msgstr "Dein Passwort ist zu kurz!"
#: src/cpp/SingletonManager/SessionManager.cpp:615
msgid "Your password does not contain lowercase letters!"
msgstr "Dein Passwort enthält keine Kleinbuchstaben!"
#: src/cpp/SingletonManager/SessionManager.cpp:620
msgid "Your password does not contain any capital letters!"
msgstr " Dein Passwort enthält keine Großbuchstaben!"
#: src/cpp/SingletonManager/SessionManager.cpp:625
msgid "Your password does not contain any number!"
msgstr "Dein Passwort enthält keine Zahlen!"
#: src/cpp/SingletonManager/SessionManager.cpp:630
msgid "Your password does not contain special characters (@$!%*?&+-)!"
msgstr "Dein Passwort enthält keine Sonderzeichen (@$!%*?&+-)!"
#~ msgid "Account"
#~ msgstr "Konto"
#~ 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."
#~ 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. "
#~ 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."
#~ msgid ""
#~ "Der Code stimmt nicht, bitte &uuml;berpr&uuml;fe ihn nochmal oder "

View File

@ -8,7 +8,7 @@ msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-02-10 13:01+0100\n"
"POT-Creation-Date: 2021-06-21 13:37+0200\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
@ -17,415 +17,461 @@ msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:108
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:156
#: build/http_pages/LoginPage.cpp:196 build/http_pages/LoginPage.cpp:275
msgid "Login"
msgstr ""
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:108
#: build/http_pages/LoginPage.cpp:196
msgid "E-Mail or password isn't right, please try again!"
msgstr ""
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:116
#: build/http_pages/LoginPage.cpp:205
msgid "Passwort"
msgstr ""
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:116
#: build/http_pages/LoginPage.cpp:205
msgid ""
"Passwort wird noch berechnet, bitte versuche es in etwa 1 Minute erneut."
msgstr ""
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:119
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:122
#: build/http_pages/LoginPage.cpp:208 build/http_pages/LoginPage.cpp:211
msgid "User"
msgstr ""
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:119
#: build/http_pages/LoginPage.cpp:208
msgid "Error in saved data, the server admin will look at it."
msgstr ""
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:122
#: build/http_pages/LoginPage.cpp:211
msgid "Benutzer ist deaktiviert, kein Login möglich!"
msgstr ""
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:156
#: build/http_pages/LoginPage.cpp:275
msgid "Username and password are needed!"
msgstr ""
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:178
#: model/Session.cpp:210 model/Session.cpp:217 model/Session.cpp:259
#: model/Session.cpp:284 model/Session.cpp:383 model/Session.cpp:393
#: build/http_pages/LoginPage.cpp:376 src/cpp/model/Session.cpp:161
#: src/cpp/model/Session.cpp:168 src/cpp/model/Session.cpp:220
#: src/cpp/model/Session.cpp:231
msgid "E-Mail"
msgstr ""
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:179
#: build/http_pages/LoginPage.cpp:381
#: src/cpp/SingletonManager/SessionManager.cpp:603
#: src/cpp/SingletonManager/SessionManager.cpp:609
#: src/cpp/SingletonManager/SessionManager.cpp:614
#: src/cpp/SingletonManager/SessionManager.cpp:619
#: src/cpp/SingletonManager/SessionManager.cpp:624
#: src/cpp/SingletonManager/SessionManager.cpp:629
msgid "Password"
msgstr ""
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:180
#: build/http_pages/LoginPage.cpp:384
msgid " Login "
msgstr ""
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:185
#: build/http_pages/LoginPage.cpp:391
msgid "You haven't any account yet? Please follow the link to create one."
msgstr ""
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:187
#: build/http_pages/LoginPage.cpp:395
msgid "Create New Account"
msgstr ""
#: F:\\Gradido\\gradido_login_server_production\\src\\cpsp\\login.cpsp:191
#: build/http_pages/LoginPage.cpp:403
msgid "Passwort vergessen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:72
#: build/http_pages/CheckEmailPage.cpp:155
msgid "E-Mail verifizieren"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:77
#: build/http_pages/CheckEmailPage.cpp:165
msgid ""
"Deine E-Mail wurde erfolgreich bestätigt. Du kannst nun Gradidos versenden."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:78
#: build/http_pages/CheckEmailPage.cpp:170
msgid "Zur Startseite"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:80
#: build/http_pages/CheckEmailPage.cpp:175
msgid "Bitte gib deinen E-Mail Verification Code ein:"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:81
#: model/Session.cpp:233
#: build/http_pages/CheckEmailPage.cpp:178 src/cpp/model/Session.cpp:184
msgid "Email Verification Code"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:82
#: build/http_pages/CheckEmailPage.cpp:185
msgid "&Uuml;berpr&uuml;fe Code"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:85
#: build/http_pages/CheckEmailPage.cpp:190
msgid "Du hast bisher keinen Code erhalten?"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:86
#: build/http_pages/CheckEmailPage.cpp:193
msgid "E-Mail erneut zuschicken (in Arbeit)"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:89
#: build/http_pages/CheckEmailPage.cpp:198
msgid "Funktioniert dein E-Mail Verification Code nicht?"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:90
#: build/http_pages/CheckEmailPage.cpp:201
msgid "Schicke uns eine E-Mail und wir k&uuml;mmern uns darum: "
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:91
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:151
#: build/http_pages/CheckEmailPage.cpp:208
#: build/http_pages/ResetPasswordPage.cpp:273
msgid "E-Mail an Support schicken"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:113
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:124
#: build/http_pages/ResetPasswordPage.cpp:174
#: build/http_pages/ResetPasswordPage.cpp:217
msgid "Gib bitte hier deine E-Mail Adresse an:"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:116
#: build/http_pages/ResetPasswordPage.cpp:183
msgid "Bestätigen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:126
#: build/http_pages/ResetPasswordPage.cpp:225
msgid "Hast du dir deine Passphrase notiert oder gemerkt?"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:131
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:203
#: build/http_pages/ResetPasswordPage.cpp:234
#: build/http_pages/PassphrasePage.cpp:373
msgid "Ja"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:136
#: build/http_pages/ResetPasswordPage.cpp:241
msgid "Nein"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:140
#: build/http_pages/ResetPasswordPage.cpp:247
msgid "Absenden"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:145
#: build/http_pages/ResetPasswordPage.cpp:255
msgid "Dir wird eine E-Mail zugeschickt um dein Passwort zur&uuml;ckzusetzen."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:147
#: build/http_pages/ResetPasswordPage.cpp:260
msgid "Der Admin hat eine E-Mail bekommen und wird sich bei dir melden."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\resetPassword.cpsp:149
#: build/http_pages/ResetPasswordPage.cpp:265
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:150
#: build/http_pages/ResetPasswordPage.cpp:268
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:26
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:94
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:114
#: model/Session.cpp:638 model/Session.cpp:650 model/Session.cpp:658
#: build/http_pages/PassphrasePage.cpp:41
#: build/http_pages/PassphrasePage.cpp:111
#: build/http_pages/PassphrasePage.cpp:132 src/cpp/model/Session.cpp:465
#: src/cpp/model/Session.cpp:477 src/cpp/model/Session.cpp:491
msgid "Passphrase"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:27
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:263
#: build/http_pages/PassphrasePage.cpp:42
#: build/http_pages/PassphrasePage.cpp:451
msgid "Neues Konto anlegen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:28
#: build/http_pages/PassphrasePage.cpp:43
msgid "2/3"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:94
#: build/http_pages/PassphrasePage.cpp:111
msgid ""
"Diese Passphrase ist ung&uuml;ltig, bitte &uuml;berpr&uuml;fen oder neu "
"generieren (lassen)."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:114
#: build/http_pages/PassphrasePage.cpp:132
msgid "intern error please try again later"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:129
#: build/http_pages/PassphrasePage.cpp:147
msgid "3/3"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:132
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:135
#: build/http_pages/PassphrasePage.cpp:150
#: build/http_pages/PassphrasePage.cpp:153
msgid "1/3"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:134
#: build/http_pages/PassphrasePage.cpp:152
msgid "Neues Passwort anlegen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:145
#: build/http_pages/PassphrasePage.cpp:270
msgid "Passphrase abschreiben"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:156
#: build/http_pages/PassphrasePage.cpp:287
msgid "Was ist eine Passphrase?"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:157
#: build/http_pages/PassphrasePage.cpp:290
msgid "Deine Passphrase besteht aus den im grünen Feld angezeigten Wörtern."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:158
#: build/http_pages/PassphrasePage.cpp:293
msgid "Sie dient deiner Sicherheit."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:159
#: build/http_pages/PassphrasePage.cpp:296
msgid ""
"Du brauchst deine Passphrase um dein Konto wiederherzustellen, wenn du mal "
"dein Passwort vergessen haben solltest."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:161
#: build/http_pages/PassphrasePage.cpp:300
msgid "Deine Passphrase (Groß/Kleinschreibung beachten)"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:166
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:194
#: build/http_pages/PassphrasePage.cpp:309
#: build/http_pages/PassphrasePage.cpp:352
msgid "Was zu tun ist:"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:167
#: build/http_pages/PassphrasePage.cpp:312
msgid ""
"Schreibe dir die obenstehende Passphrase <b>von Hand</b> auf ein Blatt "
"Papier!"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:168
#: build/http_pages/PassphrasePage.cpp:315
msgid "Speichere sie auf keinen Fall auf deinem Rechner oder Mobilgerät!!"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:169
#: build/http_pages/PassphrasePage.cpp:318
msgid "Bewahre sie an einem sicheren Ort auf!"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:171
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:282
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:287
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:300
#: build/http_pages/PassphrasePage.cpp:322
#: build/http_pages/PassphrasePage.cpp:478
#: build/http_pages/PassphrasePage.cpp:487
#: build/http_pages/PassphrasePage.cpp:511
msgid "Weiter"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:195
#: build/http_pages/PassphrasePage.cpp:355
msgid "Hast du dir deine Passphrase gemerkt?"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:196
#: build/http_pages/PassphrasePage.cpp:358
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:197
#: build/http_pages/PassphrasePage.cpp:361
msgid "Klicke sie an um sie einzusetzen."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:198
#: build/http_pages/PassphrasePage.cpp:364
msgid "Überprüfe dabei, ob du alle Wörter richtig geschrieben hast!"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:202
#: build/http_pages/PassphrasePage.cpp:370
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:249
#: build/http_pages/PassphrasePage.cpp:429
msgid "Deine E-Mail Adresse wurde erfolgreich bestätigt."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:253
#: build/http_pages/PassphrasePage.cpp:437
msgid "Neue Gradido Adresse anlegen / wiederherstellen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:254
#: build/http_pages/PassphrasePage.cpp:440
msgid ""
"Möchtest du ein neues Gradido-Konto anlegen oder ein bestehendes "
"wiederherstellen?"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:270
#: build/http_pages/PassphrasePage.cpp:460
msgid "Bestehendes Konto wiederherstellen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:277
#: build/http_pages/PassphrasePage.cpp:469
msgid ""
"Falls du ein bestehendes Konto wiederherstellen willst, gib hier deine "
"Passphrase ein:"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:294
#: build/http_pages/PassphrasePage.cpp:497
msgid "Konto wiederherstellen / Neues Passwort anlegen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:296
#: build/http_pages/PassphrasePage.cpp:501
msgid ""
"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."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:310
#: build/http_pages/PassphrasePage.cpp:524
msgid "Fehler"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:311
#: build/http_pages/PassphrasePage.cpp:527
msgid ""
"Ungültige Seite, wenn du das siehst stimmt hier etwas nicht. Bitte wende "
"dich an den Server-Admin."
msgstr ""
#: model/Session.cpp:196 model/Session.cpp:227 model/Session.cpp:935
#: model/Session.cpp:941 model/Session.cpp:1226 model/Session.cpp:1242
#: src/cpp/model/Session.cpp:147 src/cpp/model/Session.cpp:177
#: src/cpp/model/Session.cpp:645 src/cpp/model/Session.cpp:651
#: src/cpp/model/Session.cpp:937 src/cpp/model/Session.cpp:953
msgid "Benutzer"
msgstr ""
#: model/Session.cpp:196
#: src/cpp/model/Session.cpp:147
msgid "Eingeloggter Benutzer ist kein Admin"
msgstr ""
#: model/Session.cpp:202 model/Session.cpp:251 model/Session.cpp:375
#: src/cpp/model/Session.cpp:153 src/cpp/model/Session.cpp:212
msgid "Vorname"
msgstr ""
#: model/Session.cpp:202 model/Session.cpp:206 model/Session.cpp:251
#: model/Session.cpp:255 model/Session.cpp:375 model/Session.cpp:379
#: src/cpp/model/Session.cpp:153 src/cpp/model/Session.cpp:157
#: src/cpp/model/Session.cpp:212 src/cpp/model/Session.cpp:216
msgid ""
"Bitte gebe einen Namen an. Mindestens 3 Zeichen, keines folgender Zeichen "
"<>&;"
msgstr ""
#: model/Session.cpp:206 model/Session.cpp:255 model/Session.cpp:379
#: src/cpp/model/Session.cpp:157 src/cpp/model/Session.cpp:216
msgid "Nachname"
msgstr ""
#: model/Session.cpp:210 model/Session.cpp:259 model/Session.cpp:383
#: src/cpp/model/Session.cpp:161 src/cpp/model/Session.cpp:220
msgid "Bitte gebe eine g&uuml;ltige E-Mail Adresse an."
msgstr ""
#: model/Session.cpp:217 model/Session.cpp:284
#: src/cpp/model/Session.cpp:168
msgid "F&uuml;r diese E-Mail Adresse gibt es bereits einen Account"
msgstr ""
#: model/Session.cpp:227 model/Session.cpp:233
#: src/cpp/model/Session.cpp:177 src/cpp/model/Session.cpp:184
msgid "Fehler beim speichern!"
msgstr ""
#: model/Session.cpp:393
#: src/cpp/model/Session.cpp:231
msgid "F&uuml;r diese E-Mail Adresse gibt es bereits ein Konto"
msgstr ""
#: model/Session.cpp:411
#: src/cpp/model/Session.cpp:255
msgid "Server"
msgstr ""
#: model/Session.cpp:411
#: src/cpp/model/Session.cpp:255
msgid "Fehler beim speichen des Kontos bitte versuche es später noch einmal"
msgstr ""
#: model/Session.cpp:505 model/Session.cpp:567 model/Session.cpp:1116
#: model/Session.cpp:1125
#: src/cpp/model/Session.cpp:350 src/cpp/model/Session.cpp:390
#: src/cpp/model/Session.cpp:832 src/cpp/model/Session.cpp:841
msgid "E-Mail Verification"
msgstr ""
#: model/Session.cpp:505
#: src/cpp/model/Session.cpp:350
msgid "Du hast dein Konto bereits aktiviert!"
msgstr ""
#: model/Session.cpp:567
#: src/cpp/model/Session.cpp:390
msgid "Falscher Code f&uuml;r aktiven Login"
msgstr ""
#: model/Session.cpp:638
#: src/cpp/model/Session.cpp:465
msgid "Deine Passphrase ist ung&uuml;tig"
msgstr ""
#: model/Session.cpp:650
#: src/cpp/model/Session.cpp:477
msgid "Ein Fehler trat auf, bitte versuche es erneut"
msgstr ""
#: model/Session.cpp:658
#: src/cpp/model/Session.cpp:491
msgid "Das ist nicht die richtige Passphrase."
msgstr ""
#: model/Session.cpp:935
#: src/cpp/model/Session.cpp:645
msgid "Konnte Community Server nicht erreichen. E-Mail an den Admin ist raus."
msgstr ""
#: model/Session.cpp:941
#: src/cpp/model/Session.cpp:651
msgid ""
"Fehler beim L&ouml;schen des Accounts. Bitte logge dich erneut ein und "
"versuche es nochmal."
msgstr ""
#: model/Session.cpp:1116
#: src/cpp/model/Session.cpp:832
msgid "Konnte kein passendes Konto finden."
msgstr ""
#: model/Session.cpp:1125
#: src/cpp/model/Session.cpp:841
msgid "Fehler beim laden des Benutzers."
msgstr ""
#: model/Session.cpp:1226
#: src/cpp/model/Session.cpp:937
msgid "Kein g&uuml;ltiger Benutzer, bitte logge dich erneut ein."
msgstr ""
#: model/Session.cpp:1242
#: src/cpp/model/Session.cpp:953
msgid "Fehler beim generieren der Passphrase, der Admin bekommt eine E-Mail. "
msgstr ""
#: src/cpp/model/email/Email.cpp:174
msgid "Default Email Subject"
msgstr ""
#: src/cpp/model/email/Email.cpp:180
msgid "Error from Gradido Login Server"
msgstr ""
#: src/cpp/model/email/Email.cpp:200
msgid "Gradido: E-Mail Verification"
msgstr ""
#: src/cpp/model/email/Email.cpp:246
msgid "Gradido: Reset Password"
msgstr ""
#: src/cpp/SingletonManager/SessionManager.cpp:604
msgid ""
"Please enter a valid password with at least 8 characters, upper and lower "
"case letters, at least one number and one special character (@$!%*?&+-_)!"
msgstr ""
#: src/cpp/SingletonManager/SessionManager.cpp:610
msgid "Your password is to short!"
msgstr ""
#: src/cpp/SingletonManager/SessionManager.cpp:615
msgid "Your password does not contain lowercase letters!"
msgstr ""
#: src/cpp/SingletonManager/SessionManager.cpp:620
msgid "Your password does not contain any capital letters!"
msgstr ""
#: src/cpp/SingletonManager/SessionManager.cpp:625
msgid "Your password does not contain any number!"
msgstr ""
#: src/cpp/SingletonManager/SessionManager.cpp:630
msgid "Your password does not contain special characters (@$!%*?&+-)!"
msgstr ""

View File

@ -0,0 +1,29 @@
#!/bin/bash
# stop login_server running in screen
screen -XS login quit
# rebuild login-server
cd ../../login_server
if [ ! -d "./build" ] ; then
cd scripts
./prepare_build.sh
cd ..
fi
cd build
cmake ..
make -j$(nproc) Gradido_LoginServer
# rebuild locales
cd ../scripts
./compile_pot.sh
cd ../src/LOCALE
cp *.mo *.po /etc/grd_login/LOCALE/
cd ../../build/bin
# start login-server
screen -dmS 'login_server' bash -c './Gradido_LoginServer'

View File

@ -0,0 +1,17 @@
#!/bin/bash
# For that to work, node v12.19.0 needs to be installed with nvm for root
# or NPM_BIN Path and NVM_DIR must be adjusted
cd /var/www/html/gradido/frontend
NPM_BIN=/root/.nvm/versions/node/v12.19.0/bin/npm
export NVM_DIR="/root/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
$NPM_BIN install
$NPM_BIN run build
# prezip for faster deliver throw nginx
cd dist
find . -type f -name "*.css" -exec gzip -9 -k {} \;
find . -type f -name "*.js" -exec gzip -9 -k {} \;

View File

@ -0,0 +1,73 @@
server {
server_name _;
listen 80;
listen [::]:80;
include /etc/nginx/common/protect.conf;
include /etc/nginx/common/protect_add_header.conf;
root /var/www/html/gradido/community_server/webroot;
index index.php;
gzip_static on;
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php7.4-fpm.sock;
}
location ~ /\.ht {
deny all;
}
location /vue {
alias /var/www/html/gradido/frontend/dist;
index index.html;
location ~* \.(png)$ {
expires 39d;
}
try_files $uri $uri/ /index.html = 404;
}
location /account {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
rewrite /account/(.*) /$1 break;
proxy_pass http://127.0.0.1:1200;
proxy_redirect off;
}
location /login_api {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_cache_bypass $http_upgrade;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
rewrite /login_api/(.*) /$1 break;
proxy_pass http://127.0.0.1:1201;
proxy_redirect off;
}
location / {
try_files $uri $uri/ /index.php?$args;
}
access_log /var/log/nginx/access.log main;
}

View File

@ -0,0 +1,29 @@
server {
server_name _;
listen 80;
listen [::]:80;
include /etc/nginx/common/protect.conf;
include /etc/nginx/common/protect_add_header.conf;
root /var/www/html/;
index updating.html;
location /account {
alias /var/www/html/;
index updating.html;
}
location /vue {
alias /var/www/html/;
index updating.html;
}
location ~ /\.ht {
deny all;
}
access_log /var/log/nginx/access.log main;
}

View File

@ -0,0 +1 @@
Gradido Servers are updating..., please stand by and try again in some minutes

View File

@ -0,0 +1,53 @@
#!/bin/bash
EMPTY_UPDATE_HTML=/var/www/html/updating_original.html
UPDATE_HTML=/var/www/html/updating.html
LOCK_FILE=/root/relay.lock
PROJECT_PATH=/var/www/html/gradido
SITE_CONFIG=stage1
UPDATE_SITE_CONFIG=stage1_updating
# this script can be called for example from webhookrelay.com relay
# to auto-deploy automatic after a update to the master branch
if [ -f $LOCK_FILE ] ; then
retVal="Already building!"
return "${retVal}" 2>/dev/null || exit "${retVal}"
fi
touch $LOCK_FILE
# start with nearly empty html
# needed a nearly empty html page in the folder
cp $EMPTY_UPDATE_HTML $UPDATE_HTML
# let nginx showing a update page
# needed nginx site-configs in nginx folders
# gradido for running gradido servers
# gradido_updating for showing upddate.html idealy for all pathes
rm /etc/nginx/sites-enabled/$SITE_CONFIG
ln -s /etc/nginx/sites-available/$UPDATE_SITE_CONFIG /etc/nginx/sites-enabled/
service nginx restart
# stop login server
screen -XS login quit
echo 'starting with git pull<br>' >> $UPDATE_HTML
cd $PROJECT_PATH
# git checkout -f master
git pull
cd deployment/bare_metal
echo 'update schemas' >> $UPDATE_HTML
./update_db_schemas.sh
echo 'starting with rebuilding login-server<br>' >> $UPDATE_HTML
./build_and_start_login_server.sh
echo 'starting with rebuilding frontend<br>' >> $UPDATE_HTML
./build_frontend.sh
# let nginx showing gradido
rm /etc/nginx/sites-enabled/$UPDATE_SITE_CONFIG
ln -s /etc/nginx/sites-available/$SITE_CONFIG /etc/nginx/sites-enabled/
service nginx restart
rm $LOCK_FILE

View File

@ -0,0 +1,9 @@
#!/bin/bash
# For that to work skeema needed to be installed on system
# in login_server/skeema and community_server/db/skeema skeema configuration files need to be there also in the subfolders
# Update DB Schemas (only the schemas, not the data)
cd ../../login_server/skeema
skeema push --allow-unsafe
cd ../../community_server/db/skeema
skeema push --allow-unsafe

View File

@ -26,8 +26,7 @@ services:
#########################################################
login-server:
build:
target: login_server_alpine_debug
dockerfile: Dockerfile.alpine-debug
dockerfile: Dockerfiles/ubuntu/Dockerfile.debug
security_opt:
- seccomp:unconfined
cap_add:
@ -38,7 +37,7 @@ services:
- ./login_server/dependencies:/code/dependencies
- ./login_server/scripts:/code/scripts
- ./configs/login_server:/etc/grd_login
- login_build_3.1:/code/build
- login_build_ubuntu_3.1:/code/build
#########################################################
@ -100,4 +99,4 @@ services:
volumes:
frontend_node_modules:
login_build_3.1:
login_build_ubuntu_3.1:

View File

@ -26,7 +26,7 @@ services:
login-server:
build:
context: ./login_server/
target: test
dockerfile: Dockerfiles/ubuntu/Dockerfile.test
security_opt:
- seccomp:unconfined
cap_add:

View File

@ -55,7 +55,6 @@ services:
login-server:
build:
context: ./login_server/
target: login_server
depends_on:
- mariadb
networks:

View File

@ -505,6 +505,29 @@ The link can be modified in the Login-Server config:
For the docker build, you can find the config here: `configs/login_server/grd_login.properties`
### Request
`POST http://localhost/login_api/resetPassword`
with:
```json
{
"session_id": 12452361,
"password":"hasu/282?sjS"
}
```
### Response
In case of success returns:
```json
{
"state":"success"
}
```
## Check Running Transactions / password encryption
Check if transactions on login-server for user are processed

View File

@ -1,6 +1,6 @@
{
"name": "bootstrap-vue-gradido-wallet",
"version": "1.0.2",
"version": "1.1.1",
"private": true,
"scripts": {
"start": "node run/server.js",

View File

@ -102,19 +102,17 @@ const loginAPI = {
const payload = {
session_id: sessionId,
email,
update: {
'User.password': password,
},
password,
}
return apiPost(CONFIG.LOGIN_API_URL + 'updateUserInfos', payload)
return apiPost(CONFIG.LOGIN_API_URL + 'resetPassword', payload)
},
changePasswordProfile: async (sessionId, email, password, passwordNew) => {
const payload = {
session_id: sessionId,
email,
update: {
'User.password': password,
'User.passwordNew': passwordNew,
'User.password_old': password,
'User.password': passwordNew,
},
}
return apiPost(CONFIG.LOGIN_API_URL + 'updateUserInfos', payload)

View File

@ -38,6 +38,12 @@ const numberFormats = {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
},
ungroupedDecimal: {
style: 'decimal',
minimumFractionDigits: 2,
maximumFractionDigits: 2,
useGrouping: false,
},
},
de: {
decimal: {
@ -45,6 +51,12 @@ const numberFormats = {
minimumFractionDigits: 2,
maximumFractionDigits: 2,
},
ungroupedDecimal: {
style: 'decimal',
minimumFractionDigits: 2,
maximumFractionDigits: 2,
useGrouping: false,
},
},
}

View File

@ -39,6 +39,7 @@
"password_new":"neues Passwort",
"password_new_repeat":"neues Passwort wiederholen",
"change": "ändern",
"change-password": "Passwort ändern",
"amount":"Betrag",
"memo":"Nachricht für den Empfänger",
"message":"Nachricht",
@ -65,7 +66,8 @@
},
"error": {
"error":"Fehler",
"no-account": "Leider konnten wir keinen Account finden mit diesen Daten!"
"no-account": "Leider konnten wir keinen Account finden mit diesen Daten!",
"change-password": "Fehler beim Ändern des Passworts"
},
"transaction":{
"show_all":"Alle <strong>{count}</strong> Transaktionen ansehen",

View File

@ -39,6 +39,7 @@
"password_new":"New password",
"password_new_repeat":"Repeat new password",
"change": "change",
"change-password": "Change password",
"amount":"Amount",
"memo":"Message for the recipient",
"message":"Message",
@ -65,7 +66,8 @@
},
"error": {
"error":"Error",
"no-account": "Unfortunately we could not find an account to the given data!"
"no-account": "Unfortunately we could not find an account to the given data!",
"change-password": "Error while changing password"
},
"transaction":{
"show_all":"View all <strong>{count}</strong> transactions.",

View File

@ -60,8 +60,8 @@ extend('gddSendAmount', {
},
params: ['min', 'max'],
message: (_, values) => {
values.min = i18n.n(values.min)
values.max = i18n.n(values.max)
values.min = i18n.n(values.min, 'ungroupedDecimal')
values.max = i18n.n(values.max, 'ungroupedDecimal')
return i18n.t('form.validation.gddSendAmount', values)
},
})

View File

@ -144,9 +144,6 @@ export default {
mounted() {
this.initScrollbar()
},
created() {
this.updateTransactions({ firstPage: 1, items: 5 })
},
}
</script>
<style lang="scss">

View File

@ -45,7 +45,7 @@ describe('GddSend', () => {
})
it('has a label form.receiver', () => {
expect(wrapper.findAll('div.text-left').at(0).text()).toBe('form.receiver')
expect(wrapper.find('label.input-1').text()).toBe('form.receiver')
})
it('has a placeholder "E-Mail"', () => {
@ -61,11 +61,11 @@ describe('GddSend', () => {
})
it('has an GDD text icon', () => {
expect(wrapper.find('#input-group-2').find('div.h3').text()).toBe('GDD')
expect(wrapper.find('#input-group-2').find('div.m-1').text()).toBe('GDD')
})
it('has a label form.amount', () => {
expect(wrapper.findAll('div.text-left').at(1).text()).toBe('form.amount')
expect(wrapper.find('label.input-2').text()).toBe('form.amount')
})
it('has a placeholder "0.01"', () => {
@ -87,7 +87,7 @@ describe('GddSend', () => {
})
it('has a label form.memo', () => {
expect(wrapper.findAll('div.text-left').at(2).text()).toBe('form.memo')
expect(wrapper.find('label.input-3').text()).toBe('form.memo')
})
})

View File

@ -1,7 +1,7 @@
<template>
<b-row class="transaction-form">
<b-col xl="12" md="12">
<b-card class="p-0 p-md-3" style="background-color: #ebebeba3 !important">
<b-col xl="12" md="12" class="p-0">
<b-card class="p-0 m-0" style="background-color: #ebebeba3 !important">
<!-- -<QrCode @set-transaction="setTransaction"></QrCode> -->
<validation-observer v-slot="{ handleSubmit }" ref="formValidator">
<b-form role="form" @submit.prevent="handleSubmit(onSubmit)" @reset="onReset">
@ -10,6 +10,7 @@
</div>
<br />
-->
<div>
<validation-provider
name="Email"
@ -21,33 +22,37 @@
v-slot="{ errors }"
>
<b-row>
<b-col class="text-left p-3 p-sm-1">{{ $t('form.receiver') }}</b-col>
<b-col v-if="errors" class="text-right p-3 p-sm-1">
<span v-for="error in errors" :key="error" class="errors">{{ error }}</span>
</b-col>
</b-row>
<label class="input-1" for="input-1">{{ $t('form.receiver') }}</label>
<b-input-group
id="input-group-1"
label="Empfänger:"
label-for="input-1"
class="border border-default"
description="We'll never share your email with anyone else."
size="lg"
class="mb-3"
>
<b-input-group-prepend class="p-3 d-none d-md-block">
<b-icon icon="envelope" class="display-3"></b-icon>
<b-input-group-prepend class="d-none d-md-block">
<b-icon icon="envelope" class="display-4 m-3"></b-icon>
</b-input-group-prepend>
<b-form-input
id="input-1"
v-model="form.email"
v-focus="emailFocused"
@focus="emailFocused = true"
@blur="normalizeEmail()"
type="email"
placeholder="E-Mail"
style="font-size: xx-large; padding-left: 20px"
style="font-size: large"
class="pl-3"
></b-form-input>
</b-input-group>
</validation-provider>
</div>
<br />
<div>
<validation-provider
:name="$t('form.amount')"
@ -58,33 +63,32 @@
v-slot="{ errors, valid }"
>
<b-row>
<b-col class="text-left p-3 p-sm-1">{{ $t('form.amount') }}</b-col>
<b-col v-if="errors" class="text-right p-3 p-sm-1">
<b-col v-if="errors" class="col-12 text-right p-3 p-sm-1">
<span v-for="error in errors" class="errors" :key="error">{{ error }}</span>
</b-col>
</b-row>
<b-input-group
id="input-group-2"
label="Betrag:"
label-for="input-2"
size="lg"
class="mb-3"
>
<label class="input-2" for="input-2">{{ $t('form.amount') }}</label>
<b-input-group id="input-group-2" class="border border-default" size="lg">
<b-input-group-prepend class="p-2 d-none d-md-block">
<div class="h3 pt-3 pr-3">GDD</div>
<div class="m-1 mt-2">GDD</div>
</b-input-group-prepend>
<b-form-input
id="input-2"
v-model="form.amount"
type="text"
v-focus="amountFocused"
@focus="amountFocused = !amountFocused"
@focus="amountFocused = true"
@blur="normalizeAmount(valid)"
:placeholder="$n(0.01)"
style="font-size: xx-large; padding-left: 20px"
style="font-size: large"
class="pl-3"
></b-form-input>
</b-input-group>
</validation-provider>
</div>
<div class="mt-4">
<validation-provider
:rules="{
required: true,
@ -95,20 +99,20 @@
v-slot="{ errors }"
>
<b-row>
<b-col class="text-left p-3 p-sm-1">{{ $t('form.memo') }}</b-col>
<b-col v-if="errors" class="text-right p-3 p-sm-1">
<span v-for="error in errors" class="errors" :key="error">{{ error }}</span>
</b-col>
</b-row>
<b-input-group id="input-group-3">
<b-input-group-prepend class="p-3 d-none d-md-block">
<b-icon icon="chat-right-text" class="display-3"></b-icon>
<label class="input-3" for="input-3">{{ $t('form.memo') }}</label>
<b-input-group id="input-group-3" class="border border-default">
<b-input-group-prepend class="d-none d-md-block">
<b-icon icon="chat-right-text" class="display-4 m-3 mt-4"></b-icon>
</b-input-group-prepend>
<b-form-textarea
id="input-3"
rows="3"
v-model="form.memo"
class="pl-3"
style="font-size: x-large"
></b-form-textarea>
</b-input-group>
</validation-provider>
@ -153,6 +157,7 @@ export default {
data() {
return {
amountFocused: false,
emailFocused: false,
form: {
email: '',
amount: '',
@ -181,10 +186,14 @@ export default {
this.form.amount = data.amount
},
normalizeAmount(isValid) {
this.amountFocused = !this.amountFocused
this.amountFocused = false
if (!isValid) return
this.form.amountValue = Number(this.form.amount.replace(',', '.'))
this.form.amount = this.$n(this.form.amountValue, 'decimal')
this.form.amount = this.$n(this.form.amountValue, 'ungroupedDecimal')
},
normalizeEmail() {
this.emailFocused = false
this.form.email = this.form.email.trim()
},
},
}

View File

@ -1,13 +1,13 @@
<template>
<b-row v-if="!error">
<b-col>
<b-card class="p-0 p-md-3" style="background-color: #ebebeba3 !important">
<div class="display-2 p-4">
<b-card class="p-0" style="background-color: #ebebeba3 !important">
<div class="p-4">
{{ $t('form.thx') }}
<hr />
{{ $t('form.send_transaction_success') }}
</div>
<p class="text-center">
<p class="text-center mt-3">
<b-button variant="success" @click="$emit('on-reset')">{{ $t('form.close') }}</b-button>
</p>
</b-card>
@ -15,13 +15,13 @@
</b-row>
<b-row v-else>
<b-col>
<b-card class="p-0 p-md-3" style="background-color: #ebebeba3 !important">
<div class="display-2 p-4">
<b-card class="p-0" style="background-color: #ebebeba3 !important">
<div class="p-4" style="font-size: 1.5rem">
{{ $t('form.sorry') }}
<hr />
{{ $t('form.send_transaction_error') }}
</div>
<p class="text-center">
<p class="text-center mt-3">
<b-button variant="success" @click="$emit('on-reset')">{{ $t('form.close') }}</b-button>
</p>
</b-card>

View File

@ -1,13 +1,13 @@
<template>
<div>
<b-row>
<b-col>
<b-card style="background-color: #ebebeba3 !important">
<b-col class="p-0">
<b-card class="p-0" style="background-color: #ebebeba3 !important">
{{ pending ? '—' : $n(balance, 'decimal') }} GDD
</b-card>
</b-col>
<b-col>
<b-card class="lg-h2 text-right" style="background-color: #ebebeba3 !important">
<b-col class="pr-0">
<b-card class="p-0 text-right" style="background-color: #ebebeba3 !important">
{{ pending ? '—' : $n(GdtBalance, 'decimal') }} GDT
</b-card>
</b-col>

View File

@ -56,6 +56,11 @@ describe('ResetPassword', () => {
$router: {
push: routerPushMock,
},
$loading: {
show: jest.fn(() => {
return { hide: jest.fn() }
}),
},
}
const stubs = {

View File

@ -154,6 +154,9 @@ export default {
}
},
async authenticate() {
const loader = this.$loading.show({
container: this.$refs.submitButton,
})
const optin = this.$route.params.optin
const result = await loginAPI.loginViaEmailVerificationCode(optin)
if (result.success) {
@ -163,6 +166,7 @@ export default {
} else {
this.$toast.error(result.result.message)
}
loader.hide()
},
},
computed: {

View File

@ -8,7 +8,7 @@
<div class="card-profile-stats d-flex justify-content-center mt-md-5">
<div>
<span class="heading">
{{ $n(balance) }}
{{ $n(balance, 'decimal') }}
</span>
<span class="description">GDD</span>
</div>

View File

@ -31,7 +31,7 @@
<b-container>
<b-form @keyup.prevent="loadSubmitButton">
<b-row class="mb-3">
<b-col class="col-lg-3 col-md-12 col-sm-12 text-md-left text-lg-right">
<b-col class="col-12 col-lg-3 col-md-12 col-sm-12 text-md-left text-lg-right">
<small>{{ $t('form.firstname') }}</small>
</b-col>
<b-col v-if="showUserData" class="col-sm-10 col-md-9">
@ -42,7 +42,7 @@
</b-col>
</b-row>
<b-row class="mb-3">
<b-col class="col-lg-3 col-md-12 col-sm-12 text-md-left text-lg-right">
<b-col class="col-12 col-lg-3 col-md-12 col-sm-12 text-md-left text-lg-right">
<small>{{ $t('form.lastname') }}</small>
</b-col>
<b-col v-if="showUserData" class="col-sm-10 col-md-9">
@ -52,8 +52,8 @@
<b-input type="text" v-model="form.lastName"></b-input>
</b-col>
</b-row>
<b-row class="mb-3">
<b-col class="col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<b-row class="mb-3" v-show="false">
<b-col class="col-12 col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<small>{{ $t('form.description') }}</small>
</b-col>
<b-col v-if="showUserData" class="col-sm-10 col-md-9">

View File

@ -0,0 +1,127 @@
import { mount } from '@vue/test-utils'
import UserCardFormPasswort from './UserCard_FormUserPasswort'
import loginAPI from '../../../apis/loginAPI'
// import flushPromises from 'flush-promises'
jest.mock('../../../apis/loginAPI')
const localVue = global.localVue
const changePasswordProfileMock = jest.fn()
loginAPI.changePasswordProfile = changePasswordProfileMock
const toastSuccessMock = jest.fn()
const toastErrorMock = jest.fn()
describe('UserCardFormUserPasswort', () => {
let wrapper
const mocks = {
$t: jest.fn((t) => t),
$store: {
state: {
sessionId: 1,
email: 'user@example.org',
},
},
$toast: {
success: toastSuccessMock,
error: toastErrorMock,
},
}
const Wrapper = () => {
return mount(UserCardFormPasswort, { localVue, mocks })
}
describe('mount', () => {
beforeEach(() => {
wrapper = Wrapper()
})
it('renders the component', () => {
expect(wrapper.find('div#change_pwd').exists()).toBeTruthy()
})
it('has a change password button', () => {
expect(wrapper.find('a').exists()).toBeTruthy()
})
it('has a change password button with text "form.change-password"', () => {
expect(wrapper.find('a').text()).toEqual('form.change-password')
})
it('has a change password button with a pencil icon', () => {
expect(wrapper.find('svg.bi-pencil').exists()).toBeTruthy()
})
describe('change password from', () => {
let form
beforeEach(async () => {
wrapper.find('a').trigger('click')
await wrapper.vm.$nextTick()
form = wrapper.find('form')
})
it('has a change password form', () => {
expect(form.exists()).toBeTruthy()
})
it('has a cancel button', () => {
expect(form.find('svg.bi-x-circle').exists()).toBeTruthy()
})
it('closes the form when cancel button is clicked', async () => {
form.find('svg.bi-x-circle').trigger('click')
await wrapper.vm.$nextTick()
expect(wrapper.find('input').exists()).toBeFalsy()
})
it('has three input fields', () => {
expect(form.findAll('input')).toHaveLength(3)
})
it('switches the first input type to text when show password is clicked', async () => {
form.findAll('button').at(0).trigger('click')
await wrapper.vm.$nextTick()
expect(form.findAll('input').at(0).attributes('type')).toEqual('text')
})
it('switches the second input type to text when show password is clicked', async () => {
form.findAll('button').at(1).trigger('click')
await wrapper.vm.$nextTick()
expect(form.findAll('input').at(1).attributes('type')).toEqual('text')
})
it('switches the third input type to text when show password is clicked', async () => {
form.findAll('button').at(2).trigger('click')
await wrapper.vm.$nextTick()
expect(form.findAll('input').at(2).attributes('type')).toEqual('text')
})
it('has a submit button', () => {
expect(form.find('button[type="submit"]').exists()).toBeTruthy()
})
/*
describe('submit', () => {
beforeEach(async () => {
await form.findAll('input').at(0).setValue('1234')
await form.findAll('input').at(1).setValue('Aa123456')
await form.findAll('input').at(2).setValue('Aa123456')
form.trigger('submit')
await wrapper.vm.$nextTick()
await flushPromises()
})
it('calls the API', async () => {
await wrapper.vm.$nextTick()
await flushPromises()
expect(changePasswordProfileMock).toHaveBeenCalledWith(1, 'user@example.org', '1234', 'Aa123456')
})
})
*/
})
})
})

View File

@ -4,14 +4,14 @@
<b-form @keyup.prevent="loadSubmitButton">
<b-row class="mb-4 text-right">
<b-col class="text-right">
<a href="#change_pwd" v-if="edit_pwd" @click="edit_pwd = !edit_pwd">
<span>{{ $t('form.password') }} {{ $t('form.change') }}</span>
<a href="#change_pwd" v-if="!editPassword" @click="editPassword = !editPassword">
<span>{{ $t('form.change-password') }}</span>
<b-icon class="pointer ml-3" icon="pencil" />
</a>
<b-icon
v-else
@click="edit_pwd = !edit_pwd"
@click="cancelEdit()"
class="pointer"
icon="x-circle"
variant="danger"
@ -19,9 +19,9 @@
</b-col>
</b-row>
<div v-if="!edit_pwd">
<div v-if="editPassword">
<b-row class="mb-5">
<b-col class="col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<b-col class="col-12 col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<small>{{ $t('form.password_old') }}</small>
</b-col>
<b-col class="col-md-9 col-sm-10">
@ -45,7 +45,7 @@
</b-row>
<b-row class="mb-3">
<b-col class="col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<b-col class="col-12 col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<small>{{ $t('form.password_new') }}</small>
</b-col>
<b-col class="col-md-9 col-sm-10">
@ -68,7 +68,7 @@
</b-col>
</b-row>
<b-row class="mb-3">
<b-col class="col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<b-col class="col-12 col-lg-3 col-md-10 col-sm-10 text-md-left text-lg-right">
<small>{{ $t('form.password_new_repeat') }}</small>
</b-col>
<b-col class="col-md-9 col-sm-10">
@ -92,7 +92,7 @@
</b-row>
<b-row>
<b-col></b-col>
<b-col>
<b-col class="col-12">
<transition name="hint" appear>
<div v-if="passwordValidation.errors.length > 0" class="hints">
<ul>
@ -105,7 +105,7 @@
</b-col>
</b-row>
<b-row class="text-right" v-if="!edit_pwd">
<b-row class="text-right" v-if="editPassword">
<b-col>
<div class="text-right" ref="submitButton">
<b-button
@ -132,7 +132,7 @@ export default {
name: 'FormUserPasswort',
data() {
return {
edit_pwd: true,
editPassword: false,
email: null,
password: '',
passwordNew: '',
@ -144,6 +144,12 @@ export default {
}
},
methods: {
cancelEdit() {
this.editPassword = false
this.password = ''
this.passwordNew = ''
this.passwordNewRepeat = ''
},
togglePasswordVisibilityNewPwd() {
this.passwordVisibleNewPwd = !this.passwordVisibleNewPwd
},
@ -165,18 +171,19 @@ export default {
this.loading = true
}
},
async onSubmit() {
// console.log(this.data)
async onSubmit(event) {
event.preventDefault()
const result = await loginAPI.changePasswordProfile(
this.$store.state.sessionId,
this.email,
this.$store.state.email,
this.password,
this.passwordNew,
)
if (result.success) {
alert('changePassword success')
this.$toast.success(this.$t('site.thx.reset'))
this.cancelEdit()
} else {
alert(result.result.message)
this.$toast.error(result.result.message)
}
},
},

View File

@ -27,9 +27,9 @@ describe('UserProfileOverview', () => {
expect(wrapper.findComponent({ name: 'FormUserData' }).exists()).toBeTruthy()
})
it('has a user name form', () => {
expect(wrapper.findComponent({ name: 'FormUsername' }).exists()).toBeTruthy()
})
// it('has a user name form', () => {
// expect(wrapper.findComponent({ name: 'FormUsername' }).exists()).toBeTruthy()
// })
it('has a user password form', () => {
expect(wrapper.findComponent({ name: 'FormUserPasswort' }).exists()).toBeTruthy()

View File

@ -2,21 +2,21 @@
<b-container fluid>
<user-card :balance="balance" :transactionCount="transactionCount"></user-card>
<form-user-data />
<form-username />
<!--<form-username />-->
<form-user-passwort />
</b-container>
</template>
<script>
import UserCard from './UserProfile/UserCard.vue'
import FormUserData from './UserProfile/UserCard_FormUserData.vue'
import FormUsername from './UserProfile/UserCard_FormUsername.vue'
// import FormUsername from './UserProfile/UserCard_FormUsername.vue'
import FormUserPasswort from './UserProfile/UserCard_FormUserPasswort.vue'
export default {
components: {
UserCard,
FormUserData,
FormUsername,
// FormUsername,
FormUserPasswort,
},
props: {

View File

@ -1,85 +1,4 @@
#########################################################################################################
# Prepare debug
#########################################################################################################
FROM gradido/login_dependencies:gcc9-debug-3 as prepare_debug
ENV DOCKER_WORKDIR="/code"
WORKDIR ${DOCKER_WORKDIR}
RUN echo '/usr/local/lib' >> /etc/ld.so.conf && ldconfig
COPY ./CMakeLists.txt.lib ./CMakeLists.txt
RUN ln -s /usr/local/googletest ./googletest
COPY ./src ./src
COPY ./cmake/CodeCoverage.cmake ./cmake/CodeCoverage.cmake
COPY ./dependencies/cmake-modules ./dependencies/cmake-modules
COPY ./dependencies/spirit-po ./dependencies/spirit-po
COPY ./dependencies/tinf ./dependencies/tinf
COPY ./scripts ./scripts
#########################################################################################################
# Install Coverage tool
#########################################################################################################
FROM prepare_debug as coverage
RUN apt-get update && \
apt-get install -y --no-install-recommends python3-pip && \
apt-get autoclean && \
apt-get autoremove && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
RUN pip3 install gcovr setuptools wheel && \
pip3 install fastcov
#########################################################################################################
# Build test
#########################################################################################################
FROM coverage as test
ENV DOCKER_WORKDIR="/code"
WORKDIR ${DOCKER_WORKDIR}
RUN if [ ! -d "./build_cov" ] ; then mkdir build_cov; fi
RUN cd build_cov && \
cmake -DCMAKE_BUILD_TYPE=Debug -DCOLLECT_COVERAGE_DATA=ON -DCOVERAGE_TOOL=fastcov .. && \
make -j$(nproc) Gradido_LoginServer_Test
#RUN chmod +x build_cov/bin/Gradido_LoginServer_Test
#CMD gdb -ex run ./build_cov/bin/Gradido_LoginServer_Test
#CMD ./build_cov/bin/Gradido_LoginServer_Test
#ENTRYPOINT make -C build_cov coverage
CMD cd build_cov && make coverage && \
if [ ! -d "./coverage" ] ; then mkdir coverage; fi && \
cp coverage.info ./coverage/
#########################################################################################################
# Build debug
#########################################################################################################
FROM prepare_debug as debug
ENV DOCKER_WORKDIR="/code"
WORKDIR ${DOCKER_WORKDIR}
RUN mkdir build && \
cd build && \
cmake -DCMAKE_BUILD_TYPE=Debug .. && \
make -j$(nproc) Gradido_LoginServer
RUN cd scripts && \
chmod +x compile_pot.sh && \
./compile_pot.sh
RUN chmod +x build/bin/Gradido_LoginServer
ENTRYPOINT ["build/bin/Gradido_LoginServer"]
#########################################################################################################
# Build release
#########################################################################################################

View File

@ -1,3 +1,14 @@
# Login-Server Build dependencies for alpine
# Uploaded to hub.docker.com with the tag:
# gradido/login_dependencies:alpine-debug-3 for debug build
# and
# gradido/login_dependencies:alpine-release-3 for release build
# Update tag when dependencies are added or removed
# Control Build Type with ARG BUILD_TYPE
# Valid values do you find here: https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
# Default is set to Debug
##### BUILD-ENV #####
FROM alpine:3.13.5 as alpine-build

View File

@ -0,0 +1,49 @@
#########################################################################################################
# Build release
#########################################################################################################
FROM gradido/login_dependencies:alpine-release-3 as release
ENV DOCKER_WORKDIR="/code"
WORKDIR ${DOCKER_WORKDIR}
COPY ./CMakeLists.txt.lib ./CMakeLists.txt
COPY ./src ./src
RUN ln -s /usr/local/googletest ./googletest
COPY ./dependencies/cmake-modules ./dependencies/cmake-modules
COPY ./dependencies/spirit-po ./dependencies/spirit-po
COPY ./dependencies/tinf ./dependencies/tinf
COPY ./scripts ./scripts
RUN mkdir build && \
cd build && \
cmake -DCMAKE_BUILD_TYPE=Release .. && \
make -j$(nproc) Gradido_LoginServer
RUN cd scripts && \
chmod +x compile_pot.sh && \
./compile_pot.sh
#########################################################################################################
# run release
#########################################################################################################
#From alpine:latest as login_server
FROM alpine:3.13.5 as login_server
USER root
WORKDIR "/usr/bin"
COPY --from=release /code/build/bin/Gradido_LoginServer /usr/bin/
COPY --from=release /usr/local/lib/mariadb/libmariadb.so.3 /usr/local/lib/
COPY --from=release /usr/local/lib/libPoco* /usr/local/lib/
COPY --from=release /usr/local/lib/libproto* /usr/local/lib/
COPY --from=release /usr/lib/libsodium.so.23 /usr/lib/
COPY --from=release /usr/lib/libstdc++.so.6 /usr/lib/
COPY --from=release /usr/lib/libgcc_s.so.1 /usr/lib/
RUN chmod +x /usr/bin/Gradido_LoginServer
ENTRYPOINT ["/usr/bin/Gradido_LoginServer"]
#CMD Gradido_LoginServer

View File

@ -1,4 +1,9 @@
# Login Server build which contain the config file, found on docker hub with tag:
# gradido/login_server:with-config
# Used for community-server tests on staging
#########################################################################################################
# Build release
#########################################################################################################

View File

@ -0,0 +1,38 @@
#########################################################################################################
# Prepare debug
#########################################################################################################
FROM gradido/login_dependencies:gcc9-debug-3 as prepare_debug
ENV DOCKER_WORKDIR="/code"
WORKDIR ${DOCKER_WORKDIR}
RUN echo '/usr/local/lib' >> /etc/ld.so.conf && ldconfig
COPY ./CMakeLists.txt.lib ./CMakeLists.txt
RUN ln -s /usr/local/googletest ./googletest
COPY ./src ./src
COPY ./dependencies/cmake-modules ./dependencies/cmake-modules
COPY ./dependencies/spirit-po ./dependencies/spirit-po
COPY ./dependencies/tinf ./dependencies/tinf
COPY ./scripts ./scripts
#########################################################################################################
# Build debug
#########################################################################################################
FROM prepare_debug as debug
ENV DOCKER_WORKDIR="/code"
WORKDIR ${DOCKER_WORKDIR}
RUN mkdir build && \
cd build && \
cmake -DCMAKE_BUILD_TYPE=Debug ..
RUN cd scripts && \
chmod +x compile_pot.sh && \
./compile_pot.sh
CMD cd build && cmake .. -DCMAKE_BUILD_TYPE=Debug && make -j$(nproc) Gradido_LoginServer && ./bin/Gradido_LoginServer

View File

@ -1,3 +1,12 @@
# Login-Server Build dependencies for ubuntu
# Uploaded to hub.docker.com with the tag:
# gradido/login_dependencies:gcc9-debug-3 for debug build
# Update tag when dependencies are added or removed
# Control Build Type with ARG BUILD_TYPE
# Valid values do you find here: https://cmake.org/cmake/help/latest/variable/CMAKE_BUILD_TYPE.html
# Default is set to Debug
##### BUILD-ENV #####
FROM gcc:9 as gcc9_build

View File

@ -0,0 +1,49 @@
#########################################################################################################
# Build release
#########################################################################################################
FROM gradido/login_dependencies:ubuntu-release-3 as release
ENV DOCKER_WORKDIR="/code"
WORKDIR ${DOCKER_WORKDIR}
COPY ./CMakeLists.txt.lib ./CMakeLists.txt
COPY ./src ./src
RUN ln -s /usr/local/googletest ./googletest
COPY ./dependencies/cmake-modules ./dependencies/cmake-modules
COPY ./dependencies/spirit-po ./dependencies/spirit-po
COPY ./dependencies/tinf ./dependencies/tinf
COPY ./scripts ./scripts
RUN mkdir build && \
cd build && \
cmake -DCMAKE_BUILD_TYPE=Release .. && \
make -j$(nproc) Gradido_LoginServer
RUN cd scripts && \
chmod +x compile_pot.sh && \
./compile_pot.sh
#########################################################################################################
# run release
#########################################################################################################
#From alpine:latest as login_server
FROM ubuntu:latest as login_server
USER root
WORKDIR "/usr/bin"
COPY --from=release /code/build/bin/Gradido_LoginServer /usr/bin/
COPY --from=release /usr/local/lib/mariadb/libmariadb.so.3 /usr/local/lib/
COPY --from=release /usr/local/lib/libPoco* /usr/local/lib/
COPY --from=release /usr/local/lib/libproto* /usr/local/lib/
COPY --from=release /usr/lib/libsodium.so.23 /usr/lib/
COPY --from=release /usr/lib/libstdc++.so.6 /usr/lib/
COPY --from=release /usr/lib/libgcc_s.so.1 /usr/lib/
RUN chmod +x /usr/bin/Gradido_LoginServer
ENTRYPOINT ["/usr/bin/Gradido_LoginServer"]
#CMD Gradido_LoginServer

View File

@ -0,0 +1,58 @@
#########################################################################################################
# Prepare debug
#########################################################################################################
FROM gradido/login_dependencies:gcc9-debug-3 as prepare_debug
ENV DOCKER_WORKDIR="/code"
WORKDIR ${DOCKER_WORKDIR}
RUN echo '/usr/local/lib' >> /etc/ld.so.conf && ldconfig
COPY ./CMakeLists.txt.lib ./CMakeLists.txt
RUN ln -s /usr/local/googletest ./googletest
COPY ./src ./src
COPY ./cmake/CodeCoverage.cmake ./cmake/CodeCoverage.cmake
COPY ./dependencies/cmake-modules ./dependencies/cmake-modules
COPY ./dependencies/spirit-po ./dependencies/spirit-po
COPY ./dependencies/tinf ./dependencies/tinf
COPY ./scripts ./scripts
#########################################################################################################
# Install Coverage tool
#########################################################################################################
FROM prepare_debug as coverage
RUN apt-get update && \
apt-get install -y --no-install-recommends python3-pip && \
apt-get autoclean && \
apt-get autoremove && \
apt-get clean && \
rm -rf /var/lib/apt/lists/*
# fastcov need gcovr to work
RUN pip3 install gcovr setuptools wheel && \
pip3 install fastcov
#########################################################################################################
# Build test
#########################################################################################################
FROM coverage as test
ENV DOCKER_WORKDIR="/code"
WORKDIR ${DOCKER_WORKDIR}
RUN if [ ! -d "./build_cov" ] ; then mkdir build_cov; fi
RUN cd build_cov && \
cmake -DCMAKE_BUILD_TYPE=Debug -DCOLLECT_COVERAGE_DATA=ON -DCOVERAGE_TOOL=fastcov .. && \
make -j$(nproc) Gradido_LoginServer_Test
#ENTRYPOINT make -C build_cov coverage
CMD cd build_cov && make coverage && \
if [ ! -d "./coverage" ] ; then mkdir coverage; fi && \
cp coverage.info ./coverage/

Binary file not shown.

View File

@ -7,438 +7,452 @@ msgid ""
msgstr ""
"Project-Id-Version: \n"
"Report-Msgid-Bugs-To: \n"
"POT-Creation-Date: 2021-05-18 12:17+0200\n"
"PO-Revision-Date: 2021-05-18 12:21+0200\n"
"POT-Creation-Date: 2021-06-21 13:37+0200\n"
"PO-Revision-Date: 2021-06-21 13:38+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.4.3\n"
"X-Generator: Poedit 3.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:181
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:260
#: build/http_pages/LoginPage.cpp:196 build/http_pages/LoginPage.cpp:275
msgid "Login"
msgstr "Anmeldung"
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:181
#: build/http_pages/LoginPage.cpp:196
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_stage2_local\\login_server\\src\\cpsp\\login.cpsp:190
#: build/http_pages/LoginPage.cpp:205
msgid "Passwort"
msgstr "Passwort"
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:190
#: build/http_pages/LoginPage.cpp:205
msgid ""
"Passwort wird noch berechnet, bitte versuche es in etwa 1 Minute erneut."
msgstr ""
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:193
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:196
#: build/http_pages/LoginPage.cpp:208 build/http_pages/LoginPage.cpp:211
msgid "User"
msgstr ""
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:193
#: build/http_pages/LoginPage.cpp:208
msgid "Error in saved data, the server admin will look at it."
msgstr ""
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:196
#: build/http_pages/LoginPage.cpp:211
msgid "Benutzer ist deaktiviert, kein Login möglich!"
msgstr ""
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:260
#: build/http_pages/LoginPage.cpp:275
msgid "Username and password are needed!"
msgstr "E-Mail und Passwort werden benötigt!"
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:290
#: model/Session.cpp:164 model/Session.cpp:171 model/Session.cpp:223
#: model/Session.cpp:234
#: build/http_pages/LoginPage.cpp:376 src/cpp/model/Session.cpp:161
#: src/cpp/model/Session.cpp:168 src/cpp/model/Session.cpp:220
#: src/cpp/model/Session.cpp:231
msgid "E-Mail"
msgstr ""
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:291
#: SingletonManager/SessionManager.cpp:608
#: SingletonManager/SessionManager.cpp:614
#: SingletonManager/SessionManager.cpp:620
#: SingletonManager/SessionManager.cpp:626
#: SingletonManager/SessionManager.cpp:632
#: SingletonManager/SessionManager.cpp:638
#: build/http_pages/LoginPage.cpp:381
#: src/cpp/SingletonManager/SessionManager.cpp:603
#: src/cpp/SingletonManager/SessionManager.cpp:609
#: src/cpp/SingletonManager/SessionManager.cpp:614
#: src/cpp/SingletonManager/SessionManager.cpp:619
#: src/cpp/SingletonManager/SessionManager.cpp:624
#: src/cpp/SingletonManager/SessionManager.cpp:629
msgid "Password"
msgstr "Passwort"
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:292
#: build/http_pages/LoginPage.cpp:384
msgid " Login "
msgstr "Anmeldung"
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:297
#: build/http_pages/LoginPage.cpp:391
msgid "You haven't any account yet? Please follow the link to create one."
msgstr "Du hast noch kein Gradido-Konto?"
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:299
#: build/http_pages/LoginPage.cpp:395
msgid "Create New Account"
msgstr "Neues Konto erstellen"
#: F:\\Gradido\\gradido_stage2_local\\login_server\\src\\cpsp\\login.cpsp:303
#: build/http_pages/LoginPage.cpp:403
msgid "Passwort vergessen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:73
#: build/http_pages/CheckEmailPage.cpp:155
msgid "E-Mail verifizieren"
msgstr "E-Mail überprüfen"
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:78
#: build/http_pages/CheckEmailPage.cpp:165
msgid ""
"Deine E-Mail wurde erfolgreich bestätigt. Du kannst nun Gradidos versenden."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:79
#: build/http_pages/CheckEmailPage.cpp:170
msgid "Zur Startseite"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:81
#: build/http_pages/CheckEmailPage.cpp:175
msgid "Bitte gib deinen E-Mail Verification Code ein:"
msgstr "Bitte gib deinen E-Mail Verification Code ein:"
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:82
#: model/Session.cpp:187
#: build/http_pages/CheckEmailPage.cpp:178 src/cpp/model/Session.cpp:184
msgid "Email Verification Code"
msgstr "Email Verification Code"
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:83
#: build/http_pages/CheckEmailPage.cpp:185
msgid "&Uuml;berpr&uuml;fe Code"
msgstr "&Uuml;berpr&uuml;fe Code"
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:86
#: build/http_pages/CheckEmailPage.cpp:190
msgid "Du hast bisher keinen Code erhalten?"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:87
#: build/http_pages/CheckEmailPage.cpp:193
msgid "E-Mail erneut zuschicken (in Arbeit)"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:90
#: build/http_pages/CheckEmailPage.cpp:198
msgid "Funktioniert dein E-Mail Verification Code nicht?"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:91
#: build/http_pages/CheckEmailPage.cpp:201
msgid "Schicke uns eine E-Mail und wir k&uuml;mmern uns darum: "
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\checkEmail.cpsp:92
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:151
#: build/http_pages/CheckEmailPage.cpp:208
#: build/http_pages/ResetPasswordPage.cpp:273
msgid "E-Mail an Support schicken"
msgstr ""
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:113
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:124
#: build/http_pages/ResetPasswordPage.cpp:174
#: build/http_pages/ResetPasswordPage.cpp:217
msgid "Gib bitte hier deine E-Mail Adresse an:"
msgstr ""
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:116
#: build/http_pages/ResetPasswordPage.cpp:183
msgid "Bestätigen"
msgstr ""
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:126
#: build/http_pages/ResetPasswordPage.cpp:225
msgid "Hast du dir deine Passphrase notiert oder gemerkt?"
msgstr ""
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:131
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:206
#: build/http_pages/ResetPasswordPage.cpp:234
#: build/http_pages/PassphrasePage.cpp:373
msgid "Ja"
msgstr ""
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:136
#: build/http_pages/ResetPasswordPage.cpp:241
msgid "Nein"
msgstr ""
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:140
#: build/http_pages/ResetPasswordPage.cpp:247
msgid "Absenden"
msgstr ""
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:145
#: build/http_pages/ResetPasswordPage.cpp:255
msgid "Dir wird eine E-Mail zugeschickt um dein Passwort zur&uuml;ckzusetzen."
msgstr ""
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:147
#: build/http_pages/ResetPasswordPage.cpp:260
msgid "Der Admin hat eine E-Mail bekommen und wird sich bei dir melden."
msgstr ""
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:149
#: build/http_pages/ResetPasswordPage.cpp:265
msgid ""
"Du hast bereits eine E-Mail bekommen. Bitte schau auch in dein Spam-"
"Verzeichnis nach. "
msgstr ""
#: F:\\Gradido\\gradido_local\\login_server\\src\\cpsp\\resetPassword.cpsp:150
#: build/http_pages/ResetPasswordPage.cpp:268
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:26
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:96
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:117
#: model/Session.cpp:468 model/Session.cpp:480 model/Session.cpp:494
#: build/http_pages/PassphrasePage.cpp:41
#: build/http_pages/PassphrasePage.cpp:111
#: build/http_pages/PassphrasePage.cpp:132 src/cpp/model/Session.cpp:465
#: src/cpp/model/Session.cpp:477 src/cpp/model/Session.cpp:491
msgid "Passphrase"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:27
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:266
#: build/http_pages/PassphrasePage.cpp:42
#: build/http_pages/PassphrasePage.cpp:451
msgid "Neues Konto anlegen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:28
#: build/http_pages/PassphrasePage.cpp:43
msgid "2/3"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:96
#: build/http_pages/PassphrasePage.cpp:111
msgid ""
"Diese Passphrase ist ung&uuml;ltig, bitte &uuml;berpr&uuml;fen oder neu "
"generieren (lassen)."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:117
#: build/http_pages/PassphrasePage.cpp:132
msgid "intern error please try again later"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:132
#: build/http_pages/PassphrasePage.cpp:147
msgid "3/3"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:135
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:138
#: build/http_pages/PassphrasePage.cpp:150
#: build/http_pages/PassphrasePage.cpp:153
msgid "1/3"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:137
#: build/http_pages/PassphrasePage.cpp:152
msgid "Neues Passwort anlegen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:148
#: build/http_pages/PassphrasePage.cpp:270
msgid "Passphrase abschreiben"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:159
#: build/http_pages/PassphrasePage.cpp:287
msgid "Was ist eine Passphrase?"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:160
#: build/http_pages/PassphrasePage.cpp:290
msgid "Deine Passphrase besteht aus den im grünen Feld angezeigten Wörtern."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:161
#: build/http_pages/PassphrasePage.cpp:293
msgid "Sie dient deiner Sicherheit."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:162
#: build/http_pages/PassphrasePage.cpp:296
msgid ""
"Du brauchst deine Passphrase um dein Konto wiederherzustellen, wenn du mal "
"dein Passwort vergessen haben solltest."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:164
#: build/http_pages/PassphrasePage.cpp:300
msgid "Deine Passphrase (Groß/Kleinschreibung beachten)"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:169
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:197
#: build/http_pages/PassphrasePage.cpp:309
#: build/http_pages/PassphrasePage.cpp:352
msgid "Was zu tun ist:"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:170
#: build/http_pages/PassphrasePage.cpp:312
msgid ""
"Schreibe dir die obenstehende Passphrase <b>von Hand</b> auf ein Blatt "
"Papier!"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:171
#: build/http_pages/PassphrasePage.cpp:315
msgid "Speichere sie auf keinen Fall auf deinem Rechner oder Mobilgerät!!"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:172
#: build/http_pages/PassphrasePage.cpp:318
msgid "Bewahre sie an einem sicheren Ort auf!"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:174
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:285
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:290
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:303
#: build/http_pages/PassphrasePage.cpp:322
#: build/http_pages/PassphrasePage.cpp:478
#: build/http_pages/PassphrasePage.cpp:487
#: build/http_pages/PassphrasePage.cpp:511
msgid "Weiter"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:198
#: build/http_pages/PassphrasePage.cpp:355
msgid "Hast du dir deine Passphrase gemerkt?"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:199
#: build/http_pages/PassphrasePage.cpp:358
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:200
#: build/http_pages/PassphrasePage.cpp:361
msgid "Klicke sie an um sie einzusetzen."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:201
#: build/http_pages/PassphrasePage.cpp:364
msgid "Überprüfe dabei, ob du alle Wörter richtig geschrieben hast!"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:205
#: build/http_pages/PassphrasePage.cpp:370
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:252
#: build/http_pages/PassphrasePage.cpp:429
msgid "Deine E-Mail Adresse wurde erfolgreich bestätigt."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:256
#: build/http_pages/PassphrasePage.cpp:437
msgid "Neue Gradido Adresse anlegen / wiederherstellen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:257
#: build/http_pages/PassphrasePage.cpp:440
msgid ""
"Möchtest du ein neues Gradido-Konto anlegen oder ein bestehendes "
"wiederherstellen?"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:273
#: build/http_pages/PassphrasePage.cpp:460
msgid "Bestehendes Konto wiederherstellen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:280
#: build/http_pages/PassphrasePage.cpp:469
msgid ""
"Falls du ein bestehendes Konto wiederherstellen willst, gib hier deine "
"Passphrase ein:"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:297
#: build/http_pages/PassphrasePage.cpp:497
msgid "Konto wiederherstellen / Neues Passwort anlegen"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:299
#: build/http_pages/PassphrasePage.cpp:501
msgid ""
"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."
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:313
#: build/http_pages/PassphrasePage.cpp:524
msgid "Fehler"
msgstr ""
#: F:\\Gradido\\gradido_login_server\\src\\cpsp\\passphrase.cpsp:314
#: build/http_pages/PassphrasePage.cpp:527
msgid ""
"Ungültige Seite, wenn du das siehst stimmt hier etwas nicht. Bitte wende "
"dich an den Server-Admin."
msgstr ""
#: model/Session.cpp:150 model/Session.cpp:180 model/Session.cpp:779
#: model/Session.cpp:785 model/Session.cpp:1061 model/Session.cpp:1077
#: src/cpp/model/Session.cpp:147 src/cpp/model/Session.cpp:177
#: src/cpp/model/Session.cpp:645 src/cpp/model/Session.cpp:651
#: src/cpp/model/Session.cpp:937 src/cpp/model/Session.cpp:953
msgid "Benutzer"
msgstr ""
#: model/Session.cpp:150
#: src/cpp/model/Session.cpp:147
msgid "Eingeloggter Benutzer ist kein Admin"
msgstr ""
#: model/Session.cpp:156 model/Session.cpp:215
#: src/cpp/model/Session.cpp:153 src/cpp/model/Session.cpp:212
msgid "Vorname"
msgstr ""
#: model/Session.cpp:156 model/Session.cpp:160 model/Session.cpp:215
#: model/Session.cpp:219
#: src/cpp/model/Session.cpp:153 src/cpp/model/Session.cpp:157
#: src/cpp/model/Session.cpp:212 src/cpp/model/Session.cpp:216
msgid ""
"Bitte gebe einen Namen an. Mindestens 3 Zeichen, keines folgender Zeichen "
"<>&;"
msgstr ""
#: model/Session.cpp:160 model/Session.cpp:219
#: src/cpp/model/Session.cpp:157 src/cpp/model/Session.cpp:216
msgid "Nachname"
msgstr ""
#: model/Session.cpp:164 model/Session.cpp:223
#: src/cpp/model/Session.cpp:161 src/cpp/model/Session.cpp:220
msgid "Bitte gebe eine g&uuml;ltige E-Mail Adresse an."
msgstr ""
#: model/Session.cpp:171
#: src/cpp/model/Session.cpp:168
msgid "F&uuml;r diese E-Mail Adresse gibt es bereits einen Account"
msgstr ""
#: model/Session.cpp:180 model/Session.cpp:187
#: src/cpp/model/Session.cpp:177 src/cpp/model/Session.cpp:184
msgid "Fehler beim speichern!"
msgstr ""
#: model/Session.cpp:234
#: src/cpp/model/Session.cpp:231
msgid "F&uuml;r diese E-Mail Adresse gibt es bereits ein Konto"
msgstr ""
#: model/Session.cpp:258
#: src/cpp/model/Session.cpp:255
msgid "Server"
msgstr ""
#: model/Session.cpp:258
#: src/cpp/model/Session.cpp:255
msgid "Fehler beim speichen des Kontos bitte versuche es später noch einmal"
msgstr ""
#: model/Session.cpp:353 model/Session.cpp:393 model/Session.cpp:966
#: model/Session.cpp:975
#: src/cpp/model/Session.cpp:350 src/cpp/model/Session.cpp:390
#: src/cpp/model/Session.cpp:832 src/cpp/model/Session.cpp:841
msgid "E-Mail Verification"
msgstr "E-Mail Überprüfung"
#: model/Session.cpp:353
#: src/cpp/model/Session.cpp:350
msgid "Du hast dein Konto bereits aktiviert!"
msgstr ""
#: model/Session.cpp:393
#: src/cpp/model/Session.cpp:390
msgid "Falscher Code f&uuml;r aktiven Login"
msgstr ""
#: model/Session.cpp:468
#: src/cpp/model/Session.cpp:465
msgid "Deine Passphrase ist ung&uuml;tig"
msgstr ""
#: model/Session.cpp:480
#: src/cpp/model/Session.cpp:477
msgid "Ein Fehler trat auf, bitte versuche es erneut"
msgstr ""
#: model/Session.cpp:494
#: src/cpp/model/Session.cpp:491
msgid "Das ist nicht die richtige Passphrase."
msgstr ""
#: model/Session.cpp:779
#: src/cpp/model/Session.cpp:645
msgid "Konnte Community Server nicht erreichen. E-Mail an den Admin ist raus."
msgstr ""
#: model/Session.cpp:785
#: src/cpp/model/Session.cpp:651
msgid ""
"Fehler beim L&ouml;schen des Accounts. Bitte logge dich erneut ein und "
"versuche es nochmal."
msgstr ""
#: model/Session.cpp:966
#: src/cpp/model/Session.cpp:832
msgid "Konnte kein passendes Konto finden."
msgstr ""
#: model/Session.cpp:975
#: src/cpp/model/Session.cpp:841
msgid "Fehler beim laden des Benutzers."
msgstr ""
#: model/Session.cpp:1061
#: src/cpp/model/Session.cpp:937
msgid "Kein g&uuml;ltiger Benutzer, bitte logge dich erneut ein."
msgstr ""
#: model/Session.cpp:1077
#: src/cpp/model/Session.cpp:953
msgid "Fehler beim generieren der Passphrase, der Admin bekommt eine E-Mail. "
msgstr ""
#: SingletonManager/SessionManager.cpp:609
#: src/cpp/model/email/Email.cpp:174
msgid "Default Email Subject"
msgstr ""
#: src/cpp/model/email/Email.cpp:180
msgid "Error from Gradido Login Server"
msgstr "Fehler auf dem Gradido Login Server"
#: src/cpp/model/email/Email.cpp:200
msgid "Gradido: E-Mail Verification"
msgstr "Gradido: E-Mail Überprüfung"
#: src/cpp/model/email/Email.cpp:246
msgid "Gradido: Reset Password"
msgstr "Gradido: Passwort zurücksetzen"
#: src/cpp/SingletonManager/SessionManager.cpp:604
msgid ""
"Please enter a valid password with at least 8 characters, upper and lower "
"case letters, at least one number and one special character (@$!%*?&+-_)!"
@ -447,23 +461,23 @@ msgstr ""
"Kleinbuchstaben, mindestens einer Zahl und einem Sonderzeichen (@$!%*?&+-_) "
"ein!"
#: SingletonManager/SessionManager.cpp:615
#: src/cpp/SingletonManager/SessionManager.cpp:610
msgid "Your password is to short!"
msgstr "Dein Passwort ist zu kurz!"
#: SingletonManager/SessionManager.cpp:621
#: src/cpp/SingletonManager/SessionManager.cpp:615
msgid "Your password does not contain lowercase letters!"
msgstr "Dein Passwort enthält keine Kleinbuchstaben!"
#: SingletonManager/SessionManager.cpp:627
#: src/cpp/SingletonManager/SessionManager.cpp:620
msgid "Your password does not contain any capital letters!"
msgstr " Dein Passwort enthält keine Großbuchstaben!"
#: SingletonManager/SessionManager.cpp:633
#: src/cpp/SingletonManager/SessionManager.cpp:625
msgid "Your password does not contain any number!"
msgstr "Dein Passwort enthält keine Zahlen!"
#: SingletonManager/SessionManager.cpp:639
#: src/cpp/SingletonManager/SessionManager.cpp:630
msgid "Your password does not contain special characters (@$!%*?&+-)!"
msgstr "Dein Passwort enthält keine Sonderzeichen (@$!%*?&+-)!"
@ -493,9 +507,6 @@ msgstr "Dein Passwort enthält keine Sonderzeichen (@$!%*?&+-)!"
#~ "Der neue Gradido basiert technisch auf einer Kryptowährung (wie z.B. "
#~ "Bitcoin) um für dich die maximale Sicherheit zu gewährleisten."
#~ msgid "Gradido: E-Mail Verification"
#~ msgstr "Gradido: E-Mail Überprüfung"
#~ msgid ""
#~ "Der Code stimmt nicht, bitte &uuml;berpr&uuml;fe ihn nochmal oder "
#~ "registriere dich erneut oder wende dich an den Server-Admin"

View File

@ -10,8 +10,6 @@
Poco::JSON::Object* JsonGetLogin::handle(Poco::Dynamic::Var params)
{
int session_id = 0;
auto sm = SessionManager::getInstance();
auto pt = PendingTasksManager::getInstance();
auto observer = SingletonTaskObserver::getInstance();
@ -58,4 +56,4 @@ Poco::JSON::Object* JsonGetLogin::handle(Poco::Dynamic::Var params)
//printf("[JsonGetLogin] %s\n", user_string.data());
return result;
}
}

View File

@ -93,10 +93,10 @@ Poco::JSON::Object* JsonGetUsers::handle(Poco::Dynamic::Var params)
result->set("state", "success");
//Poco::JSON::Object jsonResultObject;
Poco::JSON::Array jsonUsersArray;
Poco::JSON::Array::Ptr jsonUsersArray = new Poco::JSON::Array;
for (auto it = results.begin(); it != results.end(); it++) {
jsonUsersArray.add((*it)->getJson());
jsonUsersArray->add((*it)->getJson());
(*it)->release();
}
results.clear();

View File

@ -227,6 +227,19 @@ Poco::JSON::Object* JsonRequestHandler::checkAndLoadSession(Poco::Dynamic::Var p
return stateError("error parsing query params, Poco Error", ex.displayText());
}
}
else if (params.type() == typeid(Poco::JSON::Object::Ptr)) {
try {
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
auto session_id_obj = paramJsonObject->get("session_id");
if (session_id_obj.isEmpty()) {
return stateError("missing session_id");
}
session_id_obj.convert(session_id);
}
catch (Poco::Exception& ex) {
return stateError("Poco Exception by reading session_id", ex.what());
}
}
if (!session_id) {
return stateError("empty session id");

View File

@ -19,6 +19,7 @@
#include "JsonLoginViaEmailVerificationCode.h"
#include "JsonLogout.h"
#include "JsonNetworkInfos.h"
#include "JsonResetPassword.h"
#include "JsonSendEmail.h"
#include "JsonAdminEmailVerificationResend.h"
#include "JsonGetUserInfos.h"
@ -65,7 +66,7 @@ Poco::Net::HTTPRequestHandler* JsonRequestHandlerFactory::createRequestHandler(c
auto sm = SessionManager::getInstance();
Session* s = nullptr;
if (!session_id) {
if (session_id) {
s = sm->getSession(session_id);
}
@ -114,6 +115,9 @@ Poco::Net::HTTPRequestHandler* JsonRequestHandlerFactory::createRequestHandler(c
else if (url_first_part == "/sendEmail") {
return new JsonSendEmail;
}
else if (url_first_part == "/resetPassword") {
return new JsonResetPassword;
}
else if (url_first_part == "/logout") {
return new JsonLogout(client_host);
}

View File

@ -0,0 +1,53 @@
#include "JsonResetPassword.h"
#include "SingletonManager/SessionManager.h"
#include "SingletonManager/SingletonTaskObserver.h"
Poco::JSON::Object* JsonResetPassword::handle(Poco::Dynamic::Var params)
{
auto result_session_check = checkAndLoadSession(params, false);
if (result_session_check) {
return result_session_check;
}
std::string password;
// if is json object
if (params.type() == typeid(Poco::JSON::Object::Ptr)) {
Poco::JSON::Object::Ptr paramJsonObject = params.extract<Poco::JSON::Object::Ptr>();
try {
auto password_obj = paramJsonObject->get("password");
if (password_obj.isEmpty()) {
return stateError("password missing");
}
password_obj.convert(password);
}
catch (Poco::Exception& ex) {
return stateError("error parsing json", ex.what());
}
}
auto sm = SessionManager::getInstance();
NotificationList errors;
if (!sm->checkPwdValidation(password, &errors, LanguageManager::getInstance()->getFreeCatalog(LANG_EN))) {
return stateError("password isn't valid", &errors);
}
auto user = mSession->getNewUser();
if (user.isNull() || user->getModel().isNull()) {
return stateError("invalid user");
}
auto observer = SingletonTaskObserver::getInstance();
auto email_hash = observer->makeHash(user->getModel()->getEmail());
if (observer->getTaskCount(email_hash, TASK_OBSERVER_PASSWORD_CREATION) > 0) {
return stateError("password encryption is already running");
}
auto update_password_result = user->setNewPassword(password);
if (update_password_result == 2) {
KeyPairEd25519* key_pair = NULL;
if (!user->tryLoadPassphraseUserBackup(&key_pair)) {
user->setGradidoKeyPair(key_pair);
}
}
return stateSuccess();
}

View File

@ -0,0 +1,20 @@
#ifndef __JSON_INTERFACE_JSON_RESET_PASSWORD_
#define __JSON_INTERFACE_JSON_RESET_PASSWORD_
#include "JsonRequestHandler.h"
/*!
* @author Dario Rekowski
* @date 2021-06-16
* @brief reset password, if user has forgetten his password
*
*/
class JsonResetPassword : public JsonRequestHandler
{
public:
Poco::JSON::Object* handle(Poco::Dynamic::Var params);
};
#endif // __JSON_INTERFACE_JSON_RESET_PASSWORD_

View File

@ -171,8 +171,10 @@ Poco::JSON::Object* JsonUpdateUserInfos::handle(Poco::Dynamic::Var params)
if (str_val.size() > 0)
{
if (!user->hasPassword() || isOldPasswordValid(updates, jsonErrorsArray))
if (!user->hasPassword()) {
return stateError("login state invalid");
}
if (isOldPasswordValid(updates, jsonErrorsArray))
{
NotificationList errors;
if (!sm->checkPwdValidation(value.toString(), &errors, LanguageManager::getInstance()->getFreeCatalog(LANG_EN))) {
@ -224,9 +226,10 @@ Poco::JSON::Object* JsonUpdateUserInfos::handle(Poco::Dynamic::Var params)
result->set("errors", jsonErrorsArray);
result->set("valid_values", extractet_values);
if (!jsonErrorsArray.size()) {
result->set("state", "success");
result->set("state", "success");
}
else {
result->set("msg", jsonErrorsArray.get(0));
result->set("state", "error");
}

View File

@ -1,17 +0,0 @@
#include "HederaTaskManager.h"
HederaTaskManager* HederaTaskManager::getInstance()
{
static HederaTaskManager one;
return &one;
}
HederaTaskManager::HederaTaskManager()
{
}
HederaTaskManager::~HederaTaskManager()
{
}

View File

@ -1,23 +0,0 @@
#ifndef __GRADIDO_LOGIN_SINGLETON_MANAGER_HEDERA_TASK_MANAGER_H
#define __GRADIDO_LOGIN_SINGLETON_MANAGER_HEDERA_TASK_MANAGER_H
/*!
* @author: Dario Rekowski
*
* @date: 11.09.2020
*
* @brief: Manage Hedera Task, waiting on Consensus for Hedera Transactions
*
*/
class HederaTaskManager
{
public:
~HederaTaskManager();
static HederaTaskManager* getInstance();
protected:
HederaTaskManager();
};
#endif //__GRADIDO_LOGIN_SINGLETON_MANAGER_HEDERA_TASK_MANAGER_H

View File

@ -42,6 +42,7 @@ int PendingTasksManager::addTask(Poco::AutoPtr<controller::PendingTask> task)
if (task.isNull() || !task->getModel()) {
return -1;
}
auto model = task->getModel();
Poco::ScopedLock<Poco::Mutex> _lock(mWorkMutex);
auto pending_task_list = getTaskListForUser(model->getUserId());
@ -235,30 +236,3 @@ Poco::AutoPtr<controller::PendingTask> PendingTasksManager::getPendingTask(int p
return nullptr;
}
void PendingTasksManager::reportErrorToCommunityServer(Poco::AutoPtr<controller::PendingTask> task, std::string error, std::string errorDetails)
{
// TODO: choose user specific server
JsonRequest phpServerRequest(ServerConfig::g_php_serverHost, ServerConfig::g_phpServerPort);
//Poco::Net::NameValueCollection payload;
Poco::JSON::Object payload;
auto task_model = task->getModel();
auto user_model = task->getUser()->getModel();
payload.set("created", task_model->getCreated());
payload.set("id", task_model->getID());
payload.set("type", task_model->getTaskTypeString());
payload.set("public_key", user_model->getPublicKeyHex());
payload.set("error", error);
payload.set("errorMessage", errorDetails);
auto ret = phpServerRequest.request("errorInTransaction", payload);
if (ret == JSON_REQUEST_RETURN_ERROR)
{
auto em = ErrorManager::getInstance();
em->addError(new Error("PendingTasksManager::reportErrorToCommunityServer", "php server error"));
em->getErrors(&phpServerRequest);
em->sendErrorsAsEmail();
}
}

View File

@ -50,7 +50,6 @@ public:
std::vector<Poco::AutoPtr<controller::PendingTask>> getTransactionsUserMustSign(Poco::AutoPtr<controller::User> user);
std::vector<Poco::AutoPtr<controller::PendingTask>> getTransactionSomeoneMustSign(Poco::AutoPtr<controller::User> user);
void reportErrorToCommunityServer(Poco::AutoPtr<controller::PendingTask> task, std::string error, std::string errorDetails);
protected:
PendingTasksManager();

View File

@ -57,17 +57,17 @@ bool SessionManager::init()
//case VALIDATE_ONLY_URL: mValidations[i] = new Poco::RegularExpression("^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.[a-zA-Z0-9()]{1,6}$"); break;
case VALIDATE_ONLY_URL: mValidations[i] = new Poco::RegularExpression("^https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\/?"); break;
case VALIDATE_HAS_SPECIAL_CHARACTER: mValidations[i] = new Poco::RegularExpression(".*[@$!%*?&+-].*"); break;
case VALIDATE_HAS_UPPERCASE_LETTER:
mValidations[i] = new Poco::RegularExpression(".*[A-Z].*");
case VALIDATE_HAS_UPPERCASE_LETTER:
mValidations[i] = new Poco::RegularExpression(".*[A-Z].*");
ServerConfig::g_ServerKeySeed->put(i, DRRandom::r64());
break;
case VALIDATE_HAS_LOWERCASE_LETTER: mValidations[i] = new Poco::RegularExpression(".*[a-z].*"); break;
default: printf("[SessionManager::%s] unknown validation type\n", __FUNCTION__);
}
}
mInitalized = true;
mInitalized = true;
mWorkingMutex.unlock();
return true;
}
@ -98,7 +98,7 @@ void SessionManager::deinitalize()
}
printf("[SessionManager::deinitalize] count of dead locked sessions: %d\n", mDeadLockedSessionCount);
mInitalized = false;
mWorkingMutex.unlock();
}
@ -142,7 +142,7 @@ Session* SessionManager::getNewSession(int* handle)
// first check if we have any timeouted session to directly reuse it
checkTimeoutSession();
// lock
// lock
try {
//Poco::Mutex::ScopedLock _lock(mWorkingMutex, 500);
mWorkingMutex.tryLock(500);
@ -156,8 +156,8 @@ Session* SessionManager::getNewSession(int* handle)
//UniLib::controller::TaskPtr checkSessionTimeout(new CheckSessionTimeouted);
//checkSessionTimeout->scheduleTask(checkSessionTimeout);
// check if we have an existing session ready to use
while (mEmptyRequestStack.size() > 0) {
// check if we have an existing session ready to use
while (mEmptyRequestStack.size() > 0) {
int local_handle = mEmptyRequestStack.top();
mEmptyRequestStack.pop();
auto resultIt = mRequestSessionMap.find(local_handle);
@ -186,10 +186,10 @@ Session* SessionManager::getNewSession(int* handle)
mRequestSessionMap.erase(local_handle);
}
}
}
// else create new RequestSession Object
// calculate random handle
// check if already exist, if get new
@ -211,7 +211,7 @@ Session* SessionManager::getNewSession(int* handle)
//printf("[SessionManager::getNewSession] handle: %ld, sum: %u\n", newHandle, mRequestSessionMap.size());
mWorkingMutex.unlock();
return requestSession;
//return nullptr;
}
@ -231,7 +231,7 @@ bool SessionManager::releaseSession(int requestHandleSession)
return false;
}
//mWorkingMutex.lock();
auto it = mRequestSessionMap.find(requestHandleSession);
if (it == mRequestSessionMap.end()) {
//printf("[SessionManager::releaseRequestSession] requestSession with handle: %d not found\n", requestHandleSession);
@ -242,16 +242,15 @@ bool SessionManager::releaseSession(int requestHandleSession)
// delete session, not reuse as workaround for server freeze bug
mRequestSessionMap.erase(requestHandleSession);
/*mRequestSessionMap.erase(requestHandleSession);
delete session;
mWorkingMutex.unlock();
return true;
*/
// check if dead locked
if (session->tryLock()) {
session->unlock();
if (!session->isDeadLocked()) {
session->reset();
session->setActive(false);
}
@ -264,9 +263,9 @@ bool SessionManager::releaseSession(int requestHandleSession)
mWorkingMutex.unlock();
return true;
}
// change request handle we don't want session hijacking
// hardcoded disabled session max
if (mEmptyRequestStack.size() > 100) {
mRequestSessionMap.erase(requestHandleSession);
@ -285,11 +284,11 @@ bool SessionManager::releaseSession(int requestHandleSession)
mWorkingMutex.unlock();
return true;
}
session->setHandle(newHandle);
mRequestSessionMap.insert(std::pair<int, Session*>(newHandle, session));
mEmptyRequestStack.push(newHandle);
mWorkingMutex.unlock();
return true;
}
@ -354,13 +353,11 @@ Session* SessionManager::getSession(int handle)
}
if (0 == handle) return nullptr;
Session* result = nullptr;
try {
//Poco::Mutex::ScopedLock _lock(mWorkingMutex, 500);
mWorkingMutex.tryLock(500);
}
catch (Poco::TimeoutException &ex) {
printf("[SessionManager::getSession] exception timout mutex: %s\n", ex.displayText().data());
return result;
if(!mWorkingMutex.tryLock(500)) {
printf("[SessionManager::getSession] exception timout mutex: \n");
return result;
}
//mWorkingMutex.lock();
auto it = mRequestSessionMap.find(handle);
@ -376,14 +373,12 @@ Session* SessionManager::getSession(int handle)
return nullptr;
}
if (0 == iResult) {
//printf("[SessionManager::getSession] session isn't active\n");
mWorkingMutex.unlock();
return nullptr;
}
//result->setActive(true);
result->updateTimeout();
}
//printf("[SessionManager::getSession] handle: %ld\n", handle);
mWorkingMutex.unlock();
return result;
}
@ -418,8 +413,8 @@ Session* SessionManager::findByUserId(int userId)
}
//mWorkingMutex.lock();
for (auto it = mRequestSessionMap.begin(); it != mRequestSessionMap.end(); it++) {
while (it->second->isDeadLocked())
{
while (it->second->isDeadLocked())
{
it = mRequestSessionMap.erase(it);
mDeadLockedSessionCount++;
auto em = ErrorManager::getInstance();
@ -484,7 +479,7 @@ std::vector<Session*> SessionManager::findAllByUserId(int userId)
Session* SessionManager::findByEmail(const std::string& email)
{
assert(email.size() > 0);
try {
//Poco::Mutex::ScopedLock _lock(mWorkingMutex, 500);
mWorkingMutex.tryLock(500);
@ -605,23 +600,23 @@ bool SessionManager::checkPwdValidation(const std::string& pwd, NotificationList
if (!isValid(pwd, VALIDATE_PASSWORD)) {
errorReciver->addError(new Error(
lang->gettext("Password"),
lang->gettext("Password"),
lang->gettext("Please enter a valid password with at least 8 characters, upper and lower case letters, at least one number and one special character (@$!%*?&+-_)!")));
// @$!%*?&+-
if (pwd.size() < 8) {
errorReciver->addError(new Error(
lang->gettext("Password"),
lang->gettext("Password"),
lang->gettext("Your password is to short!")));
}
else if (!isValid(pwd, VALIDATE_HAS_LOWERCASE_LETTER)) {
errorReciver->addError(new Error(
lang->gettext("Password"),
lang->gettext("Password"),
lang->gettext("Your password does not contain lowercase letters!")));
}
else if (!isValid(pwd, VALIDATE_HAS_UPPERCASE_LETTER)) {
errorReciver->addError(new Error(
lang->gettext("Password"),
lang->gettext("Password"),
lang->gettext("Your password does not contain any capital letters!")));
}
else if (!isValid(pwd, VALIDATE_HAS_NUMBER)) {

View File

@ -65,11 +65,11 @@ namespace controller {
std::vector<std::string> fieldNames = { "first_name", "last_name", "email", "email_checked" };
auto session = cm->getConnection(CONNECTION_MYSQL_LOGIN_SERVER);
std::vector<model::table::UserTuple> results;
// Poco::Tuple<int, std::string, std::string, std::string, std::string, std::string, Poco::Nullable<Poco::Data::BLOB>, Poco::DateTime, int, int, int> UserTuple;
using namespace Poco::Data::Keywords;
Poco::Data::Statement select(session);
// typedef Poco::Tuple<int, std::string, std::string, std::string, std::string, Poco::Nullable<Poco::Data::BLOB>, Poco::DateTime, int, int, int> UserTuple;
select << "SELECT id, first_name, last_name, email, username, pubkey, created, email_checked, disabled, group_id FROM " << db->getTableName();
select << "SELECT id, first_name, last_name, email, username, description, pubkey, created, email_checked, disabled, group_id FROM " << db->getTableName();
select << " where email_checked = 0 ";
select, into(resultFromDB);
if (searchString != "") {

View File

@ -21,7 +21,7 @@
***************************************************************************/
/*!
\brief Container Wrapper class for mutex protected container
changed to poco mutex for gradido login server
default mutex from poco is recursive so it is some heavy thing
@ -47,7 +47,7 @@ namespace UniLib {
// \return false if mutex was locked from another thread
bool tryLock();
inline void unlock() { mLastSucceededLock = ""; mWorkMutex.unlock(); }
inline void unlock() { mWorkMutex.unlock(); mLastSucceededLock = ""; }
inline const std::string& getLastSucceededLock() { return mLastSucceededLock; }
protected:
@ -58,4 +58,4 @@ namespace UniLib {
}
}
#endif //__DR_UNIVERSUM_LIB_LIB_MULTITHREAD_CONTAINER_H__
#endif //__DR_UNIVERSUM_LIB_LIB_MULTITHREAD_CONTAINER_H__

View File

@ -84,29 +84,30 @@ void Session::reset()
int Session::isActive()
{
int ret = 0;
try {
mWorkMutex.tryLock(100);
}
catch (Poco::TimeoutException &ex) {
return -1;
}
if(!mWorkMutex.tryLock(100)) {
return -1;
}
ret = (int)mActive;
unlock();
try {
unlock();
} catch(Poco::SystemException& ex) {
addError(new ParamError("Session::isActive", "exception unlocking mutex", ex.what()));
return -1;
}
return ret;
}
bool Session::isDeadLocked()
{
try {
mWorkMutex.tryLock(200);
unlock();
return false;
}
catch (Poco::Exception& ex) {
}
return true;
if(!mWorkMutex.tryLock(200)) {
return true;
};
unlock();
return false;
}
bool Session::setActive(bool active)
@ -922,12 +923,11 @@ bool Session::useOrGeneratePassphrase(const std::string& passphase)
bool Session::lastTransactionTheSame(Poco::AutoPtr<model::gradido::Transaction> newTransaction)
{
assert(!newTransaction.isNull());
lock();
Poco::ScopedLock<Poco::Mutex> _lock(mWorkMutex);
if (mLastTransaction.isNull()) {
return false;
}
bool result = mLastTransaction->isTheSameTransaction(newTransaction);
unlock();
return result;
}

View File

@ -171,13 +171,13 @@ Gradido Login-Server\n\
switch (mType) {
case EMAIL_DEFAULT:
mailMessage->addRecipient(adminRecipient);
mailMessage->setSubject(langCatalog->gettext_str("Default Email Subject"));
mailMessage->setSubject(langCatalog->gettext("Default Email Subject"));
mailMessage->addContent(new Poco::Net::StringPartSource(langCatalog->gettext_str("Empty Email Content"), mt.toString()));
break;
case EMAIL_ERROR:
mailMessage->addRecipient(adminRecipient);
mailMessage->setSubject(langCatalog->gettext_str("Error from Gradido Login Server"));
mailMessage->setSubject(langCatalog->gettext("Error from Gradido Login Server"));
mailMessage->addContent(new Poco::Net::StringPartSource(mErrorHtml, mt.toString()));
break;
@ -197,7 +197,7 @@ Gradido Login-Server\n\
return false;
}
mailMessage->addRecipient(Poco::Net::MailRecipient(Poco::Net::MailRecipient::PRIMARY_RECIPIENT, mUser->getModel()->getEmail()));
mailMessage->setSubject(langCatalog->gettext_str("Gradido: E-Mail Verification"));
mailMessage->setSubject(langCatalog->gettext("Gradido: E-Mail Verification"));
messageTemplate = EmailText_emailVerification;
if (EMAIL_USER_VERIFICATION_CODE_RESEND == mType) {
@ -243,7 +243,7 @@ Gradido Login-Server\n\
return false;
}
mailMessage->addRecipient(Poco::Net::MailRecipient(Poco::Net::MailRecipient::PRIMARY_RECIPIENT, mUser->getModel()->getEmail()));
mailMessage->setSubject(langCatalog->gettext_str(u8"Gradido: Passwort zurücksetzen"));
mailMessage->setSubject(langCatalog->gettext("Gradido: Reset Password"));
mailMessage->addContent(
new Poco::Net::StringPartSource(replaceUserNamesAndLink(

View File

@ -358,6 +358,10 @@ namespace model {
}
//UniLib::controller::TaskPtr transaction_send_task(new SendTransactionTask(Poco::AutoPtr<Transaction>(this, true)));
//transaction_send_task->scheduleTask(transaction_send_task);
auto pt = PendingTasksManager::getInstance();
pt->removeTask(Poco::AutoPtr<Transaction>(this, true));
deleteFromDB();
return 1 == runSendTransaction();
//return true;
}
@ -507,9 +511,6 @@ namespace model {
addError(new ParamError(function_name, "unknown error", TransactionValidationToString(result)));
//sendErrorsAsEmail();
}
auto pt = PendingTasksManager::getInstance();
pt->reportErrorToCommunityServer(Poco::AutoPtr<Transaction>(this, true), error_name, error_description);
addError(new ParamError(function_name, error_name, error_description));
}
return -1;
@ -563,13 +564,13 @@ namespace model {
auto result = json_request.request("putTransaction", param);
json_request.getWarnings(&json_request);
if (JSON_REQUEST_RETURN_OK == result)
{
if (JSON_REQUEST_RETURN_OK == result)
{
if (!json_request.errorCount()) {
finishSuccess();
}
else {
getErrors(&json_request);
getErrors(&json_request);
return -1;
}
return 1;

View File

@ -56,9 +56,9 @@ namespace model {
try {
auto res = select.execute();
if (1 == res) { return true; }
}
catch (Poco::Exception& ex) {
catch (Poco::Exception& ex) {
addError(new ParamError(getTableName(), "mysql error by select id", ex.displayText().data()));
addError(new ParamError(getTableName(), "data set: ", toString().data()));
}
@ -126,20 +126,22 @@ namespace model {
{
Poco::ScopedLock<Poco::Mutex> _lock(mWorkMutex);
mReferenceCount++;
//printf("[ModelBase::duplicate] new value: %d\n", mReferenceCount);
}
void ModelBase::release()
{
Poco::ScopedLock<Poco::Mutex> _lock(mWorkMutex);
if(mReferenceCount <= 0) {
throw Poco::Exception("ModelBase already released", getTableName());
}
Poco::ScopedLock<Poco::Mutex> _lock(mWorkMutex);
mReferenceCount--;
//printf("[ModelBase::release] new value: %d\n", mReferenceCount);
if (0 == mReferenceCount) {
delete this;
return;
}
}
Poco::Data::Statement ModelBase::_loadFromDB(Poco::Data::Session session, const std::vector<std::string>& fieldNames, MysqlConditionType conditionType/* = MYSQL_CONDITION_AND*/)
@ -180,7 +182,7 @@ namespace model {
Poco::Mutex& timeMutex = ServerConfig::g_TimeMutex;
int year, month, day, hour, minute, second;
// ex: 2009-10-29
// ex: 2009-10-29
if (sscanf(decodedDateString.data(), "%d-%d-%dT%d:%dZ", &year, &month, &day, &hour, &minute) != EOF) {
time_t rawTime;
time(&rawTime);

View File

@ -70,7 +70,11 @@ namespace model
{
SHARED_LOCK;
temp = mResultJsonString;
if(!mResultJsonString.size()) {
return new Poco::JSON::Object;
}
}
Poco::JSON::Parser parser;
Poco::Dynamic::Var result;
try

View File

@ -0,0 +1,144 @@
#include "gtest/gtest.h"
#include "SingletonManager/SessionManager.h"
#include "Poco/JSON/Object.h"
#include "JSONInterface/JsonGetUsers.h"
TEST(TestJsonGetUsers, NO_ADMIN)
{
auto sm = SessionManager::getInstance();
auto session = sm->getNewSession();
auto user = controller::User::create();
user->load("d_schultz32@gmx.de");
session->setUser(user);
JsonGetUsers jsonCall;
Poco::JSON::Object::Ptr params = new Poco::JSON::Object;
params->set("search", "b");
params->set("session_id", session->getHandle());
auto result = jsonCall.handle(params);
auto state = result->get("state");
ASSERT_FALSE(state.isEmpty());
ASSERT_TRUE(state.isString());
ASSERT_EQ(state.toString(), "wrong role");
auto msg = result->get("msg");
ASSERT_FALSE(msg.isEmpty());
ASSERT_TRUE(msg.isString());
ASSERT_EQ(msg.toString(), "User hasn't correct role");
sm->releaseSession(session);
}
TEST(TestJsonGetUsers, INVALID_SESSION)
{
JsonGetUsers jsonCall;
Poco::JSON::Object::Ptr params = new Poco::JSON::Object;
params->set("search", "");
params->set("session_id", rand());
auto result = jsonCall.handle(params);
auto state = result->get("state");
ASSERT_FALSE(state.isEmpty());
ASSERT_TRUE(state.isString());
ASSERT_EQ(state.toString(), "not found");
auto msg = result->get("msg");
ASSERT_FALSE(msg.isEmpty());
ASSERT_TRUE(msg.isString());
ASSERT_EQ(msg.toString(), "Session not found");
}
TEST(TestJsonGetUsers, EMPTY_SEARCH)
{
auto sm = SessionManager::getInstance();
auto session = sm->getNewSession();
auto user = controller::User::create();
user->load("Tiger_231@yahoo.com");
session->setUser(user);
JsonGetUsers jsonCall;
Poco::JSON::Object::Ptr params = new Poco::JSON::Object;
params->set("search", "");
params->set("session_id", session->getHandle());
auto result = jsonCall.handle(params);
auto state = result->get("state");
ASSERT_FALSE(state.isEmpty());
ASSERT_TRUE(state.isString());
ASSERT_EQ(state.toString(), "not found");
auto msg = result->get("msg");
ASSERT_FALSE(msg.isEmpty());
ASSERT_TRUE(msg.isString());
ASSERT_EQ(msg.toString(), "Search string is empty and account_state is all or empty");
sm->releaseSession(session);
}
TEST(TestJsonGetUsers, VALID_SEARCH)
{
auto sm = SessionManager::getInstance();
auto session = sm->getNewSession();
auto user = controller::User::create();
user->load("Tiger_231@yahoo.com");
session->setUser(user);
JsonGetUsers jsonCall;
Poco::JSON::Object::Ptr params = new Poco::JSON::Object;
params->set("search", "a");
params->set("session_id", session->getHandle());
auto result = jsonCall.handle(params);
auto state = result->get("state");
ASSERT_FALSE(state.isEmpty());
ASSERT_TRUE(state.isString());
ASSERT_EQ(state.toString(), "success");
auto msg = result->get("msg");
ASSERT_TRUE(msg.isEmpty());
EXPECT_TRUE(result->isArray("users"));
auto users = result->getArray("users");
ASSERT_FALSE(users.isNull());
ASSERT_EQ(users->size(), 6);
sm->releaseSession(session);
}
TEST(TestJsonGetUsers, VALID_STATE_SEARCH)
{
auto sm = SessionManager::getInstance();
auto session = sm->getNewSession();
auto user = controller::User::create();
user->load("Tiger_231@yahoo.com");
session->setUser(user);
JsonGetUsers jsonCall;
Poco::JSON::Object::Ptr params = new Poco::JSON::Object;
params->set("search", "");
params->set("account_state", "email not activated");
params->set("session_id", session->getHandle());
auto result = jsonCall.handle(params);
auto state = result->get("state");
ASSERT_FALSE(state.isEmpty());
ASSERT_TRUE(state.isString());
ASSERT_EQ(state.toString(), "success");
auto msg = result->get("msg");
ASSERT_TRUE(msg.isEmpty());
EXPECT_TRUE(result->isArray("users"));
auto users = result->getArray("users");
ASSERT_FALSE(users.isNull());
ASSERT_EQ(users->size(), 1);
sm->releaseSession(session);
}

View File

@ -0,0 +1,100 @@
#include "gtest/gtest.h"
#include "JSONInterface/JsonResetPassword.h"
#include "TestJsonResetPassword.h"
#include "lib/Profiler.h"
void TestJsonResetPassword::SetUp()
{
auto sm = SessionManager::getInstance();
//sm->init();
mUserSession = sm->getNewSession();
auto user = controller::User::create();
user->load("Nikola_Tesla@email.de");
mUserSession->setUser(user);
}
void TestJsonResetPassword::TearDown()
{
auto sm = SessionManager::getInstance();
if (!mUserSession) {
sm->releaseSession(mUserSession);
}
}
TEST_F(TestJsonResetPassword, WithoutSession)
{
JsonResetPassword jsonCall;
Poco::JSON::Object::Ptr params = new Poco::JSON::Object;
params->set("password", "ashze_Sja/63");
auto result = jsonCall.handle(params);
auto state = result->get("state");
ASSERT_FALSE(state.isEmpty());
ASSERT_TRUE(state.isString());
ASSERT_EQ(state.toString(), "error");
auto msg = result->get("msg");
ASSERT_FALSE(msg.isEmpty());
ASSERT_TRUE(msg.isString());
ASSERT_EQ(msg.toString(), "missing session_id");
}
TEST_F(TestJsonResetPassword, WithoutPassword)
{
JsonResetPassword jsonCall;
Poco::JSON::Object::Ptr params = new Poco::JSON::Object;
params->set("session_id", mUserSession->getHandle());
auto result = jsonCall.handle(params);
auto state = result->get("state");
ASSERT_FALSE(state.isEmpty());
ASSERT_TRUE(state.isString());
ASSERT_EQ(state.toString(), "error");
auto msg = result->get("msg");
ASSERT_FALSE(msg.isEmpty());
ASSERT_TRUE(msg.isString());
ASSERT_EQ(msg.toString(), "password missing");
}
TEST_F(TestJsonResetPassword, InvalidPassword)
{
JsonResetPassword jsonCall;
Poco::JSON::Object::Ptr params = new Poco::JSON::Object;
params->set("session_id", mUserSession->getHandle());
params->set("password", "ash");
auto result = jsonCall.handle(params);
auto state = result->get("state");
ASSERT_FALSE(state.isEmpty());
ASSERT_TRUE(state.isString());
if ((ServerConfig::g_AllowUnsecureFlags & ServerConfig::UNSECURE_ALLOW_ALL_PASSWORDS) == ServerConfig::UNSECURE_ALLOW_ALL_PASSWORDS) {
ASSERT_EQ(state.toString(), "success");
}
else {
ASSERT_EQ(state.toString(), "error");
auto msg = result->get("msg");
ASSERT_FALSE(msg.isEmpty());
ASSERT_TRUE(msg.isString());
ASSERT_EQ(msg.toString(), "password isn't valid");
}
}
TEST_F(TestJsonResetPassword, ValidPassword)
{
JsonResetPassword jsonCall;
Poco::JSON::Object::Ptr params = new Poco::JSON::Object;
params->set("session_id", mUserSession->getHandle());
params->set("password", "hath6/&Sja");
auto result = jsonCall.handle(params);
auto state = result->get("state");
ASSERT_FALSE(state.isEmpty());
ASSERT_TRUE(state.isString());
ASSERT_EQ(state.toString(), "success");
}

View File

@ -0,0 +1,20 @@
#ifndef __GRADIDO_LOGIN_SERVER_TEST_JSON_INTERFACE_TEST_JSON_RESET_PASSWORD_H
#define __GRADIDO_LOGIN_SERVER_TEST_JSON_INTERFACE_TEST_JSON_RESET_PASSWORD_H
#include "gtest/gtest.h"
#include "SingletonManager/SessionManager.h"
#include "Poco/JSON/Object.h"
class TestJsonResetPassword : public ::testing::Test
{
protected:
void SetUp() override;
void TearDown() override;
Session* mUserSession;
};
#endif //__GRADIDO_LOGIN_SERVER_TEST_JSON_INTERFACE_TEST_JSON_RESET_PASSWORD_H

View File

@ -241,16 +241,22 @@ TEST_F(TestJsonUpdateUserInfos, PasswordNotSecureEnough)
delete result;
}
/*
TEST_F(TestJsonUpdateUserInfos, PasswordCorrect)
{
JsonUpdateUserInfos jsonCall(mUserSession);
ASSERT_EQ(mUserSession->loadUser("Jeet_bb@gmail.com", "TestP4ssword&H"), USER_COMPLETE);
Poco::JSON::Object::Ptr update = new Poco::JSON::Object;
update->set("User.password", "uasjUs7ZS/as12");
update->set("User.password_old", "TestP4ssword&H");
if ((ServerConfig::g_AllowUnsecureFlags & ServerConfig::UNSECURE_ALLOW_ALL_PASSWORDS) == ServerConfig::UNSECURE_ALLOW_ALL_PASSWORDS) {
ASSERT_EQ(mUserSession->loadUser("Jeet_bb@gmail.com", "newPassword"), USER_COMPLETE);
update->set("User.password_old", "newPassword");
}
else {
ASSERT_EQ(mUserSession->loadUser("Jeet_bb@gmail.com", "TestP4ssword&H"), USER_COMPLETE);
update->set("User.password_old", "TestP4ssword&H");
}
auto params = chooseAccount(update);
Profiler timeUsed;
@ -269,15 +275,13 @@ TEST_F(TestJsonUpdateUserInfos, PasswordCorrect)
ASSERT_FALSE(state.isEmpty());
ASSERT_TRUE(state.isString());
EXPECT_EQ(valid_values, 1);
ASSERT_EQ(error_array.size(), 0);
ASSERT_EQ(state.toString(), "success");
delete result;
}
*/
//*/
TEST_F(TestJsonUpdateUserInfos, NoChanges)
{
JsonUpdateUserInfos jsonCall(mUserSession);

View File

@ -177,9 +177,10 @@ int load(int argc, char* argv[]) {
// clean up and fill db
std::string tables[] = {
"groups",
"users"
"users",
"user_roles"
};
for (int i = 0; i < 2; i++) {
for (int i = 0; i < 3; i++) {
if (runMysql("TRUNCATE " + tables[i])) {
return -1;
}
@ -204,7 +205,15 @@ int load(int argc, char* argv[]) {
<< "(4, 'Nikola_Tesla@email.de', 'Nikola', 'Tesla', 'Erfinder', 1914014100253540772, 0x1c199421a66070afb28cb7c37de98865b28924bff26161bb65faaf5695050ee3, 0xe38ca460ca748954b29d79f0e943eed3ba85e7e13b18f69349666e31a8e3b06c9df105171796b37b4201895a2f3fe8ec8bf58a181700caaa5752a94a968c50e90ebb6280002a056126b2055ff75d69d1, '2020-02-20 16:05:46', 1, 0, 'de', 0, 1), "
<< "(5, 'Elfenhausen@arcor.de', 'Thomas', 'Markuk', 'Elf', 8105871797752167168, 0x98d703f0ea1def3ef9e6265a76281d125a94c80665425bd7a844580ec1a2ce98, 0x63612a1d07d78a0c945d765a10a30d9de2be602e79e3f39268d731bc6f7fa945d7d04c638000bae089ac058263f52e7c1f2c3550b35b5727e41523f2f592781add65d12b8b8c0b3226f32174cfa1bcee, '2020-02-20 16:05:46', 1, 0, 'de', 0, 1), "
<< "(6, 'coin-info12@gradido.net', 'coin-info12', 'Test', 'Test Username', 9005874071610817324, 0xb3ee1c82a9877f664d05364106e259621b2e203bfbb5323edb7b597051efecc2, 0xa039da7d59e2475dd1aaa635f803ec1aeffc2506e7a96a934bf8d7cf4ac2a96dc962d4e1bdf8e11c5ce7e18189edc36014b89e9e72628004ec5901be6c407a955efb5142a1ee9a2f3aed888125a44aa2, '2020-02-20 16:05:47', 1, 0, 'de', 0, 1), "
<< "(7, 'AlexWesper@gmail.com', 'Alex', 'Wesper', 'Wespe', 7264393213873828644, 0x735a5c22ebe84ab1d6453991d50019b677b82b0663b023c30127ec906ee9b59a, 0xaec30051ad3ab2d2132a76e9dfe5a396d2dfbcc83a4eb27223b4da8803893959af9e29c6963f9e73eddc447cb3d3995527b94054e7fdecd7d5f8cb45c3954ff9bb2c9e0374f2124b3170301f990c5d7d, '2020-02-20 16:05:47', 1, 0, 'de', 0, 1); ";
<< "(7, 'AlexWesper@gmail.com', 'Alex', 'Wesper', 'Wespe', 7264393213873828644, 0x735a5c22ebe84ab1d6453991d50019b677b82b0663b023c30127ec906ee9b59a, 0xaec30051ad3ab2d2132a76e9dfe5a396d2dfbcc83a4eb27223b4da8803893959af9e29c6963f9e73eddc447cb3d3995527b94054e7fdecd7d5f8cb45c3954ff9bb2c9e0374f2124b3170301f990c5d7d, '2020-02-20 16:05:47', 0, 0, 'de', 0, 1); ";
if (runMysql(ss.str())) {
return -1;
}
ss.str(std::string());
ss << "INSERT INTO `user_roles` (`id`, `user_id`, `role_id`) VALUES"
<< "(1, 3, 1);";
if (runMysql(ss.str())) {
return -1;
}

View File

@ -80,6 +80,7 @@ enum PageState {
//
if(transaction && transaction->getModel()->getUserId() == user_model->getID())
{
pt->removeTask(pending_task);
transaction->deleteFromDB();
transaction = nullptr;
}

View File

@ -1,6 +1,6 @@
{
"name": "gradido",
"version": "1.0.2",
"version": "1.1.1",
"description": "Gradido",
"main": "index.js",
"repository": "git@github.com:gradido/gradido.git",