TomBursch / kitchenowl

KitchenOwl is a self-hosted grocery list and recipe manager. The backend is made with Flask and the frontend with Flutter. Easily add items to your shopping list before you go shopping. You can also create recipes and add items based on what you want to cook.
https://kitchenowl.org/
GNU Affero General Public License v3.0
1.32k stars 78 forks source link

Bug: Logged out in browser after refreshing page #400

Open Timoses opened 9 months ago

Timoses commented 9 months ago

Is this urgent?

No

What parts are affected

Frontend

What is the server version

0.4.21

What is the client version

Browser

What platform are you using

Mac

What's the problem 🤔

Using Firefox:

  1. Log into kitchenowl
  2. Refresh (pressing Cmd+r)
  3. Lands on /signin page.

Share your logs

172.18.0.1 - - [17/Feb/2024:19:29:55 +0000] "POST /api/auth HTTP/1.1" 200 686 "https://owl.robinia.dynu.net/signin" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:29:55 +0000] "GET /socket.io/?EIO=4&transport=polling&t=lsqh4ddi HTTP/1.1" 200 108 "https://owl.robinia.dynu.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:29:55 +0000] "GET /api/user HTTP/1.1" 200 550 "https://owl.robinia.dynu.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:29:55 +0000] "POST /socket.io/?EIO=4&transport=polling&t=lsqh4dff&sid=d5Z5bQzCMJJgKQShAAA- HTTP/1.1" 200 12 "https://owl.robinia.dynu.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:29:55 +0000] "GET /socket.io/?EIO=4&transport=polling&t=lsqh4dfg&sid=d5Z5bQzCMJJgKQShAAA- HTTP/1.1" 200 43 "https://owl.robinia.dynu.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:29:55 +0000] "GET /api/household/1/shoppinglist HTTP/1.1" 200 391 "https://owl.robinia.dynu.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:29:55 +0000] "GET /api/household/1/tag HTTP/1.1" 200 3 "https://owl.robinia.dynu.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:29:56 +0000] "GET /api/household/1/recipe HTTP/1.1" 200 5631 "https://owl.robinia.dynu.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:29:56 +0000] "GET /api/household/1/planner/suggested-recipes HTTP/1.1" 200 3 "https://owl.robinia.dynu.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:29:56 +0000] "GET /api/household/1/planner HTTP/1.1" 200 3 "https://owl.robinia.dynu.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:29:56 +0000] "GET /api/household/1 HTTP/1.1" 200 662 "https://owl.robinia.dynu.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:29:56 +0000] "GET /api/household/1/planner/recent-recipes HTTP/1.1" 200 3 "https://owl.robinia.dynu.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:29:56 +0000] "GET /api/household/1/expense/categories HTTP/1.1" 200 3 "https://owl.robinia.dynu.net/household/1/items" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:29:56 +0000] "GET /api/household/1/expense?view=0 HTTP/1.1" 200 3 "https://owl.robinia.dynu.net/household/1/items" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:29:56 +0000] "GET /api/shoppinglist/1/items?orderby=2 HTTP/1.1" 200 3 "https://owl.robinia.dynu.net/household/1/items" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:29:56 +0000] "GET /api/household/1/category HTTP/1.1" 200 1833 "https://owl.robinia.dynu.net/household/1/items" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:29:56 +0000] "GET /api/shoppinglist/1/recent-items?limit=9 HTTP/1.1" 200 3058 "https://owl.robinia.dynu.net/household/1/items" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:30:00 +0000] "GET /socket.io/?EIO=4&transport=polling&t=lsqh4djx&sid=d5Z5bQzCMJJgKQShAAA- HTTP/1.1" 499 0 "https://owl.robinia.dynu.net/household/1/items" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:30:00 +0000] "POST /socket.io/?EIO=4&transport=polling&t=lsqh4he3&sid=d5Z5bQzCMJJgKQShAAA- HTTP/1.1" 200 12 "https://owl.robinia.dynu.net/household/1/items" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:30:00 +0000] "GET /api/health/8M4F88S8ooi4sMbLBfkkV7ctWwgibW6V HTTP/1.1" 200 71 "https://owl.robinia.dynu.net/household/1/items" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:30:00 +0000] "GET /household/1/items HTTP/1.1" 200 3413 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:30:00 +0000] "GET /api/auth/refresh HTTP/1.1" 499 0 "https://owl.robinia.dynu.net/household/1/items" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:30:01 +0000] "GET /flutter_service_worker.js?v=3875269676 HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:30:01 +0000] "GET /version.json?cachebuster=1708198235674 HTTP/1.1" 200 92 "https://owl.robinia.dynu.net/household/1/items" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:30:01 +0000] "GET /api/health/8M4F88S8ooi4sMbLBfkkV7ctWwgibW6V HTTP/1.1" 200 71 "https://owl.robinia.dynu.net/household/1/items" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:30:02 +0000] "GET /api/auth/refresh HTTP/1.1" 401 20 "https://owl.robinia.dynu.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"
172.18.0.1 - - [17/Feb/2024:19:30:02 +0000] "GET /api/onboarding HTTP/1.1" 200 21 "https://owl.robinia.dynu.net/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:122.0) Gecko/20100101 Firefox/122.0" "10.200.1.93"

