mirror of
https://github.com/mjl-/mox.git
synced 2025-07-10 09:14:39 +03:00
webadmin: don't show runtime typecheck error for invalid values in dmarc and tls reports
several fields in dmarc and tls reports have known string values. we have a Go string type for them. sherpats (through sherpadoc) turns those strings into typescript enums, and sherpats generates runtime-typechecking code (to enforce correct types for incoming json, to prevent failing deeper in the code when we get invalid data (much harder to debug)). the Go not-really-enum types allow other values, and real-world reports have unknown/unspecified/invalid values. this uses the sherpadoc -rename flag to turn those enums into regular untyped strings, so sherpats doesn't generate enum-enforcing runtime type checking code. this required an update to sherpadoc, to properly handling renaming a type to a basic type instead of another named type. for issue #161 by RobSlgm, thanks for reporting!
This commit is contained in:
20
vendor/github.com/mjl-/sherpadoc/check.go
generated
vendored
20
vendor/github.com/mjl-/sherpadoc/check.go
generated
vendored
@ -4,6 +4,15 @@ import (
|
||||
"fmt"
|
||||
)
|
||||
|
||||
// IsBasicType returns whether name is a basic type, like int32, string, any, timestamp, etc.
|
||||
func IsBasicType(name string) bool {
|
||||
switch name {
|
||||
case "any", "bool", "int8", "uint8", "int16", "uint16", "int32", "uint32", "int64", "uint64", "int64s", "uint64s", "float32", "float64", "string", "timestamp":
|
||||
return true
|
||||
}
|
||||
return false
|
||||
}
|
||||
|
||||
type genError struct{ error }
|
||||
|
||||
func parseError(path string, format string, args ...interface{}) {
|
||||
@ -88,6 +97,13 @@ func (c checker) checkTypewords(path string, tokens []string, okNullable bool) {
|
||||
}
|
||||
t := tokens[0]
|
||||
tokens = tokens[1:]
|
||||
if IsBasicType(t) {
|
||||
if len(tokens) != 0 {
|
||||
parseError(path, "leftover typewords %v", tokens)
|
||||
}
|
||||
return
|
||||
}
|
||||
|
||||
switch t {
|
||||
case "nullable":
|
||||
if !okNullable {
|
||||
@ -97,10 +113,6 @@ func (c checker) checkTypewords(path string, tokens []string, okNullable bool) {
|
||||
parseError(path, "missing typeword after %#v", t)
|
||||
}
|
||||
c.checkTypewords(path, tokens, false)
|
||||
case "any", "bool", "int8", "uint8", "int16", "uint16", "int32", "uint32", "int64", "uint64", "int64s", "uint64s", "float32", "float64", "string", "timestamp":
|
||||
if len(tokens) != 0 {
|
||||
parseError(path, "leftover typewords %v", tokens)
|
||||
}
|
||||
case "[]", "{}":
|
||||
if len(tokens) == 0 {
|
||||
parseError(path, "missing typeword after %#v", t)
|
||||
|
Reference in New Issue
Block a user