wiki.selfprivacy.org/src/rest-api/migrations.md

67 lines
2.2 KiB
Markdown
Raw Normal View History

2022-01-27 15:39:19 +02:00
# Migrations
Migrations module is introduced in [[changelog#1 1 1|v1.1.1]] of API and provides one-shot migrations which cannot be performed from the NixOS configuration file changes.
These migrations are checked and ran before every start of the API.
You can disable certain migrations if needed by creating an array at `api.skippedMigrations` in `userdata.json` and populating it with IDs of the migrations to skip. Adding `DISABLE_ALL` to that array disables the migrations module entirely.
For example:
```json
...
"api": {
"token": "secret_token",
"enableSwagger": false,
"skippedMigrations": [ "fix_nixos_config_branch", "create_tokens_json" ]
},
...
```
## Fix NixOS configuration branch
**Migration ID**: `fix_nixos_config_branch`
**Introduced in**: [[changelog#1 1 1|v1.1.1]]
### Description
Mobile SelfPrivacy app introduced a bug in version 0.4.0.
New servers were initialized with a rolling-testing nixos config branch.
This was fixed in app version 0.4.2, but existing servers were not updated.
This migration fixes this by changing the nixos config branch to master.
### Run conditions
Git repository at `/etc/nixos` is using `rolling-testing` branch.
### Migration process
1. Moving context to `/etc/nixos`.
2. Running `git config remote.origin.fetch +refs/heads/*:refs/remotes/origin/*` to fix the consequences of `--single-branch` flag.
3. `git fetch --all` to fetch all existing branches.
4. `git pull` to pull them.
5. `git checkout master` moves to master.
6. Leaving the context.
## Create tokens JSON file
**Migration ID**: `create_tokens_json`
**Introduced in**: [[changelog#authorization_tokens branch]]
### Description
Selfprivacy API used a single token in userdata.json for authentication.
This migration creates a new tokens.json file with the old token in it.
### Run conditions
`/etc/nixos/userdata/tokens.json` does not exist.
### Migration process
1. Current token is retrieved from `userdata.json`.
2. `tokens.json` is created with 0600 permission.
3. File is populated with the following data:
```json
{
"tokens": [
{
"token": "token_string",
"name": "primary_token",
"date": "current date from str(datetime.now())",
}
]
}
```