summaryrefslogtreecommitdiff
path: root/cmd
diff options
context:
space:
mode:
Diffstat (limited to 'cmd')
-rw-r--r--cmd/gotosocial/accountsflags.go47
-rw-r--r--cmd/gotosocial/admincommands.go128
-rw-r--r--cmd/gotosocial/commands.go37
-rw-r--r--cmd/gotosocial/databaseflags.go77
-rw-r--r--cmd/gotosocial/flags.go48
-rw-r--r--cmd/gotosocial/generalflags.go66
-rw-r--r--cmd/gotosocial/letsencryptflags.go47
-rw-r--r--cmd/gotosocial/main.go406
-rw-r--r--cmd/gotosocial/mediaflags.go53
-rw-r--r--cmd/gotosocial/oidcflags.go71
-rw-r--r--cmd/gotosocial/runaction.go51
-rw-r--r--cmd/gotosocial/servercommands.go42
-rw-r--r--cmd/gotosocial/statusesflags.go59
-rw-r--r--cmd/gotosocial/storageflags.go59
-rw-r--r--cmd/gotosocial/templateflags.go41
-rw-r--r--cmd/gotosocial/testrigcommands.go42
16 files changed, 879 insertions, 395 deletions
diff --git a/cmd/gotosocial/accountsflags.go b/cmd/gotosocial/accountsflags.go
new file mode 100644
index 000000000..9f9be266d
--- /dev/null
+++ b/cmd/gotosocial/accountsflags.go
@@ -0,0 +1,47 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package main
+
+import (
+ "github.com/superseriousbusiness/gotosocial/internal/config"
+ "github.com/urfave/cli/v2"
+)
+
+func accountsFlags(flagNames, envNames config.Flags, defaults config.Defaults) []cli.Flag {
+ return []cli.Flag{
+ &cli.BoolFlag{
+ Name: flagNames.AccountsOpenRegistration,
+ Usage: "Allow anyone to submit an account signup request. If false, server will be invite-only.",
+ Value: defaults.AccountsOpenRegistration,
+ EnvVars: []string{envNames.AccountsOpenRegistration},
+ },
+ &cli.BoolFlag{
+ Name: flagNames.AccountsApprovalRequired,
+ Usage: "Do account signups require approval by an admin or moderator before user can log in? If false, new registrations will be automatically approved.",
+ Value: defaults.AccountsRequireApproval,
+ EnvVars: []string{envNames.AccountsApprovalRequired},
+ },
+ &cli.BoolFlag{
+ Name: flagNames.AccountsReasonRequired,
+ Usage: "Do new account signups require a reason to be submitted on registration?",
+ Value: defaults.AccountsReasonRequired,
+ EnvVars: []string{envNames.AccountsReasonRequired},
+ },
+ }
+}
diff --git a/cmd/gotosocial/admincommands.go b/cmd/gotosocial/admincommands.go
new file mode 100644
index 000000000..6fb3651ef
--- /dev/null
+++ b/cmd/gotosocial/admincommands.go
@@ -0,0 +1,128 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package main
+
+import (
+ "github.com/superseriousbusiness/gotosocial/internal/cliactions/admin/account"
+ "github.com/superseriousbusiness/gotosocial/internal/config"
+ "github.com/urfave/cli/v2"
+)
+
+func adminCommands() []*cli.Command {
+ return []*cli.Command{
+ {
+ Name: "admin",
+ Usage: "gotosocial admin-related tasks",
+ Subcommands: []*cli.Command{
+ {
+ Name: "account",
+ Usage: "admin commands related to accounts",
+ Subcommands: []*cli.Command{
+ {
+ Name: "create",
+ Usage: "create a new account",
+ Flags: []cli.Flag{
+ &cli.StringFlag{
+ Name: config.UsernameFlag,
+ Usage: config.UsernameUsage,
+ },
+ &cli.StringFlag{
+ Name: config.EmailFlag,
+ Usage: config.EmailUsage,
+ },
+ &cli.StringFlag{
+ Name: config.PasswordFlag,
+ Usage: config.PasswordUsage,
+ },
+ },
+ Action: func(c *cli.Context) error {
+ return runAction(c, account.Create)
+ },
+ },
+ {
+ Name: "confirm",
+ Usage: "confirm an existing account manually, thereby skipping email confirmation",
+ Flags: []cli.Flag{
+ &cli.StringFlag{
+ Name: config.UsernameFlag,
+ Usage: config.UsernameUsage,
+ },
+ },
+ Action: func(c *cli.Context) error {
+ return runAction(c, account.Confirm)
+ },
+ },
+ {
+ Name: "promote",
+ Usage: "promote an account to admin",
+ Flags: []cli.Flag{
+ &cli.StringFlag{
+ Name: config.UsernameFlag,
+ Usage: config.UsernameUsage,
+ },
+ },
+ Action: func(c *cli.Context) error {
+ return runAction(c, account.Promote)
+ },
+ },
+ {
+ Name: "demote",
+ Usage: "demote an account from admin to normal user",
+ Flags: []cli.Flag{
+ &cli.StringFlag{
+ Name: config.UsernameFlag,
+ Usage: config.UsernameUsage,
+ },
+ },
+ Action: func(c *cli.Context) error {
+ return runAction(c, account.Demote)
+ },
+ },
+ {
+ Name: "disable",
+ Usage: "prevent an account from signing in or posting etc, but don't delete anything",
+ Flags: []cli.Flag{
+ &cli.StringFlag{
+ Name: config.UsernameFlag,
+ Usage: config.UsernameUsage,
+ },
+ },
+ Action: func(c *cli.Context) error {
+ return runAction(c, account.Disable)
+ },
+ },
+ {
+ Name: "suspend",
+ Usage: "completely remove an account and all of its posts, media, etc",
+ Flags: []cli.Flag{
+ &cli.StringFlag{
+ Name: config.UsernameFlag,
+ Usage: config.UsernameUsage,
+ },
+ },
+ Action: func(c *cli.Context) error {
+ return runAction(c, account.Suspend)
+ },
+ },
+ },
+ },
+ },
+ },
+ }
+}
diff --git a/cmd/gotosocial/commands.go b/cmd/gotosocial/commands.go
new file mode 100644
index 000000000..0c16d1fb5
--- /dev/null
+++ b/cmd/gotosocial/commands.go
@@ -0,0 +1,37 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package main
+
+import (
+ "github.com/urfave/cli/v2"
+)
+
+func getCommands() []*cli.Command {
+ commands := []*cli.Command{}
+ commandSets := [][]*cli.Command{
+ serverCommands(),
+ adminCommands(),
+ testrigCommands(),
+ }
+ for _, cs := range commandSets {
+ commands = append(commands, cs...)
+ }
+
+ return commands
+}
diff --git a/cmd/gotosocial/databaseflags.go b/cmd/gotosocial/databaseflags.go
new file mode 100644
index 000000000..7abe64f1b
--- /dev/null
+++ b/cmd/gotosocial/databaseflags.go
@@ -0,0 +1,77 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package main
+
+import (
+ "github.com/superseriousbusiness/gotosocial/internal/config"
+ "github.com/urfave/cli/v2"
+)
+
+func databaseFlags(flagNames, envNames config.Flags, defaults config.Defaults) []cli.Flag {
+ return []cli.Flag{
+ &cli.StringFlag{
+ Name: flagNames.DbType,
+ Usage: "Database type: eg., postgres",
+ Value: defaults.DbType,
+ EnvVars: []string{envNames.DbType},
+ },
+ &cli.StringFlag{
+ Name: flagNames.DbAddress,
+ Usage: "Database ipv4 address or hostname",
+ Value: defaults.DbAddress,
+ EnvVars: []string{envNames.DbAddress},
+ },
+ &cli.IntFlag{
+ Name: flagNames.DbPort,
+ Usage: "Database port",
+ Value: defaults.DbPort,
+ EnvVars: []string{envNames.DbPort},
+ },
+ &cli.StringFlag{
+ Name: flagNames.DbUser,
+ Usage: "Database username",
+ Value: defaults.DbUser,
+ EnvVars: []string{envNames.DbUser},
+ },
+ &cli.StringFlag{
+ Name: flagNames.DbPassword,
+ Usage: "Database password",
+ Value: defaults.DbPassword,
+ EnvVars: []string{envNames.DbPassword},
+ },
+ &cli.StringFlag{
+ Name: flagNames.DbDatabase,
+ Usage: "Database name",
+ Value: defaults.DbDatabase,
+ EnvVars: []string{envNames.DbDatabase},
+ },
+ &cli.StringFlag{
+ Name: flagNames.DbTLSMode,
+ Usage: "Database tls mode",
+ Value: defaults.DBTlsMode,
+ EnvVars: []string{envNames.DbTLSMode},
+ },
+ &cli.StringFlag{
+ Name: flagNames.DbTLSCACert,
+ Usage: "Path to CA cert for db tls connection",
+ Value: defaults.DBTlsCACert,
+ EnvVars: []string{envNames.DbTLSCACert},
+ },
+ }
+}
diff --git a/cmd/gotosocial/flags.go b/cmd/gotosocial/flags.go
new file mode 100644
index 000000000..355ec0b81
--- /dev/null
+++ b/cmd/gotosocial/flags.go
@@ -0,0 +1,48 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package main
+
+import (
+ "github.com/superseriousbusiness/gotosocial/internal/config"
+ "github.com/urfave/cli/v2"
+)
+
+func getFlags() []cli.Flag {
+ flagNames := config.GetFlagNames()
+ envNames := config.GetEnvNames()
+ defaults := config.GetDefaults()
+
+ flags := []cli.Flag{}
+ flagSets := [][]cli.Flag{
+ generalFlags(flagNames, envNames, defaults),
+ databaseFlags(flagNames, envNames, defaults),
+ templateFlags(flagNames, envNames, defaults),
+ accountsFlags(flagNames, envNames, defaults),
+ mediaFlags(flagNames, envNames, defaults),
+ storageFlags(flagNames, envNames, defaults),
+ statusesFlags(flagNames, envNames, defaults),
+ letsEncryptFlags(flagNames, envNames, defaults),
+ oidcFlags(flagNames, envNames, defaults),
+ }
+ for _, fs := range flagSets {
+ flags = append(flags, fs...)
+ }
+
+ return flags
+}
diff --git a/cmd/gotosocial/generalflags.go b/cmd/gotosocial/generalflags.go
new file mode 100644
index 000000000..3b0b9806a
--- /dev/null
+++ b/cmd/gotosocial/generalflags.go
@@ -0,0 +1,66 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package main
+
+import (
+ "github.com/superseriousbusiness/gotosocial/internal/config"
+ "github.com/urfave/cli/v2"
+)
+
+func generalFlags(flagNames, envNames config.Flags, defaults config.Defaults) []cli.Flag {
+ return []cli.Flag{
+ &cli.StringFlag{
+ Name: flagNames.LogLevel,
+ Usage: "Log level to run at: debug, info, warn, fatal",
+ Value: defaults.LogLevel,
+ EnvVars: []string{envNames.LogLevel},
+ },
+ &cli.StringFlag{
+ Name: flagNames.ApplicationName,
+ Usage: "Name of the application, used in various places internally",
+ Value: defaults.ApplicationName,
+ EnvVars: []string{envNames.ApplicationName},
+ Hidden: true,
+ },
+ &cli.StringFlag{
+ Name: flagNames.ConfigPath,
+ Usage: "Path to a yaml file containing gotosocial configuration. Values set in this file will be overwritten by values set as env vars or arguments",
+ Value: defaults.ConfigPath,
+ EnvVars: []string{envNames.ConfigPath},
+ },
+ &cli.StringFlag{
+ Name: flagNames.Host,
+ Usage: "Hostname to use for the server (eg., example.org, gotosocial.whatever.com). DO NOT change this on a server that's already run!",
+ Value: defaults.Host,
+ EnvVars: []string{envNames.Host},
+ },
+ &cli.StringFlag{
+ Name: flagNames.AccountDomain,
+ Usage: "Domain to use in account names (eg., example.org, whatever.com). If not set, will default to the setting for host. DO NOT change this on a server that's already run!",
+ Value: defaults.AccountDomain,
+ EnvVars: []string{envNames.AccountDomain},
+ },
+ &cli.StringFlag{
+ Name: flagNames.Protocol,
+ Usage: "Protocol to use for the REST api of the server (only use http for debugging and tests!)",
+ Value: defaults.Protocol,
+ EnvVars: []string{envNames.Protocol},
+ },
+ }
+}
diff --git a/cmd/gotosocial/letsencryptflags.go b/cmd/gotosocial/letsencryptflags.go
new file mode 100644
index 000000000..03495fd11
--- /dev/null
+++ b/cmd/gotosocial/letsencryptflags.go
@@ -0,0 +1,47 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package main
+
+import (
+ "github.com/superseriousbusiness/gotosocial/internal/config"
+ "github.com/urfave/cli/v2"
+)
+
+func letsEncryptFlags(flagNames, envNames config.Flags, defaults config.Defaults) []cli.Flag {
+ return []cli.Flag{
+ &cli.BoolFlag{
+ Name: flagNames.LetsEncryptEnabled,
+ Usage: "Enable letsencrypt TLS certs for this server. If set to true, then cert dir also needs to be set (or take the default).",
+ Value: defaults.LetsEncryptEnabled,
+ EnvVars: []string{envNames.LetsEncryptEnabled},
+ },
+ &cli.StringFlag{
+ Name: flagNames.LetsEncryptCertDir,
+ Usage: "Directory to store acquired letsencrypt certificates.",
+ Value: defaults.LetsEncryptCertDir,
+ EnvVars: []string{envNames.LetsEncryptCertDir},
+ },
+ &cli.StringFlag{
+ Name: flagNames.LetsEncryptEmailAddress,
+ Usage: "Email address to use when requesting letsencrypt certs. Will receive updates on cert expiry etc.",
+ Value: defaults.LetsEncryptEmailAddress,
+ EnvVars: []string{envNames.LetsEncryptEmailAddress},
+ },
+ }
+}
diff --git a/cmd/gotosocial/main.go b/cmd/gotosocial/main.go
index e8bc793bd..c47a4dc9b 100644
--- a/cmd/gotosocial/main.go
+++ b/cmd/gotosocial/main.go
@@ -19,16 +19,9 @@
package main
import (
- "fmt"
"os"
"github.com/sirupsen/logrus"
- "github.com/superseriousbusiness/gotosocial/internal/cliactions"
- "github.com/superseriousbusiness/gotosocial/internal/cliactions/admin/account"
- "github.com/superseriousbusiness/gotosocial/internal/cliactions/server"
- "github.com/superseriousbusiness/gotosocial/internal/cliactions/testrig"
- "github.com/superseriousbusiness/gotosocial/internal/config"
- "github.com/superseriousbusiness/gotosocial/internal/log"
"github.com/urfave/cli/v2"
)
@@ -40,372 +33,18 @@ var Version string
var Commit string
func main() {
- flagNames := config.GetFlagNames()
- envNames := config.GetEnvNames()
- defaults := config.GetDefaults()
- app := &cli.App{
- Version: Version + " " + Commit[:7],
- Usage: "a fediverse social media server",
- Flags: []cli.Flag{
- // GENERAL FLAGS
- &cli.StringFlag{
- Name: flagNames.LogLevel,
- Usage: "Log level to run at: debug, info, warn, fatal",
- Value: defaults.LogLevel,
- EnvVars: []string{envNames.LogLevel},
- },
- &cli.StringFlag{
- Name: flagNames.ApplicationName,
- Usage: "Name of the application, used in various places internally",
- Value: defaults.ApplicationName,
- EnvVars: []string{envNames.ApplicationName},
- Hidden: true,
- },
- &cli.StringFlag{
- Name: flagNames.ConfigPath,
- Usage: "Path to a yaml file containing gotosocial configuration. Values set in this file will be overwritten by values set as env vars or arguments",
- Value: defaults.ConfigPath,
- EnvVars: []string{envNames.ConfigPath},
- },
- &cli.StringFlag{
- Name: flagNames.Host,
- Usage: "Hostname to use for the server (eg., example.org, gotosocial.whatever.com). DO NOT change this on a server that's already run!",
- Value: defaults.Host,
- EnvVars: []string{envNames.Host},
- },
- &cli.StringFlag{
- Name: flagNames.AccountDomain,
- Usage: "Domain to use in account names (eg., example.org, whatever.com). If not set, will default to the setting for host. DO NOT change this on a server that's already run!",
- Value: defaults.AccountDomain,
- EnvVars: []string{envNames.AccountDomain},
- },
- &cli.StringFlag{
- Name: flagNames.Protocol,
- Usage: "Protocol to use for the REST api of the server (only use http for debugging and tests!)",
- Value: defaults.Protocol,
- EnvVars: []string{envNames.Protocol},
- },
-
- // DATABASE FLAGS
- &cli.StringFlag{
- Name: flagNames.DbType,
- Usage: "Database type: eg., postgres",
- Value: defaults.DbType,
- EnvVars: []string{envNames.DbType},
- },
- &cli.StringFlag{
- Name: flagNames.DbAddress,
- Usage: "Database ipv4 address or hostname",
- Value: defaults.DbAddress,
- EnvVars: []string{envNames.DbAddress},
- },
- &cli.IntFlag{
- Name: flagNames.DbPort,
- Usage: "Database port",
- Value: defaults.DbPort,
- EnvVars: []string{envNames.DbPort},
- },
- &cli.StringFlag{
- Name: flagNames.DbUser,
- Usage: "Database username",
- Value: defaults.DbUser,
- EnvVars: []string{envNames.DbUser},
- },
- &cli.StringFlag{
- Name: flagNames.DbPassword,
- Usage: "Database password",
- Value: defaults.DbPassword,
- EnvVars: []string{envNames.DbPassword},
- },
- &cli.StringFlag{
- Name: flagNames.DbDatabase,
- Usage: "Database name",
- Value: defaults.DbDatabase,
- EnvVars: []string{envNames.DbDatabase},
- },
- &cli.StringFlag{
- Name: flagNames.DbTLSMode,
- Usage: "Database tls mode",
- Value: defaults.DBTlsMode,
- EnvVars: []string{envNames.DbTLSMode},
- },
- &cli.StringFlag{
- Name: flagNames.DbTLSCACert,
- Usage: "Path to CA cert for db tls connection",
- Value: defaults.DBTlsCACert,
- EnvVars: []string{envNames.DbTLSCACert},
- },
-
- // TEMPLATE FLAGS
- &cli.StringFlag{
- Name: flagNames.TemplateBaseDir,
- Usage: "Basedir for html templating files for rendering pages and composing emails.",
- Value: defaults.TemplateBaseDir,
- EnvVars: []string{envNames.TemplateBaseDir},
- },
- &cli.StringFlag{
- Name: flagNames.AssetBaseDir,
- Usage: "Directory to serve static assets from, accessible at example.com/assets/",
- Value: defaults.AssetBaseDir,
- EnvVars: []string{envNames.AssetBaseDir},
- },
-
- // ACCOUNTS FLAGS
- &cli.BoolFlag{
- Name: flagNames.AccountsOpenRegistration,
- Usage: "Allow anyone to submit an account signup request. If false, server will be invite-only.",
- Value: defaults.AccountsOpenRegistration,
- EnvVars: []string{envNames.AccountsOpenRegistration},
- },
- &cli.BoolFlag{
- Name: flagNames.AccountsApprovalRequired,
- Usage: "Do account signups require approval by an admin or moderator before user can log in? If false, new registrations will be automatically approved.",
- Value: defaults.AccountsRequireApproval,
- EnvVars: []string{envNames.AccountsApprovalRequired},
- },
- &cli.BoolFlag{
- Name: flagNames.AccountsReasonRequired,
- Usage: "Do new account signups require a reason to be submitted on registration?",
- Value: defaults.AccountsReasonRequired,
- EnvVars: []string{envNames.AccountsReasonRequired},
- },
-
- // MEDIA FLAGS
- &cli.IntFlag{
- Name: flagNames.MediaMaxImageSize,
- Usage: "Max size of accepted images in bytes",
- Value: defaults.MediaMaxImageSize,
- EnvVars: []string{envNames.MediaMaxImageSize},
- },
- &cli.IntFlag{
- Name: flagNames.MediaMaxVideoSize,
- Usage: "Max size of accepted videos in bytes",
- Value: defaults.MediaMaxVideoSize,
- EnvVars: []string{envNames.MediaMaxVideoSize},
- },
- &cli.IntFlag{
- Name: flagNames.MediaMinDescriptionChars,
- Usage: "Min required chars for an image description",
- Value: defaults.MediaMinDescriptionChars,
- EnvVars: []string{envNames.MediaMinDescriptionChars},
- },
- &cli.IntFlag{
- Name: flagNames.MediaMaxDescriptionChars,
- Usage: "Max permitted chars for an image description",
- Value: defaults.MediaMaxDescriptionChars,
- EnvVars: []string{envNames.MediaMaxDescriptionChars},
- },
-
- // STORAGE FLAGS
- &cli.StringFlag{
- Name: flagNames.StorageBackend,
- Usage: "Storage backend to use for media attachments",
- Value: defaults.StorageBackend,
- EnvVars: []string{envNames.StorageBackend},
- },
- &cli.StringFlag{
- Name: flagNames.StorageBasePath,
- Usage: "Full path to an already-created directory where gts should store/retrieve media files. Subfolders will be created within this dir.",
- Value: defaults.StorageBasePath,
- EnvVars: []string{envNames.StorageBasePath},
- },
- &cli.StringFlag{
- Name: flagNames.StorageServeProtocol,
- Usage: "Protocol to use for serving media attachments (use https if storage is local)",
- Value: defaults.StorageServeProtocol,
- EnvVars: []string{envNames.StorageServeProtocol},
- },
- &cli.StringFlag{
- Name: flagNames.StorageServeHost,
- Usage: "Hostname to serve media attachments from (use the same value as host if storage is local)",
- Value: defaults.StorageServeHost,
- EnvVars: []string{envNames.StorageServeHost},
- },
- &cli.StringFlag{
- Name: flagNames.StorageServeBasePath,
- Usage: "Path to append to protocol and hostname to create the base path from which media files will be served (default will mostly be fine)",
- Value: defaults.StorageServeBasePath,
- EnvVars: []string{envNames.StorageServeBasePath},
- },
-
- // STATUSES FLAGS
- &cli.IntFlag{
- Name: flagNames.StatusesMaxChars,
- Usage: "Max permitted characters for posted statuses",
- Value: defaults.StatusesMaxChars,
- EnvVars: []string{envNames.StatusesMaxChars},
- },
- &cli.IntFlag{
- Name: flagNames.StatusesCWMaxChars,
- Usage: "Max permitted characters for content/spoiler warnings on statuses",
- Value: defaults.StatusesCWMaxChars,
- EnvVars: []string{envNames.StatusesCWMaxChars},
- },
- &cli.IntFlag{
- Name: flagNames.StatusesPollMaxOptions,
- Usage: "Max amount of options permitted on a poll",
- Value: defaults.StatusesPollMaxOptions,
- EnvVars: []string{envNames.StatusesPollMaxOptions},
- },
- &cli.IntFlag{
- Name: flagNames.StatusesPollOptionMaxChars,
- Usage: "Max amount of characters for a poll option",
- Value: defaults.StatusesPollOptionMaxChars,
- EnvVars: []string{envNames.StatusesPollOptionMaxChars},
- },
- &cli.IntFlag{
- Name: flagNames.StatusesMaxMediaFiles,
- Usage: "Maximum number of media files/attachments per status",
- Value: defaults.StatusesMaxMediaFiles,
- EnvVars: []string{envNames.StatusesMaxMediaFiles},
- },
+ var v string
+ if Commit == "" {
+ v = Version
+ } else {
+ v = Version + " " + Commit[:7]
+ }
- // LETSENCRYPT FLAGS
- &cli.BoolFlag{
- Name: flagNames.LetsEncryptEnabled,
- Usage: "Enable letsencrypt TLS certs for this server. If set to true, then cert dir also needs to be set (or take the default).",
- Value: defaults.LetsEncryptEnabled,
- EnvVars: []string{envNames.LetsEncryptEnabled},
- },
- &cli.StringFlag{
- Name: flagNames.LetsEncryptCertDir,
- Usage: "Directory to store acquired letsencrypt certificates.",
- Value: defaults.LetsEncryptCertDir,
- EnvVars: []string{envNames.LetsEncryptCertDir},
- },
- &cli.StringFlag{
- Name: flagNames.LetsEncryptEmailAddress,
- Usage: "Email address to use when requesting letsencrypt certs. Will receive updates on cert expiry etc.",
- Value: defaults.LetsEncryptEmailAddress,
- EnvVars: []string{envNames.LetsEncryptEmailAddress},
- },
- },
- Commands: []*cli.Command{
- {
- Name: "server",
- Usage: "gotosocial server-related tasks",
- Subcommands: []*cli.Command{
- {
- Name: "start",
- Usage: "start the gotosocial server",
- Action: func(c *cli.Context) error {
- return runAction(c, server.Start)
- },
- },
- },
- },
- {
- Name: "admin",
- Usage: "gotosocial admin-related tasks",
- Subcommands: []*cli.Command{
- {
- Name: "account",
- Usage: "admin commands related to accounts",
- Subcommands: []*cli.Command{
- {
- Name: "create",
- Usage: "create a new account",
- Flags: []cli.Flag{
- &cli.StringFlag{
- Name: config.UsernameFlag,
- Usage: config.UsernameUsage,
- },
- &cli.StringFlag{
- Name: config.EmailFlag,
- Usage: config.EmailUsage,
- },
- &cli.StringFlag{
- Name: config.PasswordFlag,
- Usage: config.PasswordUsage,
- },
- },
- Action: func(c *cli.Context) error {
- return runAction(c, account.Create)
- },
- },
- {
- Name: "confirm",
- Usage: "confirm an existing account manually, thereby skipping email confirmation",
- Flags: []cli.Flag{
- &cli.StringFlag{
- Name: config.UsernameFlag,
- Usage: config.UsernameUsage,
- },
- },
- Action: func(c *cli.Context) error {
- return runAction(c, account.Confirm)
- },
- },
- {
- Name: "promote",
- Usage: "promote an account to admin",
- Flags: []cli.Flag{
- &cli.StringFlag{
- Name: config.UsernameFlag,
- Usage: config.UsernameUsage,
- },
- },
- Action: func(c *cli.Context) error {
- return runAction(c, account.Promote)
- },
- },
- {
- Name: "demote",
- Usage: "demote an account from admin to normal user",
- Flags: []cli.Flag{
- &cli.StringFlag{
- Name: config.UsernameFlag,
- Usage: config.UsernameUsage,
- },
- },
- Action: func(c *cli.Context) error {
- return runAction(c, account.Demote)
- },
- },
- {
- Name: "disable",
- Usage: "prevent an account from signing in or posting etc, but don't delete anything",
- Flags: []cli.Flag{
- &cli.StringFlag{
- Name: config.UsernameFlag,
- Usage: config.UsernameUsage,
- },
- },
- Action: func(c *cli.Context) error {
- return runAction(c, account.Disable)
- },
- },
- {
- Name: "suspend",
- Usage: "completely remove an account and all of its posts, media, etc",
- Flags: []cli.Flag{
- &cli.StringFlag{
- Name: config.UsernameFlag,
- Usage: config.UsernameUsage,
- },
- },
- Action: func(c *cli.Context) error {
- return runAction(c, account.Suspend)
- },
- },
- },
- },
- },
- },
- {
- Name: "testrig",
- Usage: "gotosocial testrig tasks",
- Subcommands: []*cli.Command{
- {
- Name: "start",
- Usage: "start the gotosocial testrig",
- Action: func(c *cli.Context) error {
- return runAction(c, testrig.Start)
- },
- },
- },
- },
- },
+ app := &cli.App{
+ Version: v,
+ Usage: "a fediverse social media server",
+ Flags: getFlags(),
+ Commands: getCommands(),
}
err := app.Run(os.Args)
@@ -413,26 +52,3 @@ func main() {
logrus.Fatal(err)
}
}
-
-// runAction builds up the config and logger necessary for any
-// gotosocial action, and then executes the action.
-func runAction(c *cli.Context, a cliactions.GTSAction) error {
-
- // create a new *config.Config based on the config path provided...
- conf, err := config.FromFile(c.String(config.GetFlagNames().ConfigPath))
- if err != nil {
- return fmt.Errorf("error creating config: %s", err)
- }
- // ... and the flags set on the *cli.Context by urfave
- if err := conf.ParseCLIFlags(c, c.App.Version); err != nil {
- return fmt.Errorf("error parsing config: %s", err)
- }
-
- // create a logger with the log level, formatting, and output splitter already set
- log, err := log.New(conf.LogLevel)
- if err != nil {
- return fmt.Errorf("error creating logger: %s", err)
- }
-
- return a(c.Context, conf, log)
-}
diff --git a/cmd/gotosocial/mediaflags.go b/cmd/gotosocial/mediaflags.go
new file mode 100644
index 000000000..abf009a89
--- /dev/null
+++ b/cmd/gotosocial/mediaflags.go
@@ -0,0 +1,53 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package main
+
+import (
+ "github.com/superseriousbusiness/gotosocial/internal/config"
+ "github.com/urfave/cli/v2"
+)
+
+func mediaFlags(flagNames, envNames config.Flags, defaults config.Defaults) []cli.Flag {
+ return []cli.Flag{
+ &cli.IntFlag{
+ Name: flagNames.MediaMaxImageSize,
+ Usage: "Max size of accepted images in bytes",
+ Value: defaults.MediaMaxImageSize,
+ EnvVars: []string{envNames.MediaMaxImageSize},
+ },
+ &cli.IntFlag{
+ Name: flagNames.MediaMaxVideoSize,
+ Usage: "Max size of accepted videos in bytes",
+ Value: defaults.MediaMaxVideoSize,
+ EnvVars: []string{envNames.MediaMaxVideoSize},
+ },
+ &cli.IntFlag{
+ Name: flagNames.MediaMinDescriptionChars,
+ Usage: "Min required chars for an image description",
+ Value: defaults.MediaMinDescriptionChars,
+ EnvVars: []string{envNames.MediaMinDescriptionChars},
+ },
+ &cli.IntFlag{
+ Name: flagNames.MediaMaxDescriptionChars,
+ Usage: "Max permitted chars for an image description",
+ Value: defaults.MediaMaxDescriptionChars,
+ EnvVars: []string{envNames.MediaMaxDescriptionChars},
+ },
+ }
+}
diff --git a/cmd/gotosocial/oidcflags.go b/cmd/gotosocial/oidcflags.go
new file mode 100644
index 000000000..93b86b166
--- /dev/null
+++ b/cmd/gotosocial/oidcflags.go
@@ -0,0 +1,71 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package main
+
+import (
+ "github.com/superseriousbusiness/gotosocial/internal/config"
+ "github.com/urfave/cli/v2"
+)
+
+func oidcFlags(flagNames, envNames config.Flags, defaults config.Defaults) []cli.Flag {
+ return []cli.Flag{
+ &cli.BoolFlag{
+ Name: flagNames.OIDCEnabled,
+ Usage: "Enabled OIDC authorization for this instance. If set to true, then the other OIDC flags must also be set.",
+ Value: defaults.OIDCEnabled,
+ EnvVars: []string{envNames.OIDCEnabled},
+ },
+ &cli.StringFlag{
+ Name: flagNames.OIDCIdpName,
+ Usage: "Name of the OIDC identity provider. Will be shown to the user when logging in.",
+ Value: defaults.OIDCIdpName,
+ EnvVars: []string{envNames.OIDCIdpName},
+ },
+ &cli.BoolFlag{
+ Name: flagNames.OIDCSkipVerification,
+ Usage: "Skip verification of tokens returned by the OIDC provider. Should only be set to 'true' for testing purposes, never in a production environment!",
+ Value: defaults.OIDCSkipVerification,
+ EnvVars: []string{envNames.OIDCSkipVerification},
+ },
+ &cli.StringFlag{
+ Name: flagNames.OIDCIssuer,
+ Usage: "Address of the OIDC issuer. Should be the web address, including protocol, at which the issuer can be reached. Eg., 'https://example.org/auth'",
+ Value: defaults.OIDCIssuer,
+ EnvVars: []string{envNames.OIDCIssuer},
+ },
+ &cli.StringFlag{
+ Name: flagNames.OIDCClientID,
+ Usage: "ClientID of GoToSocial, as registered with the OIDC provider.",
+ Value: defaults.OIDCClientID,
+ EnvVars: []string{envNames.OIDCClientID},
+ },
+ &cli.StringFlag{
+ Name: flagNames.OIDCClientSecret,
+ Usage: "ClientSecret of GoToSocial, as registered with the OIDC provider.",
+ Value: defaults.OIDCClientSecret,
+ EnvVars: []string{envNames.OIDCClientSecret},
+ },
+ &cli.StringSliceFlag{
+ Name: flagNames.OIDCScopes,
+ Usage: "ClientSecret of GoToSocial, as registered with the OIDC provider.",
+ Value: cli.NewStringSlice(defaults.OIDCScopes...),
+ EnvVars: []string{envNames.OIDCScopes},
+ },
+ }
+}
diff --git a/cmd/gotosocial/runaction.go b/cmd/gotosocial/runaction.go
new file mode 100644
index 000000000..fc548d85f
--- /dev/null
+++ b/cmd/gotosocial/runaction.go
@@ -0,0 +1,51 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package main
+
+import (
+ "fmt"
+
+ "github.com/superseriousbusiness/gotosocial/internal/cliactions"
+ "github.com/superseriousbusiness/gotosocial/internal/config"
+ "github.com/superseriousbusiness/gotosocial/internal/log"
+ "github.com/urfave/cli/v2"
+)
+
+// runAction builds up the config and logger necessary for any
+// gotosocial action, and then executes the action.
+func runAction(c *cli.Context, a cliactions.GTSAction) error {
+
+ // create a new *config.Config based on the config path provided...
+ conf, err := config.FromFile(c.String(config.GetFlagNames().ConfigPath))
+ if err != nil {
+ return fmt.Errorf("error creating config: %s", err)
+ }
+ // ... and the flags set on the *cli.Context by urfave
+ if err := conf.ParseCLIFlags(c, c.App.Version); err != nil {
+ return fmt.Errorf("error parsing config: %s", err)
+ }
+
+ // create a logger with the log level, formatting, and output splitter already set
+ log, err := log.New(conf.LogLevel)
+ if err != nil {
+ return fmt.Errorf("error creating logger: %s", err)
+ }
+
+ return a(c.Context, conf, log)
+}
diff --git a/cmd/gotosocial/servercommands.go b/cmd/gotosocial/servercommands.go
new file mode 100644
index 000000000..7a1692b79
--- /dev/null
+++ b/cmd/gotosocial/servercommands.go
@@ -0,0 +1,42 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package main
+
+import (
+ "github.com/superseriousbusiness/gotosocial/internal/cliactions/server"
+ "github.com/urfave/cli/v2"
+)
+
+func serverCommands() []*cli.Command {
+ return []*cli.Command{
+ {
+ Name: "server",
+ Usage: "gotosocial server-related tasks",
+ Subcommands: []*cli.Command{
+ {
+ Name: "start",
+ Usage: "start the gotosocial server",
+ Action: func(c *cli.Context) error {
+ return runAction(c, server.Start)
+ },
+ },
+ },
+ },
+ }
+}
diff --git a/cmd/gotosocial/statusesflags.go b/cmd/gotosocial/statusesflags.go
new file mode 100644
index 000000000..af52dc0ae
--- /dev/null
+++ b/cmd/gotosocial/statusesflags.go
@@ -0,0 +1,59 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package main
+
+import (
+ "github.com/superseriousbusiness/gotosocial/internal/config"
+ "github.com/urfave/cli/v2"
+)
+
+func statusesFlags(flagNames, envNames config.Flags, defaults config.Defaults) []cli.Flag {
+ return []cli.Flag{
+ &cli.IntFlag{
+ Name: flagNames.StatusesMaxChars,
+ Usage: "Max permitted characters for posted statuses",
+ Value: defaults.StatusesMaxChars,
+ EnvVars: []string{envNames.StatusesMaxChars},
+ },
+ &cli.IntFlag{
+ Name: flagNames.StatusesCWMaxChars,
+ Usage: "Max permitted characters for content/spoiler warnings on statuses",
+ Value: defaults.StatusesCWMaxChars,
+ EnvVars: []string{envNames.StatusesCWMaxChars},
+ },
+ &cli.IntFlag{
+ Name: flagNames.StatusesPollMaxOptions,
+ Usage: "Max amount of options permitted on a poll",
+ Value: defaults.StatusesPollMaxOptions,
+ EnvVars: []string{envNames.StatusesPollMaxOptions},
+ },
+ &cli.IntFlag{
+ Name: flagNames.StatusesPollOptionMaxChars,
+ Usage: "Max amount of characters for a poll option",
+ Value: defaults.StatusesPollOptionMaxChars,
+ EnvVars: []string{envNames.StatusesPollOptionMaxChars},
+ },
+ &cli.IntFlag{
+ Name: flagNames.StatusesMaxMediaFiles,
+ Usage: "Maximum number of media files/attachments per status",
+ Value: defaults.StatusesMaxMediaFiles,
+ EnvVars: []string{envNames.StatusesMaxMediaFiles},
+ },
+ }
+}
diff --git a/cmd/gotosocial/storageflags.go b/cmd/gotosocial/storageflags.go
new file mode 100644
index 000000000..326e1fae5
--- /dev/null
+++ b/cmd/gotosocial/storageflags.go
@@ -0,0 +1,59 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package main
+
+import (
+ "github.com/superseriousbusiness/gotosocial/internal/config"
+ "github.com/urfave/cli/v2"
+)
+
+func storageFlags(flagNames, envNames config.Flags, defaults config.Defaults) []cli.Flag {
+ return []cli.Flag{
+ &cli.StringFlag{
+ Name: flagNames.StorageBackend,
+ Usage: "Storage backend to use for media attachments",
+ Value: defaults.StorageBackend,
+ EnvVars: []string{envNames.StorageBackend},
+ },
+ &cli.StringFlag{
+ Name: flagNames.StorageBasePath,
+ Usage: "Full path to an already-created directory where gts should store/retrieve media files. Subfolders will be created within this dir.",
+ Value: defaults.StorageBasePath,
+ EnvVars: []string{envNames.StorageBasePath},
+ },
+ &cli.StringFlag{
+ Name: flagNames.StorageServeProtocol,
+ Usage: "Protocol to use for serving media attachments (use https if storage is local)",
+ Value: defaults.StorageServeProtocol,
+ EnvVars: []string{envNames.StorageServeProtocol},
+ },
+ &cli.StringFlag{
+ Name: flagNames.StorageServeHost,
+ Usage: "Hostname to serve media attachments from (use the same value as host if storage is local)",
+ Value: defaults.StorageServeHost,
+ EnvVars: []string{envNames.StorageServeHost},
+ },
+ &cli.StringFlag{
+ Name: flagNames.StorageServeBasePath,
+ Usage: "Path to append to protocol and hostname to create the base path from which media files will be served (default will mostly be fine)",
+ Value: defaults.StorageServeBasePath,
+ EnvVars: []string{envNames.StorageServeBasePath},
+ },
+ }
+}
diff --git a/cmd/gotosocial/templateflags.go b/cmd/gotosocial/templateflags.go
new file mode 100644
index 000000000..c7bf93bc0
--- /dev/null
+++ b/cmd/gotosocial/templateflags.go
@@ -0,0 +1,41 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package main
+
+import (
+ "github.com/superseriousbusiness/gotosocial/internal/config"
+ "github.com/urfave/cli/v2"
+)
+
+func templateFlags(flagNames, envNames config.Flags, defaults config.Defaults) []cli.Flag {
+ return []cli.Flag{
+ &cli.StringFlag{
+ Name: flagNames.TemplateBaseDir,
+ Usage: "Basedir for html templating files for rendering pages and composing emails.",
+ Value: defaults.TemplateBaseDir,
+ EnvVars: []string{envNames.TemplateBaseDir},
+ },
+ &cli.StringFlag{
+ Name: flagNames.AssetBaseDir,
+ Usage: "Directory to serve static assets from, accessible at example.com/assets/",
+ Value: defaults.AssetBaseDir,
+ EnvVars: []string{envNames.AssetBaseDir},
+ },
+ }
+}
diff --git a/cmd/gotosocial/testrigcommands.go b/cmd/gotosocial/testrigcommands.go
new file mode 100644
index 000000000..9b9aa3806
--- /dev/null
+++ b/cmd/gotosocial/testrigcommands.go
@@ -0,0 +1,42 @@
+/*
+ GoToSocial
+ Copyright (C) 2021 GoToSocial Authors admin@gotosocial.org
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU Affero General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU Affero General Public License for more details.
+
+ You should have received a copy of the GNU Affero General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>.
+*/
+
+package main
+
+import (
+ "github.com/superseriousbusiness/gotosocial/internal/cliactions/testrig"
+ "github.com/urfave/cli/v2"
+)
+
+func testrigCommands() []*cli.Command {
+ return []*cli.Command{
+ {
+ Name: "testrig",
+ Usage: "gotosocial testrig tasks",
+ Subcommands: []*cli.Command{
+ {
+ Name: "start",
+ Usage: "start the gotosocial testrig",
+ Action: func(c *cli.Context) error {
+ return runAction(c, testrig.Start)
+ },
+ },
+ },
+ },
+ }
+}