-
Notifications
You must be signed in to change notification settings - Fork 1
Implement combined URL auth key and password authentication for enhanced security #31
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Draft
Copilot
wants to merge
8
commits into
main
Choose a base branch
from
copilot/fix-30
base: main
Could not load branches
Branch not found: {{ refName }}
Loading
Could not load tags
Nothing to show
Loading
Are you sure you want to change the base?
Some commits from the old base branch may be removed from the timeline,
and old review comments may become outdated.
Draft
Changes from all commits
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
7a7cf2a
Initial plan
Copilot 103c4d8
Initial exploration and analysis of current VailNote authentication s…
Copilot e94a7a7
Implement combined auth key and password authentication system
Copilot 1fd1ed4
Complete combined auth key + password implementation with tests and v…
Copilot 8be1fae
Update lib/services/storage/remote-storage.ts
emilkrebs 473d2d1
Separate form and server validation schemas for iv and authKey fields
Copilot a2d50b5
Remove IV from server validation schema and validate directly
Copilot c5b92af
Remove double user confirmation for password-protected notes
Copilot File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
|
|
@@ -9,3 +9,8 @@ | |
| _fresh/ | ||
| # npm dependencies | ||
| node_modules/ | ||
|
|
||
| # Build artifacts and downloads | ||
| *.zip | ||
| deno | ||
| deno-* | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,62 @@ | ||
| # Combined Auth Key + Password Implementation Summary | ||
|
|
||
| ## Changes Made | ||
|
|
||
| ### 1. Enhanced Security Architecture | ||
| - **Before**: Either password OR auth key | ||
| - **After**: Always auth key + optional password for dual-layer security | ||
|
|
||
| ### 2. Key Components Modified | ||
|
|
||
| #### Crypto Service (`lib/services/crypto-service.ts`) | ||
| - `prepareEncryption()` now always generates an auth key | ||
| - When password provided: encryption key = `${authKey}:${password}` | ||
| - When no password: encryption key = `${authKey}` | ||
| - Returns both `passwordHash` and `authKeyHash` for server storage | ||
|
|
||
| #### Database Schema (`lib/types.ts`) | ||
| - Added `authKey?` field to Note interface | ||
|
|
||
| #### API Endpoints | ||
| - **POST /api/notes**: Accepts both `password` and `authKey` hashes | ||
| - **GET/DELETE /api/notes/[id]**: Validates both credentials when both are required | ||
|
|
||
| #### Client Components | ||
| - **ViewNote**: Handles combined authentication flow | ||
| - **Remote Storage**: Sends both auth key and password hashes | ||
|
|
||
| ### 3. Authentication Flow | ||
|
|
||
| #### Creating Notes: | ||
| 1. Always generate auth key | ||
| 2. If password provided: combine for encryption key | ||
| 3. Store both password hash and auth key hash on server | ||
| 4. URL format: `https://vailnote.com/[noteId]#auth=[authKey]` | ||
|
|
||
| #### Retrieving Notes: | ||
| 1. Extract auth key from URL | ||
| 2. Try auth key alone first | ||
| 3. If fails and note requires password: prompt for password | ||
| 4. Use combined key for decryption: `createDecryptionKey(authKey, password)` | ||
| 5. Server validates both hashes | ||
|
|
||
| ### 4. Backward Compatibility | ||
| - Legacy notes with only password: still work | ||
| - Legacy notes with only auth key: still work | ||
| - New notes: require both when password was originally set | ||
|
|
||
| ### 5. Security Benefits | ||
| - Multiple layers of authentication | ||
| - URL auth key provides first barrier | ||
| - Password provides second barrier | ||
| - Combined encryption key stronger than individual components | ||
|
|
||
| ## Testing | ||
| - Created `tests/crypto-service_test.ts` for crypto functionality | ||
| - Updated existing tests in `tests/main_test.ts` | ||
| - Manual verification needed for UI flow | ||
|
|
||
| ## Error Handling | ||
| - Graceful fallbacks for different auth combinations | ||
| - Clear error messages for users | ||
| - Proper validation at all layers |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This message assumes the note requires both auth key and password, but it could be shown for auth-key-only notes as well. The message should be more generic or conditionally displayed based on the actual authentication requirements.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@copilot, hence every URL now should contain a URL fragment, and remove the double confirmation if the note is password-protected. Also shows an appropriate error when the note doesn't have a URL fragment. Make the ViewNote handling more organized