Commit graph

47 commits

Author SHA1 Message Date
036af95e00 fix: replace member.save() in invite.post.js and remove stale NUXT_PUBLIC_HELCIM_TOKEN env check 2026-04-04 14:02:06 +01:00
d31b5b4dac fix: use private helcimApiToken for all server-side Helcim API calls 2026-04-04 13:37:34 +01:00
ccd1d0783a fix: use canonical member email for series registration when authenticated 2026-04-04 13:27:47 +01:00
44f3ee8c8c fix: check JWT auth before email lookup in series purchase 2026-04-04 13:26:01 +01:00
bc887ca1d4 fix: replace member.save() with findByIdAndUpdate in Slack invite helper 2026-04-04 13:24:22 +01:00
e592b962ec fix: replace member.save() with findByIdAndUpdate in login.post.js 2026-04-04 13:22:36 +01:00
a7b04bfd3c fix: remove explicit requireAuth import (Nitro auto-imports it) 2026-04-04 12:44:01 +01:00
ee438f5c60 chore: remove working copies and superseded verify.get.js 2026-04-04 12:41:33 +01:00
a32e4de2ac feat: wire welcome email for new member creation 2026-04-04 12:40:15 +01:00
8b7f124f15 refactor: use requireAuth in updates routes (optional-auth) 2026-04-04 12:39:09 +01:00
cbb519449a refactor: use requireAuth in updates routes (required-auth) 2026-04-04 12:36:25 +01:00
15fdf77be8 feat: add /api/health endpoint for uptime monitoring 2026-04-04 12:35:26 +01:00
3b7b75ab70 fix: validate ticket type matches entitlement in series purchase 2026-04-04 12:31:58 +01:00
3620dad03a fix: use requireAuth for member pricing to include revocation + status checks 2026-04-04 12:30:54 +01:00
cee67dc005 fix: use auth cookie for member pricing in series available endpoint 2026-04-04 12:28:55 +01:00
db04b270f4 fix: remove redundant connectDB in cancel-subscription 2026-04-04 12:27:34 +01:00
bbe94f0efb fix: replace member.save() with atomic update in cancel-subscription 2026-04-04 12:26:56 +01:00
d4d9629d83 fix: remove redundant connectDB in verify (requireAuth handles it) 2026-04-04 12:25:25 +01:00
79c712a9e9 fix: replace member.save() with atomic update in verify 2026-04-04 12:24:52 +01:00
707ff7b13a fix: remove redundant connectDB in logout (requireAuth handles it) 2026-04-04 12:24:24 +01:00
ab2532dee8 fix: replace member.save() with atomic update in logout 2026-04-04 12:23:01 +01:00
fcd6f4cdf4 feat: reskin admin pages to zine design system
Migrate the entire admin section from the dark guild-* Tailwind theme
to the zine design system (dashed borders, CSS custom properties,
Brygada 1918 + Commit Mono, cream/dark mode palette).

