Skip to content
Snippets Groups Projects
Commit 537b310a authored by Theo's avatar Theo :troll:
Browse files

Fix some inconsistencies and format

parent f7a9abb4
Branches
No related tags found
No related merge requests found
package user
import (
"os"
"fmt"
"time"
"regexp"
"os"
"os/exec"
"path/filepath"
"regexp"
"strconv"
"strings"
"path/filepath"
"time"
"github.com/spf13/cobra"
"github.com/go-ldap/ldap/v3"
"github.com/spf13/cobra"
"gitlab.c3sl.ufpr.br/tss24/useradm/model"
)
......@@ -61,7 +61,9 @@ func createUserFunc(cmd *cobra.Command, args []string) error {
success := false
// creates model from users input
usr, confirm, err := createNewUserModel(cmd)
if err != nil { return err }
if err != nil {
return err
}
defer func() {
if !success {
......@@ -80,16 +82,24 @@ func createUserFunc(cmd *cobra.Command, args []string) error {
}
err = addUserLDAP(usr)
if err != nil { return err }
if err != nil {
return err
}
err = addKerberosPrincipal(usr.UID)
if err != nil { return err }
if err != nil {
return err
}
err = modKerberosPassword(usr.UID, usr.Password)
if err != nil { return err }
if err != nil {
return err
}
err = createUserDirs(usr)
if err != nil { return err }
if err != nil {
return err
}
fmt.Println("User created!")
fmt.Printf("\nUser Login: %v", usr.UID)
......@@ -120,8 +130,7 @@ func createNewUserModel(cmd *cobra.Command) (model.User, bool, error) {
return u, false, err
}
if err := validateInputs(opts)
err != nil {
if err := validateInputs(opts); err != nil {
return u, false, err
}
......@@ -195,7 +204,9 @@ func createNewUserModel(cmd *cobra.Command) (model.User, bool, error) {
}
func genDirPath(base, group, login, input string) (string, error) {
if input != "" { return input, nil }
if input != "" {
return input, nil
}
p := filepath.Join(base, group, login)
return p, validatePath(p)
}
......@@ -411,20 +422,22 @@ func createUserDirs(u model.User) error {
}
}()
if err := createHome(u, u.Homedir)
err != nil { return err }
if err := createHome(u, u.Homedir); err != nil {
return err
}
if err := createHome(u, u.Nobackup)
err != nil { return err }
if err := createHome(u, u.Nobackup); err != nil {
return err
}
if err := createWeb(u)
err != nil { return err }
if err := createWeb(u); err != nil {
return err
}
success = true
return nil
}
func createHome(u model.User, homeDir string) error {
perm := DEF_PERMISSION
......@@ -519,12 +532,16 @@ func createWeb(u model.User) error {
func validatePath(path string) error {
_, err := os.Stat(path)
if os.IsNotExist(err) { return nil }
if os.IsNotExist(err) {
return nil
}
return fmt.Errorf("Path \"%v\" already exists, please provide a new path", path)
}
func validateExpiry(expiry string) error {
if expiry == "_" { return nil }
if expiry == "_" {
return nil
}
parts := strings.Split(expiry, ".")
if !isValidDate(parts) {
......@@ -552,10 +569,14 @@ func validateLtype(ltype string) error {
func validateGRR(grr string) error {
// OK if empty, only "ini" login type requires it and we check :)
if grr == "_" { return nil }
if grr == "_" {
return nil
}
users, err := getUsers()
if err != nil { return err }
if err != nil {
return err
}
isValid, _ := regexp.MatchString(`^\d{8}$`, grr) // is 8 digit number
if !isValid {
......@@ -576,7 +597,9 @@ func validateGID(group string) error {
var err error
groups, err := getGroups()
if err != nil { return err }
if err != nil {
return err
}
for _, value := range groups {
if value == group {
......@@ -589,7 +612,9 @@ func validateGID(group string) error {
func validateUID(login string) error {
users, err := getUsers()
if err != nil { return err }
if err != nil {
return err
}
res := searchUser(users, false, login, "", "", "", "", "")
if len(res) != 0 {
return fmt.Errorf(`The informed Login already exists in LDAP database
......@@ -602,16 +627,24 @@ func validateInputs(opts model.Opts) error {
var err error
err = validateGID(opts.GID)
if err != nil { return err }
if err != nil {
return err
}
err = validateGRR(opts.GRR)
if err != nil { return err }
if err != nil {
return err
}
err = validateExpiry(opts.Expiry)
if err != nil { return err }
if err != nil {
return err
}
err = validateStatus(opts.Status)
if err != nil { return err }
if err != nil {
return err
}
err = validateLtype(opts.Ltype)
if err != nil {
......@@ -621,7 +654,9 @@ func validateInputs(opts model.Opts) error {
// it’s OK if UID is empty here, we generate it later :)
if opts.UID != "" {
err := validateUID(opts.UID)
if err != nil { return err }
if err != nil {
return err
}
}
return nil
......@@ -653,6 +688,8 @@ func isValidDate(arr []string) bool {
}
func ifThenElse(condition bool, a string, b string) string {
if condition { return a }
if condition {
return a
}
return b
}
package user
import (
"os"
"fmt"
"log"
"time"
"os"
"os/exec"
"strconv"
"path/filepath"
"strconv"
"time"
"github.com/spf13/cobra"
"github.com/go-ldap/ldap/v3"
"github.com/spf13/cobra"
"gitlab.c3sl.ufpr.br/tss24/useradm/model"
)
var (
ANO = strconv.Itoa(time.Now().Year())
NO_BKP_TRASH = "/nobackup/contas_removidas/" + ANO
......@@ -40,10 +39,14 @@ func deleteUserFunc(cmd *cobra.Command, args []string) error {
success := false
err := opts.RetrieveOpts(cmd)
if err != nil { return err }
if err != nil {
return err
}
u, err := locateUser(opts.UID)
if err != nil { return err }
if err != nil {
return err
}
defer func() {
if !success {
......@@ -62,10 +65,14 @@ func deleteUserFunc(cmd *cobra.Command, args []string) error {
confirmationPrompt(opts.Confirm, "removal")
err = removeDirs(u)
if err != nil { return err }
if err != nil {
return err
}
err = delUserLDAP(u)
if err != nil { return err }
if err != nil {
return err
}
fmt.Printf("\nUser removed!\n")
......@@ -95,13 +102,19 @@ search made: "useradm user show -l %v"`, login)
// moves dirs to their respective trash dir
func removeDirs(u model.User) error {
err := moveAndChown(u.Homedir, HOME_TRASH, "nobody", "nogroup")
if err != nil { return err }
if err != nil {
return err
}
err = moveAndChown(u.Nobackup, NO_BKP_TRASH, "nobody", "nogroup")
if err != nil { return err }
if err != nil {
return err
}
err = moveAndChown(u.Webdir, WEB_TRASH, "nobody", "nogroup")
if err != nil { return err }
if err != nil {
return err
}
return nil
}
......@@ -189,4 +202,3 @@ func moveAndChown(orig, dest, owner, group string) error {
return nil
}
package user
import (
"os"
"fmt"
"bufio"
"strings"
"os/exec"
"crypto/rand"
"fmt"
"os"
"os/exec"
"strings"
"gopkg.in/yaml.v3"
"github.com/spf13/cobra"
"gitlab.c3sl.ufpr.br/tss24/useradm/model"
"gopkg.in/yaml.v3"
)
type cfg struct {
......@@ -40,7 +40,7 @@ func modifyUserFunc(cmd *cobra.Command, args []string) error {
login := args[0]
res := searchUser(users, false, login, "", "", "", "", "")
if len(res) >= 1 {
if len(res) != 1 {
err = fmt.Errorf("More than one user found")
return err
}
......@@ -60,7 +60,7 @@ func modifyUserFunc(cmd *cobra.Command, args []string) error {
// Criar arquivo temporário
tmpFile, err := os.CreateTemp("", "config-*.yaml")
if err != nil {
err = fmt.Errorf("Error trying to create temp file:", err)
err = fmt.Errorf("Error trying to create temp file: %v", err)
return err
}
defer os.Remove(tmpFile.Name())
......@@ -68,13 +68,13 @@ func modifyUserFunc(cmd *cobra.Command, args []string) error {
// Serializar apenas os campos editáveis
data, err := yaml.Marshal(state)
if err != nil {
err = fmt.Errorf("Error serializing the yaml:", err)
err = fmt.Errorf("Error serializing the yaml: %v", err)
return err
}
// Escrever no arquivo temporário
if err := os.WriteFile(tmpFile.Name(), data, 0644); err != nil {
err = fmt.Errorf("Error writing to temp file:", err)
err = fmt.Errorf("Error writing to temp file: %v", err)
return err
}
......@@ -90,21 +90,21 @@ func modifyUserFunc(cmd *cobra.Command, args []string) error {
comd.Stderr = os.Stderr
if err := comd.Run(); err != nil {
err = fmt.Errorf("Error opening the editor:", err)
err = fmt.Errorf("Error opening the editor: %v", err)
return err
}
// Ler o conteúdo editado
editedData, err := os.ReadFile(tmpFile.Name())
if err != nil {
err = fmt.Errorf("Error reading the modified file:", err)
err = fmt.Errorf("Error reading the modified file: %v", err)
return err
}
// Desserializar apenas os campos editáveis
var newState cfg
if err := yaml.Unmarshal(editedData, &newState); err != nil {
err = fmt.Errorf("Error de-serializing the yaml:", err)
err = fmt.Errorf("Error de-serializing the yaml: %v", err)
return err
}
......
package user
import (
"os"
"fmt"
"os"
"sort"
"strconv"
"strings"
"github.com/spf13/cobra"
"github.com/go-ldap/ldap/v3"
"github.com/spf13/cobra"
"gitlab.c3sl.ufpr.br/tss24/useradm/model"
)
......@@ -39,31 +39,20 @@ func init() {
}
func searchUserFunc(cmd *cobra.Command, args []string) error {
grr, err := getFlagString(cmd,"grr")
if err != nil { return err }
name, err := getFlagString(cmd,"name")
if err != nil { return err }
login, err := getFlagString(cmd,"login")
if err != nil { return err }
group, err := getFlagString(cmd,"group")
if err != nil { return err }
homedir, err := getFlagString(cmd,"homedir")
if err != nil { return err }
status, err := getFlagString(cmd,"status")
if err != nil { return err }
ig, err := cmd.Flags().GetBool("ignore")
if err != nil { return err }
var o model.Opts
users, err := getUsers()
if err != nil { return err }
if err != nil {
return err
}
err = o.RetrieveOpts(cmd)
if err != nil {
return err
}
filtered := searchUser(users, ig, login, group, name, grr, status, homedir)
filtered := searchUser(users, o.Ignore, o.UID, o.GID,
o.Name, o.GRR, o.Status, o.Homedir)
for i := range filtered {
fmt.Printf("%v\n\n", filtered[i].ToString())
......
......@@ -21,6 +21,7 @@ type Opts struct {
Course string
Expiry string
Homedir string
Ignore bool
Block bool
Unblock bool
Confirm bool
......@@ -42,68 +43,107 @@ func (o *Opts) ToString() string {
Course %s
Expiry %s
Homedir %s
Ignore %v
Block %v
Unblock %v
Confirm %v`,
o.GRR, o.GID, o.UID, o.Resp, o.Name, o.Nobkp, o.Ltype, o.Shell,
o.Passwd, o.Webdir, o.Status, o.Course, o.Expiry, o.Homedir,
o.Passwd, o.Webdir, o.Status, o.Course, o.Expiry, o.Homedir, o.Ignore,
o.Block, o.Unblock, o.Confirm)
}
func (o *Opts) RetrieveOpts(cmd *cobra.Command) error {
var err error
o.GRR, err = getFlagString(cmd, "grr")
if err != nil { return err }
if err != nil {
return err
}
o.Resp, err = getFlagString(cmd, "resp")
if err != nil { return err }
if err != nil {
return err
}
o.Name, err = getFlagString(cmd, "name")
if err != nil { return err }
if err != nil {
return err
}
o.GID, err = getFlagString(cmd, "group")
if err != nil { return err }
if err != nil {
return err
}
o.UID, err = getFlagString(cmd, "login")
if err != nil { return err }
if err != nil {
return err
}
o.Ltype, err = getFlagString(cmd, "type")
if err != nil { return err }
if err != nil {
return err
}
o.Shell, err = getFlagString(cmd, "shell")
if err != nil { return err }
if err != nil {
return err
}
o.Webdir, err = getFlagString(cmd, "path")
if err != nil { return err }
if err != nil {
return err
}
o.Nobkp, err = getFlagString(cmd, "nobkp")
if err != nil { return err }
if err != nil {
return err
}
o.Status, err = getFlagString(cmd, "status")
if err != nil { return err }
if err != nil {
return err
}
o.Course, err = getFlagString(cmd, "course")
if err != nil { return err }
if err != nil {
return err
}
o.Expiry, err = getFlagString(cmd, "expiry")
if err != nil { return err }
if err != nil {
return err
}
o.Passwd, err = getFlagString(cmd, "passwd")
if err != nil { return err }
if err != nil {
return err
}
o.Homedir, err = getFlagString(cmd, "homedir")
if err != nil { return err }
if err != nil {
return err
}
o.Confirm, err = getFlagBool(cmd, "confirm")
if err != nil { return err }
if err != nil {
return err
}
o.Unblock, err = getFlagBool(cmd, "unblock")
if err != nil { return err }
if err != nil {
return err
}
o.Block, err = getFlagBool(cmd, "block")
if err != nil { return err }
if err != nil {
return err
}
o.Ignore, err = getFlagBool(cmd, "ignore")
if err != nil {
return err
}
return nil
}
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment