public RespuestaSimple Inicializar(string dispositivoId) { // Obtengo el usuario de la sesión var usuarioId = Startup.Usuario.UsuarioId; // Inserto o actualizo el dispositivo asociado new Services.Usuarios_Disp(db).Insertar(usuarioId, dispositivoId); // Retorno los estados disponibles var estados = new Services.Estados(db).Elegibles("VIA"); return(new RespuestaSimple(estados)); }
public async Task <ActionResult <RespuestaSimple> > Registrar( string token, string tokenDispositivo, string type) { var res = new RespuestaSimple(); string id = "", name = "", email = "", photo = ""; // Inicializo los objetos para hacer el Request var client = new HttpClient(); HttpResponseMessage response = null; // Si es interfaz WEB if (type.IndexOf("web") > 0) { var request = new HttpRequestMessage(); request.Method = HttpMethod.Get; // Para FACEBOOK web if (type == "facebook-web") { // Envío el token en el query string request.RequestUri = new Uri("https://graph.facebook.com/me?fields=id,name,email&access_token=" + token); } // Para GOOGLE web if (type == "google-web") { // Envío el token en el Header (OAUTH 2.0) request.RequestUri = new Uri("https://www.googleapis.com/oauth2/v3/userinfo"); request.Headers.Add("Authorization", "Bearer " + token); } // Envía el Request al proveedor respectivo response = await client.SendAsync(request); } // Google con Firebase if (type == "google") { // Envía el Request al proveedor respectivo response = await client.PostAsJsonAsync( "https://identitytoolkit.googleapis.com/v1/accounts:lookup?key=" + Startup.Firebase.WebAPIKey, new { idToken = token } ); } // Google API (OAuth2) if (type == "google-oauth2") { var request = new HttpRequestMessage(); request.Method = HttpMethod.Get; request.RequestUri = new Uri("https://oauth2.googleapis.com/tokeninfo?id_token=" + token); // Envía el Request al proveedor respectivo response = await client.SendAsync(request); } // Si el token es válido if (response.IsSuccessStatusCode) { // Si es interfaz WEB if (type.IndexOf("web") > 0) { // Obtengo los datos del usuario dynamic data = JsonConvert.DeserializeObject( response.Content.ReadAsStringAsync().Result ); id = data.id; name = data.name; email = data.email; // Si es FACEBOOK web if (type == "facebook-web") { // Armo la URL para obtener la foto photo = "https://graph.facebook.com/" + id + "/picture?type=large"; } else { // Si es GOOGLE // La foto viene en el JSON directamente photo = data.picture; } } // Google con Firebase if (type == "google") { // Obtengo los datos del usuario FIREBASE AuthResponse data = JsonConvert.DeserializeObject <AuthResponse>( response.Content.ReadAsStringAsync().Result ); id = data.users[0].localId; name = data.users[0].displayName; email = data.users[0].email; photo = data.users[0].photoUrl; } // Google API (OAuth2) if (type == "google-oauth2") { // Obtengo los datos del usuario dynamic data = JsonConvert.DeserializeObject( response.Content.ReadAsStringAsync().Result ); name = data.name; email = data.email; photo = data.picture; } } else { // Si el token no es válido, retorno error res.Codigo = 500; res.Texto = "No se pudo iniciar sesión en " + type; } // Si se pudo iniciar sesión if (res.Codigo == 200) { // Aquí abro otra conexión a la base de datos por el ASYNC using (db = new VolquexDB()) { // Verifico si el usuario ya existe por el email var q = from p in db.Usuarios where p.UsuEmail == email orderby p.UsuEmail select p; var usuario = q.FirstOrDefault(); // Si no existe, inserto uno nuevo if (usuario == null) { usuario = Insertar(new Models.Usuarios { UsuNom = name, UsuEmail = email, UsuCel = "", UsuTipo = "CLI", UsuEst = "ACT", UsuFoto = photo, UsuTipoFoto = "R" }); } // Inserto la sesión new Services.Sesiones(db).Insertar(new Models.Sesiones { SesionId = token, SesionExpira = DateTime.Now.AddDays(30), UsuarioId = usuario.UsuarioId, SesionTipo = type }); // Inserto el dispositivo new Services.Usuarios_Disp(db).Insertar(usuario.UsuarioId, tokenDispositivo); // Retorno los estados disponibles var estados = new Services.Estados(db).Elegibles("VIA"); // Establezco los 3 objetos a retornar res.Contenido = new { Usuario = usuario, Estados = estados, token = token }; } } client.Dispose(); return(res); }