From dc3d2b77f9ebe52279ca0b86b8b91c588d310829 Mon Sep 17 00:00:00 2001
From: Daniel Balk <67603460+Daniel-Balk@users.noreply.github.com>
Date: Mon, 27 Mar 2023 17:14:38 +0200
Subject: [PATCH 2/5] User Settings form
---
Moonlight/Shared/Views/Profile/Index.razor | 83 +++++++++++++++++++++-
Moonlight/resources/lang/de_de.lang | 7 ++
2 files changed, 89 insertions(+), 1 deletion(-)
diff --git a/Moonlight/Shared/Views/Profile/Index.razor b/Moonlight/Shared/Views/Profile/Index.razor
index 5f0511c2..bbac5f73 100644
--- a/Moonlight/Shared/Views/Profile/Index.razor
+++ b/Moonlight/Shared/Views/Profile/Index.razor
@@ -1,4 +1,85 @@
@page "/profile"
@using Moonlight.Shared.Components.Navigations
+@using Moonlight.App.Services.Sessions
+@using Moonlight.App.Database.Entities
+@inject IdentityService IdentityService
-
\ No newline at end of file
+
+
+
+
+
+
+
+
Persönliche Daten
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+@code
+{
+ private User User = new User();
+
+
+ private async Task Load(LazyLoader loader)
+ {
+ User = await IdentityService.Get();
+ }
+}
diff --git a/Moonlight/resources/lang/de_de.lang b/Moonlight/resources/lang/de_de.lang
index 038b7e81..37f97fde 100644
--- a/Moonlight/resources/lang/de_de.lang
+++ b/Moonlight/resources/lang/de_de.lang
@@ -394,3 +394,10 @@ Discord id;Discord id
Discord username;Discord username
Discord discriminator;Discord discriminator
The Name field is required.;The Name field is required.
+The FirstName field is required.;The FirstName field is required.
+The LastName field is required.;The LastName field is required.
+The Address field is required.;The Address field is required.
+The City field is required.;The City field is required.
+The State field is required.;The State field is required.
+The Country field is required.;The Country field is required.
+Street and house number requered;Street and house number requered
From f178c59661b520ad143cb2f0359c19e536be2ba8 Mon Sep 17 00:00:00 2001
From: Daniel Balk <67603460+Daniel-Balk@users.noreply.github.com>
Date: Mon, 27 Mar 2023 17:15:07 +0200
Subject: [PATCH 3/5] regexes; thank you, google
---
Moonlight/App/Database/Entities/User.cs | 25 ++++++++++++++++++++++++-
1 file changed, 24 insertions(+), 1 deletion(-)
diff --git a/Moonlight/App/Database/Entities/User.cs b/Moonlight/App/Database/Entities/User.cs
index 76d23e46..40f0eae0 100644
--- a/Moonlight/App/Database/Entities/User.cs
+++ b/Moonlight/App/Database/Entities/User.cs
@@ -1,4 +1,5 @@
-using Moonlight.App.Models.Misc;
+using System.ComponentModel.DataAnnotations;
+using Moonlight.App.Models.Misc;
namespace Moonlight.App.Database.Entities;
@@ -8,13 +9,35 @@ public class User
// Personal data
+ [Required]
+ [MinLength(3, ErrorMessage = "Invalid first name")]
public string FirstName { get; set; } = "";
+
+ [Required]
+ [MinLength(3, ErrorMessage = "Invalid last name")]
public string LastName { get; set; } = "";
+
+ [Required]
+ [RegularExpression(@"^((((([a-zA-Z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-zA-Z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)[;]?)+$",
+ ErrorMessage = "Must be a valid email")]
public string Email { get; set; } = "";
+
public string Password { get; set; } = "";
+
+ [Required]
+ [RegularExpression(@"^(?:[A-Z] \d|[^\W\d_]{2,}\.?)(?:[- '’][^\W\d_]+\.?)*\s+[1-9]\d{0,3} ?[a-zA-Z]?(?: ?[/-] ?[1-9]\d{0,3} ?[a-zA-Z]?)?$", ErrorMessage = "Street and house number required")]
public string Address { get; set; } = "";
+
+ [Required]
+ [MinLength(3, ErrorMessage = "Invalid city")]
public string City { get; set; } = "";
+
+ [Required]
+ [MinLength(3, ErrorMessage = "Invalid state")]
public string State { get; set; } = "";
+
+ [Required]
+ [MinLength(3, ErrorMessage = "Invalid country")]
public string Country { get; set; } = "";
// States
From 37c8e640a7527ad135c9048a020d70181bff46cc Mon Sep 17 00:00:00 2001
From: Daniel Balk <67603460+Daniel-Balk@users.noreply.github.com>
Date: Mon, 27 Mar 2023 17:20:08 +0200
Subject: [PATCH 4/5] Account data save
---
Moonlight/Shared/Views/Profile/Index.razor | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/Moonlight/Shared/Views/Profile/Index.razor b/Moonlight/Shared/Views/Profile/Index.razor
index bbac5f73..81fd74df 100644
--- a/Moonlight/Shared/Views/Profile/Index.razor
+++ b/Moonlight/Shared/Views/Profile/Index.razor
@@ -1,13 +1,17 @@
@page "/profile"
+
@using Moonlight.Shared.Components.Navigations
@using Moonlight.App.Services.Sessions
@using Moonlight.App.Database.Entities
+@using Moonlight.App.Repositories
+
@inject IdentityService IdentityService
+@inject UserRepository UserRepository
-
+
@@ -82,4 +86,9 @@
{
User = await IdentityService.Get();
}
+
+ private void Save()
+ {
+ UserRepository.Update(User);
+ }
}
From ee661f7fd4f750d9d810d0df4a217e022d670af8 Mon Sep 17 00:00:00 2001
From: Daniel Balk <67603460+Daniel-Balk@users.noreply.github.com>
Date: Mon, 27 Mar 2023 17:23:56 +0200
Subject: [PATCH 5/5] more form validation
---
Moonlight/App/Database/Entities/User.cs | 10 +++++++++-
Moonlight/resources/lang/de_de.lang | 1 +
2 files changed, 10 insertions(+), 1 deletion(-)
diff --git a/Moonlight/App/Database/Entities/User.cs b/Moonlight/App/Database/Entities/User.cs
index 40f0eae0..e0f45831 100644
--- a/Moonlight/App/Database/Entities/User.cs
+++ b/Moonlight/App/Database/Entities/User.cs
@@ -11,33 +11,41 @@ public class User
[Required]
[MinLength(3, ErrorMessage = "Invalid first name")]
+ [MaxLength(64, ErrorMessage = "Max lenght reached")]
public string FirstName { get; set; } = "";
[Required]
[MinLength(3, ErrorMessage = "Invalid last name")]
+ [MaxLength(64, ErrorMessage = "Max lenght reached")]
public string LastName { get; set; } = "";
[Required]
[RegularExpression(@"^((((([a-zA-Z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-zA-Z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-zA-Z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-zA-Z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?)[;]?)+$",
ErrorMessage = "Must be a valid email")]
+ [MaxLength(128, ErrorMessage = "Max lenght reached")]
public string Email { get; set; } = "";
public string Password { get; set; } = "";
[Required]
- [RegularExpression(@"^(?:[A-Z] \d|[^\W\d_]{2,}\.?)(?:[- '’][^\W\d_]+\.?)*\s+[1-9]\d{0,3} ?[a-zA-Z]?(?: ?[/-] ?[1-9]\d{0,3} ?[a-zA-Z]?)?$", ErrorMessage = "Street and house number required")]
+ [RegularExpression(@"^(?:[A-Z] \d|[^\W\d_]{2,}\.?)(?:[- '’][^\W\d_]+\.?)*\s+[1-9]\d{0,3} ?[a-zA-Z]?(?: ?[/-] ?[1-9]\d{0,3} ?[a-zA-Z]?)?$",
+ ErrorMessage = "Street and house number required")]
+ [MaxLength(128, ErrorMessage = "Max lenght reached")]
public string Address { get; set; } = "";
[Required]
[MinLength(3, ErrorMessage = "Invalid city")]
+ [MaxLength(128, ErrorMessage = "Max lenght reached")]
public string City { get; set; } = "";
[Required]
[MinLength(3, ErrorMessage = "Invalid state")]
+ [MaxLength(64, ErrorMessage = "Max lenght reached")]
public string State { get; set; } = "";
[Required]
[MinLength(3, ErrorMessage = "Invalid country")]
+ [MaxLength(64, ErrorMessage = "Max lenght reached")]
public string Country { get; set; } = "";
// States
diff --git a/Moonlight/resources/lang/de_de.lang b/Moonlight/resources/lang/de_de.lang
index 37f97fde..4c4a41a5 100644
--- a/Moonlight/resources/lang/de_de.lang
+++ b/Moonlight/resources/lang/de_de.lang
@@ -401,3 +401,4 @@ The City field is required.;The City field is required.
The State field is required.;The State field is required.
The Country field is required.;The Country field is required.
Street and house number requered;Street and house number requered
+Max lenght reached;Max lenght reached