Skip to content

Commit

Permalink
Merge pull request #154 from arachnist/token-from-env
Browse files Browse the repository at this point in the history
Get access token from environment variable
  • Loading branch information
nanos authored Aug 9, 2024
2 parents db0886d + 676eaa4 commit 8d5d971
Show file tree
Hide file tree
Showing 2 changed files with 37 additions and 2 deletions.
17 changes: 15 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -130,13 +130,26 @@ FediFetcher has quite a few configuration options, so here is my quick configura

If you configure FediFetcher this way, it'll fetch missing remote replies to the last 200 posts in your home timeline. It'll additionally backfill profiles of the last 80 people you followed, and of every account who appeared in your notifications during the past hour.

#### Providing configuration options

Unless you are running FediFetcher as GitHub Action (please see above for instructions on configuring FediFetcher with GitHub Actions), there are a three ways in which you provide configuration options:

1. Configuration File: <br>
You can provide a `json` file with configuration options. Then run the script like so: <br>`python find_posts.py -c=/path/to/config.json`
2. Command line flags: <br>
You can provide all options directly in the command line. Simply run the script with te correct options supplied: <br>`python find_posts.py --server=example.com --home-timeline-length=80`.
3. Environment variables: <br>
You can supply your options as environment variables. To do so take the option name from the table below, replace `-` with `_` and prefix with `FF_`. For example `max-favourites` can be set via `FF_MAX_FAVOURITES`. (Environment variables are not case sensitive.)



#### Advanced Options

Please find the list of all configuration options, including descriptions, below:
Below is a list of all configuration options, including their descriptions.

Option | Required? | Notes |
|:----------------------------------------------------|-----------|:------|
|`access-token` | Yes | The access token. If using GitHub action, this needs to be provided as a Secret called `ACCESS_TOKEN`. If running as a cron job or a container, you can supply this option as array, to [fetch posts for multiple users](https://blog.thms.uk/2023/04/muli-user-support-for-fedifetcher) on your instance. |
|`access-token` | Yes | The access token. If using GitHub action, this needs to be provided as a Secret called `ACCESS_TOKEN`. If running as a cron job or a container, you can supply this option as array, to [fetch posts for multiple users](https://blog.thms.uk/2023/04/muli-user-support-for-fedifetcher) on your instance. To set tokens for multiple users using environment variables, define multiple environment variables with `FF_ACCESS_TOKEN` prefix, eg. `FF_ACCESS_TOKEN_USER1=…` and `FF_ACCESS_TOKEN_USER2=…`|
|`server`|Yes|The domain only of your mastodon server (without `https://` prefix) e.g. `mstdn.thms.uk`. |
|`home-timeline-length` | No | Provide to fetch remote replies to posts in the API-Key owner's home timeline. Determines how many posts we'll fetch replies for. Recommended value: `200`.
| `max-bookmarks` | No | Provide to fetch remote replies to any posts you have bookmarked. Determines how many of your bookmarks you want to get replies to. Recommended value: `80`. Requires an access token with `read:bookmarks` scope.
Expand Down
22 changes: 22 additions & 0 deletions find_posts.py
Original file line number Diff line number Diff line change
Expand Up @@ -1488,6 +1488,28 @@ def fetch_timeline_context(timeline_posts, token, parsed_urls, seen_hosts, seen_
logger.critical(f"Config file {arguments.config} doesn't exist")
sys.exit(1)

for envvar, value in os.environ.items():
envvar = envvar.lower()
if envvar.startswith("ff_") and not envvar.startswith("ff_access_token"):
envvar = envvar[3:]
# most settings are numerical
if envvar not in [
"server",
"lock_file",
"state_dir",
"on_start",
"on_done",
"on_fail",
"log_level",
"log_format"
]:
value = int(value)
setattr(arguments, envvar, value)

# remains special-cased for specifying multiple tokens
if tokens := [token for envvar, token in os.environ.items() if envvar.lower().startswith("ff_access_token")]:
arguments.access_token = tokens

logger.info(f"Starting FediFetcher")

if(arguments.server == None or arguments.access_token == None):
Expand Down

0 comments on commit 8d5d971

Please sign in to comment.