1
0

Cleanup, added docs & RC 2

This commit is contained in:
Christiaan Goossens 2017-04-04 08:26:11 +02:00
parent 21e67b0298
commit 3ee95398c4
18 changed files with 145 additions and 63 deletions

View File

@ -25,11 +25,19 @@ class Application
self::$container = $app->getContainer(); self::$container = $app->getContainer();
} }
/**
* Gets dependency injection container
* @return Slim\Container
*/
public static function getContainer() public static function getContainer()
{ {
return self::$container; return self::$container;
} }
/**
* Get Slim application object
* @return Slim\App;
*/
public static function getApplication() public static function getApplication()
{ {
return self::$app; return self::$app;

View File

@ -35,13 +35,12 @@ class Handler
* - amount * - amount
* - description * - description
* - returnUrl * - returnUrl
* - sha1 * - hash
*/ */
$this->post('/transactionRequest', function ($request, $response, $args) { $this->post('/transactionRequest', function ($request, $response, $args) {
$parsedBody = $request->getParsedBody(); $parsedBody = $request->getParsedBody();
if (isset($parsedBody['clientId']) && isset($parsedBody['transactionId']) && isset($parsedBody['amount']) && isset($parsedBody['description']) && isset($parsedBody['returnUrl']) && isset($parsedBody['hash'])) { if (isset($parsedBody['clientId']) && isset($parsedBody['transactionId']) && isset($parsedBody['amount']) && isset($parsedBody['description']) && isset($parsedBody['returnUrl']) && isset($parsedBody['hash'])) {
// Correct request
try { try {
$client = new Client($parsedBody['clientId']); $client = new Client($parsedBody['clientId']);
$clientSecret = $client->getClientSecret(); $clientSecret = $client->getClientSecret();
@ -112,13 +111,12 @@ class Handler
* Requires the following POST arguments: * Requires the following POST arguments:
* - clientId * - clientId
* - transactionId * - transactionId
* - sha1 * - hash
*/ */
$this->post('/statusRequest', function ($request, $response, $args) { $this->post('/statusRequest', function ($request, $response, $args) {
$parsedBody = $request->getParsedBody(); $parsedBody = $request->getParsedBody();
if (isset($parsedBody['clientId']) && isset($parsedBody['transactionId']) && isset($parsedBody['hash'])) { if (isset($parsedBody['clientId']) && isset($parsedBody['transactionId']) && isset($parsedBody['hash'])) {
// Correct request
try { try {
$client = new Client($parsedBody['clientId']); $client = new Client($parsedBody['clientId']);
$clientSecret = $client->getClientSecret(); $clientSecret = $client->getClientSecret();

View File

@ -18,6 +18,12 @@ use Inforbank\Application;
class Authorization class Authorization
{ {
/**
* Login user
* @param $rekeningnr
* @param $passcode
* @return boolean
*/
public function login($rekeningnr, $passcode) public function login($rekeningnr, $passcode)
{ {
$container = Application::getContainer(); $container = Application::getContainer();
@ -42,16 +48,27 @@ class Authorization
return false; return false;
} }
/**
* Return current user id
* @return any
*/
public function getUserID() public function getUserID()
{ {
return $_SESSION['userid']; return $_SESSION['userid'];
} }
/**
* Return if the current user is authenticated
* @return boolean
*/
public function isUserAuthenticated() public function isUserAuthenticated()
{ {
return $this->getUserID() !== null; return $this->getUserID() !== null;
} }
/**
* Delete user session data
*/
public function logout() public function logout()
{ {
unset($_SESSION['userid']); unset($_SESSION['userid']);

View File

@ -19,6 +19,9 @@ use Inforbank\Application\Helper\Redirect;
class Middleware class Middleware
{ {
/**
* Middleware (https://www.slimframework.com/docs/concepts/middleware.html) om te checken of de gebruiker is ingelogd
*/
public function __invoke($request, $response, $next) public function __invoke($request, $response, $next)
{ {
$container = Application::getContainer(); $container = Application::getContainer();

View File

@ -18,6 +18,10 @@ use Inforbank\Application;
class Berichten class Berichten
{ {
/**
* Get all messages for a user
* @return array
*/
public static function getUserBerichten() public static function getUserBerichten()
{ {
$container = Application::getContainer(); $container = Application::getContainer();
@ -36,7 +40,7 @@ class Berichten
"datum" => $datum, "datum" => $datum,
"gelezen" => $bericht['gelezen'] "gelezen" => $bericht['gelezen']
); );
if(!$bericht['gelezen']){ if (!$bericht['gelezen']) {
$bericht->update([ $bericht->update([
"gelezen" => true "gelezen" => true
]); ]);
@ -46,6 +50,12 @@ class Berichten
return $berichtArray; return $berichtArray;
} }
/**
* Send new message
* @param int $user Klantid
* @param string $afzender String name of the sender
* @param string $bericht Message
*/
public static function newBericht($user, $afzender, $bericht) public static function newBericht($user, $afzender, $bericht)
{ {
$container = Application::getContainer(); $container = Application::getContainer();

View File

@ -16,7 +16,7 @@ namespace Inforbank\Application\Helper;
class IBAN class IBAN
{ {
private function wordToNumbers($word) private static function wordToNumbers($word)
{ {
$newword = ""; $newword = "";
$wordarray = str_split($word); $wordarray = str_split($word);
@ -30,7 +30,7 @@ class IBAN
return $newword; return $newword;
} }
private function getCheckDigits($bignum) private static function getCheckDigits($bignum)
{ {
//Modulo staartdeling //Modulo staartdeling
$modulo97 = (int)substr($bignum, 0, 6); $modulo97 = (int)substr($bignum, 0, 6);
@ -48,7 +48,7 @@ class IBAN
return $checkdigits; return $checkdigits;
} }
public function isValidIBAN($iban) public static function isValidIBAN($iban)
{ {
$iban = str_replace(" ", "", $iban); $iban = str_replace(" ", "", $iban);
$landcode = substr($iban, 0, 2); $landcode = substr($iban, 0, 2);
@ -56,38 +56,38 @@ class IBAN
$identificatie = substr($iban, 4); $identificatie = substr($iban, 4);
$identificatie .= $landcode; $identificatie .= $landcode;
$identificatie .= "00"; $identificatie .= "00";
$nummer = $this->wordToNumbers($identificatie); $nummer = self::wordToNumbers($identificatie);
return $controle == $this->getCheckDigits($nummer); return $controle == self::getCheckDigits($nummer);
} }
public function getRekeningNummer($iban) public static function getRekeningNummer($iban)
{ {
return substr(str_replace(" ", "", $iban), 8); return substr(str_replace(" ", "", $iban), 8);
} }
public function getBank($iban) public static function getBank($iban)
{ {
return substr(str_replace(" ", "", $iban), 4, 4); return substr(str_replace(" ", "", $iban), 4, 4);
} }
public function getLand($iban) public static function getLand($iban)
{ {
return substr(str_replace(" ", "", $iban), 0, 2); return substr(str_replace(" ", "", $iban), 0, 2);
} }
public function getIBAN($rekeningnr) public static function getIBAN($rekeningnr)
{ {
$landcode = "NL"; // NL in vertaling $landcode = "NL"; // NL in vertaling
$landnumber = $this->wordToNumbers($landcode); $landnumber = self::wordToNumbers($landcode);
$bankcode = "INFO"; $bankcode = "INFO";
$banknumber = $this->wordToNumbers($bankcode); $banknumber = self::wordToNumbers($bankcode);
$rekeningnr = str_pad($rekeningnr, 10, 0, STR_PAD_LEFT); $rekeningnr = str_pad($rekeningnr, 10, 0, STR_PAD_LEFT);
$bignum = $banknumber . $rekeningnr . $landnumber . "00"; $bignum = $banknumber . $rekeningnr . $landnumber . "00";
$checkdigits = $this->getCheckDigits($bignum); $checkdigits = self::getCheckDigits($bignum);
$rekeningnrarr = str_split($rekeningnr, 4); $rekeningnrarr = str_split($rekeningnr, 4);
return $landcode.$checkdigits." ".$bankcode." ".$rekeningnrarr[0]." ".$rekeningnrarr[1]." ".$rekeningnrarr[2]; return $landcode.$checkdigits." ".$bankcode." ".$rekeningnrarr[0]." ".$rekeningnrarr[1]." ".$rekeningnrarr[2];

View File

@ -16,6 +16,9 @@ namespace Inforbank\Application\Helper\Idob;
use Inforbank\Application; use Inforbank\Application;
/**
* Used for client authentication in IDOB
*/
class Client class Client
{ {
private $client; private $client;

View File

@ -18,6 +18,14 @@ use Inforbank\Application;
class Transactie class Transactie
{ {
/**
* Create IDOB transaction
* @param string $reference Reference passed by the client (webshop)
* @param string $clientId Client identifier
* @param double $amount Transaction amount
* @param string $description Description for the user
* @return int Transaction identifier
*/
public static function createTransactie($reference, $clientId, $amount, $description) public static function createTransactie($reference, $clientId, $amount, $description)
{ {
$container = Application::getContainer(); $container = Application::getContainer();
@ -33,6 +41,11 @@ class Transactie
return $trans['id']; return $trans['id'];
} }
/**
* Get IDOB transaction data
* @param int $id Transaction identifier
* @return array
*/
public static function getTransactie($id) public static function getTransactie($id)
{ {
$container = Application::getContainer(); $container = Application::getContainer();
@ -54,6 +67,11 @@ class Transactie
); );
} }
/**
* Set the IDOB transaction status
* @param int $id Transaction identifier
* @param int $status Status: 1 for pending, 2 for paid, 3 for unknown
*/
public static function setTransactionStatus($id, $status) public static function setTransactionStatus($id, $status)
{ {
$container = Application::getContainer(); $container = Application::getContainer();

View File

@ -18,6 +18,10 @@ use Inforbank\Application;
class Klant class Klant
{ {
/**
* Get current user data
* @return array
*/
public static function getCurrentUser() public static function getCurrentUser()
{ {
$container = Application::getContainer(); $container = Application::getContainer();

View File

@ -69,20 +69,20 @@ class Overboekingen
$ascii = ord($char); $ascii = ord($char);
if ($char === "." || $char === ",") { if ($char === "." || $char === ",") {
$komma++; $komma++;
if($komma > 1){ if ($komma > 1) {
//Twee komma's //Twee komma's
return false; return false;
} }
} elseif (($ascii >= ord("0") && $ascii <= ord("9") || $char === "-")) { } elseif (($ascii >= ord("0") && $ascii <= ord("9") || $char === "-")) {
if($komma >= 1){ if ($komma >= 1) {
$decimalen++; $decimalen++;
if ($decimalen > 2) { if ($decimalen > 2) {
//Meer dan twee cijfers achter de komma //Meer dan twee cijfers achter de komma
return false; return false;
} }
}else{ } else {
$cijfers++; $cijfers++;
if($cijfers > 9){ if ($cijfers > 9) {
//Te veel cijfers voor de komma //Te veel cijfers voor de komma
return false; return false;
} }
@ -101,7 +101,7 @@ class Overboekingen
} }
/** /**
* * Maak een nieuwe overboeking aan
* @param IBAN $van De rekening waar het bedrag vanaf wordt gehaald * @param IBAN $van De rekening waar het bedrag vanaf wordt gehaald
* @param IBAN $naar De rekening waar het bedrag bijkomt * @param IBAN $naar De rekening waar het bedrag bijkomt
* @param double $bedrag Het bedrag * @param double $bedrag Het bedrag
@ -115,15 +115,15 @@ class Overboekingen
//error: rekening is niet van klant //error: rekening is niet van klant
Overboekingen::error(Overboekingen::$EIGENAAR); Overboekingen::error(Overboekingen::$EIGENAAR);
} }
$ibanHelper = new IBAN();
if (!$ibanHelper->isValidIBAN($naar)) { if (!IBAN::isValidIBAN($naar)) {
//error: ongeldige iban //error: ongeldige iban
throw new Exception("De IBAN van de ontvanger is ongeldig.", Overboekingen::$IBAN); throw new Exception("De IBAN van de ontvanger is ongeldig.", Overboekingen::$IBAN);
} elseif (!($ibanHelper->getLand($naar) == "NL" && $ibanHelper->getBank($naar) === "INFO")) { } elseif (!(IBAN::getLand($naar) == "NL" && IBAN::getBank($naar) === "INFO")) {
//error: andere bank //error: andere bank
Overboekingen::error(Overboekingen::$BANK); Overboekingen::error(Overboekingen::$BANK);
} }
$naarRekeningnr = $ibanHelper->getRekeningNummer($naar); $naarRekeningnr = IBAN::getRekeningNummer($naar);
//Controleer of de rekening bestaat //Controleer of de rekening bestaat
$db = Application::getContainer()->db; $db = Application::getContainer()->db;
@ -180,7 +180,7 @@ class Overboekingen
]); ]);
//Stuur bericht bij laag saldo //Stuur bericht bij laag saldo
if ($vanRekening['saldo'] - $bedragvalue < 20) { if ($vanRekening['saldo'] - $bedragvalue < 20) {
Berichten::newBericht(Application::getContainer()->auth->getUserID(), "Bank", "U heeft een laag saldo op uw rekening: " . $ibanHelper->getIBAN($vanRekening['nr']) . ".<br/>Uw huidige saldo is " . money_format('%(#1n', $vanRekening['saldo'] - $bedragvalue) . "."); Berichten::newBericht(Application::getContainer()->auth->getUserID(), "Bank", "U heeft een laag saldo op uw rekening: " . IBAN::getIBAN($vanRekening['nr']) . ".<br/>Uw huidige saldo is " . money_format('%(#1n', $vanRekening['saldo'] - $bedragvalue) . ".");
} }
//In de database worden de getallen met 10 cijfers voor de komma opgeslagen //In de database worden de getallen met 10 cijfers voor de komma opgeslagen
//Als het saldo te hoog wordt heb je een probleem //Als het saldo te hoog wordt heb je een probleem

View File

@ -16,6 +16,13 @@ namespace Inforbank\Application\Helper;
class Redirect class Redirect
{ {
/**
* Create a new redirect to the given path
* @param Request $request
* @param Response $response
* @param string $path
* @return Response object
*/
public static function create($request, $response, $path) public static function create($request, $response, $path)
{ {
$basePath = $request->getUri()->getBaseUrl(); $basePath = $request->getUri()->getBaseUrl();

View File

@ -21,13 +21,16 @@ class Rekeningen
public static $BETAALREKENING = 1; public static $BETAALREKENING = 1;
public static $SPAARREKENING = 2; public static $SPAARREKENING = 2;
/**
* Return the current user bank accounts
* @return array
*/
public static function getCurrentUserRekeningen() public static function getCurrentUserRekeningen()
{ {
$container = Application::getContainer(); $container = Application::getContainer();
$user = $container->auth->getUserID(); $user = $container->auth->getUserID();
$db = $container->db; $db = $container->db;
$ibanhelper = new IBAN;
$rekeningen = $db->rekeningen->where('klantid', $user); $rekeningen = $db->rekeningen->where('klantid', $user);
@ -37,7 +40,7 @@ class Rekeningen
$type = $db->types->where('id', $rekening['typeid'])[$rekening['typeid']]; $type = $db->types->where('id', $rekening['typeid'])[$rekening['typeid']];
$returnArray[] = array( $returnArray[] = array(
"iban" => $ibanhelper->getIBAN($rekening['rekeningnr']), "iban" => IBAN::getIBAN($rekening['rekeningnr']),
"nr" => $rekening['rekeningnr'], "nr" => $rekening['rekeningnr'],
"saldo" => (double) $rekening['saldo'], "saldo" => (double) $rekening['saldo'],
"naam" => $type['rekeningnaam'], "naam" => $type['rekeningnaam'],
@ -48,6 +51,11 @@ class Rekeningen
return $returnArray; return $returnArray;
} }
/**
* Check if the current user is the owner of this bank account
* @param string $iban
* @return boolean
*/
public static function isEigenRekeningIBAN($iban) public static function isEigenRekeningIBAN($iban)
{ {
$rekeningen = Rekeningen::getCurrentUserRekeningen(); $rekeningen = Rekeningen::getCurrentUserRekeningen();
@ -62,6 +70,11 @@ class Rekeningen
return $vanRekening; return $vanRekening;
} }
/**
* Check if the current user is the owner of this bank account
* @param string $nr Internal bank account number
* @return boolean
*/
public static function isEigenRekeningnr($nr) public static function isEigenRekeningnr($nr)
{ {
$rekeningen = Rekeningen::getCurrentUserRekeningen(); $rekeningen = Rekeningen::getCurrentUserRekeningen();

View File

@ -5,15 +5,17 @@ namespace Inforbank\Application\Helper;
use Exception; use Exception;
use Inforbank\Application; use Inforbank\Application;
class Statistieken { class Statistieken
{
public static $EIGENAAR = 1; public static $EIGENAAR = 1;
public static function getSaldoverloop($dagen, $rekeningNummer){ public static function getSaldoverloop($dagen, $rekeningNummer)
if(!Rekeningen::isEigenRekeningnr($rekeningNummer)){ {
if (!Rekeningen::isEigenRekeningnr($rekeningNummer)) {
throw new Exception("Dit is niet uw eigen rekening", Statistieken::$EIGENAAR); throw new Exception("Dit is niet uw eigen rekening", Statistieken::$EIGENAAR);
} }
$xas = array(); $xas = array();
for($i = $dagen; $i >= 0; $i--){ for ($i = $dagen; $i >= 0; $i--) {
$xas[] = date("Y-m-d", strtotime("now") - $i * 86400); $xas[] = date("Y-m-d", strtotime("now") - $i * 86400);
} }
$container = Application::getContainer(); $container = Application::getContainer();
@ -26,27 +28,27 @@ class Statistieken {
$huidigSaldo = (double)$saldo; $huidigSaldo = (double)$saldo;
$vandaag = strtotime("now"); $vandaag = strtotime("now");
$yas = array_fill(0, $dagen + 1, 0); $yas = array_fill(0, $dagen + 1, 0);
foreach($eraf as $af){ foreach ($eraf as $af) {
$dag = strtotime($af['datum']); $dag = strtotime($af['datum']);
$diff = floor(($vandaag - $dag)/86400); $diff = floor(($vandaag - $dag)/86400);
if($diff <= $dagen){ if ($diff <= $dagen) {
$yas[$dagen - $diff] = (double)$af['bedr']; $yas[$dagen - $diff] = (double)$af['bedr'];
} }
} }
foreach($erbij as $bij){ foreach ($erbij as $bij) {
$dag = strtotime($bij['datum']); $dag = strtotime($bij['datum']);
$diff = floor(($vandaag - $dag)/86400); $diff = floor(($vandaag - $dag)/86400);
if($diff <= $dagen){ if ($diff <= $dagen) {
$yas[$dagen - $diff + 1] -= (double)$bij['bedr']; $yas[$dagen - $diff + 1] -= (double)$bij['bedr'];
}else{ } else {
break; break;
} }
} }
$verandering = 0; $verandering = 0;
for($i = $dagen; $i >= 0; $i--){ for ($i = $dagen; $i >= 0; $i--) {
$huidigSaldo += $verandering; $huidigSaldo += $verandering;
$verandering = $yas[$i]; $verandering = $yas[$i];
$yas[$i] = $huidigSaldo; $yas[$i] = $huidigSaldo;
} }
return [ return [
"x-as" => $xas, "x-as" => $xas,

View File

@ -75,10 +75,9 @@ class Idob
/** /**
* All set to pay! * All set to pay!
*/ */
$ibanhelper = new IBAN();
// Do overboeking // Do overboeking
Overboekingen::createOverboeking($ibanhelper->getIBAN($van), $ibanhelper->getIBAN($rekening), $transactie['amount'], "Betaling aan " . $naam . " voor transactie " . $transactie['reference'], "id"); Overboekingen::createOverboeking(IBAN::getIBAN($van), IBAN::getIBAN($rekening), $transactie['amount'], "Betaling aan " . $naam . " voor transactie " . $transactie['reference'], "id");
// Do Status update // Do Status update
Transactie::setTransactionStatus($transactie['transactieId'], 2); Transactie::setTransactionStatus($transactie['transactieId'], 2);

View File

@ -27,7 +27,7 @@ class Overboeking
{ {
public function __construct(App $app) public function __construct(App $app)
{ {
$app->get('/overboeking', function ($request, $response, $args) use($app) { $app->get('/overboeking', function ($request, $response, $args) use ($app) {
$rekeningen = Rekeningen::getCurrentUserRekeningen(); $rekeningen = Rekeningen::getCurrentUserRekeningen();
return $this->renderer->render($response, 'overboeking.phtml', [ return $this->renderer->render($response, 'overboeking.phtml', [
'header' => Header::getHeaderData(), 'header' => Header::getHeaderData(),
@ -44,8 +44,7 @@ class Overboeking
$omschrijving = $post['omschrijving']; $omschrijving = $post['omschrijving'];
try { try {
$ibanhelper = new IBAN(); Overboekingen::createOverboeking(IBAN::getIBAN($van), $naar, $bedrag, $omschrijving, "bg");
Overboekingen::createOverboeking($ibanhelper->getIBAN($van), $naar, $bedrag, $omschrijving, "bg");
return Redirect::create($request, $response, "/rekeningen/$van?geslaagd=1"); return Redirect::create($request, $response, "/rekeningen/$van?geslaagd=1");
} catch (Exception $e) { } catch (Exception $e) {
return Redirect::create($request, $response, "/overboeking?error=" . $e->getCode() . ""); return Redirect::create($request, $response, "/overboeking?error=" . $e->getCode() . "");

View File

@ -26,8 +26,6 @@ class Transacties
{ {
$app->get('/rekeningen/{rekeningnummer}', function ($request, $response, $args) { $app->get('/rekeningen/{rekeningnummer}', function ($request, $response, $args) {
$rekeningen = Rekeningen::getCurrentUserRekeningen(); $rekeningen = Rekeningen::getCurrentUserRekeningen();
$ibanhelper = new IBAN;
$rekening = $rekening = Rekeningen::isEigenRekeningnr($args['rekeningnummer']); $rekening = $rekening = Rekeningen::isEigenRekeningnr($args['rekeningnummer']);
$rekeningnr = $args['rekeningnummer']; $rekeningnr = $args['rekeningnummer'];
if (!$rekening) { if (!$rekening) {
@ -45,8 +43,8 @@ class Transacties
foreach ($transacties as $transactie) { foreach ($transacties as $transactie) {
$returnArray[] = array( $returnArray[] = array(
"van" => $ibanhelper->getIBAN($transactie['van']), "van" => IBAN::getIBAN($transactie['van']),
"naar" => $ibanhelper->getIBAN($transactie['naar']), "naar" => IBAN::getIBAN($transactie['naar']),
"bedrag" => $transactie['bedrag'], "bedrag" => $transactie['bedrag'],
"type" => $transactie['type'], "type" => $transactie['type'],
"omschrijving" => $transactie['omschrijving'], "omschrijving" => $transactie['omschrijving'],

View File

@ -14,6 +14,9 @@
namespace Inforbank; namespace Inforbank;
/**
* Proxy class om de limitaties van de sgni.nl webserver te omzeilen. Het is mogelijk om de site te bezoeken via zowel /login als /index.php/login op een goed geconfigureerde webserver, maar als de /index.php/login url wordt gebruikt is de onderstaande static file proxy nodig.
*/
class Proxy class Proxy
{ {
public static $route; public static $route;

View File

@ -1,8 +1,8 @@
<?php <?php
return [ return [
'settings' => [ 'settings' => [
'displayErrorDetails' => true, // set to false in production 'displayErrorDetails' => true,
'addContentLengthHeader' => false, // Allow the web server to send the content-length header 'addContentLengthHeader' => false,
// Renderer settings // Renderer settings
'renderer' => [ 'renderer' => [