Unbenutze Felder entfernen und einen Password-Reset Link versenden.

This commit is contained in:
2025-10-16 14:12:52 +02:00
parent d68b9fb1be
commit 0aac2626da
4 changed files with 34 additions and 16 deletions

View File

@@ -11,16 +11,14 @@
<form @ref="form" class="@(validated ? " was-validated" : "needs-validation" )" novalidate> <form @ref="form" class="@(validated ? " was-validated" : "needs-validation" )" novalidate>
<div class="container"> <div class="container">
<div class="row mb-1 align-items-center"> <div class="row mb-1 align-items-center">
<Label Class="col-sm-3" For="name" HelpText="Enter a name" ResourceKey="Name">Name: </Label> <Label Class="col-sm-3" For="betreff" HelpText="Gib einen Betreff ein" ResourceKey="Betreff">Betreff: </Label>
<div class="col-sm-9"> <div class="col-sm-9">
<input id="name" class="form-control" @bind="@_name" required /> <input id="betreff" class="form-control" @bind="@_betreff" required />
</div> </div>
</div> </div>
<div class="row mb-1 align-items-center"> <div class="row mb-1 align-items-center">
<Label Class="col-sm-3" For="Body" HelpText="Enter a body" ResourceKey="Body">Body: </Label> <Label Class="col-sm-3" For="Body" HelpText="Enter a body" ResourceKey="Body">Body: </Label>
<div class="col-sm-9"> <RichTextEditor id="content" class="form-control" Content="@_richText" @ref="@RichTextEditorHtml" required />
<RichTextEditor id="content" class="form-control" @Content="@_richText" @ref="RichTextEditorHtml" required />
</div>
</div> </div>
</div> </div>
<button type="button" class="btn btn-success" @onclick="Save">@Localizer["Save"]</button> <button type="button" class="btn btn-success" @onclick="Save">@Localizer["Save"]</button>
@@ -49,7 +47,7 @@
private bool validated = false; private bool validated = false;
private int _id; private int _id;
private string _name; private string _betreff;
private string _richText; private string _richText;
private string _createdby; private string _createdby;
private DateTime _createdon; private DateTime _createdon;
@@ -66,7 +64,7 @@
AdminModules AdminModules = await AdminModulesService.GetAdminModulesAsync(_id, ModuleState.ModuleId); AdminModules AdminModules = await AdminModulesService.GetAdminModulesAsync(_id, ModuleState.ModuleId);
if (AdminModules != null) if (AdminModules != null)
{ {
_name = AdminModules.Name; _betreff = AdminModules.Name;
_richText = AdminModules.Content; _richText = AdminModules.Content;
_createdby = AdminModules.CreatedBy; _createdby = AdminModules.CreatedBy;
_createdon = AdminModules.CreatedOn; _createdon = AdminModules.CreatedOn;
@@ -98,7 +96,7 @@
{ {
AdminModules AdminModules = new AdminModules(); AdminModules AdminModules = new AdminModules();
AdminModules.ModuleId = ModuleState.ModuleId; AdminModules.ModuleId = ModuleState.ModuleId;
AdminModules.Name = _name; AdminModules.Name = _betreff;
AdminModules.Content = content; AdminModules.Content = content;
AdminModules = await AdminModulesService.AddAdminModulesAsync(AdminModules); AdminModules = await AdminModulesService.AddAdminModulesAsync(AdminModules);
await logger.LogInformation("AdminModules Added {AdminModules}", AdminModules); await logger.LogInformation("AdminModules Added {AdminModules}", AdminModules);
@@ -106,7 +104,7 @@
else else
{ {
AdminModules AdminModules = await AdminModulesService.GetAdminModulesAsync(_id, ModuleState.ModuleId); AdminModules AdminModules = await AdminModulesService.GetAdminModulesAsync(_id, ModuleState.ModuleId);
AdminModules.Name = _name; AdminModules.Name = _betreff;
AdminModules.Content = content; AdminModules.Content = content;
await AdminModulesService.UpdateAdminModulesAsync(AdminModules); await AdminModulesService.UpdateAdminModulesAsync(AdminModules);
await logger.LogInformation("AdminModules Updated {AdminModules}", AdminModules); await logger.LogInformation("AdminModules Updated {AdminModules}", AdminModules);

View File

@@ -73,7 +73,7 @@ namespace SZUAbsolventenverein.Module.AdminModules.Services
public async Task<Models.EmailFields> SendMassNotification(EmailFields EmailFields) public async Task<Models.EmailFields> SendMassNotification(EmailFields EmailFields)
{ {
return await PutJsonAsync<Models.EmailFields>(CreateAuthorizationPolicyUrl($"{Apiurl}/{EmailFields.AdminModulesId}/send", EntityNames.Module, EmailFields.ModuleId), EmailFields); return await PutJsonAsync<Models.EmailFields>(CreateAuthorizationPolicyUrl($"{Apiurl}/send/{EmailFields.AdminModulesId}", EntityNames.Module, EmailFields.ModuleId), EmailFields);
} }
} }
} }

View File

@@ -148,5 +148,23 @@ namespace SZUAbsolventenverein.Module.AdminModules.Controllers
return null; return null;
} }
} }
// Post api/<controller>/roles/5
[HttpPut("send/{id}")]
[Authorize(Policy = PolicyNames.EditModule)]
public async Task<EmailFields> PutSendMails(int id, [FromBody] EmailFields EmailFields)
{
if (ModelState.IsValid && EmailFields.AdminModulesId == id && IsAuthorizedEntityId(EntityNames.Module, EmailFields.ModuleId))
{
return await _AdminModulesService.SendMassNotification(EmailFields);
}
else
{
_logger.Log(LogLevel.Error, this, LogFunction.Security, "Unauthorized AdminModules Put Attempt {AdminModules}", EmailFields);
HttpContext.Response.StatusCode = (int)HttpStatusCode.Forbidden;
EmailFields = null;
return null;
}
}
} }
} }

