v15.0

Notifuse/notifusev15.0Nov 1, 2025by pierre-b

AI Summary

Notifuse v15.0 is a major security release that migrates from PASETO to industry-standard JWT authentication with HMAC-SHA256 signing, along with HMAC-protected magic codes, server-side logout functionality, and comprehensive rate limiting to prevent brute force attacks.

Key Highlights

  • Migration from PASETO to JWT (HS256) authentication with simplified single SECRET_KEY setup
  • Magic codes now stored as HMAC-SHA256 hashes instead of plain text for enhanced security
  • New /api/user.logout endpoint for complete session termination
  • Rate limiting: 5 attempts per 5 minutes on sign-in and code verification endpoints
  • Thread-safe rate limiting with sliding window algorithm and automatic cleanup

Breaking Changes

  • All user sessions invalidated - users must log in again
  • All API keys must be regenerated (PASETO format → JWT format)
  • All pending workspace invitations invalidated
  • All active magic codes invalidated (migration from plain-text to HMAC-SHA256 hashes)
  • If SECRET_KEY is changed, all encrypted workspace credentials (API keys, SMTP passwords) will be permanently destroyed

New Features

  • JWT Authentication (HS256) with comprehensive token validation (signature, expiration, claims)
  • HMAC-SHA256 hashing for magic codes - database compromise cannot reveal authentication codes
  • Server-side logout with instant invalidation of all user sessions
  • Rate limiting for authentication endpoints with sliding window algorithm
  • Rate limiter resets on successful authentication

Full Release Notes

# Notifuse v15.0 Release Notes

**Release Date:** November 1, 2025

## 🔒 Major Security Release: Enhanced Authentication & Authorization

Notifuse v15.0 represents a significant security milestone with the migration from PASETO to industry-standard JWT authentication, along with comprehensive improvements to authentication security.

---

## 🎯 What's New

### JWT Authentication (HS256)
We've migrated from PASETO to industry-standard JWT with HMAC-SHA256 signing, bringing:
- **Simplified setup**: Single `SECRET_KEY` environment variable instead of managing asymmetric key pairs
- **Comprehensive token validation**: Signature, expiration, and claims verification

### HMAC-Protected Magic Codes
Authentication codes are now stored securely:
- Magic codes stored as HMAC-SHA256 hashes (never in plain text)
- Database compromise cannot reveal authentication codes

### Server-Side Logout
Full session management with instant invalidation:
- New `/api/user.logout` endpoint for complete session termination
- Deletes ALL sessions for authenticated user from database

### Rate Limiting for Authentication Endpoints
Protection against brute force attacks and email bombing:
- **5 attempts per 5 minutes** per email address for sign-in
- **5 attempts per 5 minutes** per email address for code verification
- Sliding window algorithm with automatic cleanup
- Rate limiter resets on successful authentication
- Thread-safe concurrent access
- Prevents 99%+ of magic code brute force attempts

---

## ⚠️ BREAKING CHANGES & MIGRATION

### Before You Upgrade

#### 🚨 CRITICAL: About Your SECRET_KEY

**For Existing Deployments:**
- **DO NOT change your existing `SECRET_KEY`** 
- It encrypts all workspace integration secrets (API keys, SMTP passwords, email provider credentials)
- Changing it will permanently destroy all encrypted credentials
- Your email sending will break completely

**For New Installations:**
- Generate a new key: `export SECRET_KEY=$(openssl rand -base64 32)`

**If migrating from PASETO:**
- Use your existing PASETO key: `export SECRET_KEY="$PASETO_PRIVATE_KEY"`

### What Gets Invalidated During Migration

The following will be reset during the PASETO → JWT migration (this is a one-time event):

- ✗ **All user sessions** - Users must log in again (PASETO tokens → JWT tokens)
- ✗ **All API keys** - Must be regenerated (PASETO format → JWT format)
- ✗ **All pending workspace invitations** - Invitation tokens were PASETO-signed
- ✗ **All active magic codes** - Migrating from plain-text → HMAC-SHA256 hashes

**Why?** PASETO tokens are incompatible with JWT verification. Clean migration ensures no security gaps.

### Migration Steps

1. **Set SECRET_KEY environment variable** (if not already set)
   ```bash
   export SECRET_KEY="your-existing-secret-key"
   ```

2. **Start/Restart your Notifuse server**
   - Migration v15 runs automatically
   - Server will restart automatically after migration
   - Migration takes less than 1 second
   - Safe to run multiple times (idempotent)

3. **Post-Migration Actions:**
   - **Users**: Log in again with email/password or magic code
   - **API Key Holders**: Regenerate API keys in Settings → API Keys
   - **Integrations**: Update all API integrations with new keys
   - **Workspace Admins**: Resend pending invitations via Settings → Members → Invitations

## 📖 Full Changelog

For complete technical details, see [CHANGELOG.md](./CHANGELOG.md#150---2025-11-01).

---

## 🆘 Support

If you encounter any issues during migration:

1. Check that `SECRET_KEY` is set correctly
2. Review server logs for migration status
3. Open an issue on [GitHub](https://github.com/notifuse/notifuse/issues)

---

**Questions?** Check our [documentation](https://docs.notifuse.com) or open a GitHub issue.