Commit Graph
100 Commits
Author SHA1 Message Date
Harvey Tindall 331e7c13fa Makefile: share $(DATA) on internal/external, keep record of build flags
This means you could make precompile, then make INTERNAL=on then make
INTERNAL=off and each time it would re-generate the go files only since
the flags have changed.
2025-12-01 14:18:10 +00:00
Harvey Tindall 429538688c ci: pull tags for docker build
needed for CSSVERSION.
2025-12-01 13:24:28 +00:00
Harvey Tindall 70ee98f9f0 fix printf types
was causing builds to fail on ci.
2025-12-01 12:55:24 +00:00
Harvey Tindall 320e9cd9d0 mediabrowser: bump
imrpvoed UserNotFound error classification, no longer vulnerable to
random 404s from proxies or whatever (for Jellyfin only, not emby)
2025-12-01 12:43:40 +00:00
Harvey Tindall b525b03ef8 Merge branch 'main' of github.com:hrfee/jfa-go 2025-11-30 21:42:12 +00:00
Harvey Tindall 641669873d setup: mark external URL required
this should really be given but things'll probably work without it.
2025-11-30 21:40:59 +00:00
Harvey Tindall fb1b673dee settings: add "tasks" button (advanced)
added a GET /tasks route to list tasks with a description (untranslated,
but this is mostly a dev feature anyway). Loaded in a modal by enabling
advanced settings and pressing the Tasks button at the top (where logs,
backups, restart are). Also added some icons in settings, and removed
some redundant "flex flex-row"s on buttons and reduced the spacing in
those with icons to gap-1.
2025-11-29 15:43:06 +00:00
Harvey Tindall 598a389e3d jellyseerr: fix extremely long import, run only once
cache was being invalidated for every user, and on my 5000 user test
instance, this sweated jellyseerr and my computer (audibly). Also, since
this only needs to realistically run once, a flag is set in the database
to indicate it's been done, and unset once the feature is disabled.
It'll only run on boot if the flag is unset, or if triggered by the
/tasks route. Will likely add manual trigger buttons on the web as well.
2025-11-29 14:13:34 +00:00
Harvey Tindall 1a0e32504f accounts: hide js/ombi checks when not enabled correctly on modify
settings
2025-11-28 20:52:37 +00:00
Harvey Tindall cbff3085fa profiles: "add jellyseerr" checkbox on profile creation
makes things clearer to new users. Fixes #438.
2025-11-28 20:37:45 +00:00
Harvey Tindall 0ecacc6064 tasks: add /tasks/jellyseerr, document
now live in tasks.go and have actual API documentation.
/tasks/jellyseerr triggers account import.
2025-11-28 17:26:27 +00:00
Harvey Tindall f36a32773a jellyseerr: fix background daemon auto import of telegram
ChatID fix was done in the TPS implementation but not in the daemon.
2025-11-28 17:10:38 +00:00
Harvey Tindall 58a3fe1f72 jellyseerr: don't attempt to apply profile if disabled
fixes #441
2025-11-28 16:44:03 +00:00
Harvey Tindall 4d58fc5f88 telegram: fix linking on sign-up
fixes #440.
2025-11-28 16:34:39 +00:00
Harvey Tindall 7d947015d3 pwr: allow jellyfin pwrs when not using email
switched if !emailEnabled { return } to if !messagesEnabled { return }.
Fixes #439.
2025-11-28 16:21:00 +00:00
Harvey Tindall 77d2ad3b6b profiles: add ability to directly edit profile JSON
allows for customizing small things, like changing admin status.
2025-11-28 15:13:46 +00:00
Harvey Tindall f83695190d build: use most recent tag as cssversion
the value is fixed in html files though, hopefully this will the light
the fire under me to make sure I keep changing the version with updates.
2025-11-28 12:36:49 +00:00
Harvey Tindall 815721adb2 profiles: add routes for viewing/modifying
most of Profile struct is now in ProfileDTO (which is embedded in the
former), admin can pull it from /profiles/raw/{name} GET, and replace it
with PUT. Will make a ui for this.
2025-11-28 12:06:17 +00:00
Harvey Tindall 836974e1b2 scripts: stop using gopkg.in/yaml
used a different library in scripts/yaml, forgot to in scripts/ini and
main.go
2025-11-27 20:38:16 +00:00
Harvey Tindall 96983d70c8 ci: fix stable, add gh token for publishing
haven't done a stable with woodpecker, I hope it works!
2025-11-27 20:31:56 +00:00
Harvey Tindall 9400a5bc66 update LICENSE date 2025-11-27 20:19:59 +00:00
Harvey Tindall 033319af29 css: bump CSSVERSION
gonna set it to the version number of the software from now on, i think.
2025-11-27 20:13:31 +00:00
Harvey Tindall 787d0e7b4c config: rename some sections
removing redundant words from section title for those now in groups.
2025-11-27 19:50:32 +00:00
Harvey Tindall 1296992752 userpage: fix login saving, url rewriting on subpath
Fixes #437.
2025-11-27 18:10:28 +00:00
Harvey Tindall ab5a82858e userpage: fix back to admin button 2025-11-27 17:58:52 +00:00
Harvey Tindall 073772ad60 form: functional "collect on sign-up" setting
was added without functionality by accident in a7aa3fd. This commit adds
the functionality in. Probably some other fixes too.
2025-11-27 17:53:01 +00:00
Harvey Tindall d7e4431bd8 settings: more dependency fixes 2025-11-27 17:52:49 +00:00
Harvey Tindall 96ec12f2bd settings: hide groups if all children are hidden
only really affects the "Email" group when messages|enabled is false.
2025-11-27 16:36:26 +00:00
Harvey Tindall 85eea23d98 accounts: share telegram linking modal with other pages
the one on the admin page was a little messed up anyway. Not relevant to
the other linking modals, as the process is different (simpler) on the
admin page.
2025-11-27 10:50:18 +00:00
Harvey Tindall 51961d16ba jellyseerr: format telegram ChatID as string
didn't accept an integer.
2025-11-26 21:16:07 +00:00
Harvey Tindall d6d73e81d6 settings: fix (restart)required detection on save 2025-11-26 21:12:43 +00:00
Harvey Tindall 27a80734f9 ThirdPartyServices: SetContactMethods for setting, enable/disable
replace AddContactMethods with a more generalised SetContactMethods,
which can set (or leave alone) contact method addresses/names/ids and
set (or leave alone) contact preferences. A little awkward to use, but
works everywhere, and now a bunch of Jellyseerr integration features are
present for Ombi (which they should've been anyway).
2025-11-26 20:57:11 +00:00
Harvey Tindall 1d4ea7d0a0 jellyseerr: fix unlinking discord/telegram
was accidentally using gc.getString("jfId") instead of req.ID.
2025-11-26 18:13:49 +00:00
Harvey Tindall 6d2e517e82 api-users: trigger tps contact info link on admin newUser
only adds email, since that's all that's available.
2025-11-26 18:03:45 +00:00
Harvey Tindall 982d3ec4c9 jellyseerr: fix error message parsing
was overriding the err value and so the route that parsed the error
message never got hit.
2025-11-26 18:02:56 +00:00
Harvey Tindall 5e653c51f3 accounts: add "extend from previous expiry"
If the expiry time of an expired user is still in the activity log,
extending and re-enabling a user with this option checked will extend
the expiry from this time, rather than the current time. For #379, i
think this is basically what they wanted.
2025-11-26 15:40:02 +00:00
Harvey Tindall 875387166e settings: fix weirdness on mobile
the check and button's onclick were both firing occasionally, so added
check to button.onclick that the target isn't the check or it's icon, as
I did for the invite details toggle.
2025-11-25 21:04:12 +00:00
Harvey Tindall 909614c3e7 invites: add details expand transition
why not.
2025-11-25 20:49:24 +00:00
Harvey Tindall 3178ca7572 settings: remove badge note, add tooltips to them
change required and restart required badges to icons with tooltips, and
removed the note at the top of settings. As a result, the sidebar is
much thinner.
2025-11-25 17:13:43 +00:00
Harvey Tindall 442bdd2220 settings: leave groups opened/closed on advanced settings toggle 2025-11-25 15:04:24 +00:00
Harvey Tindall a680db92a7 settings: fix group indent
obviously groups don't need an increased margin value, they already have
a margin from the parent! Also increased it to ml-6.
2025-11-25 14:56:53 +00:00
Harvey Tindall 08c350d50b settings: fix search with groups
works now, as in searching for a group's name works, and seeing matches
within groups works.
2025-11-25 14:43:56 +00:00
Harvey Tindall fe20187b0c scripts: add "yaml" script
takes over the "Order" validation of scripts/ini, and also re-orders the
"Sections" section according to "Order". Used instead of copying
config-base.yaml into the executable's data.
2025-11-25 14:43:33 +00:00
Harvey Tindall 65a25a7e66 config: update wiki links
some were outdated.
2025-11-25 14:42:18 +00:00
Harvey Tindall 607d8e9566 settings: show updates at top if one available 2025-11-24 18:43:08 +00:00
Harvey Tindall 8f3b860cc7 settings/config: add root order and use on web, fix nesting and
animation

added an optional root "Order" field to the config. scripts/ini will
warn if you've used this and forgot to include any sections.

added more/most sections to a group now.

groups have their maxHeight set to 9999px once animation finishes, and
have it quickly set back to ~scrollHeight before they're animated
closed.
2025-11-24 18:31:35 +00:00
Harvey Tindall a3dc8b7e07 settings: render groups
a little off at the moment but works, groups show as accordions and can
be nested. Maybe add indentation, and probably show them first in the
list. Also make sure search works with them.
2025-11-24 15:19:20 +00:00
Harvey Tindall 6bfb345169 config add "Group" notion
a group contains an ordered list of settings sections and/or other
groups. Intended to be rendered as an accordion tree in the app. Has no
effect on INI structure.
2025-11-24 15:16:47 +00:00
Harvey Tindall 704157be00 bump api version 2025-11-24 11:49:26 +00:00
Harvey Tindall b1c578ccf4 mediabrowser: bump
also updated everything else.
2025-11-23 20:10:34 +00:00
Harvey Tindall 7c9f917114 swag: add new statistics tag, add filtered user count route 2025-11-23 16:55:23 +00:00
Harvey Tindall b5f28da452 updater: demote "tag empty" to debug log
the stable tag is usually empty because i rarely update it so it'd be
nice if this didn't show up so much for normal users. For #313, #329 and
more, probably.
2025-11-21 17:22:49 +00:00
Harvey Tindall 60ccc51232 settings: deprecate most custom file path settings 2025-10-21 17:32:05 +01:00
Harvey Tindall 1780aa567f Merge branch 'main' of github.com:hrfee/jfa-go 2025-10-21 17:15:52 +01:00
Harvey Tindall 6a8b21c5f2 mention 10.11.0 compatibility
seems to work, someone opened an issue but closed it right after also.
Release notes don't say anything alarming either.
2025-10-21 17:15:00 +01:00
Harvey TindallandGitHub fc4cd4cd27 Merge pull request #432 from mxkyb/fix-template-key
Adjust Template Key
2025-09-25 19:56:34 +01:00
Harvey Tindall d88194b9bd accounts: invalidate user cache in more/all places
using app.userSummary as a source of relevant storage places and things
to look for.
2025-09-01 21:28:56 +01:00
Harvey Tindall 6ebc7d18bf accounts: fix bool queries on (some) string fields
wasn't implemented for things like email on the server side.
also changed text mail variant's footers to all use {{ .footer }} like I
should have before.
2025-09-01 20:44:19 +01:00
Harvey Tindall 0fe574fbd9 discord: clarify "Invite channel" setting
mention it's the name you put there, not the ID.
2025-09-01 19:18:48 +01:00
Harvey Tindall c7ba9944f0 images: change banner font
use plus jakarta sans, the font used on the newer Jellyfin logo for the
banner and social images.
2025-09-01 18:30:16 +01:00
Harvey Tindall 8781e48601 email: change font, template common parts
Using the newer Jellyfin logo font for the header and hanken grotesk for the body.
Tried to redo emails with maizzle because using tailwind sounded nice, but getting it
to look like a17t would be more trouble than it's worth, since you can't
use CSS vars in emails and a17t uses them heavily. Instead, cleaned up
the mj-header a little and stored it in a separate file, and also the
header & footer, and changed the template vars with {{ .header }}  and
{{ .footer }} for all emails. Values are determined by
CustomContentInfo.Header/FooterText funcs. nil values are replaced at
program start by _runtimeValidator.

also, i beg of you don't try to do light/dark mode with mjml, you'll
want to die.
2025-09-01 15:31:28 +01:00
Harvey Tindall eb941794a8 ci: run tests
added precompile and test "steps".
2025-08-31 18:10:51 +01:00
Harvey Tindall 0783749e6e matrix: add log for matrix crypto store init
deleting the crypto DB resulted in InitMatrixCrypto taking ages, added a
Initing/Inited log pair around the function so it's obvious this is the
culprit if any one else faces the same thing.
2025-08-31 17:59:49 +01:00
Harvey Tindall 87c0f54a8d email_test: allow running with INTERNAL=on 2025-08-31 17:46:37 +01:00
Harvey Tindall febbe27a0d emails: fix conditionals not being cleared on editor load 2025-08-31 17:31:48 +01:00
Harvey Tindall e67f1bf1a9 emails: fix and confirm function of all emails
both custom and standard emails tested, quite a few fixes made,
including to an old bug with admin notifs.
2025-08-31 17:12:50 +01:00
Harvey Tindall 60dbfa2d1e messages: custom content described in customcontent.go, message tests
customcontent.go constains a structure with all the custom content,
methods for getting display names, subjects, etc., and a list of
variables, conditionals, and placeholder values. Tests for constructX
methods included in email_test.go, and all jfa-go tests can be run with
make INTERNAL=off test.
2025-08-30 14:21:26 +01:00
Harvey Tindall 0b43ad4ed5 template: passed var and conditional names don't include braces
pass []string{"username"}, rather than []string{"{username}"}. Tests
have been updated.
2025-08-23 14:59:04 +01:00
Harvey Tindall 94efe9f746 expiry: add "remind N days before"
new setting to send an email/message N days before a user is due to
expire. Multiple can be set.
2025-08-04 20:44:29 +01:00
Harvey Tindall 5fe0e0ab9f timer: add scheduler/timer with day precision
timer.go has a timer struct for scheduling things to happen once every n
days before or after a given time. Pass a string list of day deltas to
parse, a unit to parse these as (only 24/-24 hours really make sense),
then call Check() on the returned struct with your "since" time, and the
time a timer was last fired. If one goes off, store the time so you can
pass it in subsequent calls. To be used in the user daemon for "remind
every N days" functionality. Was initially gonna allow more precision
than days, but ran into problems, most likely from me overcomplicating
it and not wanting to store too much data. some tests also in
timer_test.go.
2025-08-04 16:08:15 +01:00
Harvey Tindall db1e812190 discord: retry auth/command register, do latter in bulk
re-use the auth retry options from the config for initial d.bot.Open and
for registering commands. The latetr is now done with the BulkOverwrite
    method, since it seems to work now. For #427.
2025-08-03 20:05:22 +01:00
Harvey Tindall aab8d6ed77 template: report errors/warnings
error field is now logged at all points of use.
2025-08-03 18:39:47 +01:00
Harvey Tindall 5d49a56d94 template: add tests, fix up easy holes
should cope with double-braced blocks now (treating them the same as
single-braced. templateEmail now returns an error, which should not be
seen as catastrophic, but reports likely mistakes.
2025-08-03 17:36:33 +01:00
Harvey Tindall 492d5715fe ts: fix setTimeout return type for new tsc 2025-07-20 13:53:48 +01:00
Harvey Tindall 0595224daa meta: update esbuild 2025-07-20 13:50:53 +01:00
Harvey Tindall 58098a45af meta: update deps
npm and easyproxy's go deps
2025-07-20 13:48:37 +01:00
Harvey Tindall a0bafadc39 site: modernise makefile
it's a proper one now.
2025-07-20 13:20:42 +01:00
Harvey Tindall 2190f482d1 user-d: dont bother attempting users w no contact 2025-07-20 12:41:27 +01:00
Harvey Tindall 024b692b8c Merge branch 'main' of github.com:hrfee/jfa-go 2025-07-20 12:38:55 +01:00
Harvey Tindall 6a5e97b788 user-d: patch holes in expiry mechanism
I hope so, at least. Saw a few areas where I wasn't sure something
couldn't break so I did some maybe redundant checks. For #419.
2025-07-20 12:37:26 +01:00
Harvey Tindall bdd14604d5 accounts: double click "select all" to load and select -all-
Clicking once will select all visible records, and show as
indeterminate. Clicking again will load all records, and select them all
once done.
2025-07-18 18:04:23 +01:00
Harvey TindallandGitHub 908e9f07c0 Merge pull request #420 from hrfee/dependabot/npm_and_yarn/multi-1083d179d6
build(deps): bump on-headers and morgan
2025-07-18 13:44:27 +01:00
Harvey Tindall 488ba7be38 userpage: use window.pages.MyAccount instead of
window.location.pathname

fixes #418 hopefully.
2025-07-18 13:23:25 +01:00
Harvey Tindall a0165f6f02 auth: strip port from domain if present
app.UseProxyHost being enabled means app.ExternalDomain sometimes
returns a domain/IP with a port attached. This is now removed, so the
refresh cookie is set correctly.
2025-07-18 12:59:39 +01:00
Harvey Tindall 010ce5ff7a build: downgrade swaggo
1.16.5 has a nil pointer dereferencing bug, reported by lots of other
people too.
2025-07-17 13:43:59 +01:00
Harvey Tindall bc4c63b998 ci: another amendment foor woodpecker 3.x 2025-07-16 21:58:09 +01:00
Harvey Tindall 537b45951e ci: update for woodpecker 3.x 2025-07-16 21:43:22 +01:00
Harvey Tindall a92f449e7f go: update deps; mediabrowser thread-safe cache
did a go get -u, and updated mediabrowser for a thread-safe user cache,
for #415.
2025-07-16 21:23:06 +01:00
Harvey Tindall bcb6346f81 form: allow relative redirect_url
EvaluateRelativePath will un-relative-ize a path if it is relative (has
a preceding /) in the same way as app.ExternalURI() roughly. Should fix #414.
2025-07-16 18:47:32 +01:00
Harvey Tindall 7cb66e26e5 http: add "Use reverse proxy host" option
added "Use reverse-proxy reported "Host" when possible" option, which
will prefer using the "Host" or "X-Forwarded-Host" values instead of
"External jfa-go URL" in the web app. To do so, app.ExternalDomain/URI
are now functions which take *gin.Context (the latter optionally). The
protocol for the request is determined from X-Forwarded-Proto(col), so
make sure your proxy includes it.

The wiki will have been updated to mention the new option.
2025-07-16 15:22:07 +01:00
Harvey Tindall 41ddf73e4f invites: emails -> messages, log when sendTo attempted when disabled
A user's lengthy debugging resulted in them figuring out "Invite
emails" being disabled stopped the "/inv" command from sending invites
on discord, which makes sense except the confusing setting name (now
renamed "Messages" in the UI), and the fact that no error was reported.
This setting being disabled is now logged to the console when it's
attempted through the admin page or discord. For #378.
2025-07-14 13:58:03 +01:00
Harvey Tindall 4f02c44e39 router: fix /accounts route in normal usage
mistake from previous commits, the route wasn't being assigned at all.
2025-05-28 12:39:46 +01:00
Harvey Tindall 3c87b78dd9 activity: add filtered count route
separated the search parts of ServerSearchReqDTO into
ServerFilterReqDTO, factored out part of GetActivities that made the
(filtering) query, which is then used in GetFilteredActivityCount with
db.Count.
2025-05-27 18:59:50 +01:00
Harvey Tindall eb619b6544 invites: fix /count routes
both now filter for IsReferral == true, and a typo in /used was fixed.
2025-05-27 18:48:46 +01:00
Harvey Tindall 79e8b24d7a args: add arg to disable api auth (for development!)
a long flag to type out, that requires debug to be enabled and results
in a prompt to confirm your action.
2025-05-27 18:45:43 +01:00
Harvey Tindall 80fd7c9842 invite: add /count/used route
counts the number of active invites which have been used.
2025-05-27 18:31:01 +01:00
Harvey Tindall 9409370984 invites: add /count route 2025-05-27 18:30:06 +01:00
Harvey Tindall 006fde502e api-users: GetUserCount with app.jf, not userCache
Makes no sense to generate the web user cache for this value.
2025-05-27 18:16:25 +01:00
Harvey Tindall c02cfffc9b router: fix /accounts collision again, gracefully fail for others
all routes are registered on the root of the host, and the "reverse
proxy subfolder". When using Reverse proxy subfolder "/accounts", and
the default URL Path for the Admin page of "/" (a.k.a. ""), a route
collision occurs that for some reason wasn't dealt with before. This is
avoided by checking before registering the second route, and a panic
recovery handler has been added telling the user off for using bad
subpaths if any others occur.
2025-05-27 17:53:39 +01:00
Harvey Tindall 688e941d64 router: implement ETags/If-None-Match based on build time
Essentially caching based on when the program was built.
2025-05-27 16:29:58 +01:00