Todoist Migration - Not working - No log

Hi all,

Thank you for the amazing software! I’m currently transferring from Todoist to Vikunja and getting familiar with the new environment. I’ve set up Vikunja on Unraid as a Docker (both stable and unstable builds were tried) and configured the Todoist migration.

The issue I’m facing is that although I can initiate the migration and grant permissions in the Todoist window that opens, after confirming these permissions, the window closes, and I’m redirected to the front page of my Vikunja instance with nothing happening. The log doesn’t show any import-related activity, despite having configured additional logging. (By the way, I’m also not getting a persistent log file with my setup.)

Has anyone encountered a similar issue? Any ideas or suggestions would be greatly appreciated!

My config.yml

migration:
  todoist:
    enable: true
    clientid: MY_ID
    clientsecret: MY_SECRET
    # The url where clients are redirected after they authorized Vikunja to access their todoist items.
    # This needs to match the url you entered when registering your Vikunja instance at todoist.
    # This is usually the frontend url where the frontend then makes a request to /migration/todoist/migrate
    # with the code obtained from the todoist api.
    # Note that the vikunja frontend expects this to be /migrate/todoist
    redirecturl: <frontend url>/migrate/todoist
    
log:
  # A folder where all the logfiles should go.
  path: <rootpath>logs
  # Whether to show any logging at all or none
  enabled: true
  # Where the normal log should go. Possible values are stdout, stderr, file or off to disable standard logging.
  standard: "stdout"
  # Change the log level. Possible values (case-insensitive) are CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG.
  level: "DEBUG"
  # Whether or not to log database queries. Useful for debugging. Possible values are stdout, stderr, file or off to disable database logging.
  database: "off"
  # The log level for database log messages. Possible values (case-insensitive) are CRITICAL, ERROR, WARNING, NOTICE, INFO, DEBUG.
  databaselevel: "WARNING"
  # Whether to log http requests or not. Possible values are stdout, stderr, file or off to disable http logging.
  http: "stdout"
  # Echo has its own logging which usually is unnecessary, which is why it is disabled by default. Possible values are stdout, stderr, file or off to disable standard logging.
  echo: "off"
  # Whether or not to log events. Useful for debugging. Possible values are stdout, stderr, file or off to disable events logging.
  events: "stdout"
  # The log level for event log messages. Possible values (case-insensitive) are ERROR, INFO, DEBUG.
  eventslevel: "DEBUG"
  # Whether or not to log mail log messages. This will not log mail contents. Possible values are stdout, stderr, file or off to disable mail-related logging.
  mail: "off"
  # The log level for mail log messages. Possible values (case-insensitive) are ERROR, WARNING, INFO, DEBUG.
  maillevel: "INFO"

Docker Log output directly after clicking Get started (Version: v0.23.0-910-732d2b8885):

2024-06-29T11:57:57.202376809+02:00: WEB        ▶ 55.132.15.41  GET 200 /?code=d296a7166dc445d8bd7c2c739037e3f3b3998601&state=a3Ww1ymvxxsjilQMKQPmzqXYoIb2ulFJ 3.43376ms - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
2024-06-29T11:57:57.565391579+02:00: WEB        ▶ 55.132.15.41  GET 200 /api/v1/info 3.512791ms - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
2024-06-29T11:57:57.667868035+02:00: WEB        ▶ 55.132.15.41  GET 200 /api/v1/user 1.462918ms - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
2024-06-29T11:57:57.812602736+02:00: DEBUG      ▶ initials/GetAvatar 148 Serving initials avatar for user 1 and size 50 from cache
2024-06-29T11:57:57.81264595+02:00: WEB         ▶ 55.132.15.41  GET 200 /api/v1/avatar/test?size=50&=1719655077673 765.726µs - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
2024-06-29T11:57:57.816020215+02:00: WEB        ▶ 55.132.15.41  GET 200 /api/v1/notifications?page=1 2.422192ms - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
2024-06-29T11:57:57.830747905+02:00: WEB        ▶ 55.132.15.41  GET 200 /api/v1/labels?page=1 17.081786ms - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
2024-06-29T11:57:57.839900257+02:00: WEB        ▶ 55.132.15.41  GET 200 /api/v1/projects?is_archived=true&page=1 25.842677ms - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
2024-06-29T11:57:57.907569522+02:00: WEB        ▶ 55.132.15.41  GET 200 /api/v1/tasks/all?sort_by[]=due_date&sort_by[]=id&order_by[]=asc&order_by[]=desc&filter=done+%3D+false&filter_include_nulls=false&s=&filter_timezone=Europe%2FAmsterdam&page=1 16.868516ms - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
2024-06-29T11:57:59.468626393+02:00: WEB        ▶ 55.132.15.41  GET 304 /sw.js 76.632µs - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
2024-06-29T11:58:02.738727159+02:00: WEB        ▶ 55.132.15.41  POST 200 /api/v1/user/token 875.947µs - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
2024-06-29T11:58:02.768380313+02:00: WEB        ▶ 55.132.15.41  GET 200 /api/v1/user 914.584µs - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
2024-06-29T11:58:02.769213552+02:00: DEBUG      ▶ initials/GetAvatar 16d Serving initials avatar for user 1 and size 50 from cache
2024-06-29T11:58:02.769264134+02:00: WEB        ▶ 55.132.15.41  GET 200 /api/v1/avatar/test?size=50&=1719655082737 2.122411ms - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
2024-06-29T11:58:02.797923066+02:00: DEBUG      ▶ initials/GetAvatar 16f Serving initials avatar for user 1 and size 50 from cache
2024-06-29T11:58:02.797963089+02:00: WEB        ▶ 55.132.15.41  GET 200 /api/v1/avatar/test?size=50&=1719655082766 928.447µs - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
2024-06-29T11:58:02.827425999+02:00: WEB        ▶ 55.132.15.41  GET 200 /api/v1/tasks/all?sort_by[]=due_date&sort_by[]=id&order_by[]=asc&order_by[]=desc&filter=done+%3D+false&filter_include_nulls=false&s=&filter_timezone=Europe%2FAmsterdam&page=1 21.178723ms - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36
2024-06-29T11:58:07.767638295+02:00: WEB        ▶ 55.132.15.41  GET 200 /api/v1/notifications?page=1 1.031066ms - Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/125.0.0.0 Safari/537.36

Thank you very much!
Best regards,
Best,

Ben

What did you configure in the todoist app section as redirect url?

I used the same url as my frontend (a custom domain reverse proxied via cloudflare tunnels), so the frontend url

OAuth redirect URL: custom.domain.com
App service URL: custom.domain.com

Thanks for the help!

This should be https://custom.domain.com/migrate/todoist. Otherwise, Vikunja does not know how to handle the request.