Claudio Ortolina
ba62d54cc5
ML-177: implementation
2026-05-10 20:39:18 +01:00
Claudio Ortolina
a3bc6d7cf3
ML-176.1: support search in collection api controller
2026-05-10 14:52:01 +01:00
Claudio Ortolina
0a9fafd35e
Add micro_cover_url
2026-05-05 23:22:37 +01:00
Claudio Ortolina
be76d0f214
Provide mini covers (150px)
2026-05-05 16:33:43 +01:00
Claudio Ortolina
cccd28a9f9
ML-165: implementation
2026-05-05 13:43:18 +01:00
Claudio Ortolina
1ddef07bcc
fix(api): handle non-integer error ids, clamp negative pagination params
...
- show/2: use case instead of bare Integer.parse match so
/api/v1/errors/not-an-id returns 404 instead of crashing
- index/2: clamp limit to >= 1 and offset to >= 0 to prevent
SQLite from treating negative values as unlimited
- Add 3 tests: non-integer id 404, negative limit/offset clamping
2026-05-04 14:17:45 +01:00
Claudio Ortolina
51bd24d5b4
ML-162: enable /api/v1/errors endpoint
2026-05-04 13:14:40 +01:00
Claudio Ortolina
c489fde1cc
ML-152: add /api/v1/ version prefix to all API routes
2026-04-30 11:57:43 +01:00
Claudio Ortolina
90db113845
ML-5: document Last.fm OAuth callback trust boundary
...
Closes GitHub issue #178 .
2026-04-24 08:05:07 +01:00
Claudio Ortolina
92a36b915a
Harden public asset endpoint against invalid payloads
...
Closes #143
2026-03-30 14:56:40 +01:00
Claudio Ortolina
45fd414f1b
Use friendly error messages in Last.fm callback
...
Closes #145
2026-03-30 14:42:20 +01:00
Claudio Ortolina
47ca6fa1d2
Add canonical_tailwind to get correct formatting for tailwind classes
2026-03-20 13:02:32 +00:00
Claudio Ortolina
2e3732e38b
Apply all necessary exclusions to sobelow findings
2026-03-07 18:37:24 +00:00
Claudio Ortolina
c87f946479
Skip Sobelow Traversal.SendDownload warning for archive controller
2026-03-07 18:21:57 +00:00
Claudio Ortolina
27e5f68fbb
Skip Sobelow XSS.ContentType warning for asset controller
2026-03-07 18:16:50 +00:00
Claudio Ortolina
eb8a00ab54
Replace String.to_integer with safe Integer.parse
...
Use Integer.parse/1 instead of String.to_integer/1 on user-supplied
and external API input to prevent ArgumentError crashes on non-numeric
values. Adds fallback defaults or nil returns at each call site.
2026-03-05 14:27:37 +00:00
Claudio Ortolina
316c1bcfe3
Account for broken asset requests
2025-11-12 10:53:20 +00:00
Claudio Ortolina
4566744253
Remove unnecessary pattern matches
2025-10-28 09:25:02 +00:00
Claudio Ortolina
59eb603b3f
Return more record information in the API
2025-10-25 11:52:50 +01:00
Claudio Ortolina
886f4815c8
Vacuum repo before returning backup file
2025-10-25 11:36:34 +01:00
Claudio Ortolina
f02564fa30
Add /api/collection/on_this_day endpoint
2025-10-24 20:06:23 +01:00
Claudio Ortolina
90b3fa1fdc
Refactor Records.Cover to Assets.Image
2025-09-20 07:42:38 +03:00
Claudio Ortolina
c5d856fdd8
Add Transform.new/1
2025-09-19 23:58:09 +03:00
Claudio Ortolina
8807fce15b
Don't assume webp accept is at the beginning
2025-09-18 21:45:40 +03:00
Claudio Ortolina
83151a125b
Remove unused artist functionality
2025-09-18 21:26:26 +03:00
Claudio Ortolina
e158345674
Change /covers to /assets
2025-09-18 21:26:16 +03:00
Claudio Ortolina
3428ad4537
Serve artist images from assets
2025-09-18 21:26:16 +03:00
Claudio Ortolina
aa72692eaf
Cache transformations
2025-09-17 16:54:47 +03:00
Claudio Ortolina
b0f4e18ef7
Fix API collection record cover URLs
2025-09-17 11:24:14 +03:00
Claudio Ortolina
0996b78c7b
Use Transforms to serve covers at the right size
2025-09-17 10:26:38 +03:00
Claudio Ortolina
dc77d337c0
Migrate from embedded covers to assets
2025-09-01 16:20:41 +03:00
Claudio Ortolina
bd12454884
Serve covers from assets
2025-09-01 14:44:17 +03:00
Claudio Ortolina
49c3a5cba2
Serve images from assets table
2025-09-01 13:46:32 +03:00
Claudio Ortolina
7869401445
Uniform shadow with rest of the app
2025-08-30 09:18:11 +03:00
Claudio Ortolina
acd34424f7
Use LiveToast instead of built-in flash helpers
...
So that they can stack and get dismissed automatically
2025-07-16 15:26:30 +01:00
Claudio Ortolina
1f716e3c1f
Use .button in login form
2025-05-12 17:16:24 +01:00
Claudio Ortolina
f5bc8a640d
Consolidate Fluxon usage via CoreComponents
...
With the exclusion of 'button' which is already in use an may need a
refactor
2025-05-12 10:43:13 +01:00
Claudio Ortolina
fddc2dcbf0
Link Last.fm account from tracks
2025-05-07 11:26:41 +01:00
Claudio Ortolina
9aecd4cc94
Fix last_fm_session_key secret name
2025-05-07 09:03:47 +01:00
Claudio Ortolina
95f71519d3
Store Last.fm API key with encrypted secret
2025-05-06 15:18:14 +01:00
Claudio Ortolina
d5b29b20bb
Store last fm information into session (doesn't work yet)
2025-05-05 20:58:37 +01:00
Claudio Ortolina
7c547f2d80
Redirect to Last.fm and receive a token (unused)
2025-05-05 19:19:12 +01:00
Claudio Ortolina
e173925a2a
Use fluxon components for remaining inputs
2025-05-01 21:50:34 +01:00
Claudio Ortolina
3d3e758a7a
Add endpoint to display an artist image
2025-04-27 21:20:38 +01:00
Claudio Ortolina
eafedb13d6
refactor: use pipe operator in collection controller params
2025-04-07 19:35:49 +01:00
Claudio Ortolina
3d0eec3bff
Add /api/collection endpoint
2025-03-10 11:17:51 +00:00
Claudio Ortolina
b111558f07
Use a plug for Prometheus metrics
...
The plug is injected as early as possible in order to respond quickly,
without polluting logs.
2025-03-04 20:21:15 +00:00
Claudio Ortolina
7c6fe3c0d2
Mount metrics in application
...
Avoids pulling entire TelemetryMetricsPrometheus dependency.
2025-03-04 17:55:07 +00:00
Claudio Ortolina
545dd808b7
Address Tailwind deprecations and renames
2025-02-28 20:55:36 +00:00
Claudio Ortolina
f21729ac00
Cache covers for 1 year
2025-01-31 07:43:06 +00:00