schema/field: support for sensitive json fields (#2701)

Closed https://github.com/ent/ent/issues/2596
This commit is contained in:
Ariel Mashraki
2022-06-29 11:27:10 +03:00
committed by GitHub
parent 5dbfa24b46
commit 6793d74da7
5 changed files with 17 additions and 3 deletions

View File

@@ -42,6 +42,7 @@ func (User) Fields() []ent.Field {
field.Strings("strings").
Optional(),
field.JSON("addr", Addr{}).
Sensitive().
Optional(),
}
}

View File

@@ -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()
}

View File

@@ -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) {

View File

@@ -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

View File

@@ -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)