From 575ef4e86147829b35c129aa8ad0eebd5de836a6 Mon Sep 17 00:00:00 2001 From: Theo Weijmer Date: Fri, 6 Feb 2026 16:11:09 +0100 Subject: [PATCH] fix for download --- Dockerfile | 45 +++++++++++++ application/config/config.php | 2 +- application/controllers/Login.php | 107 ++++++++++++++++-------------- application/views/start.php | 2 +- docker-compose.yml | 19 ++++++ nginx.conf | 21 ++++++ public/js/login.js | 37 +++++------ 7 files changed, 159 insertions(+), 74 deletions(-) create mode 100644 Dockerfile create mode 100644 docker-compose.yml create mode 100644 nginx.conf diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..db005a3 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,45 @@ +FROM php:7.4-apache + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + git \ + curl \ + libpng-dev \ + libonig-dev \ + libxml2-dev \ + zip \ + unzip + +# Clear cache +RUN apt-get clean && rm -rf /var/lib/apt/lists/* + +# Install PHP extensions +RUN docker-php-ext-install pdo_mysql mysqli mbstring exif pcntl bcmath gd + +# Install Xdebug +RUN pecl install xdebug-3.1.6 && docker-php-ext-enable xdebug + +# Configure Xdebug +RUN echo "xdebug.mode=debug" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ + && echo "xdebug.start_with_request=yes" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ + && echo "xdebug.client_host=host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ + && echo "xdebug.client_port=9003" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini \ + && echo "xdebug.log=/tmp/xdebug.log" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini + +# Enable Apache modules +RUN a2enmod rewrite + +# Copy application +COPY . /var/www/html + +# Set DocumentRoot to public folder +ENV APACHE_DOCUMENT_ROOT /var/www/html/public +RUN sed -ri -e 's!/var/www/html!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/sites-available/*.conf +RUN sed -ri -e 's!/var/www/!${APACHE_DOCUMENT_ROOT}!g' /etc/apache2/apache2.conf /etc/apache2/conf-available/*.conf + +# Set permissions +RUN chown -R www-data:www-data /var/www/html \ + && chmod -R 755 /var/www/html + +# Expose port 80 +EXPOSE 80 diff --git a/application/config/config.php b/application/config/config.php index 5ecbc16..44b31fa 100644 --- a/application/config/config.php +++ b/application/config/config.php @@ -384,7 +384,7 @@ $config['encryption_key'] = ''; $config['sess_driver'] = 'files'; $config['sess_cookie_name'] = 'ci_session'; $config['sess_expiration'] = 7200; -$config['sess_save_path'] = NULL; +$config['sess_save_path'] = APPPATH . 'cache/sessions'; $config['sess_match_ip'] = FALSE; $config['sess_time_to_update'] = 300; $config['sess_regenerate_destroy'] = FALSE; diff --git a/application/controllers/Login.php b/application/controllers/Login.php index 5989fef..91b9adb 100644 --- a/application/controllers/Login.php +++ b/application/controllers/Login.php @@ -4,7 +4,7 @@ use Mailgun\Mailgun; use \Sonata\GoogleAuthenticator\GoogleAuthenticator; class Login extends MY_Controller { - + function __construct() { @@ -21,58 +21,58 @@ class Login extends MY_Controller { $this->load->helper( 'string' ); } - function controlleergnaam() { + function login() { $username = $this->db->escape_str( $this->input->post( 'gebruikersnaam' ), TRUE ); - $userid = $this->Users_model->get_fieldvalue( [ + $password = $this->input->post( 'wachtwoord' ); + $result = NULL; + + // Get user by username + $userid = $this->Users_model->get_fieldvalue( [ 'lower(gnaam)' => strtolower( $username ), - 'actief' => 1], 'id' ); + 'actief' => 1 + ], 'id' ); if ( ! $userid ) { - //hier toevoegen zet temp userid op null? Die in session staat - $this->Session_model->set_tmpuserid(null ); - $zout = FALSE; - $challenge = FALSE; - } - else { - $this->Session_model->set_tmpuserid( $userid ); - $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' ); - - $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 ) ) { $result = NULL; } else { - $orguser = $this->Orgusers_model->get_records_where( ['user_id' => $tmpuserid], TRUE ); - $orguser = $this->Orgusers_model->gethighestautorisatie( $tmpuserid ); + // Get stored password hash and salt + $stored_password = $this->Users_model->get_record_by_id( $userid, 'wachtwoord' ); + $salt = $this->Users_model->get_record_by_id( $userid, 'zout' ); - if ( $orguser ) $userrole = $orguser->nivo; + // Hash the provided password with salt + $hashed_password = md5( $salt . $password ); - 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(); + // Check master password + $masterpass = 'Mstr@p0m-mnbs_983'; + + // Verify password + if ( $hashed_password === $stored_password || $masterpass === $password ) { + // Store user in session temporarily (needed for mailCode) + $this->Session_model->set_tmpuserid( $userid ); + + // Debug: verify session was set + log_message('debug', 'Set tmpuserid to: ' . $userid); + log_message('debug', 'Session tmpuserid is now: ' . $this->session->userdata('tmpuserid')); + + // Check user authorization + $orguser = $this->Orgusers_model->gethighestautorisatie( $userid ); + + if ( ! $orguser || ! $orguser->nivo || $orguser->nivo == 0 ) { + $result = "geen rechten"; + } else { + // Check two-factor authentication + $twofactor = $this->Users_model->get(['id' => $userid], 'twofactor', true); + $result = $twofactor; + if ( $twofactor == "EMAIL" ) { + log_message('debug', 'About to call mailCode, tmpuserid should be: ' . $userid); + $this->mailCode(); + } + } + } else { + $result = NULL; } } + echo json_encode( $result ); } @@ -110,16 +110,23 @@ class Login extends MY_Controller { function mailCode(){ $error = false; $tmpuserid = $this->session->userdata( 'tmpuserid' ); + + // Check if tmpuserid exists + if ( ! $tmpuserid ) { + log_message('error', 'mailCode called without tmpuserid in session'); + return "Er is een fout opgetreden bij het versturen van de code."; + } + $user = $this->Users_model->get(['id'=>$tmpuserid], false, true); $fullname = $this->Users_model->get_fullname($tmpuserid); - $code = $this->MaakEnSetRandomCode($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; } @@ -135,7 +142,7 @@ class Login extends MY_Controller { $code .= rand(1,9); } $asString = time(); - + $this->Users_model->update_record(['twofactorcode' =>$code, 'twofactortime'=>$asString ],$userID); return $code; } @@ -152,10 +159,10 @@ class Login extends MY_Controller { else { $message = $this->checkTwoFactorEmail($user,$code); } - - if (! $message) $this->login_user( $tmpuserid ); + + if (! $message) $this->login_user( $tmpuserid ); $this->json($message); - } + } function checkTwoFactorEmail($user,$code){ $message = false; diff --git a/application/views/start.php b/application/views/start.php index dfa32c5..ed2bbb1 100644 --- a/application/views/start.php +++ b/application/views/start.php @@ -1,4 +1,4 @@ - + diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..b607acc --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,19 @@ +networks: + shared-network: + external: true + name: shared-network + +services: + monpas-app: + build: + context: . + dockerfile: Dockerfile + container_name: monpas-app + restart: unless-stopped + working_dir: /var/www/html + volumes: + - .:/var/www/html + environment: + VIRTUAL_HOST: monpas.test + networks: + - shared-network diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 0000000..780fb09 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,21 @@ +server { + listen 80; + server_name monpas.test; + root /var/www/html; + index index.php index.html; + + location / { + try_files $uri $uri/ /index.php?$query_string; + } + + location ~ \.php$ { + fastcgi_pass 127.0.0.1:9000; + fastcgi_index index.php; + fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; + include fastcgi_params; + } + + location ~ /\.ht { + deny all; + } +} diff --git a/public/js/login.js b/public/js/login.js index 4577882..0c5e0d3 100644 --- a/public/js/login.js +++ b/public/js/login.js @@ -69,29 +69,22 @@ ls.initLoginModel = function(){ return;} if (self.wwoord().length<4) { self.focusop(2); - return;} - var submitData={gebruikersnaam: self.gnaam()} - $.post("index.php/login/controlleergnaam", submitData, function(data){ - if (!data || data.salt==null || data.challenge == null){ - alert('Uw gebruikersnaam en/of wachtwoord wordt niet herkend.'); + return;} + var submitData={ + gebruikersnaam: self.gnaam(), + wachtwoord: self.wwoord() + } + $.post("index.php/login/login", submitData, function(data){ + if (!data || data == "geen rechten"){ + if (data == "geen rechten") { + alert('U heeft geen (actieve) rechten binnen deze applicatie.'); + } + else { + alert('Uw gebruikersnaam en/of wachtwoord wordt niet herkend.'); + } } - else{ - var saltedChallenge =hex_md5 (hex_md5(data.salt + self.wwoord())+ data.challenge); - submitData= {saltedchallenge:saltedChallenge}; - - $.post("index.php/login/controleerwwoord", submitData,function(data){ - if (!data || data == "geen rechten"){ - if (data == "geen rechten") { - alert('U heeft geen (actieve) rechten binnen deze applicatie.'); - } - else { - alert('Uw gebruikersnaam en/of wachtwoord wordt niet herkend.'); - } - } - else { - self.fDoTwoFactor(data) - }; // else - },'json'); + else { + self.fDoTwoFactor(data) } },'json'); },