You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+4-14Lines changed: 4 additions & 14 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,6 +12,7 @@ This repo started as a fork of [DoneTick](https://github.com/donetick/donetick)
12
12
13
13
Task Wizard's primary goal is to allow users to own and protect their data and the following principles are ways to accomplish that:
14
14
15
+
***Zero PII storage** — the server never stores names, emails, or any personally identifiable information. Authentication is handled entirely by Microsoft Entra ID; the backend only persists an opaque directory/object ID pair to associate tasks with a user
15
16
* All the user data sent by this frontend only ever goes to a single backend
16
17
* 🔜 When data is stored, it is encrypted with a user key
17
18
* The code is continuously scanned by a CI that runs CodeQL
@@ -30,9 +31,7 @@ Task Wizard's primary goal is to allow users to own and protect their data and t
30
31
31
32
📧 Notifications for important deadlines you don't want to miss
32
33
33
-
🗝️ Fine-grained access tokens for endless integration possibilities
34
-
35
-
🌐 Authenticated CalDAV endpoint at `/dav/tasks` with app token as the password
34
+
🌐 CalDAV endpoint at `/dav/tasks` with OAuth 2.0 Bearer token authentication
36
35
37
36
## ⌨️ Keyboard Shortcuts
38
37
@@ -54,8 +53,6 @@ To set up authentication:
54
53
55
54
For development without Azure AD, set `entra.enabled` to `false` to enable dev bypass mode (all requests are treated as authenticated).
56
55
57
-
App tokens (used for CalDAV and API integrations) are independently signed with `jwt.secret` and remain functional regardless of Entra configuration.
58
-
59
56
## 🚀 Installation
60
57
61
58
### 🚢 Using Docker Compose (recommended)
@@ -96,7 +93,7 @@ Make sure to replace `/path/to/host` with your preferred root directory for conf
96
93
97
94
In the [config](./apiserver/config/) directory are a couple of starter configuration files for prod and dev environments. The server expects a config.yaml in the config directory and will load settings from it when started.
98
95
99
-
**Note:** You can set `email.host`, `email.port`, `email.email`, `email.password`, `jwt.secret`, Entra ID settings, and database credentials using environment variables for improved security and flexibility. The server will fail to start if `jwt.secret` is left as `"secret"`, so be sure to set `TW_JWT_SECRET` or edit `config.yaml`.
96
+
**Note:** You can set Entra ID settings and database credentials using environment variables for improved security and flexibility.
100
97
101
98
### Database Configuration
102
99
@@ -145,7 +142,6 @@ Configure Entra ID authentication with environment variables or `config.yaml`:
145
142
- `TW_ENTRA_TENANT_ID`- Azure AD tenant ID
146
143
- `TW_ENTRA_CLIENT_ID`- Azure AD application (client) ID
147
144
- `TW_ENTRA_AUDIENCE`- Expected token audience
148
-
- `TW_JWT_SECRET`- Secret for signing app tokens (must be changed from default)
149
145
150
146
### Configuration Reference
151
147
@@ -166,7 +162,6 @@ The configuration files are yaml mappings with the following values:
166
162
| `entra.tenant_id` | (empty) | The Azure AD tenant ID for authentication. |
167
163
| `entra.client_id` | (empty) | The Azure AD application (client) ID. |
168
164
| `entra.audience` | (empty) | The expected audience for Entra ID tokens. |
169
-
| `jwt.secret` | `"secret"` | The secret key used for signing app tokens. **Must be changed from default or set `TW_JWT_SECRET`.** |
170
165
| `server.host_name` | `localhost` | The hostname to use for external links. |
171
166
| `server.port` | `2021` | The port on which the server listens. |
172
167
| `server.read_timeout` | `2s` | The maximum duration for reading the entire request. |
@@ -181,12 +176,7 @@ The configuration files are yaml mappings with the following values:
181
176
| `scheduler_jobs.due_frequency` | `5m` | The interval for sending regular notifications. |
182
177
| `scheduler_jobs.overdue_frequency` | `24h` | The interval for sending overdue notifications. |
183
178
| `scheduler_jobs.notification_cleanup` | `10m` | The interval for cleaning up sent notifications. |
184
-
| `scheduler_jobs.token_expiration_cleanup`| `24h` | The interval for cleaning up expired tokens. |
185
-
|`scheduler_jobs.token_expiration_reminder`| `72h` | How long before an app token expiration to send a reminder for it. |
186
-
| `email.host` | (empty) | The email server host. |
187
-
| `email.port` | (empty) | The email server port. |
188
-
| `email.email` | (empty) | The email address used for sending emails. |
189
-
| `email.password` | (empty) | The password for authenticating with the email server. |
0 commit comments