v0.5.0: "My Account", Referrals, Features, Fixes
Almost 2 years since the last tagged release, so this one contains a lot. Hopefully debugged a bit better than 0.4.0.
If anything looks wrong on the page after updating, force refresh your browser (Ctrl-Shift-R
/Cmd-Shift-R
).
Major
- "My Account" Page: Your users can visit their page to see/edit their contact details, their account expiry time, send referrals, and reset their password. See README for screenshots. (ef5d89f)
- Can be customized with Markdown messages on the page and the login screen in settings.
- Referrals: Special invite codes given to users (enabled per-user, or per-profile) to send to their friends/family. (463fe97)
- User accesses the link via the user page
- Referral "Templates" are generated from normal invites: Create one with your choice of settings (e.g. Limit to 5 uses), then create a template out of it on the accounts tab, or in the "User Profiles" page in settings.
- Account Unlinking: Discord/Telegram/Matrix can be unlinked from accounts by clicking the cog icon. (775ebd3)
- Discord "@" handles: The new "@username" format is now supported alongside the old "user#1234" format. (48403ce)
- Search Filters: Click the "Filters" button on the accounts tab to see available filters. Clicking will add a filter to the search box, and position your cursor for typing if the filter you selected requires it (i.e. Match Text). (115f5ae)
- Boolean Yes/No, String matching, and fuzzy Date comparison are available on all applicable table columns.
- Account Sorting: Click on a column header on the accounts page (i.e. "Username") to sort the list by it, click again to reverse it. (115f5ae)
- Database Migration: Instead of the mess of JSON files, Badger DB is used alongside Badgerhold to store data. Migration is done automatically, and the database is written in Go so no external dependencies are required. If something goes wrong, create a Github Issue.
- Fixed Windows Logging: Was an issue for a long time, the cause has finally been found and fixed. (49c7d83)
Minor
- UI Changes: Hanken Grotesk is now the main font, and lots of small adjustments have been made to the UI. Also, light mode has been fixed.
- reCAPTCHA: The built-in CAPTCHA can be a little annoying, so Google reCAPTCHA can now be used instead. See the wiki page for info on how to set it up. (4014e93)
- Require Unique: Options to require unique ID/address for Email, Discord, Telegram & Matrix.
- Form auto-redirect: Option to redirect user to Jellyfin (or other given URL) on signup.
- Errors are reported on the setup page when applying settings if any occur. (cebde9d)
- Build Time & Identity (if provided, e.g.
buildrone
) included on about page - Various CSS z-index issues fixed.
- Fixed CLI help output often not showing (456c99d)
- Fixed Restarts (When applying settings or pressing the button) causing issues with password resets (ad40d7d)
- Logs on the crash page now have color (73202e1)
- Translations from many people, can't list them all here, but thank you everyone.
Small Fixes
- Fix "Contact through" cog not showing up in some situations (ac25c9c), and other contact issues.
- Fix success page after email confirmation having no CSS (895dcf5)
- Various Updater fixes, should be more reliable now.
- Lots more
Meta Stuff
- Use latest version of Go, and many other dependencies (node stuff mostly, dependabot is annoying)
- Added note type to config-base.json format: shown as an
<aside>
in the UI. - Added two scripts:
- langmover: Moves things around in lang files using a template file for the target. This was needed for the user page, as many Admin strings were re-used.
- account-gen: Generates bogus accounts on Jellyfin with varied attributes, useful for populating screenshots and testing things like performance.
Changelog
-
775ebd3 Accounts: Unlink Telegram/Discord/Matrix through cog
-
daebfec Added translation using Weblate (Arabic)
-
08c8534 Added translation using Weblate (Arabic)
-
e0cd4ed Added translation using Weblate (Chinese (Traditional))
-
99e5245 Added translation using Weblate (Chinese (Traditional))
-
9f3269b Added translation using Weblate (Chinese (Traditional))
-
295343b Added translation using Weblate (Chinese (Traditional))
-
540b8d7 Added translation using Weblate (Chinese (Traditional))
-
c37735f Added translation using Weblate (German (Low))
-
165abc7 Added translation using Weblate (German (Low))
-
ef5a0c3 Added translation using Weblate (Hungarian)
-
8cdf87d Added translation using Weblate (Italian)
-
6490c67 Added translation using Weblate (Italian)
-
bb8c450 Added translation using Weblate (Polish)
-
681038c Added translation using Weblate (Polish)
-
3a8540a Added translation using Weblate (Polish)
-
442bcf7 Added translation using Weblate (Polish)
-
34df600 Added translation using Weblate (Polish)
-
d975766 Added translation using Weblate (Romanian)
-
44bb1e6 Added translation using Weblate (Romanian)
-
6f69f3b Added translation using Weblate (Romanian)
-
ef3fdb7 Added translation using Weblate (Slovenian)
-
92fda34 Added translation using Weblate (Slovenian)
-
0bf6c25 Added translation using Weblate (Slovenian)
-
9eb30ff Added translation using Weblate (Slovenian)
-
5d289ce Admin: auto enable contact when an email is added
-
e2e675e Fix Chinese translation errors
-
2722e84 Invites: unique email/ID requirement
-
f1b7ef3 Makefile: GOESBUIILD changes
-
ef5d89f Merge "My Account"
-
0946b3a Merge Database Migration
-
463fe97 Merge Referrals
-
115f5ae Merge accounts sort/filter
-
de6bc02 Merge branch 'main' of github.com:hrfee/jfa-go
-
bedd2bb README changes
-
504c755 README: Mention referrals
-
d800b97 README: add note about project status
-
ed4dcba README: new images, remove GIF
-
2161d1a Translated using Weblate (Arabic)
-
8760152 Translated using Weblate (Arabic)
-
2dc234a Translated using Weblate (Arabic)
-
d6df3b9 Translated using Weblate (Chinese (Simplified))
-
89b9f0a Translated using Weblate (Chinese (Simplified))
-
d1185d0 Translated using Weblate (Chinese (Simplified))
-
b1e8bc4 Translated using Weblate (Chinese (Simplified))
-
c1f7b66 Translated using Weblate (Chinese (Simplified))
-
887f1f7 Translated using Weblate (Chinese (Simplified))
-
cb0d4e8 Translated using Weblate (Chinese (Traditional))
-
35ed4e2 Translated using Weblate (Chinese (Traditional))
-
5ee7bdc Translated using Weblate (Chinese (Traditional))
-
cb249b3 Translated using Weblate (Chinese (Traditional))
-
a5faf06 Translated using Weblate (Chinese (Traditional))
-
90d4681 Translated using Weblate (Danish)
-
d13981b Translated using Weblate (Danish)
-
ce22863 Translated using Weblate (Danish)
-
7826fdf Translated using Weblate (Dutch)
-
aa07ff1 Translated using Weblate (Dutch)
-
85c9319 Translated using Weblate (Dutch)
-
3fea051 Translated using Weblate (Dutch)
-
5b7060c Translated using Weblate (English (United Kingdom))
-
7b5f5ab Translated using Weblate (English (United Kingdom))
-
7979030 Translated using Weblate (English (United Kingdom))
-
b531ec9 Translated using Weblate (English (United Kingdom))
-
bbcba00 Translated using Weblate (English (United Kingdom))
-
0b5e93f Translated using Weblate (French)
-
cab099d Translated using Weblate (French)
-
2e39a5e Translated using Weblate (French)
-
e81411c Translated using Weblate (German)
-
f8d98fb Translated using Weblate (German)
-
531d4aa Translated using Weblate (German)
-
f874563 Translated using Weblate (German)
-
6cdae16 Translated using Weblate (German)
-
728152a Translated using Weblate (German)
-
65a0c6c Translated using Weblate (German)
-
36d0550 Translated using Weblate (German)
-
92aee99 Translated using Weblate (German)
-
f35132e Translated using Weblate (German)
-
8901480 Translated using Weblate (Hungarian)
-
045f9ef Translated using Weblate (Indonesian)
-
abc1357 Translated using Weblate (Indonesian)
-
89f11ab Translated using Weblate (Italian)
-
311b64a Translated using Weblate (Italian)
-
9c68a79 Translated using Weblate (Italian)
-
aeb8548 Translated using Weblate (Polish)
-
2c31032 Translated using Weblate (Polish)
-
4f5fe67 Translated using Weblate (Polish)
-
37fa934 Translated using Weblate (Polish)
-
1f0c641 Translated using Weblate (Polish)
-
58e61e5 Translated using Weblate (Portuguese (Brazil))
-
8032fa0 Translated using Weblate (Portuguese (Brazil))
-
b848faa Translated using Weblate (Portuguese (Brazil))
-
ea04f53 Translated using Weblate (Portuguese (Brazil))
-
aceb98b Translated using Weblate (Portuguese (Brazil))
-
8c405b2 Translated using Weblate (Romanian)
-
53ba09a Translated using Weblate (Romanian)
-
048f4bd Translated using Weblate (Romanian)
-
d201644 Translated using Weblate (Slovenian)
-
91f8979 Translated using Weblate (Slovenian)
-
982dd00 Translated using Weblate (Slovenian)
-
2d1a473 Translated using Weblate (Slovenian)
-
47f7987 Translated using Weblate (Spanish)
-
2cdef91 Translated using Weblate (Spanish)
-
23223f3 Translated using Weblate (Spanish)
-
6564df8 about: fix donation buttons in dark mode
-
ac25c9c accounts: Show "contact through" cog when only email is given"
-
f13c0d7 accounts: ability to sort by columns
-
baf5e6a accounts: add dropdown arrow on "Announce" button
-
6ddd09f accounts: add header to "actions" and "search options"
-
bc4015a accounts: add indicator of sorted column at top of list
-
76bb950 accounts: add list of available filters, fix deletion of existing date filters
-
7d9555f accounts: add referrals to search queries
-
db21131 accounts: allow disabling of referrals for users
-
468b2f3 accounts: descriptive error when no template found
-
c187b94 accounts: display "Contact through" above container
-
ff62f88 accounts: filter by date, with =, <, >
-
90c4334 accounts: filter by string field, general search
-
9cef626 accounts: filter dropdown appears over announce one
-
4ea2dfd accounts: fix announcements preview window
-
dc3f166 accounts: fix filter button appearing over lang dropdown
-
d2253ff accounts: fix filter card height
-
4607a30 accounts: fix filter card overlap
-
708d382 accounts: fix hiding of search options header for default sort
-
b544931 accounts: fix id filtering, make string translatable
-
850bb8f accounts: fix modify user card layout
-
6f452c6 accounts: fix search bugs, adjust top bar layout
-
f24ea4a accounts: fix sizing of sorting by button
-
bf12016 accounts: make filter names translatable
-
8da95ed accounts: make sort-by card height = filter card height
-
ddc560e accounts: move filter button, add clear search
-
423fc4a accounts: non-case sensitive search
-
8ac3bb9 accounts: show list row of search filters, click to remove
-
8207a75 accounts: sort by referrals
-
8a37663 accounts: start advanced search filter support
-
eb85ee4 add option to auto redirect to jellyfin (or given link)
-
9e7914e add translation from Weblate (Arabic)
-
6f61d22 add translation from Weblate (Chinese (Traditional))
-
464fabc add translation from Weblate (Chinese (Traditional))
-
255640a add translation from Weblate (Polish)
-
5e41de8 add translation from Weblate (Polish)
-
88bf4f9 add translation from Weblate (Romanian)
-
5bb7a7d add translation from Weblate (Slovenian)
-
b0ee05f add translation from Weblate (Vietnamese)
-
0c102f5 added checked to admin only
-
54fde33 admin: a little more refactoring
-
a13a72c admin: fix logout when url base is used
-
65f402f admin: hide my account button when disabled
-
456c99d args: fix help not usually showing
-
d688dd0 args: respect other args when start/stop/daemon are used
-
81372d6 auth: fix "ok" issue
-
3e034c8 auth: provide error message if account is disabled
-
918f881 auth: slight refactor, setup user auth
-
e7d4b50 build: cleanup reprepro incoming after processing
-
e1292a0 build: dont install swag if already present
-
b7b3aa1 build: fix goreleaser, include optional builder name
-
fec9776 build: fix up goreleaser
-
f729606 build: include debug symbols & sourcemaps in unstable builds
-
a0f1cd5 captcha: fix missing images
-
07564bb captcha: recaptcha respects dark mode
-
753f5fc compile_mjml: use multiprocessing instead of thread
-
b5c80e9 config: make sure recaptcha is hidden when disabled
-
73202e1 crash: render ANSI colors on crash page
-
5a80145 css: add notification animation
-
46f1bc2 css: fix font error
-
27ef7ce css: revert global change to absolute position for dropdowns
-
4a28ea7 daemon: fix bug wiping out contact details
-
0a82f88 daemon: fix bug wiping out contact details
-
bb75bfd db: deprecate customEmails/userPage
-
a470d77 db: fix contact method cleaning daemons
-
e9f9d9d db: mark migration as completed when it's done
-
3bb9272 db: mark profile store as deprecated
-
63948a6 db: migrate invites, user expiry
-
a735e4f db: migrate user profiles
-
ea0598e db: move legacy data loading out of main/config
-
e1c215b db: remove remaining storage.loadX calls
-
28c3d9d db: use db key to store migration status
-
fca370b discord: hide "Join Server" text when invite not provided
-
765a749 discord: modularize user-facing code
-
68aedf0 discord: pad, underline invite link
-
48403ce discord: proper support for discriminator-less
-
094f7ce discord: use placeholder if guild icon not available
-
49c873c dont ignore esbuild errors
-
d355b31 fix GOESBUILD for newer go versions
-
ad40d7d fix bugs with restarts/interrupts
-
04329bf fix issue with light mode colors
-
49c7d83 fix logging and crash reports on Windows
-
895dcf5 fix missing create-success css
-
6efd28d fix translation conflict
-
f50596c fixed setExpiry()
-
65c2722 font: switch to hanken grotesk
-
7aaafb9 form: actually link to the my account page
-
db97c3b form: add notice about userpage on success modal, userpage title
-
bfeab36 form: change contact-via radios to checks
-
ebacfd4 form: fix captcha, matrix, telegram
-
8113f79 form: fix confirmation success page css
-
bf98193 form: fix header alignment
-
d8d478a form: move referral info message to aside, change wording
-
14c18bd form: rework email confirmation
-
0674e04 go module update/tidy
-
b13fe7f html: move login modal to own file
-
8d6af53 images: fix main banner
-
46109d1 images: one more try
-
8d3bd52 images: use hanken grotesk in banners
-
f7d931b images: use non-svgo-ed banner
-
dae0ad1 invites: "User Label" 2/2
-
7c76b58 invites: add "User Label" 1/2
-
2fc2f1d lang: add patchable notifications to common
-
6b3fc3d lang: correct language names
-
7caa5c5 lang: fix the usual on slovenian
-
96c62f5 langmover: rewrite whole directory when using --extract
-
b8cc75c login: modularize frontend code
-
200dc1c lowercase lang
-
a8daa2c makefile changes
-
96c51af matrix: modularize
-
1fa92f7 merge captcha changes
-
9bcbffd merge lang changes back in
-
e4a7172 messages: assign tokens to jf users on userpage
-
3747eaa messages: refactor dc/tg, fix tg
-
2cb72e1 module update, add notice to site
-
655dc88 node: update deps
-
b17d842 profiles: fix application
-
9c84fb5 profiles: fully deprecate old system
-
4496e1d pwr: ensure internal pwr pin is deleted after use
-
f88f71d pwreset: Stop daemon on restart, dont fail if json is malformed
-
c0f2409 readme/site: make project status message less pessimistic
-
9c2f27b referrals: 1/2 generation routes, display route, partial frontend
-
729552a referrals: Show enabled status on account list
-
0b830e9 referrals: enable for new users from profile
-
9e5034e referrals: enable referral for users & profiles
-
c2f835c referrals: show data on enable referral for user modal
-
41c092f referrals: show referrer username on form
-
cdc8f9a referrals: unlink/disable referrals for profile
-
8b52330 remove unused nightwind dep
-
12db53d reorganise api, add "Connection refused" error in setup
-
a1af6e3 scripts: add langmover
-
0e241f5 scripts: add script to generate fake accounts
-
ebdad3f scripts: fix langmover for non-ascii chars
-
920161b settings: add "note" type, shows as card
-
2c48ce0 settings: rename "User Page"
-
3fa4b01 setup: add user page
-
53742e5 setup: encourage user to browse settings for new features
-
cebde9d setup: report errors when saving config
-
e4f03fa setup: report panic errors to user
-
4014e93 signup: add reCAPTCHA
-
d56f321 site changes
-
6bab805 site: fix modals
-
47d00d1 site: properly fix modals
-
cc3871a site: update node deps
-
f779f03 storage: Use familiar api for invite access
-
833be68 storage: start db migration (badger(hold))
-
68004e1 storage: user set/get methods for contact method access
-
fcedea1 telegram: modularize, add to userpage
-
f81224a translation from Weblate (Arabic)
-
fdb43b2 translation from Weblate (Arabic)
-
26fc6b7 translation from Weblate (Chinese (Simplified))
-
46da6d0 translation from Weblate (Chinese (Simplified))
-
e3a33d1 translation from Weblate (Chinese (Simplified))
-
bb1e3a2 translation from Weblate (Chinese (Traditional))
-
b9a3ed1 translation from Weblate (Chinese (Traditional))
-
855fdee translation from Weblate (Danish)
-
b197c67 translation from Weblate (Danish)
-
3de3dd4 translation from Weblate (Dutch)
-
1105605 translation from Weblate (Dutch)
-
11c45a6 translation from Weblate (English (United Kingdom))
-
11d8b90 translation from Weblate (English (United Kingdom))
-
0c7187d translation from Weblate (English)
-
958b824 translation from Weblate (French)
-
6e2ba78 translation from Weblate (French)
-
f31e9c0 translation from Weblate (German)
-
63e6f3a translation from Weblate (German)
-
bfafbad translation from Weblate (German)
-
e73715f translation from Weblate (German)
-
09d22a9 translation from Weblate (German)
-
4435fea translation from Weblate (German)
-
5b24728 translation from Weblate (German)
-
0323b27 translation from Weblate (Hungarian)
-
5694f30 translation from Weblate (Hungarian)
-
3ba5d1f translation from Weblate (Hungarian)
-
a30469f translation from Weblate (Indonesian)
-
18d619e translation from Weblate (Italian)
-
f45409e translation from Weblate (Polish)
-
53a8e6d translation from Weblate (Polish)
-
b91918b translation from Weblate (Portuguese (Brazil))
-
f07227e translation from Weblate (Portuguese (Brazil))
-
dc55959 translation from Weblate (Portuguese (Brazil))
-
156478b translation from Weblate (Portuguese (Brazil))
-
0d62c5e translation from Weblate (Romanian)
-
80bd4d1 translation from Weblate (Slovenian)
-
3515aee translation from Weblate (Spanish)
-
297ec33 translation from Weblate (Spanish)
-
f049973 translation from Weblate (Spanish)
-
413ea07 translation from Weblate (Spanish)
-
ad416b9 translation from Weblate (Spanish)
-
9160394 translation from Weblate (Vietnamese)
-
3d45db2 translation from Weblate (Vietnamese)
-
bb33c11 translation from Weblate (Vietnamese)
-
dc60e97 update license
-
3e52bee update node deps, fix resulting issues
-
9395165 updater: check build is ready
-
f083d6b updater: include build date, check against updates
-
4c3e310 use go install for swag in goreleaser
-
4c20250 userpage: actually sub {username}
-
4f298bb userpage: add "back to admin" button
-
99679a8 userpage: add customizable message on page
-
d509abd userpage: add matrix
-
12ce669 userpage: add password change card, validation, rearrange page
-
cf7983c userpage: add/edit discord
-
87b0ae6 userpage: adjust message row span depending on length
-
3b3f373 userpage: autofill username in pwr modal
-
609039b userpage: change email (+ confirmation)
-
b08527b userpage: cleanup referral code
-
00e6da5 userpage: cope with disabled contact methods
-
b546aeb userpage: don't wrap contact methods, ellipsise
-
03f1a3d userpage: expand contact card to fill height
-
cc4a97d userpage: fix card color in light mode
-
f5a1590 userpage: fix email change modal show/hide
-
311ecb7 userpage: generate & display referral links
-
4e7f720 userpage: hide bg on login, dont refresh page ever
-
97db4d7 userpage: implement change password functionality
-
7b9b0d8 userpage: implement login message card
-
726acb9 userpage: initial page
-
6adbba5 userpage: invalid refresh token on pw change
-
22c91be userpage: make pwr accept username too
-
f07c60a userpage: mention link reset requirement
-
757c3a8 userpage: move cards around
-
86daa70 userpage: password resets
-
761d8d1 userpage: refresh pin when contact changed > once
-
fc7ae0e userpage: respect 12h/24h choice
-
a22f032 userpage: show and allow modification of contact methods
-
5beeeb9 userpage: show expiry
-
e7f7dcb userpage: show placeholder message card for admins
-
75dc9d4 userpage: store refresh token separately
-
3ec3e96 userpage: time-pad pwr request for ambiguity
-
8e153cd userpage: unlink accounts
-
d3c5fea userpage: use form langfile, move login strings to common