Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
Kevin Lyda
cashier
Commits
6dfe350c
Commit
6dfe350c
authored
Jan 08, 2017
by
Niall Sheridan
Browse files
Remove dbinit and use sql/js seed files
parent
9aeb1445
Changes
6
Hide whitespace changes
Inline
Side-by-side
.travis.yml
View file @
6dfe350c
...
...
@@ -16,14 +16,13 @@ matrix:
before_install
:
-
go get -v github.com/golang/lint/golint
-
go install ./cmd/dbinit
install
:
-
go version
before_script
:
-
dbinit -db_user user -db_password passwd
-
dbinit -db_type mongo -admin_user '' -db_user user -db_password passwd
-
mysql < db/seed.sql
-
mongo db/seed.js
sudo
:
false
script
:
...
...
README.md
View file @
6dfe350c
...
...
@@ -151,8 +151,9 @@ server {
}
```
Prior to using MySQL, MongoDB or SQLite you need to create the database and tables using the
[
dbinit tool
](
cmd/dbinit/dbinit.go
)
.
dbinit hasn't been tested with mongo replica sets.
Prior to using MySQL, MongoDB or SQLite you need to create the database and tables using
[
one of the provided files
](
db
)
.
e.g.
`mysql < db/seed.sql`
or
`mongo db/seed.js`
.
Obviously you should setup a role user for running in prodution.
### datastore
...
...
cmd/dbinit/dbinit.go
deleted
100644 → 0
View file @
9aeb1445
package
main
import
(
"database/sql"
"flag"
"fmt"
"log"
"strings"
mgo
"gopkg.in/mgo.v2"
"github.com/go-sql-driver/mysql"
_
"github.com/mattn/go-sqlite3"
)
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"
,
"user"
,
"Database user"
)
dbPasswd
=
flag
.
String
(
"db_password"
,
"passwd"
,
"Admin password"
)
dbType
=
flag
.
String
(
"db_type"
,
"mysql"
,
"Database engine (
\"
mysql
\"
,
\"
sqlite
\"
or
\"
mongo
\"
)"
)
sqliteDB
=
flag
.
String
(
"db_path"
,
"certs.db"
,
"Path to SQLite database"
)
authDB
=
flag
.
String
(
"authdb"
,
"admin"
,
"Admin database (mongo)"
)
certsDB
=
"certs"
issuedTable
=
"issued_certs"
createTable
=
`CREATE TABLE IF NOT EXISTS `
+
issuedTable
+
` (
key_id VARCHAR(255) NOT NULL,
principals VARCHAR(255) NULL,
created_at DATETIME NULL,
expires_at DATETIME NULL,
revoked BOOLEAN DEFAULT NULL,
raw_key TEXT NULL,
PRIMARY KEY (key_id)
);`
)
func
initSQLite
()
{
db
,
err
:=
sql
.
Open
(
"sqlite3"
,
*
sqliteDB
)
if
err
!=
nil
{
log
.
Fatal
(
err
)
}
defer
db
.
Close
()
if
_
,
err
=
db
.
Exec
(
createTable
);
err
!=
nil
{
log
.
Fatal
(
err
)
}
}
func
initMySQL
()
{
var
createTableStmt
=
[]
string
{
`CREATE DATABASE IF NOT EXISTS `
+
certsDB
+
` DEFAULT CHARACTER SET = 'utf8' DEFAULT COLLATE 'utf8_general_ci';`
,
`USE `
+
certsDB
+
`;`
,
createTable
,
`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
)
}
}
}
func
initMongo
()
{
di
:=
&
mgo
.
DialInfo
{
Addrs
:
strings
.
Split
(
*
host
,
","
),
Username
:
*
adminUser
,
Password
:
*
adminPasswd
,
Database
:
*
authDB
,
}
session
,
err
:=
mgo
.
DialWithInfo
(
di
)
if
err
!=
nil
{
log
.
Fatalln
(
err
)
}
defer
session
.
Close
()
d
:=
session
.
DB
(
certsDB
)
if
err
:=
d
.
UpsertUser
(
&
mgo
.
User
{
Username
:
*
dbUser
,
Password
:
*
dbPasswd
,
Roles
:
[]
mgo
.
Role
{
mgo
.
RoleReadWrite
},
});
err
!=
nil
{
log
.
Fatalln
(
err
)
}
c
:=
d
.
C
(
issuedTable
)
i
:=
mgo
.
Index
{
Key
:
[]
string
{
"keyid"
},
Unique
:
true
,
}
if
err
!=
c
.
EnsureIndex
(
i
)
{
log
.
Fatalln
(
err
)
}
}
func
main
()
{
flag
.
Parse
()
switch
*
dbType
{
case
"mysql"
:
initMySQL
()
case
"mongo"
:
initMongo
()
case
"sqlite"
:
initSQLite
()
default
:
log
.
Fatalf
(
"Invalid database type"
)
}
}
db/seed.js
0 → 100644
View file @
6dfe350c
conn
=
new
Mongo
();
db
=
conn
.
getDB
(
"
certs
"
);
db
.
issued_certs
.
createIndex
({
"
keyid
"
:
1
},
{
unique
:
true
});
db/seed.sql
0 → 100644
View file @
6dfe350c
CREATE
DATABASE
IF
NOT
EXISTS
`certs`
;
USE
`certs`
;
CREATE
TABLE
`issued_certs`
(
`key_id`
varchar
(
255
)
NOT
NULL
,
`principals`
varchar
(
255
)
DEFAULT
NULL
,
`created_at`
datetime
DEFAULT
NULL
,
`expires_at`
datetime
DEFAULT
NULL
,
`revoked`
tinyint
(
1
)
DEFAULT
NULL
,
`raw_key`
text
,
PRIMARY
KEY
(
`key_id`
)
);
server/store/store_test.go
View file @
6dfe350c
...
...
@@ -3,9 +3,11 @@ package store
import
(
"crypto/rand"
"crypto/rsa"
"database/sql"
"io/ioutil"
"os"
"os/exec"
"os/user"
"strings"
"testing"
"time"
...
...
@@ -15,10 +17,6 @@ import (
"golang.org/x/crypto/ssh"
)
var
(
dbConfig
=
map
[
string
]
string
{
"username"
:
"user"
,
"password"
:
"passwd"
,
"address"
:
"localhost"
}
)
func
TestParseCertificate
(
t
*
testing
.
T
)
{
t
.
Parallel
()
a
:=
assert
.
New
(
t
)
...
...
@@ -93,8 +91,8 @@ func TestMySQLStore(t *testing.T) {
if
os
.
Getenv
(
"MYSQL_TEST"
)
==
""
{
t
.
Skip
(
"No MYSQL_TEST environment variable"
)
}
dbConfig
[
"type"
]
=
"mysql"
db
,
err
:=
NewSQLStore
(
dbConfig
)
u
,
_
:=
user
.
Current
()
db
,
err
:=
NewSQLStore
(
map
[
string
]
string
{
"type"
:
"mysql"
,
"username"
:
u
.
Username
}
)
if
err
!=
nil
{
t
.
Error
(
err
)
}
...
...
@@ -106,8 +104,7 @@ func TestMongoStore(t *testing.T) {
if
os
.
Getenv
(
"MONGO_TEST"
)
==
""
{
t
.
Skip
(
"No MONGO_TEST environment variable"
)
}
dbConfig
[
"type"
]
=
"mongo"
db
,
err
:=
NewMongoStore
(
dbConfig
)
db
,
err
:=
NewMongoStore
(
map
[
string
]
string
{
"type"
:
"mongo"
})
if
err
!=
nil
{
t
.
Error
(
err
)
}
...
...
@@ -121,11 +118,21 @@ func TestSQLiteStore(t *testing.T) {
t
.
Error
(
err
)
}
defer
os
.
Remove
(
f
.
Name
())
// This is so jank.
args
:=
[]
string
{
"run"
,
"../../cmd/dbinit/dbinit.go"
,
"-db_type"
,
"sqlite"
,
"-db_path"
,
f
.
Name
()}
if
err
:=
exec
.
Command
(
"go"
,
args
...
)
.
Run
();
err
!=
nil
{
seed
,
err
:=
ioutil
.
ReadFile
(
"../../db/seed.sql"
)
if
err
!=
nil
{
t
.
Error
(
err
)
}
stmts
:=
strings
.
Split
(
string
(
seed
),
";"
)
d
,
_
:=
sql
.
Open
(
"sqlite3"
,
f
.
Name
())
for
_
,
stmt
:=
range
stmts
{
if
!
strings
.
Contains
(
stmt
,
"CREATE TABLE"
)
{
continue
}
d
.
Exec
(
stmt
)
}
d
.
Close
()
config
:=
map
[
string
]
string
{
"type"
:
"sqlite"
,
"filename"
:
f
.
Name
()}
db
,
err
:=
NewSQLStore
(
config
)
if
err
!=
nil
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment