Merge branch 'feature/login-register-system' into develop

This commit is contained in:
VegaZ
2018-09-20 20:20:54 +02:00
5 changed files with 152 additions and 73 deletions

View File

@@ -1,15 +1,17 @@
<!-- <!--
* @overview Life of German Reallife - Login Login login.html * @overview Life of German Reallife - Login Login login.html
* @author Orangebox, VegaZ * @author Orangebox, hydrant, VegaZ
* @copyright (c) 2008 - 2018 Life of German * @copyright (c) 2008 - 2018 Life of German
*--> *-->
<!DOCTYPE html> <!DOCTYPE html>
<html> <html>
<head> <head>
<meta charset="UTF-8"> <meta charset="UTF-8">
<link rel="stylesheet" href="style.css" /> <link rel="stylesheet" href="Dependences/bootstrap-3.3.7/css/bootstrap.min.css">
<script src="Dependences/jquery-3.3.1.min.js"></script> <script src="Dependences/jquery-3.3.1.min.js"></script>
<script src="Dependences/bootstrap-3.3.7/js/bootstrap.min.js"></script> <script src="Dependences/bootstrap-3.3.7/js/bootstrap.min.js"></script>
<link rel="stylesheet" href="style.css" />
</head> </head>
<body> <body>
@@ -20,73 +22,32 @@
ERROR TEXT ERROR TEXT
</div> </div>
<div class="register-form form-l"> <div class="register-form form-l">
<input type="text" placeholder="Benutzername" id="usernameInputRegister" />
<input type="password" placeholder="Passwort" id="passwordInputRegister" /> <input type="password" placeholder="Passwort" id="passwordInputRegister" />
<input type="password" placeholder="Passwort wiederholen" id="passwordRepeatInputRegister" /> <input type="password" placeholder="Passwort wiederholen" id="passwordRepeatInputRegister" />
<button id="registerBtn">Erstellen</button><br /><br /> <button id="registerBtn" onclick="registerPlayer()";>Registrieren</button><br /><br />
<button class="quitBtn">Server verlassen</button> <button class="quitBtn">Server verlassen</button>
<p class="message">Bereits registriert? <a href="#">Logg dich ein</a></p> <p class="message">Bereits registriert? <a href="#">Logg dich ein</a></p>
</div> </div>
<div class="login-form form-l"> <div class="login-form form-l">
<input type="text" placeholder="Benutzername" id="usernameInputLogin" />
<input type="password" placeholder="Passwort" id="passwordInputLogin" /> <input type="password" placeholder="Passwort" id="passwordInputLogin" />
<button id="loginBtn">Einloggen</button><br /><br /> <button id="loginBtn" onclick="loginPlayer()">Einloggen</button><br /><br />
<button class="quitBtn">Server verlassen</button> <button class="quitBtn">Server verlassen</button>
<p class="message">Nicht registriert? <a href="#">Erstelle einen Account</a></p> <p class="message">Nicht registriert? <a href="#">Erstelle einen Account</a></p>
</div> </div>
</div> </div>
</div> </div>
<script type="text/javascript"> <script type="text/javascript">
$(".message a").click(function () {
$(document).ready(function () { $(".form-l").animate({ height: "toggle", opacity: "toggle" }, "slow");
resourceCall("RequestDisplayname");
}); });
$('.message a').click(function () { $(".quitBtn").click(() => {
$('.form-l').animate({ height: "toggle", opacity: "toggle" }, "slow");
});
$('#registerBtn').click(function () {
var password = $('#passwordInputRegister').val();
var passwordRepeat = $('#passwordRepeatInputRegister').val();
if (password === "" || passwordRepeat === "") {
showError("Mindestens ein Passwort Feld ist leer!");
return;
}
if (password !== passwordRepeat) {
showError("Die beiden Passwörter stimmen nicht überein!")
return;
}
if (password.length < 8) {
showError("Das Passwort muss mindestens 8 Zeichen lang sein");
return;
}
resourceCall("Register", password, passwordRepeat);
});
$('#loginBtn').click(function () {
var password = $('#passwordInputLogin').val();
if (password === "") {
showError("Du musst ein Passwort angeben!");
return;
}
resourceCall("Login", password);
});
$('.quitBtn').click(function () {
resourceCall("Quit"); resourceCall("Quit");
}); });
function showError(error) { function showError(error) {
$('.isa_error').html(error); $(".isa_error").html(error);
$('.isa_error').slideDown(); $(".isa_error").slideDown();
} }
function SendDisplayname(name) { function SendDisplayname(name) {

View File

@@ -4,12 +4,37 @@
* @copyright (c) 2008 - 2018 Life of German * @copyright (c) 2008 - 2018 Life of German
*/ */
$('#loginBtn').click(() => { function registerPlayer() {
$('.alert').remove(); //Remove any alerts when we attempt to login/register
mp.trigger('loginInformationToServer', $('#usernameInputLogin').val(), $('#passwordInputLogin').val()); var password = document.getElementById("passwordInputRegister").value;
}); var passwordRepeat = document.getElementById("passwordRepeatInputRegister").value;
$('#registerBtn').click(() => { if(password === "" || passwordRepeat === "") {
$('.alert').remove(); //Remove any alerts when we attempt to login/register showError("Mindestens ein Passwort Feld ist leer!");
mp.trigger('registerInformationToServer', $('#usernameInputRegister').val(), $('#passwordInputRegister').val()); return;
}); }
if (password !== passwordRepeat) {
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);
}
function loginPlayer() {
let password = document.getElementById("passwordInputLogin").value;
if (password === "") {
showError("Du musst ein Passwort angeben!");
return;
}
$('.isa_error').hide();
mp.trigger("loginInformationToServer", password);
}

View File

@@ -3,17 +3,62 @@
* @author VegaZ * @author VegaZ
* @copyright (c) 2008 - 2018 Life of German * @copyright (c) 2008 - 2018 Life of German
*/ */
var loginBrowser = mp.browsers.new('package://Login/login.html');
mp.gui.cursor.show(true, true);
mp.events.add('loginInformationToServer', (username, password) => { var loginBrowser;
loginBrowser = mp.browsers.new('package://Login/login.html');
mp.gui.chat.activate(false);
mp.gui.cursor.show(true);
mp.events.callRemote('OnPlayerLogin', username, password); mp.events.add('loginInformationToServer', (password) => {
mp.events.callRemote('OnPlayerLogin', password);
}); });
mp.events.add('registerInformationToServer', (username, password) => { mp.events.add('registerInformationToServer', (password) => {
mp.events.callRemote('OnPlayerRegister', password);
mp.events.callRemote('OnPlayerRegister', username, password);
});
mp.events.add('registerSuccess', () => {
mp.gui.chat.push("Erfolgreich registriert!")
if (loginBrowser)
{
loginBrowser.destroy();
}
mp.gui.cursor.show(false);
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);
});
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);
}); });