### Share your configuration

```yml
Only configured this:

BACK_URL: kitchenowl_back:5000

Complete config with Ansible:

- name: Create docker network
  community.docker.docker_network:
    name: kitchenowl

- name: Create PSQL container
  community.docker.docker_container:
    name: kitchenowl_db
    image: postgres:15
    restart_policy: always
    env:
      POSTGRES_DB: kitchenowl
      POSTGRES_USER: "{{ kitchenowl_psql_user }}"
      POSTGRES_PASSWORD: "{{ kitchenowl_psql_password }}"
    networks:
      - name: kitchenowl
    volumes:
      - /var/www/html/kitchenowl/db:/var/lib/postgresql/data

- name: Create Backend container
  community.docker.docker_container:
    name: kitchenowl_back
    image: tombursch/kitchenowl:v92
    restart_policy: always
    env:
      JWT_SECRET_KEY: "{{ kitchenowl_jwt_secret_key }}"
      DB_DRIVER: postgresql
      DB_HOST: kitchenowl_db
      DB_NAME: kitchenowl
      DB_USER: "{{ kitchenowl_psql_user }}"
      DB_PASSWORD: "{{ kitchenowl_psql_password }}"
      FRONT_URL: https://owl.robinia.dynu.net
    networks:
      - name: kitchenowl
    volumes:
      - /var/www/html/kitchenowl/files:/data

- name: Create Frontend container
  community.docker.docker_container:
    name: kitchenowl_front
    image: tombursch/kitchenowl-web:v0.4.21
    restart_policy: always
    ports:
      - "127.0.0.1:8080:80"
    networks:
      - name: kitchenowl
    env:
      BACK_URL: kitchenowl_back:5000
TomBursch commented 9 months ago

Strange, does this happen with other browsers too? Are there any error messages in the backend logs?

Timoses commented 9 months ago

It's interesting. I just tried it and I could successfully load the page without landing on the '/signin' page. I opened the page on another tab and it worked as well. Then, I went back and suddenly I was on the /signin page. And then I can reproduce it 100%. I sign in, get to /household/1/items page. I reload -> Get to the /signin page again.

I tried reproducing it in Waterfox. No luck.

These are the backend logs of a login and reload (landing on signin page again with Firefox):

[pid: 45|app: 0|req: 25072/25070] 172.18.0.1 () {66 vars in 1047 bytes} [Wed Feb 21 18:20:20 2024] POST /api/auth => generated 686 bytes in 722 msecs (HTTP/1.1 200) 2 headers in 72 bytes (3 switches on core 199)
[pid: 45|app: 0|req: 25073/25071] 172.18.0.1 () {62 vars in 1322 bytes} [Wed Feb 21 18:20:21 2024] GET /socket.io/?EIO=4&transport=polling&t=lsw4e9rq => generated 97 bytes in 3 msecs (HTTP/1.1 200) 2 headers in 100 bytes (3 switches on core 199)
[pid: 45|app: 0|req: 25074/25072] 172.18.0.1 () {62 vars in 1249 bytes} [Wed Feb 21 18:20:21 2024] GET /api/user => generated 993 bytes in 73 msecs (HTTP/1.1 200) 9 headers in 416 bytes (3 switches on core 197)
[pid: 45|app: 0|req: 25075/25073] 172.18.0.1 () {68 vars in 1510 bytes} [Wed Feb 21 18:20:21 2024] POST /socket.io/?EIO=4&transport=polling&t=lsw4e9sm&sid=fvuk9LlSuo0bc6uxAACY => generated 2 bytes in 67 msecs (HTTP/1.1 200) 3 headers in 144 bytes (3 switches on core 197)
[pid: 45|app: 0|req: 25076/25074] 172.18.0.1 () {62 vars in 1372 bytes} [Wed Feb 21 18:20:21 2024] GET /socket.io/?EIO=4&transport=polling&t=lsw4e9sn&sid=fvuk9LlSuo0bc6uxAACY => generated 32 bytes in 5 msecs (HTTP/1.1 200) 2 headers in 100 bytes (3 switches on core 199)
[pid: 45|app: 0|req: 25078/25075] 172.18.0.1 () {62 vars in 1263 bytes} [Wed Feb 21 18:20:21 2024] GET /api/household/1 => generated 662 bytes in 79 msecs (HTTP/1.1 200) 9 headers in 416 bytes (3 switches on core 197)
[pid: 45|app: 0|req: 25079/25076] 172.18.0.1 () {62 vars in 1271 bytes} [Wed Feb 21 18:20:21 2024] GET /api/household/1/tag => generated 3 bytes in 46 msecs (HTTP/1.1 200) 9 headers in 414 bytes (3 switches on core 197)
[pid: 45|app: 0|req: 25080/25077] 172.18.0.1 () {62 vars in 1289 bytes} [Wed Feb 21 18:20:21 2024] GET /api/household/1/shoppinglist => generated 391 bytes in 43 msecs (HTTP/1.1 200) 9 headers in 416 bytes (3 switches on core 195)
[pid: 45|app: 0|req: 25081/25078] 172.18.0.1 () {62 vars in 1309 bytes} [Wed Feb 21 18:20:21 2024] GET /api/household/1/planner/recent-recipes => generated 3 bytes in 49 msecs (HTTP/1.1 200) 9 headers in 414 bytes (3 switches on core 197)
[pid: 45|app: 0|req: 25082/25079] 172.18.0.1 () {62 vars in 1315 bytes} [Wed Feb 21 18:20:21 2024] GET /api/household/1/planner/suggested-recipes => generated 3 bytes in 96 msecs (HTTP/1.1 200) 9 headers in 414 bytes (3 switches on core 195)
[pid: 45|app: 0|req: 25083/25080] 172.18.0.1 () {62 vars in 1277 bytes} [Wed Feb 21 18:20:21 2024] GET /api/household/1/recipe => generated 5636 bytes in 276 msecs (HTTP/1.1 200) 9 headers in 417 bytes (3 switches on core 197)
[pid: 45|app: 0|req: 25084/25081] 172.18.0.1 () {62 vars in 1279 bytes} [Wed Feb 21 18:20:22 2024] GET /api/household/1/planner => generated 3 bytes in 61 msecs (HTTP/1.1 200) 9 headers in 414 bytes (3 switches on core 195)
[pid: 45|app: 0|req: 25085/25082] 172.18.0.1 () {62 vars in 1320 bytes} [Wed Feb 21 18:20:22 2024] GET /api/household/1/expense/categories => generated 3 bytes in 62 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 197)
[pid: 45|app: 0|req: 25086/25083] 172.18.0.1 () {62 vars in 1311 bytes} [Wed Feb 21 18:20:22 2024] GET /api/household/1/expense?view=0 => generated 3 bytes in 66 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 195)
[pid: 45|app: 0|req: 25087/25084] 172.18.0.1 () {62 vars in 1319 bytes} [Wed Feb 21 18:20:22 2024] GET /api/shoppinglist/1/items?orderby=2 => generated 225 bytes in 67 msecs (HTTP/1.1 200) 2 headers in 72 bytes (3 switches on core 197)
[pid: 45|app: 0|req: 25088/25085] 172.18.0.1 () {62 vars in 1300 bytes} [Wed Feb 21 18:20:22 2024] GET /api/household/1/category => generated 1833 bytes in 51 msecs (HTTP/1.1 200) 2 headers in 73 bytes (3 switches on core 195)
[pid: 45|app: 0|req: 25089/25086] 172.18.0.1 () {62 vars in 1329 bytes} [Wed Feb 21 18:20:22 2024] GET /api/shoppinglist/1/recent-items?limit=9 => generated 3133 bytes in 142 msecs (HTTP/1.1 200) 2 headers in 73 bytes (3 switches on core 197)

[pid: 45|app: 0|req: 25090/25087] 172.18.0.1 () {68 vars in 1529 bytes} [Wed Feb 21 18:20:28 2024] POST /socket.io/?EIO=4&transport=polling&t=lsw4efkt&sid=fvuk9LlSuo0bc6uxAACY => generated 2 bytes in 4 msecs (HTTP/1.1 200) 3 headers in 144 bytes (3 switches on core 197)
[pid: 45|app: 0|req: 25090/25088] 172.18.0.1 () {62 vars in 1391 bytes} [Wed Feb 21 18:20:21 2024] GET /socket.io/?EIO=4&transport=polling&t=lsw4e9xo&sid=fvuk9LlSuo0bc6uxAACY => generated 0 bytes in 7283 msecs (HTTP/1.1 200) 2 headers in 100 bytes (3 switches on core 199)
[pid: 45|app: 0|req: 25091/25089] 172.18.0.1 () {62 vars in 1338 bytes} [Wed Feb 21 18:20:28 2024] GET /api/health/8M4F88S8ooi4sMbLBfkkV7ctWwgibW6V => generated 71 bytes in 5 msecs (HTTP/1.1 200) 2 headers in 71 bytes (3 switches on core 199)
[pid: 45|app: 0|req: 25092/25090] 172.18.0.1 () {62 vars in 1285 bytes} [Wed Feb 21 18:20:28 2024] GET /api/auth/refresh => generated 686 bytes in 146 msecs (HTTP/1.1 200) 2 headers in 72 bytes (3 switches on core 199)
[pid: 45|app: 0|req: 25093/25091] 172.18.0.1 () {60 vars in 986 bytes} [Wed Feb 21 18:20:29 2024] GET /api/health/8M4F88S8ooi4sMbLBfkkV7ctWwgibW6V => generated 71 bytes in 4 msecs (HTTP/1.1 200) 2 headers in 71 bytes (3 switches on core 199)
[pid: 45|app: 0|req: 25093/25092] 172.18.0.1 () {62 vars in 1399 bytes} [Wed Feb 21 18:20:05 2024] GET /socket.io/?EIO=4&transport=polling&t=lsw4dx8h&sid=U-lO_VUBzb0xt7wzAACU => generated 1 bytes in 25003 msecs (HTTP/1.1 200) 2 headers in 100 bytes (3 switches on core 198)
[pid: 45|app: 0|req: 25094/25093] 172.18.0.1 () {68 vars in 1537 bytes} [Wed Feb 21 18:20:30 2024] POST /socket.io/?EIO=4&transport=polling&t=lsw4egkh&sid=U-lO_VUBzb0xt7wzAACU => generated 2 bytes in 3 msecs (HTTP/1.1 200) 3 headers in 144 bytes (3 switches on core 198)
[2024-02-21 18:20:30,533] WARNING in config: Unauthorized: IP 172.18.0.1 reused the same refresh token, loging out user
WARNING:app.config:Unauthorized: IP 172.18.0.1 reused the same refresh token, loging out user
[pid: 45|app: 0|req: 25096/25094] 172.18.0.1 () {62 vars in 1266 bytes} [Wed Feb 21 18:20:30 2024] GET /api/auth/refresh => generated 20 bytes in 121 msecs (HTTP/1.1 401) 9 headers in 433 bytes (3 switches on core 199)
[pid: 45|app: 0|req: 25097/25095] 172.18.0.1 () {60 vars in 909 bytes} [Wed Feb 21 18:20:30 2024] GET /api/onboarding => generated 21 bytes in 18 msecs (HTTP/1.1 200) 9 headers in 415 bytes (3 switches on core 199)
[pid: 45|app: 0|req: 25097/25096] 172.18.0.1 () {62 vars in 1397 bytes} [Wed Feb 21 18:20:08 2024] GET /socket.io/?EIO=4&transport=polling&t=lsw4dzn0&sid=Jj8oXdleBHbC_fzYAACW => generated 1 bytes in 25003 msecs (HTTP/1.1 200) 2 headers in 100 bytes (3 switches on core 196)
[pid: 45|app: 0|req: 25098/25097] 172.18.0.1 () {68 vars in 1535 bytes} [Wed Feb 21 18:20:33 2024] POST /socket.io/?EIO=4&transport=polling&t=lsw4eiz0&sid=Jj8oXdleBHbC_fzYAACW => generated 2 bytes in 4 msecs (HTTP/1.1 200) 3 headers in 144 bytes (3 switches on core 196)
TomBursch commented 9 months ago

Probably related to #239 then. I still cannot really reproduce that issue.

Timoses commented 9 months ago

Interesting.

It works well on Android App.

Containers run on latest DietPi OS (a debian variant for Raspberry Pi) on an "Raspberry Pi 3 Model B Plus Rev 1.".

When I load the page, it is remained logged in. I can navigate to different pages. I can close the tab, open another tab, visit kitchenowl and am still logged in.

However, when I refresh the page (e.g. right click on tab and click "Reload Tab") I end up on the sign-in page.

hulkabob commented 5 months ago

Now I'm running latest images and latest app - seeing the same. Tested in Firefox 126 and Chromium 126.0 - when I reload or open a new page I land in the /signin page.

Fun fact - if you try to spam login with empty creds on android - you might get yourself logged back in.

60f4f3d94181 [pid: 55|app: 0|req: 3431/3480] ::ffff:10.0.2.100 () {30 vars in 706 bytes} [Tue Jul  2 18:23:00 2024] GET /api/auth/refresh => generated 821 bytes in 12 msecs (HTTP/1.1 200) 2 headers in 72 bytes (3 switches on core 198)
60f4f3d94181 [2024-07-02 18:23:01,582] WARNING in config: Unauthorized: IP ::ffff:10.0.2.100 login attemp with wrong username or password
60f4f3d94181 WARNING:app.config:Unauthorized: IP ::ffff:10.0.2.100 login attemp with wrong username or password
60f4f3d94181 [pid: 55|app: 0|req: 3432/3481] ::ffff:10.0.2.100 () {34 vars in 749 bytes} [Tue Jul  2 18:23:01 2024] POST /api/auth => generated 20 bytes in 2 msecs (HTTP/1.1 401) 2 headers in 89 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 3432/3482] ::ffff:10.0.2.100 () {42 vars in 981 bytes} [Tue Jul  2 18:22:59 2024] GET /socket.io/?EIO=4&transport=websocket => generated 126 bytes in 1636 msecs (HTTP/1.1 101) 4 headers in 164 bytes (2 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 3433/3483] ::ffff:10.0.2.100 () {30 vars in 758 bytes} [Tue Jul  2 18:23:01 2024] GET /api/health/8M4F88S8ooi4sMbLBfkkV7ctWwgibW6V => generated 71 bytes in 0 msecs (HTTP/1.1 200) 2 headers in 71 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 3434/3484] ::ffff:10.0.2.100 () {30 vars in 700 bytes} [Tue Jul  2 18:23:01 2024] GET /api/onboarding => generated 21 bytes in 1 msecs (HTTP/1.1 200) 2 headers in 71 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 3435/3485] ::ffff:10.0.2.100 () {30 vars in 728 bytes} [Tue Jul  2 18:23:01 2024] GET /api/household/1/shoppinglist => generated 99 bytes in 7 msecs (HTTP/1.1 200) 2 headers in 71 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 3436/3486] ::ffff:10.0.2.100 () {30 vars in 702 bytes} [Tue Jul  2 18:23:01 2024] GET /api/household/1 => generated 615 bytes in 4 msecs (HTTP/1.1 200) 2 headers in 72 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 3437/3487] ::ffff:10.0.2.100 () {30 vars in 719 bytes} [Tue Jul  2 18:23:01 2024] GET /api/household/1/planner => generated 3 bytes in 3 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 3438/3488] ::ffff:10.0.2.100 () {30 vars in 749 bytes} [Tue Jul  2 18:23:01 2024] GET /api/household/1/planner/recent-recipes => generated 3 bytes in 4 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 3439/3489] ::ffff:10.0.2.100 () {30 vars in 741 bytes} [Tue Jul  2 18:23:01 2024] GET /api/household/1/expense/categories => generated 3 bytes in 3 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 3440/3490] ::ffff:10.0.2.100 () {30 vars in 755 bytes} [Tue Jul  2 18:23:01 2024] GET /api/household/1/planner/suggested-recipes => generated 3 bytes in 4 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 3441/3491] ::ffff:10.0.2.100 () {30 vars in 732 bytes} [Tue Jul  2 18:23:01 2024] GET /api/household/1/expense?view=0 => generated 3 bytes in 3 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 3442/3492] ::ffff:10.0.2.100 () {30 vars in 721 bytes} [Tue Jul  2 18:23:01 2024] GET /api/household/1/category => generated 3 bytes in 3 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 3443/3493] ::ffff:10.0.2.100 () {30 vars in 750 bytes} [Tue Jul  2 18:23:01 2024] GET /api/shoppinglist/1/recent-items?limit=9 => generated 504 bytes in 5 msecs (HTTP/1.1 200) 2 headers in 72 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 3444/3494] ::ffff:10.0.2.100 () {30 vars in 759 bytes} [Tue Jul  2 18:23:01 2024] GET /api/health/8M4F88S8ooi4sMbLBfkkV7ctWwgibW6V => generated 71 bytes in 0 msecs (HTTP/1.1 200) 2 headers in 71 bytes (3 switches on core 197)
60f4f3d94181 [2024-07-02 18:23:02,315] WARNING in config: Unauthorized: IP ::ffff:10.0.2.100 login attemp with wrong username or password
60f4f3d94181 WARNING:app.config:Unauthorized: IP ::ffff:10.0.2.100 login attemp with wrong username or password
60f4f3d94181 [pid: 55|app: 0|req: 3445/3495] ::ffff:10.0.2.100 () {34 vars in 751 bytes} [Tue Jul  2 18:23:02 2024] POST /api/auth => generated 20 bytes in 2 msecs (HTTP/1.1 401) 2 headers in 89 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 3446/3496] ::ffff:10.0.2.100 () {30 vars in 759 bytes} [Tue Jul  2 18:23:02 2024] GET /api/health/8M4F88S8ooi4sMbLBfkkV7ctWwgibW6V => generated 71 bytes in 0 msecs (HTTP/1.1 200) 2 headers in 71 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 3447/3497] ::ffff:10.0.2.100 () {30 vars in 703 bytes} [Tue Jul  2 18:23:02 2024] GET /api/household/1 => generated 615 bytes in 7 msecs (HTTP/1.1 200) 2 headers in 72 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 3448/3498] ::ffff:10.0.2.100 () {30 vars in 701 bytes} [Tue Jul  2 18:23:02 2024] GET /api/onboarding => generated 21 bytes in 0 msecs (HTTP/1.1 200) 2 headers in 71 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 3449/3499] ::ffff:10.0.2.100 () {30 vars in 729 bytes} [Tue Jul  2 18:23:02 2024] GET /api/household/1/shoppinglist => generated 99 bytes in 3 msecs (HTTP/1.1 200) 2 headers in 71 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 3450/3500] ::ffff:10.0.2.100 () {30 vars in 749 bytes} [Tue Jul  2 18:23:02 2024] GET /api/household/1/planner/recent-recipes => generated 3 bytes in 4 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 3451/3501] ::ffff:10.0.2.100 () {30 vars in 719 bytes} [Tue Jul  2 18:23:02 2024] GET /api/household/1/planner => generated 3 bytes in 3 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 3452/3502] ::ffff:10.0.2.100 () {30 vars in 741 bytes} [Tue Jul  2 18:23:02 2024] GET /api/household/1/expense/categories => generated 3 bytes in 3 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 3453/3503] ::ffff:10.0.2.100 () {30 vars in 755 bytes} [Tue Jul  2 18:23:02 2024] GET /api/household/1/planner/suggested-recipes => generated 3 bytes in 4 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 3454/3504] ::ffff:10.0.2.100 () {30 vars in 732 bytes} [Tue Jul  2 18:23:02 2024] GET /api/household/1/expense?view=0 => generated 3 bytes in 4 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 3455/3505] ::ffff:10.0.2.100 () {30 vars in 740 bytes} [Tue Jul  2 18:23:02 2024] GET /api/shoppinglist/1/items?orderby=0 => generated 1058 bytes in 5 msecs (HTTP/1.1 200) 2 headers in 73 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 3456/3506] ::ffff:10.0.2.100 () {30 vars in 721 bytes} [Tue Jul  2 18:23:02 2024] GET /api/household/1/category => generated 3 bytes in 3 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 3457/3507] ::ffff:10.0.2.100 () {30 vars in 750 bytes} [Tue Jul  2 18:23:02 2024] GET /api/shoppinglist/1/recent-items?limit=9 => generated 504 bytes in 4 msecs (HTTP/1.1 200) 2 headers in 72 bytes (3 switches on core 198)
hulkabob commented 5 months ago

UPD: Seems /api/refresh is not called on refresh. When I was spamming the deployment with android app, got this:

60f4f3d94181 [pid: 55|app: 0|req: 4217/4268] ::ffff:10.0.2.100 () {34 vars in 750 bytes} [Tue Jul  2 18:27:38 2024] POST /api/auth => generated 20 bytes in 2 msecs (HTTP/1.1 401) 2 headers in 89 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 4218/4269] ::ffff:10.0.2.100 () {30 vars in 758 bytes} [Tue Jul  2 18:27:38 2024] GET /api/health/8M4F88S8ooi4sMbLBfkkV7ctWwgibW6V => generated 71 bytes in 0 msecs (HTTP/1.1 200) 2 headers in 71 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 4219/4270] ::ffff:10.0.2.100 () {30 vars in 700 bytes} [Tue Jul  2 18:27:38 2024] GET /api/onboarding => generated 21 bytes in 1 msecs (HTTP/1.1 200) 2 headers in 71 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 4220/4271] ::ffff:10.0.2.100 () {30 vars in 719 bytes} [Tue Jul  2 18:27:38 2024] GET /api/household/1/planner => generated 3 bytes in 6 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 4221/4272] ::ffff:10.0.2.100 () {30 vars in 702 bytes} [Tue Jul  2 18:27:38 2024] GET /api/household/1 => generated 615 bytes in 3 msecs (HTTP/1.1 200) 2 headers in 72 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 4222/4273] ::ffff:10.0.2.100 () {30 vars in 729 bytes} [Tue Jul  2 18:27:38 2024] GET /api/household/1/shoppinglist => generated 99 bytes in 3 msecs (HTTP/1.1 200) 2 headers in 71 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 4223/4274] ::ffff:10.0.2.100 () {30 vars in 749 bytes} [Tue Jul  2 18:27:38 2024] GET /api/household/1/planner/recent-recipes => generated 3 bytes in 4 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 4224/4275] ::ffff:10.0.2.100 () {30 vars in 755 bytes} [Tue Jul  2 18:27:38 2024] GET /api/household/1/planner/suggested-recipes => generated 3 bytes in 4 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 4225/4276] ::ffff:10.0.2.100 () {30 vars in 741 bytes} [Tue Jul  2 18:27:38 2024] GET /api/household/1/expense/categories => generated 3 bytes in 3 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 4226/4277] ::ffff:10.0.2.100 () {30 vars in 732 bytes} [Tue Jul  2 18:27:38 2024] GET /api/household/1/expense?view=0 => generated 3 bytes in 3 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 4227/4278] ::ffff:10.0.2.100 () {30 vars in 721 bytes} [Tue Jul  2 18:27:38 2024] GET /api/household/1/category => generated 3 bytes in 3 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 4228/4279] ::ffff:10.0.2.100 () {30 vars in 759 bytes} [Tue Jul  2 18:27:38 2024] GET /api/health/8M4F88S8ooi4sMbLBfkkV7ctWwgibW6V => generated 71 bytes in 0 msecs (HTTP/1.1 200) 2 headers in 71 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 4229/4280] ::ffff:10.0.2.100 () {30 vars in 750 bytes} [Tue Jul  2 18:27:38 2024] GET /api/shoppinglist/1/recent-items?limit=9 => generated 504 bytes in 3 msecs (HTTP/1.1 200) 2 headers in 72 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 4230/4281] ::ffff:10.0.2.100 () {30 vars in 706 bytes} [Tue Jul  2 18:27:38 2024] GET /api/auth/refresh => generated 821 bytes in 15 msecs (HTTP/1.1 200) 2 headers in 72 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 4232/4282] ::ffff:10.0.2.100 () {30 vars in 759 bytes} [Tue Jul  2 18:27:38 2024] GET /api/health/8M4F88S8ooi4sMbLBfkkV7ctWwgibW6V => generated 71 bytes in 0 msecs (HTTP/1.1 200) 2 headers in 71 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 4233/4283] ::ffff:10.0.2.100 () {30 vars in 701 bytes} [Tue Jul  2 18:27:38 2024] GET /api/onboarding => generated 21 bytes in 0 msecs (HTTP/1.1 200) 2 headers in 71 bytes (3 switches on core 197)
60f4f3d94181 [2024-07-02 18:27:39,242] WARNING in config: Unauthorized: IP ::ffff:10.0.2.100 login attemp with wrong username or password
60f4f3d94181 WARNING:app.config:Unauthorized: IP ::ffff:10.0.2.100 login attemp with wrong username or password
60f4f3d94181 [pid: 55|app: 0|req: 4234/4284] ::ffff:10.0.2.100 () {34 vars in 751 bytes} [Tue Jul  2 18:27:39 2024] POST /api/auth => generated 20 bytes in 2 msecs (HTTP/1.1 401) 2 headers in 89 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 4234/4285] ::ffff:10.0.2.100 () {42 vars in 982 bytes} [Tue Jul  2 18:27:38 2024] GET /socket.io/?EIO=4&transport=websocket => generated 126 bytes in 631 msecs (HTTP/1.1 101) 4 headers in 164 bytes (2 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 4235/4286] ::ffff:10.0.2.100 () {30 vars in 759 bytes} [Tue Jul  2 18:27:39 2024] GET /api/health/8M4F88S8ooi4sMbLBfkkV7ctWwgibW6V => generated 71 bytes in 0 msecs (HTTP/1.1 200) 2 headers in 71 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 4236/4287] ::ffff:10.0.2.100 () {30 vars in 706 bytes} [Tue Jul  2 18:27:39 2024] GET /api/auth/refresh => generated 821 bytes in 18 msecs (HTTP/1.1 200) 2 headers in 72 bytes (3 switches on core 198)
60f4f3d94181 [pid: 55|app: 0|req: 4238/4288] ::ffff:10.0.2.100 () {30 vars in 703 bytes} [Tue Jul  2 18:27:39 2024] GET /api/household/1 => generated 615 bytes in 6 msecs (HTTP/1.1 200) 2 headers in 72 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 4239/4289] ::ffff:10.0.2.100 () {30 vars in 755 bytes} [Tue Jul  2 18:27:39 2024] GET /api/household/1/planner/suggested-recipes => generated 3 bytes in 10 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 197)
60f4f3d94181 [pid: 55|app: 0|req: 4240/4290] ::ffff:10.0.2.100 () {30 vars in 749 bytes} [Tue Jul  2 18:27:39 2024] GET /api/household/1/planner/recent-recipes => generated 3 bytes in 4 msecs (HTTP/1.1 200) 2 headers in 70 bytes (3 switches on core 199)

In the first batch there is no /auth/refresh call, and in the last one - there is a /auth/refresh.