You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@openwhisk.apache.org by GitBox <gi...@apache.org> on 2017/11/13 20:49:27 UTC

[GitHub] csantanapr closed pull request #44: Add the support of certificate checking for secure mode (#2864)

csantanapr closed pull request #44: Add the support of certificate checking for secure mode (#2864)
URL: https://github.com/apache/incubator-openwhisk-client-go/pull/44
 
 
   

This is a PR merged from a forked repository.
As GitHub hides the original diff on merge, it is displayed below for
the sake of provenance:

As this is a foreign pull request (from a fork), the diff is supplied
below (as it won't show otherwise due to GitHub magic):

diff --git a/whisk/client.go b/whisk/client.go
index aea23ec1..8b978ae2 100644
--- a/whisk/client.go
+++ b/whisk/client.go
@@ -113,28 +113,6 @@ func NewClient(httpClient *http.Client, config_input *Config) (*Client, error) {
         }
     }
 
-    // Disable certificate checking in the dev environment if in insecure mode
-    if config.Insecure {
-        Debug(DbgInfo, "Disabling certificate checking.\n")
-        var tlsConfig *tls.Config
-        if config.Cert != "" && config.Key != "" {
-            if cert, err := tls.LoadX509KeyPair(config.Cert, config.Key); err == nil {
-                tlsConfig = &tls.Config{
-                    Certificates: []tls.Certificate{cert},
-                    InsecureSkipVerify: true,
-                }
-            }
-        }else{
-            tlsConfig = &tls.Config{
-                InsecureSkipVerify: true,
-            }
-        }
-
-        httpClient.Transport = &http.Transport{
-            TLSClientConfig: tlsConfig,
-        }
-    }
-
     var err error
     var errStr = ""
     if len(config.Host) == 0 {
@@ -183,11 +161,62 @@ func NewClient(httpClient *http.Client, config_input *Config) (*Client, error) {
     return c, nil
 }
 
+func (c *Client) LoadX509KeyPair() error {
+    tlsConfig := &tls.Config {
+        InsecureSkipVerify: c.Config.Insecure,
+    }
+
+    if c.Config.Cert != "" && c.Config.Key != "" {
+        if cert, err := ReadX509KeyPair(c.Config.Cert, c.Config.Key); err == nil {
+            tlsConfig.Certificates = []tls.Certificate{cert}
+        } else {
+            errStr := wski18n.T("Unable to load the X509 key pair due to the following reason: {{.err}}",
+                map[string]interface{}{"err": err})
+            werr := MakeWskError(errors.New(errStr), EXIT_CODE_ERR_GENERAL, DISPLAY_MSG, NO_DISPLAY_USAGE)
+            return werr
+        }
+    } else if !c.Config.Insecure {
+    	if c.Config.Cert == "" {
+    	    warningStr := "The Cert file is not configured. Please configure the missing Cert file, if there is a security issue accessing the service.\n"
+            Debug(DbgWarn, warningStr)
+            if c.Config.Key != "" {
+                errStr := wski18n.T("The Cert file is not configured. Please configure the missing Cert file.\n")
+                werr := MakeWskError(errors.New(errStr), EXIT_CODE_ERR_GENERAL, DISPLAY_MSG, NO_DISPLAY_USAGE)
+                return werr
+            }
+        }
+    	if c.Config.Key == "" {
+    	    warningStr := "The Key file is not configured. Please configure the missing Key file, if there is a security issue accessing the service.\n"
+            Debug(DbgWarn, warningStr)
+            if c.Config.Cert != "" {
+                errStr := wski18n.T("The Key file is not configured. Please configure the missing Key file.\n")
+                werr := MakeWskError(errors.New(errStr), EXIT_CODE_ERR_GENERAL, DISPLAY_MSG, NO_DISPLAY_USAGE)
+                return werr
+            }
+        }
+    }
+
+    c.client.Transport = &http.Transport{
+        TLSClientConfig: tlsConfig,
+    }
+
+    return nil
+}
+
+var ReadX509KeyPair = func(certFile, keyFile string) (tls.Certificate, error) {
+    return tls.LoadX509KeyPair(certFile, keyFile)
+}
+
 ///////////////////////////////
 // Request/Utility Functions //
 ///////////////////////////////
 
 func (c *Client) NewRequest(method, urlStr string, body interface{}, includeNamespaceInUrl bool) (*http.Request, error) {
+    werr := c.LoadX509KeyPair()
+    if werr != nil {
+        return nil, werr
+    }
+
     if (includeNamespaceInUrl) {
         if c.Config.Namespace != "" {
             urlStr = fmt.Sprintf("%s/namespaces/%s/%s", c.Config.Version, c.Config.Namespace, urlStr)
@@ -629,6 +658,10 @@ func (c *Client) NewRequestUrl(
         useAuthentication bool) (*http.Request, error) {
     var requestUrl *url.URL
     var err error
+    error := c.LoadX509KeyPair()
+    if error != nil {
+        return nil, error
+    }
 
     if (appendOpenWhiskPath) {
         var urlVerNamespaceStr string
diff --git a/whisk/info.go b/whisk/info.go
index ce8d2698..73ca16c1 100644
--- a/whisk/info.go
+++ b/whisk/info.go
@@ -38,6 +38,10 @@ type InfoService struct {
 
 func (s *InfoService) Get() (*Info, *http.Response, error) {
     // make a request to c.BaseURL / v1
+    err := s.client.LoadX509KeyPair()
+    if err != nil {
+        return nil, nil, err
+    }
     urlStr := fmt.Sprintf("%s/%s", s.client.BaseURL.String(), s.client.Config.Version)
     u, err := url.Parse(urlStr)
     if err != nil {
diff --git a/whisk/sdk.go b/whisk/sdk.go
index b0e8708f..38687d21 100644
--- a/whisk/sdk.go
+++ b/whisk/sdk.go
@@ -39,7 +39,10 @@ type SdkRequest struct {
 
 // Install artifact {component = docker || swift || iOS}
 func (s *SdkService) Install(relFileUrl string) (*http.Response, error) {
-
+    err := s.client.LoadX509KeyPair()
+    if err != nil {
+        return nil, err
+    }
     baseURL := s.client.Config.BaseURL
     // Remove everything but the scheme, host, and port
     baseURL.Path, baseURL.RawQuery, baseURL.Fragment = "", "", ""
diff --git a/wski18n/i18n_resources.go b/wski18n/i18n_resources.go
index 206cd638..7fa268c6 100644
--- a/wski18n/i18n_resources.go
+++ b/wski18n/i18n_resources.go
@@ -109,12 +109,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(1506031186, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/de_DE.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1510603210, 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\x98\x51\x6f\xdb\x36\x10\xc7\xdf\xfd\x29\x0e\x7a\x71\x06\xb8\xfa\x00\xdd\x53\xb0\x19\x73\xb0\xae\x31\x56\x67\x7d\x58\x86\x81\x16\xcf\xd6\x21\x12\xc9\x92\x94\x3d\xd7\xd0\x77\x1f\x48\xd9\xb5\xd7\x48\x96\x44\x2b\x59\x9e\x62\x30\xbc\xff\xfd\x78\x3c\x1e\x8f\xfa\x73\x04\xb0\x1f\x01\x00\x44\xc4\xa3\xf7\x10\x3d\x08\xb6\xcc\x10\xac\x04\xc6\x39\x68\x59\x58\x04\xa9\x2c\x49\x61\x60\xbc\xdf\xc7\x87\xdf\x65\x39\x8e\x26\x95\x9d\xd5\x4c\x98\x8c\xb9\xe1\x16\x81\xf7\x70\x2e\x10\x8d\x00\xca\x49\xb3\xff\x44\x23\xb3\x08\xb3\xc5\x62\x0e\x1a\xbf\x14\x68\x2c\xac\xa4\x86\xf9\xc3\xc2\x93\x78\xe9\xb2\x1c\x7b\x55\xd4\xba\x2c\x5b\x89\x02\x24\x03\x21\x7f\x99\x0e\x0e\x79\x41\x32\x10\xf2\xe7\xe9\x87\xe9\x62\x3a\x34\xe7\x65\xd5\xd0\x4d\xbf\xff\x34\xfc\xae\x5f\xd0\x6c\xc1\x64\x4a\xa1\xe0\x0d\x07\xc3\x4d\x78\xf8\xfd\xc3\x21\xf7\x03\xa1\xaf\xf7\xd0\x2d\xd2\xc7\x80\x38\x39\x27\x54\xe8\x2c\x28\xba\xad\x3a\xb5\x38\x77\x62\xc3\x32\xe2\xa1\x14\x9d\xcd\x6b\x9d\x4f\xb5\x96\x1a\x50\x24\x92\x93\x58\x7f\x13\x59\x4a\xbe\x6b\xf5\xdc\xcd\xf6\x82\x5b\x12\x64\x89\x65\xf4\xf5\xcc\xbc\xa3\xd7\x16\xd3\xb6\xd4\xe5\x1c\x6c\x7a\x38\x0e\xac\xb0\x29\x0a\x4b\x89\x77\x01\x29\x32\x8e\xba\x4f\x96\xf6\x11\xab\x05\xbb\x2d\x6c\x2a\x35\x7d\xad\x6c\x9e\x70\x07\x64\x40\x48\x0b\x89\x14\x2b\x5a\x17\x1a\x39\xdc\xbc\x7b\xe7\xb4\xdd\x7f\xdc\x72\x49\x23\xff\xa1\x01\x2d\x58\xae\x1e\x4e\xc0\xed\xfc\x0e\x52\x69\x2c\xe4\x85\xdb\x5f\x04\xa5\xe5\x86\x38\xf2\xf8\x51\x34\x31\xb4\x58\x75\xd8\xa0\xd7\xbf\x77\x7f\x92\x79\xce\x04\x87\x15\xa3\x0c\x39\xf0\xa2\x92\x12\xd5\xd6\xba\xd1\x42\x63\x83\xeb\x6e\xb6\xb5\x6e\x3f\x4a\x20\x61\x51\xaf\x58\x72\x0a\xd2\x8f\x20\xe4\xb1\x5c\x1b\x25\x85\x41\x7f\xb0\x00\xff\x51\x98\x58\xe4\x0d\x18\x61\x5a\xfd\xa2\xe1\x1d\x08\x96\x85\x46\xe4\x99\x7d\xad\xfb\x45\x8a\xb0\x92\x59\x26\xb7\xee\x88\x33\xa5\xb2\xe3\xa1\x42\x5f\x01\xb6\xcc\xa5\x6e\x82\xb4\x41\xde\x7a\x5a\x03\xc5\xde\x5e\xbd\x7e\xb3\x35\xec\xa4\xe5\x16\xa4\x98\x36\xd5\xa5\xbc\x41\x6d\x48\x8a\x7e\xf7\x69\x07\x89\x2b\x7b\xd2\xd0\x2b\xbe\xbb\x60\x38\xe0\x30\x54\xdd\x51\x96\x05\x65\xff\xc9\xc7\x1e\x00\x97\x6c\xbb\x45\xc0\x05\xf0\x19\xff\x75\x5d\x6e\x1f\xc9\x6e\x90\xee\x71\x34\x30\x64\x1f\xc9\x6e\x90\x87\x47\xc7\xc0\x9c\x3d\x55\x3b\xc6\xd3\x3d\x3b\x86\x0e\x68\x1f\xcd\x86\xca\x7e\xb8\x98\xfc\xa5\x10\xc3\xb1\x54\x1b\xcb\xbe\x35\x12\x5e\xd0\x0f\x94\xe5\x38\x86\x3f\xfc\x84\x63\x93\xc2\x34\xc2\x63\xc4\x12\x4b\x1b\x7c\x8c\xc0\xdd\x7e\x8f\x11\x89\xe3\x40\xdc\x78\x25\xbc\xb4\xdf\x96\x5d\xa9\x6a\xed\xf1\x26\x0a\xd8\x82\x56\x81\x36\x00\x2d\x13\x34\xc6\x2b\x7c\x29\x50\xef\x1a\xfa\xbe\x3e\x48\xfd\x25\x6b\x21\xf7\xfb\x38\x37\xeb\xb2\x84\x9b\x44\x72\x74\x93\xdd\xdf\xb2\x6c\xea\xbe\x9b\xe7\x37\xb6\x39\x89\x14\x02\x13\xbf\xcb\x55\xb3\x34\x01\xa9\xc1\x52\x8e\x1c\x64\x61\x63\xb8\xf1\x69\xed\x76\xbf\x30\xd0\x0d\xe3\x7a\xdd\xde\x6f\xe7\x09\x2c\x31\x61\x85\x41\xb8\x57\x28\x3e\xa7\x64\x9e\x4e\x8f\x00\x32\x90\x93\x31\x24\xd6\x01\xaf\xe9\xae\xca\x57\x20\xbb\xee\x87\x29\xaa\x24\x5d\x86\xb8\x1f\x65\x39\x76\xf2\x54\x9d\xc7\xab\x3e\x08\x84\x7a\xaa\x5d\xd2\xc5\x28\xc0\xcd\x3c\x43\x66\xf0\xf4\xdc\x83\xcf\xb3\xbb\x4f\xbf\xfe\x7d\x3b\xbf\x9b\xb9\x1a\x49\x02\xe2\xad\x79\x52\x5a\x2a\x03\x85\xe0\xa8\x3d\x93\xd9\x19\x8b\x39\xcc\xee\x7f\x9b\x02\x27\x8d\x89\x95\x7a\x17\x37\xe5\xd7\xab\x22\x0c\x12\x84\xad\x9b\x1b\x33\x45\x3e\xe0\xb1\xd2\xd2\xca\xc9\xf7\xa3\x82\xe5\xe8\xeb\xe7\xf7\xb3\xa5\xb6\x8e\xba\x1a\x76\xdc\xa8\x2d\xe1\x39\xfc\xfd\x7c\xfa\xb1\x5a\xe5\x0b\x85\xf0\x7f\x5c\x40\xe3\x67\x8b\xb3\x77\xc2\xe1\x43\x43\x33\xff\xed\xc3\x62\x36\x4c\xf2\xbd\x86\xe7\x41\x96\x6c\xd1\x58\x12\xeb\xd8\x7f\x6b\x61\xc6\x3b\x54\xcc\xa6\x20\x57\x55\x1d\x78\xae\xb7\xa2\x0c\x87\xce\xb4\x37\x8f\xed\x82\x3d\xfa\x6b\xf4\x6f\x00\x00\x00\xff\xff\xc3\xb5\x3e\xea\x8a\x19\x00\x00")
+var _wski18nResourcesEn_usAllJson = []byte("\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\xff\xcc\x58\x5f\x6f\xdb\x36\x10\x7f\xf7\xa7\x38\xf8\xc5\x19\xe0\x0a\x7b\xd9\xc3\xba\xa7\xa0\x33\xe6\xa0\x5d\x63\xac\xce\x3a\x60\x19\x06\x46\x3c\x5b\x87\xc8\xa4\x7a\xa4\x9c\xb9\x86\xbe\xfb\x40\xca\x72\xd2\xc4\xb4\xfe\x58\x49\xf3\x64\x81\xe6\xfd\xee\xc7\xbb\xe3\xfd\xe1\xdf\x03\x80\xed\x00\x00\x60\x48\x72\xf8\x16\x86\x57\x4a\xdc\xa4\x08\x56\x83\x90\x12\x58\xe7\x16\x41\x67\x96\xb4\x32\x30\xda\x6e\xa3\xdd\x77\x51\x8c\x86\xe3\x52\xce\xb2\x50\x26\x15\x6e\xb9\x06\xe0\x2d\x3c\x04\x18\x0e\x00\x8a\x71\x58\x7f\xcc\x28\x2c\xc2\x74\x3e\x9f\x01\xe3\x97\x1c\x8d\x85\x85\x66\x98\x5d\xcd\x3d\x13\x0f\x5d\x14\x23\x8f\x8a\xcc\x45\x51\xcb\xa8\x03\x64\x47\x92\xbf\x4d\x7a\x27\x79\x04\xb2\x23\xc9\x5f\x27\x1f\x26\xf3\x49\xdf\x3c\x8f\xa3\x76\x75\xfa\xe5\xa7\xfe\xbd\x7e\x04\xb3\x86\xa6\xc8\x32\x54\x32\x70\x31\xdc\x86\xab\x3f\x3e\xec\x62\xbf\x23\xe9\xd3\x35\x34\xb3\x74\x65\x10\x07\xe7\x80\x72\x4e\x3b\x59\xb7\x16\xe7\x20\x9d\x0b\xb5\x16\x29\xc9\xae\x2c\x1a\x8b\x1f\x54\x3e\x61\xd6\x0c\xa8\x62\x2d\x49\x2d\xf7\x20\x37\x5a\x6e\x6a\x35\x37\x93\x3d\xa2\x96\x14\x59\x12\x29\x7d\x7d\x20\xde\x50\x6b\x8d\x68\x5d\xe8\x4a\x09\x36\xd9\x5d\x07\x91\xdb\x04\x95\xa5\xd8\xab\x80\x04\x85\x44\x6e\x13\xa5\x6d\xc0\x0e\x12\x3b\xcf\x6d\xa2\x99\xbe\x96\x32\xb7\xb8\x01\x32\xa0\xb4\x85\x58\xab\x05\x2d\x73\x46\x09\x67\x6f\xde\x38\x6c\xf7\x8f\x3b\x2e\x31\xca\x1f\x02\xd4\x3a\xc3\x1d\x26\xa7\xe0\x7c\x76\x01\x89\x36\x16\x56\xb9\xf3\x2f\x42\xc6\x7a\x4d\x12\x65\x74\xad\x42\x1c\x6a\xa4\x1a\x38\xe8\xe5\xeb\xee\x3b\xbd\x5a\x09\x25\x61\x21\x28\x45\x09\x32\x2f\xa1\x54\xe9\x5a\xb7\x9a\x33\x06\x54\x37\x93\x3d\xa8\xf6\xa3\x06\x52\x16\x79\x21\xe2\x7b\x23\xfd\x02\x4a\x57\xe9\xda\x64\x5a\x19\xf4\x17\x0b\xf0\xbf\x0c\x63\x8b\x32\x40\xa3\x1b\x56\x3b\x6b\x78\x05\x4a\xa4\x5d\x2d\xf2\x44\xfe\xa0\xfa\x79\x82\xb0\xd0\x69\xaa\xef\xdc\x15\x17\x59\x96\x56\x97\x0a\x7d\x06\xb8\x13\x2e\x74\x63\xa4\x35\xca\xda\xdb\xda\x11\xec\xf5\xe5\xeb\x57\x9b\xc3\xee\xb1\xdc\x81\x32\xc1\xa6\x2c\xca\x6b\x64\x43\x5a\xb5\xab\xa7\x0d\x20\x4e\xec\x49\xbb\x96\xf8\xe6\x80\xdd\x09\xf6\xc3\xaa\x39\x95\x9b\x9c\xd2\x6f\xe2\xb1\x05\x81\x63\xb2\xcd\x2c\xe0\x0c\xf8\x84\xff\x69\x5d\x6e\x1b\xc8\x66\x24\xdd\x70\xd4\x33\xc9\x36\x90\xcd\x48\xee\x86\x8e\x9e\x79\xb6\x44\x6d\x68\x4f\x37\x76\xf4\x6d\xd0\x36\x98\x81\xcc\xbe\x2b\x4c\xbe\x28\x44\x50\xa5\x6a\x63\xc5\xbe\x91\xf0\x80\x7e\xa1\x28\x46\x11\xfc\xe9\x37\x54\x4d\x8a\x60\x84\xeb\xa1\x88\x2d\xad\xf1\x7a\x08\xae\xfa\x5d\x0f\x49\x55\x0b\x51\xb0\x24\x3c\xb7\xde\x1a\xaf\x94\xb9\xb6\xaa\x44\x1d\x5c\x50\x0b\x50\x47\x80\x75\x8c\xc6\x78\x84\x2f\x39\xf2\x26\xd0\xf7\xb5\xa1\xd4\x1e\xf2\x20\xc9\xed\x36\x5a\x99\x65\x51\xc0\x59\xac\x25\xba\xcd\xee\xb7\x28\x42\xdd\x77\x78\x7f\xb0\xcd\x89\xb5\x52\x18\x7b\x2f\x97\xcd\xd2\x18\x34\x83\xa5\x15\x4a\xd0\xb9\x8d\xe0\xcc\x87\xb5\xf3\x7e\x6e\xa0\x19\x8d\xd3\x71\x5b\xcf\xce\x63\xb8\xc1\x58\xe4\x06\xe1\x32\x43\xf5\x39\x21\x73\x7b\x3f\x04\x90\x81\x15\x19\x43\x6a\xd9\x61\x9a\x6e\x8a\x7c\x02\x65\xd7\xfd\x88\x8c\x4a\x48\x17\x21\xee\xa3\x28\x46\x0e\x9e\xca\xfb\x78\xd2\x83\x40\x57\x4d\x07\x8f\x74\xd4\x0a\x70\x36\x4b\x51\x18\xbc\x1f\xf7\xe0\xf3\xf4\xe2\xd3\xfb\x7f\xcf\x67\x17\x53\x97\x23\x49\x41\x74\x67\x6e\x33\xd6\x99\x81\x5c\x49\x64\xcf\xc9\x6c\x8c\xc5\x15\x4c\x2f\x7f\x9f\x80\x24\xc6\xd8\x6a\xde\x44\xa1\xf8\x7a\x51\x0a\xbd\x18\xe1\xce\xed\x8d\x44\x46\xde\xe0\x51\xc6\xda\xea\xf1\xe3\x55\x25\x56\xe8\xf3\xe7\xe3\xdd\x9a\xad\x63\x5d\x2e\x3b\xde\xc8\x96\xf0\x21\xf9\xcb\xd9\xe4\x63\x79\xca\x67\x32\xe1\x77\x3c\x40\xf0\xd9\xe2\xc1\x9c\xb0\x7b\x68\x08\xf3\x3f\xbf\x9a\x4f\xfb\x09\xbe\x97\xd0\xdc\xcb\x91\x2d\x1a\x4b\x6a\x19\xf9\xb7\x16\x61\xbc\xc2\x4c\xd8\x04\xf4\xa2\xcc\x03\x4f\xf1\x16\x94\x62\xdf\x91\xf6\xea\x69\xd7\x24\xee\x54\x8b\x72\x3e\xfd\xeb\xa7\x1f\x7f\xf6\xea\x32\x41\x5c\x3d\x29\xd8\x6f\x86\x7b\x46\x61\xb4\x6a\x91\xab\x4f\x02\x0f\xd6\xf4\x77\xc8\x76\x67\x94\xc7\x8f\x6f\x11\x3c\x35\x78\x82\x7b\x77\xec\x25\xc3\xaf\x6b\x3d\x2a\x08\x1e\xe0\xfd\xde\xa9\x2d\xe1\x2b\xc1\xe3\xf4\x7b\x81\x77\xe4\x07\xff\x0c\xfe\x0f\x00\x00\xff\xff\xab\x99\xa5\xc1\xc1\x1b\x00\x00")
 
 func wski18nResourcesEn_usAllJsonBytes() ([]byte, error) {
     return bindataRead(
@@ -129,7 +129,7 @@ func wski18nResourcesEn_usAllJson() (*asset, error) {
         return nil, err
     }
 
-    info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 6538, mode: os.FileMode(420), modTime: time.Unix(1506031828, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/en_US.all.json", size: 7105, mode: os.FileMode(420), modTime: time.Unix(1510603813, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -149,7 +149,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(1506031186, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/es_ES.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1510603210, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -169,7 +169,7 @@ func wski18nResourcesFr_frAllJson() (*asset, error) {
         return nil, err
     }
 
-    info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1506031186, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/fr_FR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1510603210, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -189,7 +189,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(1506031186, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/it_IT.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1510603210, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -209,7 +209,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(1506031186, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/ja_JA.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1510603210, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -229,7 +229,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(1506031186, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/ko_KR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1510603210, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -249,7 +249,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(1506031186, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/pt_BR.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1510603210, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -269,7 +269,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(1506031186, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/zh_Hans.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1510603210, 0)}
     a := &asset{bytes: bytes, info: info}
     return a, nil
 }
@@ -289,7 +289,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(1506031186, 0)}
+    info := bindataFileInfo{name: "wski18n/resources/zh_Hant.all.json", size: 0, mode: os.FileMode(420), modTime: time.Unix(1510603210, 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 775cf4f2..cbbe68dd 100644
--- a/wski18n/resources/en_US.all.json
+++ b/wski18n/resources/en_US.all.json
@@ -154,5 +154,17 @@
   {
     "id": "Authentication key is missing (Please configure testing.auth as the path of the authentication key file in whisk.properties under the OPENWHISK_HOME directory.)",
     "translation": "Authentication key is missing (Please configure testing.auth as the path of the authentication key file in whisk.properties under the OPENWHISK_HOME directory.)"
+  },
+  {
+    "id": "Unable to load the X509 key pair due to the following reason: {{.err}}",
+    "translation": "Unable to load the X509 key pair due to the following reason: {{.err}}"
+  },
+  {
+    "id": "The Cert file is not configured. Please configure the missing Cert file.\n",
+    "translation": "The Cert file is not configured. Please configure the missing Cert file.\n"
+  },
+  {
+    "id": "The Key file is not configured. Please configure the missing Key file.\n",
+    "translation": "The Key file is not configured. Please configure the missing Key file.\n"
   }
 ]


 

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


With regards,
Apache Git Services