PHP Classes

File: public/install/step1.php

Recommend this page to a friend!
  Classes of milenmk   Simple PHP Password Manager   public/install/step1.php   Download  
File: public/install/step1.php
Role: Auxiliary script
Content type: text/plain
Description: Auxiliary script
Class: Simple PHP Password Manager
Application to store and retrieve user password
Author: By
Last change: 2.4.0
[NEW] Update domains table on record create/update/delete
[FIX] PM_DISABLE_SYSLOG renamed to DISABLE_SYSLOG
[FIX] minor bug fixes
v2.3.1
minor
v2.3.0
style fixing
v2.2.0
v2.1.1
v2.1.1
rewrite twig templates for default theme
Date: 1 year ago
Size: 7,671 bytes
 

Contents

Class file image Download
<?php

/**
 *
 * Simple password manager written in PHP with Bootstrap and PDO database connections
 *
 * File name: step1.php
 * Last Modified: 10.01.23 ?., 20:15 ?.
 *
 * @link https://blacktiehost.com
 * @since 1.0.0
 * @version 2.4.0
 * @author Milen Karaganski <milen@blacktiehost.com>
 *
 * @license GPL-3.0+
 * @license http://www.gnu.org/licenses/gpl-3.0.txt
 * @copyright Copyright (c) 2020 - 2022 blacktiehost.com
 *
 */

/**
 * \file step1.php
 * \ingroup Password Manager
 * \brief Configure application URL and database connection and then check for errors
 * If no errors, create database and database user if they do not exist
 * Write info on the config file
 */

declare(strict_types=1);

use
PasswordManager\PassManDb;

try {
    include_once(
'inc.php');
} catch (
Exception $e) {
   
$error = $e->getMessage();
    print
'File "inc.php" not found!';
    die();
}

//Check for lock file
$lockfile = '../../docs/install.lock';
if (
file_exists($lockfile)) {
   
$lockerror = 1;
}

//Check if install is permitted. No direct access to this page is allowed
$url_query = $_SERVER['QUERY_STRING'];
parse_str($url_query, $params);
if (
strcmp($params['checks'], 'ok') !== 0 || strcmp($params['allowinstall'], 'yes') !== 0) {
   
$installerror = 1;
}

/*
 * Actions
 */

