├── .env ├── .github ├── FUNDING.yml ├── README.md ├── screenshots │ ├── README.md │ ├── tiles │ │ ├── archives.png │ │ ├── block-lists.png │ │ ├── carbon.png │ │ ├── cookies.png │ │ ├── dns-server.png │ │ ├── dns.png │ │ ├── dnssec.png │ │ ├── domain.png │ │ ├── email-config.png │ │ ├── features.png │ │ ├── firewall.png │ │ ├── headers.png │ │ ├── hosts.png │ │ ├── hsts.png │ │ ├── http-security.png │ │ ├── linked-pages.png │ │ ├── location.png │ │ ├── ports.png │ │ ├── quality.png │ │ ├── ranking.png │ │ ├── redirects.png │ │ ├── robots.png │ │ ├── screenshot.png │ │ ├── security-txt.png │ │ ├── server.png │ │ ├── sitemap.png │ │ ├── social-tags.png │ │ ├── ssl.png │ │ ├── status.png │ │ ├── tech-stack.png │ │ ├── threats.png │ │ ├── tls-cipher-suites.png │ │ ├── tls-handshake-simulation.png │ │ ├── tls-security-config.png │ │ ├── trace-route.png │ │ └── txt-records.png │ ├── web-check-screenshot1.png │ ├── web-check-screenshot10.png │ ├── web-check-screenshot2.png │ ├── web-check-screenshot3.png │ ├── web-check-screenshot4.png │ ├── web-check-screenshot5.png │ ├── web-check-screenshot6.png │ ├── web-check-screenshot7.png │ ├── web-check-screenshot8.png │ └── web-check-screenshot9.png ├── web-check-logo.png └── workflows │ ├── credits.yml │ ├── deploy-aws.yml │ ├── docker.yml │ └── mirror.yml ├── .gitignore ├── Dockerfile ├── LICENSE ├── api ├── _common │ ├── aws-webpack.config.js │ └── middleware.js ├── archives.js ├── block-lists.js ├── carbon.js ├── cookies.js ├── dns-server.js ├── dns.js ├── dnssec.js ├── features.js ├── firewall.js ├── get-ip.js ├── headers.js ├── hsts.js ├── http-security.js ├── legacy-rank.js ├── linked-pages.js ├── mail-config.js ├── ports.js ├── quality.js ├── rank.js ├── redirects.js ├── robots-txt.js ├── screenshot.js ├── security-txt.js ├── sitemap.js ├── social-tags.js ├── ssl.js ├── status.js ├── tech-stack.js ├── threats.js ├── tls.js ├── trace-route.js ├── txt-records.js └── whois.js ├── astro.config.mjs ├── docker-compose.yml ├── fly.toml ├── netlify.toml ├── package.json ├── public ├── android-chrome-192x192.png ├── android-chrome-512x512.png ├── apple-touch-icon.png ├── assets │ ├── badges │ │ ├── dockerhub.svg │ │ ├── github.svg │ │ ├── sponsor.svg │ │ └── webcheck.svg │ └── images │ │ ├── background-dots.svg │ │ ├── docker.svg │ │ ├── fly.svg │ │ ├── github.svg │ │ ├── netlify.svg │ │ ├── swagger.svg │ │ ├── vercel.svg │ │ └── webauthn.svg ├── banner.png ├── error.html ├── favicon-16x16.png ├── favicon-32x32.png ├── favicon.ico ├── favicon.svg ├── fonts │ ├── Hubot-Sans │ │ ├── Hubot-Sans.ttf │ │ ├── Hubot-Sans.woff2 │ │ ├── LICENSE │ │ ├── OTF │ │ │ ├── HubotSans-Black.otf │ │ │ ├── HubotSans-BlackItalic.otf │ │ │ ├── HubotSans-Bold.otf │ │ │ ├── HubotSans-BoldItalic.otf │ │ │ ├── HubotSans-ExtraBold.otf │ │ │ ├── HubotSans-ExtraBoldItalic.otf │ │ │ ├── HubotSans-ExtraLight.otf │ │ │ ├── HubotSans-ExtraLightItalic.otf │ │ │ ├── HubotSans-Italic.otf │ │ │ ├── HubotSans-Light.otf │ │ │ ├── HubotSans-LightItalic.otf │ │ │ ├── HubotSans-Medium.otf │ │ │ ├── HubotSans-MediumItalic.otf │ │ │ ├── HubotSans-Regular.otf │ │ │ ├── HubotSans-SemiBold.otf │ │ │ ├── HubotSans-SemiBoldItalic.otf │ │ │ ├── HubotSansCondensed-Black.otf │ │ │ ├── HubotSansCondensed-BlackItalic.otf │ │ │ ├── HubotSansCondensed-Bold.otf │ │ │ ├── HubotSansCondensed-BoldItalic.otf │ │ │ ├── HubotSansCondensed-ExtraBold.otf │ │ │ ├── HubotSansCondensed-ExtraBoldItalic.otf │ │ │ ├── HubotSansCondensed-ExtraLight.otf │ │ │ ├── HubotSansCondensed-ExtraLightItalic.otf │ │ │ ├── HubotSansCondensed-Italic.otf │ │ │ ├── HubotSansCondensed-Light.otf │ │ │ ├── HubotSansCondensed-LightItalic.otf │ │ │ ├── HubotSansCondensed-Medium.otf │ │ │ ├── HubotSansCondensed-MediumItalic.otf │ │ │ ├── HubotSansCondensed-Regular.otf │ │ │ ├── HubotSansCondensed-SemiBold.otf │ │ │ ├── HubotSansCondensed-SemiBoldItalic.otf │ │ │ ├── HubotSansExpanded-Black.otf │ │ │ ├── HubotSansExpanded-BlackItalic.otf │ │ │ ├── HubotSansExpanded-Bold.otf │ │ │ ├── HubotSansExpanded-BoldItalic.otf │ │ │ ├── HubotSansExpanded-ExtraBold.otf │ │ │ ├── HubotSansExpanded-ExtraBoldItalic.otf │ │ │ ├── HubotSansExpanded-ExtraLight.otf │ │ │ ├── HubotSansExpanded-ExtraLightItalic.otf │ │ │ ├── HubotSansExpanded-Italic.otf │ │ │ ├── HubotSansExpanded-Light.otf │ │ │ ├── HubotSansExpanded-LightItalic.otf │ │ │ ├── HubotSansExpanded-Medium.otf │ │ │ ├── HubotSansExpanded-MediumItalic.otf │ │ │ ├── HubotSansExpanded-Regular.otf │ │ │ ├── HubotSansExpanded-SemiBold.otf │ │ │ └── HubotSansExpanded-SemiBoldItalic.otf │ │ ├── TTF │ │ │ ├── HubotSans-Black.ttf │ │ │ ├── HubotSans-BlackItalic.ttf │ │ │ ├── HubotSans-Bold.ttf │ │ │ ├── HubotSans-BoldItalic.ttf │ │ │ ├── HubotSans-ExtraBold.ttf │ │ │ ├── HubotSans-ExtraBoldItalic.ttf │ │ │ ├── HubotSans-ExtraLight.ttf │ │ │ ├── HubotSans-ExtraLightItalic.ttf │ │ │ ├── HubotSans-Italic.ttf │ │ │ ├── HubotSans-Light.ttf │ │ │ ├── HubotSans-LightItalic.ttf │ │ │ ├── HubotSans-Medium.ttf │ │ │ ├── HubotSans-MediumItalic.ttf │ │ │ ├── HubotSans-Regular.ttf │ │ │ ├── HubotSans-SemiBold.ttf │ │ │ ├── HubotSans-SemiBoldItalic.ttf │ │ │ ├── HubotSansCondensed-Black.ttf │ │ │ ├── HubotSansCondensed-BlackItalic.ttf │ │ │ ├── HubotSansCondensed-Bold.ttf │ │ │ ├── HubotSansCondensed-BoldItalic.ttf │ │ │ ├── HubotSansCondensed-ExtraBold.ttf │ │ │ ├── HubotSansCondensed-ExtraBoldItalic.ttf │ │ │ ├── HubotSansCondensed-ExtraLight.ttf │ │ │ ├── HubotSansCondensed-ExtraLightItalic.ttf │ │ │ ├── HubotSansCondensed-Italic.ttf │ │ │ ├── HubotSansCondensed-Light.ttf │ │ │ ├── HubotSansCondensed-LightItalic.ttf │ │ │ ├── HubotSansCondensed-Medium.ttf │ │ │ ├── HubotSansCondensed-MediumItalic.ttf │ │ │ ├── HubotSansCondensed-Regular.ttf │ │ │ ├── HubotSansCondensed-SemiBold.ttf │ │ │ ├── HubotSansCondensed-SemiBoldItalic.ttf │ │ │ ├── HubotSansExpanded-Black.ttf │ │ │ ├── HubotSansExpanded-BlackItalic.ttf │ │ │ ├── HubotSansExpanded-Bold.ttf │ │ │ ├── HubotSansExpanded-BoldItalic.ttf │ │ │ ├── HubotSansExpanded-ExtraBold.ttf │ │ │ ├── HubotSansExpanded-ExtraBoldItalic.ttf │ │ │ ├── HubotSansExpanded-ExtraLight.ttf │ │ │ ├── HubotSansExpanded-ExtraLightItalic.ttf │ │ │ ├── HubotSansExpanded-Italic.ttf │ │ │ ├── HubotSansExpanded-Light.ttf │ │ │ ├── HubotSansExpanded-LightItalic.ttf │ │ │ ├── HubotSansExpanded-Medium.ttf │ │ │ ├── HubotSansExpanded-MediumItalic.ttf │ │ │ ├── HubotSansExpanded-Regular.ttf │ │ │ ├── HubotSansExpanded-SemiBold.ttf │ │ │ └── HubotSansExpanded-SemiBoldItalic.ttf │ │ └── WOFF2 │ │ │ ├── HubotSans-Black.woff2 │ │ │ ├── HubotSans-BlackItalic.woff2 │ │ │ ├── HubotSans-Bold.woff2 │ │ │ ├── HubotSans-BoldItalic.woff2 │ │ │ ├── HubotSans-ExtraBold.woff2 │ │ │ ├── HubotSans-ExtraBoldItalic.woff2 │ │ │ ├── HubotSans-ExtraLight.woff2 │ │ │ ├── HubotSans-ExtraLightItalic.woff2 │ │ │ ├── HubotSans-Italic.woff2 │ │ │ ├── HubotSans-Light.woff2 │ │ │ ├── HubotSans-LightItalic.woff2 │ │ │ ├── HubotSans-Medium.woff2 │ │ │ ├── HubotSans-MediumItalic.woff2 │ │ │ ├── HubotSans-Regular.woff2 │ │ │ ├── HubotSans-SemiBold.woff2 │ │ │ ├── HubotSans-SemiBoldItalic.woff2 │ │ │ ├── HubotSansCondensed-Black.woff2 │ │ │ ├── HubotSansCondensed-BlackItalic.woff2 │ │ │ ├── HubotSansCondensed-Bold.woff2 │ │ │ ├── HubotSansCondensed-BoldItalic.woff2 │ │ │ ├── HubotSansCondensed-ExtraBold.woff2 │ │ │ ├── HubotSansCondensed-ExtraBoldItalic.woff2 │ │ │ ├── HubotSansCondensed-ExtraLight.woff2 │ │ │ ├── HubotSansCondensed-ExtraLightItalic.woff2 │ │ │ ├── HubotSansCondensed-Italic.woff2 │ │ │ ├── HubotSansCondensed-Light.woff2 │ │ │ ├── HubotSansCondensed-LightItalic.woff2 │ │ │ ├── HubotSansCondensed-Medium.woff2 │ │ │ ├── HubotSansCondensed-MediumItalic.woff2 │ │ │ ├── HubotSansCondensed-Regular.woff2 │ │ │ ├── HubotSansCondensed-SemiBold.woff2 │ │ │ ├── HubotSansCondensed-SemiBoldItalic.woff2 │ │ │ ├── HubotSansExpanded-Black.woff2 │ │ │ ├── HubotSansExpanded-BlackItalic.woff2 │ │ │ ├── HubotSansExpanded-Bold.woff2 │ │ │ ├── HubotSansExpanded-BoldItalic.woff2 │ │ │ ├── HubotSansExpanded-ExtraBold.woff2 │ │ │ ├── HubotSansExpanded-ExtraBoldItalic.woff2 │ │ │ ├── HubotSansExpanded-ExtraLight.woff2 │ │ │ ├── HubotSansExpanded-ExtraLightItalic.woff2 │ │ │ ├── HubotSansExpanded-Italic.woff2 │ │ │ ├── HubotSansExpanded-Light.woff2 │ │ │ ├── HubotSansExpanded-LightItalic.woff2 │ │ │ ├── HubotSansExpanded-Medium.woff2 │ │ │ ├── HubotSansExpanded-MediumItalic.woff2 │ │ │ ├── HubotSansExpanded-Regular.woff2 │ │ │ ├── HubotSansExpanded-SemiBold.woff2 │ │ │ ├── HubotSansExpanded-SemiBoldItalic.woff2 │ │ │ └── HubotSans[slnt,wdth,wght].woff2 │ ├── Inter-Black.ttf │ ├── Inter-Bold.ttf │ ├── Inter-ExtraBold.ttf │ ├── Inter-ExtraLight.ttf │ ├── Inter-Light.ttf │ ├── Inter-Medium.ttf │ ├── Inter-Regular.ttf │ ├── Inter-SemiBold.ttf │ ├── Inter-Thin.ttf │ ├── Inter-VariableFont_slnt,wght.ttf │ └── PTMono-Regular.ttf ├── index.html ├── manifest.json ├── placeholder.html ├── resources │ └── openapi-spec.yml ├── robots.txt ├── security.txt └── web-check.png ├── server.js ├── src ├── components │ ├── homepage │ │ ├── AboutSection.astro │ │ ├── AnimatedButton.astro │ │ ├── AnimatedInput.astro │ │ ├── ButtonGroup.astro │ │ ├── Features.astro │ │ ├── HeroForm.astro │ │ ├── HomeBackground.tsx │ │ ├── Screenshots.astro │ │ ├── SponsorSegment.astro │ │ └── TempDisabled.astro │ ├── molecules │ │ └── Icon.svelte │ └── scafold │ │ ├── Footer.astro │ │ └── Nav.astro ├── env.d.ts ├── layouts │ ├── Base.astro │ └── MetaTags.astro ├── pages │ ├── account │ │ └── index.astro │ ├── check │ │ └── [...target].astro │ ├── index.astro │ ├── self-hosted-setup.astro │ └── web-check-api │ │ ├── index.astro │ │ └── spec.astro ├── styles │ ├── colors.scss │ ├── global.scss │ ├── media-queries.scss │ └── typography.scss └── web-check-live │ ├── App.tsx │ ├── assets │ └── data │ │ └── map-features.json │ ├── components │ ├── Form │ │ ├── Button.tsx │ │ ├── Card.tsx │ │ ├── Heading.tsx │ │ ├── Input.tsx │ │ ├── Modal.tsx │ │ ├── Nav.tsx │ │ └── Row.tsx │ ├── Results │ │ ├── Archives.tsx │ │ ├── BlockLists.tsx │ │ ├── BuiltWith.tsx │ │ ├── CarbonFootprint.tsx │ │ ├── ContentLinks.tsx │ │ ├── Cookies.tsx │ │ ├── DnsRecords.tsx │ │ ├── DnsSec.tsx │ │ ├── DnsServer.tsx │ │ ├── DomainLookup.tsx │ │ ├── Firewall.tsx │ │ ├── Headers.tsx │ │ ├── HostNames.tsx │ │ ├── Hsts.tsx │ │ ├── HttpSecurity.tsx │ │ ├── Lighthouse.tsx │ │ ├── MailConfig.tsx │ │ ├── OpenPorts.tsx │ │ ├── Rank.tsx │ │ ├── Redirects.tsx │ │ ├── RobotsTxt.tsx │ │ ├── Screenshot.tsx │ │ ├── SecurityTxt.tsx │ │ ├── ServerInfo.tsx │ │ ├── ServerLocation.tsx │ │ ├── ServerStatus.tsx │ │ ├── SiteFeatures.tsx │ │ ├── Sitemap.tsx │ │ ├── SocialTags.tsx │ │ ├── SslCert.tsx │ │ ├── TechStack.tsx │ │ ├── Threats.tsx │ │ ├── TlsCipherSuites.tsx │ │ ├── TlsClientSupport.tsx │ │ ├── TlsIssueAnalysis.tsx │ │ ├── TraceRoute.tsx │ │ ├── TxtRecords.tsx │ │ └── WhoIs.tsx │ ├── boundaries │ │ └── PageError.tsx │ └── misc │ │ ├── ActionButtons.tsx │ │ ├── AdditionalResources.tsx │ │ ├── DocContent.tsx │ │ ├── ErrorBoundary.tsx │ │ ├── FancyBackground.tsx │ │ ├── Flag.tsx │ │ ├── Footer.tsx │ │ ├── Loader.tsx │ │ ├── LocationMap.tsx │ │ ├── ProgressBar.tsx │ │ ├── SelfScanMsg.tsx │ │ └── ViewRaw.tsx │ ├── hooks │ └── motherOfAllHooks.ts │ ├── main.tsx │ ├── styles │ ├── colors.ts │ ├── dimensions.ts │ ├── globals.tsx │ ├── index.css │ └── typography.ts │ ├── typings │ ├── file-types.d.ts │ └── react-simple-maps.d.ts │ ├── utils │ ├── address-type-checker.ts │ ├── docs.ts │ ├── get-keys.ts │ └── result-processor.ts │ └── views │ ├── About.tsx │ ├── Home.tsx │ ├── NotFound.tsx │ └── Results.tsx ├── svelte.config.js ├── tsconfig.json ├── vercel.json ├── vite.config.js └── yarn.lock /.env: -------------------------------------------------------------------------------- 1 | # Environmental Variables can be stored here 2 | # Be sure to uncomment any line you populate 3 | # Everything is optional, but some features won't work without external API access 4 | 5 | # API Keys for external services (backend) 6 | GOOGLE_CLOUD_API_KEY='' 7 | TORRENT_IP_API_KEY='' 8 | SECURITY_TRAILS_API_KEY='' 9 | BUILT_WITH_API_KEY='' 10 | URL_SCAN_API_KEY='' 11 | TRANCO_USERNAME='' 12 | TRANCO_API_KEY='' 13 | CLOUDMERSIVE_API_KEY='' 14 | 15 | # API Keys for external services (frontend) 16 | REACT_APP_SHODAN_API_KEY='' 17 | REACT_APP_WHO_API_KEY='' 18 | 19 | # Configuration settings 20 | # CHROME_PATH='/usr/bin/chromium' # The path the the Chromium executable 21 | # PORT='3000' # Port to serve the API, when running server.js 22 | # DISABLE_GUI='false' # Disable the GUI, and only serve the API 23 | # API_TIMEOUT_LIMIT='10000' # The timeout limit for API requests, in milliseconds 24 | # API_CORS_ORIGIN='*' # Enable CORS, by setting your allowed hostname(s) here 25 | # API_ENABLE_RATE_LIMIT='true' # Enable rate limiting for the API 26 | # REACT_APP_API_ENDPOINT='/api' # The endpoint for the API (can be local or remote) 27 | # ENABLE_ANALYTICS='false' # Enable Plausible hit counter for the frontend 28 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [lissy93] 2 | -------------------------------------------------------------------------------- /.github/screenshots/README.md: -------------------------------------------------------------------------------- 1 | ![Screenshot](https://raw.githubusercontent.com/Lissy93/web-check/HEAD/.github/screenshots/web-check-screenshot3.png) 2 | -------------------------------------------------------------------------------- /.github/screenshots/tiles/archives.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/archives.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/block-lists.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/block-lists.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/carbon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/carbon.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/cookies.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/cookies.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/dns-server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/dns-server.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/dns.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/dns.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/dnssec.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/dnssec.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/domain.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/domain.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/email-config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/email-config.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/features.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/features.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/firewall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/firewall.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/headers.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/headers.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/hosts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/hosts.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/hsts.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/hsts.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/http-security.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/http-security.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/linked-pages.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/linked-pages.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/location.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/ports.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/ports.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/quality.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/quality.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/ranking.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/ranking.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/redirects.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/redirects.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/robots.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/robots.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/screenshot.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/security-txt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/security-txt.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/server.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/server.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/sitemap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/sitemap.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/social-tags.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/social-tags.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/ssl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/ssl.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/status.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/status.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/tech-stack.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/tech-stack.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/threats.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/threats.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/tls-cipher-suites.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/tls-cipher-suites.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/tls-handshake-simulation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/tls-handshake-simulation.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/tls-security-config.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/tls-security-config.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/trace-route.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/trace-route.png -------------------------------------------------------------------------------- /.github/screenshots/tiles/txt-records.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/tiles/txt-records.png -------------------------------------------------------------------------------- /.github/screenshots/web-check-screenshot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/web-check-screenshot1.png -------------------------------------------------------------------------------- /.github/screenshots/web-check-screenshot10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/web-check-screenshot10.png -------------------------------------------------------------------------------- /.github/screenshots/web-check-screenshot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/web-check-screenshot2.png -------------------------------------------------------------------------------- /.github/screenshots/web-check-screenshot3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/web-check-screenshot3.png -------------------------------------------------------------------------------- /.github/screenshots/web-check-screenshot4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/web-check-screenshot4.png -------------------------------------------------------------------------------- /.github/screenshots/web-check-screenshot5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/web-check-screenshot5.png -------------------------------------------------------------------------------- /.github/screenshots/web-check-screenshot6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/web-check-screenshot6.png -------------------------------------------------------------------------------- /.github/screenshots/web-check-screenshot7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/web-check-screenshot7.png -------------------------------------------------------------------------------- /.github/screenshots/web-check-screenshot8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/web-check-screenshot8.png -------------------------------------------------------------------------------- /.github/screenshots/web-check-screenshot9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/screenshots/web-check-screenshot9.png -------------------------------------------------------------------------------- /.github/web-check-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/.github/web-check-logo.png -------------------------------------------------------------------------------- /.github/workflows/credits.yml: -------------------------------------------------------------------------------- 1 | # Inserts list of community members into ./README.md 2 | name: 💓 Inserts Contributors & Sponsors 3 | on: 4 | workflow_dispatch: # Manual dispatch 5 | schedule: 6 | - cron: '45 1 * * 0' # At 01:45 on Sunday. 7 | 8 | jobs: 9 | # Job #1 - Fetches sponsors and inserts table into readme 10 | insert-sponsors: 11 | runs-on: ubuntu-latest 12 | name: Inserts Sponsors 💓 13 | steps: 14 | - name: Checkout 15 | uses: actions/checkout@v4 16 | - name: Updates readme with sponsors 17 | uses: JamesIves/github-sponsors-readme-action@v1 18 | with: 19 | token: ${{ secrets.BOT_TOKEN || secrets.GITHUB_TOKEN }} 20 | file: .github/README.md 21 | 22 | # Job #2 - Fetches contributors and inserts table into readme 23 | insert-contributors: 24 | runs-on: ubuntu-latest 25 | name: Inserts Contributors 💓 26 | steps: 27 | - name: Updates readme with contributors 28 | uses: akhilmhdh/contributors-readme-action@v2.3.10 29 | env: 30 | GITHUB_TOKEN: ${{ secrets.BOT_TOKEN || secrets.GITHUB_TOKEN }} 31 | with: 32 | image_size: 80 33 | readme_path: .github/README.md 34 | columns_per_row: 6 35 | commit_message: 'docs: Updates contributors list' 36 | committer_username: liss-bot 37 | committer_email: liss-bot@d0h.co 38 | -------------------------------------------------------------------------------- /.github/workflows/mirror.yml: -------------------------------------------------------------------------------- 1 | # Pushes the contents of the repo to the Codeberg mirror 2 | name: 🪞 Mirror to Codeberg 3 | on: 4 | workflow_dispatch: 5 | schedule: 6 | - cron: '30 0 * * 0' 7 | jobs: 8 | codeberg: 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v4 12 | with: { fetch-depth: 0 } 13 | - uses: pixta-dev/repository-mirroring-action@v1 14 | with: 15 | target_repo_url: git@codeberg.org:alicia/web-check.git 16 | ssh_private_key: ${{ secrets.CODEBERG_SSH }} 17 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # ------------------------ 2 | # ENVIRONMENT SETTINGS 3 | # ------------------------ 4 | .env 5 | 6 | # ------------------------ 7 | # PRODUCTION 8 | # ------------------------ 9 | /build/ 10 | 11 | # ------------------------ 12 | # BUILT FILES 13 | # ------------------------ 14 | dist/ 15 | .vercel/ 16 | .netlify/ 17 | .webpack/ 18 | .serverless/ 19 | .astro/ 20 | 21 | # ------------------------ 22 | # DEPENDENCIES 23 | # ------------------------ 24 | node_modules/ 25 | .yarn/cache/ 26 | .yarn/unplugged/ 27 | .yarn/build-state.yml 28 | .yarn/install-state.gz 29 | .pnpm/ 30 | .pnp.* 31 | 32 | # ------------------------ 33 | # LOGS 34 | # ------------------------ 35 | logs/ 36 | *.log 37 | npm-debug.log* 38 | yarn-debug.log* 39 | yarn-error.log* 40 | lerna-debug.log* 41 | .pnpm-debug.log* 42 | 43 | # ------------------------ 44 | # TESTING 45 | # ------------------------ 46 | coverage/ 47 | .nyc_output/ 48 | 49 | # ------------------------ 50 | # OS SPECIFIC 51 | # ------------------------ 52 | .DS_Store 53 | Thumbs.db 54 | 55 | # ------------------------ 56 | # EDITORS 57 | # ------------------------ 58 | .idea/ 59 | .vscode/ 60 | *.swp 61 | *.swo 62 | 63 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Alicia Sykes 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /api/_common/aws-webpack.config.js: -------------------------------------------------------------------------------- 1 | const path = require('path'); 2 | const nodeExternals = require('webpack-node-externals'); 3 | 4 | module.exports = { 5 | target: 'node', 6 | mode: 'production', 7 | entry: { 8 | 'carbon': './api/carbon.js', 9 | 'cookies': './api/cookies.js', 10 | 'dns-server': './api/dns-server.js', 11 | 'dns': './api/dns.js', 12 | 'dnssec': './api/dnssec.js', 13 | 'features': './api/features.js', 14 | 'get-ip': './api/get-ip.js', 15 | 'headers': './api/headers.js', 16 | 'hsts': './api/hsts.js', 17 | 'linked-pages': './api/linked-pages.js', 18 | 'mail-config': './api/mail-config.js', 19 | 'ports': './api/ports.js', 20 | 'quality': './api/quality.js', 21 | 'redirects': './api/redirects.js', 22 | 'robots-txt': './api/robots-txt.js', 23 | 'screenshot': './api/screenshot.js', 24 | 'security-txt': './api/security-txt.js', 25 | 'sitemap': './api/sitemap.js', 26 | 'social-tags': './api/social-tags.js', 27 | 'ssl': './api/ssl.js', 28 | 'status': './api/status.js', 29 | 'tech-stack': './api/tech-stack.js', 30 | 'trace-route': './api/trace-route.js', 31 | 'txt-records': './api/txt-records.js', 32 | 'whois': './api/whois.js', 33 | }, 34 | externals: [nodeExternals()], 35 | output: { 36 | filename: '[name].js', 37 | path: path.resolve(__dirname, '.webpack'), 38 | libraryTarget: 'commonjs2' 39 | }, 40 | module: { 41 | rules: [ 42 | { 43 | test: /\.js$/, 44 | use: { 45 | loader: 'babel-loader' 46 | }, 47 | exclude: /node_modules/, 48 | } 49 | ] 50 | } 51 | }; 52 | -------------------------------------------------------------------------------- /api/carbon.js: -------------------------------------------------------------------------------- 1 | import https from 'https'; 2 | import middleware from './_common/middleware.js'; 3 | 4 | const carbonHandler = async (url) => { 5 | 6 | // First, get the size of the website's HTML 7 | const getHtmlSize = (url) => new Promise((resolve, reject) => { 8 | https.get(url, res => { 9 | let data = ''; 10 | res.on('data', chunk => { 11 | data += chunk; 12 | }); 13 | res.on('end', () => { 14 | const sizeInBytes = Buffer.byteLength(data, 'utf8'); 15 | resolve(sizeInBytes); 16 | }); 17 | }).on('error', reject); 18 | }); 19 | 20 | try { 21 | const sizeInBytes = await getHtmlSize(url); 22 | const apiUrl = `https://api.websitecarbon.com/data?bytes=${sizeInBytes}&green=0`; 23 | 24 | // Then use that size to get the carbon data 25 | const carbonData = await new Promise((resolve, reject) => { 26 | https.get(apiUrl, res => { 27 | let data = ''; 28 | res.on('data', chunk => { 29 | data += chunk; 30 | }); 31 | res.on('end', () => { 32 | resolve(JSON.parse(data)); 33 | }); 34 | }).on('error', reject); 35 | }); 36 | 37 | if (!carbonData.statistics || (carbonData.statistics.adjustedBytes === 0 && carbonData.statistics.energy === 0)) { 38 | return { 39 | statusCode: 200, 40 | body: JSON.stringify({ skipped: 'Not enough info to get carbon data' }), 41 | }; 42 | } 43 | 44 | carbonData.scanUrl = url; 45 | return carbonData; 46 | } catch (error) { 47 | throw new Error(`Error: ${error.message}`); 48 | } 49 | }; 50 | 51 | export const handler = middleware(carbonHandler); 52 | export default handler; 53 | -------------------------------------------------------------------------------- /api/cookies.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import puppeteer from 'puppeteer'; 3 | import middleware from './_common/middleware.js'; 4 | 5 | const getPuppeteerCookies = async (url) => { 6 | const browser = await puppeteer.launch({ 7 | headless: 'new', 8 | args: ['--no-sandbox', '--disable-setuid-sandbox'], 9 | }); 10 | 11 | try { 12 | const page = await browser.newPage(); 13 | const navigationPromise = page.goto(url, { waitUntil: 'networkidle2' }); 14 | const timeoutPromise = new Promise((_, reject) => 15 | setTimeout(() => reject(new Error('Puppeteer took too long!')), 3000) 16 | ); 17 | await Promise.race([navigationPromise, timeoutPromise]); 18 | return await page.cookies(); 19 | } finally { 20 | await browser.close(); 21 | } 22 | }; 23 | 24 | const cookieHandler = async (url) => { 25 | let headerCookies = null; 26 | let clientCookies = null; 27 | 28 | try { 29 | const response = await axios.get(url, { 30 | withCredentials: true, 31 | maxRedirects: 5, 32 | }); 33 | headerCookies = response.headers['set-cookie']; 34 | } catch (error) { 35 | if (error.response) { 36 | return { error: `Request failed with status ${error.response.status}: ${error.message}` }; 37 | } else if (error.request) { 38 | return { error: `No response received: ${error.message}` }; 39 | } else { 40 | return { error: `Error setting up request: ${error.message}` }; 41 | } 42 | } 43 | 44 | try { 45 | clientCookies = await getPuppeteerCookies(url); 46 | } catch (_) { 47 | clientCookies = null; 48 | } 49 | 50 | if (!headerCookies && (!clientCookies || clientCookies.length === 0)) { 51 | return { skipped: 'No cookies' }; 52 | } 53 | 54 | return { headerCookies, clientCookies }; 55 | }; 56 | 57 | export const handler = middleware(cookieHandler); 58 | export default handler; 59 | -------------------------------------------------------------------------------- /api/dns-server.js: -------------------------------------------------------------------------------- 1 | import { promises as dnsPromises, lookup } from 'dns'; 2 | import axios from 'axios'; 3 | import middleware from './_common/middleware.js'; 4 | 5 | const dnsHandler = async (url) => { 6 | try { 7 | const domain = url.replace(/^(?:https?:\/\/)?/i, ""); 8 | const addresses = await dnsPromises.resolve4(domain); 9 | const results = await Promise.all(addresses.map(async (address) => { 10 | const hostname = await dnsPromises.reverse(address).catch(() => null); 11 | let dohDirectSupports = false; 12 | try { 13 | await axios.get(`https://${address}/dns-query`); 14 | dohDirectSupports = true; 15 | } catch (error) { 16 | dohDirectSupports = false; 17 | } 18 | return { 19 | address, 20 | hostname, 21 | dohDirectSupports, 22 | }; 23 | })); 24 | 25 | // let dohMozillaSupport = false; 26 | // try { 27 | // const mozillaList = await axios.get('https://firefox.settings.services.mozilla.com/v1/buckets/security-state/collections/onecrl/records'); 28 | // dohMozillaSupport = results.some(({ hostname }) => mozillaList.data.data.some(({ id }) => id.includes(hostname))); 29 | // } catch (error) { 30 | // console.error(error); 31 | // } 32 | 33 | return { 34 | domain, 35 | dns: results, 36 | // dohMozillaSupport, 37 | }; 38 | } catch (error) { 39 | throw new Error(`An error occurred while resolving DNS. ${error.message}`); // This will be caught and handled by the commonMiddleware 40 | } 41 | }; 42 | 43 | 44 | export const handler = middleware(dnsHandler); 45 | export default handler; 46 | 47 | -------------------------------------------------------------------------------- /api/dns.js: -------------------------------------------------------------------------------- 1 | import dns from 'dns'; 2 | import util from 'util'; 3 | import middleware from './_common/middleware.js'; 4 | 5 | const dnsHandler = async (url) => { 6 | let hostname = url; 7 | 8 | // Handle URLs by extracting hostname 9 | if (hostname.startsWith('http://') || hostname.startsWith('https://')) { 10 | hostname = new URL(hostname).hostname; 11 | } 12 | 13 | try { 14 | const lookupPromise = util.promisify(dns.lookup); 15 | const resolve4Promise = util.promisify(dns.resolve4); 16 | const resolve6Promise = util.promisify(dns.resolve6); 17 | const resolveMxPromise = util.promisify(dns.resolveMx); 18 | const resolveTxtPromise = util.promisify(dns.resolveTxt); 19 | const resolveNsPromise = util.promisify(dns.resolveNs); 20 | const resolveCnamePromise = util.promisify(dns.resolveCname); 21 | const resolveSoaPromise = util.promisify(dns.resolveSoa); 22 | const resolveSrvPromise = util.promisify(dns.resolveSrv); 23 | const resolvePtrPromise = util.promisify(dns.resolvePtr); 24 | 25 | const [a, aaaa, mx, txt, ns, cname, soa, srv, ptr] = await Promise.all([ 26 | lookupPromise(hostname), 27 | resolve4Promise(hostname).catch(() => []), // A record 28 | resolve6Promise(hostname).catch(() => []), // AAAA record 29 | resolveMxPromise(hostname).catch(() => []), // MX record 30 | resolveTxtPromise(hostname).catch(() => []), // TXT record 31 | resolveNsPromise(hostname).catch(() => []), // NS record 32 | resolveCnamePromise(hostname).catch(() => []), // CNAME record 33 | resolveSoaPromise(hostname).catch(() => []), // SOA record 34 | resolveSrvPromise(hostname).catch(() => []), // SRV record 35 | resolvePtrPromise(hostname).catch(() => []) // PTR record 36 | ]); 37 | 38 | return { 39 | A: a, 40 | AAAA: aaaa, 41 | MX: mx, 42 | TXT: txt, 43 | NS: ns, 44 | CNAME: cname, 45 | SOA: soa, 46 | SRV: srv, 47 | PTR: ptr 48 | }; 49 | } catch (error) { 50 | throw new Error(error.message); 51 | } 52 | }; 53 | 54 | export const handler = middleware(dnsHandler); 55 | export default handler; 56 | -------------------------------------------------------------------------------- /api/dnssec.js: -------------------------------------------------------------------------------- 1 | import https from 'https'; 2 | import middleware from './_common/middleware.js'; 3 | 4 | const dnsSecHandler = async (domain) => { 5 | const dnsTypes = ['DNSKEY', 'DS', 'RRSIG']; 6 | const records = {}; 7 | 8 | for (const type of dnsTypes) { 9 | const options = { 10 | hostname: 'dns.google', 11 | path: `/resolve?name=${encodeURIComponent(domain)}&type=${type}`, 12 | method: 'GET', 13 | headers: { 14 | 'Accept': 'application/dns-json' 15 | } 16 | }; 17 | 18 | try { 19 | const dnsResponse = await new Promise((resolve, reject) => { 20 | const req = https.request(options, res => { 21 | let data = ''; 22 | 23 | res.on('data', chunk => { 24 | data += chunk; 25 | }); 26 | 27 | res.on('end', () => { 28 | try { 29 | resolve(JSON.parse(data)); 30 | } catch (error) { 31 | reject(new Error('Invalid JSON response')); 32 | } 33 | }); 34 | 35 | res.on('error', error => { 36 | reject(error); 37 | }); 38 | }); 39 | 40 | req.end(); 41 | }); 42 | 43 | if (dnsResponse.Answer) { 44 | records[type] = { isFound: true, answer: dnsResponse.Answer, response: dnsResponse.Answer }; 45 | } else { 46 | records[type] = { isFound: false, answer: null, response: dnsResponse }; 47 | } 48 | } catch (error) { 49 | throw new Error(`Error fetching ${type} record: ${error.message}`); // This will be caught and handled by the commonMiddleware 50 | } 51 | } 52 | 53 | return records; 54 | }; 55 | 56 | export const handler = middleware(dnsSecHandler); 57 | export default handler; 58 | -------------------------------------------------------------------------------- /api/features.js: -------------------------------------------------------------------------------- 1 | import https from 'https'; 2 | import middleware from './_common/middleware.js'; 3 | 4 | const featuresHandler = async (url) => { 5 | const apiKey = process.env.BUILT_WITH_API_KEY; 6 | 7 | if (!url) { 8 | throw new Error('URL query parameter is required'); 9 | } 10 | 11 | if (!apiKey) { 12 | throw new Error('Missing BuiltWith API key in environment variables'); 13 | } 14 | 15 | const apiUrl = `https://api.builtwith.com/free1/api.json?KEY=${apiKey}&LOOKUP=${encodeURIComponent(url)}`; 16 | 17 | try { 18 | const response = await new Promise((resolve, reject) => { 19 | const req = https.get(apiUrl, res => { 20 | let data = ''; 21 | 22 | res.on('data', chunk => { 23 | data += chunk; 24 | }); 25 | 26 | res.on('end', () => { 27 | if (res.statusCode >= 200 && res.statusCode <= 299) { 28 | resolve(data); 29 | } else { 30 | reject(new Error(`Request failed with status code: ${res.statusCode}`)); 31 | } 32 | }); 33 | }); 34 | 35 | req.on('error', error => { 36 | reject(error); 37 | }); 38 | 39 | req.end(); 40 | }); 41 | 42 | return response; 43 | } catch (error) { 44 | throw new Error(`Error making request: ${error.message}`); 45 | } 46 | }; 47 | 48 | export const handler = middleware(featuresHandler); 49 | export default handler; 50 | -------------------------------------------------------------------------------- /api/get-ip.js: -------------------------------------------------------------------------------- 1 | import dns from 'dns'; 2 | import middleware from './_common/middleware.js'; 3 | 4 | const lookupAsync = (address) => { 5 | return new Promise((resolve, reject) => { 6 | dns.lookup(address, (err, ip, family) => { 7 | if (err) { 8 | reject(err); 9 | } else { 10 | resolve({ ip, family }); 11 | } 12 | }); 13 | }); 14 | }; 15 | 16 | const ipHandler = async (url) => { 17 | const address = url.replaceAll('https://', '').replaceAll('http://', ''); 18 | return await lookupAsync(address); 19 | }; 20 | 21 | 22 | export const handler = middleware(ipHandler); 23 | export default handler; 24 | -------------------------------------------------------------------------------- /api/headers.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import middleware from './_common/middleware.js'; 3 | 4 | const headersHandler = async (url, event, context) => { 5 | try { 6 | const response = await axios.get(url, { 7 | validateStatus: function (status) { 8 | return status >= 200 && status < 600; // Resolve only if the status code is less than 600 9 | }, 10 | }); 11 | 12 | return response.headers; 13 | } catch (error) { 14 | throw new Error(error.message); 15 | } 16 | }; 17 | 18 | export const handler = middleware(headersHandler); 19 | export default handler; 20 | -------------------------------------------------------------------------------- /api/hsts.js: -------------------------------------------------------------------------------- 1 | import https from 'https'; 2 | import middleware from './_common/middleware.js'; 3 | 4 | const hstsHandler = async (url, event, context) => { 5 | const errorResponse = (message, statusCode = 500) => { 6 | return { 7 | statusCode: statusCode, 8 | body: JSON.stringify({ error: message }), 9 | }; 10 | }; 11 | const hstsIncompatible = (message, compatible = false, hstsHeader = null ) => { 12 | return { message, compatible, hstsHeader }; 13 | }; 14 | 15 | 16 | return new Promise((resolve, reject) => { 17 | const req = https.request(url, res => { 18 | const headers = res.headers; 19 | const hstsHeader = headers['strict-transport-security']; 20 | 21 | if (!hstsHeader) { 22 | resolve(hstsIncompatible(`Site does not serve any HSTS headers.`)); 23 | } else { 24 | const maxAgeMatch = hstsHeader.match(/max-age=(\d+)/); 25 | const includesSubDomains = hstsHeader.includes('includeSubDomains'); 26 | const preload = hstsHeader.includes('preload'); 27 | 28 | if (!maxAgeMatch || parseInt(maxAgeMatch[1]) < 10886400) { 29 | resolve(hstsIncompatible(`HSTS max-age is less than 10886400.`)); 30 | } else if (!includesSubDomains) { 31 | resolve(hstsIncompatible(`HSTS header does not include all subdomains.`)); 32 | } else if (!preload) { 33 | resolve(hstsIncompatible(`HSTS header does not contain the preload directive.`)); 34 | } else { 35 | resolve(hstsIncompatible(`Site is compatible with the HSTS preload list!`, true, hstsHeader)); 36 | } 37 | } 38 | }); 39 | 40 | req.on('error', (error) => { 41 | resolve(errorResponse(`Error making request: ${error.message}`)); 42 | }); 43 | 44 | req.end(); 45 | }); 46 | }; 47 | 48 | export const handler = middleware(hstsHandler); 49 | export default handler; 50 | -------------------------------------------------------------------------------- /api/http-security.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import middleware from './_common/middleware.js'; 3 | 4 | const httpsSecHandler = async (url) => { 5 | const fullUrl = url.startsWith('http') ? url : `http://${url}`; 6 | 7 | try { 8 | const response = await axios.get(fullUrl); 9 | const headers = response.headers; 10 | return { 11 | strictTransportPolicy: headers['strict-transport-security'] ? true : false, 12 | xFrameOptions: headers['x-frame-options'] ? true : false, 13 | xContentTypeOptions: headers['x-content-type-options'] ? true : false, 14 | xXSSProtection: headers['x-xss-protection'] ? true : false, 15 | contentSecurityPolicy: headers['content-security-policy'] ? true : false, 16 | } 17 | } catch (error) { 18 | return { 19 | statusCode: 500, 20 | body: JSON.stringify({ error: error.message }), 21 | }; 22 | } 23 | }; 24 | 25 | export const handler = middleware(httpsSecHandler); 26 | export default handler; 27 | -------------------------------------------------------------------------------- /api/legacy-rank.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import unzipper from 'unzipper'; 3 | import csv from 'csv-parser'; 4 | import fs from 'fs'; 5 | import middleware from './_common/middleware.js'; 6 | 7 | // Should also work with the following sources: 8 | // https://www.domcop.com/files/top/top10milliondomains.csv.zip 9 | // https://tranco-list.eu/top-1m.csv.zip 10 | // https://www.domcop.com/files/top/top10milliondomains.csv.zip 11 | // https://radar.cloudflare.com/charts/LargerTopDomainsTable/attachment?id=525&top=1000000 12 | // https://statvoo.com/dl/top-1million-sites.csv.zip 13 | 14 | const FILE_URL = 'https://s3-us-west-1.amazonaws.com/umbrella-static/top-1m.csv.zip'; 15 | const TEMP_FILE_PATH = '/tmp/top-1m.csv'; 16 | 17 | const rankHandler = async (url) => { 18 | let domain = null; 19 | 20 | try { 21 | domain = new URL(url).hostname; 22 | } catch (e) { 23 | throw new Error('Invalid URL'); 24 | } 25 | 26 | // Download and unzip the file if not in cache 27 | if (!fs.existsSync(TEMP_FILE_PATH)) { 28 | const response = await axios({ 29 | method: 'GET', 30 | url: FILE_URL, 31 | responseType: 'stream' 32 | }); 33 | 34 | await new Promise((resolve, reject) => { 35 | response.data 36 | .pipe(unzipper.Extract({ path: '/tmp' })) 37 | .on('close', resolve) 38 | .on('error', reject); 39 | }); 40 | } 41 | 42 | // Parse the CSV and find the rank 43 | return new Promise((resolve, reject) => { 44 | const csvStream = fs.createReadStream(TEMP_FILE_PATH) 45 | .pipe(csv({ 46 | headers: ['rank', 'domain'], 47 | })) 48 | .on('data', (row) => { 49 | if (row.domain === domain) { 50 | csvStream.destroy(); 51 | resolve({ 52 | domain: domain, 53 | rank: row.rank, 54 | isFound: true, 55 | }); 56 | } 57 | }) 58 | .on('end', () => { 59 | resolve({ 60 | skipped: `Skipping, as ${domain} is not present in the Umbrella top 1M list.`, 61 | domain: domain, 62 | isFound: false, 63 | }); 64 | }) 65 | .on('error', reject); 66 | }); 67 | }; 68 | 69 | export const handler = middleware(rankHandler); 70 | export default handler; 71 | -------------------------------------------------------------------------------- /api/linked-pages.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import cheerio from 'cheerio'; 3 | import urlLib from 'url'; 4 | import middleware from './_common/middleware.js'; 5 | 6 | const linkedPagesHandler = async (url) => { 7 | const response = await axios.get(url); 8 | const html = response.data; 9 | const $ = cheerio.load(html); 10 | const internalLinksMap = new Map(); 11 | const externalLinksMap = new Map(); 12 | 13 | // Get all links on the page 14 | $('a[href]').each((i, link) => { 15 | const href = $(link).attr('href'); 16 | const absoluteUrl = urlLib.resolve(url, href); 17 | 18 | // Check if absolute / relative, append to appropriate map or increment occurrence count 19 | if (absoluteUrl.startsWith(url)) { 20 | const count = internalLinksMap.get(absoluteUrl) || 0; 21 | internalLinksMap.set(absoluteUrl, count + 1); 22 | } else if (href.startsWith('http://') || href.startsWith('https://')) { 23 | const count = externalLinksMap.get(absoluteUrl) || 0; 24 | externalLinksMap.set(absoluteUrl, count + 1); 25 | } 26 | }); 27 | 28 | // Sort by most occurrences, remove supplicates, and convert to array 29 | const internalLinks = [...internalLinksMap.entries()].sort((a, b) => b[1] - a[1]).map(entry => entry[0]); 30 | const externalLinks = [...externalLinksMap.entries()].sort((a, b) => b[1] - a[1]).map(entry => entry[0]); 31 | 32 | // If there were no links, then mark as skipped and show reasons 33 | if (internalLinks.length === 0 && externalLinks.length === 0) { 34 | return { 35 | statusCode: 400, 36 | body: { 37 | skipped: 'No internal or external links found. ' 38 | + 'This may be due to the website being dynamically rendered, using a client-side framework (like React), and without SSR enabled. ' 39 | + 'That would mean that the static HTML returned from the HTTP request doesn\'t contain any meaningful content for Web-Check to analyze. ' 40 | + 'You can rectify this by using a headless browser to render the page instead.', 41 | }, 42 | }; 43 | } 44 | 45 | return { internal: internalLinks, external: externalLinks }; 46 | }; 47 | 48 | export const handler = middleware(linkedPagesHandler); 49 | export default handler; 50 | -------------------------------------------------------------------------------- /api/quality.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import middleware from './_common/middleware.js'; 3 | 4 | const qualityHandler = async (url, event, context) => { 5 | const apiKey = process.env.GOOGLE_CLOUD_API_KEY; 6 | 7 | if (!apiKey) { 8 | throw new Error( 9 | 'Missing Google API. You need to set the `GOOGLE_CLOUD_API_KEY` environment variable' 10 | ); 11 | } 12 | 13 | const endpoint = `https://www.googleapis.com/pagespeedonline/v5/runPagespeed?` 14 | + `url=${encodeURIComponent(url)}&category=PERFORMANCE&category=ACCESSIBILITY` 15 | + `&category=BEST_PRACTICES&category=SEO&category=PWA&strategy=mobile` 16 | + `&key=${apiKey}`; 17 | 18 | return (await axios.get(endpoint)).data; 19 | }; 20 | 21 | export const handler = middleware(qualityHandler); 22 | export default handler; 23 | -------------------------------------------------------------------------------- /api/rank.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import middleware from './_common/middleware.js'; 3 | 4 | const rankHandler = async (url) => { 5 | const domain = url ? new URL(url).hostname : null; 6 | if (!domain) throw new Error('Invalid URL'); 7 | 8 | try { 9 | const auth = process.env.TRANCO_API_KEY ? // Auth is optional. 10 | { auth: { username: process.env.TRANCO_USERNAME, password: process.env.TRANCO_API_KEY } } 11 | : {}; 12 | const response = await axios.get( 13 | `https://tranco-list.eu/api/ranks/domain/${domain}`, { timeout: 5000 }, auth, 14 | ); 15 | if (!response.data || !response.data.ranks || response.data.ranks.length === 0) { 16 | return { skipped: `Skipping, as ${domain} isn't ranked in the top 100 million sites yet.`}; 17 | } 18 | return response.data; 19 | } catch (error) { 20 | return { error: `Unable to fetch rank, ${error.message}` }; 21 | } 22 | }; 23 | 24 | export const handler = middleware(rankHandler); 25 | export default handler; 26 | 27 | -------------------------------------------------------------------------------- /api/redirects.js: -------------------------------------------------------------------------------- 1 | import got from 'got'; 2 | import middleware from './_common/middleware.js'; 3 | 4 | const redirectsHandler = async (url) => { 5 | const redirects = [url]; 6 | try { 7 | await got(url, { 8 | followRedirect: true, 9 | maxRedirects: 12, 10 | hooks: { 11 | beforeRedirect: [ 12 | (options, response) => { 13 | redirects.push(response.headers.location); 14 | }, 15 | ], 16 | }, 17 | }); 18 | 19 | return { 20 | redirects: redirects, 21 | }; 22 | } catch (error) { 23 | throw new Error(`Error: ${error.message}`); 24 | } 25 | }; 26 | 27 | export const handler = middleware(redirectsHandler); 28 | export default handler; 29 | -------------------------------------------------------------------------------- /api/robots-txt.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import middleware from './_common/middleware.js'; 3 | 4 | const parseRobotsTxt = (content) => { 5 | const lines = content.split('\n'); 6 | const rules = []; 7 | 8 | lines.forEach(line => { 9 | line = line.trim(); // This removes trailing and leading whitespaces 10 | 11 | let match = line.match(/^(Allow|Disallow):\s*(\S*)$/i); 12 | if (match) { 13 | const rule = { 14 | lbl: match[1], 15 | val: match[2], 16 | }; 17 | 18 | rules.push(rule); 19 | } else { 20 | match = line.match(/^(User-agent):\s*(\S*)$/i); 21 | if (match) { 22 | const rule = { 23 | lbl: match[1], 24 | val: match[2], 25 | }; 26 | 27 | rules.push(rule); 28 | } 29 | } 30 | }); 31 | return { robots: rules }; 32 | } 33 | 34 | const robotsHandler = async function(url) { 35 | let parsedURL; 36 | try { 37 | parsedURL = new URL(url); 38 | } catch (error) { 39 | return { 40 | statusCode: 400, 41 | body: JSON.stringify({ error: 'Invalid url query parameter' }), 42 | }; 43 | } 44 | 45 | const robotsURL = `${parsedURL.protocol}//${parsedURL.hostname}/robots.txt`; 46 | 47 | try { 48 | const response = await axios.get(robotsURL); 49 | 50 | if (response.status === 200) { 51 | const parsedData = parseRobotsTxt(response.data); 52 | if (!parsedData.robots || parsedData.robots.length === 0) { 53 | return { skipped: 'No robots.txt file present, unable to continue' }; 54 | } 55 | return parsedData; 56 | } else { 57 | return { 58 | statusCode: response.status, 59 | body: JSON.stringify({ error: 'Failed to fetch robots.txt', statusCode: response.status }), 60 | }; 61 | } 62 | } catch (error) { 63 | return { 64 | statusCode: 500, 65 | body: JSON.stringify({ error: `Error fetching robots.txt: ${error.message}` }), 66 | }; 67 | } 68 | }; 69 | 70 | export const handler = middleware(robotsHandler); 71 | export default handler; 72 | -------------------------------------------------------------------------------- /api/sitemap.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import xml2js from 'xml2js'; 3 | import middleware from './_common/middleware.js'; 4 | 5 | const sitemapHandler = async (url) => { 6 | let sitemapUrl = `${url}/sitemap.xml`; 7 | 8 | const hardTimeOut = 5000; 9 | 10 | try { 11 | // Try to fetch sitemap directly 12 | let sitemapRes; 13 | try { 14 | sitemapRes = await axios.get(sitemapUrl, { timeout: hardTimeOut }); 15 | } catch (error) { 16 | if (error.response && error.response.status === 404) { 17 | // If sitemap not found, try to fetch it from robots.txt 18 | const robotsRes = await axios.get(`${url}/robots.txt`, { timeout: hardTimeOut }); 19 | const robotsTxt = robotsRes.data.split('\n'); 20 | 21 | for (let line of robotsTxt) { 22 | if (line.toLowerCase().startsWith('sitemap:')) { 23 | sitemapUrl = line.split(' ')[1].trim(); 24 | break; 25 | } 26 | } 27 | 28 | if (!sitemapUrl) { 29 | return { skipped: 'No sitemap found' }; 30 | } 31 | 32 | sitemapRes = await axios.get(sitemapUrl, { timeout: hardTimeOut }); 33 | } else { 34 | throw error; // If other error, throw it 35 | } 36 | } 37 | 38 | const parser = new xml2js.Parser(); 39 | const sitemap = await parser.parseStringPromise(sitemapRes.data); 40 | 41 | return sitemap; 42 | } catch (error) { 43 | if (error.code === 'ECONNABORTED') { 44 | return { error: `Request timed-out after ${hardTimeOut}ms` }; 45 | } else { 46 | return { error: error.message }; 47 | } 48 | } 49 | }; 50 | 51 | export const handler = middleware(sitemapHandler); 52 | export default handler; 53 | 54 | -------------------------------------------------------------------------------- /api/ssl.js: -------------------------------------------------------------------------------- 1 | import tls from 'tls'; 2 | import middleware from './_common/middleware.js'; 3 | 4 | const sslHandler = async (urlString) => { 5 | try { 6 | const parsedUrl = new URL(urlString); 7 | const options = { 8 | host: parsedUrl.hostname, 9 | port: parsedUrl.port || 443, 10 | servername: parsedUrl.hostname, 11 | rejectUnauthorized: false, 12 | }; 13 | 14 | return new Promise((resolve, reject) => { 15 | const socket = tls.connect(options, () => { 16 | if (!socket.authorized) { 17 | return reject(new Error(`SSL handshake not authorized. Reason: ${socket.authorizationError}`)); 18 | } 19 | 20 | const cert = socket.getPeerCertificate(); 21 | if (!cert || Object.keys(cert).length === 0) { 22 | return reject(new Error(` 23 | No certificate presented by the server.\n 24 | The server is possibly not using SNI (Server Name Indication) to identify itself, and you are connecting to a hostname-aliased IP address. 25 | Or it may be due to an invalid SSL certificate, or an incomplete SSL handshake at the time the cert is being read.`)); 26 | } 27 | 28 | const { raw, issuerCertificate, ...certWithoutRaw } = cert; 29 | resolve(certWithoutRaw); 30 | socket.end(); 31 | }); 32 | 33 | socket.on('error', (error) => { 34 | reject(new Error(`Error fetching site certificate: ${error.message}`)); 35 | }); 36 | }); 37 | 38 | } catch (error) { 39 | throw new Error(error.message); 40 | } 41 | }; 42 | 43 | export const handler = middleware(sslHandler); 44 | export default handler; 45 | -------------------------------------------------------------------------------- /api/status.js: -------------------------------------------------------------------------------- 1 | import https from 'https'; 2 | import { performance, PerformanceObserver } from 'perf_hooks'; 3 | import middleware from './_common/middleware.js'; 4 | 5 | const statusHandler = async (url) => { 6 | if (!url) { 7 | throw new Error('You must provide a URL query parameter!'); 8 | } 9 | 10 | let dnsLookupTime; 11 | let responseCode; 12 | let startTime; 13 | 14 | const obs = new PerformanceObserver((items) => { 15 | dnsLookupTime = items.getEntries()[0].duration; 16 | performance.clearMarks(); 17 | }); 18 | 19 | obs.observe({ entryTypes: ['measure'] }); 20 | 21 | performance.mark('A'); 22 | 23 | try { 24 | startTime = performance.now(); 25 | const response = await new Promise((resolve, reject) => { 26 | const req = https.get(url, res => { 27 | let data = ''; 28 | responseCode = res.statusCode; 29 | res.on('data', chunk => { 30 | data += chunk; 31 | }); 32 | res.on('end', () => { 33 | resolve(res); 34 | }); 35 | }); 36 | 37 | req.on('error', reject); 38 | req.end(); 39 | }); 40 | 41 | if (responseCode < 200 || responseCode >= 400) { 42 | throw new Error(`Received non-success response code: ${responseCode}`); 43 | } 44 | 45 | performance.mark('B'); 46 | performance.measure('A to B', 'A', 'B'); 47 | let responseTime = performance.now() - startTime; 48 | obs.disconnect(); 49 | 50 | return { isUp: true, dnsLookupTime, responseTime, responseCode }; 51 | 52 | } catch (error) { 53 | obs.disconnect(); 54 | throw error; 55 | } 56 | }; 57 | 58 | export const handler = middleware(statusHandler); 59 | export default handler; 60 | -------------------------------------------------------------------------------- /api/tech-stack.js: -------------------------------------------------------------------------------- 1 | import Wappalyzer from 'wappalyzer'; 2 | import middleware from './_common/middleware.js'; 3 | 4 | const techStackHandler = async (url) => { 5 | const options = {}; 6 | 7 | const wappalyzer = new Wappalyzer(options); 8 | 9 | try { 10 | await wappalyzer.init(); 11 | const headers = {}; 12 | const storage = { 13 | local: {}, 14 | session: {}, 15 | }; 16 | const site = await wappalyzer.open(url, headers, storage); 17 | const results = await site.analyze(); 18 | 19 | if (!results.technologies || results.technologies.length === 0) { 20 | throw new Error('Unable to find any technologies for site'); 21 | } 22 | return results; 23 | } catch (error) { 24 | throw new Error(error.message); 25 | } finally { 26 | await wappalyzer.destroy(); 27 | } 28 | }; 29 | 30 | export const handler = middleware(techStackHandler); 31 | export default handler; 32 | -------------------------------------------------------------------------------- /api/tls.js: -------------------------------------------------------------------------------- 1 | import axios from 'axios'; 2 | import middleware from './_common/middleware.js'; 3 | 4 | const MOZILLA_TLS_OBSERVATORY_API = 'https://tls-observatory.services.mozilla.com/api/v1'; 5 | 6 | const tlsHandler = async (url) => { 7 | try { 8 | const domain = new URL(url).hostname; 9 | const scanResponse = await axios.post(`${MOZILLA_TLS_OBSERVATORY_API}/scan?target=${domain}`); 10 | const scanId = scanResponse.data.scan_id; 11 | 12 | if (typeof scanId !== 'number') { 13 | return { 14 | statusCode: 500, 15 | body: { error: 'Failed to get scan_id from TLS Observatory' }, 16 | }; 17 | } 18 | const resultResponse = await axios.get(`${MOZILLA_TLS_OBSERVATORY_API}/results?id=${scanId}`); 19 | return { 20 | statusCode: 200, 21 | body: resultResponse.data, 22 | }; 23 | } catch (error) { 24 | return { error: error.message }; 25 | } 26 | }; 27 | 28 | export const handler = middleware(tlsHandler); 29 | export default handler; 30 | -------------------------------------------------------------------------------- /api/trace-route.js: -------------------------------------------------------------------------------- 1 | import url from 'url'; 2 | import traceroute from 'traceroute'; 3 | import middleware from './_common/middleware.js'; 4 | 5 | const traceRouteHandler = async (urlString, context) => { 6 | // Parse the URL and get the hostname 7 | const urlObject = url.parse(urlString); 8 | const host = urlObject.hostname; 9 | 10 | if (!host) { 11 | throw new Error('Invalid URL provided'); 12 | } 13 | 14 | // Traceroute with callback 15 | const result = await new Promise((resolve, reject) => { 16 | traceroute.trace(host, (err, hops) => { 17 | if (err || !hops) { 18 | reject(err || new Error('No hops found')); 19 | } else { 20 | resolve(hops); 21 | } 22 | }); 23 | }); 24 | 25 | return { 26 | message: "Traceroute completed!", 27 | result, 28 | }; 29 | }; 30 | 31 | export const handler = middleware(traceRouteHandler); 32 | export default handler; 33 | -------------------------------------------------------------------------------- /api/txt-records.js: -------------------------------------------------------------------------------- 1 | import dns from 'dns/promises'; 2 | import middleware from './_common/middleware.js'; 3 | 4 | const txtRecordHandler = async (url, event, context) => { 5 | try { 6 | const parsedUrl = new URL(url); 7 | 8 | const txtRecords = await dns.resolveTxt(parsedUrl.hostname); 9 | 10 | // Parsing and formatting TXT records into a single object 11 | const readableTxtRecords = txtRecords.reduce((acc, recordArray) => { 12 | const recordObject = recordArray.reduce((recordAcc, recordString) => { 13 | const splitRecord = recordString.split('='); 14 | const key = splitRecord[0]; 15 | const value = splitRecord.slice(1).join('='); 16 | return { ...recordAcc, [key]: value }; 17 | }, {}); 18 | return { ...acc, ...recordObject }; 19 | }, {}); 20 | 21 | return readableTxtRecords; 22 | 23 | } catch (error) { 24 | if (error.code === 'ERR_INVALID_URL') { 25 | throw new Error(`Invalid URL ${error}`); 26 | } else { 27 | throw error; 28 | } 29 | } 30 | }; 31 | 32 | export const handler = middleware(txtRecordHandler); 33 | export default handler; 34 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3.9' 2 | services: 3 | web-check: 4 | container_name: Web-Check 5 | image: lissy93/web-check 6 | ports: 7 | - 3000:3000 8 | restart: unless-stopped 9 | -------------------------------------------------------------------------------- /fly.toml: -------------------------------------------------------------------------------- 1 | app = 'web-check' 2 | primary_region = 'lhr' 3 | 4 | [build] 5 | 6 | [http_service] 7 | internal_port = 3000 8 | force_https = true 9 | auto_stop_machines = true 10 | auto_start_machines = true 11 | min_machines_running = 0 12 | processes = ['app'] 13 | 14 | [[vm]] 15 | memory = '1gb' 16 | cpu_kind = 'shared' 17 | cpus = 1 18 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | # Build settings and site core config 2 | [build] 3 | base = "/" 4 | command = "yarn build" 5 | publish = "dist" 6 | functions = "api" 7 | 8 | # Environmental variables and optional secrets 9 | [build.environment] 10 | PLATFORM = "netlify" 11 | PUBLIC_API_ENDPOINT = "/.netlify/functions" 12 | # Build configuration env vars (uncomment if you want to conigure these) 13 | # CI="false" # Set CI to false, to prevent warnings from exiting the build 14 | # CHROME_PATH='/usr/bin/chromium' # Path to Chromium binary 15 | # NODE_VERSION = "16.16.0" # Set the version of Node.js to use 16 | 17 | # Optional secrets and API keys (uncomment if you want to add these) 18 | # GOOGLE_CLOUD_API_KEY='' # Google Cloud API key, for running Lighthouse scans 19 | # BUILT_WITH_API_KEY='' # BuiltWith API key, for detecting site features 20 | # REACT_APP_SHODAN_API_KEY='' # Shodan API key, for using Shodan scan API 21 | # REACT_APP_WHO_API_KEY='' # WhoAPI key, for iniiating client-side whois lookup 22 | 23 | # Redirect the /api/* path to the lambda functions 24 | [[redirects]] 25 | from = "/api/*" 26 | to = "/.netlify/functions/:splat" 27 | status = 301 28 | force = true 29 | 30 | # Plugins 31 | [[plugins]] 32 | package = "netlify-plugin-chromium" 33 | [plugins.inputs] 34 | packageManager = "yarn" 35 | 36 | # Set any security headers here 37 | [[headers]] 38 | for = "/*" 39 | [headers.values] 40 | # Uncomment to enable Netlify user control. Requires premium plan. 41 | # Basic-Auth = "someuser:somepassword anotheruser:anotherpassword" 42 | -------------------------------------------------------------------------------- /public/android-chrome-192x192.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/android-chrome-192x192.png -------------------------------------------------------------------------------- /public/android-chrome-512x512.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/android-chrome-512x512.png -------------------------------------------------------------------------------- /public/apple-touch-icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/apple-touch-icon.png -------------------------------------------------------------------------------- /public/assets/badges/github.svg: -------------------------------------------------------------------------------- 1 | GitHub: Lissy93/Web CheckGitHubLissy93/Web Check -------------------------------------------------------------------------------- /public/assets/badges/sponsor.svg: -------------------------------------------------------------------------------- 1 | Sponsor: Alicia SykesSponsorAlicia Sykes -------------------------------------------------------------------------------- /public/assets/badges/webcheck.svg: -------------------------------------------------------------------------------- 1 | Website: web-check.zyzWebsitewebcheck.zyz 2 | -------------------------------------------------------------------------------- /public/assets/images/background-dots.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /public/assets/images/docker.svg: -------------------------------------------------------------------------------- 1 | Docker 2 | -------------------------------------------------------------------------------- /public/assets/images/github.svg: -------------------------------------------------------------------------------- 1 | GitHub 2 | -------------------------------------------------------------------------------- /public/assets/images/netlify.svg: -------------------------------------------------------------------------------- 1 | Netlify 2 | -------------------------------------------------------------------------------- /public/assets/images/swagger.svg: -------------------------------------------------------------------------------- 1 | Swagger 2 | -------------------------------------------------------------------------------- /public/assets/images/vercel.svg: -------------------------------------------------------------------------------- 1 | Vercel 2 | -------------------------------------------------------------------------------- /public/banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/banner.png -------------------------------------------------------------------------------- /public/error.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Web-Check 7 | 8 | 9 |
10 |

