lfm_embed
A simple webserver for rendering a last.fm embed.
More specifically, this displays a simple webpage with info about your current or most recent last.fm scrobble. Its intended use is to be put on a personal site or whatever.
lfm_embed
is, as it stands, designed to use a reverse proxy.
A future release may include HTTPS support, but currently, it will only listen on localhost
, prohibiting it from public access.
Once configured, a request of the form http://localhost:9999/<last.fm username>
will render out an embed with the default theme.
As it stands, there are no plans to support displaying users with private listen history.
Configuration should be done via the environment.
lfm_embed
also supports reading from a standard .env
file.
The following are the environment variables which lfm_embed
understands.
LMFE_API_KEY
(Required)Your last.fm API key. You'll need to create one here for self-hosting.
LFME_PORT
(Default: 9999
)The port to serve on locally.
LFME_NO_REFRESH
(Default: 0
)If set to 1
, disable outputting of the HTML meta http-eqiv="refresh"
tag, used for live status updates.
LFME_LOG_LEVEL
(Default: "warn"
)The loglevel. This is actually parsed as an env_logger
filter string.
Read the docs for more info.
LFME_LOG_FILE
If set, logs will be written to the specified file. Otherwise, logs are written to stderr
.
LFME_WHITELIST_MODE
(Default: "open"
)The following(case-insensitive) values are supported:
open
: Allow requests for all users.
exclusive
: Only allow requests for users in LFME_WHITELIST
, returning HTTP 403 for all others. LFME_WHITELIST
must be set if this mode is enabled.
If the user requested has their listen history private, a 403 will be returned.
LFME_WHITELIST
(Default: ""
)This is expected to be a sequence of comma-separated usernames. Leading/trailing whitespace will be stripped, and unicode is fully supported.
LFME_WHITELIST_REFRESH
(Default: "1m"
)The amount of time to cache whitelisted user info for.
It is interpreted as a sequence of <num><suffix>
values, where num
is a positive integer,
and suffix
is one of y
,mon
,w
,d
,h
,m
,s
, ms
, µs
, or ns
, each of which
corresponds to a self-explanatory unit of time.
For most practical applications, one should only use m
and s
, as caching your current listen for more than that time has the potential to omit most songs.
Parsing is delegated to the duration_str
crate, and further info may be found there.
LFME_DEFAULT_REFRESH
(Default: "5m"
)The amount of time to cache non-whitelisted user info for.
See LFME_WHITELIST_REFRESH
for more info.
LFME_THEME_DIR
If set, must be a valid path to a directory containing Handlebars files, ending in LFME_THEME_EXT. They will be registered as themes on top of the builtin ones, with each theme's name being their filename minus the extension. Same-named themes will override builtin ones.
Theme names are the same as their path, minus the extension. Given an extension of .hbs, a directory like:
themes/
mytheme.hbs
myothertheme.hbs
myunrelatedfile.css
alices-themes/
mytheme.hbs
mysuperawesometheme.hbs
results in the following themes:
mytheme
myothertheme
alices-themes/mytheme
alices-themes/mysuperawesometheme
By default, these are loaded and compiled once, at startup.
LFME_THEME_EXT
(Default: hbs
)The file extension for themes in LFME_THEME_DIR
.
LFME_THEME_DEV
(Default: 0
)If set to 1
, existing themes will be reloaded on edit.
Note: Even with this mode, adding a new theme requires a full reload.
Themes are only enumerated once, at startup. (This is a limitation of the handlebars
implementation in use, and may change.)
LFME_THEME_DEFAULT
(Default: "plain"
)The theme to use when no query string is present.
LFME_API_KEY=0123456789abcdef0123456789abcdef
LFME_LOG_LEVEL=error
LFME_PORT=3000
LFME_WHITELIST_REFRESH=30s
LFME_WHITELIST_MODE=exclusive
LFME_WHITELIST=a_precious_basket_case, realRiversCuomo, Pixiesfan12345