@networkpro/web 1.12.6 → 1.12.8
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.
- package/CHANGELOG.md +71 -1
- package/README.md +27 -0
- package/cspell.json +3 -0
- package/package.json +7 -7
- package/src/app.html +1 -1
- package/src/lib/components/foss/FossItemContent.svelte +2 -2
- package/src/lib/data/fossData.js +8 -1
- package/src/lib/images.js +15 -8
- package/src/lib/img/qr/pgp-contact.webp +0 -0
- package/src/lib/img/qr/pgp-github.webp +0 -0
- package/src/lib/img/qr/pgp-security.png +0 -0
- package/src/lib/img/qr/pgp-security.webp +0 -0
- package/src/lib/img/qr/pgp-support.webp +0 -0
- package/src/lib/img/qr/vcard.webp +0 -0
- package/src/lib/meta.js +5 -0
- package/src/lib/pages/AboutContent.svelte +62 -32
- package/src/lib/pages/LicenseContent.svelte +13 -19
- package/src/lib/pages/PGPContent.svelte +110 -0
- package/src/lib/pages/TermsConditionsContent.svelte +1 -1
- package/src/lib/styles/css/default.css +18 -0
- package/src/lib/styles/css/style.css +13 -4
- package/src/lib/styles/global.min.css +1 -1
- package/src/routes/pgp/+page.server.js +18 -0
- package/src/routes/pgp/+page.svelte +61 -0
- package/src/routes/pgp/[key]/+server.js +35 -0
- package/src/service-worker.js +16 -5
- package/static/{assets → bin}/license/CC-BY-4.0.html +1 -1
- package/static/{assets → bin}/license/COPYING.html +1 -1
- package/static/pgp/pgp-contact.webp +0 -0
- package/static/pgp/pgp-github.webp +0 -0
- package/static/pgp/pgp-security.png +0 -0
- package/static/pgp/pgp-security.webp +0 -0
- package/static/pgp/pgp-support.webp +0 -0
- package/static/pgp/security@s.neteng.pro.asc +22 -0
- package/static/pgp/vcard.webp +0 -0
- package/static/sitemap.xml +13 -13
- package/static/assets/bin/contact.vcf +0 -13
- package/static/assets/bin/contact@s.neteng.pro.asc +0 -17
- package/static/assets/bin/github@sl.neteng.cc.asc +0 -29
- package/static/assets/bin/linksheet.json +0 -8
- package/static/assets/bin/support@neteng.pro.asc +0 -47
- package/static/assets/consulting-terms.pdf +0 -0
- /package/{assets → static/bin}/consulting-terms.pdf +0 -0
- /package/{assets → static}/bin/contact.vcf +0 -0
- /package/static/{assets → bin}/license/CC-BY-4.0-rdfa.xml +0 -0
- /package/static/{assets → bin}/license/CC-BY-4.0.md +0 -0
- /package/static/{assets → bin}/license/CC-BY-4.0.txt +0 -0
- /package/static/{assets → bin}/license/CC-BY-4.0.xml +0 -0
- /package/static/{assets → bin}/license/COPYING-rdfa.xml +0 -0
- /package/static/{assets → bin}/license/COPYING.md +0 -0
- /package/static/{assets → bin}/license/COPYING.odt +0 -0
- /package/static/{assets → bin}/license/COPYING.txt +0 -0
- /package/{assets → static}/bin/linksheet.json +0 -0
- /package/{assets/bin → static/pgp}/contact@s.neteng.pro.asc +0 -0
- /package/{assets/bin → static/pgp}/github@sl.neteng.cc.asc +0 -0
- /package/static/{img/qr → pgp}/pgp-contact.png +0 -0
- /package/static/{img/qr → pgp}/pgp-github.png +0 -0
- /package/static/{img/qr → pgp}/pgp-support.png +0 -0
- /package/{assets/bin → static/pgp}/support@neteng.pro.asc +0 -0
- /package/static/{img/qr → pgp}/vcard.png +0 -0
package/CHANGELOG.md
CHANGED
|
@@ -22,6 +22,74 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
|
|
|
22
22
|
|
|
23
23
|
---
|
|
24
24
|
|
|
25
|
+
## [1.12.8] - 2025-06-11
|
|
26
|
+
|
|
27
|
+
### Added
|
|
28
|
+
|
|
29
|
+
- Created `/pgp` route with `+page.svelte`, `+page.server.js`, and supporting structure.
|
|
30
|
+
- Added `src/lib/pages/PGPContent.svelte` for rendering PGP key information.
|
|
31
|
+
- Dynamic routing with `src/routes/pgp/[key]/+server.js` for serving `.asc` files with correct MIME type (`application/pgp-keys`).
|
|
32
|
+
- Support for serving QR code images statically in `/pgp` and dynamically in `/about`.
|
|
33
|
+
- Added WebP versions of QR code images in `static/pgp/` and `src/lib/img/qr/`.
|
|
34
|
+
- Set up dynamic import for QR images in `/about` route via `src/lib/images.js`.
|
|
35
|
+
- Enhanced accessibility styles for focus-visible states on links.
|
|
36
|
+
- Improved copy-to-clipboard buttons for PGP fingerprints.
|
|
37
|
+
- Defined `ContactAssets` typedef and expanded `pgpKeys` data structure for strict typing.
|
|
38
|
+
- README updated with new section: `static/pgp/` Directory Structure.
|
|
39
|
+
|
|
40
|
+
### Changed
|
|
41
|
+
|
|
42
|
+
- Modified `/about` route to reference `/pgp` and use dynamic WebP images for PGP keys.
|
|
43
|
+
- Adjusted `src/lib/meta.js` to include metadata for the `/pgp` route.
|
|
44
|
+
- Canonical links in `static/bin/CC-BY-4.0.html` and `static/bin/COPYING.html` updated to reflect new paths.
|
|
45
|
+
- Service worker updated to exclude `.asc` files in `/pgp`, while continuing to cache QR image assets.
|
|
46
|
+
- Moved license and binary files from `static/assets` to `static/bin`.
|
|
47
|
+
- File paths updated on the `/license` route to reflect the new `/bin/license` location.
|
|
48
|
+
- Updated sitemap.xml.
|
|
49
|
+
- Updated `.prettierignore` to ignore `static/bin/license`.
|
|
50
|
+
- Updated LinkSheet download in `FossItemContent.svelte` to reference `bin/linksheet.json`.
|
|
51
|
+
- Added dynamic `lsheetDl` constant in `fossData.js`.
|
|
52
|
+
- Updated `TermsConditionsContent.svelte` to point to `bin/consulting-terms.pdf`.
|
|
53
|
+
- Updated `LicenseContent.svelte` to:
|
|
54
|
+
- View HTML license file.
|
|
55
|
+
- Use `download` attribute for all other formats.
|
|
56
|
+
- Updated `generator` meta tag to reflect `SvelteKit 2.21.4`
|
|
57
|
+
- Upgraded dependencies:
|
|
58
|
+
- `@playwright/test` updated from `^1.52.0` → `^1.53.0`
|
|
59
|
+
- `@sveltejs/kit` updated from `2.21.3` → `2.21.4`
|
|
60
|
+
- `eslint-plugin-svelte` updated from `^3.9.1` → `^3.9.2`
|
|
61
|
+
- `playwright` updated from `^1.52.0` → `^1.53.0`
|
|
62
|
+
- `posthog-js` updated from `^1.249.5` → `^1.250.1`
|
|
63
|
+
- `svelte` updated from `5.33.18` → `5.33.19`
|
|
64
|
+
|
|
65
|
+
### Fixed
|
|
66
|
+
|
|
67
|
+
- Resolved TypeScript and JSDoc typing errors in `AboutContent.svelte` and `PGPContent.svelte`.
|
|
68
|
+
- Verified fallback behavior on `/pgp/[key]` for unknown files:
|
|
69
|
+
- `.asc` files return "File not found".
|
|
70
|
+
- All others fall through to 404.
|
|
71
|
+
- Adjusted `function copy(text)` with explicit JSDoc type for parameter.
|
|
72
|
+
- Removed stale references to deleted assets in service worker config.
|
|
73
|
+
|
|
74
|
+
---
|
|
75
|
+
|
|
76
|
+
## [1.12.7] - 2025-06-09
|
|
77
|
+
|
|
78
|
+
### Changed
|
|
79
|
+
|
|
80
|
+
- Permissions in `playwright.yml` reduced to `contents: read` to align with least-privilege practices.
|
|
81
|
+
- Renamed "Upload Playwright Report" step for clarity and naming consistency.
|
|
82
|
+
- Patch version bumped to **v1.12.7** to reflect post-tag changes.
|
|
83
|
+
|
|
84
|
+
### Security
|
|
85
|
+
|
|
86
|
+
- Explicit `GITHUB_TOKEN` permissions added to `.github/workflows/build-and-publish.yml` to satisfy GitHub policy while preserving least-privilege.
|
|
87
|
+
- Reviewed and reduced permissions in `playwright.yml` to `contents: read` as no elevated scopes are currently required.
|
|
88
|
+
- Confirmed `auto-assign.yml` uses appropriate scopes for issue/PR auto-assignment (`issues: write`, `pull-requests: write`, `contents: read`).
|
|
89
|
+
- Validated that `dependency-review.yml` and `backup-branch.yml` are properly scoped; no changes required.
|
|
90
|
+
|
|
91
|
+
---
|
|
92
|
+
|
|
25
93
|
## [1.12.6] - 2025-06-09
|
|
26
94
|
|
|
27
95
|
### Added
|
|
@@ -181,7 +249,9 @@ This project attempts to follow [Keep a Changelog](https://keepachangelog.com/en
|
|
|
181
249
|
|
|
182
250
|
<!-- Link references -->
|
|
183
251
|
|
|
184
|
-
[Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.12.
|
|
252
|
+
[Unreleased]: https://github.com/netwk-pro/netwk-pro.github.io/compare/v1.12.8...HEAD
|
|
253
|
+
[1.12.8]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.8
|
|
254
|
+
[1.12.7]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.7
|
|
185
255
|
[1.12.6]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.6
|
|
186
256
|
[1.12.5]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.5
|
|
187
257
|
[1.12.4]: https://github.com/netwk-pro/netwk-pro.github.io/releases/tag/v1.12.4
|
package/README.md
CHANGED
|
@@ -105,6 +105,33 @@ This project follows the principles of [Keep a Changelog](https://keepachangelog
|
|
|
105
105
|
|
|
106
106
|
|
|
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
|
+
|
|
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
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
"lighthouserc",
|
|
34
34
|
"lightningcss",
|
|
35
35
|
"linksheet",
|
|
36
|
+
"lsheet",
|
|
36
37
|
"Mailvelope",
|
|
37
38
|
"Maricopa",
|
|
38
39
|
"mdsvex",
|
|
@@ -51,7 +52,9 @@
|
|
|
51
52
|
"NWPRO",
|
|
52
53
|
"obtainium",
|
|
53
54
|
"openpgp",
|
|
55
|
+
"opgp",
|
|
54
56
|
"posthog",
|
|
57
|
+
"precaching",
|
|
55
58
|
"prefs",
|
|
56
59
|
"publickey",
|
|
57
60
|
"reconsent",
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@networkpro/web",
|
|
3
3
|
"private": false,
|
|
4
|
-
"version": "1.12.
|
|
4
|
+
"version": "1.12.8",
|
|
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.
|
|
83
|
+
"posthog-js": "^1.250.1",
|
|
84
84
|
"semver": "^7.7.2",
|
|
85
|
-
"svelte": "5.33.
|
|
85
|
+
"svelte": "5.33.19"
|
|
86
86
|
},
|
|
87
87
|
"devDependencies": {
|
|
88
88
|
"@eslint/compat": "^1.2.9",
|
|
89
89
|
"@eslint/js": "^9.28.0",
|
|
90
90
|
"@lhci/cli": "^0.15.0",
|
|
91
|
-
"@playwright/test": "^1.
|
|
91
|
+
"@playwright/test": "^1.53.0",
|
|
92
92
|
"@sveltejs/adapter-netlify": "^5.0.2",
|
|
93
|
-
"@sveltejs/kit": "2.21.
|
|
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",
|
|
@@ -100,14 +100,14 @@
|
|
|
100
100
|
"eslint": "^9.28.0",
|
|
101
101
|
"eslint-config-prettier": "^10.1.5",
|
|
102
102
|
"eslint-plugin-jsdoc": "^50.7.1",
|
|
103
|
-
"eslint-plugin-svelte": "^3.9.
|
|
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.
|
|
110
|
+
"playwright": "^1.53.0",
|
|
111
111
|
"postcss": "^8.5.4",
|
|
112
112
|
"prettier": "^3.5.3",
|
|
113
113
|
"prettier-plugin-svelte": "^3.4.0",
|
package/src/app.html
CHANGED
|
@@ -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="/
|
|
129
|
+
href="/bin/linksheet.json"
|
|
130
130
|
type="application/json"
|
|
131
131
|
download
|
|
132
132
|
style="margin-left: 8px;"
|
|
133
|
-
target=
|
|
133
|
+
target={PAGE.BLANK}>
|
|
134
134
|
Obtainium App Config
|
|
135
135
|
</a>
|
|
136
136
|
</p>
|
package/src/lib/data/fossData.js
CHANGED
|
@@ -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
|
-
|
|
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-
|
|
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
|
|
59
|
-
import
|
|
60
|
-
import
|
|
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
|
-
|
|
83
|
-
|
|
84
|
-
|
|
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
|
-
|
|
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 {
|
|
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:
|
|
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:
|
|
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
|
|
95
|
-
* @property {string} qrSrc
|
|
96
|
-
* @property {string}
|
|
97
|
-
* @property {string}
|
|
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: "/
|
|
103
|
-
qrSrc:
|
|
104
|
-
|
|
105
|
-
|
|
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
|
|
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
|
-
<
|
|
225
|
-
{
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
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
|
-
<
|
|
279
|
-
{
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
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
|
-
<
|
|
291
|
-
{
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
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="/
|
|
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="/
|
|
224
|
+
<a href="/bin/license/CC-BY-4.0.md" download target={PAGE.BLANK}
|
|
226
225
|
>Markdown</a>
|
|
227
226
|
|
|
|
228
|
-
<a href="/
|
|
227
|
+
<a href="/bin/license/CC-BY-4.0.txt" download target={PAGE.BLANK}
|
|
229
228
|
>Text</a>
|
|
230
229
|
|
|
|
231
|
-
<a
|
|
232
|
-
|
|
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="/
|
|
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="/
|
|
319
|
-
>HTML</a>
|
|
314
|
+
View / Download:
|
|
315
|
+
<a href="/bin/license/COPYING.html" target={PAGE.BLANK}>HTML</a>
|
|
320
316
|
|
|
|
321
|
-
<a href="/
|
|
317
|
+
<a href="/bin/license/COPYING.md" download target={PAGE.BLANK}
|
|
322
318
|
>Markdown</a>
|
|
323
319
|
|
|
|
324
|
-
<a href="/
|
|
325
|
-
>Text</a>
|
|
320
|
+
<a href="/bin/license/COPYING.txt" download target={PAGE.BLANK}>Text</a>
|
|
326
321
|
|
|
|
327
|
-
<a href="/
|
|
322
|
+
<a href="/bin/license/COPYING-rdfa.xml" download target={PAGE.BLANK}
|
|
328
323
|
>RDFa</a>
|
|
329
324
|
|
|
|
330
|
-
<a href="/
|
|
331
|
-
>ODT</a>
|
|
325
|
+
<a href="/bin/license/COPYING.odt" download target={PAGE.BLANK}>ODT</a>
|
|
332
326
|
</p>
|
|
333
327
|
|
|
334
328
|
<p>
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
<!-- ==========================================================================
|
|
2
|
+
src/lib/pages/PGPContent.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
|
+
import { base } from "$app/paths";
|
|
11
|
+
import { CONSTANTS } from "$lib";
|
|
12
|
+
|
|
13
|
+
// Log the base path to verify its value
|
|
14
|
+
//console.log("Base path:", base);
|
|
15
|
+
|
|
16
|
+
//console.log(CONSTANTS.COMPANY_INFO.APP_NAME);
|
|
17
|
+
|
|
18
|
+
const { COMPANY_INFO, PAGE } = CONSTANTS;
|
|
19
|
+
|
|
20
|
+
const keys = [
|
|
21
|
+
{
|
|
22
|
+
name: "General Contact & Support",
|
|
23
|
+
email: "support (at) neteng.pro",
|
|
24
|
+
fingerprint: "6590 B992 E2E3 EFF1 2738 7BCE 2AF0 93E9 DEC6 1BA0",
|
|
25
|
+
opgp: "https://keys.openpgp.org/search?q=support%40neteng.pro",
|
|
26
|
+
file: "/pgp/support@neteng.pro.asc",
|
|
27
|
+
img: "pgp-support",
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
name: "Secure Email",
|
|
31
|
+
email: "contact (at) s.neteng.pro",
|
|
32
|
+
fingerprint: "DF11 8BAA 6C2D 9DCD EBDC 2DDC F993 7349 9495 F957",
|
|
33
|
+
opgp: "https://keys.openpgp.org/search?q=contact%40s.neteng.pro",
|
|
34
|
+
file: "/pgp/contact@s.neteng.pro.asc",
|
|
35
|
+
img: "pgp-contact",
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "Security Contact",
|
|
39
|
+
email: "security (at) s.neteng.pro",
|
|
40
|
+
fingerprint: "B7FE 1D4E 6CAB 3E71 4A9F DF6E 48CB 7290 C00D 0DA5",
|
|
41
|
+
opgp: null,
|
|
42
|
+
file: "/pgp/security@s.neteng.pro.asc",
|
|
43
|
+
img: "pgp-security",
|
|
44
|
+
},
|
|
45
|
+
];
|
|
46
|
+
|
|
47
|
+
/**
|
|
48
|
+
* Copy a string to the clipboard
|
|
49
|
+
* @param {string} text
|
|
50
|
+
*/
|
|
51
|
+
function copy(text) {
|
|
52
|
+
navigator.clipboard.writeText(text);
|
|
53
|
+
}
|
|
54
|
+
</script>
|
|
55
|
+
|
|
56
|
+
<h1>🔐 Public PGP Keys</h1>
|
|
57
|
+
<p
|
|
58
|
+
>Below are our public encryption keys. Use them to securely send email or
|
|
59
|
+
verify signed messages.</p>
|
|
60
|
+
|
|
61
|
+
{#each keys as key}
|
|
62
|
+
<section class="pgp-entry" aria-labelledby={`pgp-${key.img}`}>
|
|
63
|
+
<div class="pgp-text">
|
|
64
|
+
<h2 id={`pgp-${key.img}`}>{key.name}</h2>
|
|
65
|
+
<h3>
|
|
66
|
+
<
|
|
67
|
+
{#if key.opgp}
|
|
68
|
+
<a rel={PAGE.REL} href={key.opgp} target={PAGE.BLANK}>
|
|
69
|
+
{key.email}
|
|
70
|
+
</a>
|
|
71
|
+
{:else}
|
|
72
|
+
{key.email}
|
|
73
|
+
{/if}
|
|
74
|
+
>
|
|
75
|
+
</h3>
|
|
76
|
+
<pre><code>{key.fingerprint}</code></pre>
|
|
77
|
+
<p>
|
|
78
|
+
<button
|
|
79
|
+
type="button"
|
|
80
|
+
on:click={() => copy(key.fingerprint)}
|
|
81
|
+
aria-label={`Copy PGP fingerprint for ${key.name}`}
|
|
82
|
+
title="Copy fingerprint to clipboard">
|
|
83
|
+
Copy fingerprint
|
|
84
|
+
</button>
|
|
85
|
+
</p>
|
|
86
|
+
<p>
|
|
87
|
+
<a
|
|
88
|
+
href={key.file}
|
|
89
|
+
download
|
|
90
|
+
aria-label={`Download PGP key for ${key.name}`}
|
|
91
|
+
title="Download PGP key">
|
|
92
|
+
Download Key
|
|
93
|
+
</a>
|
|
94
|
+
</p>
|
|
95
|
+
</div>
|
|
96
|
+
<div class="pgp-qr">
|
|
97
|
+
<picture>
|
|
98
|
+
<source srcset={`/pgp/${key.img}.webp`} type="image/webp" />
|
|
99
|
+
<img
|
|
100
|
+
src={`/pgp/${key.img}.png`}
|
|
101
|
+
alt={`QR code for ${key.email}`}
|
|
102
|
+
loading="lazy"
|
|
103
|
+
decoding="async"
|
|
104
|
+
style="width: 150px; height: 150px;" />
|
|
105
|
+
</picture>
|
|
106
|
+
</div>
|
|
107
|
+
</section>
|
|
108
|
+
{/each}
|
|
109
|
+
|
|
110
|
+
<!-- cspell:ignore ebdc -->
|
|
@@ -112,7 +112,7 @@ This file is part of Network Pro.
|
|
|
112
112
|
|
|
|
113
113
|
<a href={tandcLink} target={PAGE.SELF}>Docs</a>
|
|
114
114
|
|
|
|
115
|
-
<a href="/
|
|
115
|
+
<a href="/bin/consulting-terms.pdf" download target={PAGE.BLANK}>
|
|
116
116
|
PDF <span class="fas fa-file-arrow-down"></span>
|
|
117
117
|
</a>
|
|
118
118
|
</sup>
|