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>
<div class="container">
<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">
<input id="name" class="form-control" @bind="@_name" required />
<input id="betreff" class="form-control" @bind="@_betreff" required />
</div>
</div>
<div class="row mb-1 align-items-center">
<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 />
</div>
<RichTextEditor id="content" class="form-control" Content="@_richText" @ref="@RichTextEditorHtml" required />
</div>
</div>
<button type="button" class="btn btn-success" @onclick="Save">@Localizer["Save"]</button>
@@ -49,7 +47,7 @@
private bool validated = false;
private int _id;
private string _name;
private string _betreff;
private string _richText;
private string _createdby;
private DateTime _createdon;
@@ -66,7 +64,7 @@
AdminModules AdminModules = await AdminModulesService.GetAdminModulesAsync(_id, ModuleState.ModuleId);
if (AdminModules != null)
{
_name = AdminModules.Name;
_betreff = AdminModules.Name;
_richText = AdminModules.Content;
_createdby = AdminModules.CreatedBy;
_createdon = AdminModules.CreatedOn;
@@ -98,7 +96,7 @@
{
AdminModules AdminModules = new AdminModules();
AdminModules.ModuleId = ModuleState.ModuleId;
AdminModules.Name = _name;
AdminModules.Name = _betreff;
AdminModules.Content = content;
AdminModules = await AdminModulesService.AddAdminModulesAsync(AdminModules);
await logger.LogInformation("AdminModules Added {AdminModules}", AdminModules);
@@ -106,7 +104,7 @@
else
{
AdminModules AdminModules = await AdminModulesService.GetAdminModulesAsync(_id, ModuleState.ModuleId);
AdminModules.Name = _name;
AdminModules.Name = _betreff;
AdminModules.Content = content;
await AdminModulesService.UpdateAdminModulesAsync(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)
{
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;
}
}
// 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))
{
List<Role> role = new List<Role>();
List<Role> role = new();
role.AddRange(_roleRepository.GetRoles(_alias.SiteId));
return Task.FromResult(role);
}
@@ -153,14 +153,16 @@ namespace SZUAbsolventenverein.Module.AdminModules.Services
int emailsSent = 0;
IEnumerable<int> userids = _userRoleRepository
.GetUserRoles(_alias.SiteId)
.Where(ur => ur.Role.SiteId == EmailFields.Role.RoleId)
.GetUserRoles(EmailFields.Role.Name, _alias.SiteId)
.Select(ur => ur.UserId)
.Distinct()
.AsEnumerable();
Console.WriteLine("Should send emails to: " + userids.Count());
foreach (int userid in userids)
{
Console.WriteLine("Sending email to: " + userid);
emailsSent++;
User user = _userRepository.GetUser(userid);
@@ -168,13 +170,13 @@ namespace SZUAbsolventenverein.Module.AdminModules.Services
string body = template.Content;
// Fields bef<65>llen.
string token = await _identityUserManager.GenerateEmailConfirmationTokenAsync(identityuser);
string url = _alias.Protocol + _alias.Name + "/login?name=" + user.Username + "&token=" + WebUtility.UrlEncode(token);
string token = await _identityUserManager.GeneratePasswordResetTokenAsync(identityuser);
string url = _alias.Protocol + _alias.Name + "/reset?name=" + user.Username + "&token=" + WebUtility.UrlEncode(token);
body = body.Replace("[UserDisplayName]", user.DisplayName);
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);
}