From 98884039358ad6ffd50ac5f4eac4e5a093ca6d03 Mon Sep 17 00:00:00 2001 From: Bryan Pedini Date: Sat, 26 Jan 2019 23:34:48 +0100 Subject: [PATCH] first version of the website, it works as intended. --- config.php | 11 ++++ errors/404.html | 11 ++++ functions.php | 27 ++++++++ includes/redirect.html | 22 +++++++ index.php | 143 +++++++++++++++++++++++++++++++++++++++++ js/insertnew.js | 32 +++++++++ js/login.js | 28 ++++++++ js/sha512.js | 132 +++++++++++++++++++++++++++++++++++++ js/sha512.min.js | 1 + 9 files changed, 407 insertions(+) create mode 100644 config.php create mode 100644 errors/404.html create mode 100644 functions.php create mode 100644 includes/redirect.html create mode 100644 index.php create mode 100644 js/insertnew.js create mode 100644 js/login.js create mode 100644 js/sha512.js create mode 100644 js/sha512.min.js diff --git a/config.php b/config.php new file mode 100644 index 0000000..b4dfadc --- /dev/null +++ b/config.php @@ -0,0 +1,11 @@ + [ + 'host' => '127.0.0.1', + 'port' => 3306, + 'username' => 'database_user', + 'password' => 'database_password', + 'name' => 'my_database_name', + ], + ]; +?> diff --git a/errors/404.html b/errors/404.html new file mode 100644 index 0000000..70bc758 --- /dev/null +++ b/errors/404.html @@ -0,0 +1,11 @@ + + + + Oops, you're lost! + + +
+

404: Page not found!

+
+ + \ No newline at end of file diff --git a/functions.php b/functions.php new file mode 100644 index 0000000..f99cc20 --- /dev/null +++ b/functions.php @@ -0,0 +1,27 @@ +connect_errno ) { + die ( "Database connection failed." ); + } + return $connection; + } + function db_prepare ( MySQLi $connection, string $query ) { + if ( ! ( $statement = $connection -> prepare ( $query ) ) ) { + die ( "Prepare failed: (" . $connection->errno . ") " . $connection->error ); + } + return $statement; + } + function db_bind ( MySQLi_stmt $statement, array $params ) { + if ( ! call_user_func_array ( array ( $statement, "bind_param" ), array_merge ( $params [ 0 ], $params [ 1 ] ) ) ) { + die ( "Binding parameters failed: (" . $statement->errno . ") " . $statement->error ); + } + } + function db_execute ( $statement ) { + if ( ! $statement->execute ( ) ) { + die ( "Execute failed: (" . $statement->errno . ") " . $statement->error ); + } + } +?> diff --git a/includes/redirect.html b/includes/redirect.html new file mode 100644 index 0000000..82def3e --- /dev/null +++ b/includes/redirect.html @@ -0,0 +1,22 @@ + + + + Redirect in 5 seconds + + +
+

You will be redirected to ... in 5

