@Override public void validate(EndpointDefinition definition, DealiasingTypeVisitor dealiasingTypeVisitor) { definition.getArgs().stream() .filter(entry -> entry.getParamType().accept(ParameterTypeVisitor.IS_QUERY)) .forEach(argDefinition -> { boolean isValid = recursivelyValidate(argDefinition.getType(), dealiasingTypeVisitor); Preconditions.checkState(isValid, "Query parameters must be enums, primitives, aliases, list, sets " + "or optional of primitive: \"%s\" is not allowed", argDefinition.getArgName()); }); }
@Override public void validate(EndpointDefinition definition, DealiasingTypeVisitor dealiasingTypeVisitor) { definition.getArgs().stream() .filter(entry -> entry.getParamType().accept(ParameterTypeVisitor.IS_HEADER)) .forEach(headerArgDefinition -> { boolean isValid = recursivelyValidate(headerArgDefinition.getType(), dealiasingTypeVisitor); Preconditions.checkState(isValid, "Header parameters must be enums, primitives, aliases or optional primitive:" + " \"%s\" is not allowed", headerArgDefinition.getArgName()); }); }
private static void validateServiceDefinition(ServiceDefinition serviceDef, Map<TypeName, TypeDefinition> definitionMap) { serviceDef.getEndpoints().stream().forEach(endpoint -> { endpoint.getArgs().stream() .filter(arg -> recursivelyFindNestedOptionals(arg.getType(), definitionMap, false)) .findAny() .ifPresent(arg -> { throw new IllegalStateException( "Illegal nested optionals found in one of the arguments of endpoint " + endpoint.getEndpointName().get()); }); endpoint.getReturns().ifPresent(returnType -> { if (recursivelyFindNestedOptionals(returnType, definitionMap, false)) { throw new IllegalStateException( "Illegal nested optionals found in return type of endpoint " + endpoint.getEndpointName().get()); } }); }); }
@Override public void validate(EndpointDefinition definition, DealiasingTypeVisitor dealiasingTypeVisitor) { definition.getArgs().stream() .filter(entry -> entry.getParamType().accept(ParameterTypeVisitor.IS_PATH)) .forEach(entry -> { Either<TypeDefinition, Type> resolvedType = dealiasingTypeVisitor.dealias(entry.getType()); Boolean isValid = resolvedType.fold( typeDefinition -> typeDefinition.accept(TypeDefinitionVisitor.IS_ENUM), type -> type.accept(TypeVisitor.IS_PRIMITIVE)); Preconditions.checkState(isValid, "Path parameters must be primitives or aliases: \"%s\" is not allowed", entry.getArgName()); }); } }
@Override public void validate(EndpointDefinition definition, DealiasingTypeVisitor dealiasingTypeVisitor) { definition.getArgs() .stream() .filter(arg -> !arg.getParamType().accept(ParameterTypeVisitor.IS_BODY)) .forEach(arg -> { boolean isValid = dealiasingTypeVisitor.dealias(arg.getType()) .fold( typeDefinition -> true, type -> !type.accept(TypeVisitor.IS_BINARY) && !type.accept(TypeVisitor.IS_ANY) ); Preconditions.checkArgument( isValid, "Non body parameters cannot be of the 'binary' type: '%s' is not allowed", arg.getArgName()); }); } }
@Override public void validate(EndpointDefinition definition, DealiasingTypeVisitor dealiasingTypeVisitor) { definition.getArgs().stream() .filter(entry -> entry.getParamType().accept(ParameterTypeVisitor.IS_PATH) || entry.getParamType().accept(ParameterTypeVisitor.IS_QUERY)) .forEach(entry -> { Either<TypeDefinition, Type> conjureType = dealiasingTypeVisitor.dealias(entry.getType()); boolean isValid = conjureType.fold( typeDefinition -> true, type -> !type.accept(TypeVisitor.IS_PRIMITIVE) || type.accept(TypeVisitor.PRIMITIVE).get() != PrimitiveType.Value.BEARERTOKEN ); Preconditions.checkState(isValid, "Path or query parameters of type 'bearertoken' are not allowed as this " + "would introduce a security vulnerability: \"%s\"", entry.getArgName()); }); } }