Merge pull request #5 from ewpratten/cf_pages
Fully migrate to Cloudflare
This commit is contained in:
commit
480f2a79a3
44
.github/workflows/build.yml
vendored
44
.github/workflows/build.yml
vendored
@ -1,44 +0,0 @@
|
|||||||
name: Build Website
|
|
||||||
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- "*"
|
|
||||||
# Master has its own set of build rules,
|
|
||||||
# and will eventually call this script on its own
|
|
||||||
- "!master"
|
|
||||||
workflow_call:
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
steps:
|
|
||||||
- name: Checkout
|
|
||||||
uses: actions/checkout@v2
|
|
||||||
|
|
||||||
# - name: Setup Node.js
|
|
||||||
# uses: actions/setup-node@v1
|
|
||||||
# with:
|
|
||||||
# node-version: 12.x
|
|
||||||
|
|
||||||
# - name: Install dependencies
|
|
||||||
# run: npm install
|
|
||||||
|
|
||||||
- name: Allow all dirs
|
|
||||||
run: git config --global --add safe.directory '*'
|
|
||||||
|
|
||||||
- name: Build only
|
|
||||||
uses: shalzz/zola-deploy-action@v0.16.1-1
|
|
||||||
env:
|
|
||||||
BUILD_ONLY: true
|
|
||||||
|
|
||||||
- name: Disable Jekyll
|
|
||||||
run: sudo touch ./public/.nojekyll
|
|
||||||
|
|
||||||
- name: Delete dist gitignore
|
|
||||||
run: sudo rm -f ./public/dist/.gitignore
|
|
||||||
|
|
||||||
- name: Upload site as artifact
|
|
||||||
uses: actions/upload-pages-artifact@v1
|
|
||||||
with:
|
|
||||||
path: ./public
|
|
35
.github/workflows/deploy.yml
vendored
35
.github/workflows/deploy.yml
vendored
@ -1,35 +0,0 @@
|
|||||||
name: Deploy
|
|
||||||
on:
|
|
||||||
push:
|
|
||||||
branches:
|
|
||||||
- "master"
|
|
||||||
|
|
||||||
jobs:
|
|
||||||
build:
|
|
||||||
uses: ./.github/workflows/build.yml
|
|
||||||
|
|
||||||
deploy:
|
|
||||||
runs-on: ubuntu-latest
|
|
||||||
needs: build
|
|
||||||
permissions:
|
|
||||||
pages: write
|
|
||||||
id-token: write
|
|
||||||
environment:
|
|
||||||
name: github-pages
|
|
||||||
url: ${{ steps.deployment.outputs.page_url }}
|
|
||||||
steps:
|
|
||||||
- name: Deploy to GitHub Pages
|
|
||||||
id: deployment
|
|
||||||
uses: actions/deploy-pages@v1
|
|
||||||
|
|
||||||
# purge_cache:
|
|
||||||
# runs-on: ubuntu-latest
|
|
||||||
# needs: deploy
|
|
||||||
# environment:
|
|
||||||
# name: cloudflare-api
|
|
||||||
# steps:
|
|
||||||
# - name: Purge Cloudflare Cache
|
|
||||||
# uses: jakejarvis/cloudflare-purge-action@master
|
|
||||||
# env:
|
|
||||||
# CLOUDFLARE_ZONE: "ewpratten.com"
|
|
||||||
# CLOUDFLARE_TOKEN: ${{ secrets.CLOUDFLARE_TOKEN }}
|
|
4
.gitignore
vendored
4
.gitignore
vendored
@ -11,4 +11,6 @@ Cargo.lock
|
|||||||
|
|
||||||
/public/
|
/public/
|
||||||
|
|
||||||
/node_modules/
|
/node_modules/
|
||||||
|
|
||||||
|
.dev.vars
|
12
.vscode/settings.json
vendored
12
.vscode/settings.json
vendored
@ -8,5 +8,15 @@
|
|||||||
"inpainting",
|
"inpainting",
|
||||||
"rotoscope",
|
"rotoscope",
|
||||||
"Tapermonkey"
|
"Tapermonkey"
|
||||||
]
|
],
|
||||||
|
"files.associations": {
|
||||||
|
"*.json.liquid": "json",
|
||||||
|
"*.yaml.liquid": "yaml",
|
||||||
|
"*.md.liquid": "markdown",
|
||||||
|
"*.js.liquid": "liquid-javascript",
|
||||||
|
"*.css.liquid": "liquid-css",
|
||||||
|
"*.scss.liquid": "liquid-scss",
|
||||||
|
"_headers": "plaintext",
|
||||||
|
"_redirects": "plaintext",
|
||||||
|
}
|
||||||
}
|
}
|
1
_redirects
Symbolic link
1
_redirects
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
./static/_redirects
|
79
package-lock.json
generated
79
package-lock.json
generated
@ -1,79 +0,0 @@
|
|||||||
{
|
|
||||||
"name": "ewpratten.com",
|
|
||||||
"lockfileVersion": 2,
|
|
||||||
"requires": true,
|
|
||||||
"packages": {
|
|
||||||
"": {
|
|
||||||
"dependencies": {
|
|
||||||
"bootstrap": "^5.2.3",
|
|
||||||
"github-markdown-css": "^5.1.0",
|
|
||||||
"line-awesome": "^1.3.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/@popperjs/core": {
|
|
||||||
"version": "2.11.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz",
|
|
||||||
"integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==",
|
|
||||||
"peer": true,
|
|
||||||
"funding": {
|
|
||||||
"type": "opencollective",
|
|
||||||
"url": "https://opencollective.com/popperjs"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/bootstrap": {
|
|
||||||
"version": "5.2.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz",
|
|
||||||
"integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==",
|
|
||||||
"funding": [
|
|
||||||
{
|
|
||||||
"type": "github",
|
|
||||||
"url": "https://github.com/sponsors/twbs"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"type": "opencollective",
|
|
||||||
"url": "https://opencollective.com/bootstrap"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"peerDependencies": {
|
|
||||||
"@popperjs/core": "^2.11.6"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/github-markdown-css": {
|
|
||||||
"version": "5.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/github-markdown-css/-/github-markdown-css-5.1.0.tgz",
|
|
||||||
"integrity": "sha512-QLtORwHHtUHhPMHu7i4GKfP6Vx5CWZn+NKQXe+cBhslY1HEt0CTEkP4d/vSROKV0iIJSpl4UtlQ16AD8C6lMug==",
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/sindresorhus"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/line-awesome": {
|
|
||||||
"version": "1.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/line-awesome/-/line-awesome-1.3.0.tgz",
|
|
||||||
"integrity": "sha512-Y0YHksL37ixDsHz+ihCwOtF5jwJgCDxQ3q+zOVgaSW8VugHGTsZZXMacPYZB1/JULBi6BAuTCTek+4ZY/UIwcw=="
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"dependencies": {
|
|
||||||
"@popperjs/core": {
|
|
||||||
"version": "2.11.6",
|
|
||||||
"resolved": "https://registry.npmjs.org/@popperjs/core/-/core-2.11.6.tgz",
|
|
||||||
"integrity": "sha512-50/17A98tWUfQ176raKiOGXuYpLyyVMkxxG6oylzL3BPOlA6ADGdK7EYunSa4I064xerltq9TGXs8HmOk5E+vw==",
|
|
||||||
"peer": true
|
|
||||||
},
|
|
||||||
"bootstrap": {
|
|
||||||
"version": "5.2.3",
|
|
||||||
"resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-5.2.3.tgz",
|
|
||||||
"integrity": "sha512-cEKPM+fwb3cT8NzQZYEu4HilJ3anCrWqh3CHAok1p9jXqMPsPTBhU25fBckEJHJ/p+tTxTFTsFQGM+gaHpi3QQ==",
|
|
||||||
"requires": {}
|
|
||||||
},
|
|
||||||
"github-markdown-css": {
|
|
||||||
"version": "5.1.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/github-markdown-css/-/github-markdown-css-5.1.0.tgz",
|
|
||||||
"integrity": "sha512-QLtORwHHtUHhPMHu7i4GKfP6Vx5CWZn+NKQXe+cBhslY1HEt0CTEkP4d/vSROKV0iIJSpl4UtlQ16AD8C6lMug=="
|
|
||||||
},
|
|
||||||
"line-awesome": {
|
|
||||||
"version": "1.3.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/line-awesome/-/line-awesome-1.3.0.tgz",
|
|
||||||
"integrity": "sha512-Y0YHksL37ixDsHz+ihCwOtF5jwJgCDxQ3q+zOVgaSW8VugHGTsZZXMacPYZB1/JULBi6BAuTCTek+4ZY/UIwcw=="
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"dependencies": {
|
|
||||||
"bootstrap": "^5.2.3",
|
|
||||||
"github-markdown-css": "^5.1.0",
|
|
||||||
"line-awesome": "^1.3.0"
|
|
||||||
}
|
|
||||||
}
|
|
@ -1,46 +0,0 @@
|
|||||||
import json
|
|
||||||
from pathlib import Path
|
|
||||||
import time
|
|
||||||
from typing import Dict
|
|
||||||
import requests
|
|
||||||
import re
|
|
||||||
import base64
|
|
||||||
|
|
||||||
|
|
||||||
def make_cached_request(url: str, headers: Dict[str, str]) -> str:
|
|
||||||
|
|
||||||
# Encode the url and headers into a filename to use as a cache
|
|
||||||
cache_filename = Path("/tmp/as_stats") / base64.b64encode(
|
|
||||||
url.encode('utf-8') + str(headers).encode('utf-8')).decode('utf-8')
|
|
||||||
print(f"Using cache file: {cache_filename}")
|
|
||||||
|
|
||||||
# Check if the file timestamp of the cache file is older than 30 minutes or the file doesn't exist
|
|
||||||
if not cache_filename.exists() or (cache_filename.stat().st_mtime + 1800) < time.time():
|
|
||||||
print(f"Making request to {url}")
|
|
||||||
|
|
||||||
# Make the request and write it to the cache file
|
|
||||||
response = requests.get(url, headers=headers).text
|
|
||||||
cache_filename.parent.mkdir(parents=True, exist_ok=True)
|
|
||||||
cache_filename.write_text(response)
|
|
||||||
|
|
||||||
# Return the contents of the cache file
|
|
||||||
return cache_filename.read_text()
|
|
||||||
|
|
||||||
|
|
||||||
data = make_cached_request("https://bgp.tools/tags/perso.csv",
|
|
||||||
headers={"User-Agent": "ewpratten.com ASN statistics script"})
|
|
||||||
as_search = re.compile(r"AS(\d+)")
|
|
||||||
asns = [int(x) for x in as_search.findall(data)]
|
|
||||||
print(f"Found {len(asns)} personal ASNs in the DFZ")
|
|
||||||
|
|
||||||
# Download the full BGP table in JSONL format
|
|
||||||
bgp_table = make_cached_request("https://bgp.tools/table.jsonl", headers={"User-Agent": "ewpratten.com ASN statistics script"})
|
|
||||||
routes = {}
|
|
||||||
for line in bgp_table.splitlines():
|
|
||||||
bgp_data = json.loads(line)
|
|
||||||
routes.setdefault(bgp_data["ASN"], []).append(bgp_data["CIDR"])
|
|
||||||
|
|
||||||
# For each ASN, get some additional data
|
|
||||||
dataset = []
|
|
||||||
for asn in asns:
|
|
||||||
|
|
@ -1,8 +0,0 @@
|
|||||||
#! /bin/bash
|
|
||||||
set -e
|
|
||||||
|
|
||||||
curl --user-agent "AS-SET Builder" \
|
|
||||||
https://bgp.tools/tags/perso | \
|
|
||||||
grep -o "/as/[0-9]*" | \
|
|
||||||
sort | uniq | sed -e 's#/as/#AS#g' \
|
|
||||||
> sources/personal-as-stats/personal_ases.txt
|
|
@ -1,811 +0,0 @@
|
|||||||
AS1003
|
|
||||||
AS1050
|
|
||||||
AS11875
|
|
||||||
AS12553
|
|
||||||
AS131645
|
|
||||||
AS132139
|
|
||||||
AS132282
|
|
||||||
AS132383
|
|
||||||
AS133846
|
|
||||||
AS134478
|
|
||||||
AS134666
|
|
||||||
AS134993
|
|
||||||
AS135103
|
|
||||||
AS135134
|
|
||||||
AS135395
|
|
||||||
AS13586
|
|
||||||
AS136918
|
|
||||||
AS137256
|
|
||||||
AS137410
|
|
||||||
AS137411
|
|
||||||
AS137430
|
|
||||||
AS137509
|
|
||||||
AS137582
|
|
||||||
AS137910
|
|
||||||
AS137937
|
|
||||||
AS137943
|
|
||||||
AS138006
|
|
||||||
AS138038
|
|
||||||
AS138181
|
|
||||||
AS138211
|
|
||||||
AS13850
|
|
||||||
AS138919
|
|
||||||
AS139073
|
|
||||||
AS139216
|
|
||||||
AS139317
|
|
||||||
AS139328
|
|
||||||
AS140362
|
|
||||||
AS140506
|
|
||||||
AS140731
|
|
||||||
AS141776
|
|
||||||
AS142130
|
|
||||||
AS142281
|
|
||||||
AS142284
|
|
||||||
AS142551
|
|
||||||
AS142598
|
|
||||||
AS142641
|
|
||||||
AS147016
|
|
||||||
AS149007
|
|
||||||
AS149506
|
|
||||||
AS149794
|
|
||||||
AS149795
|
|
||||||
AS149835
|
|
||||||
AS15490
|
|
||||||
AS15562
|
|
||||||
AS16375
|
|
||||||
AS17138
|
|
||||||
AS17415
|
|
||||||
AS1898
|
|
||||||
AS196621
|
|
||||||
AS196782
|
|
||||||
AS196978
|
|
||||||
AS197160
|
|
||||||
AS198014
|
|
||||||
AS198248
|
|
||||||
AS198713
|
|
||||||
AS198794
|
|
||||||
AS199298
|
|
||||||
AS199852
|
|
||||||
AS199957
|
|
||||||
AS200273
|
|
||||||
AS200278
|
|
||||||
AS200280
|
|
||||||
AS200301
|
|
||||||
AS200306
|
|
||||||
AS200334
|
|
||||||
AS200490
|
|
||||||
AS200615
|
|
||||||
AS200842
|
|
||||||
AS200857
|
|
||||||
AS200897
|
|
||||||
AS201048
|
|
||||||
AS201129
|
|
||||||
AS201222
|
|
||||||
AS201281
|
|
||||||
AS201331
|
|
||||||
AS201742
|
|
||||||
AS202039
|
|
||||||
AS202044
|
|
||||||
AS202068
|
|
||||||
AS202198
|
|
||||||
AS202246
|
|
||||||
AS202288
|
|
||||||
AS202301
|
|
||||||
AS202307
|
|
||||||
AS202313
|
|
||||||
AS202314
|
|
||||||
AS202410
|
|
||||||
AS202418
|
|
||||||
AS202540
|
|
||||||
AS202560
|
|
||||||
AS202562
|
|
||||||
AS202584
|
|
||||||
AS202634
|
|
||||||
AS202656
|
|
||||||
AS202739
|
|
||||||
AS202886
|
|
||||||
AS202905
|
|
||||||
AS202928
|
|
||||||
AS202945
|
|
||||||
AS202952
|
|
||||||
AS202959
|
|
||||||
AS202969
|
|
||||||
AS202976
|
|
||||||
AS202988
|
|
||||||
AS202996
|
|
||||||
AS203024
|
|
||||||
AS203062
|
|
||||||
AS203069
|
|
||||||
AS203074
|
|
||||||
AS203113
|
|
||||||
AS203125
|
|
||||||
AS203133
|
|
||||||
AS203145
|
|
||||||
AS203146
|
|
||||||
AS203236
|
|
||||||
AS203323
|
|
||||||
AS203333
|
|
||||||
AS203458
|
|
||||||
AS203478
|
|
||||||
AS203496
|
|
||||||
AS203528
|
|
||||||
AS203529
|
|
||||||
AS203535
|
|
||||||
AS203577
|
|
||||||
AS203619
|
|
||||||
AS203635
|
|
||||||
AS203636
|
|
||||||
AS203656
|
|
||||||
AS203729
|
|
||||||
AS203801
|
|
||||||
AS203804
|
|
||||||
AS203868
|
|
||||||
AS203875
|
|
||||||
AS203888
|
|
||||||
AS203900
|
|
||||||
AS203913
|
|
||||||
AS203919
|
|
||||||
AS203943
|
|
||||||
AS204003
|
|
||||||
AS204010
|
|
||||||
AS204017
|
|
||||||
AS204125
|
|
||||||
AS204179
|
|
||||||
AS204181
|
|
||||||
AS204185
|
|
||||||
AS204186
|
|
||||||
AS204228
|
|
||||||
AS204254
|
|
||||||
AS204268
|
|
||||||
AS204307
|
|
||||||
AS204345
|
|
||||||
AS204363
|
|
||||||
AS204374
|
|
||||||
AS204416
|
|
||||||
AS204423
|
|
||||||
AS204438
|
|
||||||
AS204443
|
|
||||||
AS204446
|
|
||||||
AS204466
|
|
||||||
AS204506
|
|
||||||
AS204508
|
|
||||||
AS204518
|
|
||||||
AS204526
|
|
||||||
AS204543
|
|
||||||
AS204585
|
|
||||||
AS204604
|
|
||||||
AS204610
|
|
||||||
AS204624
|
|
||||||
AS204625
|
|
||||||
AS204662
|
|
||||||
AS204675
|
|
||||||
AS204693
|
|
||||||
AS204710
|
|
||||||
AS204778
|
|
||||||
AS204785
|
|
||||||
AS204829
|
|
||||||
AS204882
|
|
||||||
AS204883
|
|
||||||
AS204893
|
|
||||||
AS204901
|
|
||||||
AS204909
|
|
||||||
AS204926
|
|
||||||
AS204936
|
|
||||||
AS204982
|
|
||||||
AS204994
|
|
||||||
AS205036
|
|
||||||
AS205043
|
|
||||||
AS205089
|
|
||||||
AS205092
|
|
||||||
AS205100
|
|
||||||
AS205102
|
|
||||||
AS205117
|
|
||||||
AS205148
|
|
||||||
AS205152
|
|
||||||
AS205165
|
|
||||||
AS205183
|
|
||||||
AS205240
|
|
||||||
AS205261
|
|
||||||
AS205298
|
|
||||||
AS205315
|
|
||||||
AS205323
|
|
||||||
AS205365
|
|
||||||
AS205387
|
|
||||||
AS205398
|
|
||||||
AS205413
|
|
||||||
AS205415
|
|
||||||
AS205423
|
|
||||||
AS205432
|
|
||||||
AS205479
|
|
||||||
AS205522
|
|
||||||
AS205523
|
|
||||||
AS205531
|
|
||||||
AS205532
|
|
||||||
AS205590
|
|
||||||
AS205591
|
|
||||||
AS205593
|
|
||||||
AS205597
|
|
||||||
AS205603
|
|
||||||
AS205610
|
|
||||||
AS205618
|
|
||||||
AS205634
|
|
||||||
AS205635
|
|
||||||
AS205642
|
|
||||||
AS205651
|
|
||||||
AS205740
|
|
||||||
AS205777
|
|
||||||
AS205778
|
|
||||||
AS205794
|
|
||||||
AS205810
|
|
||||||
AS205816
|
|
||||||
AS205866
|
|
||||||
AS205908
|
|
||||||
AS205923
|
|
||||||
AS205927
|
|
||||||
AS205947
|
|
||||||
AS205956
|
|
||||||
AS205969
|
|
||||||
AS205970
|
|
||||||
AS206016
|
|
||||||
AS206020
|
|
||||||
AS206155
|
|
||||||
AS206160
|
|
||||||
AS206161
|
|
||||||
AS206203
|
|
||||||
AS206226
|
|
||||||
AS206253
|
|
||||||
AS206271
|
|
||||||
AS206290
|
|
||||||
AS206294
|
|
||||||
AS206368
|
|
||||||
AS206477
|
|
||||||
AS206480
|
|
||||||
AS206499
|
|
||||||
AS206506
|
|
||||||
AS206628
|
|
||||||
AS206633
|
|
||||||
AS206639
|
|
||||||
AS206671
|
|
||||||
AS206699
|
|
||||||
AS206729
|
|
||||||
AS206740
|
|
||||||
AS206754
|
|
||||||
AS206792
|
|
||||||
AS206843
|
|
||||||
AS206858
|
|
||||||
AS206895
|
|
||||||
AS206924
|
|
||||||
AS206981
|
|
||||||
AS206994
|
|
||||||
AS207036
|
|
||||||
AS207043
|
|
||||||
AS207077
|
|
||||||
AS207080
|
|
||||||
AS207111
|
|
||||||
AS207149
|
|
||||||
AS207150
|
|
||||||
AS207193
|
|
||||||
AS207212
|
|
||||||
AS207267
|
|
||||||
AS207273
|
|
||||||
AS207292
|
|
||||||
AS207299
|
|
||||||
AS207300
|
|
||||||
AS207315
|
|
||||||
AS207341
|
|
||||||
AS207358
|
|
||||||
AS207363
|
|
||||||
AS207372
|
|
||||||
AS207393
|
|
||||||
AS207394
|
|
||||||
AS207411
|
|
||||||
AS207420
|
|
||||||
AS207445
|
|
||||||
AS207469
|
|
||||||
AS207480
|
|
||||||
AS207487
|
|
||||||
AS207529
|
|
||||||
AS207536
|
|
||||||
AS207537
|
|
||||||
AS207550
|
|
||||||
AS207556
|
|
||||||
AS207609
|
|
||||||
AS207612
|
|
||||||
AS207613
|
|
||||||
AS207632
|
|
||||||
AS207662
|
|
||||||
AS207671
|
|
||||||
AS207708
|
|
||||||
AS207740
|
|
||||||
AS207748
|
|
||||||
AS207755
|
|
||||||
AS207756
|
|
||||||
AS207759
|
|
||||||
AS207781
|
|
||||||
AS207801
|
|
||||||
AS207824
|
|
||||||
AS207846
|
|
||||||
AS207852
|
|
||||||
AS207880
|
|
||||||
AS207887
|
|
||||||
AS207890
|
|
||||||
AS207910
|
|
||||||
AS207941
|
|
||||||
AS207963
|
|
||||||
AS207968
|
|
||||||
AS208021
|
|
||||||
AS208059
|
|
||||||
AS208069
|
|
||||||
AS208122
|
|
||||||
AS208135
|
|
||||||
AS208150
|
|
||||||
AS208173
|
|
||||||
AS208181
|
|
||||||
AS208210
|
|
||||||
AS208223
|
|
||||||
AS208242
|
|
||||||
AS208249
|
|
||||||
AS208260
|
|
||||||
AS208264
|
|
||||||
AS208266
|
|
||||||
AS208340
|
|
||||||
AS208370
|
|
||||||
AS208394
|
|
||||||
AS208434
|
|
||||||
AS208487
|
|
||||||
AS208505
|
|
||||||
AS208529
|
|
||||||
AS208548
|
|
||||||
AS208563
|
|
||||||
AS208580
|
|
||||||
AS208590
|
|
||||||
AS208602
|
|
||||||
AS208612
|
|
||||||
AS208624
|
|
||||||
AS208634
|
|
||||||
AS208658
|
|
||||||
AS208699
|
|
||||||
AS208702
|
|
||||||
AS208707
|
|
||||||
AS208713
|
|
||||||
AS208717
|
|
||||||
AS208723
|
|
||||||
AS208733
|
|
||||||
AS208751
|
|
||||||
AS208753
|
|
||||||
AS208768
|
|
||||||
AS208810
|
|
||||||
AS208814
|
|
||||||
AS208818
|
|
||||||
AS208872
|
|
||||||
AS208884
|
|
||||||
AS208907
|
|
||||||
AS208914
|
|
||||||
AS208915
|
|
||||||
AS208919
|
|
||||||
AS209075
|
|
||||||
AS209109
|
|
||||||
AS209114
|
|
||||||
AS209164
|
|
||||||
AS209185
|
|
||||||
AS209186
|
|
||||||
AS209188
|
|
||||||
AS209218
|
|
||||||
AS209245
|
|
||||||
AS209261
|
|
||||||
AS209263
|
|
||||||
AS209267
|
|
||||||
AS209300
|
|
||||||
AS209306
|
|
||||||
AS209310
|
|
||||||
AS209334
|
|
||||||
AS209364
|
|
||||||
AS209401
|
|
||||||
AS209417
|
|
||||||
AS209419
|
|
||||||
AS209432
|
|
||||||
AS209489
|
|
||||||
AS209496
|
|
||||||
AS209506
|
|
||||||
AS209512
|
|
||||||
AS209514
|
|
||||||
AS209569
|
|
||||||
AS209586
|
|
||||||
AS209616
|
|
||||||
AS209619
|
|
||||||
AS209623
|
|
||||||
AS209645
|
|
||||||
AS209650
|
|
||||||
AS209658
|
|
||||||
AS209661
|
|
||||||
AS209669
|
|
||||||
AS209710
|
|
||||||
AS209718
|
|
||||||
AS209778
|
|
||||||
AS209792
|
|
||||||
AS209808
|
|
||||||
AS209859
|
|
||||||
AS209861
|
|
||||||
AS209864
|
|
||||||
AS209869
|
|
||||||
AS209874
|
|
||||||
AS209933
|
|
||||||
AS210013
|
|
||||||
AS210025
|
|
||||||
AS210041
|
|
||||||
AS210074
|
|
||||||
AS210089
|
|
||||||
AS210090
|
|
||||||
AS210103
|
|
||||||
AS210118
|
|
||||||
AS210152
|
|
||||||
AS210234
|
|
||||||
AS210285
|
|
||||||
AS210286
|
|
||||||
AS210311
|
|
||||||
AS210312
|
|
||||||
AS210320
|
|
||||||
AS210369
|
|
||||||
AS210370
|
|
||||||
AS210376
|
|
||||||
AS210381
|
|
||||||
AS210386
|
|
||||||
AS210387
|
|
||||||
AS210397
|
|
||||||
AS210400
|
|
||||||
AS210401
|
|
||||||
AS210405
|
|
||||||
AS210408
|
|
||||||
AS210426
|
|
||||||
AS210440
|
|
||||||
AS210469
|
|
||||||
AS210476
|
|
||||||
AS210481
|
|
||||||
AS210502
|
|
||||||
AS210522
|
|
||||||
AS210529
|
|
||||||
AS210532
|
|
||||||
AS210562
|
|
||||||
AS210563
|
|
||||||
AS210577
|
|
||||||
AS210617
|
|
||||||
AS210631
|
|
||||||
AS210645
|
|
||||||
AS210667
|
|
||||||
AS210683
|
|
||||||
AS210734
|
|
||||||
AS210777
|
|
||||||
AS210815
|
|
||||||
AS210816
|
|
||||||
AS210836
|
|
||||||
AS210864
|
|
||||||
AS210881
|
|
||||||
AS210887
|
|
||||||
AS210888
|
|
||||||
AS210934
|
|
||||||
AS210941
|
|
||||||
AS210985
|
|
||||||
AS211042
|
|
||||||
AS211066
|
|
||||||
AS211088
|
|
||||||
AS211129
|
|
||||||
AS211144
|
|
||||||
AS211153
|
|
||||||
AS211168
|
|
||||||
AS211184
|
|
||||||
AS211208
|
|
||||||
AS211224
|
|
||||||
AS211227
|
|
||||||
AS211244
|
|
||||||
AS211275
|
|
||||||
AS211284
|
|
||||||
AS211317
|
|
||||||
AS211364
|
|
||||||
AS211367
|
|
||||||
AS211387
|
|
||||||
AS211431
|
|
||||||
AS211437
|
|
||||||
AS211449
|
|
||||||
AS211479
|
|
||||||
AS211485
|
|
||||||
AS211495
|
|
||||||
AS211498
|
|
||||||
AS211509
|
|
||||||
AS211514
|
|
||||||
AS211553
|
|
||||||
AS211562
|
|
||||||
AS211571
|
|
||||||
AS211575
|
|
||||||
AS211579
|
|
||||||
AS21158
|
|
||||||
AS211581
|
|
||||||
AS211604
|
|
||||||
AS211635
|
|
||||||
AS211684
|
|
||||||
AS211685
|
|
||||||
AS211688
|
|
||||||
AS211696
|
|
||||||
AS211703
|
|
||||||
AS211704
|
|
||||||
AS211722
|
|
||||||
AS211723
|
|
||||||
AS211729
|
|
||||||
AS211738
|
|
||||||
AS211747
|
|
||||||
AS211754
|
|
||||||
AS211776
|
|
||||||
AS211827
|
|
||||||
AS211840
|
|
||||||
AS211851
|
|
||||||
AS211852
|
|
||||||
AS211868
|
|
||||||
AS211869
|
|
||||||
AS211870
|
|
||||||
AS211879
|
|
||||||
AS211930
|
|
||||||
AS211935
|
|
||||||
AS211942
|
|
||||||
AS211956
|
|
||||||
AS211972
|
|
||||||
AS211975
|
|
||||||
AS211980
|
|
||||||
AS212007
|
|
||||||
AS212008
|
|
||||||
AS212024
|
|
||||||
AS212037
|
|
||||||
AS212044
|
|
||||||
AS212056
|
|
||||||
AS212066
|
|
||||||
AS212068
|
|
||||||
AS212084
|
|
||||||
AS212105
|
|
||||||
AS212106
|
|
||||||
AS212118
|
|
||||||
AS212120
|
|
||||||
AS212121
|
|
||||||
AS212123
|
|
||||||
AS212125
|
|
||||||
AS212129
|
|
||||||
AS212149
|
|
||||||
AS212154
|
|
||||||
AS212191
|
|
||||||
AS212196
|
|
||||||
AS212231
|
|
||||||
AS212248
|
|
||||||
AS212249
|
|
||||||
AS212270
|
|
||||||
AS212276
|
|
||||||
AS212290
|
|
||||||
AS212294
|
|
||||||
AS212299
|
|
||||||
AS212317
|
|
||||||
AS212347
|
|
||||||
AS212349
|
|
||||||
AS212353
|
|
||||||
AS212357
|
|
||||||
AS212415
|
|
||||||
AS212425
|
|
||||||
AS212427
|
|
||||||
AS212448
|
|
||||||
AS212469
|
|
||||||
AS212472
|
|
||||||
AS212495
|
|
||||||
AS212510
|
|
||||||
AS212513
|
|
||||||
AS212519
|
|
||||||
AS212539
|
|
||||||
AS212541
|
|
||||||
AS212543
|
|
||||||
AS212546
|
|
||||||
AS212555
|
|
||||||
AS212568
|
|
||||||
AS212569
|
|
||||||
AS212580
|
|
||||||
AS212591
|
|
||||||
AS212594
|
|
||||||
AS212596
|
|
||||||
AS212618
|
|
||||||
AS212625
|
|
||||||
AS212642
|
|
||||||
AS212672
|
|
||||||
AS212678
|
|
||||||
AS212703
|
|
||||||
AS212704
|
|
||||||
AS212715
|
|
||||||
AS212733
|
|
||||||
AS212746
|
|
||||||
AS212760
|
|
||||||
AS212767
|
|
||||||
AS212792
|
|
||||||
AS212834
|
|
||||||
AS212855
|
|
||||||
AS212856
|
|
||||||
AS212864
|
|
||||||
AS212888
|
|
||||||
AS212895
|
|
||||||
AS212921
|
|
||||||
AS212948
|
|
||||||
AS212963
|
|
||||||
AS212965
|
|
||||||
AS212983
|
|
||||||
AS212995
|
|
||||||
AS213003
|
|
||||||
AS213015
|
|
||||||
AS213018
|
|
||||||
AS213021
|
|
||||||
AS213027
|
|
||||||
AS213031
|
|
||||||
AS213045
|
|
||||||
AS213064
|
|
||||||
AS213105
|
|
||||||
AS213115
|
|
||||||
AS213124
|
|
||||||
AS213126
|
|
||||||
AS213151
|
|
||||||
AS213154
|
|
||||||
AS213163
|
|
||||||
AS213169
|
|
||||||
AS213170
|
|
||||||
AS213185
|
|
||||||
AS213197
|
|
||||||
AS213201
|
|
||||||
AS213234
|
|
||||||
AS213236
|
|
||||||
AS213237
|
|
||||||
AS213244
|
|
||||||
AS213253
|
|
||||||
AS213263
|
|
||||||
AS213285
|
|
||||||
AS213310
|
|
||||||
AS213312
|
|
||||||
AS213326
|
|
||||||
AS213339
|
|
||||||
AS213342
|
|
||||||
AS213343
|
|
||||||
AS213346
|
|
||||||
AS213361
|
|
||||||
AS213366
|
|
||||||
AS213367
|
|
||||||
AS213376
|
|
||||||
AS213382
|
|
||||||
AS213384
|
|
||||||
AS213386
|
|
||||||
AS213388
|
|
||||||
AS213392
|
|
||||||
AS21761
|
|
||||||
AS21957
|
|
||||||
AS23428
|
|
||||||
AS24865
|
|
||||||
AS2613
|
|
||||||
AS2822
|
|
||||||
AS29317
|
|
||||||
AS29478
|
|
||||||
AS30746
|
|
||||||
AS31010
|
|
||||||
AS31451
|
|
||||||
AS31592
|
|
||||||
AS34553
|
|
||||||
AS34615
|
|
||||||
AS34681
|
|
||||||
AS34958
|
|
||||||
AS34966
|
|
||||||
AS35003
|
|
||||||
AS35008
|
|
||||||
AS35121
|
|
||||||
AS35292
|
|
||||||
AS35619
|
|
||||||
AS36198
|
|
||||||
AS38041
|
|
||||||
AS38970
|
|
||||||
AS39083
|
|
||||||
AS39192
|
|
||||||
AS393949
|
|
||||||
AS394112
|
|
||||||
AS396303
|
|
||||||
AS39753
|
|
||||||
AS39765
|
|
||||||
AS39792
|
|
||||||
AS398057
|
|
||||||
AS399748
|
|
||||||
AS399760
|
|
||||||
AS41225
|
|
||||||
AS41666
|
|
||||||
AS41731
|
|
||||||
AS41732
|
|
||||||
AS41767
|
|
||||||
AS41996
|
|
||||||
AS42198
|
|
||||||
AS42495
|
|
||||||
AS42615
|
|
||||||
AS43011
|
|
||||||
AS43126
|
|
||||||
AS43131
|
|
||||||
AS43308
|
|
||||||
AS43433
|
|
||||||
AS43607
|
|
||||||
AS43911
|
|
||||||
AS44072
|
|
||||||
AS44097
|
|
||||||
AS44421
|
|
||||||
AS44496
|
|
||||||
AS44794
|
|
||||||
AS44954
|
|
||||||
AS44980
|
|
||||||
AS47251
|
|
||||||
AS47831
|
|
||||||
AS47837
|
|
||||||
AS47937
|
|
||||||
AS48301
|
|
||||||
AS48387
|
|
||||||
AS48390
|
|
||||||
AS48646
|
|
||||||
AS48767
|
|
||||||
AS49072
|
|
||||||
AS49271
|
|
||||||
AS49697
|
|
||||||
AS49745
|
|
||||||
AS49752
|
|
||||||
AS49781
|
|
||||||
AS49904
|
|
||||||
AS49933
|
|
||||||
AS50329
|
|
||||||
AS50555
|
|
||||||
AS50718
|
|
||||||
AS50721
|
|
||||||
AS50798
|
|
||||||
AS50842
|
|
||||||
AS50869
|
|
||||||
AS51058
|
|
||||||
AS51391
|
|
||||||
AS51421
|
|
||||||
AS51424
|
|
||||||
AS51699
|
|
||||||
AS51861
|
|
||||||
AS52078
|
|
||||||
AS5491
|
|
||||||
AS56544
|
|
||||||
AS56662
|
|
||||||
AS57267
|
|
||||||
AS57345
|
|
||||||
AS57436
|
|
||||||
AS57483
|
|
||||||
AS57632
|
|
||||||
AS57672
|
|
||||||
AS57777
|
|
||||||
AS57782
|
|
||||||
AS57821
|
|
||||||
AS57848
|
|
||||||
AS58145
|
|
||||||
AS58235
|
|
||||||
AS59450
|
|
||||||
AS59617
|
|
||||||
AS59645
|
|
||||||
AS59750
|
|
||||||
AS59813
|
|
||||||
AS59876
|
|
||||||
AS59922
|
|
||||||
AS60271
|
|
||||||
AS60529
|
|
||||||
AS60767
|
|
||||||
AS60927
|
|
||||||
AS60998
|
|
||||||
AS62075
|
|
||||||
AS62078
|
|
||||||
AS62184
|
|
||||||
AS62269
|
|
||||||
AS62374
|
|
||||||
AS62396
|
|
||||||
AS62430
|
|
||||||
AS64264
|
|
||||||
AS64478
|
|
||||||
AS6556
|
|
||||||
AS6838
|
|
||||||
AS7034
|
|
||||||
AS8873
|
|
||||||
AS8874
|
|
||||||
AS8949
|
|
||||||
AS9017
|
|
||||||
AS907
|
|
||||||
AS923
|
|
||||||
AS948
|
|
||||||
AS970
|
|
0
static/_headers
Normal file
0
static/_headers
Normal file
0
static/_redirects
Normal file
0
static/_redirects
Normal file
5
static/_routes.json
Normal file
5
static/_routes.json
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
{
|
||||||
|
"version": 1,
|
||||||
|
"include": ["/*"],
|
||||||
|
"exclude": []
|
||||||
|
}
|
1
static/dist/line-awesome/envelope.svg
vendored
Normal file
1
static/dist/line-awesome/envelope.svg
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M 3 8 L 3 26 L 29 26 L 29 8 Z M 7.3125 10 L 24.6875 10 L 16 15.78125 Z M 5 10.875 L 15.4375 17.84375 L 16 18.1875 L 16.5625 17.84375 L 27 10.875 L 27 24 L 5 24 Z"/></svg>
|
After Width: | Height: | Size: 239 B |
1
static/dist/line-awesome/github.svg
vendored
Normal file
1
static/dist/line-awesome/github.svg
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path fill-rule="evenodd" d="M 16 4 C 9.371094 4 4 9.371094 4 16 C 4 21.300781 7.4375 25.800781 12.207031 27.386719 C 12.808594 27.496094 13.027344 27.128906 13.027344 26.808594 C 13.027344 26.523438 13.015625 25.769531 13.011719 24.769531 C 9.671875 25.492188 8.96875 23.160156 8.96875 23.160156 C 8.421875 21.773438 7.636719 21.402344 7.636719 21.402344 C 6.546875 20.660156 7.71875 20.675781 7.71875 20.675781 C 8.921875 20.761719 9.554688 21.910156 9.554688 21.910156 C 10.625 23.746094 12.363281 23.214844 13.046875 22.910156 C 13.15625 22.132813 13.46875 21.605469 13.808594 21.304688 C 11.144531 21.003906 8.34375 19.972656 8.34375 15.375 C 8.34375 14.0625 8.8125 12.992188 9.578125 12.152344 C 9.457031 11.851563 9.042969 10.628906 9.695313 8.976563 C 9.695313 8.976563 10.703125 8.65625 12.996094 10.207031 C 13.953125 9.941406 14.980469 9.808594 16 9.804688 C 17.019531 9.808594 18.046875 9.941406 19.003906 10.207031 C 21.296875 8.65625 22.300781 8.976563 22.300781 8.976563 C 22.957031 10.628906 22.546875 11.851563 22.421875 12.152344 C 23.191406 12.992188 23.652344 14.0625 23.652344 15.375 C 23.652344 19.984375 20.847656 20.996094 18.175781 21.296875 C 18.605469 21.664063 18.988281 22.398438 18.988281 23.515625 C 18.988281 25.121094 18.976563 26.414063 18.976563 26.808594 C 18.976563 27.128906 19.191406 27.503906 19.800781 27.386719 C 24.566406 25.796875 28 21.300781 28 16 C 28 9.371094 22.628906 4 16 4 Z"/></svg>
|
After Width: | Height: | Size: 1.5 KiB |
1
static/dist/line-awesome/hacker-news.svg
vendored
Normal file
1
static/dist/line-awesome/hacker-news.svg
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M 5 5 L 5 27 L 27 27 L 27 5 Z M 7 7 L 25 7 L 25 25 L 7 25 Z M 11.5 11 L 15 17 L 15 22 L 17 22 L 17 17 L 20.5 11 L 18.5 11 L 16 15.28125 L 13.5 11 Z"/></svg>
|
After Width: | Height: | Size: 225 B |
1
static/dist/line-awesome/linkedin.svg
vendored
Normal file
1
static/dist/line-awesome/linkedin.svg
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M 7.5 5 C 6.132813 5 5 6.132813 5 7.5 L 5 24.5 C 5 25.867188 6.132813 27 7.5 27 L 24.5 27 C 25.867188 27 27 25.867188 27 24.5 L 27 7.5 C 27 6.132813 25.867188 5 24.5 5 Z M 7.5 7 L 24.5 7 C 24.785156 7 25 7.214844 25 7.5 L 25 24.5 C 25 24.785156 24.785156 25 24.5 25 L 7.5 25 C 7.214844 25 7 24.785156 7 24.5 L 7 7.5 C 7 7.214844 7.214844 7 7.5 7 Z M 10.4375 8.71875 C 9.488281 8.71875 8.71875 9.488281 8.71875 10.4375 C 8.71875 11.386719 9.488281 12.15625 10.4375 12.15625 C 11.386719 12.15625 12.15625 11.386719 12.15625 10.4375 C 12.15625 9.488281 11.386719 8.71875 10.4375 8.71875 Z M 19.46875 13.28125 C 18.035156 13.28125 17.082031 14.066406 16.6875 14.8125 L 16.625 14.8125 L 16.625 13.5 L 13.8125 13.5 L 13.8125 23 L 16.75 23 L 16.75 18.3125 C 16.75 17.074219 16.996094 15.875 18.53125 15.875 C 20.042969 15.875 20.0625 17.273438 20.0625 18.375 L 20.0625 23 L 23 23 L 23 17.78125 C 23 15.226563 22.457031 13.28125 19.46875 13.28125 Z M 9 13.5 L 9 23 L 11.96875 23 L 11.96875 13.5 Z"/></svg>
|
After Width: | Height: | Size: 1.0 KiB |
1
static/dist/line-awesome/mastodon.svg
vendored
Normal file
1
static/dist/line-awesome/mastodon.svg
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M 15.9375 4.03125 C 12.917 4.0435 9.9179219 4.4269844 8.3574219 5.1464844 C 8.3574219 5.1464844 5 6.6748594 5 11.880859 C 5 18.077859 4.9955 25.860234 10.5625 27.365234 C 12.6945 27.938234 14.527953 28.061562 16.001953 27.976562 C 18.676953 27.825562 20 27.005859 20 27.005859 L 19.910156 25.029297 C 19.910156 25.029297 18.176297 25.640313 16.029297 25.570312 C 13.902297 25.495313 11.6615 25.335688 11.3125 22.679688 C 11.2805 22.432688 11.264625 22.182594 11.265625 21.933594 C 15.772625 23.052594 19.615828 22.420969 20.673828 22.292969 C 23.627828 21.933969 26.199344 20.081672 26.527344 18.388672 C 27.041344 15.720672 26.998047 11.880859 26.998047 11.880859 C 26.998047 6.6748594 23.646484 5.1464844 23.646484 5.1464844 C 22.000984 4.3779844 18.958 4.019 15.9375 4.03125 z M 12.705078 8.0019531 C 13.739953 8.0297031 14.762578 8.4927031 15.392578 9.4707031 L 16.001953 10.505859 L 16.609375 9.4707031 C 17.874375 7.5037031 20.709594 7.6264375 22.058594 9.1484375 C 23.302594 10.596438 23.025391 11.531 23.025391 18 L 23.025391 18.001953 L 20.578125 18.001953 L 20.578125 12.373047 C 20.578125 9.7380469 17.21875 9.6362812 17.21875 12.738281 L 17.21875 16 L 14.787109 16 L 14.787109 12.738281 C 14.787109 9.6362812 11.429688 9.7360938 11.429688 12.371094 L 11.429688 18 L 8.9765625 18 C 8.9765625 11.526 8.7043594 10.585438 9.9433594 9.1484375 C 10.622859 8.3824375 11.670203 7.9742031 12.705078 8.0019531 z"/></svg>
|
After Width: | Height: | Size: 1.5 KiB |
1
static/dist/line-awesome/reddit.svg
vendored
Normal file
1
static/dist/line-awesome/reddit.svg
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32"><path d="M 18.65625 4 C 16.558594 4 15 5.707031 15 7.65625 L 15 11.03125 C 12.242188 11.175781 9.742188 11.90625 7.71875 13.0625 C 6.945313 12.316406 5.914063 12 4.90625 12 C 3.816406 12 2.707031 12.355469 1.9375 13.21875 L 1.9375 13.25 L 1.90625 13.28125 C 1.167969 14.203125 0.867188 15.433594 1.0625 16.65625 C 1.242188 17.777344 1.898438 18.917969 3.03125 19.65625 C 3.023438 19.769531 3 19.882813 3 20 C 3 22.605469 4.574219 24.886719 6.9375 26.46875 C 9.300781 28.050781 12.488281 29 16 29 C 19.511719 29 22.699219 28.050781 25.0625 26.46875 C 27.425781 24.886719 29 22.605469 29 20 C 29 19.882813 28.976563 19.769531 28.96875 19.65625 C 30.101563 18.917969 30.757813 17.777344 30.9375 16.65625 C 31.132813 15.433594 30.832031 14.203125 30.09375 13.28125 L 30.0625 13.25 C 29.292969 12.386719 28.183594 12 27.09375 12 C 26.085938 12 25.054688 12.316406 24.28125 13.0625 C 22.257813 11.90625 19.757813 11.175781 17 11.03125 L 17 7.65625 C 17 6.675781 17.558594 6 18.65625 6 C 19.175781 6 19.820313 6.246094 20.8125 6.59375 C 21.65625 6.890625 22.75 7.21875 24.15625 7.3125 C 24.496094 8.289063 25.414063 9 26.5 9 C 27.875 9 29 7.875 29 6.5 C 29 5.125 27.875 4 26.5 4 C 25.554688 4 24.738281 4.535156 24.3125 5.3125 C 23.113281 5.242188 22.246094 4.992188 21.46875 4.71875 C 20.566406 4.402344 19.734375 4 18.65625 4 Z M 16 13 C 19.152344 13 21.964844 13.867188 23.9375 15.1875 C 25.910156 16.507813 27 18.203125 27 20 C 27 21.796875 25.910156 23.492188 23.9375 24.8125 C 21.964844 26.132813 19.152344 27 16 27 C 12.847656 27 10.035156 26.132813 8.0625 24.8125 C 6.089844 23.492188 5 21.796875 5 20 C 5 18.203125 6.089844 16.507813 8.0625 15.1875 C 10.035156 13.867188 12.847656 13 16 13 Z M 4.90625 14 C 5.285156 14 5.660156 14.09375 5.96875 14.25 C 4.882813 15.160156 4.039063 16.242188 3.53125 17.4375 C 3.277344 17.117188 3.125 16.734375 3.0625 16.34375 C 2.953125 15.671875 3.148438 14.976563 3.46875 14.5625 C 3.472656 14.554688 3.464844 14.539063 3.46875 14.53125 C 3.773438 14.210938 4.3125 14 4.90625 14 Z M 27.09375 14 C 27.6875 14 28.226563 14.210938 28.53125 14.53125 C 28.535156 14.535156 28.527344 14.558594 28.53125 14.5625 C 28.851563 14.976563 29.046875 15.671875 28.9375 16.34375 C 28.875 16.734375 28.722656 17.117188 28.46875 17.4375 C 27.960938 16.242188 27.117188 15.160156 26.03125 14.25 C 26.339844 14.09375 26.714844 14 27.09375 14 Z M 11 16 C 9.894531 16 9 16.894531 9 18 C 9 19.105469 9.894531 20 11 20 C 12.105469 20 13 19.105469 13 18 C 13 16.894531 12.105469 16 11 16 Z M 21 16 C 19.894531 16 19 16.894531 19 18 C 19 19.105469 19.894531 20 21 20 C 22.105469 20 23 19.105469 23 18 C 23 16.894531 22.105469 16 21 16 Z M 21.25 21.53125 C 20.101563 22.597656 18.171875 23.28125 16 23.28125 C 13.828125 23.28125 11.898438 22.589844 10.75 21.65625 C 11.390625 23.390625 13.445313 25 16 25 C 18.554688 25 20.609375 23.398438 21.25 21.53125 Z"/></svg>
|
After Width: | Height: | Size: 2.9 KiB |
51
static/functions/_middleware.js
Normal file
51
static/functions/_middleware.js
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
async function goat_counter_analytics(context) {
|
||||||
|
|
||||||
|
// We require some env vars to be set. If they are not, fail the request
|
||||||
|
if (!context.env.GOAT_COUNTER_API_KEY) {
|
||||||
|
return new Response('$GOAT_COUNTER_API_KEY is not set', { status: 500, headers: { 'Content-Type': 'text/plain' } });
|
||||||
|
}
|
||||||
|
if (!context.env.GOAT_COUNTER_SITE_CODE) {
|
||||||
|
return new Response('$GOAT_COUNTER_SITE_CODE is not set', { status: 500, headers: { 'Content-Type': 'text/plain' } });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Parse the request URL
|
||||||
|
let url = new URL(context.request.url);
|
||||||
|
|
||||||
|
// Build the payload to send to GoatCounter
|
||||||
|
var payload = {
|
||||||
|
hits: [
|
||||||
|
{
|
||||||
|
path: url.pathname,
|
||||||
|
query: url.search,
|
||||||
|
ref: context.request.headers.get('Referer'),
|
||||||
|
location: context.request.cf.country,
|
||||||
|
user_agent: context.request.headers.get('User-Agent'),
|
||||||
|
session: context.request.cf.botManagement.ja3Hash
|
||||||
|
}
|
||||||
|
]
|
||||||
|
};
|
||||||
|
|
||||||
|
// Count the goat
|
||||||
|
fetch(`https://${context.env.GOAT_COUNTER_SITE_CODE}.goatcounter.com/api/v0/count`, {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json',
|
||||||
|
'Authorization': 'Bearer ' + context.env.GOAT_COUNTER_API_KEY,
|
||||||
|
},
|
||||||
|
body: JSON.stringify(payload),
|
||||||
|
});
|
||||||
|
|
||||||
|
// Execute the rest of the request chain
|
||||||
|
let response = await context.next();
|
||||||
|
|
||||||
|
// For debugging, allow the requester to expose the body through a response header
|
||||||
|
if (url.searchParams.get('goat-counter-debug') == 'true') {
|
||||||
|
response.headers.set('X-GoatCounter-Payload', JSON.stringify(payload));
|
||||||
|
}
|
||||||
|
|
||||||
|
// Return the response
|
||||||
|
return response;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Chaining
|
||||||
|
export const onRequest = [goat_counter_analytics];
|
4
static/functions/geofeed.csv.js
Normal file
4
static/functions/geofeed.csv.js
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
export function onRequest(context) {
|
||||||
|
return fetch("https://docs.google.com/spreadsheets/d/e/2PACX-1vQt0iQi7wFZ9tNSFuMSTdZtT10cbtJFTaSp0OHvXH5O4Im9xG0_SuKNDsLeiEUqVppiNFoTN1reGDXy/pub?gid=391960727&single=true&output=csv")
|
||||||
|
}
|
||||||
|
|
@ -16,33 +16,32 @@
|
|||||||
<ul>
|
<ul>
|
||||||
<li>
|
<li>
|
||||||
<a target="_blank" class="about-quick-link" href="mailto:{{config.extra.email}}" rel="me">
|
<a target="_blank" class="about-quick-link" href="mailto:{{config.extra.email}}" rel="me">
|
||||||
<img src="https://maxst.icons8.com/vue-static/landings/line-awesome/line-awesome/1.3.0/svg/envelope.svg"
|
<img src="/dist/line-awesome/envelope.svg" alt="email: " loading="lazy">
|
||||||
alt="email: " loading="lazy">
|
|
||||||
{{config.extra.email}}
|
{{config.extra.email}}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a target="_blank" class="about-quick-link" href="https://github.com/{{config.extra.github}}" rel="me">
|
<a target="_blank" class="about-quick-link" href="https://github.com/{{config.extra.github}}"
|
||||||
<img src="https://maxst.icons8.com/vue-static/landings/line-awesome/line-awesome/1.3.0/svg/github.svg"
|
rel="me">
|
||||||
alt="github: " loading="lazy">
|
<img src="/dist/line-awesome/github.svg" alt="github: " loading="lazy">
|
||||||
{{config.extra.github}}
|
{{config.extra.github}}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a target="_blank" class="about-quick-link" href="https://linkedin.com/in/{{config.extra.linkedin}}" rel="me">
|
<a target="_blank" class="about-quick-link" href="https://linkedin.com/in/{{config.extra.linkedin}}"
|
||||||
<img src="https://maxst.icons8.com/vue-static/landings/line-awesome/line-awesome/1.3.0/svg/linkedin.svg"
|
rel="me">
|
||||||
alt="linkedin: " loading="lazy">
|
<img src="/dist/line-awesome/linkedin.svg" alt="linkedin: " loading="lazy">
|
||||||
{{config.extra.linkedin}}
|
{{config.extra.linkedin}}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
<a target="_blank" class="about-quick-link" href="https://social.ewpratten.com/{{config.extra.mastodon}}" rel="me">
|
<a target="_blank" class="about-quick-link"
|
||||||
<img src="https://maxst.icons8.com/vue-static/landings/line-awesome/line-awesome/1.3.0/svg/mastodon.svg"
|
href="https://social.ewpratten.com/{{config.extra.mastodon}}" rel="me">
|
||||||
alt="linkedin: " loading="lazy">
|
<img src="/dist/line-awesome/mastodon.svg" alt="linkedin: " loading="lazy">
|
||||||
{{config.extra.mastodon}}
|
{{config.extra.mastodon}}
|
||||||
</a>
|
</a>
|
||||||
</li>
|
</li>
|
||||||
|
|
||||||
{# <li>
|
{# <li>
|
||||||
<a class="about-quick-link" href="/contact">
|
<a class="about-quick-link" href="/contact">
|
||||||
<img src="https://maxst.icons8.com/vue-static/landings/line-awesome/line-awesome/1.3.0/svg/ellipsis-h-solid.svg"
|
<img src="https://maxst.icons8.com/vue-static/landings/line-awesome/line-awesome/1.3.0/svg/ellipsis-h-solid.svg"
|
||||||
@ -53,4 +52,4 @@
|
|||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
@ -1,11 +1,3 @@
|
|||||||
{# Analytics #}
|
|
||||||
<script data-goatcounter="https://ewpratten.goatcounter.com/count"
|
|
||||||
async src="//gc.zgo.at/count.js"></script>
|
|
||||||
<noscript>
|
|
||||||
<img src="https://ewpratten.goatcounter.com/count?p={{page_path | safe}}">
|
|
||||||
</noscript>
|
|
||||||
|
|
||||||
|
|
||||||
<!-- Global site tag (gtag.js) - Google Analytics -->
|
<!-- Global site tag (gtag.js) - Google Analytics -->
|
||||||
<script defer src="https://www.googletagmanager.com/gtag/js?id=G-5912H4H03P"></script>
|
<script defer src="https://www.googletagmanager.com/gtag/js?id=G-5912H4H03P"></script>
|
||||||
<script>
|
<script>
|
||||||
|
@ -58,17 +58,17 @@
|
|||||||
{% if page.extra.discuss %}
|
{% if page.extra.discuss %}
|
||||||
<div class="left-box">
|
<div class="left-box">
|
||||||
<a href="{{page.extra.discuss.reddit}}" target="_blank">
|
<a href="{{page.extra.discuss.reddit}}" target="_blank">
|
||||||
<img src="https://maxst.icons8.com/vue-static/landings/line-awesome/line-awesome/1.3.0/svg/reddit-alien.svg"
|
<img src="/dist/line-awesome/reddit.svg"
|
||||||
alt="View on Reddit" loading="lazy">
|
alt="View on Reddit" loading="lazy">
|
||||||
</a>
|
</a>
|
||||||
{% if page.extra.discuss.hacker_news %}
|
{% if page.extra.discuss.hacker_news %}
|
||||||
<a href="{{page.extra.discuss.hacker_news}}" target="_blank">
|
<a href="{{page.extra.discuss.hacker_news}}" target="_blank">
|
||||||
<img src="https://maxst.icons8.com/vue-static/landings/line-awesome/line-awesome/1.3.0/svg/hacker-news.svg"
|
<img src="/dist/line-awesome/hacker-news.svg"
|
||||||
alt="View on Hacker News" loading="lazy">
|
alt="View on Hacker News" loading="lazy">
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<a href="mailto:comment@ewpratten.com?subject=Comment: {{page.title}}" target="_blank">
|
<a href="mailto:comment@ewpratten.com?subject=Comment: {{page.title}}" target="_blank">
|
||||||
<img src="https://maxst.icons8.com/vue-static/landings/line-awesome/line-awesome/1.3.0/svg/envelope.svg"
|
<img src="/dist/line-awesome/envelope.svg"
|
||||||
alt="Comment via Email" loading="lazy">
|
alt="Comment via Email" loading="lazy">
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user