77 "fmt"
88 "io"
99 "log"
10+ "net"
1011 "net/http"
1112 "os"
1213 "strings"
@@ -26,6 +27,8 @@ func usage() {
2627 fmt .Println (" add-log -db <path> -origin <origin>" )
2728 fmt .Println (" add-key -db <path> -origin <origin> -key <verifier key>" )
2829 fmt .Println (" del-key -db <path> -origin <origin> -key <verifier key>" )
30+ fmt .Println (" add-bastion -db <path> -origin <origin> -bastion <address:port>" )
31+ fmt .Println (" del-bastion -db <path> -origin <origin> -bastion <address:port>" )
2932 fmt .Println (" add-sigsum-log -db <path> -key <hex-encoded key>" )
3033 fmt .Println (" pull-logs -db <path> -source <witness url> [-verbose]" )
3134 fmt .Println (" list-logs -db <path>" )
@@ -63,6 +66,23 @@ func main() {
6366 delKey (db , * originFlag , * keyFlag )
6467 log .Printf ("Deleted key %q for log %q." , * keyFlag , * originFlag )
6568
69+ case "add-bastion" :
70+ originFlag := fs .String ("origin" , "" , "log name" )
71+ bastionFlag := fs .String ("bastion" , "" , "address:port" )
72+ fs .Parse (os .Args [2 :])
73+ checkBastion (* bastionFlag )
74+ db := openDB (* dbFlag )
75+ addBastion (db , * originFlag , * bastionFlag )
76+ log .Printf ("Added bastion %q for log %q." , * bastionFlag , * originFlag )
77+
78+ case "del-bastion" :
79+ originFlag := fs .String ("origin" , "" , "log name" )
80+ bastionFlag := fs .String ("bastion" , "" , "address:port" )
81+ fs .Parse (os .Args [2 :])
82+ db := openDB (* dbFlag )
83+ delBastion (db , * originFlag , * bastionFlag )
84+ log .Printf ("Deleted bastion %q for log %q." , * bastionFlag , * originFlag )
85+
6686 case "add-sigsum-log" :
6787 keyFlag := fs .String ("key" , "" , "hex-encoded key" )
6888 fs .Parse (os .Args [2 :])
@@ -112,6 +132,12 @@ func checkKeyMatches(origin string, vk string) {
112132 }
113133}
114134
135+ func checkBastion (bastion string ) {
136+ if _ , _ , err := net .SplitHostPort (bastion ); err != nil {
137+ log .Fatalf ("Error parsing bastion %q as address:port: %v" , bastion , err )
138+ }
139+ }
140+
115141func addKey (db * sqlite.Conn , origin string , vk string ) {
116142 err := sqlitexExec (db , "INSERT INTO key (origin, key) VALUES (?, ?)" , nil , origin , vk )
117143 if err != nil {
@@ -129,6 +155,23 @@ func delKey(db *sqlite.Conn, origin string, vk string) {
129155 }
130156}
131157
158+ func addBastion (db * sqlite.Conn , origin string , bastion string ) {
159+ err := sqlitexExec (db , "INSERT INTO bastion (origin, bastion) VALUES (?, ?)" , nil , origin , bastion )
160+ if err != nil {
161+ log .Fatalf ("Error adding bastion: %v" , err )
162+ }
163+ }
164+
165+ func delBastion (db * sqlite.Conn , origin string , bastion string ) {
166+ err := sqlitexExec (db , "DELETE FROM bastion WHERE origin = ? AND bastion = ?" , nil , origin , bastion )
167+ if err != nil {
168+ log .Fatalf ("Error deleting bastion: %v" , err )
169+ }
170+ if db .Changes () == 0 {
171+ log .Fatalf ("Bastion %q not found." , bastion )
172+ }
173+ }
174+
132175func addSigsumLog (db * sqlite.Conn , keyFlag string ) {
133176 if len (keyFlag ) != sigsum .PublicKeySize * 2 {
134177 log .Fatal ("Key must be 32 hex-encoded bytes." )
@@ -230,10 +273,12 @@ func listLogs(db *sqlite.Conn) {
230273 'origin', log.origin,
231274 'size', log.tree_size,
232275 'root_hash', log.tree_hash,
233- 'keys', json_group_array(key.key))
276+ 'keys', json_group_array(key.key),
277+ 'bastions', json_group_array(bastion.bastion))
234278 FROM
235279 log
236280 LEFT JOIN key on log.origin = key.origin
281+ LEFT JOIN bastion on log.origin = bastion.origin
237282 GROUP BY
238283 log.origin
239284 ORDER BY
0 commit comments