Skip to content

Commit 90a5297

Browse files
implemented various error management messages and other small fixes
1 parent 7ab5417 commit 90a5297

File tree

9 files changed

+61
-33
lines changed

9 files changed

+61
-33
lines changed

jjodel-persistence/jjodel-persistence/Controllers/API/AccountController.cs

Lines changed: 44 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,18 @@
1-
using jjodel_persistence.Models.Entity;
1+
using jjodel_persistence.Models.Dto;
2+
using jjodel_persistence.Models.Entity;
23
using jjodel_persistence.Models.Mail;
3-
using jjodel_persistence.Models.Dto;
4+
using jjodel_persistence.Models.Settings;
45
using jjodel_persistence.Services;
56
using Microsoft.AspNetCore.Authorization;
6-
using Microsoft.AspNetCore.Mvc;
77
using Microsoft.AspNetCore.Identity;
8+
using Microsoft.AspNetCore.Mvc;
89
using Microsoft.EntityFrameworkCore;
9-
using System.Text;
10-
using System.Security.Claims;
11-
using Microsoft.IdentityModel.Tokens;
12-
using jjodel_persistence.Models.Settings;
1310
using Microsoft.Extensions.Options;
11+
using Microsoft.IdentityModel.Tokens;
1412
using System.IdentityModel.Tokens.Jwt;
13+
using System.Security.Claims;
14+
using System.Text;
15+
using static System.Runtime.InteropServices.JavaScript.JSType;
1516

1617

