Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Personnel/Person.ar.resx
Original file line number Diff line number Diff line change
Expand Up @@ -53,6 +53,12 @@
<data name="NotificationOptionsLabel" xml:space="preserve"><value>خيارات الإشعارات</value></data>
<data name="NotifyUser" xml:space="preserve"><value>إشعار المستخدم؟</value></data>
<data name="NotifyWarning" xml:space="preserve"><value>أزل التحديد إذا كنت لا تريد من Resgrid إشعار المستخدم بإنشاء هذا الحساب.</value></data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Require Password Change</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>User will be required to change their password on first login.</value>
</data>
<data name="NoUnGroupedPersonnel" xml:space="preserve"><value>لا يوجد أفراد غير منتمين لمجموعة</value></data>
<data name="PersonnelHeader" xml:space="preserve"><value>الأفراد</value></data>
<data name="PhoneNumbers" xml:space="preserve"><value>أرقام الهاتف</value></data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Personnel/Person.de.resx
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,12 @@
<data name="NotifyWarning" xml:space="preserve">
<value>Uncheck if you don't want Resgrid to notify the user of this account creation.</value>
</data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Passwortaenderung erforderlich</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>Der Benutzer muss sein Passwort bei der ersten Anmeldung aendern.</value>
</data>
<data name="NoUnGroupedPersonnel" xml:space="preserve">
<value>No UnGrouped Personnel</value>
</data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Personnel/Person.en.resx
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,12 @@
<data name="NotifyWarning" xml:space="preserve">
<value>Uncheck if you don't want Resgrid to notify the user of this account creation.</value>
</data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Require Password Change</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>User will be required to change their password on first login.</value>
</data>
<data name="NoUnGroupedPersonnel" xml:space="preserve">
<value>No UnGrouped Personnel</value>
</data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Personnel/Person.es.resx
Original file line number Diff line number Diff line change
Expand Up @@ -261,6 +261,12 @@
<data name="NotifyWarning" xml:space="preserve">
<value>Desmarque si no desea que Resgrid notifique al usuario sobre la creación de esta cuenta.</value>
</data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Requerir cambio de contrasena</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>El usuario debera cambiar su contrasena en el primer inicio de sesion.</value>
</data>
<data name="NoUnGroupedPersonnel" xml:space="preserve">
<value>Sin Personal Desagrupado</value>
</data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Personnel/Person.fr.resx
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,12 @@
<data name="NotifyWarning" xml:space="preserve">
<value>Uncheck if you don't want Resgrid to notify the user of this account creation.</value>
</data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Exiger le changement de mot de passe</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>L'utilisateur devra changer son mot de passe lors de la premiere connexion.</value>
</data>
<data name="NoUnGroupedPersonnel" xml:space="preserve">
<value>No UnGrouped Personnel</value>
</data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Personnel/Person.it.resx
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,12 @@
<data name="NotifyWarning" xml:space="preserve">
<value>Uncheck if you don't want Resgrid to notify the user of this account creation.</value>
</data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Richiedi cambio password</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>L'utente dovra cambiare la password al primo accesso.</value>
</data>
<data name="NoUnGroupedPersonnel" xml:space="preserve">
<value>No UnGrouped Personnel</value>
</data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Personnel/Person.pl.resx
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,12 @@
<data name="NotifyWarning" xml:space="preserve">
<value>Uncheck if you don't want Resgrid to notify the user of this account creation.</value>
</data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Wymagaj zmiany hasla</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>Uzytkownik bedzie musial zmienic haslo przy pierwszym logowaniu.</value>
</data>
<data name="NoUnGroupedPersonnel" xml:space="preserve">
<value>No UnGrouped Personnel</value>
</data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Personnel/Person.sv.resx
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,12 @@
<data name="NotifyWarning" xml:space="preserve">
<value>Uncheck if you don't want Resgrid to notify the user of this account creation.</value>
</data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Krav pa losenordsbyte</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>Anvandaren maste byta losenord vid forsta inloggningen.</value>
</data>
<data name="NoUnGroupedPersonnel" xml:space="preserve">
<value>No UnGrouped Personnel</value>
</data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Personnel/Person.uk.resx
Original file line number Diff line number Diff line change
Expand Up @@ -212,6 +212,12 @@
<data name="NotifyWarning" xml:space="preserve">
<value>Uncheck if you don't want Resgrid to notify the user of this account creation.</value>
</data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Vymahaty zminu parolya</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>Korystuvach povynen zminyty parol pid chas pershoho vkhodu.</value>
</data>
<data name="NoUnGroupedPersonnel" xml:space="preserve">
<value>No UnGrouped Personnel</value>
</data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Profile/Profile.ar.resx
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,12 @@
<data name="EditStaffingScheduleHeader" xml:space="preserve"><value>تعديل جدول التأمين</value></data>
<data name="EmailUser" xml:space="preserve"><value>إرسال بريد إلكتروني للمستخدم؟</value></data>
<data name="EmailUserInfo" xml:space="preserve"><value>حدد هذا المربع إذا أردت إرسال بريد إلكتروني للمستخدم يحتوي على اسم المستخدم وكلمة المرور الجديدة.</value></data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Require Password Change</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>User will be required to change their password on next login.</value>
</data>
<data name="ExpiresOn" xml:space="preserve"><value>تنتهي في</value></data>
<data name="ExpiresOnLabel" xml:space="preserve"><value>تنتهي في</value></data>
<data name="IssuedByLabel" xml:space="preserve"><value>صادرة عن</value></data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Profile/Profile.de.resx
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,12 @@
<data name="EmailUserInfo" xml:space="preserve">
<value>Check this box if you want the user Emailed with their UserName and new Password.</value>
</data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Passwortaenderung erforderlich</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>Der Benutzer muss sein Passwort bei der naechsten Anmeldung aendern.</value>
</data>
<data name="ExpiresOn" xml:space="preserve">
<value>Expires On</value>
</data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Profile/Profile.en.resx
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,12 @@
<data name="EmailUserInfo" xml:space="preserve">
<value>Check this box if you want the user Emailed with their UserName and new Password.</value>
</data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Require Password Change</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>User will be required to change their password on next login.</value>
</data>
<data name="ExpiresOn" xml:space="preserve">
<value>Expires On</value>
</data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Profile/Profile.es.resx
Original file line number Diff line number Diff line change
Expand Up @@ -195,6 +195,12 @@
<data name="EmailUserInfo" xml:space="preserve">
<value>Marque esta casilla si desea que el usuario envíe un correo electrónico con su nombre de usuario y su nueva contraseña.</value>
</data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Requerir cambio de contrasena</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>El usuario debera cambiar su contrasena en el proximo inicio de sesion.</value>
</data>
<data name="ExpiresOn" xml:space="preserve">
<value>Expira el</value>
</data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Profile/Profile.fr.resx
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,12 @@
<data name="EmailUserInfo" xml:space="preserve">
<value>Check this box if you want the user Emailed with their UserName and new Password.</value>
</data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Exiger le changement de mot de passe</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>L'utilisateur devra changer son mot de passe lors de la prochaine connexion.</value>
</data>
<data name="ExpiresOn" xml:space="preserve">
<value>Expires On</value>
</data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Profile/Profile.it.resx
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,12 @@
<data name="EmailUserInfo" xml:space="preserve">
<value>Check this box if you want the user Emailed with their UserName and new Password.</value>
</data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Richiedi cambio password</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>L'utente dovra cambiare la password al prossimo accesso.</value>
</data>
<data name="ExpiresOn" xml:space="preserve">
<value>Expires On</value>
</data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Profile/Profile.pl.resx
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,12 @@
<data name="EmailUserInfo" xml:space="preserve">
<value>Check this box if you want the user Emailed with their UserName and new Password.</value>
</data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Wymagaj zmiany hasla</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>Uzytkownik bedzie musial zmienic haslo przy nastepnym logowaniu.</value>
</data>
<data name="ExpiresOn" xml:space="preserve">
<value>Expires On</value>
</data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Profile/Profile.sv.resx
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,12 @@
<data name="EmailUserInfo" xml:space="preserve">
<value>Check this box if you want the user Emailed with their UserName and new Password.</value>
</data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Krav pa losenordsbyte</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>Anvandaren maste byta losenord vid naesta inloggning.</value>
</data>
<data name="ExpiresOn" xml:space="preserve">
<value>Expires On</value>
</data>
Expand Down
6 changes: 6 additions & 0 deletions Core/Resgrid.Localization/Areas/User/Profile/Profile.uk.resx
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,12 @@
<data name="EmailUserInfo" xml:space="preserve">
<value>Check this box if you want the user Emailed with their UserName and new Password.</value>
</data>
<data name="RequirePasswordChange" xml:space="preserve">
<value>Vymahaty zminu parolya</value>
</data>
<data name="RequirePasswordChangeHelp" xml:space="preserve">
<value>Korystuvach povynen zminyty parol pid chas nastupnoho vkhodu.</value>
</data>
<data name="ExpiresOn" xml:space="preserve">
<value>Expires On</value>
</data>
Expand Down
8 changes: 8 additions & 0 deletions Core/Resgrid.Model/DepartmentMember.cs
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,14 @@ public class DepartmentMember : IEntity
/// </summary>
public DateTime? PasswordLastSetOn { get; set; }

