Code Monkey home page Code Monkey logo

jfa-go's Introduction

jfa-go Build Status Docker Hub Translation status Docs/Wiki Discord

Downloads:

Project Status: Active-ish

Studies mean I can't work on this project a lot outside of breaks, however I hope i'll be able to fit in general support and things like bug fixes into my time. New features and such will likely come in short bursts throughout the year (if they do at all).

Does/Will it still work?

jfa-go currently works on Jellyfin 10.8.13, the latest version as of 26/12/23. I should be able to maintain compatability in the future, unless any big changes occur.

Alternatives

If you want a bit more of a guarantee of support, I've seen these projects mentioned although haven't tried them myself.

  • Wizarr focuses on invites, and also includes some Discord & Ombi integration.
  • Jellyseerr is a fork of Overseerr, which can manage users and mainly acts as an Ombi alternative.
  • Organizr doesn't focus on Jellyfin, but allows putting self-hosted services into "tabs" on a central page, and allows creating users, which lets one control who can access what.

jfa-go is a user management app for Jellyfin (and Emby as 2nd class) that provides invite-based account creation as well as other features that make one's instance much easier to manage.

Features

  • 🧑 Invite based account creation: Send 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, discord, telegram or matrix
    • Granular control over invites: Validity period as well as number of uses can be specified.
    • 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.
    • CAPTCHAs and contact method verificatoin can be enabled to avoid bots.
  • ⌛ User expiry: Specify a validity period, and new users accounts will be disabled/deleted after it. The period can be manually extended too.
  • 🔗 Ombi Integration: Automatically creates Ombi accounts for new users using their email address and login details, and your own defined set of permissions. See wiki for a warning on this one.
  • Account management: Bulk or individually; apply settings, delete, disable/enable, send messages and much more.
  • 📣 Announcements: Bulk message your users with announcements about your server.
  • Telegram/Discord/Matrix Integration: Verify users via a chat bot, and send Password Resets, Announcements, etc. through it.
  • "My Account" Page: Allows users to reset their password, manage contact details, view their account expiry date, and send referrals. Can be customized with markdown.
  • Referrals: Users can be given special invites to send to their friends and families, similar to some invite-only services like Bluesky.
  • 🔑 Password resets: When users forget their passwords and request a change in Jellyfin, jfa-go reads the PIN from the created file and sends it straight to them via email/telegram.
    • Can also be done through the "My Account" page if enabled.
  • Admin Notifications: Get notified when someone creates an account, or an invite expires.
  • 🌓 Customizations
    • Customize emails with variables and markdown
    • Specify contact and help messages to appear in emails and pages
    • Light and dark themes available

Interface

Invites tab Accounts creation My Account Page Accounts tab

Install

Note: TrayIcon builds include a tray icon to start/stop/restart, and an option to automatically start when you log-in to your computer. For Linux users, these builds depend on the libappindicator3-1/libappindicator-gtk3/libappindicator package for Debian/Ubuntu, Fedora, and Alpine respectively.

docker create \
             --name "jfa-go" \ # Whatever you want to name it
             -p 8056:8056 \
            # -p 8057:8057 if using tls
             -v /path/to/.config/jfa-go:/data \ # Path to wherever you want to store the config file and other data
             -v /path/to/jellyfin:/jf \ # Only needed for password resets through Jellyfin, ignore if not using or using Emby
             -v /etc/localtime:/etc/localtime:ro \ # Makes sure time is correct
             hrfee/jfa-go # hrfee/jfa-go:unstable for latest build from git
sudo apt-get update && sudo apt-get install curl apt-transport-https gnupg
curl https://apt.hrfee.dev/hrfee.pubkey.gpg | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/apt.hrfee.dev.gpg

# For stable releases
echo "deb https://apt.hrfee.dev trusty main" | sudo tee /etc/apt/sources.list.d/hrfee.list
# ------
# For unstable releases
echo "deb https://apt.hrfee.dev trusty-unstable main" | sudo tee /etc/apt/sources.list.d/hrfee.list
# ------

sudo apt-get update

# For servers
sudo apt-get install jfa-go
# ------
# For desktops/servers with GUI (has dependencies)
sudo apt-get install jfa-go-tray
# ------
Arch

Available on the AUR as:

Other platforms

Download precompiled binaries from:

unzip the jfa-go/jfa-go.exe executable to somewhere useful.

  • For *nix/macOS users, chmod +x jfa-go then place it somewhere in your PATH like /usr/bin.

Run the executable to start.

Build from source

If you're using docker, a Dockerfile is provided that builds from source.

Otherwise, full build instructions can be found here.

Usage

Simply run jfa-go to start the application. A setup wizard will start on localhost:8056 (or your own specified address). Upon completion, refresh the page.

Usage of jfa-go:
  start
	start jfa-go as a daemon and run in the background.
  stop
	stop a daemonized instance of jfa-go.
  systemd
	generate a systemd .service file.

  -config, -c string
    	alternate path to config file. (default "/home/hrfee/.config/jfa-go/config.ini")
  -data, -d string
    	alternate path to data directory. (default "/home/hrfee/.config/jfa-go")
  -debug
    	Enables debug logging.
  -help, -h
    	prints this message.
  -host string
    	alternate address to host web ui on.
  -port, -p int
    	alternate port to host web ui on.
  -pprof
    	Exposes pprof profiler on /debug/pprof.
  -restore string
    	path to database backup to restore.
  -swagger
    	Enable swagger at /swagger/index.html

Systemd

jfa-go does not run as a daemon by default. Run jfa-go systemd to create a systemd .service file in your current directory, which you can copy into ~/.config/systemd/user or somewhere else.

Contributing

See the wiki page.

Translation

Translation status

For translations, use the weblate instance here. You can login with github.

Sponsors

Big thanks to those who sponsor me. You can see them below:

jfa-go's People

Contributors

andremxmx avatar bgabor997 avatar big-op01 avatar brixik1 avatar clankjake avatar collateral127 avatar dornj avatar dragoprime avatar emisticg avatar hrfee avatar joecom7 avatar killianbe avatar ksam3lm avatar maltechx avatar marketos-damigos avatar mastercreeper66 avatar mezzovide avatar mlgz0rn avatar mossh avatar pitah81 avatar rigrig avatar roand0617 avatar synost avatar tacooc avatar tonomis avatar vaheed avatar violetleporid avatar virusperfect avatar woosade avatar xcqi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

