Advertisement
Guest User

Untitled

a guest
Dec 11th, 2015
121
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 47.21 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Web;
  4. using System.Web.UI;
  5. using System.Web.UI.WebControls;
  6. using System.IO;
  7. using System.Data.SqlClient;
  8. using System.Text;
  9. using System.Security.Cryptography;
  10. using System.Net.Mail;
  11. using System.Net;
  12.  
  13. public partial class pnas : System.Web.UI.Page {
  14.     protected void Page_Load(object sender, EventArgs e) {
  15.         SqlConnectionStringBuilder builder = new SqlConnectionStringBuilder();
  16.         builder.DataSource = @"(local)\sebastianlawe";
  17.         builder.InitialCatalog = "SebastianLawe";
  18.         builder.UserID = System.Web.Configuration.WebConfigurationManager.AppSettings["DatabaseName"];
  19.         builder.Password = System.Web.Configuration.WebConfigurationManager.AppSettings["DatabasePassword"];
  20.         using (BinaryReader reader = new BinaryReader(Request.InputStream)) {
  21.             using (BinaryWriter writer = new BinaryWriter(Response.OutputStream)) {
  22.                 if (reader.BaseStream.Length > 0) {
  23.                     switch (reader.ReadByte()) {
  24.                         case 0:
  25.                             // Registration
  26.                             string nickname = reader.ReadString();
  27.                             string username = reader.ReadString();
  28.                             string password = reader.ReadString();
  29.                             string email = reader.ReadString();
  30.                             bool usernameExists = false;
  31.                             bool nicknameExists = false;
  32.                             bool emailExists = false;
  33.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  34.                                 connection.Open();
  35.                                 using (SqlCommand command = connection.CreateCommand()) {
  36.                                     command.CommandText =
  37.                                     @"SELECT [Username], [Nickname], [Email] FROM [SebastianLawe].[dbo].[ProjectNORLogin]
  38.                                WHERE [Username] = @Username OR [Nickname] = @Nickname OR [Email] = @Email";
  39.                                     command.Parameters.Add(new SqlParameter("@Username", username));
  40.                                     command.Parameters.Add(new SqlParameter("@Nickname", nickname));
  41.                                     command.Parameters.Add(new SqlParameter("@Email", email));
  42.                                     using (SqlDataReader sqlReader = command.ExecuteReader()) {
  43.                                         while (sqlReader.Read()) {
  44.                                             if (!usernameExists) {
  45.                                                 usernameExists = username == (sqlReader.GetValue(0) as string);
  46.                                                 break;
  47.                                             }
  48.                                             if (!emailExists) {
  49.                                                 emailExists = email == (sqlReader.GetValue(1) as string);
  50.                                                 break;
  51.                                             }
  52.                                             if (!nicknameExists) {
  53.                                                 nicknameExists = nickname == (sqlReader.GetValue(2) as string);
  54.                                                 break;
  55.                                             }
  56.                                         }
  57.                                         writer.Write(usernameExists || emailExists || nicknameExists);
  58.                                         if (usernameExists) {
  59.                                             writer.Write("Username Already Exists");
  60.                                         }
  61.                                         else if (emailExists) {
  62.                                             writer.Write("Email Already Exists");
  63.                                         }
  64.                                         else if (nicknameExists) {
  65.                                             writer.Write("Nickname Already Exists");
  66.                                         }
  67.                                         writer.Flush();
  68.                                     }
  69.                                 }
  70.                                 connection.Close();
  71.                             }
  72.                             if (!usernameExists && !nicknameExists && !emailExists) {
  73.                                 using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  74.                                     connection.Open();
  75.                                     using (SqlCommand command = connection.CreateCommand()) {
  76.                                         Guid salt = Guid.NewGuid();
  77.                                         Guid verificationKey = Guid.NewGuid();
  78.                                         command.CommandText =
  79.                                         @"insert into [SebastianLawe].[dbo].[ProjectNORLogin]
  80.                                values (NEWID(), @Nickname, @Username, @Password, @Salt, @Email,
  81.                                SYSUTCDATETIME(), SYSUTCDATETIME(), 0, @SecurityQuestion, @SecurityAnswer, @Verification, @PasswordResetKey, 0, 0, 0)";
  82.                                         command.Parameters.Add(new SqlParameter("@Nickname", nickname));
  83.                                         command.Parameters.Add(new SqlParameter("@Username", username));
  84.                                         command.Parameters.Add(new SqlParameter("@Password", sha256_hash(password + salt.ToString())));
  85.                                         command.Parameters.Add(new SqlParameter("@Salt", salt.ToString()));
  86.                                         command.Parameters.Add(new SqlParameter("@Email", email));
  87.                                         command.Parameters.Add(new SqlParameter("@SecurityQuestion", reader.ReadString()));
  88.                                         command.Parameters.Add(new SqlParameter("@SecurityAnswer", reader.ReadString()));
  89.                                         command.Parameters.Add(new SqlParameter("@Verification", verificationKey));
  90.                                         command.Parameters.Add(new SqlParameter("@PasswordResetKey", Guid.Empty));
  91.                                         try {
  92.                                             command.ExecuteNonQuery();
  93.                                             writer.Write("");
  94.                                             MailMessage mail = new MailMessage("no-reply@projectnor.com", email);
  95.                                             SmtpClient client = new SmtpClient();
  96.                                             NetworkCredential cred = new NetworkCredential("no-reply@thavea.com", "1am1lwkr");
  97.                                             client.EnableSsl = true;
  98.                                             client.Port = 587;
  99.                                             client.DeliveryMethod = SmtpDeliveryMethod.Network;
  100.                                             client.UseDefaultCredentials = false;
  101.                                             client.Host = "smtp.gmail.com";
  102.                                             client.Credentials = cred;
  103.                                             mail.Subject = "Project NOR Verification";
  104.                                             mail.Body = "Thank you for registering to Project NOR!\r\n"
  105.                                                 + "Before you can start playing, you will need enter the following activation key within the game.\r\n\r\n"
  106.                                                 + verificationKey.ToString()
  107.                                                 + "\r\n\r\nThis message is auto generated, any messages received will not get a response.";
  108.                                             client.Send(mail);
  109.                                         }
  110.                                         catch {
  111.                                             writer.Write("Server Error");
  112.                                         }
  113.                                     }
  114.                                 }
  115.                             }
  116.                             break;
  117.                         case 1:
  118.                             // Authenticate
  119.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  120.                                 connection.Open();
  121.                                 using (SqlCommand command = connection.CreateCommand()) {
  122.                                     command.CommandText = @"select [Username], [Password], [Salt], [Nickname], [Paid]
  123.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [Username] = @Username";
  124.                                     command.Parameters.AddWithValue("@Username", reader.ReadString());
  125.                                     using (SqlDataReader dataReader = command.ExecuteReader()) {
  126.                                         while (dataReader.Read()) {
  127.                                             if ((sha256_hash(reader.ReadString()
  128.                                                 + (dataReader.GetValue(2) as string))
  129.                                                 == (dataReader.GetValue(1) as string))) {
  130.                                                 writer.Write(true);
  131.                                                 writer.Write(dataReader.GetValue(3) as string);
  132.                                                 writer.Write((bool)dataReader.GetValue(4));
  133.                                             }
  134.                                             else {
  135.                                             }
  136.                                         }
  137.                                         writer.Write(false);
  138.                                         writer.Flush();
  139.                                     }
  140.                                 }
  141.                             }
  142.                             break;
  143.                         case 2:
  144.                             // Verify Key
  145.                             bool authenticated = false;
  146.                             username = reader.ReadString();
  147.                             password = reader.ReadString();
  148.                             string verification = reader.ReadString();
  149.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  150.                                 connection.Open();
  151.                                 using (SqlCommand command = connection.CreateCommand()) {
  152.                                     command.CommandText = @"select [Username], [Password], [Salt], [Paid], [Verification]
  153.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [Username] = @Username and [Verification] = @Verification";
  154.                                     command.Parameters.Add(new SqlParameter("@Username", username));
  155.                                     command.Parameters.Add(new SqlParameter("@Verification", new Guid(verification.Replace("-", null))));
  156.                                     using (SqlDataReader dataReader = command.ExecuteReader()) {
  157.                                         while (dataReader.Read()) {
  158.                                             if ((sha256_hash(password
  159.                                                 + (dataReader.GetValue(2) as string))
  160.                                                 == (dataReader.GetValue(1) as string))
  161.                                                 && ((Guid)dataReader.GetValue(4))
  162.                                                 == new Guid(verification)) {
  163.                                                 authenticated = true;
  164.                                                 break;
  165.                                             }
  166.                                         }
  167.                                     }
  168.                                 }
  169.                             }
  170.                             if (authenticated) {
  171.                                 using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  172.                                     connection.Open();
  173.                                     using (SqlCommand command = connection.CreateCommand()) {
  174.                                         command.CommandText = @"update [ProjectNORLogin] set [Paid] = 1 where [Verification] = @Verification";
  175.                                         command.Parameters.AddWithValue("@Username", username);
  176.                                         command.Parameters.AddWithValue("@Verification", verification);
  177.                                         writer.Write((byte)command.ExecuteNonQuery());
  178.                                     }
  179.                                 }
  180.                             }
  181.                             else {
  182.                                 writer.Write((byte)2);
  183.                             }
  184.                             break;
  185.                         case 3:
  186.                             // Get Security Question
  187.                             email = reader.ReadString();
  188.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  189.                                 connection.Open();
  190.                                 using (SqlCommand command = connection.CreateCommand()) {
  191.                                     command.CommandText = @"select [Email], [SecurityQuestion]
  192.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [Email] = @Email";
  193.                                     command.Parameters.Add(new SqlParameter("@Email", email));
  194.                                     using (SqlDataReader dataReader = command.ExecuteReader()) {
  195.                                         while (dataReader.Read()) {
  196.                                             writer.Write(dataReader.GetValue(1) as string);
  197.                                         }
  198.                                     }
  199.                                     writer.Write("This name does not exist.");
  200.                                 }
  201.                             }
  202.                             break;
  203.                         case 4:
  204.                             // Check security answer.
  205.                             email = reader.ReadString();
  206.                             bool securityQuestionAnswered = false;
  207.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  208.                                 connection.Open();
  209.                                 using (SqlCommand command = connection.CreateCommand()) {
  210.                                     command.CommandText = @"select [SecurityAnswer], [Email]
  211.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [Email] = @Email and [SecurityAnswer] = @SecurityAnswer";
  212.                                     command.Parameters.Add(new SqlParameter("@Email", email));
  213.                                     command.Parameters.Add(new SqlParameter("@SecurityAnswer", reader.ReadString()));
  214.                                     using (SqlDataReader dataReader = command.ExecuteReader()) {
  215.                                         while (dataReader.Read()) {
  216.                                             writer.Write(true);
  217.                                             securityQuestionAnswered = true;
  218.                                             break;
  219.                                         }
  220.                                     }
  221.                                     writer.Write(false);
  222.                                     writer.Flush();
  223.                                 }
  224.                             }
  225.                             if (securityQuestionAnswered) {
  226.                                 Guid passwordResetKey = Guid.NewGuid();
  227.                                 using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  228.                                     connection.Open();
  229.                                     using (SqlCommand command = connection.CreateCommand()) {
  230.                                         command.CommandText = @"update [ProjectNORLogin] set [PasswordResetKey] = @NewKey where [Email] = @Email";
  231.                                         command.Parameters.Add(new SqlParameter("@Email", email));
  232.                                         command.Parameters.Add(new SqlParameter("@NewKey", passwordResetKey));
  233.                                         command.ExecuteNonQuery();
  234.                                         MailMessage mail = new MailMessage("no-reply@projectnor.com", email);
  235.                                         SmtpClient client = new SmtpClient();
  236.                                         NetworkCredential cred = new NetworkCredential("no-reply@thavea.com", "1am1lwkr");
  237.                                         client.EnableSsl = true;
  238.                                         client.Port = 587;
  239.                                         client.DeliveryMethod = SmtpDeliveryMethod.Network;
  240.                                         client.UseDefaultCredentials = false;
  241.                                         client.Host = "smtp.gmail.com";
  242.                                         client.Credentials = cred;
  243.                                         mail.Subject = "Project NOR Password Reset";
  244.                                         mail.Body = "Forgot your password? No worries.\r\n"
  245.                                             + "To reset your password, copy and paste the following code into the games password reset menu.\r\n\r\n"
  246.                                             + passwordResetKey.ToString()
  247.                                             + "\r\n\r\nThis message is auto generated, any messages received will not get a response.";
  248.                                         client.Send(mail);
  249.                                     }
  250.                                 }
  251.                             }
  252.                             break;
  253.                         case 5:
  254.                             // Reset Password
  255.                             Guid passwordKey = new Guid(reader.ReadString());
  256.                             string passwordSalt = "";
  257.                             bool properResetKeyEntered = false;
  258.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  259.                                 connection.Open();
  260.                                 using (SqlCommand command = connection.CreateCommand()) {
  261.                                     command.CommandText = @"select [PasswordResetKey], [Salt]
  262.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [PasswordResetKey] = @PasswordResetKey";
  263.                                     command.Parameters.Add(new SqlParameter("@PasswordResetKey", passwordKey));
  264.                                     using (SqlDataReader dataReader = command.ExecuteReader()) {
  265.                                         while (dataReader.Read()) {
  266.                                             writer.Write(true);
  267.                                             properResetKeyEntered = true;
  268.                                             passwordSalt = dataReader.GetValue(1) as string;
  269.                                             break;
  270.                                         }
  271.                                     }
  272.                                     writer.Write(false);
  273.                                 }
  274.                             }
  275.                             if (properResetKeyEntered) {
  276.                                 using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  277.                                     connection.Open();
  278.                                     using (SqlCommand command = connection.CreateCommand()) {
  279.                                         command.CommandText = @"update [ProjectNORLogin] set [Password] = @Password, [PasswordResetKey] = @NewResetKey
  280.                                                            where [PasswordResetKey] = @PasswordResetKey";
  281.                                         command.Parameters.AddWithValue("@PasswordResetKey", passwordKey);
  282.                                         command.Parameters.AddWithValue("@Password", sha256_hash(reader.ReadString() + passwordSalt));
  283.                                         command.Parameters.AddWithValue("@NewResetKey", Guid.NewGuid());
  284.                                         writer.Write((byte)command.ExecuteNonQuery());
  285.                                     }
  286.                                 }
  287.                             }
  288.                             break;
  289.                         case 6:
  290.                             // Get customization data.
  291.                             int visorWorn = 0;
  292.                             int pledge = 0;
  293.                             int currency = 0;
  294.                             Guid identification = Guid.Empty;
  295.                             authenticated = false;
  296.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  297.                                 connection.Open();
  298.                                 using (SqlCommand command = connection.CreateCommand()) {
  299.                                     command.CommandText = @"select [Username], [Password], [Salt], [Visor], [Pledge], [Id], [Currency]
  300.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [Username] = @Username";
  301.                                     command.Parameters.AddWithValue("@Username", reader.ReadString());
  302.                                     using (SqlDataReader dataReader = command.ExecuteReader()) {
  303.                                         while (dataReader.Read()) {
  304.                                             if ((sha256_hash(reader.ReadString()
  305.                                                 + (dataReader.GetValue(2) as string))
  306.                                                 == (dataReader.GetValue(1) as string))) {
  307.                                                 visorWorn = (int)dataReader.GetValue(3);
  308.                                                 pledge = (int)dataReader.GetValue(4);
  309.                                                 identification = (Guid)dataReader.GetValue(5);
  310.                                                 currency = (int)dataReader.GetValue(6);
  311.                                                 authenticated = true;
  312.                                                 writer.Write(true);
  313.                                             }
  314.                                         }
  315.                                         writer.Write(false);
  316.                                         writer.Flush();
  317.                                     }
  318.                                 }
  319.                             }
  320.                             if (authenticated) {
  321.                                 List<int> visorIndexes = new List<int>();
  322.                                 List<string> visorNames = new List<string>();
  323.                                 List<string> visorDescriptions = new List<string>();
  324.                                 List<int> visorCosts = new List<int>();
  325.                                 List<bool> purchasedVisors = new List<bool>();
  326.                                 using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  327.                                     connection.Open();
  328.                                     using (SqlCommand command = connection.CreateCommand()) {
  329.                                         command.CommandText = @"select [VisorIndex], [Name], [Description],
  330.                                    [Cost], [PledgeCost], [ExclusiveUserID]
  331.                                    from CustomVisors where @Pledge >= [PledgeCost] or @Id = [ExclusiveUserID]";
  332.                                         command.Parameters.AddWithValue("@Pledge", pledge);
  333.                                         command.Parameters.AddWithValue("@Id", identification);
  334.                                         using (SqlDataReader sqlReader = command.ExecuteReader()) {
  335.                                             while (sqlReader.Read()) {
  336.                                                 visorIndexes.Add((int)sqlReader.GetValue(0));
  337.                                                 visorNames.Add(sqlReader.GetValue(1) as string);
  338.                                                 visorDescriptions.Add(sqlReader.GetValue(2) as string);
  339.                                                 visorCosts.Add((int)sqlReader.GetValue(3));
  340.                                                 purchasedVisors.Add(false);
  341.                                             }
  342.                                         }
  343.                                     }
  344.                                 }
  345.                                 using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  346.                                     connection.Open();
  347.                                     using (SqlCommand command = connection.CreateCommand()) {
  348.                                         command.CommandText = @"select [ItemID], [VisorIndex], [Owner] from ProjectNOROwnedVisors where [Owner] = @Id";
  349.                                         command.Parameters.AddWithValue("@Id", identification);
  350.                                         using (SqlDataReader sqlReader = command.ExecuteReader()) {
  351.                                             while (sqlReader.Read()) {
  352.                                                 purchasedVisors[(int)sqlReader.GetValue(1)] = true;
  353.                                             }
  354.                                         }
  355.                                     }
  356.                                 }
  357.                                 writer.Write(visorWorn);
  358.                                 writer.Write(visorIndexes.Count);
  359.                                 for (int i = 0; i < visorIndexes.Count; i++) {
  360.                                     writer.Write(purchasedVisors[i]);
  361.                                     writer.Write(visorCosts[i]);
  362.                                     writer.Write(visorDescriptions[i]);
  363.                                     writer.Write(visorNames[i]);
  364.                                     writer.Write(visorIndexes[i]);
  365.                                 }
  366.                                 writer.Write(currency);
  367.                                 writer.Flush();
  368.                             }
  369.                             break;
  370.                         case 7:
  371.                             // Check if can afford
  372.                             authenticated = false;
  373.                             currency = 0;
  374.                             int itemIndex = 0;
  375.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  376.                                 connection.Open();
  377.                                 using (SqlCommand command = connection.CreateCommand()) {
  378.                                     command.CommandText = @"select [Username], [Password], [Salt], [Currency]
  379.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [Username] = @Username";
  380.                                     command.Parameters.AddWithValue("@Username", reader.ReadString());
  381.                                     using (SqlDataReader dataReader = command.ExecuteReader()) {
  382.                                         while (dataReader.Read()) {
  383.                                             if ((sha256_hash(reader.ReadString()
  384.                                                 + (dataReader.GetValue(2) as string))
  385.                                                 == (dataReader.GetValue(1) as string))) {
  386.                                                 currency = (int)dataReader.GetValue(3);
  387.                                                 itemIndex = reader.ReadInt32();
  388.                                                 authenticated = true;
  389.                                                 writer.Write(true);
  390.                                             }
  391.                                             else {
  392.                                             }
  393.                                         }
  394.                                         writer.Write(false);
  395.                                         writer.Flush();
  396.                                     }
  397.                                 }
  398.                             }
  399.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  400.                                 connection.Open();
  401.                                 using (SqlCommand command = connection.CreateCommand()) {
  402.                                     command.CommandText = @"select [VisorIndex], [Cost] from CustomVisors where @VisorIndex = [VisorIndex]";
  403.                                     command.Parameters.AddWithValue("@VisorIndex", itemIndex);
  404.                                     using (SqlDataReader sqlReader = command.ExecuteReader()) {
  405.                                         while (sqlReader.Read()) {
  406.                                             writer.Write((int)sqlReader.GetValue(1) > currency);
  407.                                         }
  408.                                     }
  409.                                 }
  410.                             }
  411.                             break;
  412.                         case 8:
  413.                             // Check for currency payment.
  414.                             authenticated = false;
  415.                             currency = 0;
  416.                             itemIndex = 0;
  417.                             identification = Guid.Empty;
  418.                             int itemCost = 0;
  419.                             bool canAfford = false;
  420.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  421.                                 connection.Open();
  422.                                 using (SqlCommand command = connection.CreateCommand()) {
  423.                                     command.CommandText = @"select [Username], [Password], [Salt], [Currency], [Id]
  424.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [Username] = @Username";
  425.                                     command.Parameters.AddWithValue("@Username", reader.ReadString());
  426.                                     using (SqlDataReader dataReader = command.ExecuteReader()) {
  427.                                         while (dataReader.Read()) {
  428.                                             if ((sha256_hash(reader.ReadString()
  429.                                                 + (dataReader.GetValue(2) as string))
  430.                                                 == (dataReader.GetValue(1) as string))) {
  431.                                                 currency = (int)dataReader.GetValue(3);
  432.                                                 itemIndex = reader.ReadInt32();
  433.                                                 identification = (Guid)dataReader.GetValue(4);
  434.                                                 authenticated = true;
  435.                                                 writer.Write(true);
  436.                                             }
  437.                                         }
  438.                                         writer.Write(false);
  439.                                         writer.Flush();
  440.                                     }
  441.                                 }
  442.                             }
  443.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  444.                                 connection.Open();
  445.                                 using (SqlCommand command = connection.CreateCommand()) {
  446.                                     command.CommandText = @"select [VisorIndex], [Cost] from CustomVisors where @VisorIndex = [VisorIndex]";
  447.                                     command.Parameters.AddWithValue("@VisorIndex", itemIndex);
  448.                                     using (SqlDataReader sqlReader = command.ExecuteReader()) {
  449.                                         while (sqlReader.Read()) {
  450.                                             itemCost = (int)sqlReader.GetValue(1);
  451.                                             canAfford = itemCost <= currency;
  452.                                         }
  453.                                     }
  454.                                 }
  455.                             }
  456.                             if (canAfford) {
  457.                                 using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  458.                                     connection.Open();
  459.                                     using (SqlCommand command = connection.CreateCommand()) {
  460.                                         command.CommandText = @"insert into [ProjectNOROwnedVisors] values(NEWID(), @VisorIndex, @Owner)";
  461.                                         command.Parameters.AddWithValue("@VisorIndex", itemIndex);
  462.                                         command.Parameters.AddWithValue("@Owner", identification);
  463.                                         command.ExecuteNonQuery();
  464.                                     }
  465.                                 }
  466.                                 using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  467.                                     connection.Open();
  468.                                     using (SqlCommand command = connection.CreateCommand()) {
  469.                                         command.CommandText = @"update [ProjectNORLogin] set [Currency] = [Currency] - @Cost where [Id] = @Id";
  470.                                         command.Parameters.AddWithValue("@Cost", itemCost);
  471.                                         command.Parameters.AddWithValue("@Id", identification);
  472.                                         command.ExecuteNonQuery();
  473.                                     }
  474.                                 }
  475.                             }
  476.                             break;
  477.                         case 9:
  478.                             authenticated = false;
  479.                             identification = Guid.Empty;
  480.                             itemIndex = 0;
  481.                             username = reader.ReadString();
  482.                             bool owned = false;
  483.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  484.                                 connection.Open();
  485.                                 using (SqlCommand command = connection.CreateCommand()) {
  486.                                     command.CommandText = @"select [Username], [Password], [Salt], [Id]
  487.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [Username] = @Username";
  488.                                     command.Parameters.AddWithValue("@Username", username);
  489.                                     using (SqlDataReader dataReader = command.ExecuteReader()) {
  490.                                         while (dataReader.Read()) {
  491.                                             if ((sha256_hash(reader.ReadString()
  492.                                                 + (dataReader.GetValue(2) as string))
  493.                                                 == (dataReader.GetValue(1) as string))) {
  494.                                                 identification = (Guid)dataReader.GetValue(3);
  495.                                                 itemIndex = reader.ReadInt32();
  496.                                                 authenticated = true;
  497.                                                 writer.Write(true);
  498.                                             }
  499.                                             else {
  500.                                             }
  501.                                         }
  502.                                         writer.Write(false);
  503.                                         writer.Flush();
  504.                                     }
  505.                                 }
  506.                             }
  507.                             if (authenticated) {
  508.                                 using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  509.                                     connection.Open();
  510.                                     using (SqlCommand command = connection.CreateCommand()) {
  511.                                         command.CommandText = @"select [VisorIndex]from [ProjectNOROwnedVisors] where @VisorIndex = [VisorIndex]";
  512.                                         command.Parameters.AddWithValue("@VisorIndex", itemIndex);
  513.                                         using (SqlDataReader sqlReader = command.ExecuteReader()) {
  514.                                             while (sqlReader.Read()) {
  515.                                                 owned = true;
  516.                                             }
  517.                                         }
  518.                                     }
  519.                                 }
  520.                                 if (owned) {
  521.                                     using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  522.                                         connection.Open();
  523.                                         using (SqlCommand command = connection.CreateCommand()) {
  524.                                             command.CommandText = @"update [ProjectNORLogin] set [Visor] = @VisorIndex where [Id] = @Id";
  525.                                             command.Parameters.AddWithValue("@VisorIndex", itemIndex);
  526.                                             command.Parameters.AddWithValue("@Id", identification);
  527.                                             command.ExecuteNonQuery();
  528.                                         }
  529.                                     }
  530.                                 }
  531.                             }
  532.                             break;
  533.                         case 10:
  534.                             // Register Match
  535.                             authenticated = false;
  536.                             Guid id = Guid.Empty;
  537.                             username = reader.ReadString();
  538.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  539.                                 connection.Open();
  540.                                 using (SqlCommand command = connection.CreateCommand()) {
  541.                                     command.CommandText = @"select [Username], [Password], [Salt],
  542.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [Username] = @Username";
  543.                                     command.Parameters.AddWithValue("@Username", username);
  544.                                     using (SqlDataReader dataReader = command.ExecuteReader()) {
  545.                                         while (dataReader.Read()) {
  546.                                             if ((sha256_hash(reader.ReadString()
  547.                                                 + (dataReader.GetValue(2) as string))
  548.                                                 == (dataReader.GetValue(1) as string))) {
  549.                                                 id = new Guid(reader.ReadString());
  550.                                                 authenticated = true;
  551.                                                 writer.Write(true);
  552.                                             }
  553.                                             else {
  554.                                             }
  555.                                         }
  556.                                         writer.Write(false);
  557.                                         writer.Flush();
  558.                                     }
  559.                                 }
  560.                             }
  561.                             if (authenticated) {
  562.                                 using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  563.                                     connection.Open();
  564.                                     using (SqlCommand command = connection.CreateCommand()) {
  565.                                         command.CommandText = @"insert into [ProjectNORMatches] values(@MatchId, SYSUTCDATETIME())";
  566.                                         command.Parameters.AddWithValue("@MatchId", id);
  567.                                         command.ExecuteNonQuery();
  568.                                     }
  569.                                 }
  570.                             }
  571.                             break;
  572.                         case 11:
  573.                             // Mark Finished Match
  574.                             authenticated = false;
  575.                             id = Guid.Empty;
  576.                             bool winningTeam = false;
  577.                             username = reader.ReadString();
  578.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  579.                                 connection.Open();
  580.                                 using (SqlCommand command = connection.CreateCommand()) {
  581.                                     command.CommandText = @"select [Username], [Password], [Salt],
  582.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [Username] = @Username";
  583.                                     command.Parameters.AddWithValue("@Username", username);
  584.                                     using (SqlDataReader dataReader = command.ExecuteReader()) {
  585.                                         while (dataReader.Read()) {
  586.                                             if ((sha256_hash(reader.ReadString()
  587.                                                 + (dataReader.GetValue(2) as string))
  588.                                                 == (dataReader.GetValue(1) as string))) {
  589.                                                 id = new Guid(reader.ReadString());
  590.                                                 winningTeam = reader.ReadBoolean();
  591.                                                 authenticated = true;
  592.                                                 writer.Write(true);
  593.                                             }
  594.                                             else {
  595.                                             }
  596.                                         }
  597.                                         writer.Write(false);
  598.                                         writer.Flush();
  599.                                     }
  600.                                 }
  601.                             }
  602.                             if (authenticated) {
  603.                                 using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  604.                                     connection.Open();
  605.                                     using (SqlCommand command = connection.CreateCommand()) {
  606.                                         command.CommandText = @"update [ProjectNORMatches] set [MatchEnd] = SYSUTCDATETIME(), [WinningTeam] = @WinningTeam, [PointsAwarded] = 1";
  607.                                         command.Parameters.AddWithValue("@MatchId", id);
  608.                                         command.Parameters.AddWithValue("@WinningTeam", winningTeam);
  609.                                         command.ExecuteNonQuery();
  610.                                     }
  611.                                 }
  612.                                 using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  613.                                     connection.Open();
  614.                                     using (SqlCommand command = connection.CreateCommand()) {
  615.                                         command.CommandText = @"update login
  616.                                    set login.Currency = login.Currency + 2
  617.                                    from [ProjectNORLogin] login
  618.                                    inner join [ProjectNORMatchParticipants]
  619.                                    participants on login.Id = participants.PlayerId
  620.                                    and participants.MatchId = @MatchId
  621.                                    and participants.Team = @WinningTeam";
  622.                                         command.Parameters.AddWithValue("@MatchId", id);
  623.                                         command.Parameters.AddWithValue("@WinningTeam", winningTeam);
  624.                                         command.ExecuteNonQuery();
  625.                                     }
  626.                                 }
  627.                             }
  628.                             break;
  629.                         case 12:
  630.                             // Register Participant
  631.                             authenticated = false;
  632.                             identification = Guid.Empty;
  633.                             id = Guid.Empty;
  634.                             username = reader.ReadString();
  635.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  636.                                 connection.Open();
  637.                                 using (SqlCommand command = connection.CreateCommand()) {
  638.                                     command.CommandText = @"select [Username], [Password], [Salt],[Id]
  639.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [Username] = @Username";
  640.                                     command.Parameters.AddWithValue("@Username", username);
  641.                                     using (SqlDataReader dataReader = command.ExecuteReader()) {
  642.                                         while (dataReader.Read()) {
  643.                                             if ((sha256_hash(reader.ReadString()
  644.                                                 + (dataReader.GetValue(2) as string))
  645.                                                 == (dataReader.GetValue(1) as string))) {
  646.                                                 identification = (Guid)dataReader.GetValue(3);
  647.                                                 id = new Guid(reader.ReadString());
  648.                                                 authenticated = true;
  649.                                                 writer.Write(true);
  650.                                             }
  651.                                             else {
  652.                                             }
  653.                                         }
  654.                                         writer.Write(false);
  655.                                         writer.Flush();
  656.                                     }
  657.                                 }
  658.                             }
  659.                             if (authenticated) {
  660.                                 using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  661.                                     connection.Open();
  662.                                     using (SqlCommand command = connection.CreateCommand()) {
  663.                                         command.CommandText = @"insert into [ProjectNORMatchParticipants] values(NEWID(), @PlayerId, @MatchId)";
  664.                                         command.Parameters.AddWithValue("@PlayerId", identification);
  665.                                         command.Parameters.AddWithValue("@MatchId", id);
  666.                                         command.ExecuteNonQuery();
  667.                                     }
  668.                                 }
  669.                             }
  670.                             break;
  671.                     }
  672.                 }
  673.                 else {
  674.                     writer.Write("Access Denied.");
  675.                 }
  676.             }
  677.         }
  678.     }
  679.     public static string sha256_hash(string value) {
  680.         StringBuilder Sb = new StringBuilder();
  681.         using (SHA256 hash = SHA256Managed.Create()) {
  682.             Encoding enc = Encoding.UTF8;
  683.             byte[] result = hash.ComputeHash(enc.GetBytes(value));
  684.  
  685.             foreach (byte b in result)
  686.                 Sb.Append(b.ToString("x2"));
  687.         }
  688.  
  689.         return Sb.ToString();
  690.     }
  691. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement