From 190828bb2cb55424e64738a12cf80d6f62f80a6d Mon Sep 17 00:00:00 2001 From: Grant Fletcher Date: Sat, 9 May 2026 05:43:17 -0400 Subject: [PATCH] feat: add user project management --- README.md | 4 + user-project-management/README.md | 60 +++++ user-project-management/docs/demo-script.md | 6 + .../docs/demo/dashboard.png | Bin 0 -> 74592 bytes .../demo/user-project-management-demo.mp4 | Bin 0 -> 50543 bytes user-project-management/package.json | 14 ++ user-project-management/public/app.js | 35 +++ user-project-management/public/index.html | 40 ++++ user-project-management/public/styles.css | 119 ++++++++++ .../src/management-core.js | 219 ++++++++++++++++++ user-project-management/src/server.js | 63 +++++ .../test/management-core.test.js | 57 +++++ 12 files changed, 617 insertions(+) create mode 100644 user-project-management/README.md create mode 100644 user-project-management/docs/demo-script.md create mode 100644 user-project-management/docs/demo/dashboard.png create mode 100644 user-project-management/docs/demo/user-project-management-demo.mp4 create mode 100644 user-project-management/package.json create mode 100644 user-project-management/public/app.js create mode 100644 user-project-management/public/index.html create mode 100644 user-project-management/public/styles.css create mode 100644 user-project-management/src/management-core.js create mode 100644 user-project-management/src/server.js create mode 100644 user-project-management/test/management-core.test.js diff --git a/README.md b/README.md index d338cf6..71c4bb3 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,6 @@ # deepevents.ai deepevents.ai main codebase + +## Modules + +- [`user-project-management`](./user-project-management) - runnable prototype for identity, researcher profiles, scientific project spaces, permissions, audit logs, and reputation metrics. diff --git a/user-project-management/README.md b/user-project-management/README.md new file mode 100644 index 0000000..ab5b6ed --- /dev/null +++ b/user-project-management/README.md @@ -0,0 +1,60 @@ +# User & Project Management + +This module is a self-contained implementation for SCIBASE.AI issue #11. It models identity, researcher profiles, project spaces, permissions, sharing, audit logs, and reputation metrics for scientific collaboration. + +## What It Covers + +- Authentication through email, OAuth-style linked providers, ORCID, SAML, and MFA enforcement. +- Researcher profiles with ORCID sync, affiliations, keywords, activity, citation-style reputation metrics, and public/private profile mode. +- Scientific project spaces with documents, code, datasets, discussion threads, citations, funding metadata, and archive-ready status. +- Role-based access control for Owner, Admin, Contributor, Reviewer, and Viewer. +- Object-level permissions for project, documents, code, datasets, and review scopes. +- Time-limited collaborator invitations and project-level audit logs. +- Browser dashboard and JSON API for reviewer smoke testing. + +## Run Locally + +```bash +cd user-project-management +npm test +npm start +``` + +Then open `http://localhost:4130`. + +## API Surface + +- `GET /api/dashboard` +- `GET /api/auth/check` +- `GET /api/users/user-alice/orcid` +- `GET /api/users/user-alice/reputation` +- `GET /api/projects/create` +- `GET /api/access/check` + +## Requirement Mapping + +- Authentication and identity: implemented by `authenticateIdentity`. +- ORCID/OAuth/SAML/account linking: represented in user identity links and institutional SAML metadata. +- Researcher profiles: implemented by user records, `syncOrcidProfile`, activity, keywords, and profile visibility. +- Citation and reputation metrics: implemented by `computeReputation`. +- Project spaces: implemented by `createProjectSpace` and `demoWorkspace.projects`. +- Permissions and access control: implemented by `rolePermissions`, `evaluateAccess`, and object scopes. +- External collaborators and time-limited access: implemented by `inviteCollaborator`. +- Project audit log: implemented by per-project `auditLog`. + +## Verification + +```bash +npm test +node src/server.js +``` + +Optional smoke checks: + +```bash +curl -s http://localhost:4130/api/dashboard +curl -s http://localhost:4130/api/auth/check +curl -s http://localhost:4130/api/access/check +``` + +Demo artifacts are committed under `docs/demo/`, including `dashboard.png` and `user-project-management-demo.mp4`. diff --git a/user-project-management/docs/demo-script.md b/user-project-management/docs/demo-script.md new file mode 100644 index 0000000..e108687 --- /dev/null +++ b/user-project-management/docs/demo-script.md @@ -0,0 +1,6 @@ +# Demo Script + +1. Run `npm test` to verify authentication, ORCID sync, reputation, project creation, permissions, invitations, and dashboard payloads. +2. Run `npm start` and open `http://localhost:4130`. +3. Confirm the dashboard shows the project space, identity links, access matrix, and researcher profiles. +4. Smoke-test `/api/auth/check`, `/api/users/user-alice/reputation`, and `/api/access/check`. diff --git a/user-project-management/docs/demo/dashboard.png b/user-project-management/docs/demo/dashboard.png new file mode 100644 index 0000000000000000000000000000000000000000..f817a0e339563a47758ccd36d36abf8e81619771 GIT binary patch literal 74592 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