Web-Check

11 |

😪

12 |

There was an error finding this route.

13 | Docs and Source: github.com/lissy93/web-check 14 |
15 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /public/favicon-16x16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/favicon-16x16.png -------------------------------------------------------------------------------- /public/favicon-32x32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/favicon-32x32.png -------------------------------------------------------------------------------- /public/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/favicon.ico -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/Hubot-Sans.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/Hubot-Sans.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/Hubot-Sans.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/Hubot-Sans.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSans-Black.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSans-Black.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSans-BlackItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSans-BlackItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSans-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSans-Bold.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSans-BoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSans-BoldItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSans-ExtraBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSans-ExtraBold.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSans-ExtraBoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSans-ExtraBoldItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSans-ExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSans-ExtraLight.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSans-ExtraLightItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSans-ExtraLightItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSans-Italic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSans-Italic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSans-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSans-Light.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSans-LightItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSans-LightItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSans-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSans-Medium.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSans-MediumItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSans-MediumItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSans-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSans-Regular.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSans-SemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSans-SemiBold.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSans-SemiBoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSans-SemiBoldItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansCondensed-Black.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansCondensed-Black.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansCondensed-BlackItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansCondensed-BlackItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansCondensed-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansCondensed-Bold.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansCondensed-BoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansCondensed-BoldItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansCondensed-ExtraBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansCondensed-ExtraBold.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansCondensed-ExtraBoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansCondensed-ExtraBoldItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansCondensed-ExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansCondensed-ExtraLight.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansCondensed-ExtraLightItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansCondensed-ExtraLightItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansCondensed-Italic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansCondensed-Italic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansCondensed-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansCondensed-Light.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansCondensed-LightItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansCondensed-LightItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansCondensed-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansCondensed-Medium.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansCondensed-MediumItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansCondensed-MediumItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansCondensed-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansCondensed-Regular.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansCondensed-SemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansCondensed-SemiBold.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansCondensed-SemiBoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansCondensed-SemiBoldItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansExpanded-Black.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansExpanded-Black.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansExpanded-BlackItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansExpanded-BlackItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansExpanded-Bold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansExpanded-Bold.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansExpanded-BoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansExpanded-BoldItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansExpanded-ExtraBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansExpanded-ExtraBold.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansExpanded-ExtraBoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansExpanded-ExtraBoldItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansExpanded-ExtraLight.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansExpanded-ExtraLight.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansExpanded-ExtraLightItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansExpanded-ExtraLightItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansExpanded-Italic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansExpanded-Italic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansExpanded-Light.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansExpanded-Light.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansExpanded-LightItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansExpanded-LightItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansExpanded-Medium.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansExpanded-Medium.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansExpanded-MediumItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansExpanded-MediumItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansExpanded-Regular.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansExpanded-Regular.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansExpanded-SemiBold.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansExpanded-SemiBold.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/OTF/HubotSansExpanded-SemiBoldItalic.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/OTF/HubotSansExpanded-SemiBoldItalic.otf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSans-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSans-Black.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSans-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSans-BlackItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSans-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSans-Bold.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSans-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSans-BoldItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSans-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSans-ExtraBold.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSans-ExtraBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSans-ExtraBoldItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSans-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSans-ExtraLight.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSans-ExtraLightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSans-ExtraLightItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSans-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSans-Italic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSans-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSans-Light.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSans-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSans-LightItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSans-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSans-Medium.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSans-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSans-MediumItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSans-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSans-Regular.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSans-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSans-SemiBold.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSans-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSans-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansCondensed-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansCondensed-Black.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansCondensed-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansCondensed-BlackItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansCondensed-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansCondensed-Bold.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansCondensed-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansCondensed-BoldItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansCondensed-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansCondensed-ExtraBold.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansCondensed-ExtraBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansCondensed-ExtraBoldItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansCondensed-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansCondensed-ExtraLight.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansCondensed-ExtraLightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansCondensed-ExtraLightItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansCondensed-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansCondensed-Italic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansCondensed-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansCondensed-Light.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansCondensed-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansCondensed-LightItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansCondensed-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansCondensed-Medium.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansCondensed-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansCondensed-MediumItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansCondensed-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansCondensed-Regular.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansCondensed-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansCondensed-SemiBold.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansCondensed-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansCondensed-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansExpanded-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansExpanded-Black.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansExpanded-BlackItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansExpanded-BlackItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansExpanded-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansExpanded-Bold.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansExpanded-BoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansExpanded-BoldItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansExpanded-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansExpanded-ExtraBold.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansExpanded-ExtraBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansExpanded-ExtraBoldItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansExpanded-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansExpanded-ExtraLight.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansExpanded-ExtraLightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansExpanded-ExtraLightItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansExpanded-Italic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansExpanded-Italic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansExpanded-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansExpanded-Light.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansExpanded-LightItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansExpanded-LightItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansExpanded-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansExpanded-Medium.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansExpanded-MediumItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansExpanded-MediumItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansExpanded-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansExpanded-Regular.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansExpanded-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansExpanded-SemiBold.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/TTF/HubotSansExpanded-SemiBoldItalic.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/TTF/HubotSansExpanded-SemiBoldItalic.ttf -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans-Black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans-Black.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans-BlackItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans-BlackItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans-Bold.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans-BoldItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans-ExtraBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans-ExtraBold.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans-ExtraBoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans-ExtraBoldItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans-ExtraLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans-ExtraLight.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans-ExtraLightItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans-ExtraLightItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans-Italic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans-Light.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans-LightItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans-LightItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans-Medium.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans-MediumItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans-MediumItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans-Regular.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans-SemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans-SemiBold.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans-SemiBoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans-SemiBoldItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-Black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-Black.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-BlackItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-BlackItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-Bold.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-BoldItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-ExtraBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-ExtraBold.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-ExtraBoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-ExtraBoldItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-ExtraLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-ExtraLight.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-ExtraLightItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-ExtraLightItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-Italic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-Light.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-LightItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-LightItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-Medium.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-MediumItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-MediumItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-Regular.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-SemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-SemiBold.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-SemiBoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansCondensed-SemiBoldItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-Black.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-Black.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-BlackItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-BlackItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-Bold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-Bold.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-BoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-BoldItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-ExtraBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-ExtraBold.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-ExtraBoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-ExtraBoldItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-ExtraLight.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-ExtraLight.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-ExtraLightItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-ExtraLightItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-Italic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-Italic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-Light.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-Light.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-LightItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-LightItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-Medium.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-Medium.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-MediumItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-MediumItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-Regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-Regular.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-SemiBold.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-SemiBold.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-SemiBoldItalic.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSansExpanded-SemiBoldItalic.woff2 -------------------------------------------------------------------------------- /public/fonts/Hubot-Sans/WOFF2/HubotSans[slnt,wdth,wght].woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Hubot-Sans/WOFF2/HubotSans[slnt,wdth,wght].woff2 -------------------------------------------------------------------------------- /public/fonts/Inter-Black.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Inter-Black.ttf -------------------------------------------------------------------------------- /public/fonts/Inter-Bold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Inter-Bold.ttf -------------------------------------------------------------------------------- /public/fonts/Inter-ExtraBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Inter-ExtraBold.ttf -------------------------------------------------------------------------------- /public/fonts/Inter-ExtraLight.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Inter-ExtraLight.ttf -------------------------------------------------------------------------------- /public/fonts/Inter-Light.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Inter-Light.ttf -------------------------------------------------------------------------------- /public/fonts/Inter-Medium.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Inter-Medium.ttf -------------------------------------------------------------------------------- /public/fonts/Inter-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Inter-Regular.ttf -------------------------------------------------------------------------------- /public/fonts/Inter-SemiBold.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Inter-SemiBold.ttf -------------------------------------------------------------------------------- /public/fonts/Inter-Thin.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Inter-Thin.ttf -------------------------------------------------------------------------------- /public/fonts/Inter-VariableFont_slnt,wght.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/Inter-VariableFont_slnt,wght.ttf -------------------------------------------------------------------------------- /public/fonts/PTMono-Regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/fonts/PTMono-Regular.ttf -------------------------------------------------------------------------------- /public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 12 | 13 | 14 | Web Check 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 36 |
37 | 38 | 39 | -------------------------------------------------------------------------------- /public/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "short_name": "Web Check", 3 | "name": "Lissy93/Web-Check", 4 | "icons": [ 5 | { 6 | "src": "favicon.ico", 7 | "sizes": "64x64 32x32 24x24 16x16", 8 | "type": "image/x-icon" 9 | }, 10 | { 11 | "src": "apple-touch-icon.png", 12 | "type": "image/png", 13 | "sizes": "180x180" 14 | } 15 | ], 16 | "start_url": ".", 17 | "display": "standalone", 18 | "theme_color": "#9fef00", 19 | "background_color": "#141d2b" 20 | } 21 | -------------------------------------------------------------------------------- /public/placeholder.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | Web-Check 7 | 8 | 9 |
10 |