View File

@@ -119,7 +119,7 @@ namespace SZUAbsolventenverein.Module.AdminModules.Services
{ {
if (_userPermissions.IsAuthorized(_accessor.HttpContext.User, _alias.SiteId, EntityNames.Module, ModuleId, PermissionNames.View)) if (_userPermissions.IsAuthorized(_accessor.HttpContext.User, _alias.SiteId, EntityNames.Module, ModuleId, PermissionNames.View))
{ {
List<Role> role = new List<Role>(); List<Role> role = new();
role.AddRange(_roleRepository.GetRoles(_alias.SiteId)); role.AddRange(_roleRepository.GetRoles(_alias.SiteId));
return Task.FromResult(role); return Task.FromResult(role);
} }
@@ -153,14 +153,16 @@ namespace SZUAbsolventenverein.Module.AdminModules.Services
int emailsSent = 0; int emailsSent = 0;
IEnumerable<int> userids = _userRoleRepository IEnumerable<int> userids = _userRoleRepository
.GetUserRoles(_alias.SiteId) .GetUserRoles(EmailFields.Role.Name, _alias.SiteId)
.Where(ur => ur.Role.SiteId == EmailFields.Role.RoleId)
.Select(ur => ur.UserId) .Select(ur => ur.UserId)
.Distinct() .Distinct()
.AsEnumerable(); .AsEnumerable();
Console.WriteLine("Should send emails to: " + userids.Count());
foreach (int userid in userids) foreach (int userid in userids)
{ {
Console.WriteLine("Sending email to: " + userid);
emailsSent++; emailsSent++;
User user = _userRepository.GetUser(userid); User user = _userRepository.GetUser(userid);
@@ -168,13 +170,13 @@ namespace SZUAbsolventenverein.Module.AdminModules.Services
string body = template.Content; string body = template.Content;
// Fields bef<65>llen. // Fields bef<65>llen.
string token = await _identityUserManager.GenerateEmailConfirmationTokenAsync(identityuser); string token = await _identityUserManager.GeneratePasswordResetTokenAsync(identityuser);
string url = _alias.Protocol + _alias.Name + "/login?name=" + user.Username + "&token=" + WebUtility.UrlEncode(token); string url = _alias.Protocol + _alias.Name + "/reset?name=" + user.Username + "&token=" + WebUtility.UrlEncode(token);
body = body.Replace("[UserDisplayName]", user.DisplayName); body = body.Replace("[UserDisplayName]", user.DisplayName);
body = body.Replace("[URL]", url); body = body.Replace("[URL]", url);
Notification notification = new Notification(_alias.SiteId, user, template.Name, body, DateTime.Now.AddDays(emailsSent / 100)); Notification notification = new Notification(_alias.SiteId, user, template.Name, body, DateTime.UtcNow.AddDays(emailsSent / 100));
_notifications.AddNotification(notification); _notifications.AddNotification(notification);
} }