5N4^<3DQ|LearY%6Plv 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 literal 0 HcmV?d00001 diff --git a/user-project-management/docs/demo/user-project-management-demo.mp4 b/user-project-management/docs/demo/user-project-management-demo.mp4 new file mode 100644 index 0000000000000000000000000000000000000000..09596d468a3167fb4ba6eb9c470530504d1a8235 GIT binary patch literal 50543 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 literal 0 HcmV?d00001 diff --git a/user-project-management/package.json b/user-project-management/package.json new file mode 100644 index 0000000..e8b2cc6 --- /dev/null +++ b/user-project-management/package.json @@ -0,0 +1,14 @@ +{ + "name": "@scibase/user-project-management", + "version": "0.1.0", + "private": true, + "description": "Self-contained user and project management prototype for SCIBASE.AI issue #11.", + "type": "module", + "scripts": { + "start": "node src/server.js", + "test": "node --test test/*.test.js" + }, + "engines": { + "node": ">=20" + } +} diff --git a/user-project-management/public/app.js b/user-project-management/public/app.js new file mode 100644 index 0000000..a4a0029 --- /dev/null +++ b/user-project-management/public/app.js @@ -0,0 +1,35 @@ +const dashboard = await fetch("/api/dashboard").then((response) => response.json()); + +document.querySelector("#projectTitle").textContent = dashboard.project.title; +document.querySelector("#project").innerHTML = [ + row("Visibility", dashboard.project.visibility), + row("Resources", Object.values(dashboard.project.resources).flat().length), + row("Collaborators", dashboard.project.collaborators.length), + row("Audit events", dashboard.project.auditLog.length) +].join(""); + +document.querySelector("#identity").innerHTML = ` + ${row("Authenticated", dashboard.auth.authenticated)} + ${row("Provider", dashboard.auth.provider)} + ${row("Linked identities", dashboard.auth.identityLinks.join(", "))} +`; + +document.querySelector("#access").innerHTML = dashboard.accessMatrix + .map((rule) => `
${rule.role}${rule.principalId}${rule.permissions.join(", ")}
`) + .join(""); + +document.querySelector("#profiles").innerHTML = dashboard.profiles + .map( + (profile) => ` +
+ ${profile.name} + ${profile.institution} + Score ${profile.reputation.score} ยท ${profile.orcid} +
+ ` + ) + .join(""); + +function row(label, value) { + return `
${label}${String(value)}
`; +} diff --git a/user-project-management/public/index.html b/user-project-management/public/index.html new file mode 100644 index 0000000..72f8457 --- /dev/null +++ b/user-project-management/public/index.html @@ -0,0 +1,40 @@ + + + + + + SCIBASE User Project Management + + + +
+
+

SCIBASE.AI / issue #11

+

User & Project Management

+
+
+
+

Project Space

+

Loading...

+
+
+
+

Identity

+

Authentication and ORCID sync

+
+
+
+

Access Control

+

Roles and object permissions

+
+
+
+

Profiles

+

Reputation and activity

