Releases: Oghamark/Authentication
v1.2.0
What's new
PostgreSQL-backed session store
Sessions are now persisted in PostgreSQL using connect-pg-simple. A background job automatically purges stale sessions, preventing unbounded table growth over time.
Breaking change:
SESSION_SECRETis now a required environment variable. The service will refuse to start without it. Generate a value withopenssl rand -base64 48and add it to your deployment before upgrading.
OpenID Connect (OIDC) SSO
Single sign-on via OpenID Connect is now fully supported. Once configured, a provider sign-in button appears on the login screen alongside the existing email/password form. OIDC configuration is managed through the admin config API — no service restart is required after changing settings.
New endpoints:
| Method | Path | Auth | Description |
|---|---|---|---|
GET |
/oidc/enabled |
Public | Returns whether OIDC is configured |
GET |
/login/oidc |
Public | Initiates the OIDC authorization flow (redirects to provider) |
GET |
/login/oidc/callback |
Public | Handles the provider redirect callback and issues tokens |
GET |
/config |
Admin | Retrieve the full authentication configuration including OIDC settings |
GET |
/config/public |
Public | Retrieve sanitized config (oidcEnabled, oidcProviderName, signupEnabled) |
PATCH |
/config |
Admin | Update authentication configuration including OIDC credentials |
Improvements
- Refactored authentication strategies to use the Passport strategy pattern, making it straightforward to add additional providers in future releases
- Improved error logging for OIDC authentication exceptions to aid debugging of provider misconfiguration
Breaking changes
SESSION_SECRET is now required. The service will not start without it.
Upgrade notes
- Generate a session secret:
openssl rand -base64 48 - Add
SESSION_SECRETto your environment (addAPP_URLfor OIDC redirect URL generation) - The
sessiontable is created automatically on first startup - See the updated Getting Started guide for a revised
docker-compose.yml
Full Changelog: v1.1.1...v1.2.0
v1.1.1
What's Changed
New Features
- Health check endpoint – Added
GET /healthfor liveness/readiness probes - Dedicated role update use case – Introduced
UpdateUserRoleUseCasewith a corrected return type
Bug Fixes
- Fixed
CryptoGatewaymissing fromAppConfigModulecausingJwtTokenGatewaydependency failure - Fixed startup errors and user data serialization issues
Improvements
- Added
DomainExceptionFilterfor consistent domain error handling, with test coverage - New typed domain exceptions for auth and user domains
Developer Experience
- Added devcontainer with Docker Compose for local development with hot reloading
Full Changelog: v1.1.0...v1.1.1
What's Changed
- feat: add admin guard to user management endpoints (#6) by @ryan-bezold in #10
- feat: add signup enabled/disabled toggle endpoints (#7) by @ryan-bezold in #11
- feat: grant ADMIN role to first user on sign-up (#8) by @ryan-bezold in #12
- feat: add PATCH /users/:id/role endpoint for admins (#9) by @ryan-bezold in #13
- fix: resolve startup errors and user data serialization issues by @ryan-bezold in #14
Full Changelog: v1.0.0...v1.1.1
v1.1.0
What's New
Docker Support
The authentication service is now containerized and ready for production deployment via Docker.
Registration Control
GET /config(public) — returns auth configuration including whether sign-up is enabled.PATCH /config(admin only) — allows admins to toggle registration on/off.- Sign-up requests rejected with 403 Forbidden when registration is disabled.
- New
auth_configdatabase table seeded with registration enabled by default.
Admin User Creation
Administrators can now create new user accounts directly through the API.
Role Management
- First registered user is automatically assigned the
ADMINrole. PATCH /users/:id/roleendpoint added for role management (admin only).- All user endpoints are now auth-guarded (JWT required).
- Passwords are no longer returned in user API responses.
Fixes
- Fixed startup crash caused by missing
CryptoGatewayinAppConfigModule. - Fixed first user not receiving
ADMINrole —Result.isSuccesswas implemented as!!value, which returnsfalsefor falsy values like0(empty database). - Fixed sign-up always failing with "User not found" — the failure handler was incorrectly re-throwing a not-found result during email uniqueness check.
- Fixed build error in
AdminCreateUserUseCasecaused by an incompatible interface constraint. - Removed unused import causing CI lint failures.
Refactor
Failureis now an abstract class withcodeandmessagefields;GenericFailurereplaces plainnew Failure(message)usages.Resultnow stores an explicitsuccessboolean instead of deriving it from!!value.Result.success()/Result.failure()renamed toResult.ok()/Result.fail().isSuccessandisFailureconverted from property getters to methods.- The
.on()pattern removed in favour of explicitif/elsechecks.
Full Changelog: v1.0.0...v1.1.0
v1.0.0
What's Changed
- Added Login/Signup functionality
- Added user creation/management for administrators