Skip to content

Commit 1911d8c

Browse files
authored
Merge pull request #25 from gibbs/rule-updates
Rule updates
2 parents fe6e902 + 782601c commit 1911d8c

File tree

15 files changed

+528
-598
lines changed

15 files changed

+528
-598
lines changed

attribution.yaml

Lines changed: 1 addition & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,2 @@
11
---
2-
# This is for posterity and tracking. Do something with it eventually to
3-
# attribute properly?
4-
images:
5-
covers/currency-data.jpeg:
6-
src: https://unsplash.com/photos/ROQzKIAdY78
7-
author: John McArthur
8-
url: https://unsplash.com/@snowjam
9-
10-
covers/placeholder.jpg:
11-
src: https://unsplash.com/photos/Tjbk79TARiE
12-
author: Sai Kiran Anagani
13-
url: https://unsplash.com/@anagani_saikiran
2+
# This is for posterity and tracking. Do something with it eventually

content/index.md

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,3 @@ jsonld:
1515
---
1616

1717
# Dan Gibbs { .hero__title #goto-h1 }
18-
19-
## Full Stack Web Developer and Linux Sysadmin { .hero__subtitle #goto-h2 }
20-
21-
I'm Dan Gibbs — an experienced developer involved in all things web related. I
22-
work on front and backend projects, development/operations,
23-
databases, testing, deployment, automation, infrastructure as code and
24-
everything else in between.

package-lock.json

Lines changed: 429 additions & 288 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/_data/rules/csp.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* Content security policies
3+
* @see https://developer.mozilla.org/en-US/docs/Web/HTTP/Guides/CSP
4+
*/
5+
const resources = require('./resources')
6+
const directives = {
7+
'upgrade-insecure-requests': '',
8+
'base-uri': "'self'",
9+
'child-src': "'none'",
10+
'connect-src': `'self' ${resources.app.src}`,
11+
'default-src': "'self'",
12+
'font-src': "'self' data:",
13+
'form-action': "'self'",
14+
'frame-src': "'none'",
15+
'img-src': "'self' https://github.com/gibbs/ https://img.shields.io/ data:",
16+
'manifest-src': "'self'",
17+
'media-src': "'self'",
18+
'object-src': "'self'",
19+
'script-src': `'self' ${resources['chart.js'].src}`,
20+
'style-src': "'self' 'unsafe-inline'",
21+
'worker-src': "'self'"
22+
}
23+
24+
if (process.env.APP_ENV !== 'production') {
25+
directives['script-src'] = `'self' 'unsafe-eval' 'unsafe-inline' ${resources['chart.js'].src}`
26+
}
27+
28+
module.exports = Object.keys(directives).map(key => `${key} ${directives[key]}`).join('; ')

src/_data/rules/resources.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/**
2+
* External resources
3+
*/
4+
const resources = {
5+
app: {
6+
src: process.env.APP_SERVICE_URL
7+
},
8+
'chart.js': {
9+
src: 'https://cdn.jsdelivr.net/npm/[email protected]/dist/chart.umd.min.js',
10+
sha: 'sha512-IMvjDnJzMKoQZLPYQHxR4g8nm0sSd9bR7Kl5ayxnPHV8ChqVpHCdBYXGib3ZftuDlfaceqn7t47fObseBCEEJw=='
11+
}
12+
}
13+
14+
module.exports = resources

src/_data/rules/speculation.js

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
/**
2+
* Speculation rules
3+
* @see https://developer.mozilla.org/en-US/docs/Web/API/Speculation_Rules_API
4+
*/
5+
const speculation = {
6+
prerender: [
7+
{
8+
eagerness: 'eager',
9+
source: 'list',
10+
urls: [
11+
'/',
12+
'/projects/',
13+
'/tools/'
14+
]
15+
}, {
16+
eagerness: 'moderate',
17+
where: {
18+
and: [
19+
{ href_matches: '/*' },
20+
{ not: { selector_matches: '.npr' } },
21+
{ not: { selector_matches: '[rel~=nofollow]' } }
22+
]
23+
}
24+
}
25+
]
26+
}
27+
28+
module.exports = JSON.stringify(speculation)

src/_data/site.js

