382 lines
No EOL
14 KiB
HTML
382 lines
No EOL
14 KiB
HTML
<!DOCTYPE html>
|
|
<html lang="en">
|
|
<head>
|
|
<meta charset="UTF-8">
|
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
<title>Plausible Deniability - GitHub Subdomain Registration</title>
|
|
<style>
|
|
:root {
|
|
--primary-color: #ff3e00;
|
|
--secondary-color: #40b3ff;
|
|
--dark-color: #333;
|
|
--light-color: #f4f4f4;
|
|
--success-color: #28a745;
|
|
--error-color: #dc3545;
|
|
}
|
|
|
|
* {
|
|
box-sizing: border-box;
|
|
margin: 0;
|
|
padding: 0;
|
|
}
|
|
|
|
body {
|
|
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
|
|
line-height: 1.6;
|
|
color: var(--dark-color);
|
|
background-color: var(--light-color);
|
|
padding: 2rem;
|
|
}
|
|
|
|
.container {
|
|
max-width: 800px;
|
|
margin: 0 auto;
|
|
padding: 2rem;
|
|
background-color: white;
|
|
border-radius: 10px;
|
|
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.1);
|
|
}
|
|
|
|
header {
|
|
text-align: center;
|
|
margin-bottom: 2rem;
|
|
}
|
|
|
|
header h1 {
|
|
color: var(--primary-color);
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
header p {
|
|
color: var(--dark-color);
|
|
font-size: 1.2rem;
|
|
}
|
|
|
|
.form-group {
|
|
margin-bottom: 1.5rem;
|
|
}
|
|
|
|
label {
|
|
display: block;
|
|
margin-bottom: 0.5rem;
|
|
font-weight: bold;
|
|
}
|
|
|
|
input[type="text"],
|
|
input[type="email"],
|
|
textarea {
|
|
width: 100%;
|
|
padding: 0.8rem;
|
|
border: 1px solid #ddd;
|
|
border-radius: 5px;
|
|
font-size: 1rem;
|
|
}
|
|
|
|
input[type="text"]:focus,
|
|
input[type="email"]:focus,
|
|
textarea:focus {
|
|
outline: none;
|
|
border-color: var(--secondary-color);
|
|
box-shadow: 0 0 5px rgba(64, 179, 255, 0.5);
|
|
}
|
|
|
|
button {
|
|
display: inline-block;
|
|
background-color: var(--primary-color);
|
|
color: white;
|
|
padding: 0.8rem 1.5rem;
|
|
border: none;
|
|
border-radius: 5px;
|
|
cursor: pointer;
|
|
font-size: 1rem;
|
|
transition: background-color 0.3s;
|
|
}
|
|
|
|
button:hover {
|
|
background-color: #e63600;
|
|
}
|
|
|
|
button:disabled {
|
|
background-color: #ccc;
|
|
cursor: not-allowed;
|
|
}
|
|
|
|
.info-box {
|
|
background-color: rgba(64, 179, 255, 0.1);
|
|
border-left: 4px solid var(--secondary-color);
|
|
padding: 1rem;
|
|
margin-bottom: 2rem;
|
|
border-radius: 0 5px 5px 0;
|
|
}
|
|
|
|
.info-box h3 {
|
|
color: var(--secondary-color);
|
|
margin-bottom: 0.5rem;
|
|
}
|
|
|
|
.message {
|
|
padding: 1rem;
|
|
margin: 1rem 0;
|
|
border-radius: 5px;
|
|
display: none;
|
|
}
|
|
|
|
.success {
|
|
background-color: rgba(40, 167, 69, 0.1);
|
|
border-left: 4px solid var(--success-color);
|
|
color: var(--success-color);
|
|
}
|
|
|
|
.error {
|
|
background-color: rgba(220, 53, 69, 0.1);
|
|
border-left: 4px solid var(--error-color);
|
|
color: var(--error-color);
|
|
}
|
|
|
|
.loading {
|
|
display: none;
|
|
text-align: center;
|
|
margin: 1rem 0;
|
|
}
|
|
|
|
.spinner {
|
|
border: 4px solid rgba(0, 0, 0, 0.1);
|
|
border-left: 4px solid var(--primary-color);
|
|
border-radius: 50%;
|
|
width: 30px;
|
|
height: 30px;
|
|
animation: spin 1s linear infinite;
|
|
margin: 0 auto;
|
|
}
|
|
|
|
@keyframes spin {
|
|
0% { transform: rotate(0deg); }
|
|
100% { transform: rotate(360deg); }
|
|
}
|
|
|
|
.requirements {
|
|
margin-top: 1rem;
|
|
}
|
|
|
|
.requirements ul {
|
|
padding-left: 1.5rem;
|
|
}
|
|
|
|
footer {
|
|
text-align: center;
|
|
margin-top: 3rem;
|
|
color: #777;
|
|
}
|
|
</style>
|
|
</head>
|
|
<body>
|
|
<div class="container">
|
|
<header>
|
|
<h1>Plausible Deniability</h1>
|
|
<p>GitHub Subdomain Registration</p>
|
|
<p><em>"I have no idea how that got on my website, your honour!"</em> 👨⚖️ </p>
|
|
</header>
|
|
|
|
<div class="info-box">
|
|
<h3>How It Works</h3>
|
|
<p>Submit your GitHub repository information to get a subdomain at theradicalparty.com (e.g., yourproject.theradicalparty.com) to showcase your work. Name and email are optional for anonymous submissions.</p>
|
|
<p><strong>Disclaimer:</strong> We are not responsible for any FBI raids, angry emails from your boss, or sudden career changes that may result from your submission. 😉</p>
|
|
</div>
|
|
|
|
<form id="subdomain-form">
|
|
<div class="form-group">
|
|
<label for="name">Alt Name:</label>
|
|
<input type="text" id="name" name="name" placeholder="Definitely Not FBI Agent #42">
|
|
<small>Your super secret identity. We won't tell.</small>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="email">Alt Email:</label>
|
|
<input type="email" id="email" name="email" placeholder="totallylegitimate@notfake.com">
|
|
<small>Where we'll send your honorary hacktivist membership card.</small>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="github-repo">GitHub Repository URL:</label>
|
|
<input type="text" id="github-repo" name="github-repo" placeholder="https://github.com/username/repository" required>
|
|
<div class="requirements">
|
|
<small>Your repository must:</small>
|
|
<ul>
|
|
<li><small>Be public (unless you've discovered time travel, then please DM us)</small></li>
|
|
<li><small>Have a valid index.html file in the root or docs folder (we're not magicians)</small></li>
|
|
<li><small>Not contain malicious code (we draw the line at mild mischief)</small></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="subdomain">Desired Subdomain:</label>
|
|
<input type="text" id="subdomain" name="subdomain" placeholder="definitely-not-illegal-stuff" required>
|
|
<small>This will become: yourproject.theradicalparty.com (Choose wisely, future whistleblower!)</small>
|
|
</div>
|
|
|
|
<div class="form-group">
|
|
<label for="description">Project Description:</label>
|
|
<textarea id="description" name="description" rows="4" placeholder="My project is absolutely not trying to [REDACTED] the [REDACTED] with a giant [REDACTED]..." required></textarea>
|
|
<small>Tell us what your project does. Keep it PG-13... or don't, we're not your mom.</small>
|
|
</div>
|
|
|
|
<button type="submit" id="submit-btn">Submit & Establish Plausible Deniability</button>
|
|
</form>
|
|
|
|
<div class="loading" id="loading">
|
|
<div class="spinner"></div>
|
|
<p>Processing your request... (and deleting all evidence of this transaction)</p>
|
|
</div>
|
|
|
|
<div class="message success" id="success-message">
|
|
<h3>Success! Your Alibi is Established!</h3>
|
|
<p>We've received your subdomain request and will review it shortly. If you provided an email, you'll receive a notification once your subdomain is ready.</p>
|
|
<p><small>Remember: "I was just testing the security" is always a valid excuse.</small></p>
|
|
</div>
|
|
|
|
<div class="message error" id="error-message">
|
|
<h3>Error: Reality Malfunction</h3>
|
|
<p id="error-text">There was a problem submitting your request. Please try again.</p>
|
|
<p><small>The cyberpunk dystopia we live in is experiencing technical difficulties.</small></p>
|
|
</div>
|
|
</div>
|
|
|
|
<footer>
|
|
<!-- Footer content removed as requested -->
|
|
</footer>
|
|
|
|
<script>
|
|
document.addEventListener('DOMContentLoaded', function() {
|
|
const form = document.getElementById('subdomain-form');
|
|
const submitBtn = document.getElementById('submit-btn');
|
|
const loading = document.getElementById('loading');
|
|
const successMessage = document.getElementById('success-message');
|
|
const errorMessage = document.getElementById('error-message');
|
|
const errorText = document.getElementById('error-text');
|
|
const githubRepoInput = document.getElementById('github-repo');
|
|
const subdomainInput = document.getElementById('subdomain');
|
|
|
|
// Validate GitHub URL format
|
|
function isValidGithubUrl(url) {
|
|
const pattern = /^https:\/\/github\.com\/[a-zA-Z0-9-]+\/[a-zA-Z0-9._-]+\/?$/;
|
|
return pattern.test(url);
|
|
}
|
|
|
|
// Validate subdomain format
|
|
function isValidSubdomain(subdomain) {
|
|
const pattern = /^[a-z0-9][a-z0-9-]{1,61}[a-z0-9]$/;
|
|
return pattern.test(subdomain);
|
|
}
|
|
|
|
// Add input validation for GitHub repo URL
|
|
githubRepoInput.addEventListener('blur', function() {
|
|
if (this.value && !isValidGithubUrl(this.value)) {
|
|
this.setCustomValidity("Please enter a valid GitHub repository URL");
|
|
} else {
|
|
this.setCustomValidity("");
|
|
}
|
|
});
|
|
|
|
// Add input validation for subdomain
|
|
subdomainInput.addEventListener('blur', function() {
|
|
if (this.value && !isValidSubdomain(this.value)) {
|
|
this.setCustomValidity("Subdomain must contain only lowercase letters, numbers, and hyphens, and cannot start or end with a hyphen");
|
|
} else {
|
|
this.setCustomValidity("");
|
|
}
|
|
});
|
|
|
|
// Convert subdomain to lowercase
|
|
subdomainInput.addEventListener('input', function() {
|
|
this.value = this.value.toLowerCase();
|
|
});
|
|
|
|
// Handle form submission
|
|
form.addEventListener('submit', function(e) {
|
|
e.preventDefault();
|
|
|
|
// Hide any previous messages
|
|
successMessage.style.display = 'none';
|
|
errorMessage.style.display = 'none';
|
|
|
|
// Validate GitHub URL
|
|
if (!isValidGithubUrl(githubRepoInput.value)) {
|
|
errorText.textContent = "Please enter a valid GitHub repository URL";
|
|
errorMessage.style.display = 'block';
|
|
return;
|
|
}
|
|
|
|
// Validate subdomain
|
|
if (!isValidSubdomain(subdomainInput.value)) {
|
|
errorText.textContent = "Subdomain must contain only lowercase letters, numbers, and hyphens, and cannot start or end with a hyphen";
|
|
errorMessage.style.display = 'block';
|
|
return;
|
|
}
|
|
|
|
// Collect form data
|
|
const formData = {
|
|
name: document.getElementById('name').value || "Anonymous",
|
|
email: document.getElementById('email').value || "anonymous@example.com",
|
|
repo: githubRepoInput.value,
|
|
subdomain: subdomainInput.value,
|
|
description: document.getElementById('description').value
|
|
};
|
|
|
|
// Show loading spinner briefly for effect
|
|
submitBtn.disabled = true;
|
|
loading.style.display = 'block';
|
|
|
|
// Create GitHub issue
|
|
setTimeout(function() {
|
|
// Hide loading spinner
|
|
loading.style.display = 'none';
|
|
|
|
try {
|
|
// Format the issue title and body
|
|
const issueTitle = `Subdomain Request: ${formData.subdomain}.theradicalparty.com`;
|
|
const issueBody = `
|
|
## Subdomain Request
|
|
|
|
**Alt Name:** ${formData.name}
|
|
**Alt Email:** ${formData.email === "anonymous@example.com" ? "None provided" : formData.email}
|
|
**GitHub Repo:** ${formData.repo}
|
|
**Desired Subdomain:** ${formData.subdomain}
|
|
|
|
### Description
|
|
${formData.description}
|
|
|
|
---
|
|
*Submitted via Plausible Deniability form*
|
|
`;
|
|
|
|
// Create the GitHub issue URL
|
|
// Replace 'your-username/plausible-deniability' with your actual GitHub repo
|
|
const githubIssueUrl = `https://github.com/kingomarnajjar/plausible_deniability/issues/new?title=${encodeURIComponent(issueTitle)}&body=${encodeURIComponent(issueBody)}&labels=subdomain-request`;
|
|
|
|
// Show success message
|
|
successMessage.style.display = 'block';
|
|
|
|
// Open the GitHub issue in a new tab
|
|
window.open(githubIssueUrl, '_blank');
|
|
|
|
// Reset the form
|
|
form.reset();
|
|
} catch (error) {
|
|
// Show error message
|
|
errorText.textContent = "There was an error creating the GitHub issue. Please try again.";
|
|
errorMessage.style.display = 'block';
|
|
console.error("Error:", error);
|
|
}
|
|
|
|
// Re-enable submit button
|
|
submitBtn.disabled = false;
|
|
}, 1000); // Show loading for 1 second for effect
|
|
});
|
|
|
|
// Check for subdomain availability is removed since this will be handled via GitHub issues
|
|
});
|
|
</script>
|
|
<script src="https://theradicalparty.com/footer.js" defer></script>
|
|
</body>
|
|
</html> |