From cfcaf981396ea4cb096f3d4904bad922bdb94aca Mon Sep 17 00:00:00 2001 From: VegaZ Date: Wed, 19 Sep 2018 19:53:31 +0200 Subject: [PATCH 1/5] Add unfinished Login-System --- Client/Login/login.html | 4 +--- Client/Login/login.js | 10 ++++++-- Client/Login/main.js | 24 +++++++++++++++++-- Server/Entities/User.cs | 3 ++- Server/Events/Login.cs | 42 ++++++++++++++++++++++++++++++---- Server/Services/HashService.cs | 18 +++++++++++++++ 6 files changed, 88 insertions(+), 13 deletions(-) create mode 100644 Server/Services/HashService.cs diff --git a/Client/Login/login.html b/Client/Login/login.html index 0bfe5b52..c8aa0a1c 100644 --- a/Client/Login/login.html +++ b/Client/Login/login.html @@ -20,7 +20,6 @@ ERROR TEXT
-

@@ -28,7 +27,6 @@

Bereits registriert? Logg dich ein

-

@@ -61,7 +59,7 @@ return; } - if (password.length < 8) { + if (password.length < 8 || passwordRepeat.length < 8) { showError("Das Passwort muss mindestens 8 Zeichen lang sein"); return; } diff --git a/Client/Login/login.js b/Client/Login/login.js index 2e07b8fa..69670ba6 100644 --- a/Client/Login/login.js +++ b/Client/Login/login.js @@ -6,10 +6,16 @@ $('#loginBtn').click(() => { $('.alert').remove(); //Remove any alerts when we attempt to login/register - mp.trigger('loginInformationToServer', $('#usernameInputLogin').val(), $('#passwordInputLogin').val()); + mp.trigger('loginInformationToServer', $('#passwordInputLogin').val()); }); $('#registerBtn').click(() => { $('.alert').remove(); //Remove any alerts when we attempt to login/register - mp.trigger('registerInformationToServer', $('#usernameInputRegister').val(), $('#passwordInputRegister').val()); + if ($('#passwordInputRegister').val().length < 8) { + return; + } + else { + mp.trigger('registerInformationToServer', $('#passwordInputRegister').val()); + } + }); \ No newline at end of file diff --git a/Client/Login/main.js b/Client/Login/main.js index 23f69481..fd346614 100644 --- a/Client/Login/main.js +++ b/Client/Login/main.js @@ -3,8 +3,8 @@ * @author VegaZ * @copyright (c) 2008 - 2018 Life of German */ -var loginBrowser = mp.browsers.new('package://Login/login.html'); -mp.gui.cursor.show(true, true); + +let loginBrowser; mp.events.add('loginInformationToServer', (username, password) => { @@ -17,3 +17,23 @@ mp.events.add('registerInformationToServer', (username, password) => { mp.events.callRemote('OnPlayerRegister', username, password); }); + +/* +mp.events.add('browserCreated', (browser) => { + mp.gui.chat.push("Browser created"); + mp.gui.chat.activate(false); + mp.gui.cursor.show(true); +}); +*/ +mp.events.add('showLogin', (player) => { + mp.gui.chat.push("show login"); + loginBrowser = mp.browsers.new('package://Login/login.html'); +}); + +mp.events.add('registerSuccess', (player) => { + + loginBrowser.destroy(); + mp.gui.chat.activate(true); + player.outputChatBox("Erfolgreich registriert"); + +}); diff --git a/Server/Entities/User.cs b/Server/Entities/User.cs index 1f0a934d..5f8532e1 100644 --- a/Server/Entities/User.cs +++ b/Server/Entities/User.cs @@ -25,7 +25,8 @@ namespace reallife_gamemode.Server.Entities [StringLength(64)] public string Password { get; set; } public int LogUserId { get; set; } - public DateTime RegistrationDate { get; set; } + [Timestamp] + public byte[] RegistrationDate { get; set; } [EmailAddress] [StringLength(64)] public string Email { get; set; } diff --git a/Server/Events/Login.cs b/Server/Events/Login.cs index 04ebb9b0..c4db02ee 100644 --- a/Server/Events/Login.cs +++ b/Server/Events/Login.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Text; using GTANetworkAPI; +using System.Security.Cryptography; /** * @overview Life of German Reallife - Event Login (Login.cs) @@ -14,15 +15,46 @@ namespace reallife_gamemode.Server.Events public class Login : Script { [RemoteEvent("OnPlayerLogin")] - public void OnPlayerLogin(Client player, string username, string password) + public void OnPlayerLogin(Client player, string password) { } - - [RemoteEvent("OnPlayerRegister")] - public void OnPlayerRegister(Client player, string username, string password) + [Command("login")] + public void CmdLogin(Client player) { - + player.Freeze(true); + player.TriggerEvent("showLogin",player); + } + [RemoteEvent("OnPlayerRegister")] + public void OnPlayerRegister(Client player, string password) + { + + using (var loginContext = new Model.DatabaseContext()) + { + var user = new Entities.User { Name = player.Name, SocialClubName = player.SocialClubName, Password = ComputeSha256Hash(password) }; + loginContext.Users.Add(user); + loginContext.SaveChanges(); + } + NAPI.Chat.SendChatMessageToPlayer(player, "Registriert, GZ"); + player.TriggerEvent("registerSuccess"); + } + + static string ComputeSha256Hash(string rawData) + { + // Create a SHA256 + using (SHA256 sha256Hash = SHA256.Create()) + { + // ComputeHash - returns byte array + byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(rawData)); + + // Convert byte array to a string + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < bytes.Length; i++) + { + builder.Append(bytes[i].ToString("x2")); + } + return builder.ToString(); + } } } } diff --git a/Server/Services/HashService.cs b/Server/Services/HashService.cs new file mode 100644 index 00000000..ae5c3a09 --- /dev/null +++ b/Server/Services/HashService.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Security.Cryptography; + +/** +* @overview Life of German Reallife - Event Login (Login.cs) +* @author VegaZ +* @copyright (c) 2008 - 2018 Life of German +*/ + +namespace reallife_gamemode.Server.Services +{ + class HashService + { + + } +} From 6843462525a31c4e34a5afeb1a5f2c60225a5502 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Wed, 19 Sep 2018 21:20:45 +0200 Subject: [PATCH 2/5] Modify Login-Register-System --- Client/Login/login.html | 67 +++------------------------------- Client/Login/login.js | 57 ++++++++++++++++++++++++----- Client/Login/main.js | 25 +++++-------- Server/Events/Login.cs | 27 ++------------ Server/Services/HashService.cs | 18 --------- 5 files changed, 66 insertions(+), 128 deletions(-) delete mode 100644 Server/Services/HashService.cs diff --git a/Client/Login/login.html b/Client/Login/login.html index c8aa0a1c..104e6d8e 100644 --- a/Client/Login/login.html +++ b/Client/Login/login.html @@ -1,15 +1,13 @@  - - - + @@ -22,7 +20,7 @@
-

+

Bereits registriert? Logg dich ein

@@ -34,63 +32,8 @@
- - + + \ No newline at end of file diff --git a/Client/Login/login.js b/Client/Login/login.js index 69670ba6..9069a093 100644 --- a/Client/Login/login.js +++ b/Client/Login/login.js @@ -4,18 +4,57 @@ * @copyright (c) 2008 - 2018 Life of German */ -$('#loginBtn').click(() => { - $('.alert').remove(); //Remove any alerts when we attempt to login/register - mp.trigger('loginInformationToServer', $('#passwordInputLogin').val()); + +$('.message a').click(function () { + $('.form-l').animate({ height: "toggle", opacity: "toggle" }, "slow"); }); -$('#registerBtn').click(() => { - $('.alert').remove(); //Remove any alerts when we attempt to login/register - if ($('#passwordInputRegister').val().length < 8) { +$('#registerBtn').click(function () { + + var password = $('#passwordInputRegister').val(); + var passwordRepeat = $('#passwordRepeatInputRegister').val(); + mp.gui.chat.push(password.length); + if (password === "" || passwordRepeat === "") { + showError("Mindestens ein Passwort Feld ist leer!"); return; } - else { - mp.trigger('registerInformationToServer', $('#passwordInputRegister').val()); + + if (password !== passwordRepeat) { + showError("Die beiden Passwörter stimmen nicht überein!") + return; } -}); \ No newline at end of file + if (password.length < 8) { + showError("Das Passwort muss mindestens 8 Zeichen lang sein"); + return; + } + + mp.gui.chat.push(password.length); + mp.trigger('registerInformationToServer', password); +}); + +$('#loginBtn').click(function () { + + var password = $('#passwordInputLogin').val(); + + if (password === "") { + showError("Du musst ein Passwort angeben!"); + return; + } + + mp.trigger('loginInformationToServer', password); + +}); + +$('.quitBtn').click(function () { + resourceCall("Quit"); +}); + +function showError(error) { + $('.isa_error').html(error); + $('.isa_error').slideDown(); +} + +function SendDisplayname(name) { + $("h2#playerName").text(name); +} \ No newline at end of file diff --git a/Client/Login/main.js b/Client/Login/main.js index fd346614..01a7c4fe 100644 --- a/Client/Login/main.js +++ b/Client/Login/main.js @@ -6,34 +6,29 @@ let loginBrowser; -mp.events.add('loginInformationToServer', (username, password) => { +mp.events.add('loginInformationToServer', (password) => { - mp.events.callRemote('OnPlayerLogin', username, password); + mp.events.callRemote('OnPlayerLogin', password); }); -mp.events.add('registerInformationToServer', (username, password) => { - - mp.events.callRemote('OnPlayerRegister', username, password); +mp.events.add('registerInformationToServer', (password) => { + mp.gui.chat.push("registerInformationToServer called"); + mp.events.callRemote('OnPlayerRegister', password); }); -/* -mp.events.add('browserCreated', (browser) => { - mp.gui.chat.push("Browser created"); - mp.gui.chat.activate(false); - mp.gui.cursor.show(true); -}); -*/ mp.events.add('showLogin', (player) => { - mp.gui.chat.push("show login"); loginBrowser = mp.browsers.new('package://Login/login.html'); + mp.gui.cursor.show(true); + mp.gui.cursor.visible = true; }); mp.events.add('registerSuccess', (player) => { - loginBrowser.destroy(); mp.gui.chat.activate(true); - player.outputChatBox("Erfolgreich registriert"); + mp.gui.cursor.show(false); + mp.gui.cursor.visible = false; + mp.gui.chat.push("Erfolgreich registriert."); }); diff --git a/Server/Events/Login.cs b/Server/Events/Login.cs index c4db02ee..cf3362f2 100644 --- a/Server/Events/Login.cs +++ b/Server/Events/Login.cs @@ -2,7 +2,6 @@ using System.Collections.Generic; using System.Text; using GTANetworkAPI; -using System.Security.Cryptography; /** * @overview Life of German Reallife - Event Login (Login.cs) @@ -22,39 +21,19 @@ namespace reallife_gamemode.Server.Events [Command("login")] public void CmdLogin(Client player) { - player.Freeze(true); player.TriggerEvent("showLogin",player); } [RemoteEvent("OnPlayerRegister")] public void OnPlayerRegister(Client player, string password) { - + using (var loginContext = new Model.DatabaseContext()) { - var user = new Entities.User { Name = player.Name, SocialClubName = player.SocialClubName, Password = ComputeSha256Hash(password) }; + var user = new Entities.User { Name = player.Name, SocialClubName = player.SocialClubName, Password = NAPI.Util.GetHashSha256(password) }; loginContext.Users.Add(user); loginContext.SaveChanges(); } - NAPI.Chat.SendChatMessageToPlayer(player, "Registriert, GZ"); player.TriggerEvent("registerSuccess"); - } - - static string ComputeSha256Hash(string rawData) - { - // Create a SHA256 - using (SHA256 sha256Hash = SHA256.Create()) - { - // ComputeHash - returns byte array - byte[] bytes = sha256Hash.ComputeHash(Encoding.UTF8.GetBytes(rawData)); - - // Convert byte array to a string - StringBuilder builder = new StringBuilder(); - for (int i = 0; i < bytes.Length; i++) - { - builder.Append(bytes[i].ToString("x2")); - } - return builder.ToString(); - } - } + } } } diff --git a/Server/Services/HashService.cs b/Server/Services/HashService.cs deleted file mode 100644 index ae5c3a09..00000000 --- a/Server/Services/HashService.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Text; -using System.Security.Cryptography; - -/** -* @overview Life of German Reallife - Event Login (Login.cs) -* @author VegaZ -* @copyright (c) 2008 - 2018 Life of German -*/ - -namespace reallife_gamemode.Server.Services -{ - class HashService - { - - } -} From db9fd6038488c267214a40186ea6ef54d3fde35f Mon Sep 17 00:00:00 2001 From: VegaZ Date: Thu, 20 Sep 2018 18:35:50 +0200 Subject: [PATCH 3/5] Modify Login/Register-System (almost working) --- Client/Login/login.html | 30 ++++++++++++++++++++++----- Client/Login/login.js | 46 ++++++++++++----------------------------- Client/Login/main.js | 40 ++++++++++++++++++++++++++--------- Server/Events/Login.cs | 31 ++++++++++++++++++++++----- 4 files changed, 94 insertions(+), 53 deletions(-) diff --git a/Client/Login/login.html b/Client/Login/login.html index 104e6d8e..61d492e1 100644 --- a/Client/Login/login.html +++ b/Client/Login/login.html @@ -7,7 +7,11 @@ - + + + + + @@ -20,20 +24,36 @@
-

+

Bereits registriert? Logg dich ein

- - + \ No newline at end of file diff --git a/Client/Login/login.js b/Client/Login/login.js index 9069a093..8ef7bf0c 100644 --- a/Client/Login/login.js +++ b/Client/Login/login.js @@ -4,17 +4,12 @@ * @copyright (c) 2008 - 2018 Life of German */ +function registerPlayer() { + + var password = document.getElementById("passwordInputRegister"); + var passwordRepeat = document.getElementById("passwordRepeatInputRegister"); -$('.message a').click(function () { - $('.form-l').animate({ height: "toggle", opacity: "toggle" }, "slow"); -}); - -$('#registerBtn').click(function () { - - var password = $('#passwordInputRegister').val(); - var passwordRepeat = $('#passwordRepeatInputRegister').val(); - mp.gui.chat.push(password.length); - if (password === "" || passwordRepeat === "") { + if(password === "" || passwordRepeat === "") { showError("Mindestens ein Passwort Feld ist leer!"); return; } @@ -23,38 +18,23 @@ $('#registerBtn').click(function () { showError("Die beiden Passwörter stimmen nicht überein!") return; } - + if (password.length < 8) { showError("Das Passwort muss mindestens 8 Zeichen lang sein"); return; } + $('.isa_error').hide(); + mp.trigger("registerInformationToServer", password); +} - mp.gui.chat.push(password.length); - mp.trigger('registerInformationToServer', password); -}); - -$('#loginBtn').click(function () { +function loginPlayer() { - var password = $('#passwordInputLogin').val(); + let password = document.getElementById("passwordInputLogin"); if (password === "") { showError("Du musst ein Passwort angeben!"); return; } - - mp.trigger('loginInformationToServer', password); - -}); - -$('.quitBtn').click(function () { - resourceCall("Quit"); -}); - -function showError(error) { - $('.isa_error').html(error); - $('.isa_error').slideDown(); -} - -function SendDisplayname(name) { - $("h2#playerName").text(name); + $('.isa_error').hide(); + mp.trigger("loginInformationToServer", password); } \ No newline at end of file diff --git a/Client/Login/main.js b/Client/Login/main.js index 01a7c4fe..03ea055c 100644 --- a/Client/Login/main.js +++ b/Client/Login/main.js @@ -4,7 +4,11 @@ * @copyright (c) 2008 - 2018 Life of German */ -let loginBrowser; +var loginBrowser; +loginBrowser = mp.browsers.new('package://Login/login.html'); +mp.gui.chat.activate(false); +mp.gui.cursor.show(true); + mp.events.add('loginInformationToServer', (password) => { @@ -13,22 +17,38 @@ mp.events.add('loginInformationToServer', (password) => { }); mp.events.add('registerInformationToServer', (password) => { - mp.gui.chat.push("registerInformationToServer called"); mp.events.callRemote('OnPlayerRegister', password); }); -mp.events.add('showLogin', (player) => { - loginBrowser = mp.browsers.new('package://Login/login.html'); +mp.events.add('showLogin',() => { + loginBrowser = mp.browsers.new('package://Login/login.html'); mp.gui.cursor.show(true); - mp.gui.cursor.visible = true; }); -mp.events.add('registerSuccess', (player) => { - loginBrowser.destroy(); - mp.gui.chat.activate(true); +mp.events.add('registerSuccess', () => { + mp.gui.chat.push("Erfolgreich registriert!") + if (loginBrowser) + { + loginBrowser.destroy(); + } mp.gui.cursor.show(false); - mp.gui.cursor.visible = false; - mp.gui.chat.push("Erfolgreich registriert."); + mp.gui.chat.activate(true); + +}); +mp.events.add('loginSuccess', () => { + mp.gui.chat.push("Erfolgreich eingeloggt!") + if (loginBrowser) + { + loginBrowser.destroy(); + } + mp.gui.cursor.show(false); + mp.gui.chat.activate(true); + +}); + +mp.events.add('loginFail', (reason) => { + + mp.gui.chat.push(reason); }); diff --git a/Server/Events/Login.cs b/Server/Events/Login.cs index cf3362f2..ec749d05 100644 --- a/Server/Events/Login.cs +++ b/Server/Events/Login.cs @@ -1,5 +1,6 @@ using System; using System.Collections.Generic; +using System.Linq; using System.Text; using GTANetworkAPI; @@ -16,7 +17,27 @@ namespace reallife_gamemode.Server.Events [RemoteEvent("OnPlayerLogin")] public void OnPlayerLogin(Client player, string password) { - + var checkPassword = ""; + using (var loginContext = new Model.DatabaseContext()) + { + var user = loginContext.Users.SingleOrDefault(b => b.Name == player.Name); + if(user.Password == null) + { + player.TriggerEvent("loginFail", "Benutzer existiert nicht! Registriere dich zuerst!"); + } + else + { + checkPassword = user.Password; + } + } + if(checkPassword == NAPI.Util.GetHashSha256(password)) + { + player.TriggerEvent("loginSuccess"); + } + else + { + player.TriggerEvent("loginFail","Passwort inkorrekt!"); + } } [Command("login")] public void CmdLogin(Client player) @@ -27,13 +48,13 @@ namespace reallife_gamemode.Server.Events public void OnPlayerRegister(Client player, string password) { - using (var loginContext = new Model.DatabaseContext()) + using (var registerContext = new Model.DatabaseContext()) { var user = new Entities.User { Name = player.Name, SocialClubName = player.SocialClubName, Password = NAPI.Util.GetHashSha256(password) }; - loginContext.Users.Add(user); - loginContext.SaveChanges(); + registerContext.Users.Add(user); + registerContext.SaveChanges(); } player.TriggerEvent("registerSuccess"); } - } + } } From 7452fc4993d724714de545127db9ac7bb78f51be Mon Sep 17 00:00:00 2001 From: VegaZ Date: Thu, 20 Sep 2018 18:54:30 +0200 Subject: [PATCH 4/5] Almost finish login-register-system --- Client/Login/login.js | 6 +++--- Server/Events/Login.cs | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Client/Login/login.js b/Client/Login/login.js index 8ef7bf0c..fa38798c 100644 --- a/Client/Login/login.js +++ b/Client/Login/login.js @@ -6,8 +6,8 @@ function registerPlayer() { - var password = document.getElementById("passwordInputRegister"); - var passwordRepeat = document.getElementById("passwordRepeatInputRegister"); + var password = document.getElementById("passwordInputRegister").value; + var passwordRepeat = document.getElementById("passwordRepeatInputRegister").value; if(password === "" || passwordRepeat === "") { showError("Mindestens ein Passwort Feld ist leer!"); @@ -29,7 +29,7 @@ function registerPlayer() { function loginPlayer() { - let password = document.getElementById("passwordInputLogin"); + let password = document.getElementById("passwordInputLogin").value; if (password === "") { showError("Du musst ein Passwort angeben!"); diff --git a/Server/Events/Login.cs b/Server/Events/Login.cs index ec749d05..0400150f 100644 --- a/Server/Events/Login.cs +++ b/Server/Events/Login.cs @@ -17,7 +17,7 @@ namespace reallife_gamemode.Server.Events [RemoteEvent("OnPlayerLogin")] public void OnPlayerLogin(Client player, string password) { - var checkPassword = ""; + string checkPassword = null; using (var loginContext = new Model.DatabaseContext()) { var user = loginContext.Users.SingleOrDefault(b => b.Name == player.Name); From 8a5daf483fdce309b7ecfbf0805af668b7521235 Mon Sep 17 00:00:00 2001 From: VegaZ Date: Thu, 20 Sep 2018 20:20:44 +0200 Subject: [PATCH 5/5] Finish login-register-system --- Client/Login/main.js | 22 ++++++++++---- Server/Events/Login.cs | 69 +++++++++++++++++++++++++----------------- 2 files changed, 58 insertions(+), 33 deletions(-) diff --git a/Client/Login/main.js b/Client/Login/main.js index 03ea055c..b10cf16e 100644 --- a/Client/Login/main.js +++ b/Client/Login/main.js @@ -9,7 +9,6 @@ loginBrowser = mp.browsers.new('package://Login/login.html'); mp.gui.chat.activate(false); mp.gui.cursor.show(true); - mp.events.add('loginInformationToServer', (password) => { mp.events.callRemote('OnPlayerLogin', password); @@ -21,11 +20,6 @@ mp.events.add('registerInformationToServer', (password) => { }); -mp.events.add('showLogin',() => { - loginBrowser = mp.browsers.new('package://Login/login.html'); - mp.gui.cursor.show(true); -}); - mp.events.add('registerSuccess', () => { mp.gui.chat.push("Erfolgreich registriert!") if (loginBrowser) @@ -52,3 +46,19 @@ mp.events.add('loginFail', (reason) => { mp.gui.chat.push(reason); }); + +mp.events.add('loginDeny', (reason) => { + if (loginBrowser) { + loginBrowser.destroy(); + } + mp.gui.cursor.show(false); + mp.gui.chat.activate(true); + mp.gui.chat.push(reason); + +}); + +mp.events.add('registerFail', (reason) => { + + mp.gui.chat.push(reason); + +}); diff --git a/Server/Events/Login.cs b/Server/Events/Login.cs index 0400150f..5877a0b3 100644 --- a/Server/Events/Login.cs +++ b/Server/Events/Login.cs @@ -17,44 +17,59 @@ namespace reallife_gamemode.Server.Events [RemoteEvent("OnPlayerLogin")] public void OnPlayerLogin(Client player, string password) { - string checkPassword = null; - using (var loginContext = new Model.DatabaseContext()) + using (var loginUser = new Model.DatabaseContext()) { - var user = loginContext.Users.SingleOrDefault(b => b.Name == player.Name); - if(user.Password == null) + var user = loginUser.Users.SingleOrDefault(b => b.Name == player.Name); + + if(user == null) { player.TriggerEvent("loginFail", "Benutzer existiert nicht! Registriere dich zuerst!"); } else { - checkPassword = user.Password; - } - } - if(checkPassword == NAPI.Util.GetHashSha256(password)) - { - player.TriggerEvent("loginSuccess"); - } - else - { - player.TriggerEvent("loginFail","Passwort inkorrekt!"); - } - } - [Command("login")] - public void CmdLogin(Client player) - { - player.TriggerEvent("showLogin",player); + if (user.SocialClubName != player.SocialClubName && user.Password == NAPI.Util.GetHashSha256(password)) + { + player.TriggerEvent("loginDeny", "Dieser Benutzer gehört dir nicht!"); + //Log einbauen für den bösen Bub. + player.Kick(); + } + if (user.Password != NAPI.Util.GetHashSha256(password)) + { + player.TriggerEvent("loginFail", "Passwort inkorrekt!"); + } + else + { + player.TriggerEvent("loginSuccess"); + } + } + } } + [RemoteEvent("OnPlayerRegister")] public void OnPlayerRegister(Client player, string password) { - - using (var registerContext = new Model.DatabaseContext()) + using (var checkUser = new Model.DatabaseContext()) { - var user = new Entities.User { Name = player.Name, SocialClubName = player.SocialClubName, Password = NAPI.Util.GetHashSha256(password) }; - registerContext.Users.Add(user); - registerContext.SaveChanges(); - } - player.TriggerEvent("registerSuccess"); + var checkedUser = checkUser.Users.SingleOrDefault(b => b.Name == player.Name); + if(checkedUser == null) + { + using (var registerUser = new Model.DatabaseContext()) + { + var user = new Entities.User { Name = player.Name, SocialClubName = player.SocialClubName, Password = NAPI.Util.GetHashSha256(password) }; + registerUser.Users.Add(user); + registerUser.SaveChanges(); + } + player.TriggerEvent("registerSuccess"); + } + else if (player.SocialClubName == checkedUser.SocialClubName) + { + player.TriggerEvent("registerFail", "Dieser SocialClubAccount ist schon registriert!"); + } + else if (checkedUser.Name == player.Name) + { + player.TriggerEvent("registerFail", "Benutzername existiert schon!"); + } + } } } }