+
+ + + diff --git a/index.php b/index.php new file mode 100644 index 0000000..4a61cf5 --- /dev/null +++ b/index.php @@ -0,0 +1,143 @@ +get_result ( ); + $row = $result->fetch_assoc ( ); + if ( ! $row ) { + include ( 'errors/404.html' ); + } + else { + include ( 'includes/redirect.html' ); + echo ( '' ); + } + } + elseif ( isset ( $_REQUEST [ 'username' ] ) && isset ( $_REQUEST [ 'password' ] ) ) { + $username = $_REQUEST [ 'username' ]; + $password = $_REQUEST [ 'password' ]; + $db_connection = db_connect ( ); + $statement = db_prepare ( $db_connection, "SELECT users.id FROM users WHERE users.username = ? AND users.password = ?" ); + $parameters = [ + [ "ss" ], + [ &$username, &$password ], + ]; + db_bind ( $statement, $parameters ); + db_execute ( $statement ); + $result = $statement->get_result ( ); + $row = $result->fetch_assoc ( ); + if ( ! $row ) { + header ( 'Content-Type: application/json' ); + $response = [ + 'status' => 401, + 'error_message' => 'Username or password not correct.', + ]; + echo ( json_encode ( $response ) ); + } + else { + $_SESSION [ 'user_id' ] = $row [ 'id' ]; + header ( 'Content-Type: application/json' ); + $response = [ + 'status' => 200, + 'message' => 'Authentication succesfully executed.', + ]; + echo ( json_encode ( $response ) ); + } + } + elseif ( isset ( $_GET [ 'logout' ] ) ) { + $_SESSION = array ( ); + session_destroy ( ); + header ( "Location: /" ); + } + else { + if ( ! isset ( $_SESSION [ 'user_id' ] ) ) { +?> + + + + BJPHoster URL Shortener | Login + + +
+
+
+
+ + + + +get_result ( ); + $row = $result->fetch_assoc ( ); + header ( 'Content-Type: application/json' ); + $response = [ + 'status' => 200, + 'message' => 'URL inserted correctly.', + 'new_id' => $row [ 'count' ], + ]; + echo ( json_encode ( $response ) ); + } + else { + $db_connection = db_connect ( ); + $statement = db_prepare ( $db_connection, "SELECT links.ID, links.URL FROM links WHERE links.created_by = " . $_SESSION [ 'user_id' ] ); + db_execute ( $statement ); + $result = $statement->get_result ( ); + $row = $result->fetch_assoc ( ); +?> + + + + BJPHoster URL Shortener | Control Panel + + + +
+" ); + } + else { + do { + echo ( "\t\t\t" . '
' . $row [ 'ID' ] . " | " . $row [ 'URL' ] . "
\n" ); + } while ( $row = $result->fetch_assoc ( ) ); + } +?> +
+ +
+
+ + + + diff --git a/js/insertnew.js b/js/insertnew.js new file mode 100644 index 0000000..719b511 --- /dev/null +++ b/js/insertnew.js @@ -0,0 +1,32 @@ +function urlinsert() { + var url = document.getElementById ( "form-url" ).value; + var xhr = new XMLHttpRequest ( ); + xhr.open ( "POST", 'index.php', true ); + xhr.onreadystatechange = function ( ) { + if ( xhr.readyState == XMLHttpRequest.DONE && xhr.status == 200 ) { + if (xhr.status == 200) { + var response = xhr.responseText; + response = JSON.parse ( response ); + if ( response [ 'status' ] == 200 ) { + document.getElementById ( "responsetext" ).innerHTML = response [ 'message' ]; + var div = document.createElement ( 'div' ); + div.innerHTML = response [ 'new_id' ] + " | " + url; + document.getElementById ( "urllist" ).appendChild ( div ); + document.getElementById ( "form-url" ).value = ""; + } + else { + document.getElementById ( "responsetext" ).innerHTML = response [ 'error_message' ]; + } + } + else { + console.log ( 'Server communication error: ' + xhr.statusText ); + } + } + } + data = new FormData ( ); + data.append('url', url); + xhr.send( data ); +} +function logout ( ) { + window.location.href = "/?logout"; +} diff --git a/js/login.js b/js/login.js new file mode 100644 index 0000000..a51cfb3 --- /dev/null +++ b/js/login.js @@ -0,0 +1,28 @@ +function login() { + var username = document.getElementById ( "form-username" ).value; + var password = document.getElementById ( "form-password" ).value; + password = SHA512 ( password ); + var xhr = new XMLHttpRequest ( ); + xhr.open ( "POST", 'index.php', true ); + xhr.onreadystatechange = function ( ) { + if ( xhr.readyState == XMLHttpRequest.DONE && xhr.status == 200 ) { + if (xhr.status == 200) { + var response = xhr.responseText; + response = JSON.parse ( response ); + if ( response [ 'status' ] == 200 ) { + window.location.href = "/"; + } + else { + document.getElementById ( "responsetext" ).innerHTML = response [ 'error_message' ]; + } + } + else { + console.log ( 'Server communication error: ' + xhr.statusText ); + } + } + } + data = new FormData ( ); + data.append('username', username); + data.append('password', password); + xhr.send( data ); +} diff --git a/js/sha512.js b/js/sha512.js new file mode 100644 index 0000000..03c2add --- /dev/null +++ b/js/sha512.js @@ -0,0 +1,132 @@ +function SHA512 ( str ) +{ + function int64 ( msint_32, lsint_32 ) { + this.highOrder = msint_32; + this.lowOrder = lsint_32; + } + var H = [ + new int64 ( 0x6a09e667, 0xf3bcc908 ), + new int64 ( 0xbb67ae85, 0x84caa73b ), + new int64 ( 0x3c6ef372, 0xfe94f82b ), + new int64 ( 0xa54ff53a, 0x5f1d36f1 ), + new int64 ( 0x510e527f, 0xade682d1 ), + new int64 ( 0x9b05688c, 0x2b3e6c1f ), + new int64 ( 0x1f83d9ab, 0xfb41bd6b ), + new int64 ( 0x5be0cd19, 0x137e2179 ) + ]; + var K = [ + new int64(0x428a2f98,0xd728ae22), + new int64(0x71374491,0x23ef65cd), + new int64(0xb5c0fbcf,0xec4d3b2f), + new int64(0xe9b5dba5,0x8189dbbc), + new int64(0x3956c25b,0xf348b538), + new int64(0x59f111f1,0xb605d019), + new int64(0x923f82a4,0xaf194f9b), + new int64(0xab1c5ed5,0xda6d8118), + new int64(0xd807aa98,0xa3030242), + new int64(0x12835b01,0x45706fbe), + new int64(0x243185be,0x4ee4b28c), + new int64(0x550c7dc3,0xd5ffb4e2), + new int64(0x72be5d74,0xf27b896f), + new int64(0x80deb1fe,0x3b1696b1), + new int64(0x9bdc06a7,0x25c71235), + new int64(0xc19bf174,0xcf692694), + new int64(0xe49b69c1,0x9ef14ad2), + new int64(0xefbe4786,0x384f25e3), + new int64(0x0fc19dc6,0x8b8cd5b5), + new int64(0x240ca1cc,0x77ac9c65), + new int64(0x2de92c6f,0x592b0275), + new int64(0x4a7484aa,0x6ea6e483), + new int64(0x5cb0a9dc,0xbd41fbd4), + new int64(0x76f988da,0x831153b5), + new int64(0x983e5152,0xee66dfab), + new int64(0xa831c66d,0x2db43210), + new int64(0xb00327c8,0x98fb213f), + new int64(0xbf597fc7,0xbeef0ee4), + new int64(0xc6e00bf3,0x3da88fc2), + new int64(0xd5a79147,0x930aa725), + new int64(0x06ca6351,0xe003826f), + new int64(0x14292967,0x0a0e6e70), + new int64(0x27b70a85,0x46d22ffc), + new int64(0x2e1b2138,0x5c26c926), + new int64(0x4d2c6dfc,0x5ac42aed), + new int64(0x53380d13,0x9d95b3df), + new int64(0x650a7354,0x8baf63de), + new int64(0x766a0abb,0x3c77b2a8), + new int64(0x81c2c92e,0x47edaee6), + new int64(0x92722c85,0x1482353b), + new int64(0xa2bfe8a1,0x4cf10364), + new int64(0xa81a664b,0xbc423001), + new int64(0xc24b8b70,0xd0f89791), + new int64(0xc76c51a3,0x0654be30), + new int64(0xd192e819,0xd6ef5218), + new int64(0xd6990624,0x5565a910), + new int64(0xf40e3585,0x5771202a), + new int64(0x106aa070,0x32bbd1b8), + new int64(0x19a4c116,0xb8d2d0c8), + new int64(0x1e376c08,0x5141ab53), + new int64(0x2748774c,0xdf8eeb99), + new int64(0x34b0bcb5,0xe19b48a8), + new int64(0x391c0cb3,0xc5c95a63), + new int64(0x4ed8aa4a,0xe3418acb), + new int64(0x5b9cca4f,0x7763e373), + new int64(0x682e6ff3,0xd6b2b8a3), + new int64(0x748f82ee,0x5defb2fc), + new int64(0x78a5636f,0x43172f60), + new int64(0x84c87814,0xa1f0ab72), + new int64(0x8cc70208,0x1a6439ec), + new int64(0x90befffa,0x23631e28), + new int64(0xa4506ceb,0xde82bde9), + new int64(0xbef9a3f7,0xb2c67915), + new int64(0xc67178f2,0xe372532b), + new int64(0xca273ece,0xea26619c), + new int64(0xd186b8c7,0x21c0c207), + new int64(0xeada7dd6,0xcde0eb1e), + new int64(0xf57d4f7f,0xee6ed178), + new int64(0x06f067aa,0x72176fba), + new int64(0x0a637dc5,0xa2c898a6), + new int64(0x113f9804,0xbef90dae), + new int64(0x1b710b35,0x131c471b), + new int64(0x28db77f5,0x23047d84), + new int64(0x32caab7b,0x40c72493), + new int64(0x3c9ebe0a,0x15c9bebc), + new int64(0x431d67c4,0x9c100d4c), + new int64(0x4cc5d4be,0xcb3e42b6), + new int64(0x597f299c,0xfc657e2a), + new int64(0x5fcb6fab,0x3ad6faec), + new int64(0x6c44198c,0x4a475817) + ]; + var W = new Array ( 64 ); + var a, b, c, d, e, f, g, h, i, j; + var T1, T2; + var charsize = 8; + function utf8_encode ( str ) { + return unescape ( encodeURIComponent ( str ) ); + } + function str2binb ( str ) { + var bin = []; + var mask = ( 1 << charsize ) - 1; + var len = str.length * charsize; + for ( var i = 0; i < len; i += charsize ) { + bin [ i >> 5 ] |= ( str.charCodeAt ( i / charsize ) &mask ) << ( 32 - charsize - ( i % 32 ) ); + } + return bin; + } + function binb2hex(binarray){var hex_tab='0123456789abcdef';var str='';var length=binarray.length*4;var srcByte;for(var i=0;i>2]>>((3-(i % 4))*8);str+=hex_tab.charAt((srcByte>>4)&0xF)+hex_tab.charAt(srcByte&0xF);} return str;} + function safe_add_2(x,y){var lsw,msw,lowOrder,highOrder;lsw=(x.lowOrder&0xFFFF)+(y.lowOrder&0xFFFF);msw=(x.lowOrder>>>16)+(y.lowOrder>>>16)+(lsw>>>16);lowOrder=((msw&0xFFFF)<<16)|(lsw&0xFFFF);lsw=(x.highOrder&0xFFFF)+(y.highOrder&0xFFFF)+(msw>>>16);msw=(x.highOrder>>>16)+(y.highOrder>>>16)+(lsw>>>16);highOrder=((msw&0xFFFF)<<16)|(lsw&0xFFFF);return new int64(highOrder,lowOrder);} + function safe_add_4(a,b,c,d){var lsw,msw,lowOrder,highOrder;lsw=(a.lowOrder&0xFFFF)+(b.lowOrder&0xFFFF)+(c.lowOrder&0xFFFF)+(d.lowOrder&0xFFFF);msw=(a.lowOrder>>>16)+(b.lowOrder>>>16)+(c.lowOrder>>>16)+(d.lowOrder>>>16)+(lsw>>>16);lowOrder=((msw&0xFFFF)<<16)|(lsw&0xFFFF);lsw=(a.highOrder&0xFFFF)+(b.highOrder&0xFFFF)+(c.highOrder&0xFFFF)+(d.highOrder&0xFFFF)+(msw>>>16);msw=(a.highOrder>>>16)+(b.highOrder>>>16)+(c.highOrder>>>16)+(d.highOrder>>>16)+(lsw>>>16);highOrder=((msw&0xFFFF)<<16)|(lsw&0xFFFF);return new int64(highOrder,lowOrder);} + function safe_add_5(a,b,c,d,e){var lsw,msw,lowOrder,highOrder;lsw=(a.lowOrder&0xFFFF)+(b.lowOrder&0xFFFF)+(c.lowOrder&0xFFFF)+(d.lowOrder&0xFFFF)+(e.lowOrder&0xFFFF);msw=(a.lowOrder>>>16)+(b.lowOrder>>>16)+(c.lowOrder>>>16)+(d.lowOrder>>>16)+(e.lowOrder>>>16)+(lsw>>>16);lowOrder=((msw&0xFFFF)<<16)|(lsw&0xFFFF);lsw=(a.highOrder&0xFFFF)+(b.highOrder&0xFFFF)+(c.highOrder&0xFFFF)+(d.highOrder&0xFFFF)+(e.highOrder&0xFFFF)+(msw>>>16);msw=(a.highOrder>>>16)+(b.highOrder>>>16)+(c.highOrder>>>16)+(d.highOrder>>>16)+(e.highOrder>>>16)+(lsw>>>16);highOrder=((msw&0xFFFF)<<16)|(lsw&0xFFFF);return new int64(highOrder,lowOrder);} + function maj(x,y,z){return new int64((x.highOrder&y.highOrder)^(x.highOrder&z.highOrder)^(y.highOrder&z.highOrder),(x.lowOrder&y.lowOrder)^(x.lowOrder&z.lowOrder)^(y.lowOrder&z.lowOrder));} + function ch(x,y,z){return new int64((x.highOrder&y.highOrder)^(~x.highOrder&z.highOrder),(x.lowOrder&y.lowOrder)^(~x.lowOrder&z.lowOrder));} + function rotr(x,n){if(n<=32){return new int64((x.highOrder>>>n)|(x.lowOrder<<(32-n)),(x.lowOrder>>>n)|(x.highOrder<<(32-n)));}else{return new int64((x.lowOrder>>>n)|(x.highOrder<<(32-n)),(x.highOrder>>>n)|(x.lowOrder<<(32-n)));}} + function sigma0(x){var rotr28=rotr(x,28);var rotr34=rotr(x,34);var rotr39=rotr(x,39);return new int64(rotr28.highOrder^rotr34.highOrder^rotr39.highOrder,rotr28.lowOrder^rotr34.lowOrder^rotr39.lowOrder);} + function sigma1(x){var rotr14=rotr(x,14);var rotr18=rotr(x,18);var rotr41=rotr(x,41);return new int64(rotr14.highOrder^rotr18.highOrder^rotr41.highOrder,rotr14.lowOrder^rotr18.lowOrder^rotr41.lowOrder);} + function gamma0(x){var rotr1=rotr(x,1),rotr8=rotr(x,8),shr7=shr(x,7);return new int64(rotr1.highOrder^rotr8.highOrder^shr7.highOrder,rotr1.lowOrder^rotr8.lowOrder^shr7.lowOrder);} + function gamma1(x){var rotr19=rotr(x,19);var rotr61=rotr(x,61);var shr6=shr(x,6);return new int64(rotr19.highOrder^rotr61.highOrder^shr6.highOrder,rotr19.lowOrder^rotr61.lowOrder^shr6.lowOrder);} + function shr(x,n){if(n<=32){return new int64(x.highOrder>>>n,x.lowOrder>>>n|(x.highOrder<<(32-n)));}else{return new int64(0,x.highOrder<<(32-n));}} + str=utf8_encode(str);strlen=str.length*charsize;str=str2binb(str);str[strlen>>5]|=0x80<<(24-strlen % 32);str[(((strlen+128)>>10)<<5)+31]=strlen;for(var i=0;i>>16)+(w.lowOrder>>>16)+(n>>>16)))<<16|65535&n,n=(65535&r.highOrder)+(65535&w.highOrder)+(d>>>16),new e((65535&(d=(r.highOrder>>>16)+(w.highOrder>>>16)+(n>>>16)))<<16|65535&n,h)}function rr(r,w){return w<=32?new e(r.highOrder>>>w|r.lowOrder<<32-w,r.lowOrder>>>w|r.highOrder<<32-w):new e(r.lowOrder>>>w|r.highOrder<<32-w,r.highOrder>>>w|r.lowOrder<<32-w)}function er(r,w){return w<=32?new e(r.highOrder>>>w,r.lowOrder>>>w|r.highOrder<<32-w):new e(0,r.highOrder<<32-w)}r=unescape(encodeURIComponent(r)),strlen=r.length*$,(r=function(r){for(var e=[],w=(1<<$)-1,n=r.length*$,d=0;d>5]|=(r.charCodeAt(d/$)&w)<<32-$-d%32;return e}(r))[strlen>>5]|=128<<24-strlen%32,r[31+(strlen+128>>10<<5)]=strlen;for(var wr=0;wr>>16)+(D.lowOrder>>>16)+(E.lowOrder>>>16)+(F.lowOrder>>>16)+(G>>>16)))<<16|65535&G,G=(65535&B.highOrder)+(65535&D.highOrder)+(65535&E.highOrder)+(65535&F.highOrder)+(J>>>16),new e((65535&(J=(B.highOrder>>>16)+(D.highOrder>>>16)+(E.highOrder>>>16)+(F.highOrder>>>16)+(G>>>16)))<<16|65535&G,K)),p=l,void 0,void 0,void 0,q=rr(k=O,14),x=rr(k,18),z=rr(k,41),C=new e(q.highOrder^x.highOrder^z.highOrder,q.lowOrder^x.lowOrder^z.lowOrder),U=o,j=i,b=new e((S=O).highOrder&U.highOrder^~S.highOrder&j.highOrder,S.lowOrder&U.lowOrder^~S.lowOrder&j.lowOrder),m=Y[nr],y=Z[nr],H=void 0,I=void 0,R=void 0,H=(65535&p.lowOrder)+(65535&C.lowOrder)+(65535&b.lowOrder)+(65535&m.lowOrder)+(65535&y.lowOrder),R=(65535&(I=(p.lowOrder>>>16)+(C.lowOrder>>>16)+(b.lowOrder>>>16)+(m.lowOrder>>>16)+(y.lowOrder>>>16)+(H>>>16)))<<16|65535&H,H=(65535&p.highOrder)+(65535&C.highOrder)+(65535&b.highOrder)+(65535&m.highOrder)+(65535&y.highOrder)+(I>>>16),g=new e((65535&(I=(p.highOrder>>>16)+(C.highOrder>>>16)+(b.highOrder>>>16)+(m.highOrder>>>16)+(y.highOrder>>>16)+(H>>>16)))<<16|65535&H,R),t=_((void 0,void 0,void 0,f=rr(c=w,28),s=rr(c,34),A=rr(c,39),new e(f.highOrder^s.highOrder^A.highOrder,f.lowOrder^s.lowOrder^A.lowOrder)),(u=n,a=d,new e((v=w).highOrder&u.highOrder^v.highOrder&a.highOrder^u.highOrder&a.highOrder,v.lowOrder&u.lowOrder^v.lowOrder&a.lowOrder^u.lowOrder&a.lowOrder))),l=i,i=o,o=O,O=_(h,g),h=d,d=n,n=w,w=_(g,t);X[0]=_(w,X[0]),X[1]=_(n,X[1]),X[2]=_(d,X[2]),X[3]=_(h,X[3]),X[4]=_(O,X[4]),X[5]=_(o,X[5]),X[6]=_(i,X[6]),X[7]=_(l,X[7])}var dr=[];for(wr=0;wr>2]>>8*(3-h%4),n+=w.charAt(e>>4&15)+w.charAt(15&e);return n}(dr)} \ No newline at end of file