+
+
+
+
+ + + diff --git a/user-project-management/public/styles.css b/user-project-management/public/styles.css new file mode 100644 index 0000000..0dafc17 --- /dev/null +++ b/user-project-management/public/styles.css @@ -0,0 +1,119 @@ +:root { + --ink: #161917; + --muted: #64716a; + --line: #d9e0dc; + --paper: #f5f2ec; + --panel: #ffffff; + --green: #176b4e; + --plum: #6f4568; +} + +* { + box-sizing: border-box; +} + +body { + margin: 0; + background: var(--paper); + color: var(--ink); + font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; +} + +.shell { + max-width: 1280px; + margin: 0 auto; + padding: 32px; +} + +header { + display: flex; + align-items: end; + justify-content: space-between; + gap: 24px; + margin-bottom: 24px; +} + +p, +h1, +h2 { + margin: 0; +} + +header p, +.label { + color: var(--muted); + font-size: 12px; + font-weight: 900; + letter-spacing: 0.08em; + text-transform: uppercase; +} + +h1 { + max-width: 760px; + font-size: clamp(38px, 6vw, 76px); + line-height: 0.95; +} + +h2 { + margin-top: 8px; + font-size: 24px; +} + +.grid { + display: grid; + grid-template-columns: 1fr 1fr; + gap: 16px; +} + +.panel { + min-height: 260px; + border: 1px solid var(--line); + background: var(--panel); + padding: 24px; +} + +.hero { + grid-row: span 2; +} + +.row, +.rule, +.profile { + border-top: 1px solid var(--line); + padding-top: 12px; + margin-top: 14px; +} + +.row span, +.rule span, +.profile span, +.profile small, +.rule small { + display: block; + color: var(--muted); + line-height: 1.4; +} + +.row strong, +.rule strong, +.profile strong { + display: block; + color: var(--green); + overflow-wrap: anywhere; +} + +.rule strong { + color: var(--plum); +} + +@media (max-width: 820px) { + .shell { + padding: 18px; + } + + header, + .grid { + display: grid; + grid-template-columns: 1fr; + } +} diff --git a/user-project-management/src/management-core.js b/user-project-management/src/management-core.js new file mode 100644 index 0000000..8ed5354 --- /dev/null +++ b/user-project-management/src/management-core.js @@ -0,0 +1,219 @@ +export const demoWorkspace = { + users: [ + { + id: "user-alice", + name: "Alice Chen", + email: "alice@scibase.example", + institution: "SCIBASE Oncology Lab", + field: "Cancer biology", + orcid: "0000-0002-1825-0097", + oauth: ["ORCID", "Google", "GitHub"], + mfaEnabled: true, + profileMode: "public", + keywords: ["organoids", "biomarkers", "reproducibility"], + metrics: { downloads: 1240, forks: 18, endorsements: 42, reproducibilityScore: 94 }, + activity: ["Created organoid response atlas", "Reviewed validation cohort", "Published v1 DOI"] + }, + { + id: "user-mateo", + name: "Mateo Rivera", + email: "mateo@open-repro.example", + institution: "Open Reproducibility Center", + field: "Computational biology", + orcid: "0000-0003-2201-4120", + oauth: ["ORCID", "GitHub", "LinkedIn"], + mfaEnabled: true, + profileMode: "public", + keywords: ["pipelines", "statistics", "notebooks"], + metrics: { downloads: 840, forks: 11, endorsements: 35, reproducibilityScore: 91 }, + activity: ["Added reproducibility workflow", "Opened peer review thread"] + } + ], + institutions: [ + { id: "inst-sci", name: "SCIBASE Oncology Lab", samlEntityId: "https://sso.scibase.example/saml", domains: ["scibase.example"] }, + { id: "inst-open", name: "Open Reproducibility Center", samlEntityId: "https://sso.open-repro.example/saml", domains: ["open-repro.example"] } + ], + projects: [ + { + id: "project-organoid-response", + title: "Organoid chemotherapy response atlas", + visibility: "institutional-only", + status: "active", + ownerId: "user-alice", + metadata: { + funding: ["Open Science Accelerator"], + citation: "Chen and Rivera, 2026", + tags: ["oncology", "organoids"] + }, + resources: { + documents: ["manuscript/main.md", "protocols/organoid-culture.md"], + code: ["code/run_analysis.py"], + datasets: ["data/growth_curves.csv"], + discussions: ["review-statistics", "data-access"], + citations: ["10.5555/scibase.project-organoid-response.v1"] + }, + collaborators: ["user-alice", "user-mateo"], + accessRules: [ + { principalId: "user-alice", role: "Owner", scope: "project", expiresAt: null }, + { principalId: "user-mateo", role: "Contributor", scope: "code", expiresAt: null }, + { principalId: "external-reviewer-1", role: "Reviewer", scope: "documents", expiresAt: "2026-06-01T00:00:00.000Z" } + ], + auditLog: [ + { actorId: "user-alice", action: "project.created", target: "project-organoid-response", createdAt: "2026-05-01T10:00:00.000Z" }, + { actorId: "user-alice", action: "access.invited", target: "external-reviewer-1", createdAt: "2026-05-04T13:00:00.000Z" }, + { actorId: "user-mateo", action: "code.updated", target: "code/run_analysis.py", createdAt: "2026-05-05T15:30:00.000Z" } + ] + } + ] +}; + +export const rolePermissions = { + Owner: ["manage_project", "manage_access", "edit_documents", "edit_code", "download_data", "review", "archive"], + Admin: ["manage_access", "edit_documents", "edit_code", "download_data", "review"], + Contributor: ["edit_documents", "edit_code", "review"], + Reviewer: ["read_documents", "review"], + Viewer: ["read_documents"] +}; + +export function authenticateIdentity({ provider, identifier, mfaCode }, workspace = demoWorkspace) { + const user = workspace.users.find((item) => item.email === identifier || item.orcid === identifier); + if (!user) return { authenticated: false, reason: "unknown_identity" }; + const providerAllowed = provider === "email" || user.oauth.includes(provider) || provider === "SAML"; + const mfaSatisfied = !user.mfaEnabled || /^\d{6}$/.test(mfaCode || ""); + return { + authenticated: providerAllowed && mfaSatisfied, + userId: user.id, + provider, + identityLinks: [...user.oauth, "email", "SAML"], + reason: providerAllowed ? (mfaSatisfied ? "ok" : "mfa_required") : "provider_not_linked" + }; +} + +export function syncOrcidProfile(userId, workspace = demoWorkspace) { + const user = getUser(userId, workspace); + return { + userId, + orcid: user.orcid, + importedPublications: [ + `${user.name}. Reproducible organoid assays. 2026.`, + `${user.name}. Scientific workflow governance. 2025.` + ], + affiliations: [user.institution], + keywords: user.keywords + }; +} + +export function computeReputation(userId, workspace = demoWorkspace) { + const user = getUser(userId, workspace); + const score = Math.round( + Math.log1p(user.metrics.downloads) * 5 + + user.metrics.forks * 1.5 + + user.metrics.endorsements * 2 + + user.metrics.reproducibilityScore * 0.9 + ); + return { + userId, + score, + breakdown: [ + { label: "downloads", value: user.metrics.downloads }, + { label: "forks", value: user.metrics.forks }, + { label: "endorsements", value: user.metrics.endorsements }, + { label: "reproducibility", value: user.metrics.reproducibilityScore } + ] + }; +} + +export function createProjectSpace({ title, ownerId, visibility = "private", tags = [] }, workspace = demoWorkspace) { + getUser(ownerId, workspace); + const id = `project-${slug(title)}`; + const project = { + id, + title, + visibility, + status: "active", + ownerId, + metadata: { funding: [], citation: "", tags }, + resources: { documents: [], code: [], datasets: [], discussions: [], citations: [] }, + collaborators: [ownerId], + accessRules: [{ principalId: ownerId, role: "Owner", scope: "project", expiresAt: null }], + auditLog: [{ actorId: ownerId, action: "project.created", target: id, createdAt: "2026-05-09T00:00:00.000Z" }] + }; + return { workspace: { ...workspace, projects: [...workspace.projects, project] }, project }; +} + +export function evaluateAccess({ userId, projectId, action, objectType = "project" }, workspace = demoWorkspace) { + const project = getProject(projectId, workspace); + const rules = project.accessRules.filter((rule) => rule.principalId === userId && !isExpired(rule.expiresAt)); + const allowedRules = rules.filter((rule) => rule.scope === "project" || rule.scope === objectType); + const granted = allowedRules.some((rule) => (rolePermissions[rule.role] || []).includes(action)); + return { + granted, + userId, + projectId, + action, + objectType, + matchedRoles: allowedRules.map((rule) => rule.role) + }; +} + +export function inviteCollaborator({ actorId, projectId, principalId, role, scope = "project", expiresAt = null }, workspace = demoWorkspace) { + const access = evaluateAccess({ userId: actorId, projectId, action: "manage_access" }, workspace); + if (!access.granted) throw new Error("Actor cannot manage project access"); + const project = getProject(projectId, workspace); + const updatedProject = { + ...project, + collaborators: [...new Set([...project.collaborators, principalId])], + accessRules: [...project.accessRules, { principalId, role, scope, expiresAt }], + auditLog: [ + ...project.auditLog, + { actorId, action: "access.invited", target: principalId, createdAt: "2026-05-09T00:00:00.000Z" } + ] + }; + return replaceProject(workspace, updatedProject); +} + +export function buildProjectDashboard(workspace = demoWorkspace) { + const project = workspace.projects[0]; + return { + auth: authenticateIdentity({ provider: "ORCID", identifier: workspace.users[0].orcid, mfaCode: "123456" }, workspace), + profiles: workspace.users.map((user) => ({ + ...user, + orcidSync: syncOrcidProfile(user.id, workspace), + reputation: computeReputation(user.id, workspace) + })), + project, + accessMatrix: project.accessRules.map((rule) => ({ + ...rule, + permissions: rolePermissions[rule.role] || [] + })), + policyChecks: [ + evaluateAccess({ userId: "user-alice", projectId: project.id, action: "manage_access" }, workspace), + evaluateAccess({ userId: "user-mateo", projectId: project.id, action: "download_data", objectType: "datasets" }, workspace), + evaluateAccess({ userId: "external-reviewer-1", projectId: project.id, action: "review", objectType: "documents" }, workspace) + ] + }; +} + +function getUser(userId, workspace) { + const user = workspace.users.find((item) => item.id === userId); + if (!user) throw new Error(`Unknown user: ${userId}`); + return user; +} + +function getProject(projectId, workspace) { + const project = workspace.projects.find((item) => item.id === projectId); + if (!project) throw new Error(`Unknown project: ${projectId}`); + return project; +} + +function replaceProject(workspace, project) { + return { ...workspace, projects: workspace.projects.map((item) => (item.id === project.id ? project : item)) }; +} + +function isExpired(expiresAt) { + return Boolean(expiresAt && new Date(expiresAt).getTime() < new Date("2026-05-09T00:00:00.000Z").getTime()); +} + +function slug(value) { + return value.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/(^-|-$)/g, ""); +} diff --git a/user-project-management/src/server.js b/user-project-management/src/server.js new file mode 100644 index 0000000..e7b367e --- /dev/null +++ b/user-project-management/src/server.js @@ -0,0 +1,63 @@ +import http from "node:http"; +import { readFile } from "node:fs/promises"; +import { extname, join, resolve, sep } from "node:path"; +import { fileURLToPath } from "node:url"; +import { + authenticateIdentity, + buildProjectDashboard, + computeReputation, + createProjectSpace, + demoWorkspace, + evaluateAccess, + syncOrcidProfile +} from "./management-core.js"; + +const root = join(fileURLToPath(new URL("..", import.meta.url)), "public"); +const port = Number(process.env.PORT || 4130); +const contentTypes = { ".html": "text/html; charset=utf-8", ".css": "text/css; charset=utf-8", ".js": "text/javascript; charset=utf-8" }; + +const server = http.createServer(async (request, response) => { + try { + const url = new URL(request.url, `http://${request.headers.host}`); + if (url.pathname === "/api/dashboard") return json(response, buildProjectDashboard()); + if (url.pathname === "/api/auth/check") return json(response, authenticateIdentity({ provider: "ORCID", identifier: demoWorkspace.users[0].orcid, mfaCode: "123456" })); + if (url.pathname.startsWith("/api/users/") && url.pathname.endsWith("/orcid")) return json(response, syncOrcidProfile(url.pathname.split("/")[3])); + if (url.pathname.startsWith("/api/users/") && url.pathname.endsWith("/reputation")) return json(response, computeReputation(url.pathname.split("/")[3])); + if (url.pathname === "/api/projects/create") return json(response, createProjectSpace({ title: "Prospective validation cohort", ownerId: "user-alice", tags: ["validation"] }).project); + if (url.pathname === "/api/access/check") return json(response, evaluateAccess({ userId: "user-mateo", projectId: "project-organoid-response", action: "edit_code", objectType: "code" })); + return await serveStatic(url.pathname === "/" ? "/index.html" : url.pathname, response); + } catch (error) { + response.writeHead(500, { "content-type": "application/json; charset=utf-8" }); + response.end(JSON.stringify({ error: error.message })); + } +}); + +server.listen(port, () => { + console.log(`User project management demo running at http://localhost:${port}`); +}); + +function json(response, body) { + response.writeHead(200, { "content-type": "application/json; charset=utf-8" }); + response.end(JSON.stringify(body, null, 2)); +} + +async function serveStatic(pathname, response) { + const filePath = resolve(root, pathname.replace(/^\/+/, "")); + if (!filePath.startsWith(`${root}${sep}`)) { + response.writeHead(403, { "content-type": "text/plain; charset=utf-8" }); + response.end("Forbidden"); + return; + } + try { + const body = await readFile(filePath); + response.writeHead(200, { "content-type": contentTypes[extname(filePath)] || "application/octet-stream" }); + response.end(body); + } catch (error) { + if (error.code === "ENOENT") { + response.writeHead(404, { "content-type": "text/plain; charset=utf-8" }); + response.end("Not found"); + return; + } + throw error; + } +} diff --git a/user-project-management/test/management-core.test.js b/user-project-management/test/management-core.test.js new file mode 100644 index 0000000..06005da --- /dev/null +++ b/user-project-management/test/management-core.test.js @@ -0,0 +1,57 @@ +import test from "node:test"; +import assert from "node:assert/strict"; +import { + authenticateIdentity, + buildProjectDashboard, + computeReputation, + createProjectSpace, + demoWorkspace, + evaluateAccess, + inviteCollaborator, + syncOrcidProfile +} from "../src/management-core.js"; + +test("authenticates linked identities with MFA", () => { + const ok = authenticateIdentity({ provider: "ORCID", identifier: demoWorkspace.users[0].orcid, mfaCode: "123456" }); + const missingMfa = authenticateIdentity({ provider: "ORCID", identifier: demoWorkspace.users[0].orcid }); + + assert.equal(ok.authenticated, true); + assert.equal(missingMfa.authenticated, false); + assert.equal(missingMfa.reason, "mfa_required"); +}); + +test("syncs ORCID profile data and computes reputation", () => { + const sync = syncOrcidProfile("user-alice"); + const reputation = computeReputation("user-alice"); + + assert.equal(sync.orcid, demoWorkspace.users[0].orcid); + assert.ok(sync.importedPublications.length >= 2); + assert.ok(reputation.score > 100); +}); + +test("creates project spaces and evaluates object-level permissions", () => { + const { workspace, project } = createProjectSpace({ title: "Metabolomics validation", ownerId: "user-alice", tags: ["metabolomics"] }); + const ownerAccess = evaluateAccess({ userId: "user-alice", projectId: project.id, action: "archive" }, workspace); + const contributorAccess = evaluateAccess({ userId: "user-mateo", projectId: "project-organoid-response", action: "edit_code", objectType: "code" }); + + assert.equal(project.visibility, "private"); + assert.equal(ownerAccess.granted, true); + assert.equal(contributorAccess.granted, true); +}); + +test("invites collaborators with audit logs and builds dashboard payload", () => { + const workspace = inviteCollaborator({ + actorId: "user-alice", + projectId: "project-organoid-response", + principalId: "external-statistician", + role: "Reviewer", + scope: "documents" + }); + const project = workspace.projects[0]; + const dashboard = buildProjectDashboard(workspace); + + assert.ok(project.collaborators.includes("external-statistician")); + assert.ok(project.auditLog.some((entry) => entry.action === "access.invited")); + assert.equal(dashboard.auth.authenticated, true); + assert.ok(dashboard.policyChecks.length >= 3); +});