mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	Respect DefaultUserIsRestricted system default when creating new user (#19310)
* Apply DefaultUserIsRestricted in CreateUser * Enforce system defaults in CreateUser Allow for overwrites with CreateUserOverwriteOptions * Fix compilation errors * Add "restricted" option to create user command * Add "restricted" option to create user admin api * Respect default setting.Service.RegisterEmailConfirm and setting.Service.RegisterManualConfirm where needed * Revert "Respect default setting.Service.RegisterEmailConfirm and setting.Service.RegisterManualConfirm where needed" This reverts commit ee95d3e8dc9e9fff4fa66a5111e4d3930280e033.
This commit is contained in:
		@@ -12,6 +12,7 @@ import (
 | 
			
		||||
	user_model "code.gitea.io/gitea/models/user"
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	"code.gitea.io/gitea/modules/util"
 | 
			
		||||
	"code.gitea.io/gitea/modules/web/middleware"
 | 
			
		||||
	"code.gitea.io/gitea/services/mailer"
 | 
			
		||||
 | 
			
		||||
@@ -105,11 +106,15 @@ func (r *ReverseProxy) newUser(req *http.Request) *user_model.User {
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	user := &user_model.User{
 | 
			
		||||
		Name:     username,
 | 
			
		||||
		Email:    email,
 | 
			
		||||
		IsActive: true,
 | 
			
		||||
		Name:  username,
 | 
			
		||||
		Email: email,
 | 
			
		||||
	}
 | 
			
		||||
	if err := user_model.CreateUser(user); err != nil {
 | 
			
		||||
 | 
			
		||||
	overwriteDefault := user_model.CreateUserOverwriteOptions{
 | 
			
		||||
		IsActive: util.OptionalBoolTrue,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := user_model.CreateUser(user, &overwriteDefault); err != nil {
 | 
			
		||||
		// FIXME: should I create a system notice?
 | 
			
		||||
		log.Error("CreateUser: %v", err)
 | 
			
		||||
		return nil
 | 
			
		||||
 
 | 
			
		||||
@@ -13,6 +13,7 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/models/db"
 | 
			
		||||
	"code.gitea.io/gitea/models/organization"
 | 
			
		||||
	user_model "code.gitea.io/gitea/models/user"
 | 
			
		||||
	"code.gitea.io/gitea/modules/util"
 | 
			
		||||
	"code.gitea.io/gitea/services/mailer"
 | 
			
		||||
	user_service "code.gitea.io/gitea/services/user"
 | 
			
		||||
)
 | 
			
		||||
@@ -85,19 +86,21 @@ func (source *Source) Authenticate(user *user_model.User, userName, password str
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	user = &user_model.User{
 | 
			
		||||
		LowerName:    strings.ToLower(sr.Username),
 | 
			
		||||
		Name:         sr.Username,
 | 
			
		||||
		FullName:     composeFullName(sr.Name, sr.Surname, sr.Username),
 | 
			
		||||
		Email:        sr.Mail,
 | 
			
		||||
		LoginType:    source.authSource.Type,
 | 
			
		||||
		LoginSource:  source.authSource.ID,
 | 
			
		||||
		LoginName:    userName,
 | 
			
		||||
		IsActive:     true,
 | 
			
		||||
		IsAdmin:      sr.IsAdmin,
 | 
			
		||||
		IsRestricted: sr.IsRestricted,
 | 
			
		||||
		LowerName:   strings.ToLower(sr.Username),
 | 
			
		||||
		Name:        sr.Username,
 | 
			
		||||
		FullName:    composeFullName(sr.Name, sr.Surname, sr.Username),
 | 
			
		||||
		Email:       sr.Mail,
 | 
			
		||||
		LoginType:   source.authSource.Type,
 | 
			
		||||
		LoginSource: source.authSource.ID,
 | 
			
		||||
		LoginName:   userName,
 | 
			
		||||
		IsAdmin:     sr.IsAdmin,
 | 
			
		||||
	}
 | 
			
		||||
	overwriteDefault := &user_model.CreateUserOverwriteOptions{
 | 
			
		||||
		IsRestricted: util.OptionalBoolOf(sr.IsRestricted),
 | 
			
		||||
		IsActive:     util.OptionalBoolTrue,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	err := user_model.CreateUser(user)
 | 
			
		||||
	err := user_model.CreateUser(user, overwriteDefault)
 | 
			
		||||
	if err != nil {
 | 
			
		||||
		return user, err
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -15,6 +15,7 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/models/organization"
 | 
			
		||||
	user_model "code.gitea.io/gitea/models/user"
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/util"
 | 
			
		||||
	user_service "code.gitea.io/gitea/services/user"
 | 
			
		||||
)
 | 
			
		||||
 | 
			
		||||
@@ -102,19 +103,21 @@ func (source *Source) Sync(ctx context.Context, updateExisting bool) error {
 | 
			
		||||
			log.Trace("SyncExternalUsers[%s]: Creating user %s", source.authSource.Name, su.Username)
 | 
			
		||||
 | 
			
		||||
			usr = &user_model.User{
 | 
			
		||||
				LowerName:    su.LowerName,
 | 
			
		||||
				Name:         su.Username,
 | 
			
		||||
				FullName:     fullName,
 | 
			
		||||
				LoginType:    source.authSource.Type,
 | 
			
		||||
				LoginSource:  source.authSource.ID,
 | 
			
		||||
				LoginName:    su.Username,
 | 
			
		||||
				Email:        su.Mail,
 | 
			
		||||
				IsAdmin:      su.IsAdmin,
 | 
			
		||||
				IsRestricted: su.IsRestricted,
 | 
			
		||||
				IsActive:     true,
 | 
			
		||||
				LowerName:   su.LowerName,
 | 
			
		||||
				Name:        su.Username,
 | 
			
		||||
				FullName:    fullName,
 | 
			
		||||
				LoginType:   source.authSource.Type,
 | 
			
		||||
				LoginSource: source.authSource.ID,
 | 
			
		||||
				LoginName:   su.Username,
 | 
			
		||||
				Email:       su.Mail,
 | 
			
		||||
				IsAdmin:     su.IsAdmin,
 | 
			
		||||
			}
 | 
			
		||||
			overwriteDefault := &user_model.CreateUserOverwriteOptions{
 | 
			
		||||
				IsRestricted: util.OptionalBoolOf(su.IsRestricted),
 | 
			
		||||
				IsActive:     util.OptionalBoolTrue,
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			err = user_model.CreateUser(usr)
 | 
			
		||||
			err = user_model.CreateUser(usr, overwriteDefault)
 | 
			
		||||
 | 
			
		||||
			if err != nil {
 | 
			
		||||
				log.Error("SyncExternalUsers[%s]: Error creating user %s: %v", source.authSource.Name, su.Username, err)
 | 
			
		||||
 
 | 
			
		||||
@@ -12,6 +12,7 @@ import (
 | 
			
		||||
	user_model "code.gitea.io/gitea/models/user"
 | 
			
		||||
	"code.gitea.io/gitea/modules/auth/pam"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	"code.gitea.io/gitea/modules/util"
 | 
			
		||||
	"code.gitea.io/gitea/services/mailer"
 | 
			
		||||
 | 
			
		||||
	"github.com/google/uuid"
 | 
			
		||||
@@ -58,10 +59,12 @@ func (source *Source) Authenticate(user *user_model.User, userName, password str
 | 
			
		||||
		LoginType:   auth.PAM,
 | 
			
		||||
		LoginSource: source.authSource.ID,
 | 
			
		||||
		LoginName:   userName, // This is what the user typed in
 | 
			
		||||
		IsActive:    true,
 | 
			
		||||
	}
 | 
			
		||||
	overwriteDefault := &user_model.CreateUserOverwriteOptions{
 | 
			
		||||
		IsActive: util.OptionalBoolTrue,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := user_model.CreateUser(user); err != nil {
 | 
			
		||||
	if err := user_model.CreateUser(user, overwriteDefault); err != nil {
 | 
			
		||||
		return user, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -74,10 +74,12 @@ func (source *Source) Authenticate(user *user_model.User, userName, password str
 | 
			
		||||
		LoginType:   auth_model.SMTP,
 | 
			
		||||
		LoginSource: source.authSource.ID,
 | 
			
		||||
		LoginName:   userName,
 | 
			
		||||
		IsActive:    true,
 | 
			
		||||
	}
 | 
			
		||||
	overwriteDefault := &user_model.CreateUserOverwriteOptions{
 | 
			
		||||
		IsActive: util.OptionalBoolTrue,
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if err := user_model.CreateUser(user); err != nil {
 | 
			
		||||
	if err := user_model.CreateUser(user, overwriteDefault); err != nil {
 | 
			
		||||
		return user, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
@@ -16,6 +16,7 @@ import (
 | 
			
		||||
	"code.gitea.io/gitea/modules/log"
 | 
			
		||||
	"code.gitea.io/gitea/modules/setting"
 | 
			
		||||
	"code.gitea.io/gitea/modules/templates"
 | 
			
		||||
	"code.gitea.io/gitea/modules/util"
 | 
			
		||||
	"code.gitea.io/gitea/modules/web/middleware"
 | 
			
		||||
	"code.gitea.io/gitea/services/auth/source/sspi"
 | 
			
		||||
	"code.gitea.io/gitea/services/mailer"
 | 
			
		||||
@@ -187,17 +188,20 @@ func (s *SSPI) shouldAuthenticate(req *http.Request) (shouldAuth bool) {
 | 
			
		||||
func (s *SSPI) newUser(username string, cfg *sspi.Source) (*user_model.User, error) {
 | 
			
		||||
	email := gouuid.New().String() + "@localhost.localdomain"
 | 
			
		||||
	user := &user_model.User{
 | 
			
		||||
		Name:                         username,
 | 
			
		||||
		Email:                        email,
 | 
			
		||||
		KeepEmailPrivate:             true,
 | 
			
		||||
		Passwd:                       gouuid.New().String(),
 | 
			
		||||
		IsActive:                     cfg.AutoActivateUsers,
 | 
			
		||||
		Language:                     cfg.DefaultLanguage,
 | 
			
		||||
		UseCustomAvatar:              true,
 | 
			
		||||
		Avatar:                       avatars.DefaultAvatarLink(),
 | 
			
		||||
		EmailNotificationsPreference: user_model.EmailNotificationsDisabled,
 | 
			
		||||
		Name:            username,
 | 
			
		||||
		Email:           email,
 | 
			
		||||
		Passwd:          gouuid.New().String(),
 | 
			
		||||
		Language:        cfg.DefaultLanguage,
 | 
			
		||||
		UseCustomAvatar: true,
 | 
			
		||||
		Avatar:          avatars.DefaultAvatarLink(),
 | 
			
		||||
	}
 | 
			
		||||
	if err := user_model.CreateUser(user); err != nil {
 | 
			
		||||
	emailNotificationPreference := user_model.EmailNotificationsDisabled
 | 
			
		||||
	overwriteDefault := &user_model.CreateUserOverwriteOptions{
 | 
			
		||||
		IsActive:                     util.OptionalBoolOf(cfg.AutoActivateUsers),
 | 
			
		||||
		KeepEmailPrivate:             util.OptionalBoolTrue,
 | 
			
		||||
		EmailNotificationsPreference: &emailNotificationPreference,
 | 
			
		||||
	}
 | 
			
		||||
	if err := user_model.CreateUser(user, overwriteDefault); err != nil {
 | 
			
		||||
		return nil, err
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user