Skip to content

Commit 9e28d94

Browse files
committed
Updated
1 parent f4ccaa3 commit 9e28d94

File tree

4 files changed

+78
-3
lines changed

4 files changed

+78
-3
lines changed

pkg/cert/certmanager.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,11 +49,21 @@ func NewCertManager(ctx context.Context, conn pg.PoolConn, opt ...Opt) (*CertMan
4949

5050
// Register the root certificate
5151
if err := self.conn.Tx(ctx, func(conn pg.Conn) error {
52+
// Register the name
5253
if name, err := self.RegisterName(ctx, self.root.SubjectMeta()); err != nil {
5354
return err
5455
} else {
5556
self.root.Subject = types.Uint64Ptr(name.Id)
5657
}
58+
59+
// TODO: Get a cert for the root, if no cert exists then register a new one
60+
if cert, err := self.RegisterCert(ctx, self.root); err != nil {
61+
return err
62+
} else {
63+
self.root = cert
64+
}
65+
66+
// Return success
5767
return nil
5868
}); err != nil {
5969
return nil, err
@@ -83,6 +93,11 @@ func (certmanager *CertManager) RegisterName(ctx context.Context, meta schema.Na
8393
}
8494
}
8595

96+
func (certmanager *CertManager) RegisterCert(ctx context.Context, meta *Cert) (*Cert, error) {
97+
// Return error
98+
return nil, httpresponse.ErrNotImplemented
99+
}
100+
86101
func (certmanager *CertManager) GetName(ctx context.Context, id uint64) (*schema.Name, error) {
87102
var name schema.Name
88103
if err := certmanager.conn.Get(ctx, &name, schema.NameId(id)); err != nil {
@@ -93,6 +108,14 @@ func (certmanager *CertManager) GetName(ctx context.Context, id uint64) (*schema
93108
}
94109

95110
func (certmanager *CertManager) UpdateName(ctx context.Context, id uint64, meta schema.NameMeta) (*schema.Name, error) {
111+
// Don't allow to update the commonName of the root certificate
112+
if id == types.PtrUint64(certmanager.root.Subject) {
113+
if meta.CommonName != "" {
114+
return nil, httpresponse.ErrConflict.With("cannot update commonName of root certificate")
115+
}
116+
}
117+
118+
// Allow the update
96119
var name schema.Name
97120
if err := certmanager.conn.Update(ctx, &name, schema.NameId(id), meta); err != nil {
98121
return nil, err

pkg/cert/certmanager_test.go

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -66,13 +66,11 @@ func Test_CertManager_001(t *testing.T) {
6666
// Update name
6767
t.Run("UpdateName", func(t *testing.T) {
6868
name, err := certmanager.UpdateName(context.TODO(), types.PtrUint64(certmanager.Root().Subject), schema.NameMeta{
69-
CommonName: "root_2",
70-
Org: types.StringPtr("mutablelogic"),
69+
Org: types.StringPtr("mutablelogic"),
7170
})
7271
if !assert.NoError(err) {
7372
t.FailNow()
7473
}
75-
assert.Equal("root_2", name.CommonName)
7674
assert.Equal("mutablelogic", types.PtrString(name.Org))
7775
})
7876

pkg/cert/schema/cert.go

Lines changed: 51 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,12 @@
11
package schema
22

33
import (
4+
"context"
45
"encoding/json"
56
"net"
67
"time"
8+
9+
pg "github.com/djthorpe/go-pg"
710
)
811

912
////////////////////////////////////////////////////////////////////////////////
@@ -34,3 +37,51 @@ func (c CertMeta) String() string {
3437
}
3538
return string(data)
3639
}
40+
41+
////////////////////////////////////////////////////////////////////////////////
42+
// SQL
43+
44+
// Create objects in the schema
45+
func bootstrapCert(ctx context.Context, conn pg.Conn) error {
46+
q := []string{
47+
certCreateTable,
48+
}
49+
for _, query := range q {
50+
if err := conn.Exec(ctx, query); err != nil {
51+
return err
52+
}
53+
}
54+
return nil
55+
}
56+
57+
const (
58+
certCreateTable = `
59+
CREATE TABLE IF NOT EXISTS ${"schema"}.cert (
60+
-- cert name
61+
"name" TEXT PRIMARY KEY,
62+
-- subject
63+
"subject" SERIAL REFERENCES ${"schema"}."name"("id") ON DELETE CASCADE,
64+
-- signer
65+
"signer" TEXT REFERENCES ${"schema"}.cert("name") ON DELETE RESTRICT,
66+
-- certificate
67+
"cert" BYTEA NOT NULL,
68+
-- private key
69+
"key" BYTEA NOT NULL,
70+
-- expiry
71+
"not_before" TIMESTAMP NOT NULL,
72+
"not_after" TIMESTAMP NOT NULL,
73+
-- ca
74+
"is_ca" BOOLEAN NOT NULL,
75+
-- timestamp
76+
"ts" TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
77+
)
78+
`
79+
certInsert = `
80+
INSERT INTO ${"schema"}.cert (
81+
name, subject, signer, cert, key, not_before, not_after, is_ca
82+
) VALUES (
83+
@name, @subject, @signer, @cert, @key, @not_before, @not_after, @is_ca
84+
) RETURNING
85+
name, subject, signer, cert, key, ts
86+
`
87+
)

pkg/cert/schema/schema.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,9 @@ func Bootstrap(ctx context.Context, conn pg.Conn) error {
3434
if err := bootstrapName(ctx, conn); err != nil {
3535
return err
3636
}
37+
if err := bootstrapCert(ctx, conn); err != nil {
38+
return err
39+
}
3740

3841
// Commit the transaction
3942
return nil

0 commit comments

Comments
 (0)