diff --git a/LauncherDM/App.xaml.cs b/LauncherDM/App.xaml.cs
index 8760e28..0a8b550 100644
--- a/LauncherDM/App.xaml.cs
+++ b/LauncherDM/App.xaml.cs
@@ -14,7 +14,7 @@ namespace LauncherDM
///
public partial class App : Application
{
- private static Mutex mutex = new Mutex(true, Assembly.GetExecutingAssembly().GetName().Name);
+ private static Mutex mutex = new Mutex(true, "fjoasdkjff8139darkmilk");
[STAThread] // Это означает, что все потоки в этой программе выполняются в рамках одного процесса, а управление программой осуществляется одним главным потоком
protected override void OnStartup(StartupEventArgs e)
{
diff --git a/LauncherDM/Services/AuthorizationService.cs b/LauncherDM/Services/AuthorizationService.cs
index 82489ee..e93e4e8 100644
--- a/LauncherDM/Services/AuthorizationService.cs
+++ b/LauncherDM/Services/AuthorizationService.cs
@@ -1,6 +1,9 @@
-using LauncherDM.Services.Interfaces;
+using System;
+using System.Security.Cryptography;
+using System.Text;
+using LauncherDM.Properties;
+using LauncherDM.Services.Interfaces;
using ServerTCP;
-using ServerTCP.Сryptographies;
namespace LauncherDM.Services
{
@@ -9,15 +12,29 @@ internal class AuthorizationService : IAuthorizationService
private IServerRequestService _serverRequest;
public bool Authorization(string login, string password)
{
+ if (string.IsNullOrEmpty(login))
+ throw new ArgumentNullException(login);
+
+ if (string.IsNullOrEmpty(password))
+ throw new ArgumentNullException(password);
+
+
+ var hash = SHA256.HashData(Encoding.UTF8.GetBytes(password));
+ var convertHash = Convert.ToHexString(hash);
//var requestPublicKey = _serverRequest.SendMessageRequest(MessageHeader.MessageType.PublicKey);
//var publicKey = requestPublicKey.Message.ToString();
- var data = string.Concat(login, ",", password);
+ var data = string.Concat(login, ",", convertHash);
//var cryptMessage = CryptoRsa.Encrypt(publicKey, data);
//var requestToken = _serverRequest.SendMessageRequest(cryptMessage, MessageHeader.MessageType.Login);
-
var requestToken = _serverRequest.SendMessageRequest(data, MessageHeader.MessageType.Login);
- return false;
+
+ if (requestToken?.Message.ToString() == "0")
+ return false;
+
+ SettingsApp.Default.Token = requestToken?.Message.ToString();
+ SettingsApp.Default.Save();
+ return true;
}
public AuthorizationService()
diff --git a/LauncherDM/Services/DialogWindowService.cs b/LauncherDM/Services/DialogWindowService.cs
index 9f7ff68..d6b60a3 100644
--- a/LauncherDM/Services/DialogWindowService.cs
+++ b/LauncherDM/Services/DialogWindowService.cs
@@ -32,9 +32,9 @@ public void OpenWindow(object viewModel)
else if (viewModel is AccountUserControlViewModel or AuthorizationWindowViewModel)
{
var regAndLogWindow = new RegAndLogWindow();
- regAndLogWindow.DataContext = new RegAndLogWindowViewModel(new ToolbarToWindowViewModel(new WindowService(regAndLogWindow)),
+ regAndLogWindow.DataContext = new RegAndLogWindowViewModel(regAndLogWindow.Close, new ToolbarToWindowViewModel(new WindowService(regAndLogWindow)),
new ResourcesHelperService());
- regAndLogWindow.Show();
+ regAndLogWindow.ShowDialog();
return;
}
else if (viewModel is ToolbarToWindowViewModel)
diff --git a/LauncherDM/Services/Interfaces/ISignUpService.cs b/LauncherDM/Services/Interfaces/ISignUpService.cs
new file mode 100644
index 0000000..39d263d
--- /dev/null
+++ b/LauncherDM/Services/Interfaces/ISignUpService.cs
@@ -0,0 +1,7 @@
+namespace LauncherDM.Services.Interfaces
+{
+ internal interface ISignUpService
+ {
+ bool SignUp(string login, string email, string password);
+ }
+}
diff --git a/LauncherDM/Services/SignUpService.cs b/LauncherDM/Services/SignUpService.cs
new file mode 100644
index 0000000..92525fb
--- /dev/null
+++ b/LauncherDM/Services/SignUpService.cs
@@ -0,0 +1,42 @@
+using LauncherDM.Properties;
+using LauncherDM.Services.Interfaces;
+using ServerTCP;
+using System.Text;
+using System;
+using System.Security.Cryptography;
+
+namespace LauncherDM.Services
+{
+ internal class SignUpService : ISignUpService
+ {
+ private IServerRequestService _serverRequest;
+ public bool SignUp(string login, string email, string password)
+ {
+ if (string.IsNullOrEmpty(login))
+ throw new ArgumentNullException(login);
+
+ if (string.IsNullOrEmpty(email))
+ throw new ArgumentNullException(email);
+
+ if (string.IsNullOrEmpty(password))
+ throw new ArgumentNullException(password);
+
+ var hash = SHA256.HashData(Encoding.UTF8.GetBytes(password));
+ var convertHash = Convert.ToHexString(hash);
+ var data = string.Concat(login, ",", convertHash, ",", email);
+ var requestToken = _serverRequest.SendMessageRequest(data, MessageHeader.MessageType.Registration);
+
+ if (requestToken?.Message.ToString() == "0")
+ return false;
+
+ SettingsApp.Default.Token = requestToken?.Message.ToString();
+ SettingsApp.Default.Save();
+ return true;
+ }
+
+ public SignUpService()
+ {
+ _serverRequest = new ServerRequestService();
+ }
+ }
+}
diff --git a/LauncherDM/ViewModels/RegAndLogWindowViewModel.cs b/LauncherDM/ViewModels/RegAndLogWindowViewModel.cs
index e0bd486..7def6bc 100644
--- a/LauncherDM/ViewModels/RegAndLogWindowViewModel.cs
+++ b/LauncherDM/ViewModels/RegAndLogWindowViewModel.cs
@@ -5,6 +5,7 @@
using LauncherDM.Infastructure.Commands.Base;
using LauncherDM.Infastructure.Commands;
using LauncherDM.Models;
+using System;
namespace LauncherDM.ViewModels
{
@@ -20,6 +21,12 @@ class RegAndLogWindowViewModel : ViewModel.Base.ViewModel
#endregion
+ #region Fields
+
+ private Action _closeAction;
+
+ #endregion
+
#region Bindings
public string Title => _resourcesHelper.LocalizationGet("Authorization");
@@ -124,7 +131,9 @@ private void OnLoginCommandExecuted(object p)
IAuthorizationService authorization = new AuthorizationService();
if (authorization.Authorization(Login, Password))
{
-
+ _dialogWindow.OpenWindow(this);
+ _dialogWindow.CloseAction = _closeAction;
+ _dialogWindow.CloseWindow();
}
else
{
@@ -141,6 +150,16 @@ private void OnLoginCommandExecuted(object p)
private bool CanSignUpCommandExecute(object p) => true;
private void OnSignUpCommandExecuted(object p)
{
+ ISignUpService signUpService = new SignUpService();
+ if (signUpService.SignUp(RegLogin, Email, RegPassword))
+ {
+
+ }
+ else
+ {
+ IDialogMessageBoxService dialogMessageBox = new DialogMessageBoxService();
+ dialogMessageBox.DialogShow("Error Server Reques", "Error Server Reques");
+ }
}
@@ -148,9 +167,10 @@ private void OnSignUpCommandExecuted(object p)
#endregion
- public RegAndLogWindowViewModel(ToolbarToWindowViewModel toolbarViewModel, ResourcesHelperService resourcesHelper)
+ public RegAndLogWindowViewModel(Action closeWindow ,ToolbarToWindowViewModel toolbarViewModel, ResourcesHelperService resourcesHelper)
{
_resourcesHelper = resourcesHelper;
+ _closeAction = closeWindow;
ToolbarVM = toolbarViewModel;
_dialogWindow = new DialogWindowService();
_regAndLogWindowService = new RegAndLogWindowServiceService();
diff --git a/LauncherDM/Views/Windows/RegAndLogWindow.xaml b/LauncherDM/Views/Windows/RegAndLogWindow.xaml
index 6ecaa06..dc5b61a 100644
--- a/LauncherDM/Views/Windows/RegAndLogWindow.xaml
+++ b/LauncherDM/Views/Windows/RegAndLogWindow.xaml
@@ -423,9 +423,9 @@
-
+
@@ -466,7 +466,7 @@
-
+
@@ -481,7 +481,7 @@
-
+
@@ -496,7 +496,7 @@
-
+
diff --git a/ServerTCP/DataBase/DataBaseCommands.cs b/ServerTCP/DataBase/DataBaseCommands.cs
index 790ebd1..f2140c2 100644
--- a/ServerTCP/DataBase/DataBaseCommands.cs
+++ b/ServerTCP/DataBase/DataBaseCommands.cs
@@ -1,12 +1,15 @@
-using System.Threading.Channels;
-using ServerTCP.Models;
+using ServerTCP.Models;
using ServerTCP.Models.Data;
namespace ServerTCP.DataBase
{
internal class DataBaseCommands
{
- public static void Insert(object table, MessageHeader.MessageType messageType)
+
+ public const string SaltPassword = "1asdjh192jd1286sdarkmilk";
+ public const string PaperPassword = "jf10hdsj12fbzd12darkmilk";
+
+ public static bool Insert(object table, MessageHeader.MessageType messageType)
{
using (var db = new ApplicationContext())
{
@@ -19,11 +22,11 @@ public static void Insert(object table, MessageHeader.MessageType messageType)
db.users.Add(user);
break;
}
- db.SaveChanges();
+ return db.SaveChanges() == 1;
}
}
- public static object Select(MessageHeader.MessageType messageType)
+ public static object Select(MessageHeader.MessageType messageType, params string[] data )
{
using (var db = new ApplicationContext())
{
@@ -35,6 +38,10 @@ public static object Select(MessageHeader.MessageType messageType)
var appWPF = db.apps.Where(x => x.parametername == "wpfDMVersion").ToArray();
result = appWPF[0].parametervalue;
break;
+ case MessageHeader.MessageType.Login:
+ var user = db.users.Where(x => x.username == data[0] && x.password == data[1]).ToArray();
+ result = user.Length > 0;
+ break;
default:
result = null;
break;
diff --git a/ServerTCP/MessageHeader.cs b/ServerTCP/MessageHeader.cs
index 7accc38..1538bb2 100644
--- a/ServerTCP/MessageHeader.cs
+++ b/ServerTCP/MessageHeader.cs
@@ -90,9 +90,9 @@ public byte[] MessageToArray(bool loadToken = false)
switch (Type)
{
- case MessageType.Login:
- //message = (byte[])Message;
- Encoding.UTF8.GetBytes(Message.ToString());
+ case MessageType.Login:
+ case MessageType.Registration:
+ message = Encoding.UTF8.GetBytes(Message.ToString());
break;
}
@@ -112,6 +112,7 @@ public byte[] MessageToArray(bool loadToken = false)
switch (Type)
{
case MessageType.Login:
+ case MessageType.Registration:
Array.Copy(bytes, 0, result, 3, bytes.Length);
Array.Copy(message ?? [0], 0, result, LengthAndDataType, messageLength);
break;
@@ -132,6 +133,8 @@ internal byte[] MessageServerToArray(bool loadToken = false)
switch (Type)
{
case MessageType.Token:
+ case MessageType.Login:
+ case MessageType.Registration:
case MessageType.TitleLoading:
case MessageType.PublicKey:
case MessageType.Version:
@@ -169,6 +172,7 @@ public static MessageHeader FromArray(ReadOnlySpan buffer)
case MessageHeader.MessageType.Version:
case MessageHeader.MessageType.PublicKey:
case MessageHeader.MessageType.Login:
+ case MessageHeader.MessageType.Registration:
case MessageHeader.MessageType.TitleLoading:
case MessageHeader.MessageType.Check:
return new MessageHeader(Encoding.UTF8.GetString(buffer.ToArray(), LengthAndDataType, buffer.Length - LengthAndDataType), (MessageType)buffer[0], (MessageLanguages.Languages)buffer[1]);
@@ -188,12 +192,6 @@ public static MessageHeader FromArray(ReadOnlySpan buffer)
// return new MessageHeader(result.ToArray(),
// (MessageType)buffer[0]);
// break;
- case MessageHeader.MessageType.Registration:
- case MessageHeader.MessageType.Log:
- case MessageHeader.MessageType.File:
- case MessageHeader.MessageType.Photo:
- case MessageHeader.MessageType.Data:
- case MessageHeader.MessageType.Title:
default:
return null;
break;
diff --git a/ServerTCP/Models/User.cs b/ServerTCP/Models/User.cs
index 327cca7..2602009 100644
--- a/ServerTCP/Models/User.cs
+++ b/ServerTCP/Models/User.cs
@@ -1,7 +1,11 @@
-namespace ServerTCP.Models
+using System.ComponentModel.DataAnnotations;
+using System.ComponentModel.DataAnnotations.Schema;
+
+namespace ServerTCP.Models
{
internal class User
{
+ [Key, DatabaseGenerated(DatabaseGeneratedOption.None)]
public int id { get; set; }
public string username { get; set; }
public string login { get; set; }
diff --git a/ServerTCP/Program.cs b/ServerTCP/Program.cs
index d7438c0..8b41f4c 100644
--- a/ServerTCP/Program.cs
+++ b/ServerTCP/Program.cs
@@ -1,5 +1,7 @@
using System.Net;
using System.Net.Sockets;
+using System.Security.Cryptography;
+using System.Text;
using ServerTCP.DataBase;
using ServerTCP.Models;
@@ -15,6 +17,8 @@ internal class Program
private static Random rand = new Random();
+ private static string SaltPassword = "sdlfjkpo213ndarkmilk";
+
static void Main(string[] args)
{
//LoadingRSA();
@@ -50,29 +54,54 @@ static void Main(string[] args)
case MessageHeader.MessageType.Check:
headerRequest = new MessageHeader("1", MessageHeader.MessageType.Check);
break;
+
case MessageHeader.MessageType.Login:
- // byte[] s = (byte[])header.Message;
- //var r = CryptoRsa.Decrypt(_privateKey, s);
- //Console.WriteLine(r);
- Console.WriteLine(header.Message.ToString());
+ var userInfo = header.Message.ToString().Split(',');
+ var hashLogin = SHA256.HashData(Encoding.UTF8.GetBytes(userInfo[1] + SaltPassword));
+ var convertHashLogin = Convert.ToHexString(hashLogin);
+
+ var login = DataBaseCommands.Select(MessageHeader.MessageType.Login, userInfo[0], convertHashLogin);
+
+ if ((bool)login)
+ {
+ headerRequest = new MessageHeader(Token.GenerateToken(userInfo[0], convertHashLogin),
+ MessageHeader.MessageType.Login);
+ }
+ else
+ headerRequest = new MessageHeader("0", MessageHeader.MessageType.Login);
break;
+
case MessageHeader.MessageType.Registration:
+ var newuserInfo = header.Message.ToString().Split(',');
+
+ if (newuserInfo.Length < 3)
+ throw new ArgumentException(newuserInfo.Length.ToString());
+
+ var hash = SHA256.HashData(Encoding.UTF8.GetBytes(newuserInfo[1] + SaltPassword));
+ var convertHash = Convert.ToHexString(hash);
var user = new User
{
- id = 1, login = "Gustaf", email = "gustavo@milk.su", username = "Gustavo", password = "sjafhfjhlkj12pje12j31kl23j1l123j"
+ login = newuserInfo[0], email = newuserInfo[2], username = newuserInfo[0], password = convertHash
};
- DataBaseCommands.Insert(user, MessageHeader.MessageType.Registration);
+ var result = DataBaseCommands.Insert(user, MessageHeader.MessageType.Registration);
+
+ headerRequest = result
+ ? new MessageHeader("1", MessageHeader.MessageType.Registration)
+ : new MessageHeader("0", MessageHeader.MessageType.Registration);
break;
+
case MessageHeader.MessageType.TitleLoading:
var text = rand.Next(0, 3) == 0
? ResourcesHelper.LocalizationGet("LoadingText", header.Language)
: ResourcesHelper.LocalizationGet("LoadingTextTwo", header.Language);
headerRequest = new MessageHeader(text, MessageHeader.MessageType.TitleLoading);
break;
+
case MessageHeader.MessageType.Version:
var version = DataBaseCommands.Select(MessageHeader.MessageType.Version);
headerRequest = new MessageHeader(version.ToString(), MessageHeader.MessageType.Version);
break;
+
case MessageHeader.MessageType.PublicKey:
headerRequest = new MessageHeader(_privateKey, MessageHeader.MessageType.PublicKey);
break;
diff --git a/ServerTCP/Token.cs b/ServerTCP/Token.cs
new file mode 100644
index 0000000..f3ea0af
--- /dev/null
+++ b/ServerTCP/Token.cs
@@ -0,0 +1,31 @@
+using System.Security.Cryptography;
+using System.Text;
+using ServerTCP.Сryptographies;
+
+namespace ServerTCP
+{
+ internal class Token
+ {
+ private static string Key = "sdkjoidarkmilk=";
+
+ public static Dictionary Tokens = new Dictionary();
+
+ public static string GenerateToken(string login, string password)
+ {
+ var tokenData = string.Concat(login, ",", password);
+ var regToken = string.Concat(login, ",", DateTime.Now);
+ using (var myAes = Aes.Create())
+ {
+ byte[] aesKey = SHA256Managed.Create().ComputeHash(Encoding.UTF8.GetBytes(Key));
+ byte[] aesIV = MD5.Create().ComputeHash(Encoding.UTF8.GetBytes(Key));
+ myAes.Key = aesKey;
+ myAes.IV = aesIV;
+ var tokenResult = Convert.ToBase64String(CryptoAes.EncryptStringToBytes_Aes(tokenData, myAes.Key, myAes.IV));
+
+ if(!Tokens.ContainsKey(tokenResult))
+ Tokens.Add(tokenResult, regToken);
+ return tokenResult;
+ }
+ }
+ }
+}
diff --git "a/ServerTCP/\320\241ryptographies/CryptoAes.cs" "b/ServerTCP/\320\241ryptographies/CryptoAes.cs"
new file mode 100644
index 0000000..720abc1
--- /dev/null
+++ "b/ServerTCP/\320\241ryptographies/CryptoAes.cs"
@@ -0,0 +1,90 @@
+using System.Security.Cryptography;
+
+namespace ServerTCP.Сryptographies
+{
+ internal class CryptoAes
+ {
+ public static byte[] EncryptStringToBytes_Aes(string plainText, byte[] Key, byte[] IV)
+ {
+ // Check arguments.
+ if (plainText == null || plainText.Length <= 0)
+ throw new ArgumentNullException("plainText");
+ if (Key == null || Key.Length <= 0)
+ throw new ArgumentNullException("Key");
+ if (IV == null || IV.Length <= 0)
+ throw new ArgumentNullException("IV");
+ byte[] encrypted;
+
+ // Create an Aes object
+ // with the specified key and IV.
+ using (Aes aesAlg = Aes.Create())
+ {
+ aesAlg.Key = Key;
+ aesAlg.IV = IV;
+
+ // Create an encryptor to perform the stream transform.
+ ICryptoTransform encryptor = aesAlg.CreateEncryptor(aesAlg.Key, aesAlg.IV);
+
+ // Create the streams used for encryption.
+ using (MemoryStream msEncrypt = new MemoryStream())
+ {
+ using (CryptoStream csEncrypt = new CryptoStream(msEncrypt, encryptor, CryptoStreamMode.Write))
+ {
+ using (StreamWriter swEncrypt = new StreamWriter(csEncrypt))
+ {
+ //Write all data to the stream.
+ swEncrypt.Write(plainText);
+ }
+ encrypted = msEncrypt.ToArray();
+ }
+ }
+ }
+
+ // Return the encrypted bytes from the memory stream.
+ return encrypted;
+ }
+
+ public static string DecryptStringFromBytes_Aes(byte[] cipherText, byte[] Key, byte[] IV)
+ {
+ // Check arguments.
+ if (cipherText == null || cipherText.Length <= 0)
+ throw new ArgumentNullException("cipherText");
+ if (Key == null || Key.Length <= 0)
+ throw new ArgumentNullException("Key");
+ if (IV == null || IV.Length <= 0)
+ throw new ArgumentNullException("IV");
+
+ // Declare the string used to hold
+ // the decrypted text.
+ string plaintext = null;
+
+ // Create an Aes object
+ // with the specified key and IV.
+ using (Aes aesAlg = Aes.Create())
+ {
+ aesAlg.Key = Key;
+ aesAlg.IV = IV;
+
+ // Create a decryptor to perform the stream transform.
+ ICryptoTransform decryptor = aesAlg.CreateDecryptor(aesAlg.Key, aesAlg.IV);
+
+ // Create the streams used for decryption.
+ using (MemoryStream msDecrypt = new MemoryStream(cipherText))
+ {
+ using (CryptoStream csDecrypt = new CryptoStream(msDecrypt, decryptor, CryptoStreamMode.Read))
+ {
+ using (StreamReader srDecrypt = new StreamReader(csDecrypt))
+ {
+
+ // Read the decrypted bytes from the decrypting stream
+ // and place them in a string.
+ plaintext = srDecrypt.ReadToEnd();
+ }
+ }
+ }
+ }
+
+ return plaintext;
+ }
+ }
+}