Lines changed: 3 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -11,26 +11,7 @@ module.exports = {
1111
host: url.host,
1212
hostname: url.hostname,
1313
year: (new Date()).getFullYear(),
14-
contentSecurity: [
15-
'upgrade-insecure-requests',
16-
"default-src 'self'",
17-
"style-src 'self' 'unsafe-inline'",
18-
"script-src 'self' 'unsafe-inline' 'unsafe-eval' " + [
19-
url.origin,
20-
'https://cdn.jsdelivr.net/npm/chart.js'
21-
].join(' '),
22-
"font-src 'self' " + [
23-
'fonts.gstatic.com',
24-
'data:'
25-
].join(' '),
26-
'img-src * data:',
27-
"connect-src 'self' " + [
28-
url.host,
29-
'*.' + url.host
30-
].join(' '),
31-
"base-uri 'self'",
32-
"object-src 'none'",
33-
"manifest-src 'self'",
34-
"worker-src 'self'"
35-
].join('; ')
14+
contentSecurityPolicy: require('./rules/csp'),
15+
speculationRules: require('./rules/speculation'),
16+
resources: require('./rules/resources')
3617
}

src/_includes/footer.njk

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
<footer id="footer" class="footer">
1+
{#<footer id="footer" class="footer">
22
<div class="container footer-grid">
33
<nav class="footer-navigation">
44
<ul class="footer-navigation__list">
@@ -51,7 +51,7 @@
5151
</a>
5252
</div>
5353
</div>
54-
</footer>
54+
</footer>#}
5555

5656
<footer id="copyright" class="copyright">
5757
<div class="container copyright__grid">

src/_includes/navigation.njk

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
<li class="navigation__item" {% if page.url == '/' %} aria-current="page"{% endif %}>
33
<a class="navigation__anchor{% if page.url == '/' %} navigation__anchor--active{% endif %}" href="{{ site.url }}/">Home</a>
44
</li>
5-
<li class="navigation__item" {% if '/blog/' in page.url %} aria-current="page"{% endif %}>
5+
{#<li class="navigation__item" {% if '/blog/' in page.url %} aria-current="page"{% endif %}>
66
<a class="navigation__anchor{% if '/blog/' in page.url %} navigation__anchor--active{% endif %}" href="{{ site.url }}/blog/">Blog</a>
7-
</li>
7+
</li>#}
88
<li class="navigation__item" {% if page.url == '/projects/' %} aria-current="page"{% endif %}>
99
<a class="navigation__anchor{% if '/projects/' in page.url %} navigation__anchor--active{% endif %}" href="{{ site.url }}/projects/">Projects</a>
1010
</li>

src/_layouts/base.njk

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,19 +3,17 @@
33
<head>
44
<meta charset="utf-8">
55
<meta name="viewport" content="width=device-width, initial-scale=1.0">
6-
<meta http-equiv="content-security-policy" content="{{ site.contentSecurity|safe }}">
6+
<meta http-equiv="content-security-policy" content="{{ site.contentSecurityPolicy|safe }}">
77
<title>{{ title or meta.title }}</title>
8-
<link rel="preconnect" href="https://fonts.googleapis.com">
9-
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
108
{% block meta %}{% include "meta.njk" %}{% endblock %}
119
{% if jsonld %}
1210
<script type="application/ld+json">
1311
{% block json_ld %}{{ jsonld | toJSONLD | safe }}{% endblock %}
1412
</script>
1513
{% endif %}
1614
<style>{% css %}</style>
15+
<script integrity="{% sri 'init.js', true %}">{% asset 'init.js' %}</script>
1716
<noscript><style>.js-required{display:none}.navigation{flex-direction:row-reverse}@media (min-width:768px){.navigation{flex-direction:row}}</style></noscript>
18-
<script>document.documentElement.setAttribute('data-dark-mode', JSON.parse(window.sessionStorage.getItem('theme')) ?? false)</script>
1917
</head>
2018

2119
<body class="layout-{{ layout|default('base') }}">
@@ -52,6 +50,7 @@
5250
{% endblock %}
5351

5452
<script src="{{ site.url }}{% manifest 'main.js' %}" integrity="{% sri 'main.js', true %}"></script>
53+
<script type="speculationrules">{{ site.speculationRules|safe }}</script>
5554
{% block scripts %}{% endblock %}
5655
</body>
5756
</html>

0 commit comments

Comments
 (0)