From 886ae64febca87835504c32c49d4cb04e1622fc5 Mon Sep 17 00:00:00 2001 From: Harvey Tindall Date: Sat, 24 Apr 2021 18:54:31 +0100 Subject: [PATCH] add "systemd" command to generate a .service file never got around to adding this from jellyfin-accounts for some reason. --- Makefile | 2 ++ README.md | 13 +++++++------ main.go | 34 ++++++++++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 6 deletions(-) diff --git a/Makefile b/Makefile index 95565d8..d9ffd8c 100644 --- a/Makefile +++ b/Makefile @@ -94,6 +94,8 @@ copy: $(info copying static data) -mkdir -p $(DATA)/web cp -r static/* $(DATA)/web/ + $(info copying systemd service) + cp jfa-go.service $(DATA)/ $(info copying language files) cp -r lang $(DATA)/ cp LICENSE $(DATA)/ diff --git a/README.md b/README.md index 6b92ca7..bf86ccf 100644 --- a/README.md +++ b/README.md @@ -8,8 +8,6 @@ --- jfa-go is a user management app for [Jellyfin](https://github.com/jellyfin/jellyfin) (and now [Emby](https://emby.media/)) that provides invite-based account creation as well as other features that make one's instance much easier to manage. -I chose to rewrite the python [jellyfin-accounts](https://github.com/hrfee/jellyfin-accounts) in Go mainly as a learning experience, but also to slightly improve speeds and efficiency. - #### Features * 🧑 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 @@ -26,8 +24,8 @@ I chose to rewrite the python [jellyfin-accounts](https://github.com/hrfee/jelly * 📣 Announcements: Bulk email your users with announcements about your server. * Authentication via Jellyfin: Instead of using separate credentials for jfa-go and Jellyfin, jfa-go can use it as the authentication provider. * Enables the usage of jfa-go by multiple people -* 🌓 Customizable look - * Edit emails with variables and markdown +* 🌓 Customizations + * Customize emails with variables and markdown * Specify contact and help messages to appear in emails and pages * Light and dark themes available @@ -71,8 +69,6 @@ Otherwise, full build instructions can be found [here](https://github.com/hrfee/ #### 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. -Note: jfa-go does not run as a daemon by default. You'll need to figure this out yourself. - ``` Usage of ./jfa-go: -config string @@ -89,6 +85,11 @@ Usage of ./jfa-go: 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. + +--- + If you're switching from jellyfin-accounts, copy your existing `~/.jf-accounts` to: * `XDG_CONFIG_DIR/jfa-go` (usually ~/.config/jfa-go) on \*nix systems, diff --git a/main.go b/main.go index 8d33fae..5faeeea 100644 --- a/main.go +++ b/main.go @@ -739,6 +739,40 @@ func main() { fmt.Println("Sent.") } else if flagPassed("daemon") { start(true, true) + } else if flagPassed("systemd") { + service, err := fs.ReadFile(localFS, "jfa-go.service") + if err != nil { + fmt.Printf("Couldn't read jfa-go.service: %v\n", err) + os.Exit(1) + } + absPath, err := filepath.Abs(os.Args[0]) + if err != nil { + absPath = os.Args[0] + } + command := absPath + for i, v := range os.Args { + if i != 0 && v != "systemd" { + command += " " + v + } + } + service = []byte(strings.Replace(string(service), "{executable}", command, 1)) + err = os.WriteFile("jfa-go.service", service, 0666) + if err != nil { + fmt.Printf("Couldn't write jfa-go.service: %v\n", err) + os.Exit(1) + } + fmt.Print(info(`If you want to execute jfa-go with special arguments, re-run this command with them. +Move the newly created "jfa-go.service" file to ~/.config/systemd/user (Creating it if necessary). +Then run "systemctl --user daemon-reload". +You can then run: + +`)) + color.New(color.FgGreen).PrintFunc()("To start: ") + fmt.Print(info("systemctl --user start jfa-go\n\n")) + color.New(color.FgRed).PrintFunc()("To stop: ") + fmt.Print(info("systemctl --user stop jfa-go\n\n")) + color.New(color.FgYellow).PrintFunc()("To restart: ") + fmt.Print(info("systemctl --user stop jfa-go\n")) } else { RESTART = make(chan bool, 1) start(false, true)