aboutsummaryrefslogtreecommitdiff
path: root/cmd/dbinit/dbinit.go
diff options
context:
space:
mode:
Diffstat (limited to 'cmd/dbinit/dbinit.go')
-rw-r--r--cmd/dbinit/dbinit.go61
1 files changed, 61 insertions, 0 deletions
diff --git a/cmd/dbinit/dbinit.go b/cmd/dbinit/dbinit.go
new file mode 100644
index 0000000..4431ced
--- /dev/null
+++ b/cmd/dbinit/dbinit.go
@@ -0,0 +1,61 @@
+package main
+
+import (
+ "database/sql"
+ "flag"
+ "fmt"
+ "log"
+ "strings"
+
+ "github.com/go-sql-driver/mysql"
+)
+
+var (
+ host = flag.String("host", "localhost", "host[:port]")
+ adminUser = flag.String("admin_user", "root", "Admin user")
+ adminPasswd = flag.String("admin_password", "", "Admin password")
+ dbUser = flag.String("db_user", "root", "Database user")
+ dbPasswd = flag.String("db_password", "", "Admin password")
+)
+
+func main() {
+ flag.Parse()
+ var createTableStmt = []string{
+ `CREATE DATABASE IF NOT EXISTS certs DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE 'utf8_general_ci';`,
+ `USE certs;`,
+ `CREATE TABLE IF NOT EXISTS issued_certs (
+ key_id VARCHAR(255) NOT NULL,
+ principals VARCHAR(255) NULL,
+ created_at INT(11) NULL,
+ expires_at INT(11) NULL,
+ revoked BOOLEAN DEFAULT NULL,
+ raw_key TEXT NULL,
+ PRIMARY KEY (key_id)
+ );`,
+ `GRANT ALL PRIVILEGES ON certs.* TO '` + *dbUser + `'@'%' IDENTIFIED BY '` + *dbPasswd + `';`,
+ }
+
+ if len(strings.Split(*host, ":")) != 2 {
+ *host = fmt.Sprintf("%s:3306", *host)
+ }
+ conn := &mysql.Config{
+ User: *adminUser,
+ Passwd: *adminPasswd,
+ Net: "tcp",
+ Addr: *host,
+ }
+ db, err := sql.Open("mysql", conn.FormatDSN())
+ if err != nil {
+ log.Fatalf("Error connecting to database: %v", err)
+ }
+ defer db.Close()
+ if err := db.Ping(); err != nil {
+ log.Fatalf("Unable to connect to database.")
+ }
+ for _, stmt := range createTableStmt {
+ _, err := db.Exec(stmt)
+ if err != nil {
+ log.Fatalf("Error running setup: %v", err)
+ }
+ }
+}