48 lines
2.0 KiB
Markdown
48 lines
2.0 KiB
Markdown
# xactfetch—Automatically Import Bank Transactions
|
|
|
|
*xactfetch* is a tool that automates importing bank account transactions into
|
|
[Firefly-III] using CSV exports from banks' websites. It uses [Playwright] to
|
|
automate navigating the online banking portals and downloads transaction
|
|
exports, then imports the data using the [Firefly-III Data Importer].
|
|
|
|
|
|
## Online Banking Passwords
|
|
|
|
Credentials for online banking websites are stored in a Bitwarden Vault.
|
|
*xactfetch* uses a dedicated account for accessing Bitwarden, which is a member
|
|
of a special Organization that shares the bank credentials. My normal user is
|
|
also a member of this Organization, which allows me to use and update the
|
|
credentials normally, and any changes will automatically be made available to
|
|
*xactfetch*.
|
|
|
|
|
|
## Chase SMS Verification
|
|
|
|
The Chase website requires "verification" on a per-device basis. The first
|
|
time accessing the Chase website, a verification code will be sent to the SMS
|
|
number associated with the Chase account. That code must be provided in order
|
|
to log in. *xactfetch* does NOT automate this process. Instead, it tries to
|
|
appear like a device that has used the Chase website before by keeping a
|
|
persistent cookie store across executions.
|
|
|
|
Sometimes, the cookie that indicates the device has been verified expires or
|
|
otherwise becomes invalid. To fix this, *xactfetch* must be run manually with
|
|
a non-headless browser:
|
|
|
|
```sh
|
|
DEBUG_HEADLESS_BROWSER=0 python xactfetch.py
|
|
```
|
|
|
|
When the verification form is presented, follow the process to enter the code.
|
|
After *xactfetch* has completed successfully, copy the `cookies.json` file it
|
|
created to the Kubernetes PersistentVolume. One way to do this is to create
|
|
a Pod with the volume mounted, then use `kubectl` to copy the file:
|
|
|
|
```sh
|
|
kubectl exec -i -n firefly-iii xactfetch-28388926-5r778 -- sh -c 'cat > /var/lib/xactfetch/cookies.json' < cookies.json
|
|
```
|
|
|
|
[Firefly-III]: https://www.firefly-iii.org/
|
|
[Playwright]: https://playwright.dev/python/docs/intro
|
|
[Firefly-III Data Import Tool]: https://github.com/firefly-iii/data-importer/
|