1718
namespace jjodel_persistence.Controllers.API {
@@ -238,6 +239,8 @@ public async Task<IActionResult> GetRoles() {
238239
[HttpPost("[action]")]
239240
public async Task<IActionResult> Login([FromBody] LoginRequest loginRequest) {
240241
try {
242+
LoginResponse response = new LoginResponse();
243+
241244
if(ModelState.IsValid) {
242245

243246
_logger.LogInformation("Login request by user: " + loginRequest.Email);
@@ -246,14 +249,18 @@ public async Task<IActionResult> Login([FromBody] LoginRequest loginRequest) {
246249

247250
if(user == null || user.IsDeleted || !user.EmailConfirmed) {
248251
_logger.LogWarning("User: " + loginRequest.Email + " does not exists, is deleted or is not confirmed.");
249-
return BadRequest();
252+
response.Title = "Login failed";
253+
response.Description = "Your account is not ready to use. Please confirm your email via the link we sent. Or, if already confirmed, reset your password to continue. ";
254+
return BadRequest(response);
250255
}
251256

252257
var result = await _signInManager.PasswordSignInAsync(user, loginRequest.Password, false, false);
253258

254259
if(!result.Succeeded) {
255260
_logger.LogWarning("User failed login: " + loginRequest.Email);
256-
return BadRequest();
261+
response.Title = "Login failed";
262+
response.Description = "Invalid credentials.";
263+
return BadRequest(response);
257264
}
258265
_logger.LogInformation("User " + loginRequest.Email + " login successfully");
259266

@@ -283,9 +290,10 @@ public async Task<IActionResult> Login([FromBody] LoginRequest loginRequest) {
283290
expires: expiry,
284291
signingCredentials: creds
285292
);
286-
287-
string t = new JwtSecurityTokenHandler().WriteToken(token);
288-
return Ok(new TokenResponse() { Token = t, Expires = expiry });
293+
294+
response.Token = new JwtSecurityTokenHandler().WriteToken(token);
295+
response.Expires = expiry;
296+
return Ok(response);
289297
}
290298
return BadRequest();
291299
}
@@ -299,9 +307,13 @@ public async Task<IActionResult> Login([FromBody] LoginRequest loginRequest) {
299307
[AllowAnonymous]
300308
[HttpPost("register")]
301309
public async Task<IActionResult> Register([FromBody] RegisterRequest request) {
310+
RegisterResponse response = new RegisterResponse();
311+
response.Title = "Registration completed";
312+
response.Description = "A confirmation email has been sent to your email address. Please confirm your account before logging in.";
302313
try {
314+
303315
ApplicationUser existingUser = await this._userManager.FindByEmailAsync(request.Email);
304-
if(ModelState.IsValid && existingUser == null) {
316+
if(ModelState.IsValid && (existingUser == null || existingUser.IsDeleted)) {
305317
var user = new ApplicationUser {
306318
Id = Guid.NewGuid().ToString(),
307319
_Id = request._Id,
@@ -323,8 +335,12 @@ public async Task<IActionResult> Register([FromBody] RegisterRequest request) {
323335
// create user.
324336
var result = await _userManager.CreateAsync(user, request.Password);
325337
if(!result.Succeeded) {
326-
_logger.LogWarning("Registration process failed for user " + request.Email + ": " + string.Join(";", result.Errors.Select(e => "Code: " + e.Code + " Description" + e.Description)));
327-
return BadRequest();
338+
this._logger.LogWarning("Registration process failed for user " + request.Email + ": " + string.Join(";", result.Errors.Select(e => "Code: " + e.Code + " Description" + e.Description)));
339+
340+
response.Title = "Registration process failed";
341+
response.Description = "The following fields are invalid: " + string.Join(" ", result.Errors.Select(e => e.Description));
342+
343+
return BadRequest(response);
328344
}
329345
_logger.LogInformation("User " + request.Email + " was registered");
330346
// assign user role.
@@ -343,23 +359,28 @@ await _mailService.SendEmail(
343359
Token = confirmToken,
344360
Id = user.Id,
345361
Url = this._configuration["FrontendEndpoint"]
346-
347-
348362
});
349363
return Ok(result);
350364
}
351365
else {
352-
if(existingUser != null) {
353-
_logger.LogWarning("Registration process failed: user " + request.Email + " already exists.");
354-
return BadRequest("Registration process failed: user " + request.Email + " already exists.");
355-
366+
response.Title = "Registration process failed";
367+
var errorFields = ModelState.Where(ms => ms.Value.Errors.Count > 0).Select(ms => ms.Key);
368+
response.Description = "The following fields are invalid: " + string.Join(", ", errorFields) + ".";
369+
370+
if(existingUser != null && !existingUser.IsDeleted) {
371+
this._logger.LogWarning("Registration process failed: user " + request.Email + " already exists.");
372+
response.Description = "An account with this email address already exists.";
373+
return BadRequest(response);
356374
}
357-
return BadRequest();
375+
376+
return BadRequest(response);
358377
}
359378
}
360379
catch(Exception ex) {
361380
this._logger.LogError("Register error: " + ex.Message);
362-
return BadRequest();
381+
response.Title = "Registration error";
382+
response.Description = "An error occurred during registration. Please try again later.";
383+
return BadRequest(response);
363384
}
364385
}
365386

jjodel-persistence/jjodel-persistence/Controllers/Web/AccountController.cs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,8 @@
1313
using Microsoft.AspNetCore.Mvc;
1414
using Microsoft.EntityFrameworkCore;
1515
using Microsoft.Extensions.Options;
16-
using Microsoft.IdentityModel.Tokens;
1716
using jjodel_persistence.Models.Mail;
18-
using System.Linq;
19-
using Org.BouncyCastle.Asn1.Ocsp;
20-
using Microsoft.Extensions.Configuration;
17+
2118

2219
namespace jjodel_persistence.Controllers.Web {
2320

jjodel-persistence/jjodel-persistence/Models/Dto/TokenResponse.cs renamed to jjodel-persistence/jjodel-persistence/Models/Dto/LoginResponse.cs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,14 @@
11
using System.ComponentModel.DataAnnotations;
22

33
namespace jjodel_persistence.Models.Dto {
4-
public class TokenResponse {
4+
public class LoginResponse {
5+
56
[Required]
67
public string Token { get; set; }
78
public DateTime Expires { get; set; }
89

10+
public string Title { get; set; }
11+
public string Description { get; set; }
12+
913
}
1014
}
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
namespace jjodel_persistence.Models.Dto {
2+
public class RegisterResponse {
3+
public string Title { get; set; }
4+
public string Description { get; set; }
5+
}
6+
}

jjodel-persistence/jjodel-persistence/Templates/ConfirmAccountWithPassword_it.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<div style="max-width: 600px; margin: 20px auto; background: #ffffff; padding: 20px; border-radius: 8px; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);">
1111

1212
<p style="text-align: center; margin-bottom: 20px;">
13-
<img src="https://www.jjodel.io/wp-content/uploads/2024/06/logo-pride.png" alt="Jjodel.io Logo" style="max-width: 150px; height: auto;">
13+
<img src="data:image/png;base64,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" alt="Jjodel.io Logo" style="max-width: 150px; height: auto;">
1414
</p>
1515

1616
<p style="font-size: 18px; font-weight: bold; text-align: center;">

jjodel-persistence/jjodel-persistence/Templates/ConfirmAccount_it.cshtml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
<div style="max-width: 600px; margin: 20px auto; background: #ffffff; padding: 20px; border-radius: 8px; box-shadow: 0px 0px 10px rgba(0, 0, 0, 0.1);">
1111

1212
<p style="text-align: center; margin-bottom: 20px;">
13-
<img src="https://www.jjodel.io/wp-content/uploads/2024/06/logo-pride.png" alt="Jjodel.io Logo" style="max-width: 150px; height: auto;">
13+
<img src="data:image/png;base64,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" alt="Jjodel.io Logo" style="max-width: 150px; height: auto;">
1414
</p>
1515

1616
<p style="font-size: 18px; font-weight: bold; text-align: center;">

jjodel-persistence/jjodel-persistence/Templates/Register_it.cshtml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
<div style="max-width: 600px; margin: 30px auto; background: #ffffff; padding: 30px 20px; border-radius: 8px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1);">
44

55
<div style="text-align: center; margin-bottom: 25px;">
6-
<img src="https://www.jjodel.io/wp-content/uploads/2024/06/logo-pride.png" alt="Jjodel.io Logo" style="max-width: 150px; height: auto;">
7-
</div>
6+
<img src="data:image/png;base64,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" alt="Jjodel.io Logo" style="max-width: 150px; height: auto;">
7+
</div>
88

99
<h2 style="text-align: center; font-size: 22px; color: #222; margin-bottom: 20px;">
1010
Registration Completed

0 commit comments

Comments
 (0)