mirror of
https://github.com/superseriousbusiness/gotosocial.git
synced 2025-10-29 07:12:25 -05:00
Oidc (#109)
* add oidc config * inching forward with oidc idp * lil webfingy fix * bit more progress * further oidc * oidc now working * document dex config * replace broken images * add additional credits * tiny doc update * update * add oidc config * inching forward with oidc idp * bit more progress * further oidc * oidc now working * document dex config * replace broken images * add additional credits * tiny doc update * update * document * docs + comments
This commit is contained in:
parent
113186ce4e
commit
05e9af089c
61 changed files with 2597 additions and 757 deletions
47
cmd/gotosocial/accountsflags.go
Normal file
47
cmd/gotosocial/accountsflags.go
Normal file
|
|
@ -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},
|
||||
},
|
||||
}
|
||||
}
|
||||
128
cmd/gotosocial/admincommands.go
Normal file
128
cmd/gotosocial/admincommands.go
Normal file
|
|
@ -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)
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
37
cmd/gotosocial/commands.go
Normal file
37
cmd/gotosocial/commands.go
Normal file
|
|
@ -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
|
||||
}
|
||||
77
cmd/gotosocial/databaseflags.go
Normal file
77
cmd/gotosocial/databaseflags.go
Normal file
|
|
@ -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},
|
||||
},
|
||||
}
|
||||
}
|
||||
48
cmd/gotosocial/flags.go
Normal file
48
cmd/gotosocial/flags.go
Normal file
|
|
@ -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
|
||||
}
|
||||
66
cmd/gotosocial/generalflags.go
Normal file
66
cmd/gotosocial/generalflags.go
Normal file
|
|
@ -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},
|
||||
},
|
||||
}
|
||||
}
|
||||
47
cmd/gotosocial/letsencryptflags.go
Normal file
47
cmd/gotosocial/letsencryptflags.go
Normal file
|
|
@ -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},
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
@ -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()
|
||||
var v string
|
||||
if Commit == "" {
|
||||
v = Version
|
||||
} else {
|
||||
v = Version + " " + Commit[:7]
|
||||
}
|
||||
|
||||
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},
|
||||
},
|
||||
|
||||
// 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)
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
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)
|
||||
}
|
||||
|
|
|
|||
53
cmd/gotosocial/mediaflags.go
Normal file
53
cmd/gotosocial/mediaflags.go
Normal file
|
|
@ -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},
|
||||
},
|
||||
}
|
||||
}
|
||||
71
cmd/gotosocial/oidcflags.go
Normal file
71
cmd/gotosocial/oidcflags.go
Normal file
|
|
@ -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},
|
||||
},
|
||||
}
|
||||
}
|
||||
51
cmd/gotosocial/runaction.go
Normal file
51
cmd/gotosocial/runaction.go
Normal file
|
|
@ -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)
|
||||
}
|
||||
42
cmd/gotosocial/servercommands.go
Normal file
42
cmd/gotosocial/servercommands.go
Normal file
|
|
@ -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)
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
59
cmd/gotosocial/statusesflags.go
Normal file
59
cmd/gotosocial/statusesflags.go
Normal file
|
|
@ -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},
|
||||
},
|
||||
}
|
||||
}
|
||||
59
cmd/gotosocial/storageflags.go
Normal file
59
cmd/gotosocial/storageflags.go
Normal file
|
|
@ -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},
|
||||
},
|
||||
}
|
||||
}
|
||||
41
cmd/gotosocial/templateflags.go
Normal file
41
cmd/gotosocial/templateflags.go
Normal file
|
|
@ -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},
|
||||
},
|
||||
}
|
||||
}
|
||||
42
cmd/gotosocial/testrigcommands.go
Normal file
42
cmd/gotosocial/testrigcommands.go
Normal file
|
|
@ -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)
|
||||
},
|
||||
},
|
||||
},
|
||||
},
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue