Skip to content

Commit 2f7acdc

Browse files
authored
fix(api): crypto layer now supports complex types (#5116)
Signed-off-by: francois samin <[email protected]>
1 parent 661af83 commit 2f7acdc

File tree

7 files changed

+63
-43
lines changed

7 files changed

+63
-43
lines changed

engine/api/database/gorpmapping/dao.go

+19-4
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ func Insert(db gorp.SqlExecutor, i interface{}) error {
2727
return err
2828
}
2929

30+
_, has := getTabbleMapping(i)
31+
if !has {
32+
return sdk.WithStack(fmt.Errorf("unkown entity %T", i))
33+
}
34+
3035
err := db.Insert(i)
3136
if e, ok := err.(*pq.Error); ok {
3237
switch e.Code {
@@ -52,12 +57,10 @@ func Insert(db gorp.SqlExecutor, i interface{}) error {
5257
return nil
5358
}
5459

55-
// Update value in given db.
56-
func Update(db gorp.SqlExecutor, i interface{}) error {
60+
func UpdateColumns(db gorp.SqlExecutor, i interface{}, columnFilter gorp.ColumnFilter) error {
5761
if err := checkDatabase(db); err != nil {
5862
return err
5963
}
60-
6164
mapping, has := getTabbleMapping(i)
6265
if !has {
6366
return sdk.WithStack(fmt.Errorf("unkown entity %T", i))
@@ -104,7 +107,7 @@ func Update(db gorp.SqlExecutor, i interface{}) error {
104107
}
105108
}
106109

107-
n, err := db.Update(i)
110+
n, err := db.UpdateColumns(columnFilter, i)
108111
if e, ok := err.(*pq.Error); ok {
109112
switch e.Code {
110113
case ViolateUniqueKeyPGCode:
@@ -131,6 +134,18 @@ func Update(db gorp.SqlExecutor, i interface{}) error {
131134
return nil
132135
}
133136

137+
func acceptAllFilter(col *gorp.ColumnMap) bool {
138+
return true
139+
}
140+
141+
// Update value in given db.
142+
func Update(db gorp.SqlExecutor, i interface{}) error {
143+
if err := checkDatabase(db); err != nil {
144+
return err
145+
}
146+
return UpdateColumns(db, i, acceptAllFilter)
147+
}
148+
134149
// Delete value in given db.
135150
func Delete(db gorp.SqlExecutor, i interface{}) error {
136151
if err := checkDatabase(db); err != nil {

engine/api/database/gorpmapping/encryption.go

+13-9
Original file line numberDiff line numberDiff line change
@@ -136,10 +136,15 @@ func resetEncryptedData(db gorp.SqlExecutor, i interface{}) error {
136136
}
137137

138138
for _, f := range mapping.EncryptedFields {
139-
// Reset the field to the zero value
139+
// Reset the field to the zero value of the placeholder
140140
field := val.FieldByName(f.Name)
141-
placeholder := reflect.ValueOf(sdk.PasswordPlaceholder)
142-
field.Set(placeholder)
141+
if field.Kind() == reflect.String {
142+
placeholder := reflect.ValueOf(sdk.PasswordPlaceholder)
143+
field.Set(placeholder)
144+
} else {
145+
placeholder := reflect.Zero(field.Type())
146+
field.Set(placeholder)
147+
}
143148
}
144149
return nil
145150
}
@@ -171,7 +176,6 @@ func getEncryptedData(db gorp.SqlExecutor, i interface{}) error {
171176

172177
var encryptedColumnsSlice = make([]string, len(mapping.EncryptedFields))
173178
var fieldsValue = make(map[int]*reflect.Value, len(mapping.EncryptedFields))
174-
var encryptedFieldsSlice = make([]interface{}, len(mapping.EncryptedFields))
175179
var encryptedContents = make([]interface{}, len(mapping.EncryptedFields))
176180
var extrasFieldsNames = make(map[int][]string, len(mapping.EncryptedFields))
177181

@@ -190,9 +194,6 @@ func getEncryptedData(db gorp.SqlExecutor, i interface{}) error {
190194

191195
field := val.FieldByName(f.Name)
192196
fieldsValue[idx] = &field
193-
fi := field.Interface()
194-
195-
encryptedFieldsSlice[idx] = &fi
196197
extrasFieldsNames[idx] = f.Extras
197198
}
198199

@@ -211,10 +212,13 @@ func getEncryptedData(db gorp.SqlExecutor, i interface{}) error {
211212
}
212213

213214
var encryptedContent = encryptedContent.(*[]byte)
214-
if err := Decrypt(*encryptedContent, encryptedFieldsSlice[idx], extras); err != nil {
215+
var targetField = val.FieldByName(mapping.EncryptedFields[idx].Name)
216+
var targetHolder = reflect.New(reflect.TypeOf(targetField.Interface())).Interface()
217+
218+
if err := Decrypt(*encryptedContent, targetHolder, extras); err != nil {
215219
return err
216220
}
217-
fieldsValue[idx].Set(reflect.ValueOf(*encryptedFieldsSlice[idx].(*interface{})))
221+
fieldsValue[idx].Set(reflect.ValueOf(targetHolder).Elem())
218222
}
219223

220224
return nil

engine/api/database/gorpmapping/gorpmapping.go

+19-9
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,14 @@ func deepFields(iface interface{}) []reflect.StructField {
3838

3939
for i := 0; i < ift.NumField(); i++ {
4040
v := ifv.Field(i)
41+
dbTag, hasDBTag := ift.Field(i).Tag.Lookup("db")
42+
tagValues := strings.Split(dbTag, ",")
43+
if len(tagValues) >= 0 && tagValues[0] == "-" {
44+
continue
45+
}
4146

42-
switch v.Kind() {
43-
case reflect.Struct:
47+
switch {
48+
case v.Kind() == reflect.Struct && !hasDBTag:
4449
fields = append(fields, deepFields(v.Interface())...)
4550
default:
4651
fields = append(fields, ift.Field(i))
@@ -67,17 +72,22 @@ func New(target interface{}, name string, autoIncrement bool, keys ...string) Ta
6772

6873
fields := deepFields(target)
6974
for i := 0; i < len(fields); i++ {
70-
gmTag, ok := fields[i].Tag.Lookup("gorpmapping")
71-
if ok {
75+
dbTag, okDBTag := fields[i].Tag.Lookup("db")
76+
if !okDBTag {
77+
continue
78+
}
79+
80+
tagValues := strings.Split(dbTag, ",")
81+
if len(tagValues) == 0 {
82+
continue
83+
}
84+
85+
gmTag, okGMTag := fields[i].Tag.Lookup("gorpmapping")
86+
if okGMTag {
7287
tagValues := strings.Split(gmTag, ",")
7388
if len(tagValues) == 0 {
7489
continue
7590
}
76-
77-
dbTag, ok := fields[i].Tag.Lookup("db")
78-
if !ok {
79-
continue
80-
}
8191
column := strings.SplitN(dbTag, ",", 2)[0]
8292

8393
if tagValues[0] == "encrypted" {

engine/api/database/gorpmapping/signature.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -179,7 +179,7 @@ func checkSignature(i Canonicaller, k symmecrypt.Key, f *CanonicalForm, sig []by
179179

180180
decryptedSig, err := k.Decrypt(sig)
181181
if err != nil {
182-
return false, sdk.WrapError(err, "unable to decrypt content")
182+
return false, sdk.WrapError(err, "unable to decrypt content (%s)", string(sig))
183183
}
184184

185185
res := clearContent.String() == string(decryptedSig)

engine/api/test/gorp.go

+5-2
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,11 @@ func (s *SqlExecutorMock) WithContext(ctx context.Context) gorp.SqlExecutor { re
2828
func (s *SqlExecutorMock) Get(i interface{}, keys ...interface{}) (interface{}, error) {
2929
return nil, nil
3030
}
31-
func (s *SqlExecutorMock) Insert(list ...interface{}) error { return nil }
32-
func (s *SqlExecutorMock) Update(list ...interface{}) (int64, error) { return 0, nil }
31+
func (s *SqlExecutorMock) Insert(list ...interface{}) error { return nil }
32+
func (s *SqlExecutorMock) Update(list ...interface{}) (int64, error) { return 0, nil }
33+
func (s *SqlExecutorMock) UpdateColumns(columnFilter gorp.ColumnFilter, list ...interface{}) (int64, error) {
34+
return 0, nil
35+
}
3336
func (s *SqlExecutorMock) Delete(list ...interface{}) (int64, error) { return 0, nil }
3437
func (s *SqlExecutorMock) Exec(query string, args ...interface{}) (sql.Result, error) { return nil, nil }
3538
func (s *SqlExecutorMock) Select(i interface{}, query string, args ...interface{}) ([]interface{}, error) {

go.mod

+4-7
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ require (
1919
github.com/Shopify/sarama v1.19.0
2020
github.com/alecthomas/jsonschema v0.0.0-20200123075451-43663a393755
2121
github.com/andygrunwald/go-gerrit v0.0.0-20181207071854-19ef3e9332a4
22-
github.com/apoydence/onpar v0.0.0-20190519213022-ee068f8ea4d1 // indirect
2322
github.com/araddon/gou v0.0.0-20180315155215-820e9f87cd05 // indirect
2423
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da // indirect
2524
github.com/armon/go-radix v1.0.0 // indirect
@@ -45,7 +44,7 @@ require (
4544
github.com/duosecurity/duo_api_golang v0.0.0-20180315112207-d0530c80e49a // indirect
4645
github.com/eapache/go-resiliency v1.1.0
4746
github.com/fatih/color v1.7.0
48-
github.com/fatih/structs v1.0.0
47+
github.com/fatih/structs v1.0.0 // indirect
4948
github.com/fortytw2/leaktest v1.2.0 // indirect
5049
github.com/frankban/quicktest v1.6.0 // indirect
5150
github.com/fsamin/go-dump v1.0.9
@@ -106,9 +105,9 @@ require (
106105
github.com/kr/pty v1.1.8 // indirect
107106
github.com/kylelemons/godebug v1.1.0 // indirect
108107
github.com/lib/pq v1.0.0
109-
github.com/lytics/logrus v0.0.0-20170528191427-4389a17ed024
108+
github.com/lytics/logrus v0.0.0-20170528191427-4389a17ed024 // indirect
110109
github.com/magiconair/properties v1.8.1 // indirect
111-
github.com/mailru/easyjson v0.0.0-20171120080333-32fa128f234d
110+
github.com/mailru/easyjson v0.0.0-20171120080333-32fa128f234d // indirect
112111
github.com/marstr/guid v1.1.0 // indirect
113112
github.com/maruel/panicparse v1.3.0
114113
github.com/mattbaird/elastigo v0.0.0-20170123220020-2fe47fd29e4b // indirect
@@ -153,7 +152,6 @@ require (
153152
github.com/poy/onpar v0.0.0-20190519213022-ee068f8ea4d1 // indirect
154153
github.com/prometheus/client_golang v1.1.0 // indirect
155154
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4 // indirect
156-
github.com/prometheus/common v0.6.0
157155
github.com/rcrowley/go-metrics v0.0.0-20190826022208-cac0b30c2563 // indirect
158156
github.com/rubenv/sql-migrate v0.0.0-20160620083229-6f4757563362
159157
github.com/samuel/go-zookeeper v0.0.0-20180130194729-c4fab1ac1bec // indirect
@@ -193,7 +191,6 @@ require (
193191
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45
194192
golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a
195193
golang.org/x/text v0.3.2
196-
google.golang.org/appengine v1.6.1
197194
google.golang.org/genproto v0.0.0-20190817000702-55e96fffbd48 // indirect
198195
google.golang.org/grpc v1.23.0
199196
gopkg.in/AlecAivazis/survey.v1 v1.7.1
@@ -225,7 +222,7 @@ require (
225222

226223
replace github.com/alecthomas/jsonschema => github.com/sguiheux/jsonschema v0.2.0
227224

228-
replace github.com/go-gorp/gorp => github.com/yesnault/gorp v2.0.1-0.20190906143353-6210446a0d92+incompatible
225+
replace github.com/go-gorp/gorp => github.com/yesnault/gorp v2.0.1-0.20200325154225-2dc6d8c2da37+incompatible
229226

230227
replace github.com/docker/docker => github.com/docker/engine v0.0.0-20180816081446-320063a2ad06
231228

go.sum

+2-11
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,6 @@ github.com/Shopify/sarama v1.19.0 h1:9oksLxC6uxVPHPVYUmq6xhr1BOF/hHobWH2UzO67z1s
3939
github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo=
4040
github.com/Shopify/toxiproxy v2.1.4+incompatible h1:TKdv8HiTLgE5wdJuEML90aBgNWsokNbMijUGhmcoBJc=
4141
github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI=
42-
github.com/alecthomas/jsonschema v0.0.0-20200123075451-43663a393755 h1:+xHAcx6b5TS1DiY+StyK2CrNvD0nQ97G7w45x4ljJFs=
43-
github.com/alecthomas/jsonschema v0.0.0-20200123075451-43663a393755/go.mod h1:Juc2PrI3wtNfUwptSvAIeNx+HrETwHQs6nf+TkOJlOA=
4442
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc h1:cAKDfWh5VpdgMhJosfJnn5/FoN2SRZ4p7fJNX58YPaU=
4543
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
4644
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY=
@@ -51,8 +49,6 @@ github.com/aokoli/goutils v1.1.0 h1:jy4ghdcYvs5EIoGssZNslIASX5m+KNMfyyKvRQ0TEVE=
5149
github.com/aokoli/goutils v1.1.0/go.mod h1:SijmP0QR8LtwsmDs8Yii5Z/S4trXFGFC2oO5g9DP+DQ=
5250
github.com/apache/thrift v0.12.0 h1:pODnxUFNcjP9UTLZGTdeh+j16A8lJbRvD3rOtrk/7bs=
5351
github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ=
54-
github.com/apoydence/onpar v0.0.0-20190519213022-ee068f8ea4d1 h1:vToH0A6ByBaoM/A/4AwxgHKFgzcufNcYQfDcp60uW3M=
55-
github.com/apoydence/onpar v0.0.0-20190519213022-ee068f8ea4d1/go.mod h1:maauOJD0kdDqIz4xmkunipFVbBoTM6pFSy0kkWBcIUY=
5652
github.com/araddon/gou v0.0.0-20180315155215-820e9f87cd05 h1:MbFvRvOzFRujpuBALUI/2ll9+8PYi23cEp/DSQFEBfU=
5753
github.com/araddon/gou v0.0.0-20180315155215-820e9f87cd05/go.mod h1:ikc1XA58M+Rx7SEbf0bLJCfBkwayZ8T5jBo5FXK8Uz8=
5854
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6 h1:G1bPvciwNyF7IUmKXNt9Ak3m6u9DE1rF+RmtIkBpVdA=
@@ -142,8 +138,6 @@ github.com/frankban/quicktest v1.6.0 h1:Cd62nl66vQsx8Uv1t8M0eICyxIwZG7MxiAOrdnnU
142138
github.com/frankban/quicktest v1.6.0/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o=
143139
github.com/fsamin/go-dump v1.0.9 h1:3MAneAJLnGfKTJtFEAdgrD+QqqK2Hwj7EJUQMQZcDls=
144140
github.com/fsamin/go-dump v1.0.9/go.mod h1:ZgKd2aOXAFFbbFuUgvQhu7mwTlI3d3qnTICMWdvAa9o=
145-
github.com/fsamin/go-repo v0.1.4 h1:P70wyLGKAHeaVDuxHckc1mCM1tsqDsTNGrF/tu1+Z1s=
146-
github.com/fsamin/go-repo v0.1.4/go.mod h1:V7Te54EYyamyQIp6UKfONBbXBlPF4u3C1bvcH7OtdLM=
147141
github.com/fsamin/go-repo v0.1.5 h1:YON5aisDn+0DpJlXvqrPT9/EGv13JgYL3X/3GXRlLhY=
148142
github.com/fsamin/go-repo v0.1.5/go.mod h1:V7Te54EYyamyQIp6UKfONBbXBlPF4u3C1bvcH7OtdLM=
149143
github.com/fsamin/go-shredder v0.0.0-20180118184739-b2488aedb5be h1:UhjSvwE1gxUYfekK9BXZ/LL55we9Avg+2Pt0PIlMYCk=
@@ -187,8 +181,6 @@ github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfb
187181
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
188182
github.com/golang/mock v1.3.1 h1:qGJ6qTW+x6xX/my+8YUVl4WNpX9B7+/l2tRsHGZ7f2s=
189183
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
190-
github.com/golang/mock v1.4.0 h1:Rd1kQnQu0Hq3qvJppYSG0HtP+f5LPPUiDswTLiEegLg=
191-
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
192184
github.com/golang/mock v1.4.1 h1:ocYkMQY5RrXTYgXl7ICpV0IXwlEQGwKIsery4gyXa1U=
193185
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
194186
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
@@ -465,7 +457,6 @@ github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDf
465457
github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo=
466458
github.com/prometheus/client_golang v1.1.0 h1:BQ53HtBmfOitExawJ6LokA4x8ov/z0SYYb0+HxJfRI8=
467459
github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g=
468-
github.com/prometheus/client_golang v1.5.1 h1:bdHYieyGlH+6OLEk2YQha8THib30KP0/yD0YH9m6xcA=
469460
github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
470461
github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo=
471462
github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
@@ -575,8 +566,8 @@ github.com/yesnault/go-toml v0.0.0-20191205182532-f5ef6cee7945 h1:icS0gqYJLvPFpn
575566
github.com/yesnault/go-toml v0.0.0-20191205182532-f5ef6cee7945/go.mod h1:SsMrIuedaKvK8GekjwjVv8gMnHNAuvoINpKCARzdsEQ=
576567
github.com/yesnault/gorp v2.0.0+incompatible h1:4pwtvWrXQTAgGVnzAB0X5jX/mWRQEa8zmcdNT5U8jyg=
577568
github.com/yesnault/gorp v2.0.0+incompatible/go.mod h1:7nhqtxBPZoPXx86SqUzP/OFLd8prnhkydPk51uJthQc=
578-
github.com/yesnault/gorp v2.0.1-0.20190906143353-6210446a0d92+incompatible h1:lJBr14ALmOEDTV6iIAQLR8WSBSUIqeS8cFZ628Zl2fo=
579-
github.com/yesnault/gorp v2.0.1-0.20190906143353-6210446a0d92+incompatible/go.mod h1:7nhqtxBPZoPXx86SqUzP/OFLd8prnhkydPk51uJthQc=
569+
github.com/yesnault/gorp v2.0.1-0.20200325154225-2dc6d8c2da37+incompatible h1:8M+L4IKModOdc0ZsH0kHJiqZ7CmWF4yH8yy4InZxKyY=
570+
github.com/yesnault/gorp v2.0.1-0.20200325154225-2dc6d8c2da37+incompatible/go.mod h1:7nhqtxBPZoPXx86SqUzP/OFLd8prnhkydPk51uJthQc=
580571
github.com/yuin/gluare v0.0.0-20170607022532-d7c94f1a80ed h1:I1vcLHWU9m30rA90rMrKPu0eD3NDA4FBlkB8WMaDyUw=
581572
github.com/yuin/gluare v0.0.0-20170607022532-d7c94f1a80ed/go.mod h1:9w6KSdZh23UWqOywWsRLUcJUrUNjRh4Ql3z9uVgnSP4=
582573
github.com/yuin/gopher-lua v0.0.0-20170901023928-8c2befcd3908 h1:D1Gc3nOtLEadaHIZD98eX2ABnEi0OW7UZGogFWERsFI=

0 commit comments

Comments
 (0)