openwhisk-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From unknown ...@apache.org>
Subject [incubator-openwhisk-cli] 01/01: API GW CLI SSO support (#2207)
Date Mon, 08 May 2017 15:40:57 GMT
This is an automated email from the ASF dual-hosted git repository.

(unknown) pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-openwhisk-cli.git

commit 86861391eeb793c690afcf2396bd773549a838cb
Author: Mark Deuser <mdeuser@us.ibm.com>
AuthorDate: Fri May 5 11:36:45 2017 -0400

    API GW CLI SSO support (#2207)
    
    * Support --sso command
    - Enable follow-up http body parsing to handle non-standard response body contents
    
    * Improved error message handling
---
 .idea/libraries/GOPATH__openwhisk_cli_.xml |  18 ----
 Godeps/Godeps.json                         |   4 +-
 commands/api.go                            | 159 ++++++++++++++++++-----------
 wski18n/i18n_resources.go                  |  22 ++--
 wski18n/resources/en_US.all.json           |   4 +
 5 files changed, 119 insertions(+), 88 deletions(-)

diff --git a/.idea/libraries/GOPATH__openwhisk_cli_.xml b/.idea/libraries/GOPATH__openwhisk_cli_.xml
deleted file mode 100644
index a0e31a5..0000000
--- a/.idea/libraries/GOPATH__openwhisk_cli_.xml
+++ /dev/null
@@ -1,18 +0,0 @@
-<component name="libraryTable">
-  <library name="GOPATH &lt;openwhisk-cli&gt;">
-    <CLASSES>
-      <root url="file://$USER_HOME$/go/src/gopkg.in" />
-      <root url="file://$USER_HOME$/go/src/github.com" />
-      <root url="file://$USER_HOME$/go/src/golang.org" />
-    </CLASSES>
-    <JAVADOC />
-    <SOURCES>
-      <root url="file://$USER_HOME$/go/src/gopkg.in" />
-      <root url="file://$USER_HOME$/go/src/github.com" />
-      <root url="file://$USER_HOME$/go/src/golang.org" />
-    </SOURCES>
-    <excluded>
-      <root url="file://$PROJECT_DIR$" />
-    </excluded>
-  </library>
-</component>
\ No newline at end of file
diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json
index 9c0fd26..48984af 100644
--- a/Godeps/Godeps.json
+++ b/Godeps/Godeps.json
@@ -75,11 +75,11 @@
 		},
 		{
 			"ImportPath": "github.com/openwhisk/openwhisk-client-go/whisk",
-			"Rev": "5c216065673c15e35e0baa8feca9b986a6b73517"
+			"Rev": "d06674954a896ed7b96128bd7cb481b9474a9fb7"
 		},
         {
             "ImportPath": "github.com/openwhisk/openwhisk-client-go/wski18n",
-            "Rev": "5c216065673c15e35e0baa8feca9b986a6b73517"
+            "Rev": "d06674954a896ed7b96128bd7cb481b9474a9fb7"
         }
 	]
 }
