Advertisement
onzulin

objetos para registrar usuarios

Oct 13th, 2014
363
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 15.52 KB | None | 0 0
  1. #varios codigos del programa con distintos objetos pero los coloco aqui todos juntos
  2. # la idea es llamar es poder de momento registrar usuarios y llamar al metodo de CryptoPassHttp.registeruser que por cierto lo  # # tengo que desarrollar
  3. #este fichero es el register.xaml.cs
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Linq;
  7. using System.Net;
  8. using System.Windows;
  9. using System.Windows.Controls;
  10. using System.Windows.Navigation;
  11. using Microsoft.Phone.Controls;
  12. using Microsoft.Phone.Shell;
  13. using PlanningActivitiesWP8.Entidades;
  14. using System.Text.RegularExpressions;
  15. using System.Security.Cryptography;
  16. using System.Threading.Tasks;
  17. using Windows.Web.Http;
  18. using Windows.Data.Json;
  19.  
  20. namespace PlanningActivitiesWP8
  21. {
  22.     public partial class Register : PhoneApplicationPage
  23.     {
  24.  
  25.        
  26.        
  27.         //comporobar si un mail es valido o no en formato
  28.         public Register()
  29.         {
  30.             InitializeComponent();
  31.         }
  32.  
  33.         private async void ButtonRegister_Click(object sender, RoutedEventArgs e)
  34.         {
  35.             bool isValid = false;
  36.            
  37.             //comprobacion de si la clave tiene un minimo de 3 caracteres comn un if
  38.             if (PasswordBoxPass.Password.Length >= 3)
  39.             {
  40.                 //aqui se hace otra comprobacion con otro if para ver si los password coinciden
  41.                 if (PasswordBoxPass.Password == PasswordBoxConfirmation.Password)
  42.                 {
  43.                
  44.                     //comprobnar que el texto puesto en la textbox es un correo electronico y si no lo es no dejar seguir el proceso de registro y dar un error con un mensaje
  45.  
  46.                     //aqui lo que hago una vez ya conectado con Windowsazure es introducir datos una vez que el usuario le al boton register
  47.                     string password = PasswordBoxPass.Password;
  48.  
  49.                     RegexUtil RegexUtil = new RegexUtil();
  50.                     //el metodo isValidEmail me devolvera false o true dependiendo de si la cadena la toma como buena o mala si tiene o no formato de email
  51.                     isValid = RegexUtil.IsValidEmail(TextBoxEmail.Text);
  52.                     if (isValid == true)
  53.                     {
  54.                         //para introducir el dato del usuario en el servicio movil
  55.                         try
  56.                         {
  57.                             //aqui probaremos tambien a cifrar la clave
  58.                             //lo que haremos sera el metodo parse para transformar la string en Byte
  59.                             //byte password = byte.Parse(PasswordBoxPass.Password);ç
  60.                             /* este codigo no me sirve para generar el hash de la clave que es lo que vamos a almacenar junto con el codigo salt
  61.                             byte[] password = new byte[PasswordBoxPass.Password.Length];
  62.                             for (int i = 0; i < PasswordBoxPass.Password.Length; i++)//haz un ciclo para llenar el arreglo
  63.                             {
  64.                                 password[i] = byte.Parse(PasswordBoxPass.Password[i].ToString());//conversion!!! la variable i representa la posicion en k se encuentra
  65.                             }
  66.                             */
  67.                             byte[] salt = CryptoPassHttp.GetSalt();
  68.                             byte[] hash = CryptoPassHttp.GenerateHash(PasswordBoxPass.Password, salt);
  69.                             //en este metodo lo que estoy obteniendo es el usuario para insertarlo en la base de datos
  70.  
  71.                             usuarios user = CryptoPassHttp.GetSecureUserModel(TextBoxName.Text, password, TextBoxEmail.Text, salt);
  72.                             //realizar el salvado de datos del usuario a registrar con los datos que tenemos
  73.  
  74.  
  75.                             //await userTable.InsertAsync(user);
  76.                             //sincronizar los elementos de la tabla
  77.                             //este elemento es el que falla
  78.                             //items = await userTable.ToCollectionAsync();
  79.                             //user.Id = items.Count + 1;
  80.                             //para actualizar la tabla
  81.                             //await userTable.UpdateAsync(user);
  82.                             JsonObject jsonObject = new JsonObject();
  83.                             //vamos a ver la forma de trabajar con texto con json segun el ejemplo de Microsoft y adaprlo a mi codigo segun lo que tenga que enviar
  84.                             jsonObject["nombre"] = JsonValue.CreateStringValue(TextBoxName.Text);
  85.                             jsonObject["email"] = JsonValue.CreateStringValue(TextBoxEmail.Text);
  86.                             jsonObject["hash"] = JsonValue.CreateStringValue(user.hash);
  87.                             jsonObject["salt"] = JsonValue.CreateStringValue(user.salt);
  88.                             string jsonString = jsonObject.Stringify();
  89.                             HttpResponseMessage response = new HttpResponseMessage();
  90.                             Uri uri = new Uri("http://192.168.1.2/laravelplan/public/api/rest/users");
  91.                             HttpClient httpClient = new HttpClient();
  92.                             // aqui haremos la comprobacion de si esta o no el servicio disponible en el caso de que no este disponible dar un mensaje
  93.                            
  94.                             try
  95.                             {
  96.                                 response = await httpClient.GetAsync(uri).GetResults();
  97.                             }
  98.                             //var resultado = JsonConvert.DeserializeObject(response.Content.ReadAsStringAsync());
  99.                             //Resultado contiene el Json ;)
  100.                            
  101.                             catch (Exception ex)
  102.                             {
  103.                                 MessageBox.Show(ex.Message, "Error", MessageBoxButton.OK);
  104.                             }
  105.                            
  106.                             /*
  107.                             Task<bool> Resultado = CryptoPassHttp.GetUserFromDatabase(TextBoxEmail.Text, jsonObject);
  108.                             if (Resultado.Result)
  109.                             {
  110.                                
  111.                             }
  112.                             else
  113.                             {
  114.  
  115.                             }
  116.                             */
  117.                             Task<bool> users = CryptoPassHttp.RegisterUser(user, jsonString);
  118.                              //aqui ya se va al otro XAML en la finalizacion del programa se ira al de aceptarlos terminos y condiciones del programa
  119.                             /*
  120.                             Task<usuarios> userpass = CryptoPassHttp.VerifyLogin(user.email, password);
  121.                             //
  122.                             if (users.Result == false)
  123.                             {
  124.                                 MessageBox.Show("user exist in the database, choose other user", "Information", MessageBoxButton.OK);
  125.                             }
  126.                             else if (userpass == null)
  127.                             {
  128.                                 MessageBox.Show("Password incorrect", "Information", MessageBoxButton.OK);
  129.                             }
  130.                             */
  131.                             //aqui ya te lleva a la ventana para trabajar con el programa
  132.                             NavigationService.Navigate(new Uri("/PivotProgram.xaml" + TextBoxEmail.Text, UriKind.Relative));
  133.  
  134.                            
  135.                            
  136.                            
  137.  
  138.                             //usuarios usuario = new usuarios { usuario = TextBoxUser.Text, hash = PasswordBoxPass.Password, email = TextBoxEmail.Text };
  139.                             //App.MobileService.GetTable<usuarios>().InsertAsync(usuario);
  140.  
  141.                         }
  142.                         catch (Exception ex)
  143.                         {
  144.                             MessageBox.Show(ex.Message);
  145.                         }
  146.  
  147.                     }
  148.                     else
  149.                     {
  150.                         MessageBox.Show("the format e-mail is not correct", "Information", MessageBoxButton.OK);
  151.                     }
  152.                 }
  153.                 else
  154.                 {
  155.                     MessageBox.Show("password fail must be equal", "Information", MessageBoxButton.OK);
  156.                     PasswordBoxPass.SelectAll();
  157.                     PasswordBoxConfirmation.Password = "";
  158.                     PasswordBoxPass.Focus();
  159.                    
  160.                 }
  161.             }
  162.             //comprobar primero que sean la misma clave en las 2 passwordbox
  163.            
  164.         }
  165.     }
  166. }
  167. /*
  168.  *
  169.  *  aqui coloco el fichero con el que estoy trabajando otro objeto que hace otras cosas llamado CryptoPassHttp.cs
  170.  *
  171. /*
  172. using System;
  173. using System.Windows;
  174. using System.Collections.Generic;
  175. using System.Linq;
  176. using System.Text;
  177. using System.Threading.Tasks;
  178. using System.Security.Cryptography;
  179. using PlanningActivitiesWP8.Entidades;
  180. using Microsoft.WindowsAzure.MobileServices;
  181. using Windows.Web.Http;
  182. using Windows.Data.Json;
  183. using Windows.Web.Http.Filters;
  184. using Newtonsoft.Json;
  185.  
  186. namespace PlanningActivitiesWP8
  187. {
  188.     public class CryptoPassHttp
  189.     {
  190.         #region propiedades o autopropiedades
  191.        
  192.         #endregion
  193.  
  194.         #region constructor
  195.         public CryptoPassHttp()
  196.         {
  197.         }
  198.         #endregion
  199.         #region metodos para cifrar datos
  200.         /* GenerateHash es para generar el hash de la clave y necesito el codigo salt
  201.          */
  202.        
  203.         public static byte[] GenerateHash(string password, byte[] salt)
  204.         {
  205.             byte[] passwordData = Encoding.UTF8.GetBytes(password);
  206.  
  207.             byte[] composite = new byte[passwordData.Length + 32];
  208.  
  209.             Array.Copy(passwordData, composite, passwordData.Length);
  210.             Array.Copy(salt, 0, composite, passwordData.Length, salt.Length);
  211.  
  212.             SHA256 hashFunction = new SHA256Managed();
  213.             byte[] hash = hashFunction.ComputeHash(composite);
  214.  
  215.             return hash;
  216.         }
  217.        
  218.         // obtener salt como dice el nombre del metodo que es lo primero que hay que hacer
  219.        
  220.         public static byte[] GetSalt()
  221.         {
  222.             byte[] rngContainer = new byte[32];
  223.             RNGCryptoServiceProvider rngProvider = new RNGCryptoServiceProvider();
  224.             rngProvider.GetBytes(rngContainer);
  225.  
  226.             return rngContainer;
  227.         }
  228.  
  229.         public static byte[] GetSaltFromString(string source)
  230.         {
  231.             string[] raw = source.Split('-');
  232.             byte[] result = new byte[raw.Length];
  233.             for (int i = 0; i < raw.Length; i++)
  234.             {
  235.                 result[i] = Convert.ToByte(raw[i], 16);
  236.             }
  237.             return result;
  238.         }
  239.         #endregion
  240.         /* aqui tengo que hacer modificacions en el codigo del metodo para que funcione como es debido
  241.          */
  242.         //aqui definimos el user que vamos a añadir luego con el comando RegisterUser
  243.         public static usuarios GetSecureUserModel(string name, string password, string email = "", byte[] customSalt = null)
  244.         {
  245.             byte[] hash;
  246.  
  247.             usuarios user = new usuarios();
  248.             user.nombre = name;
  249.             user.email = email;
  250.  
  251.             if (customSalt == null)
  252.             {
  253.                 byte[] salt = GetSalt();
  254.                 user.salt = BitConverter.ToString(salt);
  255.  
  256.                 hash = GenerateHash(password, salt);
  257.  
  258.             }
  259.             else
  260.             {
  261.                 hash = GenerateHash(password, customSalt);
  262.             }
  263.  
  264.             user.hash = BitConverter.ToString(hash);
  265.             user.salt = BitConverter.ToString(customSalt);
  266.             return user;
  267.         }
  268.        
  269.         public async static Task<bool> RegisterUser(usuarios user, string jsonString)
  270.         {
  271.             /*
  272.             aqui tendremos que crear el objeto httpclient y mandarle por post el objeto json
  273.             */
  274.              // Add a user-agent header
  275.             //encapsular en un formato de texto valido el jsonObject
  276.            
  277.            
  278.            
  279.             //HttpResponseMessage httpResponseMessage = new HttpResponseMessage();
  280.      
  281.             //var headers = httpClient.DefaultRequestHeaders;
  282.             //headers.UserAgent.ParseAdd("ie");
  283.             //headers.UserAgent.ParseAdd("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
  284.             //comprobaamos que la conexion existe y que el servidor funciona basicamente usamos esa direccion para ver si nos responde algo
  285.             //var headers = httpClient.DefaultRequestHeaders;
  286.             //headers.UserAgent.ParseAdd("ie");
  287.             //headers.UserAgent.ParseAdd("Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
  288.             //comprobacion a ver si funciona el servicio REST
  289.            
  290.             //httpResponseMessage = await httpClient.GetAsync(uri);
  291.  
  292.             //client.DefaultRequestHeaders.Authorization = new HttpCredentialsHeaderValue("Basic", token);
  293.  
  294.             //var data = await client.GetAsync(new Uri("https://mytestdomain/v2/apikey?format=Json"));
  295.            
  296.             /*
  297.             if (httpResponseMessage.IsSuccessStatusCode)
  298.             {
  299.                 //aqui ya mando el jsonString al servicio REST
  300.                 Uri uristore = new Uri("http://192.168.1.2/laravelplan/public/api/rest/users/store");
  301.                 HttpStringContent httpStringContent = new HttpStringContent(jsonString);
  302.                 try
  303.                 {
  304.                     httpResponseMessage = await httpClient.PostAsync(uri, httpStringContent);
  305.                 }
  306.                 catch (Exception ex)
  307.                 {
  308.                     MessageBox.Show(ex.Message);
  309.                 }
  310.                  
  311.             }
  312.             else
  313.             {
  314.                 return false;
  315.             }
  316.             */
  317.            
  318.            
  319.            
  320.            
  321.             //creamoms el jaon object
  322.             return true;
  323.         }
  324.         //obten4er usuario de la base de datos
  325.         /*
  326.         public static async Task<bool> GetUserFromDatabase(string email, JsonObject jsonObject)
  327.         {
  328.             //mandaremos un objeto json al servidor REST para recuperar un usuario si se recupera es que existe y habra que decirselo al usuario si no existe se sigue con el
  329.             //proceso de registro de usuario
  330.             Uri uri = new Uri("http://192.168.1.2/laravelplan/public/api/rest/users/");
  331.             string jsonString = jsonObject.Stringify();
  332.             HttpClient httpClient = new HttpClient();
  333.             HttpResponseMessage httpResponseMessage = new HttpResponseMessage();
  334.             //httpResponseMessage = httpClient.GetStringAsync(uri);
  335.             /*
  336.             try
  337.             {
  338.                 //httpResponseMessage = await httpClient.PostAsync()
  339.             }
  340.             catch (Exception ex)
  341.             {
  342.  
  343.             }
  344.            
  345.             return true;
  346.         }
  347.         */
  348.         public async static Task<usuarios> VerifyLogin(string username, string password)
  349.         {
  350.            
  351.             /*
  352.             if (dbUser != null)
  353.             {
  354.                 usuarios localUser = GetSecureUserModel(username, password, "",
  355.                     GetSaltFromString(dbUser.salt));
  356.                 if (dbUser.hash == localUser.hash)
  357.                     return dbUser;
  358.             }
  359.             */
  360.             return null;
  361.         }
  362.        
  363.  
  364.        
  365.  
  366.        
  367.     }
  368. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement