@@ -4,19 +4,21 @@ import (
44 "fmt"
55 "io"
66 "io/ioutil"
7- "os"
87 "strings"
98 "time"
109
1110 "github.com/olekukonko/tablewriter"
1211
1312 "github.com/deis/controller-sdk-go"
1413 "github.com/deis/controller-sdk-go/certs"
14+ dtime "github.com/deis/controller-sdk-go/pkg/time"
1515 "github.com/deis/workflow-cli/settings"
1616)
1717
18+ const dateFormat = "2 Jan 2006"
19+
1820// CertsList lists certs registered with the controller.
19- func (d DeisCmd ) CertsList (results int ) error {
21+ func (d DeisCmd ) CertsList (results int , now time. Time ) error {
2022 s , err := settings .Load (d .ConfigFile )
2123
2224 if err != nil {
@@ -37,57 +39,57 @@ func (d DeisCmd) CertsList(results int) error {
3739 return nil
3840 }
3941
40- table := tablewriter .NewWriter (os . Stdout )
42+ table := tablewriter .NewWriter (d . WOut )
4143 table .SetAlignment (tablewriter .ALIGN_LEFT )
4244 table .SetBorder (false )
4345 table .SetAutoFormatHeaders (false )
4446 table .SetHeaderLine (true )
4547 table .SetHeader ([]string {"Name" , "Common Name" , "SubjectAltName" , "Expires" , "Fingerprint" , "Domains" , "Updated" , "Created" })
4648 for _ , cert := range certList {
47- domains := strings .Join (cert .Domains [:], "," )
48- san := strings .Join (cert .SubjectAltName [:], "," )
49-
50- // Make dates more readable
51- now := time .Now ()
52- expires := cert .Expires .Time .Format ("2 Jan 2006" )
53- created := cert .Created .Time .Format ("2 Jan 2006" )
54- updated := cert .Updated .Time .Format ("2 Jan 2006" )
55-
56- if cert .Expires .Time .Before (now ) {
57- expires += " (expired)"
58- } else {
59- // Ghetto solution
60- expires += " (in"
61- year := cert .Expires .Time .Year () - now .Year ()
62- month := cert .Expires .Time .Month () - now .Month ()
63- day := cert .Expires .Time .Day () - now .Day ()
64-
65- if year > 0 {
66- expires += fmt .Sprintf (" %d year" , year )
67- if year > 1 {
68- expires += "s"
69- }
70- } else if month > 0 {
71- expires += fmt .Sprintf (" %d month" , month )
72- if month > 1 {
73- expires += "s"
74- }
75- } else if day != 0 {
76- // special handling on negative days
77- if day < 0 {
78- day *= - 1
79- }
80-
81- expires += fmt .Sprintf (" %d day" , day )
82- if day > 1 {
83- expires += "s"
49+ domains := strings .Join (cert .Domains , "," )
50+ san := strings .Join (cert .SubjectAltName , "," )
51+
52+ expires := "unknown"
53+ if cert .Expires .Time != nil {
54+ expires = cert .Expires .Format (dateFormat )
55+
56+ if cert .Expires .Time .Before (now ) {
57+ expires += " (expired)"
58+ } else {
59+ // Ghetto solution
60+ expires += " (in"
61+ year := cert .Expires .Time .Year () - now .Year ()
62+ month := cert .Expires .Time .Month () - now .Month ()
63+ day := cert .Expires .Time .Day () - now .Day ()
64+
65+ if year > 0 {
66+ expires += fmt .Sprintf (" %d year" , year )
67+ if year > 1 {
68+ expires += "s"
69+ }
70+ } else if month > 0 {
71+ expires += fmt .Sprintf (" %d month" , month )
72+ if month > 1 {
73+ expires += "s"
74+ }
75+ } else if day != 0 {
76+ expires += fmt .Sprintf (" %d day" , day )
77+ if day > 1 {
78+ expires += "s"
79+ }
8480 }
81+ expires += ")"
8582 }
86- expires += ")"
8783 }
8884
85+ created := safeGetTime (cert .Created )
86+ updated := safeGetTime (cert .Updated )
87+
8988 // show a shorter version of the fingerprint
90- fingerprint := cert .Fingerprint [:5 ] + "[...]" + cert .Fingerprint [len (cert .Fingerprint )- 5 :]
89+ fingerprint := cert .Fingerprint
90+ if len (cert .Fingerprint ) > 4 {
91+ fingerprint = cert .Fingerprint [:5 ] + "[...]" + cert .Fingerprint [len (cert .Fingerprint )- 5 :]
92+ }
9193
9294 table .Append ([]string {cert .Name , cert .CommonName , san , expires , fingerprint , domains , updated , created })
9395 }
@@ -176,19 +178,24 @@ func (d DeisCmd) CertInfo(name string) error {
176178 san = "N/A"
177179 }
178180
181+ expires := safeGetTime (cert .Expires )
182+ starts := safeGetTime (cert .Starts )
183+ created := safeGetTime (cert .Created )
184+ updated := safeGetTime (cert .Updated )
185+
179186 d .Printf ("=== %s Certificate\n " , cert .Name )
180187 d .Println ("Common Name(s): " , cert .CommonName )
181- d .Println ("Expires At: " , cert . Expires )
182- d .Println ("Starts At: " , cert . Starts )
188+ d .Println ("Expires At: " , expires )
189+ d .Println ("Starts At: " , starts )
183190 d .Println ("Fingerprint: " , cert .Fingerprint )
184191 d .Println ("Subject Alt Name: " , san )
185192 d .Println ("Issuer: " , cert .Issuer )
186193 d .Println ("Subject: " , cert .Subject )
187194 d .Println ()
188195 d .Println ("Connected Domains: " , domains )
189196 d .Println ("Owner: " , cert .Owner )
190- d .Println ("Created: " , cert . Created )
191- d .Println ("Updated: " , cert . Updated )
197+ d .Println ("Created: " , created )
198+ d .Println ("Updated: " , updated )
192199
193200 return nil
194201}
@@ -235,3 +242,12 @@ func (d DeisCmd) CertDetach(name, domain string) error {
235242 d .Println ("done" )
236243 return nil
237244}
245+
246+ func safeGetTime (t dtime.Time ) string {
247+ out := "unknown"
248+ if t .Time != nil {
249+ out = t .Format (dateFormat )
250+ }
251+
252+ return out
253+ }
0 commit comments