Browse Source

Merge branch 'main' into ServiceListFixes

Marcel Baumgartner 2 years ago
parent
commit
2c7b52f540

+ 27 - 0
Moonlight/App/Models/Forms/UserDataModel.cs

@@ -0,0 +1,27 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace Moonlight.App.Models.Forms;
+
+public class UserDataModel
+{
+    [Required]
+    public string FirstName { get; set; } = "";
+    
+    [Required]
+    public string LastName { get; set; } = "";
+    
+    [Required]
+    public string Email { get; set; } = "";
+    
+    [Required]
+    public string Address { get; set; } = "";
+    
+    [Required]
+    public string City { get; set; } = "";
+    
+    [Required]
+    public string State { get; set; } = "";
+    
+    [Required]
+    public string Country { get; set; } = "";
+}

+ 21 - 0
Moonlight/App/Models/Forms/UserRegisterModel.cs

@@ -0,0 +1,21 @@
+using System.ComponentModel.DataAnnotations;
+
+namespace Moonlight.App.Models.Forms;
+
+public class UserRegisterModel
+{
+    [Required, EmailAddress]
+    public string Email { get; set; }
+    
+    [Required, MinLength(3)]
+    public string FirstName { get; set; }
+    
+    [Required, MinLength(3)]
+    public string LastName { get; set; }
+    
+    [Required]
+    public string Password { get; set; }
+    
+    [Required]
+    public string ConfirmPassword { get; set; }
+}

+ 56 - 25
Moonlight/Shared/Components/Auth/Register.razor

@@ -7,11 +7,17 @@
 
 @using Moonlight.App.Services
 @using Moonlight.App.Services.OAuth2
+@using Moonlight.App.Models.Forms
+@using Moonlight.App.Services.Interop
+@using Moonlight.App.Services.Sessions
 
 @inject SmartTranslateService SmartTranslateService
 @inject GoogleOAuth2Service GoogleOAuth2Service
 @inject NavigationManager NavigationManager
 @inject DiscordOAuth2Service DiscordOAuth2Service
+@inject AlertService AlertService
+@inject UserService UserService
+@inject CookieService CookieService
 
 <div class="d-flex flex-center">
     <div class="card rounded-3 w-md-550px">
@@ -46,38 +52,44 @@
                         </div>
                     </div>
 
-                    <div class="separator separator-content my-14">
+                    <div class="separator separator-content my-10">
                         <span class="w-125px text-gray-500 fw-semibold fs-7">
                             <TL>Or with email</TL>
                         </span>
                     </div>
+                    
+                    <SmartForm Model="UserRegisterModel" OnValidSubmit="CreateUser">
+                        <div class="fv-row mb-4 fv-plugins-icon-container">
+                            <InputText @bind-Value="UserRegisterModel.Email" placeholder="@(SmartTranslateService.Translate("Email"))" name="email" autocomplete="off" class="form-control bg-transparent" />
+                        </div>
+                        
+                        <div class="row">
+                            <div class="col-lg-6 mb-4 fv-plugins-icon-container">
+                                <InputText @bind-Value="UserRegisterModel.FirstName" type="text" placeholder="@(SmartTranslateService.Translate("Firstname"))" name="text" class="form-control bg-transparent" />
+                            </div>
 
-                    <div class="fv-row mb-8 fv-plugins-icon-container">
-                        <input type="text" placeholder="@(SmartTranslateService.Translate("Firstname"))" name="text" class="form-control bg-transparent">
-                    </div>
-
-                    <div class="fv-row mb-8 fv-plugins-icon-container">
-                        <input type="text" placeholder="@(SmartTranslateService.Translate("Lastname"))" name="text"class="form-control bg-transparent">
-                    </div>
-
-                    <div class="fv-row mb-8 fv-plugins-icon-container">
-                        <input type="text" placeholder="@(SmartTranslateService.Translate("Email"))" name="email" autocomplete="off" class="form-control bg-transparent">
-                    </div>
-
-                    <div class="fv-row mb-3 fv-plugins-icon-container">
-                        <input type="password" placeholder="@(SmartTranslateService.Translate("Password"))" name="password" autocomplete="off" class="form-control bg-transparent">
-                    </div>
-
-                    <div class="fv-row mb-5 fv-plugins-icon-container">
-                        <input type="password" placeholder="@(SmartTranslateService.Translate("Repeat password"))" name="password" autocomplete="off" class="form-control bg-transparent">
-                    </div>
+                            <div class="col-lg-6 mb-4 fv-plugins-icon-container">
+                                <InputText @bind-Value="UserRegisterModel.LastName" type="text" placeholder="@(SmartTranslateService.Translate("Lastname"))" name="text"class="form-control bg-transparent" />
+                            </div>
+                        </div>
 