- Replace admin top-nav layout with sidebar matching default layout
- Reskin dashboard, members, events, series management pages
- Reskin events/create and series/create form pages
- Add dev-only test login endpoint (GET /api/dev/test-login)
- Redirect duplicate admin/dashboard.vue to /admin
- Update CLAUDE.md design system docs
2026-04-03 10:56:01 +01:00
c785a23910 Redirect regular members to coming-soon page after magic link login
Instead of sending members directly to the wiki (where they hit
Outline's login page and have to click again), land them on the
coming-soon page which shows a welcome message and wiki link.
2026-03-19 13:02:12 +00:00
2705d171bd Add missing schemas, member model fields, and import endpoint
Adds memberInviteSchema and bulkMemberImportSchema needed by the invite
and CSV import endpoints. Adds inviteEmailSent/inviteEmailSentAt fields
to member model. Adds the bulk import API route.
2026-03-19 11:44:49 +00:00
772f57c2b2 Route login redirect by role: admins to /admin, everyone else to wiki 2026-03-19 10:48:35 +00:00
c0dcfac173 Redirect invite logins to wiki, regular logins to /members
Invite tokens now include a redirect claim so the verify endpoint
can distinguish them from regular login tokens. Only invite links
redirect to wiki.ghostguild.org; normal logins go to /members.
2026-03-19 10:48:00 +00:00
27c07cd3e9 Send invite emails as HTML with clickable button, redirect login to wiki
Invite emails now include both plain text and HTML versions. The
{loginLink} placeholder renders as a styled button in HTML email
clients. Other URLs in the template are auto-linked. The auth verify
endpoint redirects to wiki.ghostguild.org instead of /members.
2026-03-19 10:41:21 +00:00
c3c8b6bcd4 Refactor email templates to use plain text format and update sender addresses
- Simplified the magic link email format to plain text for better compatibility.
- Updated the welcome email to use plain text and changed the sender address to match the domain.
- Enhanced event registration email format to plain text, removing HTML styling for a cleaner approach.
2026-03-05 18:40:37 +00:00
025c1a180f Add Zod validation to all API endpoints and remove debug test route
Adds schema-based input validation across helcim, events, members,
series, admin, and updates API endpoints. Removes the peer-support
debug test endpoint. Adds validation test coverage.
2026-03-01 17:04:26 +00:00
a232a7bbf8 Handle error status codes in profile patch and update endpoints 2026-03-01 14:18:29 +00:00
a8ae173914 Fix session token expiry 2026-03-01 14:05:26 +00:00
b7279f57d1 Add Zod validation, fix mass assignment, remove test endpoints and dead code
- Add centralized Zod schemas (server/utils/schemas.js) and validateBody
  utility for all API endpoints
- Fix critical mass assignment in member creation: raw body no longer
  passed to new Member(), only validated fields (email, name, circle,
  contributionTier) are accepted
- Apply Zod validation to login, profile patch, event registration,
  updates, verify-payment, and admin event creation endpoints
- Fix logout cookie flags to match login (httpOnly: true, secure
  conditional on NODE_ENV)
- Delete unauthenticated test/debug endpoints (test-connection,
  test-subscription, test-bot)
- Remove sensitive console.log statements from Helcim and member
  endpoints
- Remove unused bcryptjs dependency
- Add 10MB file size limit on image uploads
- Use runtime config for JWT secret across all endpoints
- Add 38 validation tests (117 total, all passing)
2026-03-01 14:02:46 +00:00
26c300c357 Implement OWASP ASVS L1 security remediation (Phases 0-2)
Auth: Add requireAuth/requireAdmin guards with JWT cookie verification,
member status checks (suspended/cancelled = 403), and admin role
enforcement. Apply to all admin, upload, and payment endpoints. Add
role field to Member model.

CSRF: Double-submit cookie middleware with client plugin. Exempt
webhook and magic-link verify routes.

Headers: X-Content-Type-Options, X-Frame-Options, X-XSS-Protection,
Referrer-Policy, Permissions-Policy on all responses. HSTS and CSP
(Helcim/Cloudinary/Plausible sources) in production only.

Rate limiting: Auth 5/5min, payment 10/min, upload 10/min, general
100/min via rate-limiter-flexible, keyed by client IP.

XSS: DOMPurify sanitization on marked() output with tag/attr
allowlists. escapeHtml() utility for email template interpolation.

Anti-enumeration: Login returns identical response for existing and
non-existing emails. Remove 404 handling from login UI components.

Mass assignment: Remove helcimCustomerId from profile allowedFields.

Session: 7-day token expiry, refresh endpoint, httpOnly+secure cookies.

Environment: Validate required secrets on startup via server plugin.
Remove JWT_SECRET hardcoded fallback.
2026-03-01 12:53:18 +00:00
d588c49946 Many an update! 2025-12-01 15:26:42 +00:00
bce86ee840 Add landing page 2025-11-03 11:17:51 +00:00
3fea484585 Switch UI components to new design system tokens
Standardizes color values and styling using the new tokens:
- Replaces hardcoded colors with semantic variables
- Updates background/text/border classes for light/dark mode
- Migrates inputs to UInput/USelect/UTextarea components
- Removes redundant style declarations
2025-10-13 15:05:29 +01:00
e8e3b84276 Lots of UI fixes 2025-10-08 19:02:24 +01:00
fb02688166 Add light/dark mode support with CSS variables 2025-10-06 19:54:20 +01:00
970b185151 Updates to profile 2025-10-06 14:52:03 +01:00
1b8dacf92a Add peer support functionality and UI 2025-10-06 11:29:47 +01:00
2b55ca4104 Adding features 2025-10-05 16:15:09 +01:00
600fef2b7c Enhance authentication flow: Add authentication-based buttons in AppNavigation for logged-in users, improve member status checks in useAuth, and update join page to automatically redirect to the dashboard after registration. Adjust cookie settings for better development experience. 2025-09-03 16:55:01 +01:00
2ca290d6e0 Implement multi-step registration process: Add step indicators, error handling, and payment processing for membership registration. Enhance form validation and user feedback with success and error messages. Refactor state management for improved clarity and maintainability. 2025-09-03 14:47:13 +01:00
a88aa62198 Add series management and ticketing features: Introduce series event functionality in event creation, enhance event display with series information, and implement ticketing options for public events. Update layouts and improve form handling for better user experience. 2025-08-27 20:40:54 +01:00
e4a0a9ab0f Enhance application structure: Add runtime configuration for environment variables, integrate new dependencies for Cloudinary and UI components, and refactor member management features including improved forms and member dashboard. Update styles and layout for better user experience. 2025-08-27 16:49:51 +01:00
6e7e27ac4e Enhance UI and functionality: Update main page layout, add contribution options in join form, and improve member dashboard display. Refactor API endpoints for member creation and login. 2025-08-26 18:21:52 +01:00
826517a798 Initial commit 2025-08-26 14:17:16 +01:00