Skip to content
Snippets Groups Projects
Unverified Commit 2d805312 authored by Kevin Lyda's avatar Kevin Lyda
Browse files

Initial pass at SSH and USER commands

Don't shoehorn them into the SET PRIVILEGES command.  And in fact
remove the SET PRIVILEGES command.
parent 46e10831
No related branches found
No related tags found
No related merge requests found
...@@ -162,9 +162,12 @@ func (c Commands) run(words []string) error { ...@@ -162,9 +162,12 @@ func (c Commands) run(words []string) error {
// Deal with subcommands. // Deal with subcommands.
if len(cmd.Commands) > 0 { if len(cmd.Commands) > 0 {
if len(words) == 1 { if len(words) == 1 {
if cmd.Action == nil {
fmt.Printf("ERROR: missing subcommand for %s.\n", wordup) fmt.Printf("ERROR: missing subcommand for %s.\n", wordup)
return nil return nil
} }
return cmd.Action(cmd)
}
return cmd.Commands.run(words[1:]) return cmd.Commands.run(words[1:])
} }
......
package repl
import (
"fmt"
"git.lyda.ie/kevin/bulletin/dclish"
)
// ActionUser handles the `USER` command.
func ActionUser(cmd *dclish.Command) error {
fmt.Println(cmd.Description)
fmt.Println(`
The following commands are available:
ADD ADMIN DELETE DISABLE ENABLE MOD
NOADMIN NOMOD`)
fmt.Println()
return nil
}
// ActionUserAdd handles the `USER ADD` command.
func ActionUserAdd(_ *dclish.Command) error {
// TODO: implement
return nil
}
// ActionUserDelete handles the `USER DELETE` command.
func ActionUserDelete(_ *dclish.Command) error {
// TODO: implement
return nil
}
// ActionUserEnable handles the `USER ENABLE` command.
func ActionUserEnable(_ *dclish.Command) error {
// TODO: implement
return nil
}
// ActionUserDisable handles the `USER DISABLE` command.
func ActionUserDisable(_ *dclish.Command) error {
// TODO: implement
return nil
}
// ActionUserAdmin handles the `USER ADMIN` command.
func ActionUserAdmin(_ *dclish.Command) error {
// TODO: implement
return nil
}
// ActionUserNoadmin handles the `USER NOADMIN` command.
func ActionUserNoadmin(_ *dclish.Command) error {
// TODO: implement
return nil
}
// ActionUserMod handles the `USER MOD` command.
func ActionUserMod(_ *dclish.Command) error {
// TODO: implement
return nil
}
// ActionUserNomod handles the `USER NOMOD` command.
func ActionUserNomod(_ *dclish.Command) error {
// TODO: implement
return nil
}
// ActionSSH handles the `SSH` command.
func ActionSSH(cmd *dclish.Command) error {
fmt.Println(cmd.Description)
fmt.Println(`\nThe following commands are available:
ADD DELETE LIST`)
return nil
}
// ActionSSHAdd handles the `SSH ADD` command.
func ActionSSHAdd(_ *dclish.Command) error {
// TODO: implement
return nil
}
// ActionSSHDelete handles the `SSH DELETE` command.
func ActionSSHDelete(_ *dclish.Command) error {
// TODO: implement
return nil
}
// ActionSSHList handles the `SSH LIST` command.
func ActionSSHList(_ *dclish.Command) error {
// TODO: implement
return nil
}
...@@ -773,6 +773,7 @@ provides more flexibility than is present with the PRINT command. For ...@@ -773,6 +773,7 @@ provides more flexibility than is present with the PRINT command. For
example, if you want to print all messages with a particular string in example, if you want to print all messages with a particular string in
it's subject line, DIRECTORY/PRINT/SUBJ would allow you do it.`, it's subject line, DIRECTORY/PRINT/SUBJ would allow you do it.`,
MaxArgs: 1, MaxArgs: 1,
Action: ActionPrint,
Flags: dclish.Flags{ Flags: dclish.Flags{
"/ALL": { "/ALL": {
Description: ` Prints all the messages in the current folder.`, Description: ` Prints all the messages in the current folder.`,
...@@ -1089,9 +1090,9 @@ Omitting the folder name will select the default general messages. ...@@ -1089,9 +1090,9 @@ Omitting the folder name will select the default general messages.
After selecting a folder, the user will notified of the number of unread After selecting a folder, the user will notified of the number of unread
messages, and the message pointer will be placed at the first unread messages, and the message pointer will be placed at the first unread
message.`, message.`,
Action: ActionSelect,
MinArgs: 1, MinArgs: 1,
MaxArgs: 1, MaxArgs: 1,
Action: ActionSelect,
Flags: dclish.Flags{ Flags: dclish.Flags{
"/MARKED": { "/MARKED": {
Description: ` Selects only messages that have been marked (indicated by an asterisk). Description: ` Selects only messages that have been marked (indicated by an asterisk).
...@@ -1100,12 +1101,90 @@ message.`, ...@@ -1100,12 +1101,90 @@ message.`,
}, },
}, },
}, },
"USER": {
Description: `Commands for managing users.`,
Action: ActionUser,
Commands: dclish.Commands{
"ADD": {
Description: ` Creates a user.`,
MinArgs: 1,
MaxArgs: 1,
Action: ActionUserAdd,
},
"DELETE": {
Description: ` Removes a user.`,
MinArgs: 1,
MaxArgs: 1,
Action: ActionUserDelete,
},
"ENABLE": {
Description: ` Enables a user.`,
MinArgs: 1,
MaxArgs: 1,
Action: ActionUserEnable,
},
"DISABLE": {
Description: ` Disables a user.`,
MinArgs: 1,
MaxArgs: 1,
Action: ActionUserDisable,
},
"ADMIN": {
Description: ` Makes a user an admin.`,
MinArgs: 1,
MaxArgs: 1,
Action: ActionUserAdmin,
},
"NOADMIN": {
Description: ` Removes the admin bit from a user.`,
MinArgs: 1,
MaxArgs: 1,
Action: ActionUserNoadmin,
},
"MOD": {
Description: ` Makes a user an mod.`,
MinArgs: 1,
MaxArgs: 1,
Action: ActionUserMod,
},
"NOMOD": {
Description: ` Removes the mod bit from a user.`,
MinArgs: 1,
MaxArgs: 1,
Action: ActionUserNomod,
},
},
},
"SSH": {
Description: `The SSH command is used to manage SSH keys for users.`,
Action: ActionSSH,
Commands: dclish.Commands{
"ADD": {
Description: ` Adds an ssh key for a user.
Prompts the user for an ssh key and then adds it.`,
Action: ActionSSHAdd,
},
"DELETE": {
Description: ` Removes an ssh key for a user.
The user is given a list of current ssh keys and is asked which to
remove.`,
Action: ActionSSHDelete,
},
"LIST": {
Description: ` Prints a list of ssh keys for the user.`,
Action: ActionSSHList,
},
},
},
"SET": { "SET": {
Description: `The SET command is used with other commands to define or change Description: `The SET command is used with other commands to define or change
characteristics of the BULLETIN Utility. characteristics of the BULLETIN Utility.
Format: Format:
SET option`, SET option`,
Action: ActionSet,
Commands: dclish.Commands{ Commands: dclish.Commands{
"ACCESS": { "ACCESS": {
Description: `Controls access to a private folder. A private folder can only be Description: `Controls access to a private folder. A private folder can only be
...@@ -1351,33 +1430,6 @@ so that bit 1 is cleared.`, ...@@ -1351,33 +1430,6 @@ so that bit 1 is cleared.`,
Action: ActionSetNonotify, Action: ActionSetNonotify,
MaxArgs: 1, MaxArgs: 1,
}, },
"PRIVILEGES": {
Description: `Specifies either process privileges or rights identifiers that are
necessary to use privileged commands. Use the SHOW PRIVILEGES command
to see what is presently set. This is a privileged command.
Format:
SET PRIVILEGES parameters
The parameters are one or more privileges separated by commas. To
remove a privilege, specify the privilege preceeded by "NO". If /ID is
specified, the parameters are rights identifiers.
For the reimplementation this is used to manage users. The following parameters
are available.
Format:
SET PRIVILEGES CREATE login
SET PRIVILEGES DELETE login
SET PRIVILEGES SSH [login]
SET PRIVILEGES [NO]ADMIN login
SET PRIVILEGES [NO]MOD login [folder]
SET PRIVILEGES ENABLE login
SET PRIVILEGES DISABLE login`,
MinArgs: 1,
MaxArgs: 3,
Action: ActionSetPrivileges,
},
"PROMPT_EXPIRE": { "PROMPT_EXPIRE": {
Description: `Specifies that a user will be prompted for an expiration date when Description: `Specifies that a user will be prompted for an expiration date when
adding a message. If the value specified is greater than the expiration adding a message. If the value specified is greater than the expiration
...@@ -1520,6 +1572,7 @@ that folder cannot be removed.`, ...@@ -1520,6 +1572,7 @@ that folder cannot be removed.`,
"SHOW": { "SHOW": {
Description: `The SHOW command displays information about certain characteristics. Description: `The SHOW command displays information about certain characteristics.
`, `,
Action: ActionShow,
Commands: dclish.Commands{ Commands: dclish.Commands{
"FLAGS": { "FLAGS": {
Description: `Shows whether BRIEF, NOTIFY, READNEW, or SHOWNEW has been set for the Description: `Shows whether BRIEF, NOTIFY, READNEW, or SHOWNEW has been set for the
......
...@@ -12,6 +12,22 @@ import ( ...@@ -12,6 +12,22 @@ import (
"git.lyda.ie/kevin/bulletin/this" "git.lyda.ie/kevin/bulletin/this"
) )
// ActionSet handles the `SET` command.
func ActionSet(cmd *dclish.Command) error {
fmt.Println(cmd.Description)
fmt.Println(`
The following commands are available:
NOPROMPT_EXPIRE NOPROMPT_EXPIRE NOPROMPT_EXPIRE NOPROMPT_EXPIRE
ACCESS ALWAYS BRIEF DEFAULT_EXPIRE
EXPIRE_LIMIT FOLDER NOALWAYS NOBRIEF
NONOTIFY NOPROMPT_EXPIRE NOREADNEW NOSHOWNEW
NOSYSTEM NOTIFY PROMPT_EXPIRE READNEW
SHOWNEW SYSTEM`)
fmt.Println()
return nil
}
// ActionSetAccess handles the `SET ACCESS` command. // ActionSetAccess handles the `SET ACCESS` command.
func ActionSetAccess(_ *dclish.Command) error { func ActionSetAccess(_ *dclish.Command) error {
fmt.Println("TODO: implement ActionSetAccess.") fmt.Println("TODO: implement ActionSetAccess.")
......
...@@ -12,6 +12,17 @@ import ( ...@@ -12,6 +12,17 @@ import (
"git.lyda.ie/kevin/bulletin/this" "git.lyda.ie/kevin/bulletin/this"
) )
// ActionShow handles the `SHOW` command.
func ActionShow(cmd *dclish.Command) error {
fmt.Println(cmd.Description)
fmt.Println(`
The following commands are available:
FLAGS FOLDER NEW PRIVILEGES USER VERSION`)
fmt.Println()
return nil
}
// ActionShowFlags handles the `SHOW FLAGS` command. // ActionShowFlags handles the `SHOW FLAGS` command.
func ActionShowFlags(_ *dclish.Command) error { func ActionShowFlags(_ *dclish.Command) error {
flagset := false flagset := false
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment