Advertisement
Guest User

Untitled

a guest
Dec 3rd, 2015
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 19.58 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.                 switch (reader.ReadByte()) {
  23.                     case 0:
  24.                         // Registration
  25.                         string nickname = reader.ReadString();
  26.                         string username = reader.ReadString();
  27.                         string password = reader.ReadString();
  28.                         string email = reader.ReadString();
  29.                         bool usernameExists = false;
  30.                         bool nicknameExists = false;
  31.                         bool emailExists = false;
  32.                         using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  33.                             connection.Open();
  34.                             using (SqlCommand command = connection.CreateCommand()) {
  35.                                 command.CommandText =
  36.                                 @"SELECT [Username], [Nickname], [Email] FROM [SebastianLawe].[dbo].[ProjectNORLogin]
  37.                                WHERE [Username] = @Username OR [Nickname] = @Nickname OR [Email] = @Email";
  38.                                 command.Parameters.Add(new SqlParameter("@Username", username));
  39.                                 command.Parameters.Add(new SqlParameter("@Nickname", nickname));
  40.                                 command.Parameters.Add(new SqlParameter("@Email", email));
  41.                                 using (SqlDataReader sqlReader = command.ExecuteReader()) {
  42.                                     while (sqlReader.Read()) {
  43.                                         if (!usernameExists) {
  44.                                             usernameExists = username == (sqlReader.GetValue(0) as string);
  45.                                             break;
  46.                                         }
  47.                                         if (!emailExists) {
  48.                                             emailExists = username == (sqlReader.GetValue(1) as string);
  49.                                             break;
  50.                                         }
  51.                                         if (!nicknameExists) {
  52.                                             nicknameExists = username == (sqlReader.GetValue(2) as string);
  53.                                             break;
  54.                                         }
  55.                                     }
  56.                                     writer.Write(usernameExists || emailExists || nicknameExists);
  57.                                     if (usernameExists) {
  58.                                         writer.Write("Username Already Exists");
  59.                                     }
  60.                                     else if (emailExists) {
  61.                                         writer.Write("Email Already Exists");
  62.                                     }
  63.                                     else if (nicknameExists) {
  64.                                         writer.Write("Nickname Already Exists");
  65.                                     }
  66.                                     writer.Flush();
  67.                                 }
  68.                             }
  69.                             connection.Close();
  70.                         }
  71.                         if (!usernameExists && !nicknameExists && !emailExists) {
  72.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  73.                                 connection.Open();
  74.                                 using (SqlCommand command = connection.CreateCommand()) {
  75.                                     Guid salt = Guid.NewGuid();
  76.                                     Guid verificationKey = Guid.NewGuid();
  77.                                     command.CommandText =
  78.                                     @"insert into [SebastianLawe].[dbo].[ProjectNORLogin]
  79.                                values (NEWID(), @Nickname, @Username, @Password, @Salt, @Email,
  80.                                 SYSUTCDATETIME(), SYSUTCDATETIME(), 0, @SecurityQuestion, @SecurityAnswer, @Verification,                                      @PasswordResetKey)";
  81.                                     command.Parameters.Add(new SqlParameter("@Nickname", nickname));
  82.                                     command.Parameters.Add(new SqlParameter("@Username", username));
  83.                                     command.Parameters.Add(new SqlParameter("@Password", sha256_hash(password + salt.ToString())));
  84.                                     command.Parameters.Add(new SqlParameter("@Salt", salt.ToString()));
  85.                                     command.Parameters.Add(new SqlParameter("@Email", email));
  86.                                     command.Parameters.Add(new SqlParameter("@SecurityQuestion", reader.ReadString()));
  87.                                     command.Parameters.Add(new SqlParameter("@SecurityAnswer", reader.ReadString()));
  88.                                     command.Parameters.Add(new SqlParameter("@Verification", verificationKey));
  89.                                     command.Parameters.Add(new SqlParameter("@PasswordResetKey", Guid.Empty));
  90.                                     try {
  91.                                         command.ExecuteNonQuery();
  92.                                         writer.Write("");
  93.                                         MailMessage mail = new MailMessage("no-reply@projectnor.com", email);
  94.                                         SmtpClient client = new SmtpClient();
  95.                                         NetworkCredential cred = new NetworkCredential("no-reply@thavea.com", "1am1lwkr");
  96.                                         client.EnableSsl = true;
  97.                                         client.Port = 587;
  98.                                         client.DeliveryMethod = SmtpDeliveryMethod.Network;
  99.                                         client.UseDefaultCredentials = false;
  100.                                         client.Host = "smtp.gmail.com";
  101.                                         client.Credentials = cred;
  102.                                         mail.Subject = "Project NOR Verification";
  103.                                         mail.Body = "Thank you for registering to Project NOR!\r\n"
  104.                                             + "Before you can start playing, you will need enter the following activation key within the game.\r\n\r\n"
  105.                                             + verificationKey.ToString()
  106.                                             + "\r\n\r\nThis message is auto generated, any messages received will not get a response.";
  107.                                         client.Send(mail);
  108.                                     }
  109.                                     catch {
  110.                                         writer.Write("Server Error");
  111.                                     }
  112.                                 }
  113.                             }
  114.                         }
  115.                         break;
  116.                     case 1:
  117.                         // Authenticate
  118.                         using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  119.                             connection.Open();
  120.                             using (SqlCommand command = connection.CreateCommand()) {
  121.                                 command.CommandText = @"select [Username], [Password], [Salt], [Nickname], [Paid]
  122.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [Username] = @Username";
  123.                                 command.Parameters.AddWithValue("@Username", reader.ReadString());
  124.                                 using (SqlDataReader dataReader = command.ExecuteReader()) {
  125.                                     while (dataReader.Read()) {
  126.                                         if ((sha256_hash(reader.ReadString()
  127.                                             + (dataReader.GetValue(2) as string))
  128.                                             == (dataReader.GetValue(1) as string))) {
  129.                                             writer.Write(true);
  130.                                             writer.Write(dataReader.GetValue(3) as string);
  131.                                             writer.Write((bool)dataReader.GetValue(4));
  132.                                         }
  133.                                         else {
  134.                                         }
  135.                                     }
  136.                                     writer.Write(false);
  137.                                     writer.Flush();
  138.                                 }
  139.                             }
  140.                         }
  141.                         break;
  142.                     case 2:
  143.                         // Verify Key
  144.                         bool authenticated = false;
  145.                         username = reader.ReadString();
  146.                         password = reader.ReadString();
  147.                         string verification = reader.ReadString();
  148.                         using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  149.                             connection.Open();
  150.                             using (SqlCommand command = connection.CreateCommand()) {
  151.                                 command.CommandText = @"select [Username], [Password], [Salt], [Paid], [Verification]
  152.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [Username] = @Username and [Verification] = @Verification";
  153.                                 command.Parameters.Add(new SqlParameter("@Username", username));
  154.                                 command.Parameters.Add(new SqlParameter("@Verification", Guid.Parse(verification.Replace("-", null))));
  155.                                 using (SqlDataReader dataReader = command.ExecuteReader()) {
  156.                                     while (dataReader.Read()) {
  157.                                         if ((sha256_hash(password
  158.                                             + (dataReader.GetValue(2) as string))
  159.                                             == (dataReader.GetValue(1) as string))
  160.                                             && ((Guid)dataReader.GetValue(4))
  161.                                             == Guid.Parse(verification)) {
  162.                                             authenticated = true;
  163.                                             break;
  164.                                         }
  165.                                     }
  166.                                 }
  167.                             }
  168.                         }
  169.                         if (authenticated) {
  170.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  171.                                 connection.Open();
  172.                                 using (SqlCommand command = connection.CreateCommand()) {
  173.                                     command.CommandText = @"update [ProjectNORLogin] set [Paid] = 1 where [Verification] = @Verification";
  174.                                     command.Parameters.AddWithValue("@Username", username);
  175.                                     command.Parameters.AddWithValue("@Verification", verification);
  176.                                     writer.Write((byte)command.ExecuteNonQuery());
  177.                                 }
  178.                             }
  179.                         }
  180.                         else {
  181.                             writer.Write((byte)2);
  182.                         }
  183.                         break;
  184.                     case 3:
  185.                         // Get Security Question
  186.                         email = reader.ReadString();
  187.                         using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  188.                             connection.Open();
  189.                             using (SqlCommand command = connection.CreateCommand()) {
  190.                                 command.CommandText = @"select [Email], [SecurityQuestion]
  191.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [Email] = @Email";
  192.                                 command.Parameters.Add(new SqlParameter("@Email", email));
  193.                                 using (SqlDataReader dataReader = command.ExecuteReader()) {
  194.                                     while (dataReader.Read()) {
  195.                                         writer.Write(dataReader.GetValue(1) as string);
  196.                                     }
  197.                                 }
  198.                                 writer.Write("This name does not exist.");
  199.                             }
  200.                         }
  201.                         break;
  202.                     case 4:
  203.                         // Check security answer.
  204.                         email = reader.ReadString();
  205.                         bool securityQuestionAnswered = false;
  206.                         using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  207.                             connection.Open();
  208.                             using (SqlCommand command = connection.CreateCommand()) {
  209.                                 command.CommandText = @"select [SecurityAnswer], [Email]
  210.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [Email] = @Email and [SecurityAnswer] = @SecurityAnswer";
  211.                                 command.Parameters.Add(new SqlParameter("@Email", email));
  212.                                 command.Parameters.Add(new SqlParameter("@SecurityAnswer", reader.ReadString()));
  213.                                 using (SqlDataReader dataReader = command.ExecuteReader()) {
  214.                                     while (dataReader.Read()) {
  215.                                         writer.Write(true);
  216.                                         securityQuestionAnswered = true;
  217.                                         break;
  218.                                     }
  219.                                 }
  220.                                 writer.Write(false);
  221.                                 writer.Flush();
  222.                             }
  223.                         }
  224.                         if (securityQuestionAnswered) {
  225.                             Guid passwordResetKey = Guid.NewGuid();
  226.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  227.                                 connection.Open();
  228.                                 using (SqlCommand command = connection.CreateCommand()) {
  229.                                     command.CommandText = @"update [ProjectNORLogin] set [PasswordResetKey] = @NewKey where [Email] = @Email";
  230.                                     command.Parameters.Add(new SqlParameter("@Email", email));
  231.                                     command.Parameters.Add(new SqlParameter("@NewKey", passwordResetKey));
  232.                                     command.ExecuteNonQuery();
  233.                                     MailMessage mail = new MailMessage("no-reply@projectnor.com", email);
  234.                                     SmtpClient client = new SmtpClient();
  235.                                     NetworkCredential cred = new NetworkCredential("no-reply@thavea.com", "1am1lwkr");
  236.                                     client.EnableSsl = true;
  237.                                     client.Port = 587;
  238.                                     client.DeliveryMethod = SmtpDeliveryMethod.Network;
  239.                                     client.UseDefaultCredentials = false;
  240.                                     client.Host = "smtp.gmail.com";
  241.                                     client.Credentials = cred;
  242.                                     mail.Subject = "Project NOR Password Reset";
  243.                                     mail.Body = "Forgot your password? No worries.\r\n"
  244.                                         + "To reset your password, copy and paste the following code into the games password reset menu.\r\n\r\n"
  245.                                         + passwordResetKey.ToString()
  246.                                         + "\r\n\r\nThis message is auto generated, any messages received will not get a response.";
  247.                                     client.Send(mail);
  248.                                 }
  249.                             }
  250.                         }
  251.                         break;
  252.                     case 5:
  253.                         // Reset Password
  254.                         Guid passwordKey = Guid.Parse(reader.ReadString());
  255.                         bool properResetKeyEntered = false;
  256.                         using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  257.                             connection.Open();
  258.                             using (SqlCommand command = connection.CreateCommand()) {
  259.                                 command.CommandText = @"select [PasswordResetKey]
  260.                                from [SebastianLawe].[dbo].[ProjectNORLogin] where [PasswordResetKey] = @PasswordResetKey";
  261.                                 command.Parameters.Add(new SqlParameter("@PasswordResetKey", passwordKey));
  262.                                 using (SqlDataReader dataReader = command.ExecuteReader()) {
  263.                                     while (dataReader.Read()) {
  264.                                         writer.Write(true);
  265.                                         properResetKeyEntered = true;
  266.                                         break;
  267.                                     }
  268.                                 }
  269.                                 writer.Write(false);
  270.                             }
  271.                         }
  272.                         if (properResetKeyEntered) {
  273.                             using (SqlConnection connection = new SqlConnection(builder.ConnectionString)) {
  274.                                 connection.Open();
  275.                                 using (SqlCommand command = connection.CreateCommand()) {
  276.                                     command.CommandText = @"update [ProjectNORLogin] set [Password] = @Password, [PasswordResetKey] = @NewResetKey
  277.                                                            where [PasswordResetKey] = @PasswordResetKey";
  278.                                     command.Parameters.AddWithValue("@PasswordResetKey", passwordKey);
  279.                                     command.Parameters.AddWithValue("@Password", reader.ReadString());
  280.                                     command.Parameters.AddWithValue("@NewResetKey", Guid.NewGuid());
  281.                                     writer.Write((byte)command.ExecuteNonQuery());
  282.                                 }
  283.                             }
  284.                         }
  285.                         break;
  286.                 }
  287.             }
  288.         }
  289.     }
  290.     public static string sha256_hash(string value) {
  291.         StringBuilder Sb = new StringBuilder();
  292.  
  293.         using (SHA256 hash = SHA256Managed.Create()) {
  294.             Encoding enc = Encoding.UTF8;
  295.             byte[] result = hash.ComputeHash(enc.GetBytes(value));
  296.  
  297.             foreach (byte b in result)
  298.                 Sb.Append(b.ToString("x2"));
  299.         }
  300.  
  301.         return Sb.ToString();
  302.     }
  303. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement