コード例 #1
0
        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));
        }
コード例 #2
0
        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);
        }