@networkpro/web 1.12.7 → 1.12.9

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (64) hide show
  1. package/CHANGELOG.md +92 -2
  2. package/README.md +27 -0
  3. package/cspell.json +4 -0
  4. package/jsconfig.template.jsonc +3 -1
  5. package/package.json +10 -10
  6. package/src/app.html +1 -1
  7. package/src/hooks.server.js +1 -1
  8. package/src/lib/components/CodeBlock.svelte +13 -0
  9. package/src/lib/components/foss/FossItemContent.svelte +2 -2
  10. package/src/lib/data/fossData.js +8 -1
  11. package/src/lib/images.js +15 -8
  12. package/src/lib/img/qr/pgp-contact.webp +0 -0
  13. package/src/lib/img/qr/pgp-github.webp +0 -0
  14. package/src/lib/img/qr/pgp-security.png +0 -0
  15. package/src/lib/img/qr/pgp-security.webp +0 -0
  16. package/src/lib/img/qr/pgp-support.webp +0 -0
  17. package/src/lib/img/qr/vcard.webp +0 -0
  18. package/src/lib/meta.js +5 -0
  19. package/src/lib/pages/AboutContent.svelte +62 -32
  20. package/src/lib/pages/LicenseContent.svelte +13 -19
  21. package/src/lib/pages/PGPContent.svelte +142 -0
  22. package/src/lib/pages/TermsConditionsContent.svelte +1 -1
  23. package/src/lib/styles/css/default.css +23 -1
  24. package/src/lib/styles/css/style.css +13 -4
  25. package/src/lib/styles/global.min.css +1 -1
  26. package/src/routes/pgp/+page.server.js +18 -0
  27. package/src/routes/pgp/+page.svelte +61 -0
  28. package/src/routes/pgp/[key]/+server.js +35 -0
  29. package/src/service-worker.js +18 -6
  30. package/static/{assets → bin}/license/CC-BY-4.0.html +1 -1
  31. package/static/{assets → bin}/license/COPYING.html +1 -1
  32. package/static/img/powered-by-proton.svg +1 -0
  33. package/static/pgp/pgp-contact.webp +0 -0
  34. package/static/pgp/pgp-github.webp +0 -0
  35. package/static/pgp/pgp-security.png +0 -0
  36. package/static/pgp/pgp-security.webp +0 -0
  37. package/static/pgp/pgp-support.webp +0 -0
  38. package/static/pgp/security@s.neteng.pro.asc +22 -0
  39. package/static/pgp/vcard.webp +0 -0
  40. package/static/sitemap.xml +71 -11
  41. package/static/assets/bin/contact.vcf +0 -13
  42. package/static/assets/bin/contact@s.neteng.pro.asc +0 -17
  43. package/static/assets/bin/github@sl.neteng.cc.asc +0 -29
  44. package/static/assets/bin/linksheet.json +0 -8
  45. package/static/assets/bin/support@neteng.pro.asc +0 -47
  46. package/static/assets/consulting-terms.pdf +0 -0
  47. /package/{assets → static/bin}/consulting-terms.pdf +0 -0
  48. /package/{assets → static}/bin/contact.vcf +0 -0
  49. /package/static/{assets → bin}/license/CC-BY-4.0-rdfa.xml +0 -0
  50. /package/static/{assets → bin}/license/CC-BY-4.0.md +0 -0
  51. /package/static/{assets → bin}/license/CC-BY-4.0.txt +0 -0
  52. /package/static/{assets → bin}/license/CC-BY-4.0.xml +0 -0
  53. /package/static/{assets → bin}/license/COPYING-rdfa.xml +0 -0
  54. /package/static/{assets → bin}/license/COPYING.md +0 -0
  55. /package/static/{assets → bin}/license/COPYING.odt +0 -0
  56. /package/static/{assets → bin}/license/COPYING.txt +0 -0
  57. /package/{assets → static}/bin/linksheet.json +0 -0
  58. /package/{assets/bin → static/pgp}/contact@s.neteng.pro.asc +0 -0
  59. /package/{assets/bin → static/pgp}/github@sl.neteng.cc.asc +0 -0
  60. /package/static/{img/qr → pgp}/pgp-contact.png +0 -0
  61. /package/static/{img/qr → pgp}/pgp-github.png +0 -0
  62. /package/static/{img/qr → pgp}/pgp-support.png +0 -0
  63. /package/{assets/bin → static/pgp}/support@neteng.pro.asc +0 -0
  64. /package/static/{img/qr → pgp}/vcard.png +0 -0
