From f9a9e6941894a90be68f4d4b3a2f62481262db30 Mon Sep 17 00:00:00 2001 From: KIMB-technologies Date: Tue, 26 Dec 2017 17:45:49 +0100 Subject: [PATCH] Fixed #21 --- system/load/devjs/fun_maker.js | 13 +++-- system/php/auth.php | 96 ++++++++++++++++++++++++++++++++-- 2 files changed, 102 insertions(+), 7 deletions(-) diff --git a/system/load/devjs/fun_maker.js b/system/load/devjs/fun_maker.js index a12ea32..54a8fd5 100644 --- a/system/load/devjs/fun_maker.js +++ b/system/load/devjs/fun_maker.js @@ -34,6 +34,8 @@ function maker(noteid, notename, sharecont, savecallback) { // wird? // (zB: wenn Server nicht antwortet, aber noch eine Nachricht im localStorage) var noteOverrideDanger = false; + //Leere Notiz geladen? + var onLoadEmpty = false; function get_notedata() { //Daten ohne Server aus localStorage oder Vorgabe nehmen @@ -107,6 +109,8 @@ function maker(noteid, notename, sharecont, savecallback) { $("div.noteview div.loading").addClass("disable"); //Abfrage okay? if (data.status === 'okay') { + onLoadEmpty = data.data.empty; + //neue Notiz (dann Server noch leer) if (!data.data.empty) { @@ -364,8 +368,11 @@ function maker(noteid, notename, sharecont, savecallback) { $("span.notesaved").addClass("disable"); } } - // einmal zu Beginn --- erstmal nichtmehr - // save(); + // einmal zu Beginn, wenn Nachricht leer war + if( onLoadEmpty ){ + save(); + onLoadEmpty = false; + } //bei jeder Änderung cm_editor.on("change", save); @@ -378,7 +385,7 @@ function maker(noteid, notename, sharecont, savecallback) { //Speicherung per AJAX durchführen function ajaxsave(callback) { //überhaupt Änderungen? - if( noteconthash == sjcl.codec.hex.fromBits( sjcl.hash.sha256.hash( cm_editor.getValue() ) ) ){ + if( noteconthash == sjcl.codec.hex.fromBits( sjcl.hash.sha256.hash( cm_editor.getValue() ) ) && !onLoadEmpty ){ //Callback vorhnaden? if (typeof callback === "function") { callback(true); diff --git a/system/php/auth.php b/system/php/auth.php index 3ac3fe3..e6f9684 100644 --- a/system/php/auth.php +++ b/system/php/auth.php @@ -24,12 +24,100 @@ defined("Notestool") or die('No clean Request'); if( !RESTMODE ) die('Only for REST Mode'); +//Userdaten laden +$userlist = new JSONReader( 'userlist' ); -//Username zu UserID -// Username und Authcode +//Mittels Name und Authcode ID holen +if( check_params( POST, array( 'username' => 'strAZaz09', 'authcode' => 'strAZaz09' ) ) ){ + //Reinigen + $authcode = preg_replace( '/[^a-z0-9]/', '', $_POST['authcode'] ); + $username = preg_replace( '/[^a-z]/', '', $_POST['username'] ); -//Username und Passwort zu Authcode -// Username und Passwort + //User suchen + $id = $userlist->searchValue( [], $username, 'username' ); + //gefunden? + if( $id !== false ){ + //Authcodes des Users lesen + $authcodes = $userlist->getValue( [$id, 'authcodes'] ); + // Array ( "Code" => "time() [last used]" ) + //Leeres Array in JSON? + //Leerer Authcode? + //Authcode lang genug? + if( $authcodes !== array() && !empty( $authcode ) && strlen( $authcode ) > 20 ){ + //Code vorhanden + if( in_array( $authcode, array_keys( $authcodes ) ) ){ + //Daten ausgeben + add_output( array( + "id" => $userlist->getValue( [$id, 'userid'] ), + "admin" => $userlist->getValue( [$id, 'admin'] ) + ) ); + //Last used ändern + $userlist->setValue( [$id, 'authcodes', $authcode], time() ); + } + else{ + add_error( 'No valid Authcode!' ); + } + } + else{ + add_error( 'No valid Authcode!' ); + } + } +} +//Mittels Username und Passwort einen Authcode anfordern +elseif( check_params( POST, array( 'username' => 'strAZaz09', 'password' => 'strAZaz09', '*authcode' => 'empty' ) ) ){ + //Reinigen + // => ist hier schon ein Hash + $password = preg_replace( '/[^a-z0-9]/', '', $_POST['password'] ); + // => Konvention nur kleine Buchstaben! + $username = preg_replace( '/[^a-z]/', '', $_POST['username'] ); + + //User suchen + $id = $userlist->searchValue( [], $username, 'username' ); + //gefunden? + if( $id !== false ){ + //alles über User lesen + $userdata = $userlist->getValue( [$id] ); + + //Eingebenes Passwort wie in JSON hashen + // sha256( sha256( "passwort" ) "+" salt ); + // sha256( "passwort" ) schon per JS + $saltedpw = hash( 'sha256', $password . '+' . $userdata['salt'] ); + + //Passwort korrekt? + if( $saltedpw == $userdata['password'] ){ + //Authcode erstellen + + //Alles Codes des User lesen + $codes = $userlist->getValue( [$id,'authcodes'] ); + + do{ + //neuen Code erstellen + $newCode = makepassw( 75, 2 ); + //und noch leer? + } while( isset( $codes[$newCode] ) ); + + //Code anfuegen + $userlist->setValue( [$id, 'authcodes', $newCode], 0 ); + + //Code ausgeben + add_output( array( + "name" => $userdata['username'], + "id" => $userdata['userid'], + "admin" => $userdata['admin'], + "authcode" => $newCode + ) ); + } + else{ + add_error( 'Password incorrect' ); + } + } + else{ + add_error( 'User not found' ); + } +} +else{ + add_error( 'Incorrect Request' ); +} ?> \ No newline at end of file