View File

@@ -25,7 +25,8 @@ namespace reallife_gamemode.Server.Entities
[StringLength(64)] [StringLength(64)]
public string Password { get; set; } public string Password { get; set; }
public int LogUserId { get; set; } public int LogUserId { get; set; }
public DateTime RegistrationDate { get; set; } [Timestamp]
public byte[] RegistrationDate { get; set; }
[EmailAddress] [EmailAddress]
[StringLength(64)] [StringLength(64)]
public string Email { get; set; } public string Email { get; set; }

View File

@@ -1,5 +1,6 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Linq;
using System.Text; using System.Text;
using GTANetworkAPI; using GTANetworkAPI;
@@ -14,15 +15,61 @@ namespace reallife_gamemode.Server.Events
public class Login : Script public class Login : Script
{ {
[RemoteEvent("OnPlayerLogin")] [RemoteEvent("OnPlayerLogin")]
public void OnPlayerLogin(Client player, string username, string password) public void OnPlayerLogin(Client player, string password)
{ {
using (var loginUser = new Model.DatabaseContext())
{
var user = loginUser.Users.SingleOrDefault(b => b.Name == player.Name);
if(user == null)
{
player.TriggerEvent("loginFail", "Benutzer existiert nicht! Registriere dich zuerst!");
}
else
{
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")] [RemoteEvent("OnPlayerRegister")]
public void OnPlayerRegister(Client player, string username, string password) public void OnPlayerRegister(Client player, string password)
{ {
using (var checkUser = new Model.DatabaseContext())
} {
} 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!");
}
}
}
}
} }