2019-06-02 13:20:08 +00:00
< ? 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 ),
2019-07-19 08:34:30 +00:00
'domain' => $_SERVER [ 'HTTP_HOST' ],
2019-06-02 13:20:08 +00:00
];
file_put_contents ( 'config.json' , json_encode ( $config ) );
2019-06-02 14:35:02 +00: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, `username` VARCHAR(50) NOT NULL COLLATE 'utf8mb4_bin', `password` VARCHAR(128) NOT NULL COLLATE 'utf8mb4_bin', PRIMARY KEY (`ID`) ) 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; " ;
$database -> query ( $query );
2019-06-02 13:20:08 +00:00
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 >
2019-07-17 08:37:44 +00:00
< 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 >
2019-06-02 13:20:08 +00:00
. centered - container {
border : solid ;
border - radius : 25 px ;
border - color : #ABABAB;
}
2019-07-17 08:37:44 +00:00
</ 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 >
2019-06-02 13:20:08 +00:00
</ div >
2019-07-17 08:37:44 +00:00
</ 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 >
2019-06-02 13:20:08 +00:00
</ div >
2019-07-17 08:37:44 +00:00
< 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 >
2019-06-02 13:20:08 +00:00
</ div >
2019-07-17 08:37:44 +00:00
</ 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 >
2019-06-02 13:20:08 +00:00
</ div >
2019-07-17 08:37:44 +00:00
< 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 >
2019-06-02 13:20:08 +00:00
</ div >
2019-07-17 08:37:44 +00:00
< 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 >
2019-06-02 13:20:08 +00:00
</ div >
2019-07-17 08:37:44 +00:00
< 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 >
2019-06-02 13:20:08 +00:00
</ div >
2019-07-17 08:37:44 +00:00
</ 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 >
2019-06-02 13:20:08 +00:00
$ ( '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 () {
2019-07-17 08:37:44 +00:00
if ( $ ( '#db_password' ) . val () == $ ( '#db_confirmpassword' ) . val ()) {
2019-06-02 13:20:08 +00:00
$ . 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 (),
},
2019-07-17 08:37:44 +00:00
success : function ( data ) {
2019-06-02 13:20:08 +00:00
if ( data . status == 200 ) {
$ ( 'section' ) . hide ();
$ ( '#section_complete' ) . show ();
$ ( '#section_complete div' ) . html ( data . message );
2019-07-17 08:37:44 +00:00
setInterval ( function () {
window . location . href = data . homelocation ;
}, 5000 );
2019-06-02 13:20:08 +00:00
}
2019-06-02 14:35:02 +00:00
},
2019-07-17 08:37:44 +00:00
error : function ( xhr , ajaxOptions , thrownError ) {
2019-06-02 14:35:02 +00:00
alert ( xhr . responseText . message );
2019-06-02 13:20:08 +00:00
}
});
}
});
2019-07-17 08:37:44 +00:00
</ script >
</ body >
</ html >
< ? php
2019-06-02 13:20:08 +00:00
}