jfa-go's Issues

Fresh install and bug when u try to delete user on jfa

Hi
It's always me ^^
Fresh install to unstable

when i want delete user in jfa i press delete and nothing working

error :

2020/11/02 18:14:38 [Recovery] 2020/11/02 - 18:14:38 panic recovered:
interface conversion: interface {} is nil, not string
/usr/local/go/src/runtime/iface.go:261 (0x40af6e)
	panicdottypeE: panic(&TypeAssertionError{iface, have, want, ""})
/opt/build/api.go:210 (0xb6f8d8)
/opt/build/api.go:417 (0xb7264c)
/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:161 (0x990e7a)
/opt/build/auth.go:92 (0xb7c9f7)
/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:161 (0x990e7a)
/go/pkg/mod/github.com/gin-gonic/[email protected]/recovery.go:83 (0x9a4b44)
/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:161 (0x990e7a)
/go/pkg/mod/github.com/gin-gonic/[email protected]/logger.go:241 (0x9a3c44)
/go/pkg/mod/github.com/gin-gonic/[email protected]/context.go:161 (0x990e7a)
/go/pkg/mod/github.com/gin-gonic/[email protected]/gin.go:409 (0x99ae99)
/go/pkg/mod/github.com/gin-gonic/[email protected]/gin.go:367 (0x99a58c)
/usr/local/go/src/net/http/server.go:2843 (0x719fc2)
	serverHandler.ServeHTTP: handler.ServeHTTP(rw, req)
/usr/local/go/src/net/http/server.go:1925 (0x7156cc)
	(*conn).serve: serverHandler{c.server}.ServeHTTP(w, w.req)
/usr/local/go/src/runtime/asm_amd64.s:1374 (0x46fcc0)
	goexit: BYTE	$0x90	// NOP) 

2nde : user's email not appear in jfa (work for ombi)

3th : user account in jfa not auto update when we create user, i need to restart docker for synch

if u need something i'm here, i can help u on discord if u want tester :)

Installation ubuntu

How to install in Ubuntu 20.4? It is very necessary, but I can not install. I copied the git, and what next?

Setting a baseurl for reverse proxy breaks login on both inside and outside network (404 error)

Read the FAQ first!

Describe the bug

As soon as a baseurl is set in the settings ( /accounts ), trying to login will lead to this error:

[GIN] GET(/accounts/token/login) => 404

Both connections from the local network or the outside are broken. No way to connect if baseurl is set up. So I can't use jfa-go with my nginx reverse proxy.

To Reproduce

Install jfa-go 0.3.0
Set a baseurl
It can no longer login

Logs

Logs from jfa-go in debug mode:

`[INFO] 18:56:06 Starting router @ 0.0.0.0:8056
[GIN/DEBUG] 18:56:41: GET(/) => 200 in 24.12524ms;
[GIN/DEBUG] 18:56:41: GET(/css/bundle.css) => 200 in 20.37937ms;
[GIN/DEBUG] 18:56:41: GET(/css/bundle.css) => 200 in 6.337037ms;
[GIN/DEBUG] 18:56:41: GET(/js/admin.js) => 200 in 6.832649ms;
[GIN/DEBUG] 18:56:41: GET(/css/remixicon.css) => 200 in 73.097222ms;
[GIN/DEBUG] 18:56:41: GET(/css/remixicon.css) => 200 in 23.07237ms;
[GIN/DEBUG] 18:56:42: GET(/banner.svg) => 200 in 544.13µs;
[GIN/DEBUG] 18:56:42: GET(/accounts/lang/admin) => 404 in 10.935278ms;
[GIN/DEBUG] 18:56:42: GET(/accounts/token/refresh) => 404 in 9.227796ms;
[GIN/DEBUG] 18:56:42: GET(/css/remixicon.woff2?t=1590207869815) => 200 in 21.925778ms;
[GIN/DEBUG] 18:56:42: GET(/accounts/apple-touch-icon.png) => 404 in 7.966611ms;
[GIN/DEBUG] 18:56:42: GET(/accounts/favicon-32x32.png) => 404 in 8.384926ms;

[GIN/DEBUG] 18:56:48: GET(/accounts/token/login) => 404 in 9.329556ms;
`
The 404 error reproduces at each login tries. It happen on both
[localip]:8056 ;
[localip]:8056/accounts ;
[servername]/accounts

Screenshot:
image

Configuration

Nothing special configured. Did initial setup, connection to Jellyfin successful according the test in initial setup (my Jellyfin is hosted on the same server), and restarted the pi.

Platform/Version

Jfa-go 0.3.0 on Raspberry Pi (armv6) , no Docker.

New UI

image

Hello!

Really nice work done on the web! well done!
2 small questions, one what is the purple bar for?
Can the red crosses be updated in green as soon as the password meets the characteristics, a status in real time?

Thanks man :) !

unable to run jfa-go

tried to run the program after few days but got below mentioned error, kindly take a look and revert back with solution

