feat: add name and emailVerified fields for static passwords (#4526)

Signed-off-by: Ivan Zvyagintsev <ivan.zvyagintsev@flant.com>
This commit is contained in:
Ivan Zviagintsev
2026-02-12 12:13:54 +01:00
committed by GitHub
parent c016300db9
commit 9e377718dc
26 changed files with 551 additions and 22 deletions
+4
View File
@@ -100,7 +100,9 @@ func (p *password) UnmarshalJSON(b []byte) error {
var data struct {
Email string `json:"email"`
Username string `json:"username"`
Name string `json:"name"`
PreferredUsername string `json:"preferredUsername"`
EmailVerified *bool `json:"emailVerified"`
UserID string `json:"userID"`
Hash string `json:"hash"`
HashFromEnv string `json:"hashFromEnv"`
@@ -112,7 +114,9 @@ func (p *password) UnmarshalJSON(b []byte) error {
*p = password(storage.Password{
Email: data.Email,
Username: data.Username,
Name: data.Name,
PreferredUsername: data.PreferredUsername,
EmailVerified: data.EmailVerified,
UserID: data.UserID,
Groups: data.Groups,
})
+8
View File
@@ -17,6 +17,10 @@ import (
var _ = yaml.YAMLToJSON
func boolPtr(v bool) *bool {
return &v
}
func TestValidConfiguration(t *testing.T) {
configuration := Config{
Issuer: "http://127.0.0.1:5556/dex",
@@ -116,6 +120,8 @@ staticPasswords:
# bcrypt hash of the string "password"
hash: "$2a$10$33EMT0cVYVlPy6WAMCLsceLYjWhuHpbz5yuZxu/GAFj03J9Lytjuy"
username: "admin"
name: "Admin User"
emailVerified: false
preferredUsername: "admin-public"
groups:
- "team-a"
@@ -213,6 +219,8 @@ additionalFeatures: [
Email: "admin@example.com",
Hash: []byte("$2a$10$33EMT0cVYVlPy6WAMCLsceLYjWhuHpbz5yuZxu/GAFj03J9Lytjuy"),
Username: "admin",
Name: "Admin User",
EmailVerified: boolPtr(false),
PreferredUsername: "admin-public",
UserID: "08a8684b-db88-4b73-90a9-3cd1661f5466",
Groups: []string{
+2
View File
@@ -32,6 +32,8 @@ staticPasswords:
- email: "admin@example.com"
hash: "$2a$10$2b2cU8CPhOTaGrs1HRQuAueS7JTT5ZHsHSzYiFPm1leZck7Mc8T4W"
username: "admin"
name: "Admin User"
emailVerified: true
preferredUsername: "admin"
groups:
- "team-a"
+4
View File
@@ -155,6 +155,10 @@ enablePasswordDB: true
# # bcrypt hash of the string "password"
# hash: "$2a$10$examplehash..."
# username: "user-login"
# # Optional. Maps to OIDC "name" claim. Defaults to username.
# name: "User Full Name"
# # Optional. Maps to OIDC "email_verified" claim. Defaults to true.
# emailVerified: true
# # Optional. Maps to OIDC "preferred_username" claim.
# preferredUsername: "user-public"
# # Optional. Maps to OIDC "groups" claim (when 'groups' scope is requested).
+2
View File
@@ -173,6 +173,8 @@ staticPasswords:
# bcrypt hash of the string "password": $(echo password | htpasswd -BinC 10 admin | cut -d: -f2)
hash: "$2a$10$2b2cU8CPhOTaGrs1HRQuAueS7JTT5ZHsHSzYiFPm1leZck7Mc8T4W"
username: "admin"
name: "Admin User"
emailVerified: true
preferredUsername: "admin"
groups:
- "team-a"
+2
View File
@@ -106,6 +106,8 @@ data:
# bcrypt hash of the string "password": $(echo password | htpasswd -BinC 10 admin | cut -d: -f2)
hash: "$2a$10$2b2cU8CPhOTaGrs1HRQuAueS7JTT5ZHsHSzYiFPm1leZck7Mc8T4W"
username: "admin"
name: "Admin User"
emailVerified: true
preferredUsername: "admin"
groups:
- "team-a"
+10
View File
@@ -24,6 +24,10 @@ import (
"github.com/dexidp/dex/storage"
)
func boolPtr(v bool) *bool {
return &v
}
func TestHandleHealth(t *testing.T) {
httpServer, server := newTestServer(t, nil)
defer httpServer.Close()
@@ -438,6 +442,8 @@ func TestHandlePassword_LocalPasswordDBClaims(t *testing.T) {
require.NoError(t, s.storage.CreatePassword(ctx, storage.Password{
Email: "user@example.com",
Username: "user-login",
Name: "User Full Name",
EmailVerified: boolPtr(false),
PreferredUsername: "user-public",
UserID: "user-id",
Groups: []string{"team-a", "team-a/admins"},
@@ -474,10 +480,14 @@ func TestHandlePassword_LocalPasswordDBClaims(t *testing.T) {
require.NoError(t, err)
var claims struct {
Name string `json:"name"`
EmailVerified bool `json:"email_verified"`
PreferredUsername string `json:"preferred_username"`
Groups []string `json:"groups"`
}
require.NoError(t, idToken.Claims(&claims))
require.Equal(t, "User Full Name", claims.Name)
require.False(t, claims.EmailVerified)
require.Equal(t, "user-public", claims.PreferredUsername)
require.Equal(t, []string{"team-a", "team-a/admins"}, claims.Groups)
}
+18 -3
View File
@@ -571,6 +571,20 @@ type passwordDB struct {
s storage.Storage
}
func resolvePasswordName(p storage.Password) string {
if p.Name != "" {
return p.Name
}
return p.Username
}
func resolvePasswordEmailVerified(p storage.Password) bool {
if p.EmailVerified != nil {
return *p.EmailVerified
}
return true
}
func (db passwordDB) Login(ctx context.Context, s connector.Scopes, email, password string) (connector.Identity, bool, error) {
p, err := db.s.GetPassword(ctx, email)
if err != nil {
@@ -589,10 +603,10 @@ func (db passwordDB) Login(ctx context.Context, s connector.Scopes, email, passw
}
return connector.Identity{
UserID: p.UserID,
Username: p.Username,
Username: resolvePasswordName(p),
PreferredUsername: p.PreferredUsername,
Email: p.Email,
EmailVerified: true,
EmailVerified: resolvePasswordEmailVerified(p),
Groups: p.Groups,
}, true, nil
}
@@ -617,8 +631,9 @@ func (db passwordDB) Refresh(ctx context.Context, s connector.Scopes, identity c
//
// No other fields are expected to be refreshable as email is effectively used
// as an ID.
identity.Username = p.Username
identity.Username = resolvePasswordName(p)
identity.PreferredUsername = p.PreferredUsername
identity.EmailVerified = resolvePasswordEmailVerified(p)
identity.Groups = p.Groups
return identity, nil
+4 -2
View File
@@ -1281,7 +1281,9 @@ func TestPasswordDB(t *testing.T) {
s.CreatePassword(ctx, storage.Password{
Email: "jane@example.com",
Username: "jane",
Name: "Jane Doe",
PreferredUsername: "jane-public",
EmailVerified: boolPtr(false),
UserID: "foobar",
Groups: []string{"team-a", "team-a/admins"},
Hash: h,
@@ -1301,10 +1303,10 @@ func TestPasswordDB(t *testing.T) {
password: pw,
wantIdentity: connector.Identity{
Email: "jane@example.com",
Username: "jane",
Username: "Jane Doe",
PreferredUsername: "jane-public",
UserID: "foobar",
EmailVerified: true,
EmailVerified: false,
Groups: []string{"team-a", "team-a/admins"},
},
},
+8
View File
@@ -447,6 +447,10 @@ func (n byEmail) Len() int { return len(n) }
func (n byEmail) Less(i, j int) bool { return n[i].Email < n[j].Email }
func (n byEmail) Swap(i, j int) { n[i], n[j] = n[j], n[i] }
func boolPtr(v bool) *bool {
return &v
}
func testPasswordCRUD(t *testing.T, s storage.Storage) {
ctx := t.Context()
// Use bcrypt.MinCost to keep the tests short.
@@ -459,7 +463,9 @@ func testPasswordCRUD(t *testing.T, s storage.Storage) {
Email: "jane@example.com",
Hash: passwordHash1,
Username: "jane",
Name: "Jane Doe",
PreferredUsername: "jane-public",
EmailVerified: boolPtr(true),
UserID: "foobar",
Groups: []string{"team-a", "team-a/admins"},
}
@@ -480,7 +486,9 @@ func testPasswordCRUD(t *testing.T, s storage.Storage) {
Email: "john@example.com",
Hash: passwordHash2,
Username: "john",
Name: "John Smith",
PreferredUsername: "john-public",
EmailVerified: boolPtr(false),
UserID: "barfoo",
Groups: []string{"team-b"},
}
+8 -4
View File
@@ -110,10 +110,14 @@ func testPasswordConcurrentUpdate(t *testing.T, s storage.Storage) {
}
password := storage.Password{
Email: "jane@example.com",
Hash: passwordHash,
Username: "jane",
UserID: "foobar",
Email: "jane@example.com",
Hash: passwordHash,
Username: "jane",
Name: "Jane Doe",
PreferredUsername: "jane-public",
EmailVerified: boolPtr(true),
UserID: "foobar",
Groups: []string{"team-a"},
}
if err := s.CreatePassword(ctx, password); err != nil {
t.Fatalf("create password token: %v", err)
+4
View File
@@ -14,7 +14,9 @@ func (d *Database) CreatePassword(ctx context.Context, password storage.Password
SetEmail(password.Email).
SetHash(password.Hash).
SetUsername(password.Username).
SetName(password.Name).
SetPreferredUsername(password.PreferredUsername).
SetNillableEmailVerified(password.EmailVerified).
SetUserID(password.UserID).
SetGroups(password.Groups).
Save(ctx)
@@ -88,7 +90,9 @@ func (d *Database) UpdatePassword(ctx context.Context, email string, updater fun
SetEmail(newPassword.Email).
SetHash(newPassword.Hash).
SetUsername(newPassword.Username).
SetName(newPassword.Name).
SetPreferredUsername(newPassword.PreferredUsername).
SetNillableEmailVerified(newPassword.EmailVerified).
SetUserID(newPassword.UserID).
SetGroups(newPassword.Groups).
Save(ctx)
+2
View File
@@ -142,7 +142,9 @@ func toStoragePassword(p *db.Password) storage.Password {
Email: p.Email,
Hash: p.Hash,
Username: p.Username,
Name: p.Name,
PreferredUsername: p.PreferredUsername,
EmailVerified: p.EmailVerified,
UserID: p.UserID,
Groups: p.Groups,
}
+2
View File
@@ -161,7 +161,9 @@ var (
{Name: "email", Type: field.TypeString, Unique: true, Size: 2147483647, SchemaType: map[string]string{"mysql": "varchar(384)", "postgres": "text", "sqlite3": "text"}},
{Name: "hash", Type: field.TypeBytes},
{Name: "username", Type: field.TypeString, Size: 2147483647, SchemaType: map[string]string{"mysql": "varchar(384)", "postgres": "text", "sqlite3": "text"}},
{Name: "name", Type: field.TypeString, Size: 2147483647, Default: "", SchemaType: map[string]string{"mysql": "varchar(384)", "postgres": "text", "sqlite3": "text"}},
{Name: "preferred_username", Type: field.TypeString, Size: 2147483647, Default: "", SchemaType: map[string]string{"mysql": "varchar(384)", "postgres": "text", "sqlite3": "text"}},
{Name: "email_verified", Type: field.TypeBool, Nullable: true},
{Name: "user_id", Type: field.TypeString, Size: 2147483647, SchemaType: map[string]string{"mysql": "varchar(384)", "postgres": "text", "sqlite3": "text"}},
{Name: "groups", Type: field.TypeJSON, Nullable: true},
}
+128 -1
View File
@@ -6320,7 +6320,9 @@ type PasswordMutation struct {
email *string
hash *[]byte
username *string
name *string
preferred_username *string
email_verified *bool
user_id *string
groups *[]string
appendgroups []string
@@ -6536,6 +6538,42 @@ func (m *PasswordMutation) ResetUsername() {
m.username = nil
}
// SetName sets the "name" field.
func (m *PasswordMutation) SetName(s string) {
m.name = &s
}
// Name returns the value of the "name" field in the mutation.
func (m *PasswordMutation) Name() (r string, exists bool) {
v := m.name
if v == nil {
return
}
return *v, true
}
// OldName returns the old "name" field's value of the Password entity.
// If the Password object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *PasswordMutation) OldName(ctx context.Context) (v string, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldName is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldName requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldName: %w", err)
}
return oldValue.Name, nil
}
// ResetName resets all changes to the "name" field.
func (m *PasswordMutation) ResetName() {
m.name = nil
}
// SetPreferredUsername sets the "preferred_username" field.
func (m *PasswordMutation) SetPreferredUsername(s string) {
m.preferred_username = &s
@@ -6572,6 +6610,55 @@ func (m *PasswordMutation) ResetPreferredUsername() {
m.preferred_username = nil
}
// SetEmailVerified sets the "email_verified" field.
func (m *PasswordMutation) SetEmailVerified(b bool) {
m.email_verified = &b
}
// EmailVerified returns the value of the "email_verified" field in the mutation.
func (m *PasswordMutation) EmailVerified() (r bool, exists bool) {
v := m.email_verified
if v == nil {
return
}
return *v, true
}
// OldEmailVerified returns the old "email_verified" field's value of the Password entity.
// If the Password object wasn't provided to the builder, the object is fetched from the database.
// An error is returned if the mutation operation is not UpdateOne, or the database query fails.
func (m *PasswordMutation) OldEmailVerified(ctx context.Context) (v *bool, err error) {
if !m.op.Is(OpUpdateOne) {
return v, errors.New("OldEmailVerified is only allowed on UpdateOne operations")
}
if m.id == nil || m.oldValue == nil {
return v, errors.New("OldEmailVerified requires an ID field in the mutation")
}
oldValue, err := m.oldValue(ctx)
if err != nil {
return v, fmt.Errorf("querying old value for OldEmailVerified: %w", err)
}
return oldValue.EmailVerified, nil
}
// ClearEmailVerified clears the value of the "email_verified" field.
func (m *PasswordMutation) ClearEmailVerified() {
m.email_verified = nil
m.clearedFields[password.FieldEmailVerified] = struct{}{}
}
// EmailVerifiedCleared returns if the "email_verified" field was cleared in this mutation.
func (m *PasswordMutation) EmailVerifiedCleared() bool {
_, ok := m.clearedFields[password.FieldEmailVerified]
return ok
}
// ResetEmailVerified resets all changes to the "email_verified" field.
func (m *PasswordMutation) ResetEmailVerified() {
m.email_verified = nil
delete(m.clearedFields, password.FieldEmailVerified)
}
// SetUserID sets the "user_id" field.
func (m *PasswordMutation) SetUserID(s string) {
m.user_id = &s
@@ -6707,7 +6794,7 @@ func (m *PasswordMutation) Type() string {
// order to get all numeric fields that were incremented/decremented, call
// AddedFields().
func (m *PasswordMutation) Fields() []string {
fields := make([]string, 0, 6)
fields := make([]string, 0, 8)
if m.email != nil {
fields = append(fields, password.FieldEmail)
}
@@ -6717,9 +6804,15 @@ func (m *PasswordMutation) Fields() []string {
if m.username != nil {
fields = append(fields, password.FieldUsername)
}
if m.name != nil {
fields = append(fields, password.FieldName)
}
if m.preferred_username != nil {
fields = append(fields, password.FieldPreferredUsername)
}
if m.email_verified != nil {
fields = append(fields, password.FieldEmailVerified)
}
if m.user_id != nil {
fields = append(fields, password.FieldUserID)
}
@@ -6740,8 +6833,12 @@ func (m *PasswordMutation) Field(name string) (ent.Value, bool) {
return m.Hash()
case password.FieldUsername:
return m.Username()
case password.FieldName:
return m.Name()
case password.FieldPreferredUsername:
return m.PreferredUsername()
case password.FieldEmailVerified:
return m.EmailVerified()
case password.FieldUserID:
return m.UserID()
case password.FieldGroups:
@@ -6761,8 +6858,12 @@ func (m *PasswordMutation) OldField(ctx context.Context, name string) (ent.Value
return m.OldHash(ctx)
case password.FieldUsername:
return m.OldUsername(ctx)
case password.FieldName:
return m.OldName(ctx)
case password.FieldPreferredUsername:
return m.OldPreferredUsername(ctx)
case password.FieldEmailVerified:
return m.OldEmailVerified(ctx)
case password.FieldUserID:
return m.OldUserID(ctx)
case password.FieldGroups:
@@ -6797,6 +6898,13 @@ func (m *PasswordMutation) SetField(name string, value ent.Value) error {
}
m.SetUsername(v)
return nil
case password.FieldName:
v, ok := value.(string)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetName(v)
return nil
case password.FieldPreferredUsername:
v, ok := value.(string)
if !ok {
@@ -6804,6 +6912,13 @@ func (m *PasswordMutation) SetField(name string, value ent.Value) error {
}
m.SetPreferredUsername(v)
return nil
case password.FieldEmailVerified:
v, ok := value.(bool)
if !ok {
return fmt.Errorf("unexpected type %T for field %s", value, name)
}
m.SetEmailVerified(v)
return nil
case password.FieldUserID:
v, ok := value.(string)
if !ok {
@@ -6848,6 +6963,9 @@ func (m *PasswordMutation) AddField(name string, value ent.Value) error {
// mutation.
func (m *PasswordMutation) ClearedFields() []string {
var fields []string
if m.FieldCleared(password.FieldEmailVerified) {
fields = append(fields, password.FieldEmailVerified)
}
if m.FieldCleared(password.FieldGroups) {
fields = append(fields, password.FieldGroups)
}
@@ -6865,6 +6983,9 @@ func (m *PasswordMutation) FieldCleared(name string) bool {
// error if the field is not defined in the schema.
func (m *PasswordMutation) ClearField(name string) error {
switch name {
case password.FieldEmailVerified:
m.ClearEmailVerified()
return nil
case password.FieldGroups:
m.ClearGroups()
return nil
@@ -6885,9 +7006,15 @@ func (m *PasswordMutation) ResetField(name string) error {
case password.FieldUsername:
m.ResetUsername()
return nil
case password.FieldName:
m.ResetName()
return nil
case password.FieldPreferredUsername:
m.ResetPreferredUsername()
return nil
case password.FieldEmailVerified:
m.ResetEmailVerified()
return nil
case password.FieldUserID:
m.ResetUserID()
return nil
+28 -1
View File
@@ -23,8 +23,12 @@ type Password struct {
Hash []byte `json:"hash,omitempty"`
// Username holds the value of the "username" field.
Username string `json:"username,omitempty"`
// Name holds the value of the "name" field.
Name string `json:"name,omitempty"`
// PreferredUsername holds the value of the "preferred_username" field.
PreferredUsername string `json:"preferred_username,omitempty"`
// EmailVerified holds the value of the "email_verified" field.
EmailVerified *bool `json:"email_verified,omitempty"`
// UserID holds the value of the "user_id" field.
UserID string `json:"user_id,omitempty"`
// Groups holds the value of the "groups" field.
@@ -39,9 +43,11 @@ func (*Password) scanValues(columns []string) ([]any, error) {
switch columns[i] {
case password.FieldHash, password.FieldGroups:
values[i] = new([]byte)
case password.FieldEmailVerified:
values[i] = new(sql.NullBool)
case password.FieldID:
values[i] = new(sql.NullInt64)
case password.FieldEmail, password.FieldUsername, password.FieldPreferredUsername, password.FieldUserID:
case password.FieldEmail, password.FieldUsername, password.FieldName, password.FieldPreferredUsername, password.FieldUserID:
values[i] = new(sql.NullString)
default:
values[i] = new(sql.UnknownType)
@@ -82,12 +88,25 @@ func (_m *Password) assignValues(columns []string, values []any) error {
} else if value.Valid {
_m.Username = value.String
}
case password.FieldName:
if value, ok := values[i].(*sql.NullString); !ok {
return fmt.Errorf("unexpected type %T for field name", values[i])
} else if value.Valid {
_m.Name = value.String
}
case password.FieldPreferredUsername:
if value, ok := values[i].(*sql.NullString); !ok {
return fmt.Errorf("unexpected type %T for field preferred_username", values[i])
} else if value.Valid {
_m.PreferredUsername = value.String
}
case password.FieldEmailVerified:
if value, ok := values[i].(*sql.NullBool); !ok {
return fmt.Errorf("unexpected type %T for field email_verified", values[i])
} else if value.Valid {
_m.EmailVerified = new(bool)
*_m.EmailVerified = value.Bool
}
case password.FieldUserID:
if value, ok := values[i].(*sql.NullString); !ok {
return fmt.Errorf("unexpected type %T for field user_id", values[i])
@@ -147,9 +166,17 @@ func (_m *Password) String() string {
builder.WriteString("username=")
builder.WriteString(_m.Username)
builder.WriteString(", ")
builder.WriteString("name=")
builder.WriteString(_m.Name)
builder.WriteString(", ")
builder.WriteString("preferred_username=")
builder.WriteString(_m.PreferredUsername)
builder.WriteString(", ")
if v := _m.EmailVerified; v != nil {
builder.WriteString("email_verified=")
builder.WriteString(fmt.Sprintf("%v", *v))
}
builder.WriteString(", ")
builder.WriteString("user_id=")
builder.WriteString(_m.UserID)
builder.WriteString(", ")
+18
View File
@@ -17,8 +17,12 @@ const (
FieldHash = "hash"
// FieldUsername holds the string denoting the username field in the database.
FieldUsername = "username"
// FieldName holds the string denoting the name field in the database.
FieldName = "name"
// FieldPreferredUsername holds the string denoting the preferred_username field in the database.
FieldPreferredUsername = "preferred_username"
// FieldEmailVerified holds the string denoting the email_verified field in the database.
FieldEmailVerified = "email_verified"
// FieldUserID holds the string denoting the user_id field in the database.
FieldUserID = "user_id"
// FieldGroups holds the string denoting the groups field in the database.
@@ -33,7 +37,9 @@ var Columns = []string{
FieldEmail,
FieldHash,
FieldUsername,
FieldName,
FieldPreferredUsername,
FieldEmailVerified,
FieldUserID,
FieldGroups,
}
@@ -53,6 +59,8 @@ var (
EmailValidator func(string) error
// UsernameValidator is a validator for the "username" field. It is called by the builders before save.
UsernameValidator func(string) error
// DefaultName holds the default value on creation for the "name" field.
DefaultName string
// DefaultPreferredUsername holds the default value on creation for the "preferred_username" field.
DefaultPreferredUsername string
// UserIDValidator is a validator for the "user_id" field. It is called by the builders before save.
@@ -77,11 +85,21 @@ func ByUsername(opts ...sql.OrderTermOption) OrderOption {
return sql.OrderByField(FieldUsername, opts...).ToFunc()
}
// ByName orders the results by the name field.
func ByName(opts ...sql.OrderTermOption) OrderOption {
return sql.OrderByField(FieldName, opts...).ToFunc()
}
// ByPreferredUsername orders the results by the preferred_username field.
func ByPreferredUsername(opts ...sql.OrderTermOption) OrderOption {
return sql.OrderByField(FieldPreferredUsername, opts...).ToFunc()
}
// ByEmailVerified orders the results by the email_verified field.
func ByEmailVerified(opts ...sql.OrderTermOption) OrderOption {
return sql.OrderByField(FieldEmailVerified, opts...).ToFunc()
}
// ByUserID orders the results by the user_id field.
func ByUserID(opts ...sql.OrderTermOption) OrderOption {
return sql.OrderByField(FieldUserID, opts...).ToFunc()
+95
View File
@@ -67,11 +67,21 @@ func Username(v string) predicate.Password {
return predicate.Password(sql.FieldEQ(FieldUsername, v))
}
// Name applies equality check predicate on the "name" field. It's identical to NameEQ.
func Name(v string) predicate.Password {
return predicate.Password(sql.FieldEQ(FieldName, v))
}
// PreferredUsername applies equality check predicate on the "preferred_username" field. It's identical to PreferredUsernameEQ.
func PreferredUsername(v string) predicate.Password {
return predicate.Password(sql.FieldEQ(FieldPreferredUsername, v))
}
// EmailVerified applies equality check predicate on the "email_verified" field. It's identical to EmailVerifiedEQ.
func EmailVerified(v bool) predicate.Password {
return predicate.Password(sql.FieldEQ(FieldEmailVerified, v))
}
// UserID applies equality check predicate on the "user_id" field. It's identical to UserIDEQ.
func UserID(v string) predicate.Password {
return predicate.Password(sql.FieldEQ(FieldUserID, v))
@@ -247,6 +257,71 @@ func UsernameContainsFold(v string) predicate.Password {
return predicate.Password(sql.FieldContainsFold(FieldUsername, v))
}
// NameEQ applies the EQ predicate on the "name" field.
func NameEQ(v string) predicate.Password {
return predicate.Password(sql.FieldEQ(FieldName, v))
}
// NameNEQ applies the NEQ predicate on the "name" field.
func NameNEQ(v string) predicate.Password {
return predicate.Password(sql.FieldNEQ(FieldName, v))
}
// NameIn applies the In predicate on the "name" field.
func NameIn(vs ...string) predicate.Password {
return predicate.Password(sql.FieldIn(FieldName, vs...))
}
// NameNotIn applies the NotIn predicate on the "name" field.
func NameNotIn(vs ...string) predicate.Password {
return predicate.Password(sql.FieldNotIn(FieldName, vs...))
}
// NameGT applies the GT predicate on the "name" field.
func NameGT(v string) predicate.Password {
return predicate.Password(sql.FieldGT(FieldName, v))
}
// NameGTE applies the GTE predicate on the "name" field.
func NameGTE(v string) predicate.Password {
return predicate.Password(sql.FieldGTE(FieldName, v))
}
// NameLT applies the LT predicate on the "name" field.
func NameLT(v string) predicate.Password {
return predicate.Password(sql.FieldLT(FieldName, v))
}
// NameLTE applies the LTE predicate on the "name" field.
func NameLTE(v string) predicate.Password {
return predicate.Password(sql.FieldLTE(FieldName, v))
}
// NameContains applies the Contains predicate on the "name" field.
func NameContains(v string) predicate.Password {
return predicate.Password(sql.FieldContains(FieldName, v))
}
// NameHasPrefix applies the HasPrefix predicate on the "name" field.
func NameHasPrefix(v string) predicate.Password {
return predicate.Password(sql.FieldHasPrefix(FieldName, v))
}
// NameHasSuffix applies the HasSuffix predicate on the "name" field.
func NameHasSuffix(v string) predicate.Password {
return predicate.Password(sql.FieldHasSuffix(FieldName, v))
}
// NameEqualFold applies the EqualFold predicate on the "name" field.
func NameEqualFold(v string) predicate.Password {
return predicate.Password(sql.FieldEqualFold(FieldName, v))
}
// NameContainsFold applies the ContainsFold predicate on the "name" field.
func NameContainsFold(v string) predicate.Password {
return predicate.Password(sql.FieldContainsFold(FieldName, v))
}
// PreferredUsernameEQ applies the EQ predicate on the "preferred_username" field.
func PreferredUsernameEQ(v string) predicate.Password {
return predicate.Password(sql.FieldEQ(FieldPreferredUsername, v))
@@ -312,6 +387,26 @@ func PreferredUsernameContainsFold(v string) predicate.Password {
return predicate.Password(sql.FieldContainsFold(FieldPreferredUsername, v))
}
// EmailVerifiedEQ applies the EQ predicate on the "email_verified" field.
func EmailVerifiedEQ(v bool) predicate.Password {
return predicate.Password(sql.FieldEQ(FieldEmailVerified, v))
}
// EmailVerifiedNEQ applies the NEQ predicate on the "email_verified" field.
func EmailVerifiedNEQ(v bool) predicate.Password {
return predicate.Password(sql.FieldNEQ(FieldEmailVerified, v))
}
// EmailVerifiedIsNil applies the IsNil predicate on the "email_verified" field.
func EmailVerifiedIsNil() predicate.Password {
return predicate.Password(sql.FieldIsNull(FieldEmailVerified))
}
// EmailVerifiedNotNil applies the NotNil predicate on the "email_verified" field.
func EmailVerifiedNotNil() predicate.Password {
return predicate.Password(sql.FieldNotNull(FieldEmailVerified))
}
// UserIDEQ applies the EQ predicate on the "user_id" field.
func UserIDEQ(v string) predicate.Password {
return predicate.Password(sql.FieldEQ(FieldUserID, v))
+43
View File
@@ -37,6 +37,20 @@ func (_c *PasswordCreate) SetUsername(v string) *PasswordCreate {
return _c
}
// SetName sets the "name" field.
func (_c *PasswordCreate) SetName(v string) *PasswordCreate {
_c.mutation.SetName(v)
return _c
}
// SetNillableName sets the "name" field if the given value is not nil.
func (_c *PasswordCreate) SetNillableName(v *string) *PasswordCreate {
if v != nil {
_c.SetName(*v)
}
return _c
}
// SetPreferredUsername sets the "preferred_username" field.
func (_c *PasswordCreate) SetPreferredUsername(v string) *PasswordCreate {
_c.mutation.SetPreferredUsername(v)
@@ -51,6 +65,20 @@ func (_c *PasswordCreate) SetNillablePreferredUsername(v *string) *PasswordCreat
return _c
}
// SetEmailVerified sets the "email_verified" field.
func (_c *PasswordCreate) SetEmailVerified(v bool) *PasswordCreate {
_c.mutation.SetEmailVerified(v)
return _c
}
// SetNillableEmailVerified sets the "email_verified" field if the given value is not nil.
func (_c *PasswordCreate) SetNillableEmailVerified(v *bool) *PasswordCreate {
if v != nil {
_c.SetEmailVerified(*v)
}
return _c
}
// SetUserID sets the "user_id" field.
func (_c *PasswordCreate) SetUserID(v string) *PasswordCreate {
_c.mutation.SetUserID(v)
@@ -98,6 +126,10 @@ func (_c *PasswordCreate) ExecX(ctx context.Context) {
// defaults sets the default values of the builder before save.
func (_c *PasswordCreate) defaults() {
if _, ok := _c.mutation.Name(); !ok {
v := password.DefaultName
_c.mutation.SetName(v)
}
if _, ok := _c.mutation.PreferredUsername(); !ok {
v := password.DefaultPreferredUsername
_c.mutation.SetPreferredUsername(v)
@@ -125,6 +157,9 @@ func (_c *PasswordCreate) check() error {
return &ValidationError{Name: "username", err: fmt.Errorf(`db: validator failed for field "Password.username": %w`, err)}
}
}
if _, ok := _c.mutation.Name(); !ok {
return &ValidationError{Name: "name", err: errors.New(`db: missing required field "Password.name"`)}
}
if _, ok := _c.mutation.PreferredUsername(); !ok {
return &ValidationError{Name: "preferred_username", err: errors.New(`db: missing required field "Password.preferred_username"`)}
}
@@ -174,10 +209,18 @@ func (_c *PasswordCreate) createSpec() (*Password, *sqlgraph.CreateSpec) {
_spec.SetField(password.FieldUsername, field.TypeString, value)
_node.Username = value
}
if value, ok := _c.mutation.Name(); ok {
_spec.SetField(password.FieldName, field.TypeString, value)
_node.Name = value
}
if value, ok := _c.mutation.PreferredUsername(); ok {
_spec.SetField(password.FieldPreferredUsername, field.TypeString, value)
_node.PreferredUsername = value
}
if value, ok := _c.mutation.EmailVerified(); ok {
_spec.SetField(password.FieldEmailVerified, field.TypeBool, value)
_node.EmailVerified = &value
}
if value, ok := _c.mutation.UserID(); ok {
_spec.SetField(password.FieldUserID, field.TypeString, value)
_node.UserID = value
+86
View File
@@ -62,6 +62,20 @@ func (_u *PasswordUpdate) SetNillableUsername(v *string) *PasswordUpdate {
return _u
}
// SetName sets the "name" field.
func (_u *PasswordUpdate) SetName(v string) *PasswordUpdate {
_u.mutation.SetName(v)
return _u
}
// SetNillableName sets the "name" field if the given value is not nil.
func (_u *PasswordUpdate) SetNillableName(v *string) *PasswordUpdate {
if v != nil {
_u.SetName(*v)
}
return _u
}
// SetPreferredUsername sets the "preferred_username" field.
func (_u *PasswordUpdate) SetPreferredUsername(v string) *PasswordUpdate {
_u.mutation.SetPreferredUsername(v)
@@ -76,6 +90,26 @@ func (_u *PasswordUpdate) SetNillablePreferredUsername(v *string) *PasswordUpdat
return _u
}
// SetEmailVerified sets the "email_verified" field.
func (_u *PasswordUpdate) SetEmailVerified(v bool) *PasswordUpdate {
_u.mutation.SetEmailVerified(v)
return _u
}
// SetNillableEmailVerified sets the "email_verified" field if the given value is not nil.
func (_u *PasswordUpdate) SetNillableEmailVerified(v *bool) *PasswordUpdate {
if v != nil {
_u.SetEmailVerified(*v)
}
return _u
}
// ClearEmailVerified clears the value of the "email_verified" field.
func (_u *PasswordUpdate) ClearEmailVerified() *PasswordUpdate {
_u.mutation.ClearEmailVerified()
return _u
}
// SetUserID sets the "user_id" field.
func (_u *PasswordUpdate) SetUserID(v string) *PasswordUpdate {
_u.mutation.SetUserID(v)
@@ -181,9 +215,18 @@ func (_u *PasswordUpdate) sqlSave(ctx context.Context) (_node int, err error) {
if value, ok := _u.mutation.Username(); ok {
_spec.SetField(password.FieldUsername, field.TypeString, value)
}
if value, ok := _u.mutation.Name(); ok {
_spec.SetField(password.FieldName, field.TypeString, value)
}
if value, ok := _u.mutation.PreferredUsername(); ok {
_spec.SetField(password.FieldPreferredUsername, field.TypeString, value)
}
if value, ok := _u.mutation.EmailVerified(); ok {
_spec.SetField(password.FieldEmailVerified, field.TypeBool, value)
}
if _u.mutation.EmailVerifiedCleared() {
_spec.ClearField(password.FieldEmailVerified, field.TypeBool)
}
if value, ok := _u.mutation.UserID(); ok {
_spec.SetField(password.FieldUserID, field.TypeString, value)
}
@@ -252,6 +295,20 @@ func (_u *PasswordUpdateOne) SetNillableUsername(v *string) *PasswordUpdateOne {
return _u
}
// SetName sets the "name" field.
func (_u *PasswordUpdateOne) SetName(v string) *PasswordUpdateOne {
_u.mutation.SetName(v)
return _u
}
// SetNillableName sets the "name" field if the given value is not nil.
func (_u *PasswordUpdateOne) SetNillableName(v *string) *PasswordUpdateOne {
if v != nil {
_u.SetName(*v)
}
return _u
}
// SetPreferredUsername sets the "preferred_username" field.
func (_u *PasswordUpdateOne) SetPreferredUsername(v string) *PasswordUpdateOne {
_u.mutation.SetPreferredUsername(v)
@@ -266,6 +323,26 @@ func (_u *PasswordUpdateOne) SetNillablePreferredUsername(v *string) *PasswordUp
return _u
}
// SetEmailVerified sets the "email_verified" field.
func (_u *PasswordUpdateOne) SetEmailVerified(v bool) *PasswordUpdateOne {
_u.mutation.SetEmailVerified(v)
return _u
}
// SetNillableEmailVerified sets the "email_verified" field if the given value is not nil.
func (_u *PasswordUpdateOne) SetNillableEmailVerified(v *bool) *PasswordUpdateOne {
if v != nil {
_u.SetEmailVerified(*v)
}
return _u
}
// ClearEmailVerified clears the value of the "email_verified" field.
func (_u *PasswordUpdateOne) ClearEmailVerified() *PasswordUpdateOne {
_u.mutation.ClearEmailVerified()
return _u
}
// SetUserID sets the "user_id" field.
func (_u *PasswordUpdateOne) SetUserID(v string) *PasswordUpdateOne {
_u.mutation.SetUserID(v)
@@ -401,9 +478,18 @@ func (_u *PasswordUpdateOne) sqlSave(ctx context.Context) (_node *Password, err
if value, ok := _u.mutation.Username(); ok {
_spec.SetField(password.FieldUsername, field.TypeString, value)
}
if value, ok := _u.mutation.Name(); ok {
_spec.SetField(password.FieldName, field.TypeString, value)
}
if value, ok := _u.mutation.PreferredUsername(); ok {
_spec.SetField(password.FieldPreferredUsername, field.TypeString, value)
}
if value, ok := _u.mutation.EmailVerified(); ok {
_spec.SetField(password.FieldEmailVerified, field.TypeBool, value)
}
if _u.mutation.EmailVerifiedCleared() {
_spec.ClearField(password.FieldEmailVerified, field.TypeBool)
}
if value, ok := _u.mutation.UserID(); ok {
_spec.SetField(password.FieldUserID, field.TypeString, value)
}

Some files were not shown because too many files have changed in this diff Show More