-                    <div class="d-grid mb-10">
-                        <button class="btn btn-primary">
-                            <TL>Sign-up</TL>
-                        </button>
-                    </div>
+                        <div class="row">
+                            <div class="col-lg-6 mb-4 fv-plugins-icon-container">
+                                <InputText @bind-Value="UserRegisterModel.Password" type="password" placeholder="@(SmartTranslateService.Translate("Password"))" name="password" autocomplete="off" class="form-control bg-transparent" />
+                            </div>
 
+                            <div class="col-lg-6 mb-4 fv-plugins-icon-container">
+                                <InputText @bind-Value="UserRegisterModel.ConfirmPassword" type="password" placeholder="@(SmartTranslateService.Translate("Repeat password"))" name="password" autocomplete="off" class="form-control bg-transparent" />
+                            </div>
+                        </div>
+                        
+                        <div class="d-grid mb-6">
+                            <button type="submit" class="btn btn-primary">
+                                <TL>Sign-up</TL>
+                            </button>
+                        </div>
+                    </SmartForm>
+                    
                     <div class="text-gray-500 text-center fw-semibold fs-6">
                         <TL>Already registered?</TL>
 
@@ -93,6 +105,8 @@
 
 @code
 {
+    private UserRegisterModel UserRegisterModel = new();
+    
     private async Task DoGoogle()
     {
         var url = await GoogleOAuth2Service.GetUrl();
@@ -104,4 +118,21 @@
         var url = await DiscordOAuth2Service.GetUrl();
         NavigationManager.NavigateTo(url, true);
     }
+
+    private async Task CreateUser()
+    {
+        if (UserRegisterModel.ConfirmPassword != UserRegisterModel.Password)
+        {
+            await AlertService.Error(SmartTranslateService.Translate("Passwords need to match"));
+            return;
+        }
+        
+        var token = await UserService.Register(UserRegisterModel.Email, UserRegisterModel.Password, UserRegisterModel.FirstName, UserRegisterModel.LastName);
+        await CookieService.SetValue("token", token, 10);
+
+        if (NavigationManager.Uri.EndsWith("register"))
+            NavigationManager.NavigateTo("/", true);
+        else
+            NavigationManager.NavigateTo(NavigationManager.Uri, true);
+    }
 }

+ 20 - 3
Moonlight/Shared/Views/Profile/Index.razor

@@ -3,7 +3,9 @@
 @using Moonlight.Shared.Components.Navigations
 @using Moonlight.App.Services.Sessions
 @using Moonlight.App.Database.Entities
+@using Moonlight.App.Models.Forms
 @using Moonlight.App.Repositories
+@using Moonlight.Shared.Components.Auth
 
 @inject IdentityService IdentityService
 @inject UserRepository UserRepository
@@ -74,17 +76,32 @@
 
 @code
 {
-    private User User = new User();
+    private UserDataModel User = new UserDataModel();
+    private User CurrentUser;
 
 
     private async Task Load(LazyLoader loader)
     {
-        User = await IdentityService.Get();
+        CurrentUser = await IdentityService.Get();
+        User.FirstName = CurrentUser.FirstName;
+        User.LastName = CurrentUser.LastName;
+        User.Email = CurrentUser.Email;
+        User.Address = CurrentUser.Address;
+        User.City = CurrentUser.City;
+        User.State = CurrentUser.State;
+        User.Country = CurrentUser.Country;
     }
 
     private Task Save()
     {
-        UserRepository.Update(User);
+        CurrentUser.FirstName = User.FirstName;
+        CurrentUser.LastName = User.LastName;
+        CurrentUser.Email = User.Email;
+        CurrentUser.Address = User.Address;
+        CurrentUser.City = User.City;
+        CurrentUser.State = User.State;
+        CurrentUser.Country = User.Country;
+        UserRepository.Update(CurrentUser);
         
         return Task.CompletedTask;
     }

+ 5 - 0
Moonlight/resources/lang/de_de.lang

@@ -536,6 +536,10 @@ Configure your domain;Configure your domain
 You reached the maximum amount of domains in your subscription;You reached the maximum amount of domains in your subscription
 You need to specify a shared domain;You need to specify a shared domain
 A domain with this name does already exist for this shared domain;A domain with this name does already exist for this shared domain
+The Email field is required.;The Email field is required.
+The Password field is required.;The Password field is required.
+The ConfirmPassword field is required.;The ConfirmPassword field is required.
+Passwords need to match;Passwords need to match
 Cleanup exception;Cleanup exception
 No shared domain found;No shared domain found
 Searching for deploy plesk server;Searching for deploy plesk server
@@ -550,3 +554,4 @@ You have no domains;You have no domains
 We were not able to find any domains associated with your account;We were not able to find any domains associated with your account
 You have no websites;You have no websites
 We were not able to find any websites associated with your account;We were not able to find any websites associated with your account
+The name should only consist of lower case characters;The name should only consist of lower case characters