diff --git a/README.md b/README.md index ea04580..67dc41c 100644 --- a/README.md +++ b/README.md @@ -8,11 +8,11 @@ I chose to rewrite the python [jellyfin-accounts](https://github.com/hrfee/jelly * 🧑 Invite based account creation: Sends invites to your friends or family, and let them choose their own username and password without relying on you. * Send invites via a link and/or email * Granular control over invites: Validity period as well as number of uses can be specified. - * Account defaults: Configure an example account to your liking, and its permissions, access rights and homescreen layout can be applied to all new users. + * Account profiles: Assign settings profiles to invites so new users have your predefined permissions, homescreen layout, etc. applied to their account on creation. * Password validation: Ensure users choose a strong password. * 🔗 Ombi Integration: Automatically creates Ombi accounts for new users using their email address and login details, and your own defined set of permissions. * Account management: Apply settings to your users individually or en masse, and delete users, optionally sending them an email notification with a reason. -* 📨 Email storage: Add your existing user's email addresses through the UI, and jfa-go will ask new users for them on account creation. +* 📨 Email storage: Add your existing users email addresses through the UI, and jfa-go will ask new users for them on account creation. * Email addresses can optionally be used instead of usernames * 🔑 Password resets: When user's forget their passwords and request a change in Jellyfin, jfa-go reads the PIN from the created file and sends it straight to the user via email. * Notifications: Get notified when someone creates an account, or an invite expires. @@ -76,6 +76,8 @@ Usage of ./jfa-go: alternate address to host web ui on. -port int alternate port to host web ui on. + -swagger + Enable swagger at /swagger/index.html ``` If you're switching from jellyfin-accounts, copy your existing `~/.jf-accounts` to: diff --git a/data/templates/admin.html b/data/templates/admin.html index 7fac4aa..3fdabc6 100644 --- a/data/templates/admin.html +++ b/data/templates/admin.html @@ -134,7 +134,10 @@ -
+
+ +
+
diff --git a/images/accounts.png b/images/accounts.png index 3ab4a59..dc26621 100644 Binary files a/images/accounts.png and b/images/accounts.png differ diff --git a/images/demo.gif b/images/demo.gif index 04632d3..6793691 100644 Binary files a/images/demo.gif and b/images/demo.gif differ diff --git a/images/invites.png b/images/invites.png index 91134f0..fef7590 100644 Binary files a/images/invites.png and b/images/invites.png differ diff --git a/main.go b/main.go index de03da7..cec6776 100644 --- a/main.go +++ b/main.go @@ -590,8 +590,12 @@ func flagPassed(name string) (found bool) { // @tag.name Other // @tag.description Things that dont fit elsewhere. -func main() { +func printVersion() { fmt.Print(aurora.Sprintf(aurora.Magenta("jfa-go version: %s (%s)\n"), aurora.BrightWhite(VERSION), aurora.White(COMMIT))) +} + +func main() { + printVersion() folder := "/tmp" if PLATFORM == "windows" { folder = os.Getenv("TEMP") @@ -631,7 +635,7 @@ func main() { RESTART = make(chan bool, 1) start(false, true) for { - fmt.Printf("jfa-go version: %s (%s)\n", VERSION, COMMIT) + printVersion() start(false, false) } } diff --git a/ts/accounts.ts b/ts/accounts.ts index 21df5c6..f81fa8c 100644 --- a/ts/accounts.ts +++ b/ts/accounts.ts @@ -263,14 +263,14 @@ function populateRadios(): void { Focus(document.getElementById('defaultsSourceSection')); (document.getElementById('defaultsSource')).value = 'profile'; Focus(document.getElementById('profileSelectBox')); - Unfocus(document.getElementById('defaultUserRadios')); + Unfocus(document.getElementById('defaultUserRadiosBox')); Unfocus(document.getElementById('newProfileBox')); document.getElementById('storeDefaults').onclick = (): void => storeDefaults(userIDs); userDefaultsModal.show(); }; (document.getElementById('defaultsSource')).addEventListener('change', function (): void { - const radios = document.getElementById('defaultUserRadios'); + const radios = document.getElementById('defaultUserRadiosBox'); const profileBox = document.getElementById('profileSelectBox'); if (this.value == 'profile') { Unfocus(radios); diff --git a/ts/settings.ts b/ts/settings.ts index 41fdc9c..e89b2fb 100644 --- a/ts/settings.ts +++ b/ts/settings.ts @@ -204,7 +204,7 @@ const createProfile = (): void => _get("/users", null, function (): void { (document.getElementById('storeDefaults') as HTMLButtonElement).onclick = storeProfile; Focus(document.getElementById('newProfileBox')); (document.getElementById('newProfileName') as HTMLInputElement).value = ''; - Focus(document.getElementById('defaultUserRadios')); + Focus(document.getElementById('defaultUserRadiosBox')); userDefaultsModal.show(); } });