commit 36826f48a871cfbebf33ed78dbc8e300aedc99f8 Author: Furentes Date: Thu May 9 13:33:04 2019 +0200 Initial commit Base site creation diff --git a/css/main.css b/css/main.css new file mode 100644 index 0000000..5a6ca53 --- /dev/null +++ b/css/main.css @@ -0,0 +1,340 @@ +/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ +/* Document + ========================================================================== */ +/** + * 1. Correct the line height in all browsers. + * 2. Prevent adjustments of font size after orientation changes in iOS. + */ +html { + line-height: 1.15; + /* 1 */ + -webkit-text-size-adjust: 100%; + /* 2 */ +} + +/* Sections + ========================================================================== */ +/** + * Remove the margin in all browsers. + */ +body { + margin: 0; +} + +/** + * Render the `main` element consistently in IE. + */ +main { + display: block; +} + +/** + * Correct the font size and margin on `h1` elements within `section` and + * `article` contexts in Chrome, Firefox, and Safari. + */ +h1 { + font-size: 2em; + margin: 0.67em 0; +} + +/* Grouping content + ========================================================================== */ +/** + * 1. Add the correct box sizing in Firefox. + * 2. Show the overflow in Edge and IE. + */ +hr { + box-sizing: content-box; + /* 1 */ + height: 0; + /* 1 */ + overflow: visible; + /* 2 */ +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +pre { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/* Text-level semantics + ========================================================================== */ +/** + * Remove the gray background on active links in IE 10. + */ +a { + background-color: transparent; +} + +/** + * 1. Remove the bottom border in Chrome 57- + * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. + */ +abbr[title] { + border-bottom: none; + /* 1 */ + text-decoration: underline; + /* 2 */ + text-decoration: underline dotted; + /* 2 */ +} + +/** + * Add the correct font weight in Chrome, Edge, and Safari. + */ +b, +strong { + font-weight: bolder; +} + +/** + * 1. Correct the inheritance and scaling of font size in all browsers. + * 2. Correct the odd `em` font sizing in all browsers. + */ +code, +kbd, +samp { + font-family: monospace, monospace; + /* 1 */ + font-size: 1em; + /* 2 */ +} + +/** + * Add the correct font size in all browsers. + */ +small { + font-size: 80%; +} + +/** + * Prevent `sub` and `sup` elements from affecting the line height in + * all browsers. + */ +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sub { + bottom: -0.25em; +} + +sup { + top: -0.5em; +} + +/* Embedded content + ========================================================================== */ +/** + * Remove the border on images inside links in IE 10. + */ +img { + border-style: none; +} + +/* Forms + ========================================================================== */ +/** + * 1. Change the font styles in all browsers. + * 2. Remove the margin in Firefox and Safari. + */ +button, +input, +optgroup, +select, +textarea { + font-family: inherit; + /* 1 */ + font-size: 100%; + /* 1 */ + line-height: 1.15; + /* 1 */ + margin: 0; + /* 2 */ +} + +/** + * Show the overflow in IE. + * 1. Show the overflow in Edge. + */ +button, +input { + /* 1 */ + overflow: visible; +} + +/** + * Remove the inheritance of text transform in Edge, Firefox, and IE. + * 1. Remove the inheritance of text transform in Firefox. + */ +button, +select { + /* 1 */ + text-transform: none; +} + +/** + * Correct the inability to style clickable types in iOS and Safari. + */ +button, +[type=button], +[type=reset], +[type=submit] { + -webkit-appearance: button; +} + +/** + * Remove the inner border and padding in Firefox. + */ +button::-moz-focus-inner, +[type=button]::-moz-focus-inner, +[type=reset]::-moz-focus-inner, +[type=submit]::-moz-focus-inner { + border-style: none; + padding: 0; +} + +/** + * Restore the focus styles unset by the previous rule. + */ +button:-moz-focusring, +[type=button]:-moz-focusring, +[type=reset]:-moz-focusring, +[type=submit]:-moz-focusring { + outline: 1px dotted ButtonText; +} + +/** + * Correct the padding in Firefox. + */ +fieldset { + padding: 0.35em 0.75em 0.625em; +} + +/** + * 1. Correct the text wrapping in Edge and IE. + * 2. Correct the color inheritance from `fieldset` elements in IE. + * 3. Remove the padding so developers are not caught out when they zero out + * `fieldset` elements in all browsers. + */ +legend { + box-sizing: border-box; + /* 1 */ + color: inherit; + /* 2 */ + display: table; + /* 1 */ + max-width: 100%; + /* 1 */ + padding: 0; + /* 3 */ + white-space: normal; + /* 1 */ +} + +/** + * Add the correct vertical alignment in Chrome, Firefox, and Opera. + */ +progress { + vertical-align: baseline; +} + +/** + * Remove the default vertical scrollbar in IE 10+. + */ +textarea { + overflow: auto; +} + +/** + * 1. Add the correct box sizing in IE 10. + * 2. Remove the padding in IE 10. + */ +[type=checkbox], +[type=radio] { + box-sizing: border-box; + /* 1 */ + padding: 0; + /* 2 */ +} + +/** + * Correct the cursor style of increment and decrement buttons in Chrome. + */ +[type=number]::-webkit-inner-spin-button, +[type=number]::-webkit-outer-spin-button { + height: auto; +} + +/** + * 1. Correct the odd appearance in Chrome and Safari. + * 2. Correct the outline style in Safari. + */ +[type=search] { + -webkit-appearance: textfield; + /* 1 */ + outline-offset: -2px; + /* 2 */ +} + +/** + * Remove the inner padding in Chrome and Safari on macOS. + */ +[type=search]::-webkit-search-decoration { + -webkit-appearance: none; +} + +/** + * 1. Correct the inability to style clickable types in iOS and Safari. + * 2. Change font properties to `inherit` in Safari. + */ +::-webkit-file-upload-button { + -webkit-appearance: button; + /* 1 */ + font: inherit; + /* 2 */ +} + +/* Interactive + ========================================================================== */ +/* + * Add the correct display in Edge, IE 10+, and Firefox. + */ +details { + display: block; +} + +/* + * Add the correct display in all browsers. + */ +summary { + display: list-item; +} + +/* Misc + ========================================================================== */ +/** + * Add the correct display in IE 10+. + */ +template { + display: none; +} + +/** + * Add the correct display in IE 10. + */ +[hidden] { + display: none; +} + +/*# sourceMappingURL=main.css.map */ diff --git a/css/main.css.map b/css/main.css.map new file mode 100644 index 0000000..5c376f4 --- /dev/null +++ b/css/main.css.map @@ -0,0 +1 @@ +{"version":3,"sourceRoot":"","sources":["../scss/_normalize.scss"],"names":[],"mappings":"AAAA;AAEA;AAAA;AAGA;AAAA;AAAA;AAAA;AAKC;EACC;AAAmB;EACnB;AAAgC;;;AAGlC;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;EACA;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;EACE;AAAyB;EACzB;AAAW;EACX;AAAmB;;;AAGrB;AAAA;AAAA;AAAA;AAKA;EACE;AAAmC;EACnC;AAAgB;;;AAGlB;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;AAAqB;EACrB;AAA4B;EAC5B;AAAmC;;;AAGrC;AAAA;AAAA;AAIA;AAAA;EAEE;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;EAGE;AAAmC;EACnC;AAAgB;;;AAGlB;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;EAEE;EACA;EACA;EACA;;;AAGF;EACE;;;AAGF;EACE;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAAA;AAKA;AAAA;AAAA;AAAA;AAAA;EAKE;AAAsB;EACtB;AAAiB;EACjB;AAAmB;EACnB;AAAW;;;AAGb;AAAA;AAAA;AAAA;AAKA;AAAA;AACQ;EACN;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;AACS;EACP;;;AAGF;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;;;AAGF;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;EACA;;;AAGF;AAAA;AAAA;AAIA;AAAA;AAAA;AAAA;EAIE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAAA;AAAA;AAOA;EACE;AAAwB;EACxB;AAAgB;EAChB;AAAgB;EAChB;AAAiB;EACjB;AAAY;EACZ;AAAqB;;;AAGvB;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;AAAA;EAEE;AAAwB;EACxB;AAAY;;;AAGd;AAAA;AAAA;AAIA;AAAA;EAEE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;AAA+B;EAC/B;AAAsB;;;AAGxB;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAAA;AAKA;EACE;AAA4B;EAC5B;AAAe;;;AAGjB;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAGA;AAAA;AAAA;AAIA;EACE;;;AAGF;AAAA;AAAA;AAIA;EACE","file":"main.css"} \ No newline at end of file diff --git a/index.php b/index.php new file mode 100644 index 0000000..97e4645 --- /dev/null +++ b/index.php @@ -0,0 +1,16 @@ + + + + + + + + Home - <?= (defined("SITE_TITLE")) ? SITE_TITLE : 'A Bloggr Site' ?> + + + + + diff --git a/lib/Bloggr/auth.php b/lib/Bloggr/auth.php new file mode 100644 index 0000000..4ccfd35 --- /dev/null +++ b/lib/Bloggr/auth.php @@ -0,0 +1,139 @@ +setAttribute(\PDO::ATTR_DEFAULT_FETCH_MODE, \PDO::FETCH_ASSOC); + $this->pdo = $pdo; + } + public function register($username, $email, $password, $role = 0) { + $errors = array(); + $username = trim(filter_var($username, FILTER_SANITIZE_STRING)); + $email = filter_var($email, FILTER_VALIDATE_EMAIL); + $password = filter_var($password, FILTER_SANITIZE_STRING); + $timestamp = time(); + if (preg_replace('/\s+/', '', $username) !== $username) { + array_push($errors, 'Your username may not contain whitespaces!'); + } + if (strlen(trim($username)) < 3) { + array_push($errors, 'Username is too short! Min. 3'); + } + if (strlen(trim($username)) > 16) { + array_push($errors, 'Username is too long! Max. 16'); + } + if (!$email) { + array_push($errors, 'Enter a valid email!'); + } + if (strlen(trim($password)) < 8) { + array_push($errors, 'Password is too short! Min 8'); + } + if (count($errors) > 0) { + return $errors; + } + try { + $s = $this->pdo->prepare("SELECT username, email FROM users WHERE username = :username OR email = :email;"); + $s->execute(array( + ':username' => $username, + ':email' => $email + )); + while ($row = $s->fetch()) { + if ($row['username'] === $username) { + array_push($errors, 'Username already exists!'); + } + if ($row['email'] === $email) { + array_push($errors, 'Email already exists!'); + } + } + } catch (\PDOException $e) { + array_push($errors, 'Something went wrong!'); + } + if (count($errors) > 0) { + return $errors; + } + try { + $s = $this->pdo->prepare("INSERT INTO users (username, email, password, registered, roles_mask) VALUES(:username, :email, :password, :registered, :roles_mask);"); + $r = $s->execute(array( + ':username' => $username, + ':email' => $email, + ':password' => password_hash($password, PASSWORD_DEFAULT), + ':registered' => $timestamp, + ':roles_mask' => $role + )); + if(!$r) { + array_push($errors, 'Something went wrong!'); + } + } catch (\PDOException $e) { + array_push($errors, 'Something went wrong!'); + } + if (count($errors) > 0) { + return $errors; + } + return true; + } + public function login($user, $password) { + $errors = array(); + $password = filter_var($password, FILTER_SANITIZE_STRING); + $timestamp = time(); + if (!$user || $user === '' || preg_replace('/\s+/', '', $user) !== $user) { + array_push($errors, 'Please enter a username or email!'); + } + if (!$password || $password === '') { + array_push($errors, 'Please enter a password!'); + } + if (count($errors) > 0) { + return $errors; + } + $userId = 0; + try { + $s = $this->pdo->prepare("SELECT id, username, email, password FROM users WHERE username = :user OR email = :user LIMIT 1;"); + $s->execute(array( + ':user' => $user + )); + if ($s->rowCount() <= 0) { + array_push($errors, 'Wrong username/email or password!'); + } else { + while ($row = $s->fetch()) { + if (!password_verify($password, $row['password'])) { + array_push($errors, 'Wrong username/email or password!'); + } + $userId = $row['id']; + } + } + } catch (\PDOException $e) { + array_push($errors, 'Something went wrong!'); + } + if (count($errors) > 0) { + return $errors; + } + try { + $s = $this->pdo->prepare("UPDATE users SET last_login = :lastlogin WHERE id = :id;"); + $r = $s->execute(array( + ':lastlogin' => $timestamp, + ':id' => $userId + )); + if(!$r) { + array_push($errors, 'Something went wrong!'); + } + } catch (\PDOException $e) { + array_push($errors, 'Something went wrong!'); + } + if (count($errors) > 0) { + return $errors; + } + $_SESSION['id'] = $userId; + return true; + } + public function isLoggedIn() { + return isset($_SESSION['id']); + } + public function logout() { + $_SESSION['id'] = ''; + unset($_SESSION['id']); + session_unset(); + return true; + } +} +?> \ No newline at end of file diff --git a/lib/autoload.php b/lib/autoload.php new file mode 100644 index 0000000..f573460 --- /dev/null +++ b/lib/autoload.php @@ -0,0 +1,25 @@ +exec($sql); + array_push($successArray, 'Database setup complete...'); + } catch (PDOException $ex) { + array_push($error, $ex->getMessage()); + } + } + + if(count($error) <= 0) { + $auth = new \Bloggr\Auth($pdo); + + $register = $auth->register($user, $email, $pass, 1); + if (is_array($register)) { + foreach($register as $regErr) { + array_push($error, $regErr); + } + } else { + array_push($successArray, 'Admin setup complete...'); + $success = true; + $viewSubmit = true; + } + } + } catch (PDOException $ex) { + array_push($error, $ex->getMessage()); + } + +} +?> + + + + + + + Setup - Bloggr + + +

+ '.$err.'
'; + } + foreach($successArray as $succ) { + echo ''.$succ.'
'; + } + ?> +

+
+
Title + +

+

Database info

+

+ + +

+

+ + +

+

+ + +

+

+ + +

+
+

Create administrator

+

+ + +

+

+ + +

+

+ + +

+
+

+ + ' : '' ?> + ' : '' ?> +

+
+ +