Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

feat: Temporarily disable, because I am poor. #205

Merged
merged 1 commit into from
Dec 17, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 25 additions & 1 deletion api/_common/middleware.js
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,9 @@ const TIMEOUT = process.env.API_TIMEOUT_LIMIT ? parseInt(process.env.API_TIMEOUT
// If present, set CORS allowed origins for responses
const ALLOWED_ORIGINS = process.env.API_CORS_ORIGIN || '*';

// Disable everything :( Setting this env var will turn off the instance, and show message
const DISABLE_EVERYTHING = !!process.env.VITE_DISABLE_EVERYTHING;

// Set the platform currently being used
let PLATFORM = 'NETLIFY';
if (process.env.PLATFORM) { PLATFORM = process.env.PLATFORM.toUpperCase(); }
Expand All @@ -21,7 +24,6 @@ const headers = {
'Content-Type': 'application/json;charset=UTF-8',
};


const timeoutErrorMsg = 'You can re-trigger this request, by clicking "Retry"\n'
+ 'If you\'re running your own instance of Web Check, then you can '
+ 'resolve this issue, by increasing the timeout limit in the '
Expand All @@ -31,6 +33,14 @@ const timeoutErrorMsg = 'You can re-trigger this request, by clicking "Retry"\n'
+ 'in order to keep running costs affordable, so that Web Check can '
+ 'remain freely available for everyone.';

const disabledErrorMsg = 'Error - WebCheck Temporarily Disabled.\n\n'
+ 'We\'re sorry, but due to the increased cost of running Web Check '
+ 'we\'ve had to temporatily disable the public instand. '
+ 'We\'re activley looking for affordable ways to keep Web Check running, '
+ 'while free to use for everybody.\n'
+ 'In the meantime, since we\'ve made our code free and open source, '
+ 'you can get Web Check running on your own system, by following the instructions in our GitHub repo';

// A middleware function used by all API routes on all platforms
const commonMiddleware = (handler) => {

Expand All @@ -45,6 +55,11 @@ const commonMiddleware = (handler) => {

// Vercel
const vercelHandler = async (request, response) => {

if (DISABLE_EVERYTHING) {
response.status(503).json({ error: disabledErrorMsg });
}

const queryParams = request.query || {};
const rawUrl = queryParams.url;

Expand Down Expand Up @@ -83,6 +98,15 @@ const commonMiddleware = (handler) => {
const queryParams = event.queryStringParameters || event.query || {};
const rawUrl = queryParams.url;

if (DISABLE_EVERYTHING) {
callback(null, {
statusCode: 503,
body: JSON.stringify({ error: 'Web-Check is temporarily disabled. Please try again later.' }),
headers,
});
return;
}

if (!rawUrl) {
callback(null, {
statusCode: 500,
Expand Down
27 changes: 27 additions & 0 deletions src/components/homepage/TempDisabled.astro
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<div class="banner">
<p>
⚠️ Web Check is temporarily disabled due to excess demand and associated costs.
We apologize for any inconvenience and are working on a solution.
</p>
</div>

<style>
.banner {
position: relative;
top: 0;
left: 0;
width: 100%;
background-color: var(--primary);
color: var(--background);
padding: 0.75rem 1rem;
text-align: center;
z-index: 1000;
box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
}

.banner p {
margin: 0;
font-size: 0.95rem;
line-height: 1.4;
}
</style>
4 changes: 4 additions & 0 deletions src/pages/index.astro
Original file line number Diff line number Diff line change
@@ -1,12 +1,15 @@
---
import BaseLayout from '@layouts/Base.astro';
import HeroForm from '@components/homepage/HeroForm.astro';
import TempDisabled from '@/components/homepage/TempDisabled.astro';
import HomeBackground from '@/components/homepage/HomeBackground';
import AboutSection from '@/components/homepage/AboutSection.astro';
import Footer from '@components/scafold/Footer.astro';

const isBossServer = import.meta.env.BOSS_SERVER === true;

const disableEverything = import.meta.env.VITE_DISABLE_EVERYTHING === true;

// Redirect strait to /check or /check/:url if running as self-hosted instance
if (!isBossServer) {
const searchUrl = new URLSearchParams(new URL(Astro.request.url).search).get('url');
Expand All @@ -20,6 +23,7 @@ if (!isBossServer) {
<Fragment slot="head">
{!isBossServer && (<meta http-equiv="refresh" content="0; url=/check" />)}
</Fragment>
{ disableEverything && <TempDisabled />}
<main>
<HeroForm />
<AboutSection />
Expand Down
5 changes: 5 additions & 0 deletions src/web-check-live/hooks/motherOfAllHooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'react-toastify/dist/ReactToastify.css';

import type { LoadingState } from 'web-check-live/components/misc/ProgressBar';
import type { AddressType } from 'web-check-live/utils/address-type-checker';
import keys from 'web-check-live/utils/get-keys';

interface UseIpAddressProps<ResultType = any> {
// Unique identifier for this job type
Expand Down Expand Up @@ -37,6 +38,10 @@ const useMotherOfAllHooks = <ResultType = any>(params: UseIpAddressProps<ResultT
// Fire off the HTTP fetch request, then set results and update loading / error state

const doTheFetch = () => {
if (keys.disableEverything) {
updateLoadingJobs(jobId, 'skipped', 'Web-Check is temporarily disabled. Please try again later.', reset);
return Promise.resolve();
}
return fetchRequest()
.then((res: any) => {
if (!res) { // No response :(
Expand Down
1 change: 1 addition & 0 deletions src/web-check-live/utils/get-keys.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@
const keys = {
shodan: import.meta.env.REACT_APP_SHODAN_API_KEY || "default_value_if_not_set",
whoApi: import.meta.env.REACT_APP_WHO_API_KEY || "default_value_if_not_set",
disableEverything: import.meta.env.VITE_DISABLE_EVERYTHING === 'true',
};
// const keys = process && process.env ? {
// shodan: process.env.REACT_APP_SHODAN_API_KEY,
Expand Down