mirror of
				https://github.com/go-gitea/gitea.git
				synced 2025-11-03 20:36:07 +01:00 
			
		
		
		
	Allow admin toggle forcing a password change for newly created users (#4563)
This commit is contained in:
		
				
					committed by
					
						
						techknowlogick
					
				
			
			
				
	
			
			
			
						parent
						
							f98040ad50
						
					
				
				
					commit
					2a6d3ba058
				
			@@ -18,6 +18,7 @@ type AdminCreateUserForm struct {
 | 
				
			|||||||
	Email              string `binding:"Required;Email;MaxSize(254)"`
 | 
						Email              string `binding:"Required;Email;MaxSize(254)"`
 | 
				
			||||||
	Password           string `binding:"MaxSize(255)"`
 | 
						Password           string `binding:"MaxSize(255)"`
 | 
				
			||||||
	SendNotify         bool
 | 
						SendNotify         bool
 | 
				
			||||||
 | 
						MustChangePassword bool
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// Validate validates form fields
 | 
					// Validate validates form fields
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -206,6 +206,7 @@ sign_up_now = Need an account? Register now.
 | 
				
			|||||||
sign_up_successful = Account was successfully created.
 | 
					sign_up_successful = Account was successfully created.
 | 
				
			||||||
confirmation_mail_sent_prompt = A new confirmation email has been sent to <b>%s</b>. Please check your inbox within the next %s to complete the registration process.
 | 
					confirmation_mail_sent_prompt = A new confirmation email has been sent to <b>%s</b>. Please check your inbox within the next %s to complete the registration process.
 | 
				
			||||||
must_change_password = Update your password
 | 
					must_change_password = Update your password
 | 
				
			||||||
 | 
					allow_password_change = Require user to change password (recommended)
 | 
				
			||||||
reset_password_mail_sent_prompt = A confirmation email has been sent to <b>%s</b>. Please check your inbox within the next %s to complete the password reset process.
 | 
					reset_password_mail_sent_prompt = A confirmation email has been sent to <b>%s</b>. Please check your inbox within the next %s to complete the password reset process.
 | 
				
			||||||
active_your_account = Activate Your Account
 | 
					active_your_account = Activate Your Account
 | 
				
			||||||
account_activated = Account has been activated
 | 
					account_activated = Account has been activated
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -82,7 +82,7 @@ func NewUserPost(ctx *context.Context, form auth.AdminCreateUserForm) {
 | 
				
			|||||||
		Passwd:             form.Password,
 | 
							Passwd:             form.Password,
 | 
				
			||||||
		IsActive:           true,
 | 
							IsActive:           true,
 | 
				
			||||||
		LoginType:          models.LoginPlain,
 | 
							LoginType:          models.LoginPlain,
 | 
				
			||||||
		MustChangePassword: true,
 | 
							MustChangePassword: form.MustChangePassword,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if len(form.LoginType) > 0 {
 | 
						if len(form.LoginType) > 0 {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -35,6 +35,7 @@ func TestNewUserPost_MustChangePassword(t *testing.T) {
 | 
				
			|||||||
		Email:              email,
 | 
							Email:              email,
 | 
				
			||||||
		Password:           "xxxxxxxx",
 | 
							Password:           "xxxxxxxx",
 | 
				
			||||||
		SendNotify:         false,
 | 
							SendNotify:         false,
 | 
				
			||||||
 | 
							MustChangePassword: true,
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	NewUserPost(ctx, form)
 | 
						NewUserPost(ctx, form)
 | 
				
			||||||
@@ -48,3 +49,40 @@ func TestNewUserPost_MustChangePassword(t *testing.T) {
 | 
				
			|||||||
	assert.Equal(t, email, u.Email)
 | 
						assert.Equal(t, email, u.Email)
 | 
				
			||||||
	assert.True(t, u.MustChangePassword)
 | 
						assert.True(t, u.MustChangePassword)
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestNewUserPost_MustChangePasswordFalse(t *testing.T) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						models.PrepareTestEnv(t)
 | 
				
			||||||
 | 
						ctx := test.MockContext(t, "admin/users/new")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						u := models.AssertExistsAndLoadBean(t, &models.User{
 | 
				
			||||||
 | 
							IsAdmin: true,
 | 
				
			||||||
 | 
							ID:      2,
 | 
				
			||||||
 | 
						}).(*models.User)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ctx.User = u
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						username := "gitea"
 | 
				
			||||||
 | 
						email := "gitea@gitea.io"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						form := auth.AdminCreateUserForm{
 | 
				
			||||||
 | 
							LoginType:          "local",
 | 
				
			||||||
 | 
							LoginName:          "local",
 | 
				
			||||||
 | 
							UserName:           username,
 | 
				
			||||||
 | 
							Email:              email,
 | 
				
			||||||
 | 
							Password:           "xxxxxxxx",
 | 
				
			||||||
 | 
							SendNotify:         false,
 | 
				
			||||||
 | 
							MustChangePassword: false,
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						NewUserPost(ctx, form)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						assert.NotEmpty(t, ctx.Flash.SuccessMsg)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						u, err := models.GetUserByName(username)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						assert.NoError(t, err)
 | 
				
			||||||
 | 
						assert.Equal(t, username, u.Name)
 | 
				
			||||||
 | 
						assert.Equal(t, email, u.Email)
 | 
				
			||||||
 | 
						assert.False(t, u.MustChangePassword)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -42,6 +42,13 @@
 | 
				
			|||||||
					<input id="password" name="password" type="password" value="{{.password}}" {{if eq .login_type "0-0"}}required{{end}}>
 | 
										<input id="password" name="password" type="password" value="{{.password}}" {{if eq .login_type "0-0"}}required{{end}}>
 | 
				
			||||||
				</div>
 | 
									</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									<div class="inline field">
 | 
				
			||||||
 | 
										<div class="ui checkbox">
 | 
				
			||||||
 | 
											<label><strong>{{.i18n.Tr "auth.allow_password_change" }}</strong></label>
 | 
				
			||||||
 | 
											<input name="must_change_password" type="checkbox" checked>
 | 
				
			||||||
 | 
										</div>
 | 
				
			||||||
 | 
									</div>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
				<!-- Send register notify e-mail -->
 | 
									<!-- Send register notify e-mail -->
 | 
				
			||||||
				{{if .CanSendEmail}}
 | 
									{{if .CanSendEmail}}
 | 
				
			||||||
					<div class="inline field">
 | 
										<div class="inline field">
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user