Web-Check

11 |

12 | Docs and Source: github.com/lissy93/web-check 13 |
14 | 37 | 38 | 39 | -------------------------------------------------------------------------------- /public/robots.txt: -------------------------------------------------------------------------------- 1 | # https://www.robotstxt.org/robotstxt.html 2 | User-agent: * 3 | Disallow: 4 | -------------------------------------------------------------------------------- /public/security.txt: -------------------------------------------------------------------------------- 1 | Contact: mailto:security@as93.net 2 | Contact: mailto:alicia@omg.lol 3 | Expires: 2024-12-31T23:59:00.000Z 4 | Encryption: https://keybase.io/aliciasykes/pgp_keys.asc?fingerprint=0688f8d34587d954e9e51fb8fedb68f55c0283a7 5 | Preferred-Languages: en 6 | Canonical: /security.txt 7 | -------------------------------------------------------------------------------- /public/web-check.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/CrazyWolf13/web-check/20d08290afb78c03cf9ccafb3149418bd6e7d8d0/public/web-check.png -------------------------------------------------------------------------------- /src/components/homepage/ButtonGroup.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import Icon from '@components/molecules/Icon.svelte'; 3 | 4 | interface Props { 5 | links: { 6 | title: string; 7 | url: string; 8 | icon: string; 9 | isCta: boolean; 10 | }[]; 11 | } 12 | 13 | const { links } = Astro.props; 14 | 15 | --- 16 | 17 |
18 | {links.map(link => ( 19 | {link.title} 20 | ))} 21 |
22 | 23 | 67 | -------------------------------------------------------------------------------- /src/components/homepage/Features.astro: -------------------------------------------------------------------------------- 1 | --- 2 | 3 | import Icon from '@components/molecules/Icon.svelte'; 4 | 5 | interface Props { 6 | supportedChecks: string[]; 7 | } 8 | 9 | const { supportedChecks } = Astro.props; 10 | 11 | --- 12 | 13 | 22 | 23 | 41 | -------------------------------------------------------------------------------- /src/components/homepage/SponsorSegment.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const sponsorName = 'Terminal Trove'; 3 | const sponsorTagline = 'The $HOME of all things terminal.'; 4 | const sponsorLink = 'https://terminaltrove.com/?utm_campaign=github&utm_medium=referral&utm_content=web-check&utm_source=wcgh'; 5 | 6 | const ctaPreText = 'Get updates on the latest CLI/TUI tools via the'; 7 | const ctaLinkHref = 'https://terminaltrove.com/newsletter?utm_campaign=github&utm_medium=referral&utm_content=web-check&utm_source=wcgh'; 8 | const ctaLinkText = 'Terminal Trove Newsletter'; 9 | const ctaImageSrc = 'https://i.ibb.co/5jJ4bzZ/terminal-trove-cta.png'; 10 | --- 11 | 12 | 24 | 25 | 63 | -------------------------------------------------------------------------------- /src/components/homepage/TempDisabled.astro: -------------------------------------------------------------------------------- 1 | 7 | 8 | 28 | -------------------------------------------------------------------------------- /src/components/molecules/Icon.svelte: -------------------------------------------------------------------------------- 1 | 23 | 24 | {#if iconMap[name]} 25 | 29 | {/if} 30 | 31 | 37 | -------------------------------------------------------------------------------- /src/components/scafold/Footer.astro: -------------------------------------------------------------------------------- 1 | --- 2 | const repo = 'github.com/lissy93/web-check'; 3 | const github = `https://${repo}`; 4 | 5 | const licenseText = 'MIT'; 6 | const licenseLink = `${github}/blob/master/LICENSE`; 7 | 8 | const aboutLink = '/about'; 9 | const projectName = 'Web Check'; 10 | 11 | const authorName = 'Alicia Sykes'; 12 | const authorLink = 'https://aliciasykes.com'; 13 | const currentYear = new Date().getFullYear(); 14 | --- 15 | 16 | 28 | 29 | 54 | -------------------------------------------------------------------------------- /src/env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | /// 3 | -------------------------------------------------------------------------------- /src/layouts/Base.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import { ViewTransitions } from 'astro:transitions' 3 | import MetaTags from '@layouts/MetaTags.astro'; 4 | 5 | import '@styles/typography.scss'; 6 | import '@styles/global.scss'; 7 | import '@styles/colors.scss'; 8 | import '@styles/media-queries.scss'; 9 | 10 | interface Props { 11 | title?: string; 12 | description?: string; 13 | keywords?: string; 14 | customSchemaJson?: any; 15 | breadcrumbs?: Array<{ 16 | name: string; 17 | item: string; 18 | }> 19 | } 20 | 21 | --- 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 35 | 36 | 37 | 38 | 39 | 40 | -------------------------------------------------------------------------------- /src/pages/account/index.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import BaseLayout from '@layouts/Base.astro'; 3 | import NavBar from '@components/scafold/Nav.astro'; 4 | import Footer from '@components/scafold/Footer.astro'; 5 | import Icon from '@components/molecules/Icon.svelte'; 6 | 7 | --- 8 | 9 | 13 |
14 | 15 |
16 | 20 | 21 |
22 |

Account management is currently under development.

23 |

24 | Once complete, you will be able to login to your account to manage API 25 | access, save reports, enable website change notificiations and more! 26 |

27 |
28 | 29 |
30 |
31 |
32 |
33 | 34 | 35 | 80 | -------------------------------------------------------------------------------- /src/pages/check/[...target].astro: -------------------------------------------------------------------------------- 1 | --- 2 | import BaseLayout from '@layouts/Base.astro'; 3 | import Main from '../../web-check-live/main.tsx'; 4 | import '../../web-check-live/styles/index.css'; 5 | 6 | export const prerender = false; 7 | 8 | const { pathname, search } = new URL(Astro.request.url); 9 | 10 | const searchUrl = new URLSearchParams(search).get('url'); 11 | 12 | if (searchUrl) { 13 | Astro.redirect(`/check/${encodeURIComponent(searchUrl)}`); 14 | } 15 | 16 | --- 17 | 18 | 19 |
20 | 21 | 22 | 43 | -------------------------------------------------------------------------------- /src/pages/index.astro: -------------------------------------------------------------------------------- 1 | --- 2 | import BaseLayout from '@layouts/Base.astro'; 3 | import HeroForm from '@components/homepage/HeroForm.astro'; 4 | import TempDisabled from '@/components/homepage/TempDisabled.astro'; 5 | import HomeBackground from '@/components/homepage/HomeBackground'; 6 | import AboutSection from '@/components/homepage/AboutSection.astro'; 7 | import Footer from '@components/scafold/Footer.astro'; 8 | 9 | const isBossServer = import.meta.env.BOSS_SERVER === true; 10 | 11 | const disableEverything = import.meta.env.VITE_DISABLE_EVERYTHING === true; 12 | 13 | // Redirect strait to /check or /check/:url if running as self-hosted instance 14 | if (!isBossServer) { 15 | const searchUrl = new URLSearchParams(new URL(Astro.request.url).search).get('url'); 16 | const redirectUrl = searchUrl ? `/check/${encodeURIComponent(searchUrl)}` : '/check'; 17 | Astro.redirect(redirectUrl); 18 | } 19 | 20 | --- 21 | 22 | 23 | 24 | {!isBossServer && ()} 25 | 26 | { disableEverything && } 27 |
28 | 29 | 30 |
31 |