diff --git a/models/secret.go b/models/secret.go index 4e1b574..17af721 100644 --- a/models/secret.go +++ b/models/secret.go @@ -9,6 +9,7 @@ import ( "fmt" "io" "log" + "reflect" "strings" "github.com/jmoiron/sqlx" @@ -55,6 +56,36 @@ func (s *Secret) SaveSecret() (*Secret, error) { return s, nil } +func printStructContents(s interface{}, indentLevel int) string { + var result strings.Builder + + val := reflect.ValueOf(s) + + if val.Kind() == reflect.Ptr { + val = val.Elem() + } + + typ := val.Type() + + for i := 0; i < val.NumField(); i++ { + field := val.Field(i) + fieldType := typ.Field(i) + + indent := strings.Repeat("\t", indentLevel) + result.WriteString(fmt.Sprintf("%s%s: ", indent, fieldType.Name)) + + switch field.Kind() { + case reflect.Struct: + result.WriteString("\n") + result.WriteString(printStructContents(field.Interface(), indentLevel+1)) + default: + result.WriteString(fmt.Sprintf("%v\n", field.Interface())) + } + } + + return result.String() +} + func SecretsGetAllowed(s *Secret, userId int) ([]UserSecret, error) { // Query based on group // SELECT users.UserId, users.GroupId, permissions.ReadOnly, permissions.SafeId, safes.SafeName, secrets.* FROM users INNER JOIN groups ON users.GroupId = groups.GroupId INNER JOIN permissions ON groups.GroupId = permissions.GroupId INNER JOIN safes on permissions.SafeId = safes.SafeId INNER JOIN secrets on secrets.SafeId = safes.SafeId WHERE users.UserId = 2 @@ -141,7 +172,9 @@ func SecretsGetAllowed(s *Secret, userId int) ([]UserSecret, error) { log.Printf("SecretsGetAllowedForGroup error parsing sql record : '%s'\n", err) return secretResults, err } - log.Printf("r: %v\n", r) + //log.Printf("r: %v\n", r) + debugPrint := printStructContents(&r, 0) + log.Println(debugPrint) /* // Decrypt the secret