0
0
This repository has been archived on 2020-11-15. You can view files and clone it, but cannot push or open issues or pull requests.
OpenShorte.old/lib/php/install.php

172 lines
9.6 KiB
PHP
Raw Normal View History

<?php
if ( file_exists ( 'config.json' ) ) {
header ( "Location: " . substr ( $_SERVER [ 'SCRIPT_NAME' ], 0, -10 ) . "/" );
}
if ( isset ( $_POST [ 'site_name' ] ) && isset ( $_POST [ 'db_host' ] ) && isset ( $_POST [ 'db_port' ] ) && isset ( $_POST [ 'db_username' ] ) && isset ( $_POST [ 'db_password' ] ) && isset ( $_POST [ 'db_name' ] ) ) {
$config = [
'installed' => true,
'website_name' => $_POST [ 'site_name' ],
'db' => [
'host' => $_POST [ 'db_host' ],
'port' => (integer) $_POST [ 'db_port' ],
'username' => $_POST [ 'db_username' ],
'password' => $_POST [ 'db_password' ],
'name' => $_POST [ 'db_name' ],
],
'installation_path' => substr ( $_SERVER [ 'SCRIPT_NAME' ], 0, -10 ),
'domain' => $_SERVER [ 'HTTP_HOST' ],
];
file_put_contents ( 'config.json', json_encode ( $config ) );
2019-06-02 16:35:02 +02:00
try {
$database = new PDO ( "mysql:dbname=" . $config [ 'db' ] [ 'name' ] . ";host=" . $config [ 'db' ] [ 'host' ] . ":" . $config [ 'db' ] [ 'port' ], $config [ 'db' ] [ 'username' ], $config [ 'db' ] [ 'password' ] );
}
catch ( PDOException $exception ) {
unlink ( "config.json" );
http_response_code ( 400 );
header ( 'Content-Type: application/json' );
echo ( json_encode ( [ 'status' => 400, 'message' => $exception->getMessage ( ) ] ) );
exit;
}
$query = "CREATE TABLE IF NOT EXISTS `users` ( `ID` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(32) DEFAULT NULL, `surname` varchar(32) DEFAULT NULL, `username` varchar(32) NOT NULL, `password` varchar(128) NOT NULL, `image` mediumtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL, `joined_date` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`ID`), UNIQUE KEY `username` (`username`) ) COLLATE='utf8mb4_bin' ENGINE=InnoDB; CREATE TABLE IF NOT EXISTS `links` ( `ID` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, `URL` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_bin', `created_by` BIGINT(20) UNSIGNED NOT NULL, PRIMARY KEY (`ID`), INDEX `links.created_by` (`created_by`), CONSTRAINT `links.created_by` FOREIGN KEY (`created_by`) REFERENCES `users` (`ID`) ON UPDATE CASCADE ON DELETE CASCADE ) COLLATE='utf8mb4_bin' ENGINE=InnoDB;";
2019-06-02 16:35:02 +02:00
$database->query ( $query );
header ( 'Content-Type: application/json' );
echo ( json_encode ( [ 'status' => 200, 'message' => 'Installation completed!<br>You will be redirected to the home page in 5 seconds.', 'homelocation' => $config [ 'installation_path' ] ] ) );
exit;
}
else {
?>
<DOCTYPE HTML>
<html>
<head>
<meta charset="UTF-8">
<title>Installer | OpenShorte</title>
<link href="./favicon.ico" rel="icon" type="image/x-icon">
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">
<style>
.centered-container {
border: solid;
border-radius: 25px;
border-color: #ABABAB;
}
</style>
</head>
<body>
<div class="mx-auto my-5 col-sm-8 col-md-6 col-xl-4 centered-container">
<div class="my-2"></div>
<section id="section_welcome">
<p>
Welcome to the OpenShorte installer.<br>
Since it seems that there are no installation found for this website, we'll proceed now with creating one.<br>
Please click 'Next' and provide all the necessary informations for the database and the site name in order to let this website work correctly.
</p>
<button id="btn_next_sitename" class="btn btn-secondary">Next</button>
</section>
<section id="section_sitename">
<form class="form form-inline">
<div class="input-group col-sm-7 mx-auto">
<div class="input-group-prepend">
<span class="input-group-text" id="sitename_label">Website Name:</span>
</div>
<input type="text" class="form-control" aria-describedby="sitename_label" id="site_name" required>
</div>
</form>
<button id="btn_next_dbdata" class="btn btn-secondary">Next</button>
</section>
<section id="section_dbdata">
<form class="form form-inline">
<div class="input-group col-sm-7 mx-auto">
<div class="input-group-prepend">
<span class="input-group-text" id="dbdata_label-1">Host:</span>
</div>
<input type="text" class="form-control" aria-describedby="dbdata_label-1" id="db_host" required>
</div>
<div class="input-group col-sm-5 mx-auto">
<div class="input-group-prepend">
<span class="input-group-text" id="dbdata_label-2">Port:</span>
</div>
<input type="text" class="form-control" aria-describedby="dbdata_label-2" id="db_port" required>
</div>
</form>
<form class="form">
<div class="input-group col-sm-12 mx-auto">
<div class="input-group-prepend">
<span class="input-group-text" id="dbdata_label-3">Username:</span>
</div>
<input type="text" class="form-control" aria-describedby="dbdata_label-3" id="db_username" required>
</div>
<div class="input-group col-sm-12 mx-auto">
<div class="input-group-prepend">
<span class="input-group-text" id="dbdata_label-5">Password:</span>
</div>
<input type="password" class="form-control" aria-describedby="dbdata_label-5" id="db_password" required>
</div>
<div class="input-group col-sm-12 mx-auto">
<div class="input-group-prepend">
<span class="input-group-text" id="dbdata_label-6">Repeat Password:</span>
</div>
<input type="password" class="form-control" aria-describedby="dbdata_label-6" id="db_confirmpassword" required>
</div>
<div class="input-group col-sm-12 mx-auto">
<div class="input-group-prepend">
<span class="input-group-text" id="dbdata_label-4">Database Name:</span>
</div>
<input type="text" class="form-control" aria-describedby="dbdata_label-4" id="db_name" required>
</div>
</form>
<button id="btn_next_complete" class="btn btn-secondary">Next</button>
</section>
<section id="section_complete">
<div class="mx-auto"></div>
</section>
<div class="my-2"></div>
</div>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js" integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script>
<script>
$('section:not(#section_welcome)').hide();
$('#btn_next_sitename').click(function() {
$('section').hide();
$('#section_sitename').show();
});
$('#btn_next_dbdata').click(function() {
$('section').hide();
$('#section_dbdata').show();
});
$('#btn_next_complete').click(function() {
if ($('#db_password').val() == $('#db_confirmpassword').val()) {
$.ajax({
method: "POST",
datatype: "JSON",
data: {
site_name: $('#site_name').val(),
db_host: $('#db_host').val(),
db_port: $('#db_port').val(),
db_username: $('#db_username').val(),
db_password: $('#db_password').val(),
db_name: $('#db_name').val(),
},
success: function(data) {
if (data.status == 200) {
$('section').hide();
$('#section_complete').show();
$('#section_complete div').html(data.message);
setInterval(function() {
window.location.href = data.homelocation;
}, 5000);
}
2019-06-02 16:35:02 +02:00
},
error: function(xhr, ajaxOptions, thrownError) {
2019-06-02 16:35:02 +02:00
alert(xhr.responseText.message);
}
});
}
});
</script>
</body>
</html>
<?php
}