inital template
This commit is contained in:
60
index.php
Normal file
60
index.php
Normal file
@@ -0,0 +1,60 @@
|
|||||||
|
<?php
|
||||||
|
#=========================
|
||||||
|
#
|
||||||
|
# name: index.php
|
||||||
|
# version: 2.1.0
|
||||||
|
# from: 2021-01-23
|
||||||
|
# developer: 4nima
|
||||||
|
# tested with: nginx, php7
|
||||||
|
# requirements: php, bootstrap, jQuery, ajax
|
||||||
|
#
|
||||||
|
#=========================
|
||||||
|
# Default index.php
|
||||||
|
# includs all other
|
||||||
|
#
|
||||||
|
#=========================
|
||||||
|
|
||||||
|
session_start();
|
||||||
|
?>
|
||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<?php
|
||||||
|
#> inlcude config
|
||||||
|
include_once('sources/config.php');
|
||||||
|
|
||||||
|
#> include sidecontrol
|
||||||
|
include_once('sources/sides.php');
|
||||||
|
|
||||||
|
echo '<title>'.$sideTitle.'</title>';
|
||||||
|
|
||||||
|
?>
|
||||||
|
<!-- metadata -->
|
||||||
|
<meta charset="utf-8">
|
||||||
|
<meta name="viewpoint" content="width=device-width, initial-scale=1, shrink-to-fit=no">
|
||||||
|
|
||||||
|
<!-- include style -->
|
||||||
|
<link rel="stylesheet" href="<?php echo $cssPath; ?>lib/bootstrap/bootstrap.min.css">
|
||||||
|
<link rel="stylesheet" href="<?php echo $cssPath; ?>lib/font-awesome/font-awesome.min.css">
|
||||||
|
<link rel="stylesheet" href="<?php echo $cssPath; ?>custom.css">
|
||||||
|
|
||||||
|
<!-- set favicon -->
|
||||||
|
<link rel="shortcut icon" type="image/png" href="<?php echo $imgPath; ?>favicon.ico">
|
||||||
|
|
||||||
|
<!-- include js -->
|
||||||
|
<script src="<?php echo $jsPath; ?>lib/jquery.js"></script>
|
||||||
|
<script src="<?php echo $jsPath; ?>lib/bootstrap/bootstrap.min.js"></script>
|
||||||
|
<script src="<?php echo $jsPath; ?>functions.js"></script>
|
||||||
|
<script src="<?php echo $jsPath; ?>custom.js"></script>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
<body class="bg-<?php echo $colorTwo; ?>">
|
||||||
|
<?php
|
||||||
|
include($structurePath.'nav.php');
|
||||||
|
echo '<section id="window" class="pt-5 pb-3 mt-3 container mr-auto">';
|
||||||
|
include($frontendPath.$side);
|
||||||
|
echo '</section>';
|
||||||
|
include($structurePath.'footer.php');
|
||||||
|
?>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
31
sources/backend/ajax.php
Normal file
31
sources/backend/ajax.php
Normal file
@@ -0,0 +1,31 @@
|
|||||||
|
<?php
|
||||||
|
#--------------------#
|
||||||
|
#----- by 4nima -----#
|
||||||
|
#----- v. 1.0.0 -----#
|
||||||
|
#-- coding@4nima.de -#
|
||||||
|
#--------------------#
|
||||||
|
|
||||||
|
session_start();
|
||||||
|
include_once('/volume1/web/sources/config.php');
|
||||||
|
|
||||||
|
switch ($_POST['side']) {
|
||||||
|
case 'netStatus':
|
||||||
|
include($ajaxPath.'network_status.php');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'input':
|
||||||
|
include($ajaxPath.'db_input.php');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'priview':
|
||||||
|
include($ajaxPath.'pokePriview.php');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'dex':
|
||||||
|
include($ajaxPath.'pokeInsertDex.php');
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
# code...
|
||||||
|
break;
|
||||||
|
}
|
||||||
78
sources/backend/functions.php
Normal file
78
sources/backend/functions.php
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
<?php
|
||||||
|
#--------------------#
|
||||||
|
#----- by 4nima -----#
|
||||||
|
#----- v. 1.0.0 -----#
|
||||||
|
#-- coding@4nima.de -#
|
||||||
|
#--------------------#
|
||||||
|
|
||||||
|
// session_start();
|
||||||
|
|
||||||
|
|
||||||
|
// Generate Navigation
|
||||||
|
function genNav($nav) {
|
||||||
|
foreach ($nav as $item) {
|
||||||
|
if (is_array($item[1])) {
|
||||||
|
echo '
|
||||||
|
<li class="nav-item dropdown">
|
||||||
|
<a class="nav-link dropdown-toggle" href="#" id="gamedrop" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
'.$item[0].'
|
||||||
|
</a>
|
||||||
|
<div class="dropdown-menu" aria-labelledby="gamedrop">
|
||||||
|
';
|
||||||
|
|
||||||
|
foreach ($item[1] as $dropdown) {
|
||||||
|
if ($dropdown[0] == "---") {
|
||||||
|
echo '<div class="dropdown-divider"></div>';
|
||||||
|
} else {
|
||||||
|
echo '<a class="dropdown-item" href="'.$dropdown[1].'">'.$dropdown[0].'</a>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
echo '
|
||||||
|
</div>
|
||||||
|
</li>
|
||||||
|
|
||||||
|
';
|
||||||
|
} else {
|
||||||
|
echo '
|
||||||
|
<li class="nav-item">
|
||||||
|
<a class="nav-link" href="'.$item[1].'">'.$item[0].'</a>
|
||||||
|
</li>
|
||||||
|
';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Setzt Login Cookie und Session
|
||||||
|
function setLogin($usr, $hash, $lvl, $stay) {
|
||||||
|
if ($stay) {
|
||||||
|
setcookie('usr', $usr, time()+18144000);
|
||||||
|
setcookie('hash', $hash, time()+18144000);
|
||||||
|
}
|
||||||
|
$_SESSION['usr'] = $usr;
|
||||||
|
$_SESSION['hash'] = $hash;
|
||||||
|
$_SESSION['lvl'] = $lvl;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Login Prüfung
|
||||||
|
function checkLogin($usr, $lvl, $hash) {
|
||||||
|
$db = new Database();
|
||||||
|
$db->query('
|
||||||
|
SELECT *
|
||||||
|
FROM user
|
||||||
|
WHERE username = :usr
|
||||||
|
AND lvl = :lvl
|
||||||
|
AND pwdhash = :hash
|
||||||
|
');
|
||||||
|
$db->bind(':usr', $usr);
|
||||||
|
$db->bind(':lvl', $lvl);
|
||||||
|
$db->bind(':hash', $hash);
|
||||||
|
$user = $db->resultset();
|
||||||
|
if ($user[0]['username'] == $usr && $user[0]['lvl'] == $lvl && $user[0]['pwdhash'] == $hash) {
|
||||||
|
$login = TRUE;
|
||||||
|
} else {
|
||||||
|
$_SESSION = array();
|
||||||
|
}
|
||||||
|
return $login;
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
372
sources/backend/lib/account.php
Normal file
372
sources/backend/lib/account.php
Normal file
@@ -0,0 +1,372 @@
|
|||||||
|
<?php
|
||||||
|
#--------------------#
|
||||||
|
#----- by 4nima -----#
|
||||||
|
#----- v. 1.3.1 -----#
|
||||||
|
#-- coding@4nima.de -#
|
||||||
|
#--------------------#
|
||||||
|
|
||||||
|
#>> Verbessungsideen
|
||||||
|
#> Errorcodes einbauen
|
||||||
|
#> DB in Eigenschaften einbinden
|
||||||
|
|
||||||
|
class Account {
|
||||||
|
|
||||||
|
#> Usergrunddaten (änderbar)
|
||||||
|
public $username;
|
||||||
|
public $uid;
|
||||||
|
public $permit;
|
||||||
|
public $email;
|
||||||
|
public $token;
|
||||||
|
|
||||||
|
#> Usergrunddaten (unveränderbar)
|
||||||
|
private $password;
|
||||||
|
private $userip = USER_IP;
|
||||||
|
|
||||||
|
#> Login Einstellungen
|
||||||
|
public $maxLoginTime = LOGIN_FAIL_TIME;
|
||||||
|
|
||||||
|
#> Mail Einstellungen (für neue User Mails)
|
||||||
|
// Mail-Text in Konfig einplfegen (Bei Mail muss der Token angehabgen werden)
|
||||||
|
public $mailFrom = MAIL_FROM;
|
||||||
|
public $mailSubject = MAIL_SUBJECT;
|
||||||
|
public $mailText = MAIL_TEXT;
|
||||||
|
public $mailPage = MAIL_PAGE;
|
||||||
|
public $mailFooter = MAIL_FOOTER;
|
||||||
|
|
||||||
|
// public $db;
|
||||||
|
|
||||||
|
public function __construct() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
# >>> static functions <<<
|
||||||
|
|
||||||
|
#>> Liest Accounts aus der DB entsprechend der Einstellung aus und gibt diese zurück
|
||||||
|
public static function accountList($db, $type = '') {
|
||||||
|
$db->query('
|
||||||
|
SELECT *
|
||||||
|
FROM accounts
|
||||||
|
WHERE active = :active
|
||||||
|
');
|
||||||
|
switch ($type) {
|
||||||
|
case 'All':
|
||||||
|
$db->query('
|
||||||
|
SELECT *
|
||||||
|
FROM accounts
|
||||||
|
');
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'Deactivate':
|
||||||
|
$db->bind(':active', 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'Active':
|
||||||
|
$db->bind(':active', 1);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'Not Active':
|
||||||
|
$db->bind(':active', 2);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
$db->query('
|
||||||
|
SELECT *
|
||||||
|
FROM accounts
|
||||||
|
WHERE active > 0
|
||||||
|
');
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
$accounts = $db->resultset();
|
||||||
|
if ($accounts) {
|
||||||
|
return $accounts;
|
||||||
|
} else {return FALSE;}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
# >>> public functions <<<
|
||||||
|
|
||||||
|
#>> (Zwischen)Speichert einen User wenn alle Vorgaben erfüllt sind
|
||||||
|
public function newUser($user, $pass, $mail = '') {
|
||||||
|
if ($user != '' && $pass != '') {
|
||||||
|
if ($this->checkUser($user) && $this->checkPass($pass)) {
|
||||||
|
$this->username = $user;
|
||||||
|
$this->password = $this->hashPass($pass);
|
||||||
|
if ($mail == '' || $this->checkMail($mail)) {
|
||||||
|
$this->email = $mail;
|
||||||
|
return TRUE;
|
||||||
|
} else {return FALSE;}
|
||||||
|
} else {return FALSE;}
|
||||||
|
} else {return FALSE;}
|
||||||
|
}
|
||||||
|
|
||||||
|
#>> Speichert den User in der Datenbank und versendet bei Hinterlegter E-Mail eine bestätigung
|
||||||
|
public function saveUser($db, $permit = 100) {
|
||||||
|
if ($this->username != '' && $this->password != '') {
|
||||||
|
$db->query('
|
||||||
|
SELECT username
|
||||||
|
FROM accounts
|
||||||
|
WHERE username = :user
|
||||||
|
');
|
||||||
|
$db->bind(':user', $this->username);
|
||||||
|
$checkUsername = $db->resultset();
|
||||||
|
|
||||||
|
if ($checkUsername[0]['username'] == '') {
|
||||||
|
$time = time();
|
||||||
|
$this->token = md5($time.$this->username);
|
||||||
|
$db->query('
|
||||||
|
INSERT INTO accounts
|
||||||
|
(username, uid, email, passHash, permit, created, tokenTime, token, active)
|
||||||
|
VALUES
|
||||||
|
(:user, :uid, :mail, :pass, :permit, :time, :time, :token, 2)
|
||||||
|
');
|
||||||
|
$db->bind(':user', $this->username);
|
||||||
|
$db->bind(':mail', $this->email);
|
||||||
|
$db->bind(':pass', $this->password);
|
||||||
|
$db->bind(':permit', $permit);
|
||||||
|
$db->bind(':time', $time);
|
||||||
|
$db->bind(':token', $this->token);
|
||||||
|
$db->execute();
|
||||||
|
|
||||||
|
if ($this->email != '') {
|
||||||
|
$mailContent = 'Hallo '.$this->usernmae;
|
||||||
|
$mailContent .= '<br>';
|
||||||
|
$mailContent .= $this->mailText;
|
||||||
|
$mailContent .= '<br>';
|
||||||
|
$mailContent .= $this->mailPage;
|
||||||
|
$mailContent .= $this->token;
|
||||||
|
$mailContent .= '<br>';
|
||||||
|
$mailContent .= $this->mailFooter;
|
||||||
|
mail($this->email,
|
||||||
|
$this->mailSubject,
|
||||||
|
$mailContent,
|
||||||
|
$this->mailFrom
|
||||||
|
);
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
} else {return FALSE;}
|
||||||
|
} else {return FALSE;}
|
||||||
|
}
|
||||||
|
|
||||||
|
#>> Prüft ob von dieser IP mehr als X fehlgeschlagene Login versuche kamen
|
||||||
|
public function notBlocked($db, $trys = 5) {
|
||||||
|
$db->query('
|
||||||
|
SELECT result
|
||||||
|
FROM logLogin
|
||||||
|
WHERE result = 0
|
||||||
|
AND fromIp = :ip
|
||||||
|
AND time > :time
|
||||||
|
');
|
||||||
|
$db->bind(':ip', $this->userip);
|
||||||
|
$db->bind(':time', $this->maxLoginTime);
|
||||||
|
$loginFails = $db->resultset();
|
||||||
|
|
||||||
|
if (count($loginFails[0]['result']) <= $trys) {
|
||||||
|
// Versuche und Zeit in Config aufnehmen
|
||||||
|
return TRUE;
|
||||||
|
} else {return FALSE;}
|
||||||
|
}
|
||||||
|
|
||||||
|
#>> Prüft die Eingaben und gleicht diese dann mit der Datenbank ab
|
||||||
|
public function login($db, $user, $pass) {
|
||||||
|
$loginTry = FALSE;
|
||||||
|
|
||||||
|
if ($this->notBlocked($db)) {
|
||||||
|
if ($this->checkUser($user) && $this->checkPass($pass)) {
|
||||||
|
$db->query('
|
||||||
|
SELECT uid, passHash, permit
|
||||||
|
FROM accounts
|
||||||
|
WHERE active = 1
|
||||||
|
AND username = :user
|
||||||
|
');
|
||||||
|
$db->bind(':user', $user);
|
||||||
|
$login = $db->resultset();
|
||||||
|
if (password_verify($pass, $login[0]['passHash'])) {
|
||||||
|
$this->username = $user;
|
||||||
|
$this->uid = $login[0]['uid'];
|
||||||
|
$this->permit = $login[0]['permit'];
|
||||||
|
$loginTry = TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$db->query('
|
||||||
|
INSERT INTO logLogin
|
||||||
|
(usedName, time, fromIp, result)
|
||||||
|
VALUES
|
||||||
|
(:user, :time, :ip, :result)
|
||||||
|
');
|
||||||
|
$db->bind(':user', $user);
|
||||||
|
$db->bind(':time', time());
|
||||||
|
$db->bind(':ip', $this->userip);
|
||||||
|
$db->bind(':result', $loginTry);
|
||||||
|
$db->execute();
|
||||||
|
|
||||||
|
if ($loginTry) {
|
||||||
|
return TRUE;
|
||||||
|
} else {return FALSE;};
|
||||||
|
}
|
||||||
|
|
||||||
|
#>> Prüft ob die UID mit der in der DB übereinstimmen und setzt den Permit neu
|
||||||
|
public function checkLogin($db) {
|
||||||
|
$uid = $this->uid;
|
||||||
|
$db->query('
|
||||||
|
SELECT username, permit
|
||||||
|
FROM accounts
|
||||||
|
WHERE active = 1
|
||||||
|
AND uid = :uid
|
||||||
|
');
|
||||||
|
$db->bind(':uid', $uid);
|
||||||
|
$login = $db->resultset();
|
||||||
|
if ($login[0]['permit'] > 0) {
|
||||||
|
$this->username = $login[0]['username'];
|
||||||
|
$this->permit = $login[0]['permit'];
|
||||||
|
return TRUE;
|
||||||
|
} else {return FALSE;}
|
||||||
|
}
|
||||||
|
|
||||||
|
#>> Prüft den Eingetragenen Token mit in der DB ab und setzt bei erfolg den Account auf Aktiv (1)
|
||||||
|
public function confirmAcc($db) {
|
||||||
|
if ($this->uid != '' || $this->token != '') {
|
||||||
|
$db->query('
|
||||||
|
SELECT token
|
||||||
|
FROM accounts
|
||||||
|
WHERE active = 2
|
||||||
|
AND uid = :uid
|
||||||
|
');
|
||||||
|
$db->bind(':uid', $this->uid);
|
||||||
|
$token = $db->resultset();
|
||||||
|
if ($token[0]['token'] == $this->token) {
|
||||||
|
$db->query('
|
||||||
|
UPDATE accounts
|
||||||
|
SET token = "",
|
||||||
|
active = 1
|
||||||
|
WHERE uid = :uid
|
||||||
|
');
|
||||||
|
$db->bind(':uid', $this->uid);
|
||||||
|
$db->execute();
|
||||||
|
return TRUE;
|
||||||
|
} else {return FALSE;}
|
||||||
|
} else {return FALSE;}
|
||||||
|
}
|
||||||
|
|
||||||
|
#>> Prüft ob das alte Passwort (in Eigenschaft gespeichert) dem in der DB entspricht und Prüft neues Passwort auf anforderungen, danach Ientrag in DB
|
||||||
|
public function switchPass($db, $newPass) {
|
||||||
|
if ($this->password != '' && $newPass != '') {
|
||||||
|
if (checkPass($this->password) && checkPass($newPass)) {
|
||||||
|
$db->query('
|
||||||
|
SELECT password
|
||||||
|
FROM accounts
|
||||||
|
WHERE uid = :uid
|
||||||
|
');
|
||||||
|
$db->bind(':uid', $this->uid);
|
||||||
|
$db->bind(':pass', $this->password);
|
||||||
|
$pass = $db->resultset();
|
||||||
|
if (password_verify($this->password, $login[0]['passHash'])) {
|
||||||
|
$newPass = hashPass($newPass);
|
||||||
|
$db->query('
|
||||||
|
UPDATE accounts
|
||||||
|
SET passHash = :pass
|
||||||
|
WHERE uid = :uid
|
||||||
|
');
|
||||||
|
$db->bind(':uid', $this->uid);
|
||||||
|
$db->bind(':pass', $newPass);
|
||||||
|
$db->execute();
|
||||||
|
return TRUE;
|
||||||
|
} else {return FALSE;}
|
||||||
|
} else {return FALSE;}
|
||||||
|
} else {return FALSE;}
|
||||||
|
}
|
||||||
|
|
||||||
|
#>> Deaktiviert einen Account dessen UID in den Eigenschfaten gespeichert ist
|
||||||
|
public function deactivateAccount($db) {
|
||||||
|
if ($this->uid != '') {
|
||||||
|
$db->query('
|
||||||
|
UPDATE accounts
|
||||||
|
SET active = 0
|
||||||
|
WHERE uid = :uid
|
||||||
|
');
|
||||||
|
$db->bind(':uid', $this->uid);
|
||||||
|
$db->execute();
|
||||||
|
return TRUE;
|
||||||
|
} else {return FALSE;}
|
||||||
|
}
|
||||||
|
|
||||||
|
# >>> private functions <<<
|
||||||
|
|
||||||
|
#>> Prüft einen String auf bestimmte Inhalte und gibt ihn entsprechend Formatiert zurück
|
||||||
|
private function checkString($string) {
|
||||||
|
$string = htmlentities($string);
|
||||||
|
return $string;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
#>> Prüft ob der Username keine Sonderzeichen enthält
|
||||||
|
private function checkUser($user) {
|
||||||
|
if (!preg_match('#[!-/:-@\[-`{-~]#', $this->checkString($user)) && strlen($user) <= 50) {
|
||||||
|
return TRUE;
|
||||||
|
} else {return FALSE;}
|
||||||
|
}
|
||||||
|
|
||||||
|
#>> Prüft das Passwort auf ausreichende Komplexität
|
||||||
|
private function checkPass($pass) {
|
||||||
|
if ($this->checkString($pass) === $pass) {
|
||||||
|
if (strlen($pass) > 8
|
||||||
|
&& preg_match('`[A-Z]`',$pass)
|
||||||
|
&& preg_match('`[a-z]`',$pass)
|
||||||
|
&& preg_match('`[0-9]`',$pass)
|
||||||
|
&& preg_match('#[!-/:-@\[-`{-~]#',$pass)
|
||||||
|
) {
|
||||||
|
return TRUE;
|
||||||
|
} else {return FALSE;}
|
||||||
|
} else {return FALSE;}
|
||||||
|
}
|
||||||
|
|
||||||
|
#>> hasht das Passwort
|
||||||
|
private function hashPass($pass) {
|
||||||
|
return password_hash($pass, PASSWORD_DEFAULT);
|
||||||
|
}
|
||||||
|
|
||||||
|
#>> Prüft E-Mail auf korrekte Syntax & den Host auf existenz
|
||||||
|
private function checkMail($mail) {
|
||||||
|
if (filter_var($mail, FILTER_VALIDATE_EMAIL)) {
|
||||||
|
$hostname = preg_replace('/^.*@/', '', $mail);
|
||||||
|
if (count(dns_get_record($hostname))) {
|
||||||
|
return TRUE;
|
||||||
|
// Eriwetung: Prüfung ob E-Mails tatsächlich existieren
|
||||||
|
} else {return FALSE;}
|
||||||
|
} else {return FALSE;}
|
||||||
|
}
|
||||||
|
|
||||||
|
# >> Firststeps <<
|
||||||
|
|
||||||
|
public static function createDB($db) {
|
||||||
|
//
|
||||||
|
// $db->query('
|
||||||
|
// CREATE TABLE `network`.`accounts` (
|
||||||
|
// `idAcc` INT NOT NULL AUTO_INCREMENT,
|
||||||
|
// `username` VARCHAR(50) NOT NULL,
|
||||||
|
// `uid` VARCHAR(256) NOT NULL,
|
||||||
|
// `email` VARCHAR(50) NULL,
|
||||||
|
// `passHash` VARCHAR(256) NOT NULL,
|
||||||
|
// `permit` INT(3) NOT NULL DEFAULT 100,
|
||||||
|
// `tokenTime` INT(25) NULL DEFAULT 0,
|
||||||
|
// `token` VARCHAR(256) NULL,
|
||||||
|
// `created` INT(25) NOT NULL DEFAULT 0,
|
||||||
|
// `active` INT(1) NOT NULL DEFAULT 0 COMMENT '0 = Deaktiviert\n1 = Aktiv \n2 = Warte auf AKtivierung\n3 = PW wechel Reset',
|
||||||
|
// PRIMARY KEY (`idAcc`))
|
||||||
|
// COMMENT = 'Userverwaltung by 4nima, coding@4nima.de';
|
||||||
|
// ');
|
||||||
|
|
||||||
|
|
||||||
|
// CREATE TABLE `network`.`logLogin` (
|
||||||
|
// `idLogin` INT NOT NULL AUTO_INCREMENT,
|
||||||
|
// `usedName` VARCHAR(50) NOT NULL COMMENT 'Welcher Username genutzt wurde',
|
||||||
|
// `fromIp` VARCHAR(15) NOT NULL COMMENT 'Von welcher IP kam der Versuch\n',
|
||||||
|
// `time` VARCHAR(25) NOT NULL COMMENT 'wann war der Versuch\n',
|
||||||
|
// `success` INT(1) NOT NULL COMMENT 'Hatte der Versuch erfolg\n',
|
||||||
|
// PRIMARY KEY (`idLogin`))
|
||||||
|
// COMMENT = 'Accountverwaltung by 4nima, coding@4nima.de';
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
72
sources/backend/lib/database.php
Normal file
72
sources/backend/lib/database.php
Normal file
@@ -0,0 +1,72 @@
|
|||||||
|
<?php
|
||||||
|
class Database {
|
||||||
|
private $host = DB_HOST;
|
||||||
|
private $user = DB_USER;
|
||||||
|
private $pass = DB_PASS;
|
||||||
|
private $dbname = DB_NAME;
|
||||||
|
|
||||||
|
private $dbh;
|
||||||
|
private $error;
|
||||||
|
|
||||||
|
private $stmt;
|
||||||
|
|
||||||
|
public function __construct(){
|
||||||
|
// Set DSN
|
||||||
|
$dsn = 'mysql:host=' . $this->host . ';dbname=' . $this->dbname . ';charset=utf8';
|
||||||
|
// Set options
|
||||||
|
$options = array(
|
||||||
|
PDO::ATTR_PERSISTENT => true,
|
||||||
|
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
|
||||||
|
);
|
||||||
|
// Create a new PDO instanace
|
||||||
|
try{
|
||||||
|
$this->dbh = new PDO($dsn, $this->user, $this->pass, $options);
|
||||||
|
}
|
||||||
|
// Catch any errors
|
||||||
|
catch(PDOException $e){
|
||||||
|
$this->error = $e->getMessage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public function query($query){
|
||||||
|
$this->stmt = $this->dbh->prepare($query);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function bind($param, $value, $type = null){
|
||||||
|
if (is_null($type)) {
|
||||||
|
switch (true) {
|
||||||
|
case is_int($value):
|
||||||
|
$type = PDO::PARAM_INT;
|
||||||
|
break;
|
||||||
|
case is_bool($value):
|
||||||
|
$type = PDO::PARAM_BOOL;
|
||||||
|
break;
|
||||||
|
case is_null($value):
|
||||||
|
$type = PDO::PARAM_NULL;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
$type = PDO::PARAM_STR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
$this->stmt->bindValue($param, $value, $type);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function execute(){
|
||||||
|
return $this->stmt->execute();
|
||||||
|
}
|
||||||
|
|
||||||
|
public function resultset(){
|
||||||
|
$this->execute();
|
||||||
|
return $this->stmt->fetchAll(PDO::FETCH_ASSOC);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function single(){
|
||||||
|
$this->execute();
|
||||||
|
return $this->stmt->fetch(PDO::FETCH_ASSOC);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function rowCount(){
|
||||||
|
return $this->stmt->rowCount();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
33
sources/backend/login.php
Normal file
33
sources/backend/login.php
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
<?php
|
||||||
|
// Auf Login Prüfen
|
||||||
|
if (isset($_GET['login']) && $_POST['pass'] != '' && $_POST['user'] != '') {
|
||||||
|
$user = $_POST['user'];
|
||||||
|
$pass = $_POST['pass'];
|
||||||
|
if ($acc->login($db, $user, $pass)) {
|
||||||
|
$_SESSION['uid'] = $acc->uid;
|
||||||
|
$alertMsg = 'Willkommen zurück '.$acc->username;
|
||||||
|
} else {
|
||||||
|
$alertMsg = 'Login Fehleschlagen!';
|
||||||
|
}
|
||||||
|
} elseif (isset($_GET['logout'])) {
|
||||||
|
session_destroy();
|
||||||
|
$alertMsg = 'Erfolgreich Ausgelogt!';
|
||||||
|
} elseif (isset($_SESSION['uid'])) {
|
||||||
|
$acc->uid = $_SESSION['uid'];
|
||||||
|
if (!$acc->checkLogin($db)) {
|
||||||
|
session_destroy();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Auf neuen Account prüfen
|
||||||
|
if (isset($_GET['newAcc']) && $_POST['pass1'] == $_POST['pass2'] && $acc->permit > 700) {
|
||||||
|
// $newUser = ;
|
||||||
|
$newPass = $_POST['pass1'];
|
||||||
|
// $newMail = ;
|
||||||
|
if ($acc->newUser($newUser, $newPass, $newMail)) {
|
||||||
|
$acc->saveUser($db);
|
||||||
|
} else {
|
||||||
|
$alertMsg = 'Die Daten für den neuen Account sind Fehlerhaft';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
108
sources/config.php
Normal file
108
sources/config.php
Normal file
@@ -0,0 +1,108 @@
|
|||||||
|
<?php
|
||||||
|
#=========================
|
||||||
|
#
|
||||||
|
# name: nav.php
|
||||||
|
# version: 2.1.0
|
||||||
|
# from: 2021-01-23
|
||||||
|
# developer: 4nima
|
||||||
|
# tested with: nginx, php7
|
||||||
|
# requirements: php
|
||||||
|
#
|
||||||
|
#=========================
|
||||||
|
# dir, color settings
|
||||||
|
# used functions
|
||||||
|
# lib includes
|
||||||
|
#=========================
|
||||||
|
|
||||||
|
#> database config (database.php)
|
||||||
|
/*
|
||||||
|
define("DB_HOST", "SERVERIP");
|
||||||
|
define("DB_USER", "DBUSER");
|
||||||
|
define("DB_PASS", 'DBPW');
|
||||||
|
define("DB_NAME", "DBNAME");
|
||||||
|
*/
|
||||||
|
|
||||||
|
#> mail config (accounts.php)
|
||||||
|
/*
|
||||||
|
define(LOGIN_FAIL_TIME, time()-60*60);
|
||||||
|
define(MAIL_FROM, 'noreply@example.com');
|
||||||
|
define(MAIL_SUBJECT, 'SUBJECT');
|
||||||
|
define(MAIL_TEXT, 'MAIL');
|
||||||
|
define(MAIL_PAGE, 'LINK');
|
||||||
|
define(MAIL_FOOTER, 'FOOTER');
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
#> Webpage Name
|
||||||
|
$webname = "Template";
|
||||||
|
|
||||||
|
#> dir path
|
||||||
|
#> server dir
|
||||||
|
$server = '';
|
||||||
|
|
||||||
|
#> backend scripts
|
||||||
|
$backendPath = $server.'sources/backend/';
|
||||||
|
|
||||||
|
#> ajax scripts
|
||||||
|
$ajaxPath = $backendPath.'ajax/';
|
||||||
|
|
||||||
|
#> frontend scripts
|
||||||
|
$frontendPath = $server.'sources/frontend/';
|
||||||
|
|
||||||
|
#> structure skripts
|
||||||
|
$structurePath = $frontendPath.'structure/';
|
||||||
|
|
||||||
|
#> JavaScript (js)
|
||||||
|
$jsPath = $server.'sources/js/';
|
||||||
|
|
||||||
|
#> Cascading Style Sheet (css)
|
||||||
|
$cssPath = $server.'sources/css/';
|
||||||
|
|
||||||
|
#> Bilder
|
||||||
|
$imgPath = $server.'sources/img/';
|
||||||
|
|
||||||
|
#> function control
|
||||||
|
$login = false;
|
||||||
|
|
||||||
|
#> color control (primary, secondary, success, warning, info, light, dark, muted, white)
|
||||||
|
#> main color one (navbar & footer)
|
||||||
|
$colorOne = "dark";
|
||||||
|
|
||||||
|
#> main color two (background)
|
||||||
|
$colorTwo = "secondary";
|
||||||
|
|
||||||
|
#> main color three
|
||||||
|
$colorThree = "light";
|
||||||
|
|
||||||
|
#> main color three (login button)
|
||||||
|
$colorSuccess = "primary";
|
||||||
|
|
||||||
|
#> main color three (logout button)
|
||||||
|
$colorFailed = "primary";
|
||||||
|
|
||||||
|
#> text colorsw
|
||||||
|
$colorText = "muted";
|
||||||
|
|
||||||
|
#> navbar style (light, dark)
|
||||||
|
$navBarSytle = "dark";
|
||||||
|
|
||||||
|
#> default Includes
|
||||||
|
include_once($backendPath.'functions.php');
|
||||||
|
|
||||||
|
#> Libs
|
||||||
|
// include_once($libPath.'database.php');
|
||||||
|
// include_once($libPath.'account.php');
|
||||||
|
|
||||||
|
#> default Objekte iniziren
|
||||||
|
// $db = new Database();
|
||||||
|
// $acc = new Account();
|
||||||
|
|
||||||
|
#> Login verarbeitung und prüfung
|
||||||
|
// include_once($backendPath.'login.php');
|
||||||
|
|
||||||
|
#> Prüfen ob ein DB eintrag gemacht werden soll und einbinden der entsprechenden Datei
|
||||||
|
/*
|
||||||
|
if (isset($_GET['new']) || isset($_GET['login'])) {
|
||||||
|
include_once($backendPath.'db_input.php');
|
||||||
|
}
|
||||||
|
*/
|
||||||
57
sources/css/custom.css
Normal file
57
sources/css/custom.css
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
/*#--------------------#*/
|
||||||
|
/*#----- by 4nima -----#*/
|
||||||
|
/*#----- v. 1.0.0 -----#*/
|
||||||
|
/*#-- coding@4nima.de -#*/
|
||||||
|
/*#--------------------#*/
|
||||||
|
|
||||||
|
/* own colors define */
|
||||||
|
:root {
|
||||||
|
--own-color-one: #00FFFF;
|
||||||
|
--own-color-two: #FF00FF;
|
||||||
|
--own-color-three: #FFFF00;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* own colors one */
|
||||||
|
.bg-own-one, .btn-own-one {
|
||||||
|
background-color: var(--own-color-one);
|
||||||
|
}
|
||||||
|
.text-own-one {
|
||||||
|
color: var(--own-color-one);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* own colors two */
|
||||||
|
.bg-own-two, .btn-own-two {
|
||||||
|
background-color: var(--own-color-two);
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-own-two {
|
||||||
|
color: var(--own-color-two);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* own colors three */
|
||||||
|
.bg-own-three, .btn-own-three {
|
||||||
|
background-color: var(--own-color-three);
|
||||||
|
}
|
||||||
|
|
||||||
|
.text-own-three {
|
||||||
|
color: var(--own-color-three);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
.footer {
|
||||||
|
position: fixed;
|
||||||
|
bottom: 0;
|
||||||
|
width: 100%;
|
||||||
|
height: 30px;
|
||||||
|
padding-left: 25px;
|
||||||
|
line-height: 30px;
|
||||||
|
z-index: 90;
|
||||||
|
}
|
||||||
|
|
||||||
|
#window {
|
||||||
|
margin-bottom: 35px;
|
||||||
|
}
|
||||||
2050
sources/css/lib/bootstrap/bootstrap-grid.css
vendored
Normal file
2050
sources/css/lib/bootstrap/bootstrap-grid.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
sources/css/lib/bootstrap/bootstrap-grid.css.map
Normal file
1
sources/css/lib/bootstrap/bootstrap-grid.css.map
Normal file
File diff suppressed because one or more lines are too long
7
sources/css/lib/bootstrap/bootstrap-grid.min.css
vendored
Normal file
7
sources/css/lib/bootstrap/bootstrap-grid.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
sources/css/lib/bootstrap/bootstrap-grid.min.css.map
Normal file
1
sources/css/lib/bootstrap/bootstrap-grid.min.css.map
Normal file
File diff suppressed because one or more lines are too long
330
sources/css/lib/bootstrap/bootstrap-reboot.css
vendored
Normal file
330
sources/css/lib/bootstrap/bootstrap-reboot.css
vendored
Normal file
@@ -0,0 +1,330 @@
|
|||||||
|
/*!
|
||||||
|
* Bootstrap Reboot v4.0.0 (https://getbootstrap.com)
|
||||||
|
* Copyright 2011-2018 The Bootstrap Authors
|
||||||
|
* Copyright 2011-2018 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||||
|
*/
|
||||||
|
*,
|
||||||
|
*::before,
|
||||||
|
*::after {
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
html {
|
||||||
|
font-family: sans-serif;
|
||||||
|
line-height: 1.15;
|
||||||
|
-webkit-text-size-adjust: 100%;
|
||||||
|
-ms-text-size-adjust: 100%;
|
||||||
|
-ms-overflow-style: scrollbar;
|
||||||
|
-webkit-tap-highlight-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
@-ms-viewport {
|
||||||
|
width: device-width;
|
||||||
|
}
|
||||||
|
|
||||||
|
article, aside, dialog, figcaption, figure, footer, header, hgroup, main, nav, section {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
body {
|
||||||
|
margin: 0;
|
||||||
|
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
|
||||||
|
font-size: 1rem;
|
||||||
|
font-weight: 400;
|
||||||
|
line-height: 1.5;
|
||||||
|
color: #212529;
|
||||||
|
text-align: left;
|
||||||
|
background-color: #fff;
|
||||||
|
}
|
||||||
|
|
||||||
|
[tabindex="-1"]:focus {
|
||||||
|
outline: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
hr {
|
||||||
|
box-sizing: content-box;
|
||||||
|
height: 0;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1, h2, h3, h4, h5, h6 {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0.5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
p {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
abbr[title],
|
||||||
|
abbr[data-original-title] {
|
||||||
|
text-decoration: underline;
|
||||||
|
-webkit-text-decoration: underline dotted;
|
||||||
|
text-decoration: underline dotted;
|
||||||
|
cursor: help;
|
||||||
|
border-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
address {
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
font-style: normal;
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol,
|
||||||
|
ul,
|
||||||
|
dl {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol ol,
|
||||||
|
ul ul,
|
||||||
|
ol ul,
|
||||||
|
ul ol {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dt {
|
||||||
|
font-weight: 700;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd {
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
margin-left: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
blockquote {
|
||||||
|
margin: 0 0 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
dfn {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
b,
|
||||||
|
strong {
|
||||||
|
font-weight: bolder;
|
||||||
|
}
|
||||||
|
|
||||||
|
small {
|
||||||
|
font-size: 80%;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub,
|
||||||
|
sup {
|
||||||
|
position: relative;
|
||||||
|
font-size: 75%;
|
||||||
|
line-height: 0;
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
sub {
|
||||||
|
bottom: -.25em;
|
||||||
|
}
|
||||||
|
|
||||||
|
sup {
|
||||||
|
top: -.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
a {
|
||||||
|
color: #007bff;
|
||||||
|
text-decoration: none;
|
||||||
|
background-color: transparent;
|
||||||
|
-webkit-text-decoration-skip: objects;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:hover {
|
||||||
|
color: #0056b3;
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:not([href]):not([tabindex]) {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:not([href]):not([tabindex]):hover, a:not([href]):not([tabindex]):focus {
|
||||||
|
color: inherit;
|
||||||
|
text-decoration: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
a:not([href]):not([tabindex]):focus {
|
||||||
|
outline: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre,
|
||||||
|
code,
|
||||||
|
kbd,
|
||||||
|
samp {
|
||||||
|
font-family: monospace, monospace;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
pre {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 1rem;
|
||||||
|
overflow: auto;
|
||||||
|
-ms-overflow-style: scrollbar;
|
||||||
|
}
|
||||||
|
|
||||||
|
figure {
|
||||||
|
margin: 0 0 1rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
img {
|
||||||
|
vertical-align: middle;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
svg:not(:root) {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
table {
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
caption {
|
||||||
|
padding-top: 0.75rem;
|
||||||
|
padding-bottom: 0.75rem;
|
||||||
|
color: #6c757d;
|
||||||
|
text-align: left;
|
||||||
|
caption-side: bottom;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
text-align: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
label {
|
||||||
|
display: inline-block;
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
button {
|
||||||
|
border-radius: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
button:focus {
|
||||||
|
outline: 1px dotted;
|
||||||
|
outline: 5px auto -webkit-focus-ring-color;
|
||||||
|
}
|
||||||
|
|
||||||
|
input,
|
||||||
|
button,
|
||||||
|
select,
|
||||||
|
optgroup,
|
||||||
|
textarea {
|
||||||
|
margin: 0;
|
||||||
|
font-family: inherit;
|
||||||
|
font-size: inherit;
|
||||||
|
line-height: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
input {
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
select {
|
||||||
|
text-transform: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
button,
|
||||||
|
html [type="button"],
|
||||||
|
[type="reset"],
|
||||||
|
[type="submit"] {
|
||||||
|
-webkit-appearance: button;
|
||||||
|
}
|
||||||
|
|
||||||
|
button::-moz-focus-inner,
|
||||||
|
[type="button"]::-moz-focus-inner,
|
||||||
|
[type="reset"]::-moz-focus-inner,
|
||||||
|
[type="submit"]::-moz-focus-inner {
|
||||||
|
padding: 0;
|
||||||
|
border-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="radio"],
|
||||||
|
input[type="checkbox"] {
|
||||||
|
box-sizing: border-box;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
input[type="date"],
|
||||||
|
input[type="time"],
|
||||||
|
input[type="datetime-local"],
|
||||||
|
input[type="month"] {
|
||||||
|
-webkit-appearance: listbox;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
overflow: auto;
|
||||||
|
resize: vertical;
|
||||||
|
}
|
||||||
|
|
||||||
|
fieldset {
|
||||||
|
min-width: 0;
|
||||||
|
padding: 0;
|
||||||
|
margin: 0;
|
||||||
|
border: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
legend {
|
||||||
|
display: block;
|
||||||
|
width: 100%;
|
||||||
|
max-width: 100%;
|
||||||
|
padding: 0;
|
||||||
|
margin-bottom: .5rem;
|
||||||
|
font-size: 1.5rem;
|
||||||
|
line-height: inherit;
|
||||||
|
color: inherit;
|
||||||
|
white-space: normal;
|
||||||
|
}
|
||||||
|
|
||||||
|
progress {
|
||||||
|
vertical-align: baseline;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="number"]::-webkit-inner-spin-button,
|
||||||
|
[type="number"]::-webkit-outer-spin-button {
|
||||||
|
height: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="search"] {
|
||||||
|
outline-offset: -2px;
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
[type="search"]::-webkit-search-cancel-button,
|
||||||
|
[type="search"]::-webkit-search-decoration {
|
||||||
|
-webkit-appearance: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
::-webkit-file-upload-button {
|
||||||
|
font: inherit;
|
||||||
|
-webkit-appearance: button;
|
||||||
|
}
|
||||||
|
|
||||||
|
output {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
summary {
|
||||||
|
display: list-item;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
template {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
[hidden] {
|
||||||
|
display: none !important;
|
||||||
|
}
|
||||||
|
/*# sourceMappingURL=bootstrap-reboot.css.map */
|
||||||
1
sources/css/lib/bootstrap/bootstrap-reboot.css.map
Normal file
1
sources/css/lib/bootstrap/bootstrap-reboot.css.map
Normal file
File diff suppressed because one or more lines are too long
8
sources/css/lib/bootstrap/bootstrap-reboot.min.css
vendored
Normal file
8
sources/css/lib/bootstrap/bootstrap-reboot.min.css
vendored
Normal file
@@ -0,0 +1,8 @@
|
|||||||
|
/*!
|
||||||
|
* Bootstrap Reboot v4.0.0 (https://getbootstrap.com)
|
||||||
|
* Copyright 2011-2018 The Bootstrap Authors
|
||||||
|
* Copyright 2011-2018 Twitter, Inc.
|
||||||
|
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
|
||||||
|
* Forked from Normalize.css, licensed MIT (https://github.com/necolas/normalize.css/blob/master/LICENSE.md)
|
||||||
|
*/*,::after,::before{box-sizing:border-box}html{font-family:sans-serif;line-height:1.15;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;-ms-overflow-style:scrollbar;-webkit-tap-highlight-color:transparent}@-ms-viewport{width:device-width}article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}body{margin:0;font-family:-apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,"Helvetica Neue",Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji","Segoe UI Symbol";font-size:1rem;font-weight:400;line-height:1.5;color:#212529;text-align:left;background-color:#fff}[tabindex="-1"]:focus{outline:0!important}hr{box-sizing:content-box;height:0;overflow:visible}h1,h2,h3,h4,h5,h6{margin-top:0;margin-bottom:.5rem}p{margin-top:0;margin-bottom:1rem}abbr[data-original-title],abbr[title]{text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted;cursor:help;border-bottom:0}address{margin-bottom:1rem;font-style:normal;line-height:inherit}dl,ol,ul{margin-top:0;margin-bottom:1rem}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}dt{font-weight:700}dd{margin-bottom:.5rem;margin-left:0}blockquote{margin:0 0 1rem}dfn{font-style:italic}b,strong{font-weight:bolder}small{font-size:80%}sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}a{color:#007bff;text-decoration:none;background-color:transparent;-webkit-text-decoration-skip:objects}a:hover{color:#0056b3;text-decoration:underline}a:not([href]):not([tabindex]){color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus,a:not([href]):not([tabindex]):hover{color:inherit;text-decoration:none}a:not([href]):not([tabindex]):focus{outline:0}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}pre{margin-top:0;margin-bottom:1rem;overflow:auto;-ms-overflow-style:scrollbar}figure{margin:0 0 1rem}img{vertical-align:middle;border-style:none}svg:not(:root){overflow:hidden}table{border-collapse:collapse}caption{padding-top:.75rem;padding-bottom:.75rem;color:#6c757d;text-align:left;caption-side:bottom}th{text-align:inherit}label{display:inline-block;margin-bottom:.5rem}button{border-radius:0}button:focus{outline:1px dotted;outline:5px auto -webkit-focus-ring-color}button,input,optgroup,select,textarea{margin:0;font-family:inherit;font-size:inherit;line-height:inherit}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{padding:0;border-style:none}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=date],input[type=datetime-local],input[type=month],input[type=time]{-webkit-appearance:listbox}textarea{overflow:auto;resize:vertical}fieldset{min-width:0;padding:0;margin:0;border:0}legend{display:block;width:100%;max-width:100%;padding:0;margin-bottom:.5rem;font-size:1.5rem;line-height:inherit;color:inherit;white-space:normal}progress{vertical-align:baseline}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{outline-offset:-2px;-webkit-appearance:none}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{font:inherit;-webkit-appearance:button}output{display:inline-block}summary{display:list-item;cursor:pointer}template{display:none}[hidden]{display:none!important}
|
||||||
|
/*# sourceMappingURL=bootstrap-reboot.min.css.map */
|
||||||
1
sources/css/lib/bootstrap/bootstrap-reboot.min.css.map
Normal file
1
sources/css/lib/bootstrap/bootstrap-reboot.min.css.map
Normal file
File diff suppressed because one or more lines are too long
8975
sources/css/lib/bootstrap/bootstrap.css
vendored
Normal file
8975
sources/css/lib/bootstrap/bootstrap.css
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
sources/css/lib/bootstrap/bootstrap.css.map
Normal file
1
sources/css/lib/bootstrap/bootstrap.css.map
Normal file
File diff suppressed because one or more lines are too long
7
sources/css/lib/bootstrap/bootstrap.min.css
vendored
Normal file
7
sources/css/lib/bootstrap/bootstrap.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
1
sources/css/lib/bootstrap/bootstrap.min.css.map
Normal file
1
sources/css/lib/bootstrap/bootstrap.min.css.map
Normal file
File diff suppressed because one or more lines are too long
4
sources/css/lib/bootstrap/font-awesome.min.css
vendored
Normal file
4
sources/css/lib/bootstrap/font-awesome.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
4
sources/css/lib/font-awesome/font-awesome.min.css
vendored
Normal file
4
sources/css/lib/font-awesome/font-awesome.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
6
sources/frontend/default.php
Normal file
6
sources/frontend/default.php
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
<h1>Template</h1>
|
||||||
|
|
||||||
|
<div class="bg-<?php echo $colorThree; ?> container mr-sm-2" >
|
||||||
|
Hier ist einiges an Inhalt
|
||||||
|
|
||||||
|
</div>
|
||||||
5
sources/frontend/structure/footer.php
Normal file
5
sources/frontend/structure/footer.php
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
<footer class="footer bg-<?php echo $colorOne; ?>">
|
||||||
|
<span class="text-<?php echo $colorText; ?>">
|
||||||
|
Style v.3.0.0
|
||||||
|
</span>
|
||||||
|
</footer>
|
||||||
65
sources/frontend/structure/login.php
Normal file
65
sources/frontend/structure/login.php
Normal file
@@ -0,0 +1,65 @@
|
|||||||
|
<?php
|
||||||
|
#=========================
|
||||||
|
#
|
||||||
|
# name: login.php
|
||||||
|
# version: 2.1.0
|
||||||
|
# from: 2021-01-23
|
||||||
|
# developer: 4nima
|
||||||
|
# tested with: nginx, php7
|
||||||
|
# requirements: php, bootstrap, jQuery, ajax
|
||||||
|
#
|
||||||
|
#=========================
|
||||||
|
# login form
|
||||||
|
#
|
||||||
|
#
|
||||||
|
#=========================
|
||||||
|
|
||||||
|
if (isset($_COOKIE['uid'])) {
|
||||||
|
} elseif (isset($_SESSION['uid'])) {
|
||||||
|
echo '
|
||||||
|
<div class="dropdown">
|
||||||
|
<button class="btn btn-'.$colorTwo.' dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
'.$acc->username.'
|
||||||
|
</button>
|
||||||
|
<div class="dropdown-menu" aria-labelledby="login" style="right: 0; left: auto; width: 250px;">
|
||||||
|
<h6 class="dropdown-header">Seiten Login</h6>
|
||||||
|
<a class="dropdown-item" href="?logout">Ausloggen</a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
';
|
||||||
|
|
||||||
|
} else {
|
||||||
|
echo '
|
||||||
|
<div class="dropdown">
|
||||||
|
<button class="btn btn-'.$colorTwo.' dropdown-toggle" type="button" id="login" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
|
||||||
|
Login
|
||||||
|
</button>
|
||||||
|
<div class="dropdown-menu" aria-labelledby="login" style="right: 0; left: auto; width: 250px;">
|
||||||
|
<h6 class="dropdown-header">Seiten Login</h6>
|
||||||
|
<form class="px-4 py-3" action="?login" method="POST" id="loginform">
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="text" name="user" class="form-control" id="username" placeholder="Benutzername">
|
||||||
|
</div>
|
||||||
|
<div class="form-group">
|
||||||
|
<input type="password" name="pass" class="form-control" id="password" placeholder="Passwort">
|
||||||
|
</div>
|
||||||
|
<div class="form-check">
|
||||||
|
<input type="checkbox" name="stay" class="form-check-input" id="staylogin">
|
||||||
|
<label class="form-check-label" for="staylogin">
|
||||||
|
Login merken
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<button type="submit" class="btn btn-'.$colorSuccess.'">Anmelden</button>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
';
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
<!-- <form class="form-inline my-2 my-lg-0">
|
||||||
|
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
|
||||||
|
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
|
||||||
|
</form> -->
|
||||||
45
sources/frontend/structure/nav.php
Normal file
45
sources/frontend/structure/nav.php
Normal file
@@ -0,0 +1,45 @@
|
|||||||
|
<?php
|
||||||
|
#=========================
|
||||||
|
#
|
||||||
|
# name: nav.php
|
||||||
|
# version: 2.1.0
|
||||||
|
# from: 2021-01-23
|
||||||
|
# developer: 4nima
|
||||||
|
# tested with: nginx, php7
|
||||||
|
# requirements: php, bootstrap, jQuery, ajax
|
||||||
|
#
|
||||||
|
#=========================
|
||||||
|
# auto genereated navbar
|
||||||
|
# config links: /sources/sides.php
|
||||||
|
#
|
||||||
|
#=========================
|
||||||
|
?>
|
||||||
|
|
||||||
|
<nav class="navbar navbar-expand-lg navbar-<?php echo $navBarSytle; ?> bg-<?php echo $colorOne; ?> fixed-top">
|
||||||
|
<a class="navbar-brand" href="/">
|
||||||
|
<img src="<?php echo $imgPath; ?>logo.png" width="30" height="30" class="d-inline-block align-top" alt="">
|
||||||
|
<?php echo $webname; ?>
|
||||||
|
</a>
|
||||||
|
<a class="navbar-toggler" href="#">Home</a>
|
||||||
|
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navContent" aria-controls="navContent" aria-expanded="false" aria-label="Toggle navigation">
|
||||||
|
<i class="navbar-toggler-icon"></i>
|
||||||
|
</button>
|
||||||
|
|
||||||
|
<div class="collapse navbar-collapse" id="navContent">
|
||||||
|
<ul class="navbar-nav mr-auto">
|
||||||
|
<?php gennav($navbar); ?>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
<?php
|
||||||
|
if ($login == true) {
|
||||||
|
?>
|
||||||
|
<div id="userMenu">
|
||||||
|
<?php include($structurePath.'login.php'); ?>
|
||||||
|
</div>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</nav>
|
||||||
BIN
sources/img/favicon.ico
Normal file
BIN
sources/img/favicon.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
BIN
sources/img/logo.png
Normal file
BIN
sources/img/logo.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 1009 B |
15
sources/js/custom.js
Normal file
15
sources/js/custom.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
// #--------------------#
|
||||||
|
// #----- by 4nima -----#
|
||||||
|
// #----- v. 1.0.0 -----#
|
||||||
|
// #-- coding@4nima.de -#
|
||||||
|
// #--------------------#
|
||||||
|
|
||||||
|
// Direkt mit laden
|
||||||
|
|
||||||
|
// Erst laden wenn rest geladen ist
|
||||||
|
$( function() {
|
||||||
|
console.log("Ready");
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
6
sources/js/functions.js
Normal file
6
sources/js/functions.js
Normal file
@@ -0,0 +1,6 @@
|
|||||||
|
// #--------------------#
|
||||||
|
// #----- by 4nima -----#
|
||||||
|
// #----- v. 1.0.0 -----#
|
||||||
|
// #-- coding@4nima.de -#
|
||||||
|
// #--------------------#
|
||||||
|
|
||||||
6328
sources/js/lib/bootstrap/bootstrap.bundle.js
vendored
Normal file
6328
sources/js/lib/bootstrap/bootstrap.bundle.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
sources/js/lib/bootstrap/bootstrap.bundle.js.map
Normal file
1
sources/js/lib/bootstrap/bootstrap.bundle.js.map
Normal file
File diff suppressed because one or more lines are too long
7
sources/js/lib/bootstrap/bootstrap.bundle.min.js
vendored
Normal file
7
sources/js/lib/bootstrap/bootstrap.bundle.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
sources/js/lib/bootstrap/bootstrap.bundle.min.js.map
Normal file
1
sources/js/lib/bootstrap/bootstrap.bundle.min.js.map
Normal file
File diff suppressed because one or more lines are too long
3894
sources/js/lib/bootstrap/bootstrap.js
vendored
Normal file
3894
sources/js/lib/bootstrap/bootstrap.js
vendored
Normal file
File diff suppressed because it is too large
Load Diff
1
sources/js/lib/bootstrap/bootstrap.js.map
Normal file
1
sources/js/lib/bootstrap/bootstrap.js.map
Normal file
File diff suppressed because one or more lines are too long
7
sources/js/lib/bootstrap/bootstrap.min.js
vendored
Normal file
7
sources/js/lib/bootstrap/bootstrap.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
1
sources/js/lib/bootstrap/bootstrap.min.js.map
Normal file
1
sources/js/lib/bootstrap/bootstrap.min.js.map
Normal file
File diff suppressed because one or more lines are too long
2
sources/js/lib/jquery.js
vendored
Normal file
2
sources/js/lib/jquery.js
vendored
Normal file
File diff suppressed because one or more lines are too long
47
sources/sides.php
Normal file
47
sources/sides.php
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
<?php
|
||||||
|
#=========================
|
||||||
|
#
|
||||||
|
# name: sides.php
|
||||||
|
# version: 2.1.0
|
||||||
|
# from: 2021-01-23
|
||||||
|
# developer: 4nima
|
||||||
|
# tested with: nginx, php7
|
||||||
|
# requirements: php, jQuery, ajax
|
||||||
|
#
|
||||||
|
#=========================
|
||||||
|
# sides control
|
||||||
|
# navbar control
|
||||||
|
#
|
||||||
|
#=========================
|
||||||
|
|
||||||
|
#> Side control
|
||||||
|
if (isset($_GET['page1'])) {
|
||||||
|
$side = 'page1.php';
|
||||||
|
$sideTitle = 'Page1';
|
||||||
|
} elseif (isset($_GET['page2'])) {
|
||||||
|
$side = 'page2.php';
|
||||||
|
$sideTitle = 'Page2';
|
||||||
|
} else {
|
||||||
|
$side = 'default.php';
|
||||||
|
$sideTitle = 'TITLE';
|
||||||
|
}
|
||||||
|
|
||||||
|
#> Navbar control
|
||||||
|
$navbar = array(
|
||||||
|
array("Link1", "https://"),
|
||||||
|
array("Link2", "https://"),
|
||||||
|
array("Dropdown1", array(
|
||||||
|
array("Dlink1", "https://"),
|
||||||
|
array("Dlink2", "https://"),
|
||||||
|
array("---"),
|
||||||
|
array("Dlink3", "https://")
|
||||||
|
)
|
||||||
|
),
|
||||||
|
array("Dropdown2", array(
|
||||||
|
array("Dlink4", "https://"),
|
||||||
|
array("Dlink5", "https://")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
|
?>
|
||||||
Reference in New Issue
Block a user