Skip to content

Commit

Permalink
Merge pull request #6 from bourgeoa/CSS_v7
Browse files Browse the repository at this point in the history
Css v7
  • Loading branch information
bourgeoa authored Nov 23, 2024
2 parents 7ee359a + fefe538 commit c2fe597
Showing 1 changed file with 29 additions and 5 deletions.
34 changes: 29 additions & 5 deletions copy-pods-to-css.mjs
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
#!/usr/bin/env node
// #!/usr/bin/env node --no-warnings
// ©2023 Ruben Verborgh – MIT License
// 2024-11 Alain Bourgeois updated to CSS V7

import assert from 'node:assert';
import { resolve } from 'node:path';
Expand Down Expand Up @@ -53,7 +52,10 @@ async function copyNssPodsToCSS(nssConfigPath, cssDataPath, cssUrl, emailPattern
print(`4️⃣ CSS: Copy ${accounts.length} pod contents on disk`);
await asyncMap(copyPodFiles, accounts, nss.hostname, nss.dataPath, cssDataPath);

print(`5️⃣ CSS: Check ${accounts.length} pods for known resources`);
print(`5️⃣ CSS: Copy ${accounts.length} WebID oidcIssuer on disk`);
await asyncMap(updateOidcIssuer, accounts, cssDataPath, cssUrl);

print(`6️⃣ CSS: Check ${accounts.length} pods for known resources`);
await asyncMap(testPod, accounts, cssUrl);
}

Expand Down Expand Up @@ -168,20 +170,42 @@ async function copyPodFiles({ username }, hostname, nssDataPath, cssDataPath) {
// Copy new contents from the source to the destination
await execFile('cp', ['-a', '--', source, destination]);
checks.copy = true;

}
finally {
assert(printChecks(username, checks), 'Pod copy failed');
}
}

// update oidcIssuer in webID document (add end '/')
async function updateOidcIssuer ({ username }, cssDataPath, cssUrl) {
const checks = { oidcIssuer: false };
const path = resolve(cssDataPath, username, 'profile/card$.ttl')
try {
var profile = await readFile(path, 'utf8')
if (profile.includes(`solid:oidcIssuer <${cssUrl.slice(0, -1)}>`)) {
const newProfile = profile.replace(new RegExp(`solid:oidcIssuer <${cssUrl.slice(0, -1)}>`), `solid:oidcIssuer <${cssUrl}>`)
await writeFile(path, newProfile)
checks.oidcIssuer = true
}
if (profile.includes(`oidcIssuer> <${cssUrl.slice(0, -1)}>`)) {
const newProfile = profile.replace(new RegExp(`oidcIssuer> <${cssUrl.slice(0, -1)}>`), `oidcIssuer> <${cssUrl}>`)
await writeFile(path, newProfile)
checks.oidcIssuer = true
}
}
finally {
assert(printChecks(username, checks), 'oidcIssuer update failed');
}
}

// Tests the given pod by trying to access typical resources
async function testPod({ username }, cssUrl) {
const checks = { publicProfile: false, privateInbox: false };

// Create URL for pod
const podUrl = new URL(cssUrl);
podUrl.hostname = `${username}.${podUrl.hostname}`;

try {
// Check presence of resources available in typical NSS pods
const profile = await localFetch(new URL('/profile/card', podUrl));
Expand Down Expand Up @@ -243,8 +267,8 @@ function localFetch(url, init = {}) {
// The `pod.localhost` pattern is common within NSS and CSS,
// but Node.js does not resolve this well by default
const host = url.host;
if (url.hostname.endsWith('.localhost'))
url.hostname = 'localhost';
/* if (url.hostname.endsWith('.localhost'))
url.hostname = 'localhost'; */

return fetch(url, { ...init, headers: { host } });
}
Expand Down

0 comments on commit c2fe597

Please sign in to comment.