-
Notifications
You must be signed in to change notification settings - Fork 0
/
API.php
141 lines (121 loc) · 4.37 KB
/
API.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
<?php
/**
* Created by PhpStorm.
* User: Jean-Mathieu
* Date: 3/1/2016
* Time: 8:24 PM
*/
include ("Connection.php");
class API
{
public function insertURL($normal){
$connection = new Connection();
$conn = $connection->getConnection();
$normal = html_entity_decode(trim($normal));
if(strlen($normal) < 1)
return json_encode(array('error' => 'true', 'result' => array('URL can not be empty')));
if (filter_var($normal, FILTER_VALIDATE_URL) === false)
return json_encode(array('error' => 'true', 'result' => array('URL Not Valid' . $normal)));
if($this->checkRestrictions($normal)){
return json_encode(array('error' => 'true', 'result' => array('URL Restricted...')));
}
$stmt = $conn->prepare("SELECT * FROM url WHERE url_normal = ?");
$stmt->bindParam(1, $normal);
$stmt->execute();
if($stmt->rowCount() < 1){
$short = null;
do{
$short = substr(md5(microtime() . $normal),rand(0,26),5);
}while($this->checkShort($short));
$stmt = $conn->prepare('INSERT INTO url (`url_normal`, `url_short`) VALUES (?,?)');
$stmt->bindParam(1, $normal);
$stmt->bindParam(2, $short);
if($stmt->execute()){
return json_encode(array('error' => 'false', 'result' => array('url_normal' => $normal, 'url_short' => $short)));
}
}else{
$result = $stmt->fetchAll();
$final = array();
foreach($result as $row){
$final = array('error' => 'false', 'result' => array('url_normal' => $row['url_normal'], 'url_short' => $row['url_short']));
}
return json_encode($final);
}
return json_encode(array('error' => 'true', 'result' => array('Please try again...')));
}
public function getURLLimit($limit = 100)
{
$connection = new Connection();
$conn = $connection->getConnection();
$conn->setAttribute( PDO::ATTR_EMULATE_PREPARES, false );
$stmt = $conn->prepare("SELECT * ,(SELECT COUNT(*) FROM views WHERE url_short = url.url_short) as views FROM url ORDER BY url_id DESC LIMIT ? ;");
$stmt->bindParam(1, $limit);
$stmt->execute();
$result = $stmt->fetchAll();
return json_encode(array('error' => 'false', 'result' => $result));
}
function checkShort($short){
$connection = new Connection();
$conn = $connection->getConnection();
$stmt = $conn->prepare("SELECT * FROM url WHERE short_url = ?");
$stmt->bindParam(1, $short);
$stmt->execute();
if($stmt->rowCount() > 0)
return true;
return false;
}
public function getURL($short){
$connection = new Connection();
$conn = $connection->getConnection();
$stmt = $conn->prepare("SELECT * FROM url WHERE url_short = ? LIMIT 1;");
$stmt->bindParam(1, $short);
$stmt->execute();
$result = $stmt->fetchAll();
if($stmt->rowCount() > 0){
$stmt = $conn->prepare("INSERT INTO views (`url_short`, `ip`) VALUES(?,?)");
$stmt->bindParam(1, $short);
$stmt->bindParam(2, $this->getIP());
$stmt->execute();
return json_encode(array('error' => 'false', 'result' => $result));
}else{
return json_encode(array('error' => 'true', 'result' => array("URL does not exist")));
}
}
private function getIP(){
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
return $ip;
}
private function checkRestrictions($string){
foreach($this->restrictions as $bad){
$place = strpos($string,$bad);
if(!empty($place))
return true;
}
return false;
}
private $restrictions = array(
"porn",
"sex",
"xxx",
"fuck",
"suck",
"redtube",
"video-one",
"xvideos",
"spankbang",
"xhamster",
"xnxx",
"cur.lv",
"tinyurl",
"jmdev",
"chaturbate",
"bazoocam",
"jizz"
);
}