/// <summary>
/// When true the user must change their password on next login.
/// Set by admins when creating accounts or resetting passwords.
/// Cleared automatically after the user completes the forced password change.
/// </summary>
[ProtoMember(13)]
public bool MustChangePassword { get; set; }

[NotMapped]
public string TableName => "DepartmentMembers";

Expand Down
2 changes: 1 addition & 1 deletion Core/Resgrid.Services/DepartmentsService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -289,7 +289,7 @@ public async Task<string> GetUserIdForDeletedUserInDepartmentAsync(int departmen
if (member != null)
{
member.IsDeleted = true;
var savedMember = _departmentMembersRepository.SaveOrUpdateAsync(member, cancellationToken);
await _departmentMembersRepository.SaveOrUpdateAsync(member, cancellationToken);

var member2 = await _departmentMembersRepository.GetDepartmentMemberByDepartmentIdAndUserIdAsync(departmentId, userIdToDelete);

Expand Down
2 changes: 1 addition & 1 deletion Core/Resgrid.Services/UsersService.cs
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,7 @@ public async Task<bool> DoesUserHaveAnyActiveDepartments(string userName)
var user = await GetUserByNameAsync(userName);
var memberships = await _departmentMembersRepository.GetAllByUserIdAsync(user.UserId);

return memberships.Any(x => x.IsDeleted == false);
return memberships.Any(x => x.IsDeleted == false && (x.IsDisabled == null || x.IsDisabled == false));
}

public IdentityUser GetUserById(string userId, bool bypassCache = true)
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using FluentMigrator;

namespace Resgrid.Providers.Migrations.Migrations
{
[Migration(64)]
public class M0064_AddingMustChangePassword : Migration
{
public override void Up()
{
Alter.Table("DepartmentMembers")
.AddColumn("MustChangePassword").AsBoolean().NotNullable().WithDefaultValue(false);
}

public override void Down()
{
Delete.Column("MustChangePassword").FromTable("DepartmentMembers");
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
using FluentMigrator;

namespace Resgrid.Providers.MigrationsPg.Migrations
{
[Migration(64)]
public class M0064_AddingMustChangePasswordPg : Migration
{
public override void Up()
{
Alter.Table("DepartmentMembers".ToLower())
.AddColumn("MustChangePassword".ToLower()).AsBoolean().NotNullable().WithDefaultValue(false);
}

public override void Down()
{
Delete.Column("MustChangePassword".ToLower()).FromTable("DepartmentMembers".ToLower());
}
}
}
10 changes: 10 additions & 0 deletions Web/Resgrid.Web/Areas/User/Controllers/PersonnelController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -547,6 +547,16 @@ public async Task<IActionResult> AddPerson(AddPersonModel model, IFormCollection

await _departmentsService.AddUserToDepartmentAsync(DepartmentId, user.UserId, false, cancellationToken);

if (model.MustChangePasswordOnLogin)
{
var member = await _departmentsService.GetDepartmentMemberAsync(user.UserId, DepartmentId);
if (member != null)
{
member.MustChangePassword = true;
await _departmentsService.SaveDepartmentMemberAsync(member, cancellationToken);
}
}

var userObject = _usersService.GetUserById(user.UserId);

_eventAggregator.SendMessage<UserCreatedEvent>(new UserCreatedEvent() { DepartmentId = DepartmentId, Name = string.Format("{0} {1}", model.FirstName, model.LastName), User = userObject });
Expand Down
8 changes: 8 additions & 0 deletions Web/Resgrid.Web/Areas/User/Controllers/ProfileController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -962,6 +962,7 @@ public async Task<IActionResult> ResetPasswordForUser(string userId)
model.Email = user.Email;
model.Username = user.UserName;
model.MinPasswordLength = await _departmentSsoService.GetEffectiveMinPasswordLengthAsync(DepartmentId);
model.MustChangePasswordOnLogin = true;

return View(model);
}
Expand Down Expand Up @@ -1000,6 +1001,13 @@ public async Task<IActionResult> ResetPasswordForUser(ResetPasswordForUserView
{
await _departmentSsoService.RecordPasswordChangedAsync(DepartmentId, model.UserId);

var member = await _departmentsService.GetDepartmentMemberAsync(model.UserId, DepartmentId);
if (member != null)
{
member.MustChangePassword = model.MustChangePasswordOnLogin;
await _departmentsService.SaveDepartmentMemberAsync(member);
}

if (model.EmailUser)
await _emailService.SendPasswordResetEmail(model.Email, model.Name, user.UserName, model.Password, userDepartment.Name);

Expand Down
2 changes: 2 additions & 0 deletions Web/Resgrid.Web/Areas/User/Models/AddPersonModel.cs
Original file line number Diff line number Diff line change
Expand Up @@ -63,5 +63,7 @@ public class AddPersonModel: BaseUserModel
public string ConfirmPassword { get; set; }

public bool SendAccountCreationNotification { get; set; }

public bool MustChangePasswordOnLogin { get; set; }
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -25,5 +25,7 @@ public class ResetPasswordForUserView
[Display(Name = "Confirm password")]
[System.ComponentModel.DataAnnotations.Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }

public bool MustChangePasswordOnLogin { get; set; }
}
}
11 changes: 11 additions & 0 deletions Web/Resgrid.Web/Areas/User/Views/Personnel/AddPerson.cshtml
Original file line number Diff line number Diff line change
Expand Up @@ -185,6 +185,17 @@
</div>
</div>

<div class="form-group">
<label class="col-sm-2 control-label">@localizer["RequirePasswordChange"]</label>
<div class="col-sm-10">
<div class="checkbox checkbox-primary">
<input type="checkbox" class="checkbox checkbox-primary" asp-for="MustChangePasswordOnLogin">
<label></label>
</div>
<p class="help-block">@localizer["RequirePasswordChangeHelp"]</p>
</div>
</div>

@if (!string.IsNullOrEmpty(Model.UdfFormHtml))
{
<div class="hr-line-dashed"></div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,6 +96,16 @@
<span class="help-block m-b-none">@localizer["EmailUserInfo"]</span>
</div>
</div>
<div class="form-group">
<label class="col-sm-2 control-label">@localizer["RequirePasswordChange"]</label>
<div class="col-sm-10">
<div class="checkbox checkbox-primary">
<input type="checkbox" class="checkbox checkbox-primary" asp-for="MustChangePasswordOnLogin">
<label></label>
</div>
<span class="help-block m-b-none">@localizer["RequirePasswordChangeHelp"]</span>
</div>
</div>
<div class="hr-line-dashed"></div>
<div class="form-group">
<div class="col-sm-4 col-sm-offset-2">
Expand Down
Loading
Loading