if ($_GET['action'] == 'check_connection' || $_POST['action'] == 'check_connection') {
   
//var_dump($_POST);

   
$error = 0;
   
$dberror = '';

   
$main_url_root = $_POST['main_url_root'];
   
$main_app_root = $_POST['main_app_root'];
   
$main_document_root = $_POST['main_document_root'];
   
$db_host = $_POST['db_host'];
   
$db_port = $_POST['db_port'];
   
$db_prefix = $_POST['db_prefix'];
   
$db_name = $_POST['db_name'];
   
$db_user = $_POST['db_user'];
   
$db_pass = $_POST['db_pass'];
   
$db_character_set = $_POST['db_character_set'];
   
$db_collation = $_POST['db_collation'];
   
$application_title = $_POST['application_title'];
   
$create_database = $_POST['create_database'];
   
$root_db_user = $_POST['root_db_user'];
   
$root_db_pass = $_POST['root_db_pass'];

    if (
strlen($db_prefix) > 5) {
       
$error = 'PrefixError';
    }

   
//If no error, try to connect to database
   
if (!$error) {
       
//Try to connect to server without database name set
       
$conn = new PassManDb($db_host, $db_user, $db_pass, '', (int)$db_port);

       
// If connection error, show it
       
if ($conn->error) {
           
$dberror = $conn->error;
        }

       
// If no error, user exists try connecting to database with database name set
       
if (!$db->error) {
           
$res = $conn->selectDb($db_host, $db_user, $db_pass, $db_name, $db_character_set, $db_collation, (int)$db_port);
        }

       
// If result is < 1, that means that the table is not existing OR the user doesn't have rights to access it.
       
if ($res < 1 && $create_database == 1) {
           
//Try connection with root user if specified
           
$res2 = $conn->selectDb($db_host, $root_db_user, $root_db_pass, '', $db_character_set, $db_collation, (int)$db_port);
            if (
$res2 < 1) {
               
$dberror = $conn->error;
            } else {
                if (!
$conn->db->inTransaction()) {
                   
$conn->db->beginTransaction();
                }

               
$new_db_name = strip_tags($db_name);
               
$new_db_character_set = strip_tags($db_character_set);
               
$new_db_collation = strip_tags($db_collation);
               
$new_db_user = strip_tags($db_user);
               
$new_db_pass = strip_tags($db_pass);

               
$new_db_name2 = htmlspecialchars($new_db_name, ENT_QUOTES);
               
$new_db_character_set2 = htmlspecialchars($new_db_character_set, ENT_QUOTES);
               
$new_db_collation2 = htmlspecialchars($new_db_collation, ENT_QUOTES);
               
$new_db_user2 = htmlspecialchars($new_db_user, ENT_QUOTES);
               
$new_db_pass2 = htmlspecialchars($new_db_pass, ENT_QUOTES);

               
//Create the database and the user if they do not exist
               
$conn->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

               
$conn->db->exec(
                   
"CREATE DATABASE IF NOT EXISTS $new_db_name2 DEFAULT CHARACTER SET $new_db_character_set2 COLLATE $new_db_collation2;
                CREATE USER IF NOT EXISTS
$new_db_user2@'localhost' IDENTIFIED BY '$new_db_pass2';
                GRANT ALL ON
$new_db_name2.* TO $new_db_user2@'localhost';
                FLUSH PRIVILEGES;"
               
);
            }
        } elseif (
$res < 1 && empty($create_database)) {
           
$dberror = $conn->error . '. ' . $langs->trans('ConnError1');
        }

       
//No errors, database is present, user has rights.
        // Write data to config file and continue.
       
if (!$db->error) {
           
//Root user can connect. Write data to config file and continue.
           
$conffile = '../../conf/conf.php';
           
$new_file = fopen($conffile, 'w');

           
fputs($new_file, '<?php' . "\n");
           
fputs($new_file, "\n");
           
fputs($new_file, 'declare(strict_types = 1);' . "\n");
           
fputs($new_file, "\n");
           
fputs($new_file, '/**' . "\n");
           
fputs($new_file, ' * \file conf/conf.php' . "\n");
           
fputs($new_file, ' */' . "\n");
           
fputs($new_file, "\n");

           
fputs($new_file, '$main_url_root=\'' . $main_url_root . '\';');
           
fputs($new_file, "\n");
           
fputs($new_file, '$main_app_root=\'' . $main_app_root . '\';');
           
fputs($new_file, "\n");
           
fputs($new_file, '$main_document_root=\'' . $main_document_root . '\';');
           
fputs($new_file, "\n");

           
fputs($new_file, '$db_host=\'' . $db_host . '\';');
           
fputs($new_file, "\n");

           
fputs($new_file, '$db_port=\'' . $db_port . '\';');
           
fputs($new_file, "\n");

           
fputs($new_file, '$db_name=\'' . $db_name . '\';');
           
fputs($new_file, "\n");

           
fputs($new_file, '$db_prefix=\'' . $db_prefix . '\';');
           
fputs($new_file, "\n");

           
fputs($new_file, '$db_user=\'' . $db_user . '\';');
           
fputs($new_file, "\n");
           
fputs($new_file, '$db_pass=\'' . $db_pass . '\';');
           
fputs($new_file, "\n");

           
fputs($new_file, '$main_db_character_set=\'' . $db_character_set . '\';');
           
fputs($new_file, "\n");

           
fputs($new_file, '$main_db_collation=\'' . $db_collation . '\';');
           
fputs($new_file, "\n");

           
fputs($new_file, '$main_application_title=\'' . $application_title . '\';');
           
fputs($new_file, "\n");

           
fclose($new_file);

           
$conn = null;

           
header('Location: step2.php');
        }
       
$conn = null;
    }
   
$conn = null;
}

/*
 * View
 */

print $twig->render(
   
'step1.body.html.twig',
    [
       
'langs' => $langs,
       
'main_url' => PM_INSTALL_MAIN_URL,
       
'root_folder' => PM_INSTALL_APP_ROOT_FOLDER,
       
'lockerror' => $lockerror,
       
'installerror' => $installerror,
       
'title' => $langs->trans('InstallConfigure'),
       
'ses_error' => $error,
       
'db_error' => $dberror,
    ]
);

if (
$lockerror) {
    print
$langs->trans('InstallLockfileError');
}

print
$twig->render(
   
'install.footer.html.twig',
    [
       
'langs' => $langs,
       
'main_url' => PM_INSTALL_MAIN_URL,
       
'error' => $errors,
       
'message' => $messages,
    ]
);