mirror of
https://github.com/ent/ent.git
synced 2026-04-28 05:30:56 +03:00
schema/field: support for sensitive json fields (#2701)
Closed https://github.com/ent/ent/issues/2596
This commit is contained in:
@@ -42,6 +42,7 @@ func (User) Fields() []ent.Field {
|
||||
field.Strings("strings").
|
||||
Optional(),
|
||||
field.JSON("addr", Addr{}).
|
||||
Sensitive().
|
||||
Optional(),
|
||||
}
|
||||
}
|
||||
|
||||
@@ -38,7 +38,7 @@ type User struct {
|
||||
// Strings holds the value of the "strings" field.
|
||||
Strings []string `json:"strings,omitempty"`
|
||||
// Addr holds the value of the "addr" field.
|
||||
Addr schema.Addr `json:"addr,omitempty"`
|
||||
Addr schema.Addr `json:"-"`
|
||||
}
|
||||
|
||||
// scanValues returns the types for scanning values from sql.Rows.
|
||||
@@ -184,8 +184,7 @@ func (u *User) String() string {
|
||||
builder.WriteString("strings=")
|
||||
builder.WriteString(fmt.Sprintf("%v", u.Strings))
|
||||
builder.WriteString(", ")
|
||||
builder.WriteString("addr=")
|
||||
builder.WriteString(fmt.Sprintf("%v", u.Addr))
|
||||
builder.WriteString("addr=<sensitive>")
|
||||
builder.WriteByte(')')
|
||||
return builder.String()
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import (
|
||||
"net"
|
||||
"net/http"
|
||||
"net/url"
|
||||
"reflect"
|
||||
"testing"
|
||||
|
||||
"entgo.io/ent/dialect"
|
||||
@@ -199,6 +200,11 @@ func NetAddr(t *testing.T, client *ent.Client) {
|
||||
require.Equal(t, "127.0.0.1:80", client.User.GetX(ctx, usr.ID).Addr.String())
|
||||
usr.Update().SetAddr(schema.Addr{Addr: &net.UDPAddr{IP: ip, Port: 1812}}).ExecX(ctx)
|
||||
require.Equal(t, "127.0.0.1:1812", client.User.GetX(ctx, usr.ID).Addr.String())
|
||||
|
||||
// Ensure sensitive fields are not marshalled.
|
||||
f, ok := reflect.TypeOf(ent.User{}).FieldByName("Addr")
|
||||
require.True(t, ok)
|
||||
require.Equal(t, "-", f.Tag.Get("json"))
|
||||
}
|
||||
|
||||
func Dirs(t *testing.T, client *ent.Client) {
|
||||
|
||||
@@ -716,6 +716,12 @@ func (b *jsonBuilder) Comment(c string) *jsonBuilder {
|
||||
return b
|
||||
}
|
||||
|
||||
// Sensitive fields not printable and not serializable.
|
||||
func (b *jsonBuilder) Sensitive() *jsonBuilder {
|
||||
b.desc.Sensitive = true
|
||||
return b
|
||||
}
|
||||
|
||||
// StructTag sets the struct tag of the field.
|
||||
func (b *jsonBuilder) StructTag(s string) *jsonBuilder {
|
||||
b.desc.Tag = s
|
||||
|
||||
@@ -474,9 +474,11 @@ func TestJSON(t *testing.T) {
|
||||
fd = field.Strings("strings").
|
||||
Optional().
|
||||
Default([]string{"a", "b"}).
|
||||
Sensitive().
|
||||
Descriptor()
|
||||
assert.NoError(t, fd.Err)
|
||||
assert.True(t, fd.Optional)
|
||||
assert.True(t, fd.Sensitive)
|
||||
assert.Empty(t, fd.Info.PkgPath)
|
||||
assert.Equal(t, "strings", fd.Name)
|
||||
assert.Equal(t, []string{"a", "b"}, fd.Default)
|
||||
|
||||
Reference in New Issue
Block a user