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").
|
field.Strings("strings").
|
||||||
Optional(),
|
Optional(),
|
||||||
field.JSON("addr", Addr{}).
|
field.JSON("addr", Addr{}).
|
||||||
|
Sensitive().
|
||||||
Optional(),
|
Optional(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ type User struct {
|
|||||||
// Strings holds the value of the "strings" field.
|
// Strings holds the value of the "strings" field.
|
||||||
Strings []string `json:"strings,omitempty"`
|
Strings []string `json:"strings,omitempty"`
|
||||||
// Addr holds the value of the "addr" field.
|
// 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.
|
// scanValues returns the types for scanning values from sql.Rows.
|
||||||
@@ -184,8 +184,7 @@ func (u *User) String() string {
|
|||||||
builder.WriteString("strings=")
|
builder.WriteString("strings=")
|
||||||
builder.WriteString(fmt.Sprintf("%v", u.Strings))
|
builder.WriteString(fmt.Sprintf("%v", u.Strings))
|
||||||
builder.WriteString(", ")
|
builder.WriteString(", ")
|
||||||
builder.WriteString("addr=")
|
builder.WriteString("addr=<sensitive>")
|
||||||
builder.WriteString(fmt.Sprintf("%v", u.Addr))
|
|
||||||
builder.WriteByte(')')
|
builder.WriteByte(')')
|
||||||
return builder.String()
|
return builder.String()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import (
|
|||||||
"net"
|
"net"
|
||||||
"net/http"
|
"net/http"
|
||||||
"net/url"
|
"net/url"
|
||||||
|
"reflect"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"entgo.io/ent/dialect"
|
"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())
|
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)
|
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())
|
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) {
|
func Dirs(t *testing.T, client *ent.Client) {
|
||||||
|
|||||||
@@ -716,6 +716,12 @@ func (b *jsonBuilder) Comment(c string) *jsonBuilder {
|
|||||||
return b
|
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.
|
// StructTag sets the struct tag of the field.
|
||||||
func (b *jsonBuilder) StructTag(s string) *jsonBuilder {
|
func (b *jsonBuilder) StructTag(s string) *jsonBuilder {
|
||||||
b.desc.Tag = s
|
b.desc.Tag = s
|
||||||
|
|||||||
@@ -474,9 +474,11 @@ func TestJSON(t *testing.T) {
|
|||||||
fd = field.Strings("strings").
|
fd = field.Strings("strings").
|
||||||
Optional().
|
Optional().
|
||||||
Default([]string{"a", "b"}).
|
Default([]string{"a", "b"}).
|
||||||
|
Sensitive().
|
||||||
Descriptor()
|
Descriptor()
|
||||||
assert.NoError(t, fd.Err)
|
assert.NoError(t, fd.Err)
|
||||||
assert.True(t, fd.Optional)
|
assert.True(t, fd.Optional)
|
||||||
|
assert.True(t, fd.Sensitive)
|
||||||
assert.Empty(t, fd.Info.PkgPath)
|
assert.Empty(t, fd.Info.PkgPath)
|
||||||
assert.Equal(t, "strings", fd.Name)
|
assert.Equal(t, "strings", fd.Name)
|
||||||
assert.Equal(t, []string{"a", "b"}, fd.Default)
|
assert.Equal(t, []string{"a", "b"}, fd.Default)
|
||||||
|
|||||||
Reference in New Issue
Block a user