2021-11-23 16:45:38 +07:00
package commands
import (
2022-06-14 19:40:00 +07:00
"fmt"
"strings"
2021-11-23 16:45:38 +07:00
"github.com/spf13/cobra"
2022-04-08 06:01:01 +07:00
"github.com/authelia/authelia/v4/internal/configuration/schema"
2021-11-23 16:45:38 +07:00
)
2022-06-14 19:40:00 +07:00
func newStorageCmd ( ) ( cmd * cobra . Command ) {
2021-11-23 16:45:38 +07:00
cmd = & cobra . Command {
Use : "storage" ,
2022-06-14 19:40:00 +07:00
Short : cmdAutheliaStorageShort ,
Long : cmdAutheliaStorageLong ,
Example : cmdAutheliaStorageExample ,
2021-11-23 16:45:38 +07:00
Args : cobra . NoArgs ,
PersistentPreRunE : storagePersistentPreRunE ,
}
2022-03-04 10:39:22 +07:00
cmdWithConfigFlags ( cmd , true , [ ] string { "configuration.yml" } )
2021-11-23 16:45:38 +07:00
2021-11-25 08:56:58 +07:00
cmd . PersistentFlags ( ) . String ( "encryption-key" , "" , "the storage encryption key to use" )
2021-11-23 16:45:38 +07:00
cmd . PersistentFlags ( ) . String ( "sqlite.path" , "" , "the SQLite database path" )
cmd . PersistentFlags ( ) . String ( "mysql.host" , "" , "the MySQL hostname" )
cmd . PersistentFlags ( ) . Int ( "mysql.port" , 3306 , "the MySQL port" )
cmd . PersistentFlags ( ) . String ( "mysql.database" , "authelia" , "the MySQL database name" )
cmd . PersistentFlags ( ) . String ( "mysql.username" , "authelia" , "the MySQL username" )
cmd . PersistentFlags ( ) . String ( "mysql.password" , "" , "the MySQL password" )
cmd . PersistentFlags ( ) . String ( "postgres.host" , "" , "the PostgreSQL hostname" )
cmd . PersistentFlags ( ) . Int ( "postgres.port" , 5432 , "the PostgreSQL port" )
cmd . PersistentFlags ( ) . String ( "postgres.database" , "authelia" , "the PostgreSQL database name" )
2021-12-02 12:36:03 +07:00
cmd . PersistentFlags ( ) . String ( "postgres.schema" , "public" , "the PostgreSQL schema name" )
2021-11-23 16:45:38 +07:00
cmd . PersistentFlags ( ) . String ( "postgres.username" , "authelia" , "the PostgreSQL username" )
cmd . PersistentFlags ( ) . String ( "postgres.password" , "" , "the PostgreSQL password" )
2021-12-02 12:36:03 +07:00
cmd . PersistentFlags ( ) . String ( "postgres.ssl.mode" , "disable" , "the PostgreSQL ssl mode" )
cmd . PersistentFlags ( ) . String ( "postgres.ssl.root_certificate" , "" , "the PostgreSQL ssl root certificate file location" )
cmd . PersistentFlags ( ) . String ( "postgres.ssl.certificate" , "" , "the PostgreSQL ssl certificate file location" )
cmd . PersistentFlags ( ) . String ( "postgres.ssl.key" , "" , "the PostgreSQL ssl key file location" )
2021-11-23 16:45:38 +07:00
cmd . AddCommand (
newStorageMigrateCmd ( ) ,
newStorageSchemaInfoCmd ( ) ,
2021-11-25 08:56:58 +07:00
newStorageEncryptionCmd ( ) ,
2022-04-09 14:13:19 +07:00
newStorageUserCmd ( ) ,
)
return cmd
}
2022-06-14 19:40:00 +07:00
func newStorageEncryptionCmd ( ) ( cmd * cobra . Command ) {
2022-04-09 14:13:19 +07:00
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "encryption" ,
Short : cmdAutheliaStorageEncryptionShort ,
Long : cmdAutheliaStorageEncryptionLong ,
Example : cmdAutheliaStorageEncryptionExample ,
2022-04-09 14:13:19 +07:00
}
cmd . AddCommand (
2022-06-14 19:40:00 +07:00
newStorageEncryptionChangeKeyCmd ( ) ,
newStorageEncryptionCheckCmd ( ) ,
2021-11-25 08:56:58 +07:00
)
return cmd
}
2022-06-14 19:40:00 +07:00
func newStorageEncryptionCheckCmd ( ) ( cmd * cobra . Command ) {
2022-04-09 14:13:19 +07:00
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "check" ,
Short : cmdAutheliaStorageEncryptionCheckShort ,
Long : cmdAutheliaStorageEncryptionCheckLong ,
Example : cmdAutheliaStorageEncryptionCheckExample ,
RunE : storageSchemaEncryptionCheckRunE ,
2022-04-09 14:13:19 +07:00
}
2022-06-14 19:40:00 +07:00
cmd . Flags ( ) . Bool ( "verbose" , false , "enables verbose checking of every row of encrypted data" )
2022-04-09 14:13:19 +07:00
return cmd
}
2022-06-14 19:40:00 +07:00
func newStorageEncryptionChangeKeyCmd ( ) ( cmd * cobra . Command ) {
2022-04-09 14:13:19 +07:00
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "change-key" ,
Short : cmdAutheliaStorageEncryptionChangeKeyShort ,
Long : cmdAutheliaStorageEncryptionChangeKeyLong ,
Example : cmdAutheliaStorageEncryptionChangeKeyExample ,
RunE : storageSchemaEncryptionChangeKeyRunE ,
2022-04-09 14:13:19 +07:00
}
2022-06-14 19:40:00 +07:00
cmd . Flags ( ) . String ( "new-encryption-key" , "" , "the new key to encrypt the data with" )
2022-04-09 14:13:19 +07:00
return cmd
}
2022-06-14 19:40:00 +07:00
func newStorageUserCmd ( ) ( cmd * cobra . Command ) {
2022-04-09 14:13:19 +07:00
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "user" ,
Short : cmdAutheliaStorageUserShort ,
Long : cmdAutheliaStorageUserLong ,
Example : cmdAutheliaStorageUserExample ,
2022-04-09 14:13:19 +07:00
}
2022-06-14 19:40:00 +07:00
cmd . AddCommand (
newStorageUserIdentifiersCmd ( ) ,
newStorageUserTOTPCmd ( ) ,
)
2022-04-09 14:13:19 +07:00
return cmd
}
2022-06-14 19:40:00 +07:00
func newStorageUserIdentifiersCmd ( ) ( cmd * cobra . Command ) {
2022-04-25 15:49:18 +07:00
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "identifiers" ,
Short : cmdAutheliaStorageUserIdentifiersShort ,
Long : cmdAutheliaStorageUserIdentifiersLong ,
Example : cmdAutheliaStorageUserIdentifiersExample ,
2022-04-25 15:49:18 +07:00
}
2022-06-14 19:40:00 +07:00
cmd . AddCommand (
newStorageUserIdentifiersExportCmd ( ) ,
newStorageUserIdentifiersImportCmd ( ) ,
newStorageUserIdentifiersGenerateCmd ( ) ,
newStorageUserIdentifiersAddCmd ( ) ,
)
2022-04-25 15:49:18 +07:00
return cmd
}
2022-06-14 19:40:00 +07:00
func newStorageUserIdentifiersExportCmd ( ) ( cmd * cobra . Command ) {
2022-04-09 14:13:19 +07:00
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "export" ,
Short : cmdAutheliaStorageUserIdentifiersExportShort ,
Long : cmdAutheliaStorageUserIdentifiersExportLong ,
Example : cmdAutheliaStorageUserIdentifiersExportExample ,
RunE : storageUserIdentifiersExport ,
2022-04-09 14:13:19 +07:00
}
2022-06-14 19:40:00 +07:00
cmd . Flags ( ) . StringP ( "file" , "f" , "user-opaque-identifiers.yml" , "The file name for the YAML export" )
2022-04-09 14:13:19 +07:00
return cmd
}
2022-06-14 19:40:00 +07:00
func newStorageUserIdentifiersImportCmd ( ) ( cmd * cobra . Command ) {
2021-11-25 08:56:58 +07:00
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "import" ,
Short : cmdAutheliaStorageUserIdentifiersImportShort ,
Long : cmdAutheliaStorageUserIdentifiersImportLong ,
Example : cmdAutheliaStorageUserIdentifiersImportExample ,
RunE : storageUserIdentifiersImport ,
2021-11-25 08:56:58 +07:00
}
2022-06-14 19:40:00 +07:00
cmd . Flags ( ) . StringP ( "file" , "f" , "user-opaque-identifiers.yml" , "The file name for the YAML import" )
2021-11-23 16:45:38 +07:00
return cmd
}
2022-06-14 19:40:00 +07:00
func newStorageUserIdentifiersGenerateCmd ( ) ( cmd * cobra . Command ) {
2021-11-25 08:56:58 +07:00
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "generate" ,
Short : cmdAutheliaStorageUserIdentifiersGenerateShort ,
Long : cmdAutheliaStorageUserIdentifiersGenerateLong ,
Example : cmdAutheliaStorageUserIdentifiersGenerateExample ,
RunE : storageUserIdentifiersGenerate ,
2021-11-25 08:56:58 +07:00
}
2022-06-14 19:40:00 +07:00
cmd . Flags ( ) . StringSlice ( "users" , nil , "The list of users to generate the opaque identifiers for" )
cmd . Flags ( ) . StringSlice ( "services" , [ ] string { identifierServiceOpenIDConnect } , fmt . Sprintf ( "The list of services to generate the opaque identifiers for, valid values are: %s" , strings . Join ( validIdentifierServices , ", " ) ) )
cmd . Flags ( ) . StringSlice ( "sectors" , [ ] string { "" } , "The list of sectors to generate identifiers for" )
2021-11-25 08:56:58 +07:00
return cmd
}
2022-06-14 19:40:00 +07:00
func newStorageUserIdentifiersAddCmd ( ) ( cmd * cobra . Command ) {
2021-11-25 08:56:58 +07:00
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "add <username>" ,
Short : cmdAutheliaStorageUserIdentifiersAddShort ,
Long : cmdAutheliaStorageUserIdentifiersAddLong ,
Example : cmdAutheliaStorageUserIdentifiersAddExample ,
Args : cobra . ExactArgs ( 1 ) ,
RunE : storageUserIdentifiersAdd ,
2021-11-25 08:56:58 +07:00
}
2022-06-14 19:40:00 +07:00
cmd . Flags ( ) . String ( "identifier" , "" , "The optional version 4 UUID to use, if not set a random one will be used" )
cmd . Flags ( ) . String ( "service" , identifierServiceOpenIDConnect , fmt . Sprintf ( "The service to add the identifier for, valid values are: %s" , strings . Join ( validIdentifierServices , ", " ) ) )
cmd . Flags ( ) . String ( "sector" , "" , "The sector identifier to use (should usually be blank)" )
2021-11-25 08:56:58 +07:00
return cmd
}
2022-06-14 19:40:00 +07:00
func newStorageUserTOTPCmd ( ) ( cmd * cobra . Command ) {
2021-11-25 08:56:58 +07:00
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "totp" ,
Short : cmdAutheliaStorageUserTOTPShort ,
Long : cmdAutheliaStorageUserTOTPLong ,
Example : cmdAutheliaStorageUserTOTPExample ,
2021-11-25 08:56:58 +07:00
}
2021-12-01 19:11:29 +07:00
cmd . AddCommand (
2022-06-14 19:40:00 +07:00
newStorageUserTOTPGenerateCmd ( ) ,
newStorageUserTOTPDeleteCmd ( ) ,
newStorageUserTOTPExportCmd ( ) ,
2021-12-01 19:11:29 +07:00
)
2021-11-25 08:56:58 +07:00
return cmd
}
2022-06-14 19:40:00 +07:00
func newStorageUserTOTPGenerateCmd ( ) ( cmd * cobra . Command ) {
2021-11-25 08:56:58 +07:00
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "generate <username>" ,
Short : cmdAutheliaStorageUserTOTPGenerateShort ,
Long : cmdAutheliaStorageUserTOTPGenerateLong ,
Example : cmdAutheliaStorageUserTOTPGenerateExample ,
RunE : storageTOTPGenerateRunE ,
Args : cobra . ExactArgs ( 1 ) ,
2021-12-01 19:11:29 +07:00
}
2022-04-08 06:01:01 +07:00
cmd . Flags ( ) . String ( "secret" , "" , "Optionally set the TOTP shared secret as base32 encoded bytes (no padding), it's recommended to not set this option unless you're restoring an TOTP config" )
cmd . Flags ( ) . Uint ( "secret-size" , schema . TOTPSecretSizeDefault , "set the TOTP secret size" )
2021-12-01 19:11:29 +07:00
cmd . Flags ( ) . Uint ( "period" , 30 , "set the TOTP period" )
cmd . Flags ( ) . Uint ( "digits" , 6 , "set the TOTP digits" )
cmd . Flags ( ) . String ( "algorithm" , "SHA1" , "set the TOTP algorithm" )
cmd . Flags ( ) . String ( "issuer" , "Authelia" , "set the TOTP issuer" )
cmd . Flags ( ) . BoolP ( "force" , "f" , false , "forces the TOTP configuration to be generated regardless if it exists or not" )
2022-03-02 14:50:36 +07:00
cmd . Flags ( ) . StringP ( "path" , "p" , "" , "path to a file to create a PNG file with the QR code (optional)" )
2021-12-01 19:11:29 +07:00
return cmd
}
2022-06-14 19:40:00 +07:00
func newStorageUserTOTPDeleteCmd ( ) ( cmd * cobra . Command ) {
2021-12-01 19:11:29 +07:00
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "delete <username>" ,
Short : cmdAutheliaStorageUserTOTPDeleteShort ,
Long : cmdAutheliaStorageUserTOTPDeleteLong ,
Example : cmdAutheliaStorageUserTOTPDeleteExample ,
RunE : storageTOTPDeleteRunE ,
Args : cobra . ExactArgs ( 1 ) ,
2021-12-01 19:11:29 +07:00
}
return cmd
}
2022-06-14 19:40:00 +07:00
func newStorageUserTOTPExportCmd ( ) ( cmd * cobra . Command ) {
2021-12-01 19:11:29 +07:00
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "export" ,
Short : cmdAutheliaStorageUserTOTPExportShort ,
Long : cmdAutheliaStorageUserTOTPExportLong ,
Example : cmdAutheliaStorageUserTOTPExportExample ,
RunE : storageTOTPExportRunE ,
2021-11-25 08:56:58 +07:00
}
2022-06-14 19:40:00 +07:00
cmd . Flags ( ) . String ( "format" , storageTOTPExportFormatURI , fmt . Sprintf ( "sets the output format, valid values are: %s" , strings . Join ( validStorageTOTPExportFormats , ", " ) ) )
2022-03-02 14:50:36 +07:00
cmd . Flags ( ) . String ( "dir" , "" , "used with the png output format to specify which new directory to save the files in" )
2021-11-25 08:56:58 +07:00
return cmd
}
2021-11-23 16:45:38 +07:00
func newStorageSchemaInfoCmd ( ) ( cmd * cobra . Command ) {
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "schema-info" ,
Short : cmdAutheliaStorageSchemaInfoShort ,
Long : cmdAutheliaStorageSchemaInfoLong ,
Example : cmdAutheliaStorageSchemaInfoExample ,
RunE : storageSchemaInfoRunE ,
2021-11-23 16:45:38 +07:00
}
return cmd
}
// NewMigrationCmd returns a new Migration Cmd.
func newStorageMigrateCmd ( ) ( cmd * cobra . Command ) {
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "migrate" ,
Short : cmdAutheliaStorageMigrateShort ,
Long : cmdAutheliaStorageMigrateLong ,
Example : cmdAutheliaStorageMigrateExample ,
Args : cobra . NoArgs ,
2021-11-23 16:45:38 +07:00
}
cmd . AddCommand (
newStorageMigrateUpCmd ( ) , newStorageMigrateDownCmd ( ) ,
newStorageMigrateListUpCmd ( ) , newStorageMigrateListDownCmd ( ) ,
newStorageMigrateHistoryCmd ( ) ,
)
return cmd
}
func newStorageMigrateHistoryCmd ( ) ( cmd * cobra . Command ) {
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "history" ,
Short : cmdAutheliaStorageMigrateHistoryShort ,
Long : cmdAutheliaStorageMigrateHistoryLong ,
Example : cmdAutheliaStorageMigrateHistoryExample ,
Args : cobra . NoArgs ,
RunE : storageMigrateHistoryRunE ,
2021-11-23 16:45:38 +07:00
}
return cmd
}
func newStorageMigrateListUpCmd ( ) ( cmd * cobra . Command ) {
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "list-up" ,
Short : cmdAutheliaStorageMigrateListUpShort ,
Long : cmdAutheliaStorageMigrateListUpLong ,
Example : cmdAutheliaStorageMigrateListUpExample ,
Args : cobra . NoArgs ,
RunE : newStorageMigrateListRunE ( true ) ,
2021-11-23 16:45:38 +07:00
}
return cmd
}
func newStorageMigrateListDownCmd ( ) ( cmd * cobra . Command ) {
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : "list-down" ,
Short : cmdAutheliaStorageMigrateListDownShort ,
Long : cmdAutheliaStorageMigrateListDownLong ,
Example : cmdAutheliaStorageMigrateListDownExample ,
Args : cobra . NoArgs ,
RunE : newStorageMigrateListRunE ( false ) ,
2021-11-23 16:45:38 +07:00
}
return cmd
}
func newStorageMigrateUpCmd ( ) ( cmd * cobra . Command ) {
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : storageMigrateDirectionUp ,
Short : cmdAutheliaStorageMigrateUpShort ,
Long : cmdAutheliaStorageMigrateUpLong ,
Example : cmdAutheliaStorageMigrateUpExample ,
Args : cobra . NoArgs ,
RunE : newStorageMigrationRunE ( true ) ,
2021-11-23 16:45:38 +07:00
}
cmd . Flags ( ) . IntP ( "target" , "t" , 0 , "sets the version to migrate to, by default this is the latest version" )
return cmd
}
func newStorageMigrateDownCmd ( ) ( cmd * cobra . Command ) {
cmd = & cobra . Command {
2022-06-14 19:40:00 +07:00
Use : storageMigrateDirectionDown ,
Short : cmdAutheliaStorageMigrateDownShort ,
Long : cmdAutheliaStorageMigrateDownLong ,
Example : cmdAutheliaStorageMigrateDownExample ,
Args : cobra . NoArgs ,
RunE : newStorageMigrationRunE ( false ) ,
2021-11-23 16:45:38 +07:00
}
cmd . Flags ( ) . IntP ( "target" , "t" , 0 , "sets the version to migrate to" )
cmd . Flags ( ) . Bool ( "pre1" , false , "sets pre1 as the version to migrate to" )
cmd . Flags ( ) . Bool ( "destroy-data" , false , "confirms you want to destroy data with this migration" )
return cmd
}