(configfile string, namespace string)
| 940 | } |
| 941 | |
| 942 | func parseSwaggerApi(configfile string, namespace string) (*whisk.Api, error) { |
| 943 | // Test is for completeness, but this situation should only arise due to an internal error |
| 944 | if len(configfile) == 0 { |
| 945 | whisk.Debug(whisk.DbgError, "No swagger file is specified\n") |
| 946 | errMsg := wski18n.T("A configuration file was not specified.") |
| 947 | whiskErr := whisk.MakeWskError(errors.New(errMsg), whisk.EXIT_CODE_ERR_GENERAL, |
| 948 | whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE) |
| 949 | return nil, whiskErr |
| 950 | } |
| 951 | |
| 952 | swagger, err := ReadFile(configfile) |
| 953 | if err != nil { |
| 954 | whisk.Debug(whisk.DbgError, "readFile(%s) error: %s\n", configfile, err) |
| 955 | errMsg := wski18n.T("Error reading swagger file '{{.name}}': {{.err}}", |
| 956 | map[string]interface{}{"name": configfile, "err": err}) |
| 957 | whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXIT_CODE_ERR_GENERAL, |
| 958 | whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE) |
| 959 | return nil, whiskErr |
| 960 | } |
| 961 | |
| 962 | // Check if this swagger is in JSON or YAML format |
| 963 | isYaml := strings.HasSuffix(configfile, yamlFileExtension) || strings.HasSuffix(configfile, ymlFileExtension) |
| 964 | if isYaml { |
| 965 | whisk.Debug(whisk.DbgInfo, "Converting YAML formated API configuration into JSON\n") |
| 966 | jsonbytes, err := yaml.YAMLToJSON([]byte(swagger)) |
| 967 | if err != nil { |
| 968 | whisk.Debug(whisk.DbgError, "yaml.YAMLToJSON() error: %s\n", err) |
| 969 | errMsg := wski18n.T("Unable to parse YAML configuration file: {{.err}}", map[string]interface{}{"err": err}) |
| 970 | whiskErr := whisk.MakeWskError(errors.New(errMsg), whisk.EXIT_CODE_ERR_GENERAL, |
| 971 | whisk.DISPLAY_MSG, whisk.NO_DISPLAY_USAGE) |
| 972 | return nil, whiskErr |
| 973 | } |
| 974 | swagger = string(jsonbytes) |
| 975 | } |
| 976 | |
| 977 | // Parse the JSON into a swagger object |
| 978 | swaggerObj := new(whisk.ApiSwagger) |
| 979 | err = json.Unmarshal([]byte(swagger), swaggerObj) |
| 980 | if err != nil { |
| 981 | whisk.Debug(whisk.DbgError, "JSON parse of '%s' error: %s\n", configfile, err) |
| 982 | errMsg := wski18n.T("Error parsing swagger file '{{.name}}': {{.err}}", |
| 983 | map[string]interface{}{"name": configfile, "err": err}) |
| 984 | whiskErr := whisk.MakeWskErrorFromWskError(errors.New(errMsg), err, whisk.EXIT_CODE_ERR_GENERAL, |
| 985 | whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE) |
| 986 | return nil, whiskErr |
| 987 | } |
| 988 | |
| 989 | if swaggerObj.BasePath == "" || swaggerObj.SwaggerName == "" || swaggerObj.Info == nil || swaggerObj.Paths == nil { |
| 990 | whisk.Debug(whisk.DbgError, "Swagger file is invalid.\n") |
| 991 | errMsg := wski18n.T("Swagger file is invalid (missing basePath, info, paths, or swagger fields)") |
| 992 | whiskErr := whisk.MakeWskError(errors.New(errMsg), whisk.EXIT_CODE_ERR_GENERAL, |
| 993 | whisk.DISPLAY_MSG, whisk.DISPLAY_USAGE) |
| 994 | return nil, whiskErr |
| 995 | } |
| 996 | |
| 997 | if _, ok := isValidBasepath(swaggerObj.BasePath); !ok { |
| 998 | whisk.Debug(whisk.DbgError, "Swagger file basePath is invalid.\n") |
| 999 | errMsg := wski18n.T("Swagger file basePath must start with a leading slash (/)") |
no test coverage detected