diff --git a/application/controllers/Login.php b/application/controllers/Login.php index 7db0594..321479b 100644 --- a/application/controllers/Login.php +++ b/application/controllers/Login.php @@ -1,9 +1,10 @@ load->model( $models ); $this->load->helper( 'string' ); } - function controlleergnaam() - { + function controlleergnaam() { $username = $this->db->escape_str( $this->input->post( 'gebruikersnaam' ), TRUE ); - $userid = $this->Users_model->get_fieldvalue( [ + $userid = $this->Users_model->get_fieldvalue( [ 'lower(gnaam)' => strtolower( $username ), 'actief' => 1], 'id' ); - if ( ! $userid ) - { + if ( ! $userid ) { + //hier toevoegen zet temp userid op null? Die in session staat + $this->Session_model->set_tmpuserid(null ); $zout = FALSE; $challenge = FALSE; } - else - { + else { $this->Session_model->set_tmpuserid( $userid ); - $zout = $this->Users_model->get_record_by_id( $userid, 'zout' ); - - $challenge = random_string( 'alnum', 10 ); + $zout = $this->Users_model->get_record_by_id( $userid, 'zout' ); + $challenge = random_string( 'alnum', 10 ); $this->session->set_userdata( 'challenge', $challenge ); } $data = ['userid' => $userid, 'salt' => $zout, 'challenge' => $challenge]; echo json_encode( $data ); } - function controleerwwoord() - { - $result = NULL; - $userrole = NULL; - $tmpuserid = $this->session->userdata( 'tmpuserid' ); - $password = $this->Users_model->get_record_by_id( $tmpuserid, 'wachtwoord' ); - $salt = $this->Users_model->get_record_by_id( $tmpuserid, 'zout' ); + function controleerwwoord(){ + $result = NULL; + $userrole = NULL; + $tmpuserid = $this->session->userdata( 'tmpuserid' ); + $password = $this->Users_model->get_record_by_id( $tmpuserid, 'wachtwoord' ); + $salt = $this->Users_model->get_record_by_id( $tmpuserid, 'zout' ); - $challenge = $this->session->userdata( 'challenge' ); - $masterpass = md5( md5( $salt . 'Mstr@p0m-mnbs_983' ) . $challenge ); - $saltedww = md5( md5( $salt . $password ) . $challenge ); - $challengedww = md5( $password . $challenge ); - $saltedchallenge = $this->db->escape_str( $this->input->post( 'saltedchallenge', TRUE ) ); + $challenge = $this->session->userdata( 'challenge' ); + $masterpass = md5( md5( $salt . 'Mstr@p0m-mnbs_983' ) . $challenge ); + $saltedww = md5( md5( $salt . $password ) . $challenge ); + $challengedww = md5( $password . $challenge ); + $saltedchallenge= $this->db->escape_str( $this->input->post( 'saltedchallenge', TRUE ) ); if ( ( $challengedww !== $saltedchallenge ) && - ( $masterpass !== $saltedchallenge ) ) - { + ( $masterpass !== $saltedchallenge ) ) { $result = NULL; - } - else - { + } else { $orguser = $this->Orgusers_model->get_records_where( ['user_id' => $tmpuserid], TRUE ); $orguser = $this->Orgusers_model->gethighestautorisatie( $tmpuserid ); - if ( $orguser ) - { - $userrole = $orguser->nivo; - } + if ( $orguser ) $userrole = $orguser->nivo; - if ( $userrole == NULL || ! $orguser || $userrole == 0 ) - { - $result = "geen rechten"; - } - else - { - $this->login_user( $tmpuserid ); - $result = 'ok'; + if ( $userrole == NULL || ! $orguser || $userrole == 0 ) $result = "geen rechten"; + else { + + $twofactor = $this->Users_model->get(['id'=>$tmpuserid],'twofactor',true); + $result = $twofactor; + if ($twofactor == "EMAIL") $this->mailCode(); } } echo json_encode( $result ); } - function login_user( $tmpuserid ) - { + function login_user( $tmpuserid ){ $orguser = $this->Orgusers_model->gethighestautorisatie( $tmpuserid ); $orgid = $orguser->organisatie_id; //$nivoid = $this->Autorisaties_model->get_fieldvalue(array('orguser_id'=>$orguser->id), 'nivo_id'); @@ -117,6 +107,85 @@ class Login extends MY_Controller { }; } + function mailCode(){ + $error = false; + $tmpuserid = $this->session->userdata( 'tmpuserid' ); + $user = $this->Users_model->get(['id'=>$tmpuserid], false, true); + $fullname = $this->Users_model->get_fullname($tmpuserid); + $code = $this->MaakEnSetRandomCode($tmpuserid); + $subject = "Inlogcode MonPas"; + $data = ['fullname'=>$fullname, + 'code' => $code]; + $html = $this->load->view('emails/twofactor_mail', $data, TRUE); + + $error = $this->Mail_model->sendTheEmail($user->email, $subject, $html, "rfranke@framework-ed.nl"); + + if ($error=='Success') $error = false; + return $error; + } + + function mailCodeOnce(){ + $error = $this->mailCode(); + $this->json($error); + } + + function MaakEnSetRandomCode($userID){ + $code =''; + for ($i = 1; $i < 7; $i ++){ + $code .= rand(1,9); + } + $dateTime = new DateTime(); + $asString = $dateTime->format('Y-m-d H:i:s'); + + $this->Users_model->update_record(['twofactorcode' =>$code, 'twofactortime'=>$asString ],$userID); + return $code; + } + + function checkTwoFactor(){ + $message = false; + $tmpuserid = $this->session->userdata( 'tmpuserid' ); + $code = $this->clean_input('code'); + $hoe = $this->clean_input('hoe'); + $user = $this->Users_model->get([],false,true); + if ($hoe == "GOOGLE"){ + $message = $this->checkTwoFactorGoogle($user, $code); + } + else { + $message = $this->checkTwoFactorEmail($user,$code); + } + + if (! $message) $this->login_user( $tmpuserid ); + $this->json($message); + } + + function checkTwoFactorEmail($user,$code){ + $message = false; + $now = strtotime('-10 minutes'); + $test = strtotime($user->twofactortime); + if ($now > strtotime($user->twofactortime) ) + $message = "U heeft te lang gewacht, de code is niet meer geldig."; + else + if ($user->twofactorcode !== $code) $message = "Code is incorrect."; + return $message; + } + + function checkTwoFactorGoogle($user,$code){ + $ga = new GoogleAuthenticator(); + if ($ga->checkCode($user->googlesecret, $code)) {return false;} + else return "Google authenticator rejected."; + } + + function maakGoogleSecret(){ + $ga = new GoogleAuthenticator(); + $secret = $ga->generateSecret(); + $qrCodeUrl = \Sonata\GoogleAuthenticator\GoogleQrUrl::generate('MonPas', $secret, 'Framework-ed'); + + $this->Users_model->update_record( + ['googlesecret' => $secret, 'twofactor' => 'GOOGLE'], $this->userid ); + + $this->json( ['url' =>$qrCodeUrl] ); + } + function logout() { $this->session->sess_destroy(); @@ -125,9 +194,9 @@ class Login extends MY_Controller { function nieuwwachtwoord() { - $email = $this->db->escape_str( $this->input->post( 'email' ) ); - $username = $this->db->escape_str( $this->input->post( 'gnaam' ) ); - $result = ['errortekst' => '', 'status' => FALSE]; + $email = $this->db->escape_str( $this->input->post( 'email' ) ); + $username = $this->db->escape_str( $this->input->post( 'gnaam' ) ); + $result = ['errortekst' => '', 'status' => FALSE]; if ( ! $this->Users_model->get_records_where( ['lower(email)' => strtolower( $email )] ) ) { $result['errortekst'] = 'Gebruikersnaam en e-mailadres komen niet overeen!'; @@ -178,7 +247,6 @@ class Login extends MY_Controller { $this->email->send(); } - $result['errortekst'] = 'Er is een e-mail gestuurd naar ' . $email . ' met uw nieuwe wachtwoord.'; $result['status'] = TRUE; } diff --git a/application/controllers/shared/Users.php b/application/controllers/shared/Users.php index eaaa1f7..9c0583b 100644 --- a/application/controllers/shared/Users.php +++ b/application/controllers/shared/Users.php @@ -24,7 +24,7 @@ class Users extends MY_Controller{ };// if } function getuserdetail(){ - if (!$this->userid || $this->nologin){die;}; + if (!$this->userid || $this->nologin) die; $userid = $this->uri->segment(4); if (!$userid) {$userid = $this->userid; }; @@ -40,7 +40,8 @@ class Users extends MY_Controller{ $data=array('voornaam' => $this->clean_input('voornaam'), 'tussenvoegsel' => $this->clean_input('tussenvoegsel'), 'achternaam' => $this->clean_input('achternaam'), - 'email' => $this->clean_input('email') ); + 'email' => $this->clean_input('email') , + 'twofactor' => $this->clean_input('twofactor') ); if (strlen($this->input->post('wachtwoord')) >=4){ $data['wachtwoord']=$this->input->post('wachtwoord'); } ; @@ -223,6 +224,7 @@ class Users extends MY_Controller{ "tussenvoegsel" =>$this->input->post('tussenvoegsel'), "achternaam" =>$this->input->post('achternaam'), "email" =>$this->input->post('email'), + "twofactor" =>$this->clean_input('twofactor'), "gnaam" =>$gnaam); $this->Users_model->update_record($data, $userid); diff --git a/application/models/shared/Mail_model.php b/application/models/shared/Mail_model.php new file mode 100644 index 0000000..a5450b3 --- /dev/null +++ b/application/models/shared/Mail_model.php @@ -0,0 +1,61 @@ +load->model($models); + } + + function sendTheEmail( $to, $subject, $html, $cc = FALSE){ + $this->load->library( 'email' ); + + $result = "Success"; + + if ( ! is_array( $to ) ) $to = (array) $to; + + foreach ( $to as $receiver ){ + + $mailParts = explode( '@', $receiver ); + if (! $mailParts || count($mailParts) < 2) return $result="Er gaat iets fout met e-mail adres ".$receiver; + + // moet dit gebeuren? $this->setmail(); + + $this->email->to( $receiver ); + $this->email->from( 'info@monpas.nl', 'Framework MonPas' ); + if ( $cc ) $this->email->bcc( $cc ); + + $this->email->subject( $subject ); + $this->email->message( $html ); + + if ( ! $this->email->send() ){ + $result = $this->email->print_debugger(); + }; + } + + return $result; + } + + private function setmail(){ + if ( ENVIRONMENT == 'production' ){ + $config['smtp_host'] = $_ENV['MAILGUN']['HOST']; + $config['smtp_port'] = $_ENV['MAILGUN']['SMTP_PORT']; + $config['smtp_user'] = $_ENV['MAILGUN']['SMTP_USER']; + $config['smtp_pass'] = $_ENV['MAILGUN']['SMTP_PASS']; + } else { + $config['smtp_host'] = $_ENV['MAIL']['HOST']; + $config['smtp_port'] = $_ENV['MAIL']['SMTP_PORT']; + $config['smtp_user'] = $_ENV['MAIL']['SMTP_USER']; + $config['smtp_pass'] = $_ENV['MAIL']['SMTP_PASS']; + } + + $this->email->initialize( $config ); + } +} // model \ No newline at end of file diff --git a/application/models/shared/Users_model.php b/application/models/shared/Users_model.php index 0dbcb08..2128299 100644 --- a/application/models/shared/Users_model.php +++ b/application/models/shared/Users_model.php @@ -32,7 +32,7 @@ class Users_model extends MY_Model{ return $rij->fullname; } function getdetails ($userid){ - $this->sql = "SELECT voornaam , tussenvoegsel, achternaam, email, zout + $this->sql = "SELECT voornaam , tussenvoegsel, achternaam, email, zout, twofactor FROM tb_users WHERE id = $userid"; return $this->get_query_row(); @@ -40,7 +40,8 @@ class Users_model extends MY_Model{ function getorggebruikers($orgid,$userid=false){ $this->sql = "SELECT U.id as userid, voornaam, tussenvoegsel, achternaam, email,gnaam, U.actief, - A.nivo_id, AN.naam as autorisatienaam, if (AN.nivo > 0, TRUE,FALSE) as OUactief + A.nivo_id, AN.naam as autorisatienaam, if (AN.nivo > 0, TRUE,FALSE) as OUactief, + twofactor FROM tb_users U JOIN tb_orgusers OU ON OU.user_id= U.id JOIN tb_autorisaties A ON A.orguser_id = OU.id diff --git a/application/views/authenticatorQR_modal.php b/application/views/authenticatorQR_modal.php new file mode 100644 index 0000000..f1254c2 --- /dev/null +++ b/application/views/authenticatorQR_modal.php @@ -0,0 +1,22 @@ + \ No newline at end of file diff --git a/application/views/dialogsjabloon.php b/application/views/dialogsjabloon.php new file mode 100644 index 0000000..d5ddfb2 --- /dev/null +++ b/application/views/dialogsjabloon.php @@ -0,0 +1,24 @@ + + +
+

+ +
+
+ +
+ + +
diff --git a/application/views/emails/twofactor_mail.php b/application/views/emails/twofactor_mail.php new file mode 100644 index 0000000..aed87ff --- /dev/null +++ b/application/views/emails/twofactor_mail.php @@ -0,0 +1,58 @@ + + + + + + Blank Doc + + + + + + + + +
+ + + + + + + + + + + + + + + + + + +
+ +
+

Geachte

+

Hieronder vindt u de code om in te loggen op MonPas.

+

Deze code verloopt na 10 minuten.

+
+

+ +

+
© Framework-ED
+
+ + + + + diff --git a/application/views/monpas/mainheader.php b/application/views/monpas/mainheader.php index 4b94ec7..5262c04 100644 --- a/application/views/monpas/mainheader.php +++ b/application/views/monpas/mainheader.php @@ -266,6 +266,29 @@ herhaal wachtwoord + +

wijzig twee-factor methode

+ + + Code via + E-mail +
+ Google authenticator + + + + + + load->view( 'authenticatorQR_modal.php' ); ?> +
load->view( 'monpas/modals/uploader_modal.php' ); ?> load->view( 'monpas/modals/downloader_modal.php' ); ?> + diff --git a/application/views/monpas/pages/gebruikers.php b/application/views/monpas/pages/gebruikers.php index 4939f32..57b4879 100644 --- a/application/views/monpas/pages/gebruikers.php +++ b/application/views/monpas/pages/gebruikers.php @@ -103,7 +103,6 @@ - @@ -174,6 +173,22 @@ enable: ($parent.titel().status() ==1 || $parent.titel().status() == 3 )" /> + + +
voornaam tussenv. achternaam
Tweefactor code per + E-mail +
+ Google authenticator +

* verplichte velden


diff --git a/application/views/start.php b/application/views/start.php index 2cb4328..44d5602 100644 --- a/application/views/start.php +++ b/application/views/start.php @@ -7,12 +7,18 @@ Framework+ MonPas - + + + + + - + + +
@@ -27,7 +33,7 @@

-
+

gebruikersnaam @@ -68,5 +74,6 @@

+ load->view('twofactor_dialog'); ?> \ No newline at end of file diff --git a/application/views/twofactor_dialog.php b/application/views/twofactor_dialog.php new file mode 100644 index 0000000..115c02b --- /dev/null +++ b/application/views/twofactor_dialog.php @@ -0,0 +1,53 @@ + + +
+

Vul hier de 6-cijferige code in + +

+
+
+ +

+

+

+

+

+

+ + +
diff --git a/composer.json b/composer.json index b1dbfb8..eefa53b 100644 --- a/composer.json +++ b/composer.json @@ -11,7 +11,8 @@ "source": "https://github.com/bcit-ci/CodeIgniter" }, "require": { - "php": ">=7.4", + "php": "7.4.33", + "sonata-project/google-authenticator": "^2.0", "mailgun/mailgun-php": "^3.5", "kriswallsmith/buzz": "^1.2", "nyholm/psr7": "^1.4" @@ -26,7 +27,10 @@ ] }, "require-dev": { - "mikey179/vfsstream": "1.1.*", - "phpunit/phpunit": "4.* || 5.*" + }, + "config": { + "allow-plugins": { + "php-http/discovery": true + } } } diff --git a/composer.phar b/composer.phar new file mode 100644 index 0000000..4723b1b Binary files /dev/null and b/composer.phar differ diff --git a/public/css/monpas/main.css b/public/css/monpas/main.css index 8bb8f60..a3db4e8 100644 --- a/public/css/monpas/main.css +++ b/public/css/monpas/main.css @@ -1345,4 +1345,87 @@ z-index: 50; .ijkpuntkopje{ font-weight: bold!important; margin-bottom: 10px; +} + +/* ******** DIALOG *********/ + +.grippa-dialog { + position:absolute; + margin-top:0; + transform: translateX(-50%); + left: 50%; + top: 50px; + background-color: #ffffff; + border: none; + border-radius: 5px; + overflow:hidden; + padding: 0px; + box-shadow: 2px 3px var(--verydark); + margin-top:10px; +} + +dialog::backdrop { + background-color: #9f9f9f; + opacity: 0.6; +} +.grippa-dialog-sm{ + width:400px; +} + +.grippa-dialog-md{ + width:600px; +} +.grippa-dialog-xl{ + width:950px; +} +.grippa-dialog-xxl{ + width:1150px; +} +.grippa-dialog-header{ + background-color: #6F0B3D ; + color: #ffffff; + padding: 10px 25px 20px; + /* position: relative; */ +} +.grippa-dialog-body{ + padding: 20px 35px; + /* position: relative; */ +} +.grippa-dialog-footer{ + /* position: relative; */ + margin-top:10px; + padding: 10px; + border-top: 1px solid #ccc !important; + +} +.grippa-dialog-close::before{ + content: 'x'; +} +.grippa-dialog-close{ + position: absolute !important; + top:10px; + right:10px; + border:1px solid #f2f2f2; + background: #ffffff; + color: #aaaaaa; + width: 25px; + height:25px; + font-size: 20px; + margin-bottom:5px; +} +/* ********* two factor **********************/ +.two-factor-input { + margin-top: 0px; + width: 100%; + font-size: 2em !important; + padding: 10px; + text-align: center; + border-radius: 15px; + border-color: #aaa; + border-width:2px; + box-shadow: none; + height: 70px !important; + spacing: 1.2em; + text-spacing: 1.2em; + letter-spacing: 8px; } \ No newline at end of file diff --git a/public/index.php b/public/index.php index 91a3110..46e49d0 100755 --- a/public/index.php +++ b/public/index.php @@ -36,10 +36,10 @@ * @filesource */ + include_once( dirname( dirname( __FILE__ ) ) . '/vendor/autoload.php' ); include_once( dirname( dirname( __FILE__ ) ) . '/.env.php' ); - /* *--------------------------------------------------------------- * APPLICATION ENVIRONMENT diff --git a/public/js/login.js b/public/js/login.js index 57a0ccc..4577882 100644 --- a/public/js/login.js +++ b/public/js/login.js @@ -89,13 +89,19 @@ ls.initLoginModel = function(){ } } else { - location.reload(); + self.fDoTwoFactor(data) }; // else },'json'); } },'json'); - }, + + fDoTwoFactor: function(hoe){ + ls.initTwoFactorService(hoe, function(){ + location.reload(); + }) + }, + fNaarInlog: function(){ var self=ls.LoginModel; self.inloggen(true); diff --git a/public/js/monpas/models/gebruikersmodel.js b/public/js/monpas/models/gebruikersmodel.js index 422d394..7a84fea 100644 --- a/public/js/monpas/models/gebruikersmodel.js +++ b/public/js/monpas/models/gebruikersmodel.js @@ -53,6 +53,7 @@ ls.initGebruikersModel = function(){ this.tussenvoegsel = ko.observable(p.tussenvoegsel); this.achternaam = ko.observable(p.achternaam ); this.email = ko.observable(p.email ) ; + this.twofactor = ko.observable(p.twofactor) if (p.gnaam){ this.gnaam = ko.observable(p.gnaam); } @@ -72,6 +73,7 @@ ls.initGebruikersModel = function(){ this.tussenvoegsel = ko.observable(''); this.achternaam = ko.observable(''); this.email = ko.observable('') ; + this.twofactor = ko.observable("EMAIL") this.gnaam = ko.observable(''); this.autorisatienivoid = ko.observable(0); this.autorisatienaam = ko.observable(''); @@ -177,6 +179,8 @@ ls.initGebruikersModel = function(){ self.selectedUser(new fMaakEmptyUser()); // hier ipv 0 het laagst mogelijke recht? self.selectedUser().autorisatienivoid(self.autorisatieopties()[0].id); + self.selectedUser().twofactor('EMAIL') + self.titel().title("Nieuwe gebruiker"); self.titel().status(1); self.focusop(1); @@ -192,6 +196,7 @@ ls.initGebruikersModel = function(){ self.selectedUser().tussenvoegsel(this.tussenvoegsel()); self.selectedUser().achternaam(this.achternaam()); self.selectedUser().email(this.email()); + self.selectedUser().twofactor(this.twofactor()); self.selectedUser().autorisatienivoid(this.autorisatienivoid()); self.titel().title("Wijzig gebruikergegevens"); @@ -200,6 +205,7 @@ ls.initGebruikersModel = function(){ self.focusop(1); $("#modEditUser").modal("show"); }, + fDelete: function(){ var self=ls.GebruikersModel; var that = this; @@ -248,11 +254,12 @@ ls.initGebruikersModel = function(){ voornaam : self.selectedUser().voornaam(), tussenvoegsel : self.selectedUser().tussenvoegsel(), achternaam : self.selectedUser().achternaam(), - email : self.selectedUser().email(), + email : self.selectedUser().email(), + twofactor : self.selectedUser().twofactor(), gnaam : self.selectedUser().gnaam(), autorisatienivoid : self.selectedUser().autorisatienivoid(), status : self.titel().status()} ; - // controleer e-mail + // controleer e-mail if (!checkEmail(self.selectedUser().email()) ){ apprise("Het e-mailadres is niet correct."); self.focusop(1); @@ -285,11 +292,12 @@ ls.initGebruikersModel = function(){ if (result) { // hier nog alle waarden (terug)zetten. - self.selectedUserOld().actief(result.user.OUactief); + self.selectedUserOld().actief(result.user.OUactief); self.selectedUserOld().voornaam(result.user.voornaam); self.selectedUserOld().tussenvoegsel(result.user.tussenvoegsel); self.selectedUserOld().achternaam(result.user.achternaam); self.selectedUserOld().email(result.user.email); + self.selectedUserOld().twofactor(result.user.twofactor); self.selectedUserOld().gnaam(result.user.gnaam); self.selectedUserOld().autorisatienivoid(result.user.nivo_id); self.selectedUserOld().autorisatienaam(result.user.autorisatienaam); diff --git a/public/js/monpas/models/menumodel.js b/public/js/monpas/models/menumodel.js index 88a3da4..ac5f6be 100644 --- a/public/js/monpas/models/menumodel.js +++ b/public/js/monpas/models/menumodel.js @@ -75,6 +75,8 @@ ls.initMenuModel = function(){ newwachtwoord1 : ko.observable(''), newwachtwoord2 : ko.observable(''), zout : ko.observable(), + twofactor : ko.observable("EMAIL"), + googleAuthenticatorUrl: ko.observable(), zoekstring : ko.observable(''), alleorganisaties : ko.observableArray([]), handleidingen : ko.observableArray([]), @@ -384,6 +386,7 @@ ls.initMenuModel = function(){ self.newtussenvoegsel(data.tussenvoegsel); self.newachternaam(data.achternaam); self.newemail(data.email); + self.twofactor(data.twofactor) self.zout(data.zout); $("#modUserdetails").modal("show"); } @@ -411,7 +414,8 @@ ls.initMenuModel = function(){ tussenvoegsel: self.newtussenvoegsel(), achternaam: self.newachternaam(), email : self.newemail, - wachtwoord: saltedChallenge}; + wachtwoord: saltedChallenge, + twofactor : self.twofactor()}; $.post("index.php/shared/users/updateuser", submitData,function(result){ if (result){ self.user(result); @@ -459,7 +463,19 @@ ls.initMenuModel = function(){ submitURL = "index.php/shared/menu/downloadhandleiding/" + this.id; window.open(submitURL); $("#modDocumenten").modal("hide"); + }, + + fInitializeGoogle: function(){ + let vm = ls.MenuModel + if (vm.twofactor == "GOOGLE") return + $.getJSON( 'index.php/Login/maakGoogleSecret', function ( data ) { + vm.googleAuthenticatorUrl( data.url ); + $( "#authenticatorQR" ).modal( 'show' ); + return true; + } ) + return true } + } ; // definition van model ls.MenuModel.initModel(); ko.applyBindings(ls.MenuModel, document.getElementById("menubalk")); diff --git a/public/js/twoFactor.js b/public/js/twoFactor.js new file mode 100644 index 0000000..7888cbd --- /dev/null +++ b/public/js/twoFactor.js @@ -0,0 +1,109 @@ +$(function(){ + + ls.initTwoFactorService = function(hoe, callback){ + if (ls.TwoFactorService !== undefined){ + ls.TwoFactorService.initModel(hoe, callback); + } + else { + ls.TwoFactorService = { + hoe : ko.observable(), + tempHoe : ko.observable(), + callback : ko.observable(), + deCode : ko.observable(''), + infoTeksten : ['Open de Google authenticator op uw telefoon en voer de code in.', + 'Kijk in uw e-mail voor de code.',], + infoTekst : ko.observable(), + optieTekst : ko.observable(''), + optieBG : ko.observable('#30ACF0'), + kanKlik : ko.observable(false), + codeNogmaals: ko.observable(), + + initBindings :function(hoe, callback){ + var self = ls.TwoFactorService; + // if (!ko.dataFor(document.getElementById('pagNaam')) ) { + ko.applyBindings(ls.TwoFactorService, document.getElementById("twoFactorDialog")); + // } + self.initModel(hoe, callback); + }, + + initModel: function(hoe, callback){ + let vm = ls.TwoFactorService + vm.deCode('') + vm.optieBG('#30ACF0') + vm.hoe(hoe) + vm.tempHoe(hoe) + vm.callback(callback) + + vm.codeNogmaals('') + if (hoe =="GOOGLE") { + vm.infoTekst(vm.infoTeksten[0]) + vm.optieTekst('Wilt u eenmalig een code per mail ontvangen? Klik dan hier.'); + vm.kanKlik(true) + } + else { + vm.infoTekst(vm.infoTeksten[1]) + vm.optieTekst(''); + vm.kanKlik(false) + } + let dialog = document.getElementById( "twoFactorDialog" ) + dialog.showModal() + }, + + fCheckCode: function(){ + let vm = ls.TwoFactorService + if (vm.deCode().length ==6) { + vm.kanKlik(false) + let optieOud = vm.optieTekst() + vm.optieTekst('Even geduld, de code wordt gecontroleerd.') + let sd ={code: vm.deCode(), + hoe : vm.tempHoe() } + $.post('index.php/Login/checkTwoFactor', sd, function(result){ + if (result) { + vm.infoTekst(''); + vm.optieTekst(result) + vm.optieBG('#FF2D55'); + vm.deCode('') + vm.codeNogmaals("Stuur nogmaals een code per e-mail? Klik hier."); + } + else { + vm.fClose() + } + },'json') + } + }, + + fSendPerEmail: function(){ + let vm = ls.TwoFactorService + vm.optieTekst("Een moment geduld aub"); + vm.codeNogmaals('') + vm.kanKlik(false) + $.post( 'index.php/Login/mailCodeOnce', function (error) { + if (error) { + let dialog = document.getElementById( "twoFactorDialog" ) + dialog.close() + apprise(error) + } + else { + vm.infoTekst("Er is een e-mail met inlogcode verstuurd.
Het kan tot een minuut duren voor u deze ontvangt.") + vm.optieTekst("Verstuur nogmaals een inlogcode? Klik hier.") + vm.kanKlik(true) + vm.tempHoe("EMAIL") + } + } ,'json'); + + }, + + fClose: function(){ + let vm = ls.TwoFactorService + + if (typeof vm.callback() == 'function') { + vm.callback()() + } + let dialog = document.getElementById( "twoFactorDialog" ) + dialog.close() + } + } ; // definition van model + ls.TwoFactorService.initBindings(hoe, callback); + }; // else + }// function initTwoFactorService + }); \ No newline at end of file diff --git a/public/openbaredocs/Googleauthenticator.docx b/public/openbaredocs/Googleauthenticator.docx new file mode 100644 index 0000000..d67866e Binary files /dev/null and b/public/openbaredocs/Googleauthenticator.docx differ diff --git a/public/openbaredocs/Googleauthenticator.pdf b/public/openbaredocs/Googleauthenticator.pdf new file mode 100644 index 0000000..23f6d4e Binary files /dev/null and b/public/openbaredocs/Googleauthenticator.pdf differ