move folder
This commit is contained in:
101
www/admin/index.php
Normal file
101
www/admin/index.php
Normal file
@@ -0,0 +1,101 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>Admin Page</title>
|
||||
<link rel="icon" href="../logo.png" type="image/x-icon">
|
||||
<link rel="stylesheet" type="text/css" href="styles.css">
|
||||
<link rel="stylesheet" href="https://use.typekit.net/rvs8lhv.css">
|
||||
|
||||
</head>
|
||||
<body>
|
||||
<div class="content">
|
||||
<div class="center-container">
|
||||
<div class="header">
|
||||
<img src="../logo.png" class="logo">
|
||||
<div class="header-content">
|
||||
<h1>IP Pheasant</h1>
|
||||
<p>Where the Pheasant shows all the IP!</p>
|
||||
<h2>Admin Panel</h2>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Table for displaying visit count -->
|
||||
<table>
|
||||
<tr>
|
||||
<th>Total Visit Count</th>
|
||||
<td id="visitCount"></td>
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<!-- Table for displaying last 50 lines of the gist -->
|
||||
<br>
|
||||
<table id="last50Table">
|
||||
<!-- Table headers -->
|
||||
|
||||
</table>
|
||||
<script>
|
||||
|
||||
const apiKey = "<?php echo getenv('apiKey'); ?>";
|
||||
const accessToken = "<?php echo getenv('accessToken'); ?>";
|
||||
const gistId = "<?php echo getenv('gistId'); ?>" ;
|
||||
const gistId2 = "<?php echo getenv('gistId2'); ?>" ;
|
||||
|
||||
fetch(`https://api.github.com/gists/${gistId2}`, {
|
||||
headers: {
|
||||
'Authorization': `token ${accessToken}`,
|
||||
}
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
// Extract content of the first file in the Gist
|
||||
const filename = Object.keys(data.files)[0];
|
||||
const content = data.files[filename].content;
|
||||
const visitCount = parseInt(content) || 0; // Parse existing visit count from Gist, or default to 0
|
||||
|
||||
// Display visit count in the table
|
||||
|
||||
// Extract last 50 lines of the content
|
||||
const lines = content.trim().split('\n');
|
||||
const last50Lines = lines.slice(-50);
|
||||
|
||||
// Parse each line and add it to the last 50 lines table
|
||||
const last50Table = document.getElementById('last50Table');
|
||||
last50Lines.forEach(line => {
|
||||
const [address, time] = line.split(',');
|
||||
const row = last50Table.insertRow();
|
||||
row.insertCell(0).innerText = address;
|
||||
row.insertCell(1).innerText = time;
|
||||
});
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error fetching Gist:', error);
|
||||
});
|
||||
</script>
|
||||
|
||||
<script>
|
||||
|
||||
|
||||
fetch(`https://api.github.com/gists/${gistId}`, {
|
||||
headers: {
|
||||
'Authorization': `token ${accessToken}`,
|
||||
}
|
||||
})
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
// Extract content of the first file in the Gist
|
||||
const filename = Object.keys(data.files)[0];
|
||||
const content = data.files[filename].content;
|
||||
const visitCount = parseInt(content) || 0; // Parse existing visit count from Gist, or default to 0
|
||||
// Display visit count in the table
|
||||
document.getElementById('visitCount').innerText = visitCount;
|
||||
})
|
||||
.catch(error => {
|
||||
console.error('Error fetching Gist:', error);
|
||||
});
|
||||
</script>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
186
www/admin/styles.css
Normal file
186
www/admin/styles.css
Normal file
@@ -0,0 +1,186 @@
|
||||
body{
|
||||
background-color: #1f2122;
|
||||
color: #d9d5d0;
|
||||
font-family: "semplicitapro","Helvetica Neue",Helvetica,Arial,sans-serif;
|
||||
font-weight: normal !important;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
img{
|
||||
max-width: 100%;
|
||||
height: 10rem;
|
||||
}
|
||||
|
||||
.location{
|
||||
text-align: center;
|
||||
}
|
||||
.countryFlag{
|
||||
height: auto;
|
||||
margin-left: .5em;
|
||||
}
|
||||
|
||||
.center-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
font-family: "semplicitapro", sans-serif;
|
||||
font-weight: 400;
|
||||
font-style: normal;
|
||||
}
|
||||
.header {
|
||||
|
||||
padding: 0;
|
||||
display: flex; /* Use flexbox */
|
||||
align-items: center; /* Vertically center align items */
|
||||
}
|
||||
|
||||
.logo {
|
||||
max-width: 100px;
|
||||
height: auto;
|
||||
margin-right: 20px;
|
||||
}
|
||||
|
||||
.header-content {
|
||||
flex: 1; /* Expand to fill available space */
|
||||
}
|
||||
|
||||
.text-content {
|
||||
float: left;
|
||||
}
|
||||
|
||||
.header-content h1,
|
||||
.header-content p {
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
h1{
|
||||
font-size: 3em;
|
||||
color: rgb(60, 134, 204);
|
||||
}
|
||||
.h2-container {
|
||||
display: flex;
|
||||
justify-content: center;
|
||||
align-items: center;
|
||||
}
|
||||
h2{
|
||||
font-size: 2em;
|
||||
text-align: center;
|
||||
border-radius: 1rem;
|
||||
background-color: #484a4d;
|
||||
padding: .5rem 1.5rem;
|
||||
margin: auto 0;
|
||||
display: inline-block; /* Keeps the box size around the text */
|
||||
}
|
||||
h3{
|
||||
font-size: 1.5em;
|
||||
margin: .5rem;
|
||||
}
|
||||
|
||||
p{
|
||||
margin: 1rem;
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
.ipBlock{
|
||||
background-color: #2d2f31;
|
||||
margin: 0 auto;
|
||||
margin-bottom: 1rem;
|
||||
margin-top: 1rem;
|
||||
padding: 2rem;
|
||||
border-radius: 2rem;
|
||||
max-width: 700px;
|
||||
|
||||
}
|
||||
ul{list-style-type: none;}
|
||||
code{
|
||||
color: #1a7092;
|
||||
font-size: 1.5rem;
|
||||
background-color: #2a2941;
|
||||
border-radius: .5rem;
|
||||
padding: .5rem 1rem;
|
||||
}
|
||||
|
||||
#ipv4{
|
||||
color: #990000;
|
||||
}
|
||||
#ipv6{
|
||||
color: rgb(10, 158, 42);
|
||||
}
|
||||
|
||||
table {
|
||||
|
||||
border-collapse: separate; /* Use separate border model */
|
||||
border-spacing: 10px;
|
||||
width: 50%;
|
||||
font-size: 2em;
|
||||
margin: 0 auto;
|
||||
margin-top: 2.5em;
|
||||
}
|
||||
|
||||
th, td {
|
||||
border: none;
|
||||
background-color: #2d2f31;
|
||||
border-radius: 10px;
|
||||
padding: 8px;
|
||||
margin: 10px;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
td{
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
#last50Table {
|
||||
width: 90%;
|
||||
font-size: 1.5em;
|
||||
}
|
||||
|
||||
.footer {
|
||||
background-color: #333;
|
||||
padding: 10px;
|
||||
text-align: center;
|
||||
position: fixed; /* Position fixed for sticking to the bottom */
|
||||
left: 0;
|
||||
bottom: 0;
|
||||
width: 100%; /* Occupy full width */
|
||||
font-size: .5rem;
|
||||
}
|
||||
@media screen and (max-width: 2000px) {
|
||||
footer{
|
||||
position: unset !important;
|
||||
}
|
||||
}
|
||||
@media screen and (max-width: 800px) {
|
||||
.header{padding: 0;}
|
||||
.ipBlock{
|
||||
margin: 1rem;
|
||||
margin-left: 1.3rem;
|
||||
padding: 1rem;
|
||||
}
|
||||
|
||||
h1{font-size: 2em;}
|
||||
h2{
|
||||
font-size: 1.5em;
|
||||
padding: .5rem 1rem;}
|
||||
h3{
|
||||
margin: .5rem;
|
||||
font-size: 1.5em;
|
||||
}
|
||||
p{
|
||||
margin: .5rem;
|
||||
font-size: 1em;
|
||||
}
|
||||
.ip-address{margin-bottom: 1rem!important;}
|
||||
code{
|
||||
font-size: 14px;
|
||||
}
|
||||
ul{margin-top: .5rem;}
|
||||
table{
|
||||
width: 90%;
|
||||
}
|
||||
#last50Table {
|
||||
width: 98%;
|
||||
font-size: .8em;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user