0

I would like to be able to define custom validators that can be used in the spec in the same way as strfmt.UUID and strfmt.ObjectId "github.com/go-openapi/strfmt"

For example, I could write in the swagger spec something like this

  login:
    type: string
    format: login
  password:
    type: string
    format: password

And after generating the code, I would like to call my own login and password validators.

func ValidateLogin(s string) error {
    var err error
    if len(s) == 0 {
        err = multierr.Append(err,...
    }
    if len(s) < 8 {
        err = multierr.Append(err,...
    }
    for n, r := range s {
        if !unicode.IsLetter(r) && !unicode.IsNumber(r) || r >= unicode.MaxASCII {
            err = multierr.Append(err,...
        }
    }
    return err
}

func ValidatePassword(pass string) error {
    var err error
    if len(pass) == 0 {
        ...
    }
    if len(pass) < 8 {
        ...
    }

    var (
        upp, low, num, sym bool
    )

    for n, char := range pass {
        switch {
        case unicode.IsUpper(char):
            upp = true
        case unicode.IsLower(char):
            low = true
        case unicode.IsNumber(char):
            num = true
        case unicode.IsPunct(char) || unicode.IsSymbol(char):
            sym = true
        default:
            err = multierr.Append(err, ...
        }
    }
    if !upp {
        err = multierr.Append(err, ...
    }
    if !low {
        err = multierr.Append(err, ...
    }
    if !num {
        err = multierr.Append(err, ...
    }
    if !sym {
        err = multierr.Append(err,...
    }
    return err
}

I suppose it's easy to do, but I didn't find a direct recipe in the go-swagger documentation. Maybe I missed something.

fpawel
  • 309
  • 1
  • 3
  • 14

0 Answers0