package com.geored.servicios.impl; import java.io.BufferedReader; import java.io.InputStreamReader; import java.net.URL; import java.net.URLConnection; import javax.ejb.EJB; import javax.ejb.Local; import javax.ejb.Stateless; import javax.ws.rs.core.Response; import negocios.GestionUsuarios; import persistencia.Usuario; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.geored.servicios.ServicioAutenticacion; import com.geored.servicios.impl.auth.GestionTokens; import com.geored.servicios.impl.gcm.GestionDevices; import com.geored.servicios.json.FacebookUserJSON; @Local @Stateless public class ImplServicioAutenticacion implements ServicioAutenticacion { final private static String FACEBOOK_CHECK_URL = "https://graph.facebook.com/me?access_token="; @EJB GestionUsuarios gestionUsuarios; @EJB GestionTokens gestionTokens; @EJB GestionDevices gestionDevices; @Override public Response login(final String usuario, final String password) { int idUsuario = gestionUsuarios.checkLogin(usuario, password); if (idUsuario >= 0) { return Response.status(Response.Status.OK).entity(gestionTokens.obtenerToken(idUsuario) + ":" + idUsuario).build(); } else { return Response.status(Response.Status.UNAUTHORIZED).build(); } } @Override public Response loginFacebook(String accessToken) { FacebookUserJSON userFacebook; try { URL url = new URL(FACEBOOK_CHECK_URL + accessToken); URLConnection urlConnection = url.openConnection(); BufferedReader rd = new BufferedReader(new InputStreamReader(urlConnection.getInputStream())); StringBuffer sb = new StringBuffer(); String line; while ((line = rd.readLine()) != null) { sb.append(line); } rd.close(); String json = sb.toString(); ObjectMapper mapper = new ObjectMapper(); userFacebook = mapper.readValue(json, new TypeReference<FacebookUserJSON>(){}); } catch (Exception e) { return Response.status(Response.Status.UNAUTHORIZED).build(); } if (userFacebook.isVerified()) { int idUsuario; if ((idUsuario = gestionUsuarios.checkLoginUsuarioFacebook(userFacebook.getUsername())) >= 0) { return Response.status(Response.Status.OK).entity(gestionTokens.obtenerToken(idUsuario) + ":" + idUsuario).build(); } else { Usuario user = new Usuario(); user.setNombre(userFacebook.getUsername()); user.setFacebookUser(true); gestionUsuarios.registrarUsuario(user); idUsuario = gestionUsuarios.checkLogin(userFacebook.getUsername(), userFacebook.getUsername()); return Response.status(Response.Status.OK).entity(gestionTokens.obtenerToken(idUsuario) + ":" + idUsuario).build(); } } else { return Response.status(Response.Status.UNAUTHORIZED).build(); } } @Override public Response logout(final String userToken) { if (gestionTokens.validarToken(userToken)) { gestionDevices.removeDevice(gestionTokens.getIdUsuario(userToken)); gestionTokens.removeToken(userToken); return Response.status(Response.Status.OK).build(); } else { return Response.status(Response.Status.NOT_FOUND).build(); } } }