package/CHANGELOG.md CHANGED
@@ -22,7 +22,95 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
22
22
 
23
23
  ---
24
24
 
25
- ## [1.12.7] - 2025-06-10
25
+ ## [1.12.9] - 2025-06-11
26
+
27
+ ### Added
28
+
29
+ - Added `check-security-txt-expiry.yml` workflow to check `.well-known/security.txt` expiration and warn if close to expiring
30
+ - Added `humans.txt` and `security.txt` to `.well-known/` directory
31
+ - Added `src/lib/components/CodeBlock.svelte` component for improved inline formatting control
32
+ - Updated sitemap.xml to include `.well-known/` routes and the `/pgp` route
33
+ - Added link to OpenPGP results for `security@s.neteng.pro` on the `/pgp` route
34
+ - Added support for copy-to-clipboard feedback on PGP fingerprint buttons
35
+ - Added detached signature (`security.txt.asc`) for `.well-known/security.txt`, signed with the `security@s.neteng.pro` PGP key
36
+
37
+ ### Changed
38
+
39
+ - Version bump to `v1.12.9` in `package.json`
40
+ - Corrected the name of `dnt-policy.txt` from `dnt-policy-1.0.txt`
41
+ - Updated `src/service-worker.js` to:
42
+ - Reflect correct `.well-known/dnt-policy.txt` reference
43
+ - Exclude `.well-known/security.txt.asc` from caching
44
+ - Applied line breaks to comment header in `jsconfig.template.jsonc` to fix formatting
45
+ - Minor revision to spreadsheet display and fingerprint formatting for improved mobile responsiveness
46
+ - Revised `.github/SECURITY.md`:
47
+ - Removed note about “PGP section coming soon to the wiki” (now live)
48
+ - Clarified Proton Mail use for `s.neteng.pro` addresses, while preserving support guidance for others
49
+ - Streamlined vulnerability reporting section for clarity and correctness
50
+ - Updated Content Security Policy (CSP) header to allow `clipboard-write` permission
51
+ - Added Proton Mail usage note to `/pgp` route UI for `s.neteng.pro` domain only
52
+ - Added equivalent Proton Mail usage comment to `.well-known/security.txt`
53
+ - Upgraded dependencies:
54
+ - `@eslint/compat` `^1.2.9` → `^1.3.0`
55
+ - `eslint-plugin-jsdoc` `^50.7.1` → `^50.8.0`
56
+ - `postcss` `^8.5.4` → `^8.5.5`
57
+ - `posthog-js` `^1.250.1` → `^1.250.2`
58
+ - `svelte` `5.33.19` → `5.34.1`
59
+
60
+ ---
61
+
62
+ ## [1.12.8] - 2025-06-11
63
+
64
+ ### Added
65
+
66
+ - Created `/pgp` route with `+page.svelte`, `+page.server.js`, and supporting structure.
67
+ - Added `src/lib/pages/PGPContent.svelte` for rendering PGP key information.
68
+ - Dynamic routing with `src/routes/pgp/[key]/+server.js` for serving `.asc` files with correct MIME type (`application/pgp-keys`).
69
+ - Support for serving QR code images statically in `/pgp` and dynamically in `/about`.
70
+ - Added WebP versions of QR code images in `static/pgp/` and `src/lib/img/qr/`.
71
+ - Set up dynamic import for QR images in `/about` route via `src/lib/images.js`.
72
+ - Enhanced accessibility styles for focus-visible states on links.
73
+ - Improved copy-to-clipboard buttons for PGP fingerprints.
74
+ - Defined `ContactAssets` typedef and expanded `pgpKeys` data structure for strict typing.
75
+ - README updated with new section: `static/pgp/` Directory Structure.
76
+
77
+ ### Changed
78
+
79
+ - Modified `/about` route to reference `/pgp` and use dynamic WebP images for PGP keys.
80
+ - Adjusted `src/lib/meta.js` to include metadata for the `/pgp` route.
81
+ - Canonical links in `static/bin/CC-BY-4.0.html` and `static/bin/COPYING.html` updated to reflect new paths.
82
+ - Service worker updated to exclude `.asc` files in `/pgp`, while continuing to cache QR image assets.
83
+ - Moved license and binary files from `static/assets` to `static/bin`.
84
+ - File paths updated on the `/license` route to reflect the new `/bin/license` location.
85
+ - Updated sitemap.xml.
86
+ - Updated `.prettierignore` to ignore `static/bin/license`.
87
+ - Updated LinkSheet download in `FossItemContent.svelte` to reference `bin/linksheet.json`.
88
+ - Added dynamic `lsheetDl` constant in `fossData.js`.
89
+ - Updated `TermsConditionsContent.svelte` to point to `bin/consulting-terms.pdf`.
90
+ - Updated `LicenseContent.svelte` to:
91
+ - View HTML license file.
92
+ - Use `download` attribute for all other formats.
93
+ - Updated `generator` meta tag to reflect `SvelteKit 2.21.4`
94
+ - Upgraded dependencies:
95
+ - `@playwright/test` updated from `^1.52.0` → `^1.53.0`
96
+ - `@sveltejs/kit` updated from `2.21.3` → `2.21.4`
97
+ - `eslint-plugin-svelte` updated from `^3.9.1` → `^3.9.2`
98
+ - `playwright` updated from `^1.52.0` → `^1.53.0`
99
+ - `posthog-js` updated from `^1.249.5` → `^1.250.1`
100
+ - `svelte` updated from `5.33.18` → `5.33.19`
101
+
102
+ ### Fixed
103
+
104
+ - Resolved TypeScript and JSDoc typing errors in `AboutContent.svelte` and `PGPContent.svelte`.
105
+ - Verified fallback behavior on `/pgp/[key]` for unknown files:
106
+ - `.asc` files return "File not found".
107
+ - All others fall through to 404.
108
+ - Adjusted `function copy(text)` with explicit JSDoc type for parameter.
109
+ - Removed stale references to deleted assets in service worker config.
110
+
111
+ ---
112
+
113
+ ## [1.12.7] - 2025-06-09
26
114
 