�[35mjfa-go version: �[0;97m0.0.0�[0;35m (�[0;37mfa96f21�[0;35m)
�[0mSocket: C:\Users\MrKhan\AppData\Local\Temp\jfa-go.sock
[INFO] 19:52:23 �[35m

WARNING: Don't use debug mode in production, as it exposes pprof on the network.

�[0m
[DEBUG] 19:52:23 main.go:359: Loaded config file "C:\Users\MrKhan\AppData\Roaming\jfa-go\config.ini"
[DEBUG] 19:52:23 main.go:369: Loading storage
[DEBUG] 19:52:23 main.go:426: Using css file "bs4-jf.css"
[DEBUG] 19:52:23 main.go:441: Using Jellyfin for authentication
2020/11/21 19:52:23 Failed to authenticate with Jellyfin @ http://localhost:8096: Timed out
[ERROR] 19:52:23 main.go:458: Failed to authenticate with Jellyfin @ http://localhost:8096: Code 0

[Feature Request] Invite-specific User Default

I'm sorry for opening another feature request after my previous one.

As the title says, possibility to set a New User Defaults to specific invite.

By default it will use the New User Defaults in settings.


Also, I'll include this here. There seems to be a bug in User creation notification. Ticking it shows this in logs:

Bug 1

[DEBUG] 15:13:52 api.go:526: qrMiurBYiFPgTN7Mggtw3H: Set "notify-creation" to false for [email protected]

Sometimes ticking User creation gives this:

Bug 2

[DEBUG] 15:15:50 api.go:487: qrMiurBYiFPgTN7Mggtw3H: Notification settings change requested
[DEBUG] 15:15:50 api.go:521: qrMiurBYiFPgTN7Mggtw3H: Set "notify-expiry" to false for XXXXX
[DEBUG] 15:15:50 api.go:526: qrMiurBYiFPgTN7Mggtw3H: Set "notify-creation" to false for XXXXX

To reproduce Bug 2:
Turn on Expiry first then after that turn on User creation

Cannot send emails

Describe the bug

Emails fail to send

To Reproduce

  1. Configure SMTP
  2. Send invite

Logs

[DEBUG] 12:45:51 api.go:487: Generating new invite
[DEBUG] 12:45:51 api.go:513: kBQJ9nEqYkmX6XZL7wth8n: Sending invite email
smtp.gmail.com:465
[ERROR] 12:45:52 api.go:522: kBQJ9nEqYkmX6XZL7wth8n: Failed to send to [email protected]
[DEBUG] 12:45:52 api.go:523: kBQJ9nEqYkmX6XZL7wth8n: Error: 534 5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbv
5.7.14 cpOxZA4Xp5FTmcIhCYBGFcoV98-NZ5cAxBcX_Sa13eoSGf0_2mV_1HSgniJ4Ob0HwdcAf
5.7.14 dHkwVoJVrQPlDTYp6KsLJBh_JO6DVNcsGcObk0t9yxXFbidzQaEGrLUQPlgeN5I0>
5.7.14 Please log in via your web browser and then try again.
5.7.14  Learn more at
5.7.14  https://support.google.com/mail/answer/78754 r23sm185553ejd.56 - gsmtp

Configuration

Email method: SMTP
Sent from (address): [email protected]
Sent from (name): Jellyfin
Username: n/a
Encryption Method: ssl_tls
Server address: smtp.gmail.com
Port: 465
Password: ************

Platform/Version

Linux v0.2.7

Invite emails

I can not get the "Invite emails" feature to work. I have setup smtp to connect with my gmail. At first i tried ssl_tsl but i was receiving a "failed to send error".
Changing the port and method to "starttls" cleared the error but i am not receiving any invitation email.

`
[INFO] 08:47:36 Token requested (login attempt)
[GIN] GET(/getToken) => 200
[GIN] GET(/getInvites) => 200
[INFO] 08:48:35 ******************: Sent invite email to [email protected]
[GIN] POST(/generateInvite) => 200
[GIN] GET(/getInvites) => 200

`

Also no path is undefined when attempting to "reset pw"
pwreset

NEW FEATURES : Verification password

Hi,
here is an idea to embellish jfa-go, add a written password verification. Too many users are wrong, so if checking the match no more problem
:)
have a nice day

email confirmation process returned error

email confirmation process returned error, and not redirected to the jf login page, but user is created and welcome email also sent.

[log]
[DEBUG] 19:47:19 api.go:586: Generating new invite
[GIN/DEBUG] 19:47:19: POST(/invites) => 200 in 10.9988ms;
[DEBUG] 19:47:19 auth.go:89: Auth succeeded
[DEBUG] 19:47:19 api.go:788: Invites requested
[GIN/DEBUG] 19:47:19: GET(/invites) => 200 in 1.9984ms;
[DEBUG] 19:47:27 api.go:478: HXjQWeiFv4iJYfhmvDjiXk: New user attempt
[DEBUG] 19:47:27 api.go:360: HXjQWeiFv4iJYfhmvDjiXk: Email confirmation required
[INFO] 19:47:29 HXjQWeiFv4iJYfhmvDjiXk: Sent user confirmation email to [email protected]
[GIN/DEBUG] 19:47:29: POST(/newUser) => 401 in 2.1991211s;
[DEBUG] 19:47:59 daemon.go:37: Daemon: Checking invites
[DEBUG] 19:48:59 daemon.go:37: Daemon: Checking invites
[DEBUG] 19:49:44 api.go:411: Applying settings from profile "default"
[DEBUG] 19:49:44 api.go:417: Applying policy from profile "default"
[DEBUG] 19:49:44 api.go:425: Applying homescreen from profile "default"
[DEBUG] 19:49:44 api.go:454: [email protected]: Sending welcome email to [email protected]
[INFO] 19:49:46 [email protected]: Sent welcome email to [email protected]
[GIN/DEBUG] 19:49:46: GET(/invite/HXjQWeiFv4iJYfhmvDjiXk?key=xxx => 200 in 2.6689999s;
[INFO] 19:49:48 HXjQWeiFv4iJYfhmvDjiXk: New user failed: User [email protected] already exists
[GIN-debug] [WARNING] Headers were already written. Wanted to override status code 401 with 404
[Request Header]
POST /accounts/newUser HTTP/2
Host: test.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0
Accept: */*
Accept-Language: en,id;q=0.7,en-US;q=0.3
Accept-Encoding: gzip, deflate, br
Authorization: Bearer undefined
Content-Type: application/json; charset=UTF-8
Content-Length: 124
Origin: https://test.com
Connection: keep-alive
Referer: https://test.com/accounts/invite/L5oc37skvhq8WszXio7VW5
Cookie: __cfduid=xxx; refresh=xxx
TE: Trailers
[Response Header]
HTTP/2 401 Unauthorized
date: Wed, 10 Feb 2021 12:41:09 GMT
server: Apache/2.4.46 (Win64) LibreSSL/3.2.3
content-type: application/json; charset=utf-8
content-length: 38
X-Firefox-Spdy: h2

ISSUE INSTALL

Hi there,

When I run:
#go run setup.go

returns
#command-line-arguments
./setup.go:13:12: undefined: appContext
./setup.go:16:15: undefined: newJellyfin

Could you help me?

Add custom listen path

Hi @hrfee !
Thanks for your work it's exactly what I needed 😄

Just like in Ombi, Sonarr etc, I would like to have jfa-go listen on a custom path, like http://0.0.0.0:8056/jfa-go

I think it would a very useful feature, as jfa-go is supposed to be used in multiple-services environments.

Request access for Greek Translation

Hello,

I would like to help with the translation of the project into Greek.

How can I request the addition of the language in weblate?

Thanks in advance.

Feature request: integration with Ombi

It would be helpful if jfa could integrate with Ombi's user database, and when a user is signed up for Jellyfin they are added to Ombi with their email and username/password.

Unable to run jfa-go

Describe the bug

Can't run jfa-go with the latest release, get an error

To Reproduce

On fresh install, run jfa-go

Logs

Error output: -bash: /usr/bin/jfa-go: cannot execute binary file: Exec format error

Configuration

None, cannot get to web interface

Platform/Version

Linux v0.2.7

Infinite validation loading from facebook redirection link

I posted a link in our facebook private group to invite my friends, and a lot of them have a bug, when they clic on this link, a infinite loading when validating their account.
Their only solution is to copy/paste this link.

I personally couldn't reproduce this bug, but i noticed it's when their web browser didn't remove the facebook redirection URL part.

Of course their account is not created when there is this infinite loading.

Some little "bugs" I noticed

  • There's a useless space in the PIN code (sent in email), it's not user friendly to copy/paste it
    image

  • There's no information if you're trying to create a new account with an already used username (just infinite loop an no creation)

  • When I delete a user, could it be possible to delete it in Ombi too ?

  • For Français/Deutsch/Nederlands, in the admin menu, there's only the 3 first field translated :

image

error formlang.string

Hi
i've update docker unstable and i've that error ;)

jfa-go version: git (4fc9bdb)
Socket: /tmp/jfa-go.sock
[INFO] 04:29:13 Failed to load language files: json: cannot unmarshal object into Go struct field formLang.strings of type string

Blank Users

Version 0.1.7
Commit d31254b

I already moved my data from jf-accounts to jfa-go but seems like it doesn't show existing users. Also, I'm not sure if the New user default should show the users too but it doesn't show it as well.

[GIN/DEBUG] 18:00:16: GET(/getConfig) => 200 in 1.542772ms;
[DEBUG] 18:00:17 auth.go:102: Auth succeeded
[DEBUG] 18:00:17 api.go:466: Users requested
[GIN/DEBUG] 18:00:17: GET(/getUsers) => 200 in 226.439µs;
[DEBUG] 18:00:18 auth.go:102: Auth succeeded
[INFO] 18:00:18 Config requested
[GIN/DEBUG] 18:00:18: GET(/getConfig) => 200 in 926.328µs;
[DEBUG] 18:00:19 auth.go:102: Auth succeeded
[DEBUG] 18:00:19 api.go:466: Users requested
[GIN/DEBUG] 18:00:19: GET(/getUsers) => 200 in 162.136µs;

image

image

Also, I got this error during testing earlier when I tried to use Forgot Password feature:

[INFO] 17:47:10 New password reset for user "userhere"
panic: interface conversion: interface {} is nil, not string

It crashed the jfa-go

"Click below to continue to Jellyfin." does nothing

Describe the bug

After creating an account through an invite link, clicking the "Continue" button does nothing.

To Reproduce

  1. create a new invite link
  2. use the invite link to create a new account
    -> Success! (this works fine, the account was created)
  3. press the "continue" button
    Expected result: redirect to Jellyfin
    Actual result: nothing happens

image

Logs
Debug logs:

[GIN/DEBUG] 00:16:27: GET(/invite/aj6DvYcTrB8z3uPtw3xXZ7) => 200 in 2.719397ms; 
[GIN/DEBUG] 00:16:28: GET(/invite/js/modules/modal.js) => 200 in 209.141µs; 
[GIN/DEBUG] 00:16:28: GET(/invite/js/modules/common.js) => 200 in 340.531µs; 
[GIN/DEBUG] 00:16:28: GET(/invite/css/remixicon.css) => 200 in 568.81µs; 
[GIN/DEBUG] 00:16:28: GET(/invite/css/modal.css) => 200 in 231.104µs; 
[GIN/DEBUG] 00:16:28: GET(/favicon-32x32.png) => 200 in 193.891µs; 
[GIN/DEBUG] 00:16:28: GET(/apple-touch-icon.png) => 200 in 202.703µs; 
[DEBUG] 00:16:28 daemon.go:37: Daemon: Checking invites
[DEBUG] 00:16:40 auth.go:89: Auth succeeded
[DEBUG] 00:16:40 api.go:871: Users requested
[DEBUG] 00:16:40 auth.go:89: Auth succeeded
[DEBUG] 00:16:40 api.go:686: Invites requested
[DEBUG] 00:16:41 api.go:302: aj6DvYcTrB8z3uPtw3xXZ7: New user attempt
[DEBUG] 00:16:43 api.go:361: Applying settings from profile "Default"
[DEBUG] 00:16:43 api.go:367: Applying policy from profile "Default"
[DEBUG] 00:16:43 api.go:375: Applying homescreen from profile "Default"
[GIN/DEBUG] 00:16:44: POST(/newUser) => 200 in 3.072307966s; 

The browser console log was empty, and all network requests returned 200

Configuration
The only relevant configs settings I could think of:

[jellyfin]
server        = https://jellyfin.<mydomain>.net
public_server = https://jellyfin.<mydomain>.net

(My Jellyfin server is publicly accessible at https://jellyfin.<mydomain>.net)

Platform/Version
Version 0.2.5
Commit fdc97b4
Running in Docker

Browser: tried in both Firefox 84.0.2 and Chromium 87.0.4280.88

split routing invite page (/accounts/invite) from admin page (/accounts)

what i tried to do was making
/accounts only available from LAN http://192.168.x.x/accounts
and accounts/invite available to WAN https://test.com/invite
but i think its not possible because when i try to access the https://test.com/invite/xxx from WAN this is happen

Untitled

because /accounts isnt accesible from WAN.
i think this kind of configuration should be possible, because it will reduce security risk if /accounts (admin page) not available to public, only /invite.

[Feature Request] Mass User Management & Existing User Detection

Mass User Management

  • Able to mass update the settings of All Users (both Admin and regular users), Regular users, and Admin users.

Settings that can be updated are:

  • Personal Preferences
  • Library Access
  • Possibly everything in Profile section

This is useful if you have handful of users.

Existing User Detection

  • When someone tries to register an existing user, it will prompt "Username is already in used"

standard_init_linux.go:219: exec user process caused: exec format error

Hello,

I have this docker compose:
version: "2.1"
services:
jfa-go:
image: hrfee/jfa-go
container_name: jfa-go
#environment:
# - PUID=1000
# - PGID=1000
# - TZ=Europe/Lisbon
volumes:
- /mnt/appdata/jfago:/data
- /mnt/appdata/jellyfin:/jf
- /etc/localtime:/etc/localtime
ports:
- 8056:8056
# - 8057:8057
restart: unless-stopped

And I am having this issue:
standard_init_linux.go:219: exec user process caused: exec format error

Can someone help me?

Thanks

login error : Error: Couldn't connect to jfa-go.

Hi, sorry to bother u again. Found another problem right after setup.

C:\jfa-go\data\confirmation.html
[INFO] 00:06:48 Using Jellyfin server type
[INFO] 00:06:48 Authenticated with http://localhost:8096
[INFO] 00:06:48 Invite daemon started
[INFO] 00:06:48 Starting password reset daemon
[INFO] 00:06:49 Loading routes
[INFO] 00:06:49 Starting router @ 0.0.0.0:8056
[GIN] GET(/) => 200
[GIN] GET(//css/bundle.css) => 200
[GIN] GET(//css/remixicon.css) => 200
[GIN] GET(//js/admin.js) => 200
[GIN] GET(//css/bundle.css) => 200
[GIN] GET(//css/remixicon.css) => 200
[GIN] GET(//banner.svg) => 200
[GIN] GET(//lang/admin) => 404
[GIN] GET(//token/refresh) => 404
[GIN] GET(//favicon-32x32.png) => 200
[GIN] GET(//css/remixicon.woff2?t=1590207869815) => 200
[GIN] GET(//apple-touch-icon.png) => 200
[GIN] GET(//favicon-32x32.png) => 200
[GIN] GET(//token/login) => 404
[GIN] GET(//css/remixicon.woff2?t=1590207869815) => 200

user profile not working

new invite with user profile. account created, but user profile not applied.

jellyfin 10.7.0-RC3
jfa-go 0.3.0

For admin translation

{
"meta": {
"name": "French (FR)"
},
"strings": {
"invites": "Invite",
"accounts": "Comptes",
"settings": "Reglages,
"theme": "Thème",
"inviteDays": "Jours",
"inviteHours": "Heures",
"inviteMinutes": "Minutes",
"inviteNumberOfUses": "Nombre d'utilisateur",
"warning": "Attention",
"inviteInfiniteUsesWarning": "les invitationsinfinies peuvent être utilisées abusivement",
"inviteSendToEmail": "Envoyer à",
"login": "S'identifier",
"logout": "Se déconecter",
"create": "Créer",
"apply": "Appliquer",
"delete": "Effacer",
"submit": "Soumettre",
"name": "Nom",
"username": "Nom d'utilisateur",
"password": "Mot de passe",
"emailAddress": "Addresse Email",
"lastActiveTime": "Dernière activité",
"from": "De,
"user": "Utilisateur",
"aboutProgram": "A propros",
"version": "Version",
"commitNoun": "Commettre",
"newUser": "Nouvel utilisateur",
"profile": "Profil",
"modifySettings": "Modifier les paramètres",
"modifySettingsDescription": "Appliquez les paramètres à partir d'un profil existant ou obtenez-les directement auprès d'un utilisateur.",
"applyHomescreenLayout": "Appliquer la disposition de l'écran d'accueil",
"sendDeleteNotificationEmail": "Envoyer un e-mail de notification ",
"sendDeleteNotifiationExample": "Votre compte a été supprimé. ",
"settingsRestartRequired": "Redémarrage nécessaire ",
"settingsRestartRequiredDescription": "Un redémarrage est nécessaire pour appliquer certains paramètres que vous avez modifiés. Redémarrer maintenant ou plus tard? "
"settingsApplyRestartLater": "Appliquer, redémarrer plus tard ",
"settingsApplyRestartNow": "Appliquer et redémarrer ",
"settingsApplied": "Paramètres appliqués.",
"settingsRefreshPage": "Actualisez la page dans quelques secondes ",
"settingsRequiredOrRestartMessage": "Remarque: {} indique un champ obligatoire, {R} indique que les modifications nécessitent un redémarrage. ",
"settingsSave": "Sauver",
"ombiUserDefaults": "Paramètres par défaut de l'utilisateur Ombi",
"ombiUserDefaultsDescription": "Créez un utilisateur Ombi et configurez-le, puis sélectionnez-le ci-dessous. Ses paramètres / autorisations seront stockés et appliqués aux nouveaux utilisateurs Ombi créés par jfa-go ",
"userProfiles": "Profils d'utilisateurs",
"userProfilesDescription": "Les profils sont appliqués aux utilisateurs lorsqu'ils créent un compte. Un profil inclut les droits d'accès à la bibliothèque et la disposition de l'écran d'accueil. ",
"userProfilesIsDefault": "Défaut",
"userProfilesLibraries": "Bibliothèques",
"addProfile": "Ajouter un profil",
"addProfileDescription": "Créez un utilisateur Jellyfin et configurez-le, puis sélectionnez-le ci-dessous. Lorsque ce profil est appliqué à une invitation, de nouveaux utilisateurs seront créés avec les paramètres. ",
"addProfileNameOf": "Nom de profil",
"addProfileStoreHomescreenLayout": "Enregistrer la disposition de l'écran d'accueil"
},
"variableStrings": {
"settingsRequiredOrRestartMessage": "Remarque: {
} indique un champ obligatoire, {R} indique que les modifications nécessitent un redémarrage. "
},
"quantityStrings": {
"modifySettingsFor": {
"singular": "Modifier les paramètres pour {n} utilisateur",
"plural": "Modifier les paramètres pour {n} utilisateurs"
},
"deleteNUsers": {
"singular": "Supprimer {n} utilisateur",
"plural": "Supprimer {n} utilisateurs"
},
"addUser": {
"singular": "Ajouter un utilisateur",
"plural": "Ajouter des utilisateurs"
},
"deleteUser": {
"singular": "Supprimer l'utilisateur",
"plural": "Supprimer les utilisateurs"
}
}
}

for admin translation

{
"meta": {
"name": "French (FR)"
},
"strings": {
"invites": "Invite",
"accounts": "Comptes",
"settings": "Reglages,
"theme": "Thème",
"inviteDays": "Jours",
"inviteHours": "Heures",
"inviteMinutes": "Minutes",
"inviteNumberOfUses": "Nombre d'utilisateur",
"warning": "Attention",
"inviteInfiniteUsesWarning": "les invitationsinfinies peuvent être utilisées abusivement",
"inviteSendToEmail": "Envoyer à",
"login": "S'identifier",
"logout": "Se déconecter",
"create": "Créer",
"apply": "Appliquer",
"delete": "Effacer",
"submit": "Soumettre",
"name": "Nom",
"username": "Nom d'utilisateur",
"password": "Mot de passe",
"emailAddress": "Addresse Email",
"lastActiveTime": "Dernière activité",
"from": "De,
"user": "Utilisateur",
"aboutProgram": "A propros",
"version": "Version",
"commitNoun": "Commettre",
"newUser": "Nouvel utilisateur",
"profile": "Profil",
"modifySettings": "Modifier les paramètres",
"modifySettingsDescription": "Appliquez les paramètres à partir d'un profil existant ou obtenez-les directement auprès d'un utilisateur.",
"applyHomescreenLayout": "Appliquer la disposition de l'écran d'accueil",
"sendDeleteNotificationEmail": "Envoyer un e-mail de notification ",
"sendDeleteNotifiationExample": "Votre compte a été supprimé. ",
"settingsRestartRequired": "Redémarrage nécessaire ",
"settingsRestartRequiredDescription": "Un redémarrage est nécessaire pour appliquer certains paramètres que vous avez modifiés. Redémarrer maintenant ou plus tard? "
"settingsApplyRestartLater": "Appliquer, redémarrer plus tard ",
"settingsApplyRestartNow": "Appliquer et redémarrer ",
"settingsApplied": "Paramètres appliqués.",
"settingsRefreshPage": "Actualisez la page dans quelques secondes ",
"settingsRequiredOrRestartMessage": "Remarque: {} indique un champ obligatoire, {R} indique que les modifications nécessitent un redémarrage. ",
"settingsSave": "Sauver",
"ombiUserDefaults": "Paramètres par défaut de l'utilisateur Ombi",
"ombiUserDefaultsDescription": "Créez un utilisateur Ombi et configurez-le, puis sélectionnez-le ci-dessous. Ses paramètres / autorisations seront stockés et appliqués aux nouveaux utilisateurs Ombi créés par jfa-go ",
"userProfiles": "Profils d'utilisateurs",
"userProfilesDescription": "Les profils sont appliqués aux utilisateurs lorsqu'ils créent un compte. Un profil inclut les droits d'accès à la bibliothèque et la disposition de l'écran d'accueil. ",
"userProfilesIsDefault": "Défaut",
"userProfilesLibraries": "Bibliothèques",
"addProfile": "Ajouter un profil",
"addProfileDescription": "Créez un utilisateur Jellyfin et configurez-le, puis sélectionnez-le ci-dessous. Lorsque ce profil est appliqué à une invitation, de nouveaux utilisateurs seront créés avec les paramètres. ",
"addProfileNameOf": "Nom de profil",
"addProfileStoreHomescreenLayout": "Enregistrer la disposition de l'écran d'accueil"
},
"variableStrings": {
"settingsRequiredOrRestartMessage": "Remarque: {
} indique un champ obligatoire, {R} indique que les modifications nécessitent un redémarrage. "
},
"quantityStrings": {
"modifySettingsFor": {
"singular": "Modifier les paramètres pour {n} utilisateur",
"plural": "Modifier les paramètres pour {n} utilisateurs"
},
"deleteNUsers": {
"singular": "Supprimer {n} utilisateur",
"plural": "Supprimer {n} utilisateurs"
},
"addUser": {
"singular": "Ajouter un utilisateur",
"plural": "Ajouter des utilisateurs"
},
"deleteUser": {
"singular": "Supprimer l'utilisateur",
"plural": "Supprimer les utilisateurs"
}
}
}

Add armhf builds to the Docker container

Hi,

I'm a Raspberry Pi user, and I use Dockstarter to manage my apps. My Jellyfin and Ombi are installed in docker from Dockstarter because they have their armhf versions in the container.

I would like to use them with jfa-go to have unified authentication and account creation form for my friends. But the Docker version only contains the arm64 version of jfa-go.

Could it be possible to add the armhf edition into it ?
Thanks in advance for your help.
Have a great day

Translated email texts are blank

Description
Translated email texts are blank in the unstable docker image (worked fine in the regular image)

To Reproduce
Create a new invitation, sending out an email
-> all the text is missing, the general layout and invite link-button are present though.
Same for notification emails about the account being created

Logs

Nothing unusual shows up
[DEBUG] 19:24:09 auth.go:89: Auth succeeded
[DEBUG] 19:24:09 api.go:485: Generating new invite
[DEBUG] 19:24:09 api.go:511: hLbuYV74gEzh33erGqUUad: Sending invite email
<mail server hostname:port>
[INFO] 19:24:11 hLbuYV74gEzh33erGqUUad: Sent invite email to <email address>
[GIN/DEBUG] 19:24:11: POST(/invites) => 200 in 1.354491768s; 

Configuration

If you see it as necessary, include relevant sections of your config.ini, for example, include [email] and [smtp]|[mailgun] if you have an email issue.

Platform/Version
Docker: hrfee/jfa-go:unstable
Version: git
Commit: 882a346

Unable to send email

Updated to jfa-go, but unfortunately I am still unable to send email below is the error which I got while I pressed send invitation button. Checked it with two different email providers but got same error.
jfa-go

[ERROR] 01:23:36 api.go:517: vDb5eBFUrqH29HtbDzWRyN: Failed to send to [email protected]
[GIN] POST(/invites) => 200
[GIN] GET(/invites) => 200
[GIN] GET(/users) => 200
[INFO] 01:24:03 Config requested
[GIN] GET(/config) => 200
[GIN] GET(/invites) => 200
[INFO] 01:24:36 Config modification requested
[GIN] POST(/config) => 200
[INFO] 01:24:42 Config modification requested
[GIN] POST(/config) => 200
[ERROR] 01:24:53 api.go:517: LAqE4ipG9i4NRYBnjeHruc: Failed to send to [email protected]
[GIN] POST(/invites) => 200
[GIN] GET(/invites) => 200
[GIN] GET(/invites) => 200
[ERROR] 01:25:23 api.go:517: gSX8d84MF3Beb3vYgSBfRm: Failed to send to [email protected]
[GIN] POST(/invites) => 200
[GIN] GET(/invites) => 200
[GIN] GET(/invites) => 200
[GIN] GET(/invites) => 200
[GIN] GET(/invites) => 200

Debug sent email

Need to debug sent email to the user. Since my smtp provider rewrite the url for invite/confirmation button i cant see if the url sent to the smtp provider if its correct or not. Any way to do this?

Reverse Proxy: URL Base being ignored for certain paths

Read the FAQ first!

Describe the bug

Web paths seem to ignore url_base value when looking for banner.svg, bundle.css, remixicon.css and when navigating between invites, accounts and settings. This affects link generation as the link will omit the url_base value if you have switched tabs and therefore fail.

E.g.
Reverse proxy to http://test.com/accounts. After navigating to the other pages (Accounts/Settings) the /accounts is dropped (http://test.com/settings). Navigating back to the invites page will result in the invite url being http:/test.com/invite/xxx.... which will fail to parse.

The invite links do generate properly however if the accounts/settings pages are not accessed thereby not dropping the url_base.

To Reproduce

  1. Startup jfa-admin with the latest docker image (0.2.5) or latest commit (46fe3a7)
  2. Setup url_base to be /accounts
  3. Setup reverse-proxy to link to /accounts (tested with Caddy2 and nginx using the supplied config in the wiki)
  4. Load the page (e.g. http(s)://domain.com/accounts/)

Whilst the interface looks fine and is mostly functional, there are errors in the console for resources.

  1. Navigate to Accounts or Settings page
    URL will change to omit the url_base resulting in /accounts and /settings rather than /url_base/accounts, /url_base/settings

  2. Navigate back to Invites page, url_base will not be visible

  3. Generate invite link, link does not include url_base

Logs
Docker Image Logs - Nothing special. All HTTP 200 responses

Chrome Console Logs - Initial Connect

GET http://host.com/css/bundle.css net::ERR_ABORTED 404 (Not Found)
GET http://host.com/css/remixicon.css net:ERR_ABORTED 404 (Not Found)
GET http://192.168.1.200:8080/banner.svg 404 (Not Found)
GET http://192.168.1.200:8080/accounts/token/refresh 400 (Bad Request)

Configuration
config.ini

url_base = /accounts

nginx config

http {
  server {
    listen 80;
    location ~ ^/accounts/(.*)$ {
      rewrite ^/accounts/(.*) /$1 break;
      proxy_hide_header Content-Security-Policy;
      add_header Content-Security-Policy "";
      proxy_pass http://localhost:8056;
      http2_push_preload on;
      proxy_set_header Host $host;
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header X-Forwarded-Proto $scheme;
      proxy_set_header X-Forwarded-Protocol $scheme;
      proxy_set_header X-Forwarded-Host $http_host;
      proxy_buffering off;
    }
  }
}

Caddy2 Caddyfile

host.com {
  route /accounts* {
    uri strip_prefix /accounts
    reverse_proxy localhost:8056
  }
}

Platform/Version
Docker Containers running on Host Debian distributions. Tested with docker:latest and docker:unstable with the same results.
hrfee/jfa-go:latest (0.2.5, fdc97b4)
hrfee/jfa-go:unstable (46fe3a7)

Accessed through Chrome on Linux version 88.0.4324.146

Ombi don't remove user

Hi
Ombi don't remove user when i delete him with your app. Email not appear to i need to write manually
thx :)

URL BASE BREAK DOCKER UNSTABLE

Hello
the recent modification on the base url broke my jfa, docker unstabe, unable to connect to the admin page. I don't use a template, only a json for the modified lang

Config file does not get updated when features are added

The issue

When a new feature is added and you try to enable it in the web UI, the settings will not save.
This seems to be because config files from an older version do not have the required fields present and they aren't appended automatically.

A workaround is to delete redo the entire configuration with the setup page as this generates an entirely new config file with all the options present, but it's really not that obvious to spot if you're not a poweruser/dev who knows where to look.

I remember pondering about this problem when I was working on my own go application config file. I oped to use json and a struct for the config and just json serialized/deserialized the entire struct. Had the advantage that missing fields would just get added with a default value.
Maybe something similar could be applicable here: The entire config with all fields is saved with default values, regardless of which fields were present during load.

Since you're using a text based file and I haven't had the chance to look at the exact implementation (I remember it was maybe key-value based), I can't tell if this approach would be effective for you also.

To Reproduce

Use an older config file, for example pre-ombi integration and try to enable ombi integration with the web interface.

Platform/Version

  • Dockerized
  • Version 0.1.9
  • Commit 4e86288

Feature Request: SMTP Username

Is it possible to add an SMTP username in addition to the other SMTP settings? I use the SendGrid SMTP relay and it requires a username to authenticate.

P.S I love the app though!

Translation

The Admin page, Account creation form and Emails can now be translated at this weblate instance.

Traefik reverse proxy fails when using base URL

Read the FAQ first!

Describe the bug

Traefik reverse proxy fails if url_base set. Works fine on a subdomain, but will show 404 when on a base URL. The page constantly tries to access css/* etc in a loop when loaded.

image
image

To Reproduce

What to do to reproduce the problem.

Logs

jfa-go_1         | [GIN/DEBUG] 17:44:33: GET(/jfa/css/remixicon.css) => 404 in 15.106287ms; 
jfa-go_1         | [GIN/DEBUG] 17:44:33: GET(/jfa/css/bundle.css) => 404 in 4.464636ms; 
jfa-go_1         | [GIN/DEBUG] 17:44:33: GET(/jfa/css/remixicon.css) => 404 in 4.170007ms; 
jfa-go_1         | [GIN/DEBUG] 17:44:33: GET(/jfa/css/bundle.css) => 404 in 4.261646ms; 
jfa-go_1         | [GIN/DEBUG] 17:44:33: GET(/jfa/css/remixicon.css) => 404 in 3.39886ms; 
jfa-go_1         | [GIN/DEBUG] 17:44:33: GET(/jfa/css/bundle.css) => 404 in 4.219146ms; 
jfa-go_1         | [GIN/DEBUG] 17:44:33: GET(/jfa/css/remixicon.css) => 404 in 3.291027ms; 
jfa-go_1         | [GIN/DEBUG] 17:44:33: GET(/jfa/css/bundle.css) => 404 in 3.163965ms; 
jfa-go_1         | [GIN/DEBUG] 17:44:33: GET(/jfa/css/remixicon.css) => 404 in 3.461112ms; 
jfa-go_1         | [GIN/DEBUG] 17:44:33: GET(/jfa/css/bundle.css) => 404 in 3.266258ms; 
jfa-go_1         | [GIN/DEBUG] 17:44:33: GET(/jfa/css/remixicon.css) => 404 in 3.411234ms; 
jfa-go_1         | [GIN/DEBUG] 17:44:33: GET(/jfa/css/bundle.css) => 404 in 3.760947ms; 
jfa-go_1         | [GIN/DEBUG] 17:44:33: GET(/jfa/css/remixicon.css) => 404 in 3.579617ms; 
jfa-go_1         | [GIN/DEBUG] 17:44:33: GET(/jfa/css/bundle.css) => 404 in 3.373669ms; 
jfa-go_1         | [GIN/DEBUG] 17:44:33: GET(/jfa/css/remixicon.css) => 404 in 3.285983ms; 
jfa-go_1         | [GIN/DEBUG] 17:44:33: GET(/jfa/css/bundle.css) => 404 in 3.738771ms; 

Configuration

url_base set to /jfa

docker config:

jfa-go:
    image: hrfee/jfa-go:unstable
    restart: always
    user: 1000:1000
    volumes:
      - /opt/docker/jfa-go:/data
      - /opt/docker/jellyfin:/jf
      - /etc/localtime:/etc/localtime:ro
    labels:
      - "traefik.enable=true"
      - "traefik.http.routers.jfa-go.rule=Host(`services.${DOMAIN}`) && PathPrefix(`/jfa`)"
      - "traefik.http.routers.jfa-go.tls=true"

Platform/Version

Docker, latest git as of 11/02/2021 17:30 GMT

Cannot create new user from invite

I am running the unstable version in docker and cannot get it to create a new user in jellyfish. I can create the invite but when we try to test it fails to create the user and stays on the account creation page.

form.js:1 GET https://my.domain.tld/invite/0xbd64e0/lang/form 404
(anonymous) @ form.js:1
site.webmanifest:1 GET https://my.domain.tld/invite/0xbd64e0/site.webmanifest 404
site.webmanifest:1 Manifest: Line: 1, column: 1, Syntax error.
rFXZQhzRQQSC7pLBSKHZY5:1 The resource https://my.domain.tld/css/remixicon.css was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriateasvalue and it is preloaded intentionally.
rFXZQhzRQQSC7pLBSKHZY5:1 The resource https://my.domain.tld/css/bundle.css was preloaded using link preload but not used within a few seconds from the window's load event. Please make sure it has an appropriateasvalue and it is preloaded intentionally.
form.js:1 POST https://my.domain.tld/invite/0xbd64e0/newUser 404

For mail txt translation

I was mounting the volume /opt/jfa-go/data to edit and translate mail messages, but it may be usefull to share my translation :)

created.txt

Un utilisateur a été créé avec ce code {{ .code }}.

Nom: {{ .username }}
Adresse: {{ .address }} 
Date: {{ .time }}  // "Heure" if it's only minutes and hours, I didn't check it

invite.txt :

Salut {{ .username }},

Quelqu'un vient de demander une réïnitialisation du mot de passe via Jellyfin.
Si c'était bien toi, renseigne le code PIN en dessous.
Ce code expirera le {{ .expiry_date }}, à {{ .expiry_time }} UTC, soit dans {{ .expires_in }}.
Si ce n'était pas toi, tu peux ignorer ce mail.

PIN: {{ .pin }}

{{ .message }}

deleted.txt

Ton compte Jellyfin a été supprimé.
Motif : {{ .reason }}

{{ .message }}

invite-mail.txt :

Salut,
Tu as été invité à rejoindre Jellyfin.
Pour continuer, suis le lien en dessous.
L'invitation expirera le {{ .expiry_date }}, à {{ .expiry_time }}, soit dans {{ .expires_in }}, alors fais vite !

{{ .invite_link }}

Some features if you need ideas :)

Once again, thank's for your work, it's so usefull to manage my jellyfin :)

Some ideas :
• A mail confirmation with the username used (a lot of users forget it and try to use their email address !)
• Add a private name note to my invitation (just to manage it more easily)

Run under path of Jellyfin

Short and simple:

  • I am using NGINX to rev-proxy to Jellyfin.
  • I would love to run jfa-go.

Can I run it in a sub-address? i.e.: cloud.mydomain.tld/jfa-go/?
I assume all I'd have to do is something like...

location /jfa-go {
  proxy_pass http://localhost:12345
  # ...
}

But I'd just like to make sure that this is supported :)

routing issue

using :
config.ini

[jellyfin]
; jellyfin server address. can be public, or local for security purposes.
server                      = http://localhost:8096
; publicly accessible jellyfin address for invite form. leave blank to reuse the above address.
public_server               = https://test.com
; the name of the client that will show up in the jellyfin dashboard.
client                      = jfa-go
; timeout of user cache in minutes. set to 0 to disable.
cache_timeout               = 30
; note: emby integration works but is missing some features, such as password resets.
type                        = jellyfin

[ui]
url_base        = /accounts

apache config

<VirtualHost *:443>

    ServerName test.com
    ProxyPreserveHost On

    ProxyPass "/accounts" "http://localhost:8056/accounts"
    ProxyPassReverse "/accounts" "http://localhost:8056/accounts"

    <Location "/accounts">
        Require ip 192.168.0.0/16
        Require ip 10.0.0.0/8
    </Location>
    <Location "/accounts/">
        Require all granted
    </Location>
    <Location "/accounts/invite">
        Require all granted
    </Location>

accessing https://test.com/accounts from public returned 403 forbidden as expected.
but accessing https://test.com/accounts/ and https://test.com/accounts/accounts returned admin page accesible from public domain.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.