diff --git a/commands/api.go b/commands/api.go
index 175a664..f25b682 100644
--- a/commands/api.go
+++ b/commands/api.go
@@ -772,7 +772,6 @@ var apiCreateCmdV2 = &cobra.Command{
     SilenceErrors: true,
     PreRunE:       setupClientConfig,
     RunE: func(cmd *cobra.Command, args []string) error {
-
         var api *whisk.Api
         var err error
         var qname *QualifiedName
@@ -820,11 +819,11 @@ var apiCreateCmdV2 = &cobra.Command{
         apiCreateReq.ApiDoc = api
 
         apiCreateReqOptions := new(whisk.ApiCreateRequestOptions)
-        props, _ := ReadProps(Properties.PropsFile)
-        apiCreateReqOptions.SpaceGuid = strings.Split(props["AUTH"], ":")[0]
-        apiCreateReqOptions.AccessToken = "DUMMY_TOKEN"
-        if len(props["APIGW_ACCESS_TOKEN"]) > 0 {
-            apiCreateReqOptions.AccessToken = props["APIGW_ACCESS_TOKEN"]
+        if apiCreateReqOptions.SpaceGuid, err = getUserContextId(); err != nil {
+            return err
+        }
+        if apiCreateReqOptions.AccessToken, err = getAccessToken(); err != nil {
+            return err
         }
         apiCreateReqOptions.ResponseType = Flags.api.resptype
         whisk.Debug(whisk.DbgInfo, "AccessToken: %s\nSpaceGuid: %s\nResponsType: %s",
@@ -901,11 +900,11 @@ var apiGetCmdV2 = &cobra.Command{
         apiGetReq := new(whisk.ApiGetRequest)
         apiGetReqOptions := new(whisk.ApiGetRequestOptions)
         apiGetReqOptions.ApiBasePath = args[0]
-        props, _ := ReadProps(Properties.PropsFile)
-        apiGetReqOptions.SpaceGuid = strings.Split(props["AUTH"], ":")[0]
-        apiGetReqOptions.AccessToken = "DUMMY_TOKEN"
-        if len(props["APIGW_ACCESS_TOKEN"]) > 0 {
-            apiGetReqOptions.AccessToken = props["APIGW_ACCESS_TOKEN"]
+        if apiGetReqOptions.SpaceGuid, err = getUserContextId(); err != nil {
+            return err
+        }
+        if apiGetReqOptions.AccessToken, err = getAccessToken(); err != nil {
+            return err
         }
 
         retApi, _, err := client.Apis.GetV2(apiGetReq, apiGetReqOptions)
@@ -962,6 +961,7 @@ var apiDeleteCmdV2 = &cobra.Command{
     SilenceErrors: true,
     PreRunE:       setupClientConfig,
     RunE: func(cmd *cobra.Command, args []string) error {
+        var err error
 
         if whiskErr := checkArgs(args, 1, 3, "Api delete",
             wski18n.T("An API base path or API name is required.  An optional API relative
path and operation may also be provided.")); whiskErr != nil {
@@ -970,11 +970,11 @@ var apiDeleteCmdV2 = &cobra.Command{
 
         apiDeleteReq := new(whisk.ApiDeleteRequest)
         apiDeleteReqOptions := new(whisk.ApiDeleteRequestOptions)
-        props, _ := ReadProps(Properties.PropsFile)
-        apiDeleteReqOptions.SpaceGuid = strings.Split(props["AUTH"], ":")[0]
-        apiDeleteReqOptions.AccessToken = "DUMMY_TOKEN"
-        if len(props["APIGW_ACCESS_TOKEN"]) > 0 {
-            apiDeleteReqOptions.AccessToken = props["APIGW_ACCESS_TOKEN"]
+        if apiDeleteReqOptions.SpaceGuid, err = getUserContextId(); err != nil {
+            return err
+        }
+        if apiDeleteReqOptions.AccessToken, err = getAccessToken(); err != nil {
+            return err
         }
 
         // Is the argument a basepath (must start with /) or an API name
@@ -1000,7 +1000,7 @@ var apiDeleteCmdV2 = &cobra.Command{
             apiDeleteReqOptions.ApiVerb = strings.ToUpper(args[2])
         }
 
-        _, err := client.Apis.DeleteV2(apiDeleteReq, apiDeleteReqOptions)
+        _, err = client.Apis.DeleteV2(apiDeleteReq, apiDeleteReqOptions)
         if err != nil {
             whisk.Debug(whisk.DbgError, "client.Apis.DeleteV2(%#v, %#v) error: %s\n", apiDeleteReq,
apiDeleteReqOptions, err)
             errMsg := wski18n.T("Unable to delete API: {{.err}}", map[string]interface{}{"err":
err})
@@ -1050,35 +1050,26 @@ var apiListCmdV2 = &cobra.Command{
         var retApiList *whisk.ApiListResponseV2
         var retApi *whisk.ApiGetResponseV2
         var retApiArray *whisk.RetApiArrayV2
+        var apiPath string
+        var apiVerb string
 
         if whiskErr := checkArgs(args, 0, 3, "Api list",
             wski18n.T("Optional parameters are: API base path (or API name), API relative
path and operation.")); whiskErr != nil {
             return whiskErr
         }
 
-        props, _ := ReadProps(Properties.PropsFile)
-        spaceguid := strings.Split(props["AUTH"], ":")[0]
-        var accesstoken string = "DUMMY_TOKEN"
-        if len(props["APIGW_ACCESS_TOKEN"]) > 0 {
-            accesstoken = props["APIGW_ACCESS_TOKEN"]
-        }
-
-        // Get API request body
-        apiGetReq := new(whisk.ApiGetRequest)
-        apiGetReq.Namespace = client.Config.Namespace
-        // Get API request options
-        apiGetReqOptions := new(whisk.ApiGetRequestOptions)
-        apiGetReqOptions.AccessToken = accesstoken
-        apiGetReqOptions.SpaceGuid = spaceguid
-
-        // List API request query parameters
-        apiListReqOptions := new(whisk.ApiListRequestOptions)
-        apiListReqOptions.Limit = Flags.common.limit
-        apiListReqOptions.Skip = Flags.common.skip
-        apiListReqOptions.AccessToken = accesstoken
-        apiListReqOptions.SpaceGuid = spaceguid
-
         if (len(args) == 0) {
+            // List API request query parameters
+            apiListReqOptions := new(whisk.ApiListRequestOptions)
+            apiListReqOptions.Limit = Flags.common.limit
+            apiListReqOptions.Skip = Flags.common.skip
+            if apiListReqOptions.SpaceGuid, err = getUserContextId(); err != nil {
+                return err
+            }
+            if apiListReqOptions.AccessToken, err = getAccessToken(); err != nil {
+                return err
+            }
+
             retApiList, _, err = client.Apis.ListV2(apiListReqOptions)
             if err != nil {
                 whisk.Debug(whisk.DbgError, "client.Apis.ListV2(%#v) error: %s\n", apiListReqOptions,
err)
@@ -1091,6 +1082,18 @@ var apiListCmdV2 = &cobra.Command{
             // Cast to a common type to allow for code to print out apilist response or apiget
response
             retApiArray = (*whisk.RetApiArrayV2)(retApiList)
         } else {
+            // Get API request body
+            apiGetReq := new(whisk.ApiGetRequest)
+            apiGetReq.Namespace = client.Config.Namespace
+            // Get API request options
+            apiGetReqOptions := new(whisk.ApiGetRequestOptions)
+            if apiGetReqOptions.SpaceGuid, err = getUserContextId(); err != nil {
+                return err
+            }
+            if apiGetReqOptions.AccessToken, err = getAccessToken(); err != nil {
+                return err
+            }
+
             // The first argument is either a basepath (must start with /) or an API name
             apiGetReqOptions.ApiBasePath = args[0]
             if (len(args) > 1) {
@@ -1098,14 +1101,16 @@ var apiListCmdV2 = &cobra.Command{
                 if whiskErr, ok := isValidRelpath(args[1]); !ok {
                     return whiskErr
                 }
-                apiGetReqOptions.ApiRelPath = args[1]
+                apiPath = args[1]
+                apiGetReqOptions.ApiRelPath = apiPath
             }
             if (len(args) > 2) {
                 // Is the API verb valid?
                 if whiskErr, ok := IsValidApiVerb(args[2]); !ok {
                     return whiskErr
                 }
-                apiGetReqOptions.ApiVerb = strings.ToUpper(args[2])
+                apiVerb = strings.ToUpper(args[2])
+                apiGetReqOptions.ApiVerb = apiVerb
             }
 
             retApi, _, err = client.Apis.GetV2(apiGetReq, apiGetReqOptions)
@@ -1130,14 +1135,14 @@ var apiListCmdV2 = &cobra.Command{
                     }))
 
             for i:=0; i<len(retApiArray.Apis); i++ {
-                printFilteredListApiV2(retApiArray.Apis[i].ApiValue, (*whisk.ApiOptions)(apiGetReqOptions))
+                printFilteredListApiV2(retApiArray.Apis[i].ApiValue, apiPath, apiVerb)
             }
         } else {
             if (len(retApiArray.Apis) > 0) {
                 // Dynamically create the output format string based on the maximum size
of the
                 // fully qualified action name and the API Name.
-                maxActionNameSize := min(40, max(len("Action"), getLargestActionNameSizeV2(retApiArray,
(*whisk.ApiOptions)(apiGetReqOptions))))
-                maxApiNameSize := min(30, max(len("API Name"), getLargestApiNameSizeV2(retApiArray,
(*whisk.ApiOptions)(apiGetReqOptions))))
+                maxActionNameSize := min(40, max(len("Action"), getLargestActionNameSizeV2(retApiArray,
apiPath, apiVerb)))
+                maxApiNameSize := min(30, max(len("API Name"), getLargestApiNameSizeV2(retApiArray,
apiPath, apiVerb)))
                 fmtString = "%-"+strconv.Itoa(maxActionNameSize)+"s %7s %"+strconv.Itoa(maxApiNameSize+1)+"s
 %s\n"
                 fmt.Fprintf(color.Output,
                     wski18n.T("{{.ok}} APIs\n",
@@ -1146,7 +1151,7 @@ var apiListCmdV2 = &cobra.Command{
                         }))
                 fmt.Printf(fmtString, "Action", "Verb", "API Name", "URL")
                 for i:=0; i<len(retApiArray.Apis); i++ {
-                    printFilteredListRowV2(retApiArray.Apis[i].ApiValue, (*whisk.ApiOptions)(apiGetReqOptions),
maxActionNameSize, maxApiNameSize)
+                    printFilteredListRowV2(retApiArray.Apis[i].ApiValue, apiPath, apiVerb,
maxActionNameSize, maxApiNameSize)
                 }
             } else {
                 fmt.Fprintf(color.Output,
@@ -1167,18 +1172,18 @@ var apiListCmdV2 = &cobra.Command{
  * and some filtering configuration.  For each API endpoint matching the filtering criteria,
display
  * each endpoint's configuration - one line per configuration property (action name, verb,
api name, api gw url)
  */
-func printFilteredListApiV2(resultApi *whisk.RetApiV2, api *whisk.ApiOptions) {
+func printFilteredListApiV2(resultApi *whisk.RetApiV2, apiPath string, apiVerb string) {
     baseUrl := strings.TrimSuffix(resultApi.BaseUrl, "/")
     apiName := resultApi.Swagger.Info.Title
     basePath := resultApi.Swagger.BasePath
     if (resultApi.Swagger != nil && resultApi.Swagger.Paths != nil) {
         for path, _ := range resultApi.Swagger.Paths {
             whisk.Debug(whisk.DbgInfo, "printFilteredListApiV2: comparing api relpath: %s\n",
path)
-            if ( len(api.ApiRelPath) == 0 || path == api.ApiRelPath) {
+            if ( len(apiPath) == 0 || path == apiPath) {
                 whisk.Debug(whisk.DbgInfo, "printFilteredListApiV2: relpath matches\n")
                 for op, opv  := range resultApi.Swagger.Paths[path] {
                     whisk.Debug(whisk.DbgInfo, "printFilteredListApiV2: comparing operation:
'%s'\n", op)
-                    if ( len(api.ApiVerb) == 0 || strings.ToLower(op) == strings.ToLower(api.ApiVerb))
{
+                    if ( len(apiVerb) == 0 || strings.ToLower(op) == strings.ToLower(apiVerb))
{
                         whisk.Debug(whisk.DbgInfo, "printFilteredListApiV2: operation matches:
%#v\n", opv)
                         var actionName string
                         if (len(opv.XOpenWhisk.Package) > 0) {
@@ -1206,17 +1211,17 @@ func printFilteredListApiV2(resultApi *whisk.RetApiV2, api *whisk.ApiOptions)
{
  *
  * NOTE: Large action name and api name value will be truncated by their associated max size
parameters.
  */
-func printFilteredListRowV2(resultApi *whisk.RetApiV2, api *whisk.ApiOptions, maxActionNameSize
int, maxApiNameSize int) {
+func printFilteredListRowV2(resultApi *whisk.RetApiV2, apiPath string, apiVerb string, maxActionNameSize
int, maxApiNameSize int) {
     baseUrl := strings.TrimSuffix(resultApi.BaseUrl, "/")
     apiName := resultApi.Swagger.Info.Title
     if (resultApi.Swagger != nil && resultApi.Swagger.Paths != nil) {
         for path, _ := range resultApi.Swagger.Paths {
             whisk.Debug(whisk.DbgInfo, "printFilteredListRowV2: comparing api relpath: %s\n",
path)
-            if ( len(api.ApiRelPath) == 0 || path == api.ApiRelPath) {
+            if ( len(apiPath) == 0 || path == apiPath) {
                 whisk.Debug(whisk.DbgInfo, "printFilteredListRowV2: relpath matches\n")
                 for op, opv  := range resultApi.Swagger.Paths[path] {
                     whisk.Debug(whisk.DbgInfo, "printFilteredListRowV2: comparing operation:
'%s'\n", op)
-                    if ( len(api.ApiVerb) == 0 || strings.ToLower(op) == strings.ToLower(api.ApiVerb))
{
+                    if ( len(apiVerb) == 0 || strings.ToLower(op) == strings.ToLower(apiVerb))
{
                         whisk.Debug(whisk.DbgInfo, "printFilteredListRowV2: operation matches:
%#v\n", opv)
                         var actionName string
                         if (len(opv.XOpenWhisk.Package) > 0) {
@@ -1236,18 +1241,18 @@ func printFilteredListRowV2(resultApi *whisk.RetApiV2, api *whisk.ApiOptions,
ma
     }
 }
 
-func getLargestActionNameSizeV2(retApiArray *whisk.RetApiArrayV2, api *whisk.ApiOptions)
int {
+func getLargestActionNameSizeV2(retApiArray *whisk.RetApiArrayV2, apiPath string, apiVerb
string) int {
     var maxNameSize = 0
     for i:=0; i<len(retApiArray.Apis); i++ {
         var resultApi = retApiArray.Apis[i].ApiValue
         if (resultApi.Swagger != nil && resultApi.Swagger.Paths != nil) {
             for path, _ := range resultApi.Swagger.Paths {
                 whisk.Debug(whisk.DbgInfo, "getLargestActionNameSize: comparing api relpath:
%s\n", path)
-                if ( len(api.ApiRelPath) == 0 || path == api.ApiRelPath) {
+                if ( len(apiPath) == 0 || path == apiPath) {
                     whisk.Debug(whisk.DbgInfo, "getLargestActionNameSize: relpath matches\n")
                     for op, opv  := range resultApi.Swagger.Paths[path] {
                         whisk.Debug(whisk.DbgInfo, "getLargestActionNameSize: comparing operation:
'%s'\n", op)
-                        if ( len(api.ApiVerb) == 0 || strings.ToLower(op) == strings.ToLower(api.ApiVerb))
{
+                        if ( len(apiVerb) == 0 || strings.ToLower(op) == strings.ToLower(apiVerb))
{
                             whisk.Debug(whisk.DbgInfo, "getLargestActionNameSize: operation
matches: %#v\n", opv)
                             var fullActionName string
                             if (len(opv.XOpenWhisk.Package) > 0) {
@@ -1267,7 +1272,7 @@ func getLargestActionNameSizeV2(retApiArray *whisk.RetApiArrayV2, api
*whisk.Api
     return maxNameSize
 }
 
-func getLargestApiNameSizeV2(retApiArray *whisk.RetApiArrayV2, api *whisk.ApiOptions) int
{
+func getLargestApiNameSizeV2(retApiArray *whisk.RetApiArrayV2, apiPath string, apiVerb string)
int {
     var maxNameSize = 0
     for i:=0; i<len(retApiArray.Apis); i++ {
         var resultApi = retApiArray.Apis[i].ApiValue
@@ -1275,11 +1280,11 @@ func getLargestApiNameSizeV2(retApiArray *whisk.RetApiArrayV2, api
*whisk.ApiOpt
         if (resultApi.Swagger != nil && resultApi.Swagger.Paths != nil) {
             for path, _ := range resultApi.Swagger.Paths {
                 whisk.Debug(whisk.DbgInfo, "getLargestActionNameSize: comparing api relpath:
%s\n", path)
-                if ( len(api.ApiRelPath) == 0 || path == api.ApiRelPath) {
+                if ( len(apiPath) == 0 || path == apiPath) {
                     whisk.Debug(whisk.DbgInfo, "getLargestActionNameSize: relpath matches\n")
                     for op, opv  := range resultApi.Swagger.Paths[path] {
                         whisk.Debug(whisk.DbgInfo, "getLargestActionNameSize: comparing operation:
'%s'\n", op)
-                        if ( len(api.ApiVerb) == 0 || strings.ToLower(op) == strings.ToLower(api.ApiVerb))
{
+                        if ( len(apiVerb) == 0 || strings.ToLower(op) == strings.ToLower(apiVerb))
{
                             whisk.Debug(whisk.DbgInfo, "getLargestActionNameSize: operation
matches: %#v\n", opv)
                             if (len(apiName) > maxNameSize) {
                                 maxNameSize = len(apiName)
@@ -1449,6 +1454,46 @@ func parseSwaggerApiV2() (*whisk.Api, error) {
     return api, nil
 }
 
+func getAccessToken() (string, error) {
+    var token string = "DUMMY TOKEN"
+    var err error
+
+    props, err := ReadProps(Properties.PropsFile)
+    if err == nil {
+        if len(props["APIGW_ACCESS_TOKEN"]) > 0 {
+            token = props["APIGW_ACCESS_TOKEN"]
+        }
+    } else {
+        whisk.Debug(whisk.DbgError, "readProps(%s) failed: %s\n", Properties.PropsFile, err)
+        errStr := wski18n.T("Unable to obtain the API Gateway access token from the properties
file: {{.err}}", map[string]interface{}{"err": err})
+        err = whisk.MakeWskError(errors.New(errStr), whisk.EXITCODE_ERR_GENERAL, whisk.DISPLAY_MSG,
whisk.NO_DISPLAY_USAGE)
+    }
+
+    return token, err
+}
+
+func getUserContextId() (string, error) {
+    var guid string
+    var err error
+
+    props, err := ReadProps(Properties.PropsFile)
+    if err == nil {
+        if len(props["AUTH"]) > 0 {
+            guid = strings.Split(props["AUTH"], ":")[0]
+        } else {
+            whisk.Debug(whisk.DbgError, "AUTH property not set in properties file: %s\n",
Properties.PropsFile)
+            errStr := wski18n.T("Authorization key is not configured (--auth is required)")
+            err = whisk.MakeWskError(errors.New(errStr), whisk.EXITCODE_ERR_GENERAL, whisk.DISPLAY_MSG,
whisk.NO_DISPLAY_USAGE)
+        }
+    } else {
+        whisk.Debug(whisk.DbgError, "readProps(%s) failed: %s\n", Properties.PropsFile, err)
+        errStr := wski18n.T("Unable to obtain the auth key from the properties file: {{.err}}",
map[string]interface{}{"err": err})
+        err = whisk.MakeWskError(errors.New(errStr), whisk.EXITCODE_ERR_GENERAL, whisk.DISPLAY_MSG,
whisk.NO_DISPLAY_USAGE)
+    }
+
+    return guid, err
+}
+
 ///////////
 // Flags //
 ///////////
diff --git a/wski18n/i18n_resources.go b/wski18n/i18n_resources.go
index d479af8..4d7f266 100644
--- a/wski18n/i18n_resources.go
+++ b/wski18n/i18n_resources.go
@@ -92,12 +92,12 @@ func wski18nResourcesDe_deAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 0, mode: os.FileMode(420),
modTime: time.Unix(1493692837, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 0, mode: os.FileMode(420),
modTime: time.Unix(1494253819, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
 
-var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5d\x5f\x73\xdb\xb6\xb2\x7f\xef\xa7\xd8\xe9\x8b\x93\x19\xdb\x39\xe7\xe9\xce\x4d\xa7\x0f\x6a\xe2\x9e\xe8\x24\xb1\x3d\x91\xd3\x73\x3a\xb7\x77\x2a\x88\x84\x24\xd4\x14\xc0\x02\xa0\x15\xc5\xc7\xdf\xfd\x0e\x00\x92\x22\x25\xfc\x25\xe5\xe6\x3e\xc5\x11\x77\x7f\xbb\xf8\xbf\x58\xec\x02\xff\xf3\x1d\xc0\xe3\x77\x00\x00\xdf\x93\xfc\xfb\xd7\xf0\xfd\xa4\x2c\x0b\x92\x21\x49\x18\x05\xfc\x85\x48\x9c\x43\x45\xf1\x97\x12
[...]
+var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x5d\x5f\x73\xdb\xb6\xb2\x7f\xef\xa7\xd8\xe9\x8b\x9d\x19\xdb\x39\xe7\xe9\xce\x4d\xa7\x0f\x6a\xe2\x9e\xe8\x24\xb1\x3d\x91\xd3\x73\x3a\xb7\x77\x2a\x88\x84\x24\xd4\x14\xc0\x02\xa0\x15\x25\xc7\xdf\xfd\x0e\x00\x92\x22\x25\xfc\x25\xe5\xe6\x3e\xc5\x11\x77\x7f\xbb\xf8\xbf\x58\xec\x02\xff\xf3\x1d\xc0\xd7\xef\x00\x00\xbe\x27\xf9\xf7\xaf\xe0\xfb\x49\x59\x16\x24\x43\x92\x30\x0a\xf8\x33\x91\x38\x87\x8a\xe2\xcf\x25
[...]
 
 func wski18nResourcesEn_usAllJsonBytes() ([]byte, error) {
 	return bindataRead(
@@ -112,7 +112,7 @@ func wski18nResourcesEn_usAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 46906, mode: os.FileMode(420),
modTime: time.Unix(1493692837, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 47063, mode: os.FileMode(420),
modTime: time.Unix(1494254127, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -132,7 +132,7 @@ func wski18nResourcesEs_esAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 0, mode: os.FileMode(420),
modTime: time.Unix(1493692837, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 0, mode: os.FileMode(420),
modTime: time.Unix(1494253819, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -152,7 +152,7 @@ func wski18nResourcesFr_frAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 101, mode: os.FileMode(420),
modTime: time.Unix(1493692837, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 101, mode: os.FileMode(420),
modTime: time.Unix(1494253819, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -172,7 +172,7 @@ func wski18nResourcesIt_itAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 0, mode: os.FileMode(420),
modTime: time.Unix(1493692837, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 0, mode: os.FileMode(420),
modTime: time.Unix(1494253819, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -192,7 +192,7 @@ func wski18nResourcesJa_jaAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 0, mode: os.FileMode(420),
modTime: time.Unix(1493692837, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 0, mode: os.FileMode(420),
modTime: time.Unix(1494253819, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -212,7 +212,7 @@ func wski18nResourcesKo_krAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 0, mode: os.FileMode(420),
modTime: time.Unix(1493692837, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 0, mode: os.FileMode(420),
modTime: time.Unix(1494253819, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -232,7 +232,7 @@ func wski18nResourcesPt_brAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 0, mode: os.FileMode(420),
modTime: time.Unix(1493692837, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 0, mode: os.FileMode(420),
modTime: time.Unix(1494253819, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -252,7 +252,7 @@ func wski18nResourcesZh_hansAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", size: 0, mode: os.FileMode(420),
modTime: time.Unix(1493692837, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", size: 0, mode: os.FileMode(420),
modTime: time.Unix(1494253819, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
@@ -272,7 +272,7 @@ func wski18nResourcesZh_hantAllJson() (*asset, error) {
 		return nil, err
 	}
 
-	info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", size: 0, mode: os.FileMode(420),
modTime: time.Unix(1493692837, 0)}
+	info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", size: 0, mode: os.FileMode(420),
modTime: time.Unix(1494253819, 0)}
 	a := &asset{bytes: bytes, info: info}
 	return a, nil
 }
diff --git a/wski18n/resources/en_US.all.json b/wski18n/resources/en_US.all.json
index 8ecfa48..92c934b 100644
--- a/wski18n/resources/en_US.all.json
+++ b/wski18n/resources/en_US.all.json
@@ -1442,5 +1442,9 @@
   {
     "id": "Set the web action response TYPE. Possible values are html, http, json, text,
svg",
     "translation": "Set the web action response TYPE. Possible values are html, http, json,
text, svg"
+  },
+  {
+    "id": "Authorization key is not configured (--auth is required)",
+    "translation": "Authorization key is not configured (--auth is required)"
   }
 ]

-- 
To stop receiving notification emails like this one, please contact
"commits@openwhisk.apache.org" <commits@openwhisk.apache.org>.

Mime
View raw message