27
115
  ### Changed
28
116
 
@@ -198,7 +286,9 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
198
286
 
199
287
  <!-- Link references -->
200
288
 
201
- [Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.12.7...HEAD
289
+ [Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.12.9...HEAD
290
+ [1.12.9]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.9
291
+ [1.12.8]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.8
202
292
  [1.12.7]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.7
203
293
  [1.12.6]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.6
204
294
  [1.12.5]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.5
package/README.md CHANGED
@@ -105,6 +105,33 @@ This project follows the principles of [Keep a Changelog](https://keepachangelog
105
105
 
106
106
  &nbsp;
107
107
 
108
+ ### 🔐 `static/pgp/` Directory Structure
109
+
110
+ This directory contains public PGP key files and their corresponding QR codes.
111
+
112
+ ```bash
113
+ static/
114
+ ├── pgp/
115
+ │ ├── contact@s.neteng.pro.asc # Public key for secure email
116
+ │ ├── pgp-contact.png # QR code (PNG) for secure email key
117
+ │ ├── pgp-contact.webp # Optimized WebP version of the QR code
118
+ │ ├── pgp-security.png # QR code (PNG) for security contact key
119
+ │ ├── pgp-security.webp # WebP version of the security QR code
120
+ │ ├── pgp-support.png # QR code (PNG) for support key
121
+ │ ├── pgp-support.webp # WebP version of the support QR code
122
+ │ ├── security@s.neteng.pro.asc # Public key for security contact
123
+ │ ├── support@neteng.pro.asc # Public key for general support
124
+ └── ...
125
+ ```
126
+
127
+ - `.asc` files are **excluded from service worker precaching** but served directly via the `/pgp/[key]` route.
128
+ - QR code images are **served statically** by the `/pgp` route using `<picture>` elements.
129
+ - **WebP versions** are also used in the `/pgp` route, while the `/about` route imports **dynamic equivalents** from `src/lib/img/qr`.
130
+ - This route does **not use fallback rendering**; only explicitly defined files are available and expected to resolve.
131
+ - A dynamic `[key]/+server.js` handler under `src/routes/pgp/` serves the `.asc` files with appropriate `Content-Type` and download headers.
132
+
133
+ &nbsp;
134
+
108
135
  ### E2E Test Structure
109
136
 
110
137
  End-to-end tests are located in `tests/e2e/` and organized by feature or route:
package/cspell.json CHANGED
@@ -13,6 +13,7 @@
13
13
  "ccby",
14
14
  "CCPA",
15
15
  "CPRA",
16
+ "elif",
16
17
  "Embedder",
17
18
  "Ente",
18
19
  "esbuild",
@@ -33,6 +34,7 @@
33
34
  "lighthouserc",
34
35
  "lightningcss",
35
36
  "linksheet",
37
+ "lsheet",
36
38
  "Mailvelope",
37
39
  "Maricopa",
38
40
  "mdsvex",
@@ -51,7 +53,9 @@
51
53
  "NWPRO",
52
54
  "obtainium",
53
55
  "openpgp",
56
+ "opgp",
54
57
  "posthog",
58
+ "precaching",
55
59
  "prefs",
56
60
  "publickey",
57
61
  "reconsent",
@@ -1,7 +1,9 @@
1
1
  /* =========================================================================
2
2
  jsconfig.template.jsonc
3
3
 
4
- NOTE: This file is for reference only and is not actively used by SvelteKit or tooling. SvelteKit uses the jsconfig.json file without comments for actual configuration.
4
+ NOTE: This file is for reference only and is not actively used by SvelteKit or
5
+ tooling. SvelteKit uses the jsconfig.json file without comments for actual
6
+ configuration.
5
7
 
6
8
  Copyright © 2025 Network Pro Strategies (Network Pro™)
7
9
  SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@networkpro/web",
3
3
  "private": false,
4
- "version": "1.12.7",
4
+ "version": "1.12.9",
5
5
  "description": "Locking Down Networks, Unlocking Confidence™ | Security, Networking, Privacy — Network Pro Strategies",
6
6
  "keywords": [
7
7
  "advisory",
@@ -80,17 +80,17 @@
80
80
  },
81
81
  "dependencies": {
82
82
  "dompurify": "^3.2.6",
83
- "posthog-js": "^1.249.5",
83
+ "posthog-js": "^1.250.2",
84
84
  "semver": "^7.7.2",
85
- "svelte": "5.33.18"
85
+ "svelte": "5.34.1"
86
86
  },
87
87
  "devDependencies": {
88
- "@eslint/compat": "^1.2.9",
88
+ "@eslint/compat": "^1.3.0",
89
89
  "@eslint/js": "^9.28.0",
90
90
  "@lhci/cli": "^0.15.0",
91
- "@playwright/test": "^1.52.0",
91
+ "@playwright/test": "^1.53.0",
92
92
  "@sveltejs/adapter-netlify": "^5.0.2",
93
- "@sveltejs/kit": "2.21.3",
93
+ "@sveltejs/kit": "2.21.4",
94
94
  "@sveltejs/vite-plugin-svelte": "5.1.0",
95
95
  "@testing-library/jest-dom": "^6.6.3",
96
96
  "@testing-library/svelte": "^5.2.8",
@@ -99,16 +99,16 @@
99
99
  "browserslist": "^4.25.0",
100
100
  "eslint": "^9.28.0",
101
101
  "eslint-config-prettier": "^10.1.5",
102
- "eslint-plugin-jsdoc": "^50.7.1",
103
- "eslint-plugin-svelte": "^3.9.1",
102
+ "eslint-plugin-jsdoc": "^50.8.0",
103
+ "eslint-plugin-svelte": "^3.9.2",
104
104
  "globals": "^16.2.0",
105
105
  "jsdom": "^26.1.0",
106
106
  "lightningcss": "^1.30.1",
107
107
  "markdownlint": "^0.38.0",
108
108
  "markdownlint-cli2": "^0.18.1",
109
109
  "mdsvex": "^0.12.6",
110
- "playwright": "^1.52.0",
111
- "postcss": "^8.5.4",
110
+ "playwright": "^1.53.0",
111
+ "postcss": "^8.5.5",
112
112
  "prettier": "^3.5.3",
113
113
  "prettier-plugin-svelte": "^3.4.0",
114
114
  "stylelint": "^16.20.0",
package/src/app.html CHANGED
@@ -72,7 +72,7 @@
72
72
  content="bx4ham0zkpvzztzu213bhpt76m9siq" />
73
73
  <!-- cspell:enable -->
74
74
 
75
- <meta name="generator" content="SvelteKit 2.21.3" />
75
+ <meta name="generator" content="SvelteKit 2.21.4" />
76
76
 
77
77
  <script src="/disableSw.js"></script>
78
78
 
@@ -67,7 +67,7 @@ export async function handle({ event, resolve }) {
67
67
  "microphone=()",
68
68
  "geolocation=()",
69
69
  "clipboard-read=()",
70
- "clipboard-write=()",
70
+ "clipboard-write=(self)",
71
71
  "payment=()",
72
72
  "usb=()",
73
73
  "hid=()",
@@ -0,0 +1,13 @@
1
+ <!-- ==========================================================================
2
+ src/lib/components/CodeBlock.svelte
3
+
4
+ Copyright © 2025 Network Pro Strategies (Network Pro™)
5
+ SPDX-License-Identifier: CC-BY-4.0 OR GPL-3.0-or-later
6
+ This file is part of Network Pro.
7
+ ========================================================================== -->
8
+
9
+ <script>
10
+ export let text = "";
11
+ </script>
12
+
13
+ <code class="block">{text}</code>
@@ -126,11 +126,11 @@ This file is part of Network Pro.
126
126
  ><i class="fas fa-file-arrow-down" style="margin-left: 8px;"></i
127
127
  ></span>
128
128
  <a
129
- href="/assets/bin/linksheet.json"
129
+ href="/bin/linksheet.json"
130
130
  type="application/json"
131
131
  download
132
132
  style="margin-left: 8px;"
133
- target="_blank">
133
+ target={PAGE.BLANK}>
134
134
  Obtainium App Config
135
135
  </a>
136
136
  </p>
@@ -7,8 +7,15 @@ This file is part of Network Pro.
7
7
  ========================================================================== */
8
8
 
9
9
  // Import FOSS images
10
+ import { base } from "$app/paths";
10
11
  import { acodePng, acodeWbp, eauthPng, eauthWbp, hboardPng, hboardWbp, lsheetPng, lsheetWbp, pmxPng, pmxWbp, squirclePng, squircleWbp, tosPng, tosWbp, urlPng, urlWbp } from "$lib";
11
12
 
13
+ /**
14
+ * URL to the LinkSheet config file, using the base path
15
+ * @type {string}
16
+ */
17
+ const lsheetDl = `${base}/bin/linksheet.json`;
18
+
12
19
  export const fossData = [
13
20
  {
14
21
  id: "squircle",
@@ -510,7 +517,7 @@ export const fossData = [
510
517
  hideLabels: true, // Special flag to control rendering
511
518
  downloadText: "Obtainium App Config",
512
519
  downloadHref:
513
- "https://raw.githubusercontent.com/netwk-pro/dev-sveltekit/refs/heads/master/assets/bin/linksheet.json",
520
+ {lsheetDl},
514
521
  },
515
522
  {
516
523
  label: "GitHub",
package/src/lib/images.js CHANGED
@@ -15,7 +15,7 @@ This file is part of Network Pro.
15
15
  * @description Provides convenient access to images in the src/lib/img directory
16
16
  * @module src/lib
17
17
  * @author SunDevil311
18
- * @updated 2025-05-30
18
+ * @updated 2025-06-09
19
19
  */
20
20
 
21
21
  // Import favicon images
@@ -55,9 +55,14 @@ import urlPng from "$lib/img/posts/urlcheck.png";
55
55
  import urlWbp from "$lib/img/posts/urlcheck.webp";
56
56
 
57
57
  // Import QR code images
58
- import pgpContact from "$lib/img/qr/pgp-contact.png";
59
- import pgpSupport from "$lib/img/qr/pgp-support.png";
60
- import vcfSrc from "$lib/img/qr/vcard.png";
58
+ import pgpContactPng from "$lib/img/qr/pgp-contact.png";
59
+ import pgpContactWbp from "$lib/img/qr/pgp-contact.webp";
60
+ import pgpSecurityPng from "$lib/img/qr/pgp-security.png";
61
+ import pgpSecurityWbp from "$lib/img/qr/pgp-security.webp";
62
+ import pgpSupportPng from "$lib/img/qr/pgp-support.png";
63
+ import pgpSupportWbp from "$lib/img/qr/pgp-support.webp";
64
+ import vcfPng from "$lib/img/qr/vcard.png";
65
+ import vcfWbp from "$lib/img/qr/vcard.webp";
61
66
 
62
67
  // Re-export all imports
63
68
  export {
@@ -79,9 +84,10 @@ export {
79
84
  lsheetWbp,
80
85
  obtainiumPng,
81
86
  obtainiumWbp,
82
- pgpContact,
83
- pgpSupport,
84
- pmxPng,
87
+ pgpContactPng,
88
+ pgpContactWbp, pgpSecurityPng,
89
+ pgpSecurityWbp, pgpSupportPng,
90
+ pgpSupportWbp, pmxPng,
85
91
  pmxWbp,
86
92
  squirclePng,
87
93
  squircleWbp,
@@ -89,7 +95,8 @@ export {
89
95
  tosWbp,
90
96
  urlPng,
91
97
  urlWbp,
92
- vcfSrc
98
+ vcfPng,
99
+ vcfWbp
93
100
  };
94
101
 
95
102
  // cspell:ignore eauth hboard
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
package/src/lib/meta.js CHANGED
@@ -56,6 +56,11 @@ const meta = {
56
56
  description:
57
57
  "Privacy Dashboard | Security, Networking, Privacy — Network Pro™",
58
58
  },
59
+ "/pgp": {
60
+ title: "Public PGP Keys — Network Pro™",
61
+ description:
62
+ "Public encryption keys for secure communication | Security, Networking, Privacy — Network Pro™",
63
+ },
59
64
  // Excludes redirect-only routes like /contact, /consultation, /privacy-rights
60
65
  };
61
66
 
@@ -7,14 +7,21 @@ This file is part of Network Pro.
7
7
  ========================================================================== -->
8
8
 
9
9
  <script>
10
- import { pgpContact, pgpSupport, vcfSrc } from "$lib";
10
+ import {
11
+ pgpContactPng,
12
+ pgpContactWbp,
13
+ pgpSupportPng,
14
+ pgpSupportWbp,
15
+ vcfPng,
16
+ vcfWbp,
17
+ } from "$lib";
11
18
  import { base } from "$app/paths";
12
19
  import { CONSTANTS } from "$lib";
13
20
 
14
21
  // Log the base path to verify its value
15
22
  //console.log("Base path:", base);
16
23
 
17
- console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
24
+ //console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
18
25
 
19
26
  const { COMPANY_INFO, PAGE } = CONSTANTS;
20
27
 
@@ -24,6 +31,12 @@ This file is part of Network Pro.
24
31
  */
25
32
  const contactLink = `${base}/contact`;
26
33
 
34
+ /**
35
+ * URL to the PGP route, using the base path
36
+ * @type {string}
37
+ */
38
+ const pgpLink = `${base}/pgp`;
39
+
27
40
  /**
28
41
  * HTML attribute for async image decoding
29
42
  * @type {"async" | "sync" | "auto"}
@@ -70,6 +83,7 @@ This file is part of Network Pro.
70
83
  * @type {Array<{
71
84
  * label: string,
72
85
  * qrSrc: string,
86
+ * qrWbp: string,
73
87
  * keySearch: string,
74
88
  * fingerprint: string[]
75
89
  * }>}
@@ -77,13 +91,15 @@ This file is part of Network Pro.
77
91
  const pgpKeys = [
78
92
  {
79
93
  label: "support@neteng.pro",
80
- qrSrc: pgpSupport,
94
+ qrSrc: pgpSupportPng,
95
+ qrWbp: pgpSupportWbp,
81
96
  keySearch: "https://keys.openpgp.org/search?q=support%40neteng.pro",
82
97
  fingerprint: ["6590B992E2E3EFF12738", "7BCE2AF093E9DEC61BA0"],
83
98
  },
84
99
  {
85
100
  label: "contact@s.neteng.pro",
86
- qrSrc: pgpContact,
101
+ qrSrc: pgpContactPng,
102
+ qrWbp: pgpContactWbp,
87
103
  keySearch: "https://keys.openpgp.org/search?q=contact%40s.neteng.pro",
88
104
  fingerprint: ["DF118BAA6C2D9DCDEBDC", "2DDCF99373499495F957"],
89
105
  },
@@ -91,18 +107,20 @@ This file is part of Network Pro.
91
107
 
92
108
  /**
93
109
  * @typedef {Object} ContactAssets
94
- * @property {string} vcf - Path to the contact vCard (.vcf file)
95
- * @property {string} qrSrc - Path to QR image for contact info
96
- * @property {string} supportAsc - Support PGP public key file (.asc)
97
- * @property {string} contactAsc - Contact PGP public key file (.asc)
110
+ * @property {string} vcf
111
+ * @property {string} qrSrc
112
+ * @property {string} qrWbp
113
+ * @property {string} supportAsc
114
+ * @property {string} contactAsc
98
115
  */
99
116
 
100
117
  /** @type {ContactAssets} */
101
118
  const contactAssets = {
102
- vcf: "/assets/bin/contact.vcf",
103
- qrSrc: vcfSrc,
104
- supportAsc: "/assets/bin/support@neteng.pro.asc",
105
- contactAsc: "/assets/bin/contact@s.neteng.pro.asc",
119
+ vcf: "/bin/contact.vcf",
120
+ qrSrc: vcfPng,
121
+ qrWbp: vcfWbp,
122
+ supportAsc: "/pgp/support@neteng.pro.asc",
123
+ contactAsc: "/pgp/contact@s.neteng.pro.asc",
106
124
  };
107
125
  </script>
108
126
 
@@ -210,8 +228,11 @@ This file is part of Network Pro.
210
228
  <div class="spacer"></div>
211
229
 
212
230
  <p>
213
- You can find our PGP keys and a vCard containing our contact information
214
- below.
231
+ You can find our PGP keys and a downloadable vCard with contact information
232
+ below. For a complete list of public keys, visit the <a
233
+ href={pgpLink}
234
+ target={PAGE.SELF}>dedicated PGP page</a
235
+ >.
215
236
  </p>
216
237
 
217
238
  <!-- BEGIN PGP KEYS -->
@@ -221,12 +242,15 @@ This file is part of Network Pro.
221
242
  <!-- Row 0 (First row) remains unchanged -->
222
243
  <tr>
223
244
  <td class="pgp-col1">
224
- <img
225
- {decoding}
226
- {loading}
227
- src={pgpKeys[0].qrSrc}
228
- class="pgp-image"
229
- alt={`PGP Key - ${pgpKeys[0].label}`} />
245
+ <picture>
246
+ <source srcset={pgpKeys[0].qrWbp} type="image/webp" />
247
+ <img
248
+ {decoding}
249
+ {loading}
250
+ src={pgpKeys[0].qrSrc}
251
+ class="pgp-image"
252
+ alt={`PGP Key - ${pgpKeys[0].label}`} />
253
+ </picture>
230
254
  </td>
231
255
  <td class="pgp-col2">
232
256
  <a rel={PAGE.REL} href={pgpKeys[0].keySearch} target={PAGE.BLANK}>
@@ -275,24 +299,30 @@ This file is part of Network Pro.
275
299
  </p>
276
300
  </td>
277
301
  <td class="pgp-col2">
278
- <img
279
- {decoding}
280
- {loading}
281
- src={pgpKeys[1].qrSrc}
282
- class="pgp-image"
283
- alt={`PGP Key - ${pgpKeys[1].label}`} />
302
+ <picture>
303
+ <source srcset={pgpKeys[1].qrWbp} type="image/webp" />
304
+ <img
305
+ {decoding}
306
+ {loading}
307
+ src={pgpKeys[1].qrSrc}
308
+ class="pgp-image"
309
+ alt={`PGP Key - ${pgpKeys[1].label}`} />
310
+ </picture>
284
311
  </td>
285
312
  </tr>
286
313
 
287
314
  <!-- Row 2 (Third row) remains unchanged -->
288
315
  <tr>
289
316
  <td class="pgp-col1">
290
- <img
291
- {decoding}
292
- {loading}
293
- src={contactAssets.qrSrc}
294
- class="pgp-image"
295
- alt="vCard" />
317
+ <picture>
318
+ <source srcset={contactAssets.qrWbp} type="image/webp" />
319
+ <img
320
+ {decoding}
321
+ {loading}
322
+ src={contactAssets.qrSrc}
323
+ class="pgp-image"
324
+ alt="vCard" />
325
+ </picture>
296
326
  </td>
297
327
  <td class="pgp-col2">
298
328
  <strong>vCard</strong>
@@ -218,22 +218,19 @@ This file is part of Network Pro.
218
218
  </ul>
219
219
  {:else if link.id === "cc-by"}
220
220
  <p class={constants.classSmall}>
221
- Download:
222
- <a href="/assets/license/CC-BY-4.0.html" download target={PAGE.BLANK}
223
- >HTML</a>
221
+ View / Download:
222
+ <a href="/bin/license/CC-BY-4.0.html" target={PAGE.BLANK}>HTML</a>
224
223
  |
225
- <a href="/assets/license/CC-BY-4.0.md" download target={PAGE.BLANK}
224
+ <a href="/bin/license/CC-BY-4.0.md" download target={PAGE.BLANK}
226
225
  >Markdown</a>
227
226
  |
228
- <a href="/assets/license/CC-BY-4.0.txt" download target={PAGE.BLANK}
227
+ <a href="/bin/license/CC-BY-4.0.txt" download target={PAGE.BLANK}
229
228
  >Text</a>
230
229
  |
231
- <a
232
- href="/assets/license/CC-BY-4.0-rdfa.xml"
233
- download
234
- target={PAGE.BLANK}>RDFa</a>
230
+ <a href="/bin/license/CC-BY-4.0-rdfa.xml" download target={PAGE.BLANK}
231
+ >RDFa</a>
235
232
  |
236
- <a href="/assets/license/CC-BY-4.0.xml" download target={PAGE.BLANK}
233
+ <a href="/bin/license/CC-BY-4.0.xml" download target={PAGE.BLANK}
237
234
  >XMP</a>
238
235
  </p>
239
236
 
@@ -314,21 +311,18 @@ This file is part of Network Pro.
314
311
  </code>
315
312
  {:else if link.id === "gnu-gpl"}
316
313
  <p class={constants.classSmall}>
317
- Download:
318
- <a href="/assets/license/COPYING.html" download target={PAGE.BLANK}
319
- >HTML</a>
314
+ View / Download:
315
+ <a href="/bin/license/COPYING.html" target={PAGE.BLANK}>HTML</a>
320
316
  |
321
- <a href="/assets/license/COPYING.md" download target={PAGE.BLANK}
317
+ <a href="/bin/license/COPYING.md" download target={PAGE.BLANK}
322
318
  >Markdown</a>
323
319
  |
324
- <a href="/assets/license/COPYING.txt" download target={PAGE.BLANK}
325
- >Text</a>
320
+ <a href="/bin/license/COPYING.txt" download target={PAGE.BLANK}>Text</a>
326
321
  |
327
- <a href="/assets/license/COPYING-rdfa.xml" download target={PAGE.BLANK}
322
+ <a href="/bin/license/COPYING-rdfa.xml" download target={PAGE.BLANK}
328
323
  >RDFa</a>
329
324
  |
330
- <a href="/assets/license/COPYING.odt" download target={PAGE.BLANK}
331
- >ODT</a>
325
+ <a href="/bin/license/COPYING.odt" download target={PAGE.BLANK}>ODT</a>
332
326
  </p>
333
327
 
334
328
  <p>