initial commit

This commit is contained in:
Luke Ogburn
2019-03-31 11:41:33 -04:00
commit 14d0fdaaeb
8 changed files with 239 additions and 0 deletions

2
.gitignore vendored Normal file
View File

@@ -0,0 +1,2 @@
tempStorage/
conn.php

1
.htaccess Normal file
View File

@@ -0,0 +1 @@
ErrorDocument 404 /404.php

View File

@@ -0,0 +1 @@
5E9022E82668985A0143C2969A359F58FEFE2F4E70C30BF1FA753016FDB6FB61 comodoca.com 5c2cdb2ce8a20

18
404.php Normal file
View File

@@ -0,0 +1,18 @@
<?php
require "conn.php";
$url = (isset($_SERVER['HTTPS']) && $_SERVER['HTTPS'] === 'on' ? "https" : "http") . "://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";
$url = basename($url);
$stmt = $conn->prepare("SELECT * FROM directories WHERE fromsite = :site");
$stmt->bindParam(":site", $url);
$stmt->execute();
$return = $stmt->fetch(PDO::FETCH_OBJ);
$return = $return->tosite;
if(substr($return, 0, 5)!="http:" && substr($return, 0, 6)!="https:"){
$return = "http://".$return;
}
header("Location: $return");
?>

20
done.php Normal file
View File

@@ -0,0 +1,20 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>URL Shortener &nbsp;-&nbsp; lukeo.link</title>
<meta name=viewport content=width=device-width,initial-scale=1>
<link rel=stylesheet href=style.css type=text/css>
</head>
<body>
<div id=top class=center>
<p>Check out <a href=https://lukeogburn.com/>my main site</a>!</p>
</div>
<div id=main>
<h2 class=center>HERE'S YOUR SHORT URL</h2>
<p class=center>lukeo.link/<?=$_GET["code"]?></p>
<br>
<p class=center><a href=/>Want to make another?</a></p>
</div>
</body>
</html>

63
function.php Normal file
View File

@@ -0,0 +1,63 @@
<?php
require "conn.php";
function verifyID($pid){
require "conn.php";
$stmt = $GLOBALS['conn']->prepare("SELECT * FROM directories WHERE fromsite = :pid");
$stmt->bindParam(":pid", $pid);
$stmt->execute();
$return = $stmt->fetch(PDO::FETCH_OBJ)->fromsite;
return ($return!=NULL)?false:true;
}
function randID($length = 6) {
do{
if(function_exists("random_bytes")){
$bytes = random_bytes(ceil($length/2));
}elseif(function_exists("openssl_random_pseudo_bytes")){
$bytes = openssl_random_pseudo_bytes(ceil($length/2));
}else{
throw new Exception("No cryptographically secure random function available.");
}
$x = substr(bin2hex($bytes), 0, $length);
$id = gmp_strval(gmp_init($x, 36), 62);
} while(!verifyID($id));
return $id;
}
function hyperSearch($text){
preg_match_all("#((((-|_){0,}\w)+\.([a-zA-Z]+){2,})|((((http)|(https)):\/\/){1}((-|_){0,}\w)+\.([a-zA-Z]+){2,}))((\w+|-|_|\/|\.)+){0,}#", $text, $match);
if($match[0]==NULL){
return false;
}else{
return true;
}
}
if(hyperSearch($_POST["url"]) == false){
header("Location: /?error=hps");
exit();
}
$stmt = $conn->prepare("SELECT * FROM directories WHERE tosite = :site");
$stmt->bindParam(":site", $_POST["url"]);
$stmt->execute();
$return = $stmt->fetch(PDO::FETCH_OBJ)->fromsite;
$siteExists = ($return==NULL)?false:$return;
if($siteExists == false){
$fromurl = randID();
$tourl = $_POST["url"];
$stmt = $conn->prepare("INSERT INTO directories (fromsite, tosite) VALUES (:f, :t)");
$stmt->bindParam(":f", $fromurl);
$stmt->bindParam(":t", $tourl);
$stmt->execute();
if(!$stmt){
header("Location: /?error=stmt");
}else{
header("Location: /done.php?code=$fromurl");
}
}else{
header("Location: /done.php?code=$siteExists");
}
?>

38
index.php Normal file
View File

@@ -0,0 +1,38 @@
<!DOCTYPE html>
<html>
<head>
<meta charset=UTF-8>
<title>URL Shortener &nbsp;-&nbsp; lukeo.link</title>
<meta name=viewport content=width=device-width,initial-scale=1>
<link rel=stylesheet href=style.css type=text/css>
</head>
<body>
<div id=top class=center>
<p>Looking for <a href=https://lukeogburn.com/>lukeogburn.com</a>?</p>
</div>
<div id=main>
<h2 class=center>URL SHORTENER</h2>
<form method=POST action=function.php>
<input type=text name=url></input>
<button type=submit>SHORTEN</button>
</form>
<?php
if(isset($_GET["error"])){
switch($_GET["error"]){
case "stmt":
echo "<p class='center error'>Error creating short URL</p>";
break;
case "hps":
echo "<p class='center error'>Please enter a valid URL</p>";
break;
case "unr":
echo "<p class='center error'>That URL wasn't recognized</p>";
break;
}
}
?>
</div>
<input type=checkbox id=boo>
<div id=cookie><p><label for=boo>This site does <b>not</b> use cookies. You're welcome.</label></p></div>
</body>
</html>

96
style.css Normal file
View File

@@ -0,0 +1,96 @@
body{
font-family: sans-serif;
width: 60%;
margin: 0 auto;
}
.center{
text-align: center;
}
a{
text-decoration: none;
color: #35c97b;
}
a:hover{
text-decoration: underline;
}
/*Cookie notif*/
#boo{
display: none;
}
#boo:checked+div{
display: none;
}
#cookie{
position: absolute;
bottom: 0;
width: 60%;
text-align: center;
font-size: 0.8em;
color: #252525;
}
label:hover{
cursor: pointer;
}
#top{
display: block;
width: 100%;
border-bottom: 1px solid #ccc;
font-weight: 400;
}
#top>p{
margin: 1em 0 0.7em 0;
}
#main{
margin-top: 5vh;
}
#main>h2{
font-weight: 400;
letter-spacing: 2px;
}
.error{
color: #ff3939;
}
form{
width: 75%;
margin: 0 auto;
display: grid;
grid-template-columns: 5fr 1fr;
}
form>input, form>button{
border: 1px solid #aaa;
padding: 0.5em 0.8em;
}
input{
width: calc(100% - 1.6em);
border-radius: 0.2em 0 0 0.2em;
font-size: 1em;
}
button{
width: 100%;
border-radius: 0 0.2em 0.2em 0;
background-color: #eee;
font-size: 0.85em;
}
button:hover{
cursor: pointer;
background-color: #eee;
}
@media (max-width: 1000px){
body, #cookie{
width: 70%;
}
form{
width: 90%;
}
}
@media (max-width: 600px){
body, #cookie{
width: 100%;
}
}