note-taking/docs/migrations/passwords.md
Sofía Aritz 2078c82f45 Add a migration system for the new password system
Added an automatic migration system for notes before the #1 redesign.

Ths system works as follows:
1. Checks the password system used.
2. If it's the old system, the migration is started.
3. The data directory is backed up.
4. The notes are decrypted using the old password.
5. The notes are encrypted and saved using the `KDF(password)`

This commit also adds documentation related to future migrations of the "password system" and which migrations will be supported by each future version.

This documents also showcases that when v1 is released, support for `PasswordSystem::V0` will be completely removed.
2023-03-06 18:23:37 +01:00

27 lines
1.4 KiB
Markdown

# Password migrations
After [issue #1](https://git.sofiaritz.com/sofia/note-taking/issues/1), the migration of old "databases" was required.
Right now, this isn't very useful because the only user is (probably) me, but this serves as an exercise for the future.
## Password systems
Currently, there are two password systems _on-the-wild_:
1. `PasswordSystem::V0`. The system used before [issue #1](https://git.sofiaritz.com/sofia/note-taking/issues/1)
2. `PasswordSystem::V1`. The system used after [issue #1](https://git.sofiaritz.com/sofia/note-taking/issues/1)
(with the KDF)
## Support
Only the latest and previous password system are going to be supported at any point in time.
### Example
1. `v1` uses `PasswordSystem::V1` and supports migration from `PasswordSystem::V0`
2. `v2` is released with the `PasswordSystem::V2` and migration from `PasswordSystem::V1`, those who are still on the
`PasswordSystem::V0` are redirected to the latest `v1` release.
## Currently supported systems
- `v0.*`: `PasswordSystem::V1` and migration from `PasswordSystem::V0`
- `v1.*`:
- If a new system is used: `PasswordSystem::V2` and migration from `PasswordSystem::V1`
- If no new system is used: `PasswordSystem::V1`
- `v2.*`:
- If a new system is used: `PasswordSystem::V3` and migration from `PasswordSystem::V2`
- If no new system is used: `PasswordSystem::V2` and migration from `PasswordSystem::V1`