diff --git a/Servidor JEE/WebContent/WEB-INF/config.json b/Servidor JEE/WebContent/WEB-INF/config.json deleted file mode 100644 index 18488faeeeaedaea7d791048d1543c72b06fc9e3..0000000000000000000000000000000000000000 --- a/Servidor JEE/WebContent/WEB-INF/config.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "endpoint":"https://tics.moodlecloud.com", - "group":"Piloto" -} \ No newline at end of file diff --git a/Servidor JEE/WebContent/WEB-INF/matefun.properties b/Servidor JEE/WebContent/WEB-INF/matefun.properties new file mode 100644 index 0000000000000000000000000000000000000000..038644a932337ba99453135cb89f810a1577e78b --- /dev/null +++ b/Servidor JEE/WebContent/WEB-INF/matefun.properties @@ -0,0 +1,7 @@ +#Deben definirse moodle_endpoint y moodle_group para conectar con el API de moodle. +#De lo contrario solo se realizara login local. +moodle_endpoint=https://tics.moodlecloud.com +moodle_group=Piloto +#El grupo se define como liceoId#grado#grupo#anio +#Si no se sefine default_group entonces no se asigna grupo para docente o alumno. +default_group=0#2#Año#2017 diff --git a/Servidor JEE/pom.xml b/Servidor JEE/pom.xml index 8951a053263e3b065e4e4274223103df2747a105..bd6f0ed40eb0ccc728816bad2c441b1cf234ff03 100644 --- a/Servidor JEE/pom.xml +++ b/Servidor JEE/pom.xml @@ -20,12 +20,6 @@ <version>3.0.1</version> <scope>provided</scope> </dependency> - <!-- <dependency> --> - <!-- <groupId>org.hibernate</groupId> --> - <!-- <artifactId>hibernate-core</artifactId> --> - <!-- <version>5.1.0.Final</version> --> - <!-- <scope>provided</scope> --> - <!-- </dependency> --> <dependency> <groupId>com.sun.jersey</groupId> <artifactId>jersey-server</artifactId> @@ -52,13 +46,7 @@ <artifactId>jackson-annotations</artifactId> <version>2.9.0</version> </dependency> - <!-- https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple --> - <dependency> - <groupId>com.googlecode.json-simple</groupId> - <artifactId>json-simple</artifactId> - <version>1.1.1</version> - </dependency> - + </dependencies> <build> diff --git a/Servidor JEE/src/main/java/edu/proygrado/ejb/CommandsBean.java b/Servidor JEE/src/main/java/edu/proygrado/ejb/CommandsBean.java index ec591722d7de21908801e52b554ee02236ae88e6..b9d2c7c1faf1eb4e7da47b91957d19e7c34cbc23 100644 --- a/Servidor JEE/src/main/java/edu/proygrado/ejb/CommandsBean.java +++ b/Servidor JEE/src/main/java/edu/proygrado/ejb/CommandsBean.java @@ -57,7 +57,6 @@ public class CommandsBean { private String nombrePrompt = ""; public CommandsBean() { - // System.out.println("Creo " + this.hashCode()); builder = null; } @@ -155,7 +154,7 @@ public class CommandsBean { } } catch (Exception e) { - System.out.println(e); + e.printStackTrace(); } } @@ -279,8 +278,8 @@ public class CommandsBean { ArrayList<String> animacion = new ArrayList<>(); while (s.hasNextLine()) { String result = s.nextLine(); - // System.out.println(result); - // System.out.println("&&&/////"); + //System.out.println(result); + //System.out.println("&&&/////"); if (nombrePrompt != "" && result.contains(nombrePrompt + ">")) { if (nombrePrompt.length() > 10) { nombrePrompt = nombrePrompt.substring(0, 7) + "..."; @@ -290,15 +289,6 @@ public class CommandsBean { callback.getBasicRemote().sendText(respuestaJson.toString()); nombrePrompt = ""; } - // File salidaHtml = new File("salida.html"); - // if (salidaHtml.exists()) { - // Scanner salidaScaner = new Scanner(salidaHtml); - // String content = - // salidaScaner.useDelimiter("\\Z").next(); - // result = content; - // salidaScaner.close(); - // salidaHtml.delete(); - // } JsonObject respuestaJson = null; if (result.contains("CANVAS:")) { int index = result.indexOf("CANVAS:"); @@ -344,6 +334,7 @@ public class CommandsBean { } catch (Exception ex) { System.err.println(ex.getMessage()); // Thread.sleep(500); + //Se reeintenta por bug de WebSphere. No sucede con wildfly. reintentos++; } } diff --git a/Servidor JEE/src/main/java/edu/proygrado/ejb/LoginEJB.java b/Servidor JEE/src/main/java/edu/proygrado/ejb/LoginEJB.java index dbd73f06f84f827f4b1cc040dae5f957ac1cb56b..b5afe2eb70723cafe360d2896610d8df34d81db6 100644 --- a/Servidor JEE/src/main/java/edu/proygrado/ejb/LoginEJB.java +++ b/Servidor JEE/src/main/java/edu/proygrado/ejb/LoginEJB.java @@ -12,18 +12,18 @@ import java.security.NoSuchAlgorithmException; import java.security.SecureRandom; import java.util.Date; import java.util.List; +import java.util.Properties; import javax.ejb.EJB; import javax.ejb.Stateless; +import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.PersistenceContext; import javax.persistence.TypedQuery; +import javax.servlet.ServletContext; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.core.GenericType; -import org.json.simple.JSONObject; -import org.json.simple.parser.JSONParser; - import edu.proygrado.dto.MoodleCourseDTO; import edu.proygrado.dto.MoodleCoursesInfoDTO; import edu.proygrado.dto.MoodleRoleDTO; @@ -40,6 +40,7 @@ import edu.proygrado.modelo.EstadoArchivo; import edu.proygrado.modelo.Grupo; import edu.proygrado.modelo.GrupoPK; import edu.proygrado.modelo.Liceo; +import edu.proygrado.modelo.LiceoPK; import edu.proygrado.modelo.Usuario; /** @@ -48,27 +49,12 @@ import edu.proygrado.modelo.Usuario; */ @Stateless public class LoginEJB { - public static String moodleApiEndpoint = null; - public static String moodleGroup = null; + + @Inject + private ServletContext context; + public LoginEJB() { super(); - - JSONParser parser = new JSONParser(); - try { - String currentPath = System.getProperty("user.dir"); - String configFilePath = currentPath.substring(0,currentPath.length()-4); - configFilePath = configFilePath + "/standalone/deployments/matefun.war/WEB-INF/config.json"; - Object obj = parser.parse(new FileReader(configFilePath)); - JSONObject jsonObject = (JSONObject) obj; - LoginEJB.moodleApiEndpoint = (String) jsonObject.get("endpoint"); - LoginEJB.moodleGroup = (String) jsonObject.get("group"); - } catch (Exception e) { - // Para hacer deploy en BLUEMIX se utiliza esta configuración. - LoginEJB.moodleApiEndpoint = "https://tics.moodlecloud.com"; - LoginEJB.moodleGroup = "Piloto"; - e.printStackTrace(); - System.out.print("No se ha podido cargar el archivo: /standalone/deployments/matefun.war/WEB-INF/config.json"); - } } @PersistenceContext(unitName = "matefunDS") private EntityManager em; @@ -96,6 +82,10 @@ public class LoginEJB { return new UsuarioDTO(tokenAuth, usuario); } + //Si no se encuentra configuracion para Moodle se notifica que las credenciales son incorrectas. + if(getMoodleAPIEndpoint() == null || getMoodleDefaultGroup() == null){ + throw new MatefunException("Usuario o contraseña incorrecto"); + } String token = null; token = getTokenMoodle(cedula, password); System.out.println("Obtengo token desde moodle"); @@ -119,7 +109,7 @@ public class LoginEJB { Long courseId = null; for (MoodleCourseDTO course : coursesInfo.getEnrolledcourses()) { System.out.println(course.getShortname()); - String groupName = LoginEJB.moodleGroup.toLowerCase(); + String groupName = getMoodleDefaultGroup().toLowerCase(); if (course.getShortname().toLowerCase().equals(groupName)) { courseId = course.getId(); System.out.println(courseId); @@ -128,7 +118,7 @@ public class LoginEJB { if (courseId != null) { coursesInfo = getCursesInfo(token, userInfo.getUserid(), courseId); } else { - throw new MatefunForbiddenException("Usuario no asignado al curso \"" +LoginEJB.moodleGroup +"\" en Moodle"); + throw new MatefunForbiddenException("Usuario no asignado al curso \"" +getMoodleDefaultGroup() +"\" en Moodle"); } String rol = null; @@ -143,18 +133,16 @@ public class LoginEJB { } if (rol == null) { - throw new MatefunForbiddenException("Rol incorrecto en curso \"" +LoginEJB.moodleGroup +"\""); + throw new MatefunForbiddenException("Rol incorrecto en curso \"" +getMoodleDefaultGroup()+"\""); } Usuario nuevoDesdeMoodle; Grupo grupo = null; try { - grupo = (Grupo) em - .createQuery( - "select g from Grupo g where g.grupoPK.anio = 2017 and g.grupoPK.grado = 2 and g.grupoPK.grupo = 'Año'") - .getSingleResult(); + GrupoPK grupoPK = getDefaultGroup(); + grupo = em.find(Grupo.class, grupoPK); } catch (Exception ex) { - System.out.println("No se encuentra grupo 2°Año, no se asigna"); + System.out.println("No se encuentra grupo por defecto, no se asigna"); } if (rol.equals("student")) { nuevoDesdeMoodle = new Alumno(cedula, userInfo.getFirstname(), userInfo.getLastname(), @@ -196,13 +184,50 @@ public class LoginEJB { return new UsuarioDTO(tokenAuth, nuevoDesdeMoodle); } } + + private String getMoodleAPIEndpoint(){ + try{ + String pathMatefunProperties = context.getRealPath("/WEB-INF/matefun.properties"); + Properties props = new Properties(); + props.load(new FileReader(pathMatefunProperties)); + return props.getProperty("moodle_endpoint"); + }catch(Exception e){ + e.printStackTrace(); + return null; + } + } + + private String getMoodleDefaultGroup(){ + try{ + String pathMatefunProperties = context.getRealPath("/WEB-INF/matefun.properties"); + Properties props = new Properties(); + props.load(new FileReader(pathMatefunProperties)); + return props.getProperty("moodle_group"); + }catch(Exception e){ + e.printStackTrace(); + return null; + } + } + private GrupoPK getDefaultGroup(){ + try{ + String pathMatefunProperties = context.getRealPath("/WEB-INF/matefun.properties"); + Properties props = new Properties(); + props.load(new FileReader(pathMatefunProperties)); + String[] grupo = props.getProperty("default_group").split("#"); + LiceoPK lpk = new LiceoPK(Long.valueOf(grupo[0])); + return new GrupoPK(Integer.valueOf(grupo[3]), Integer.valueOf(grupo[1]), grupo[2], lpk); + }catch(Exception e){ + return null; + } + } + private String getTokenMoodle(String username, String password) throws MatefunException { javax.ws.rs.client.ClientBuilder cb = ClientBuilder.newBuilder(); javax.ws.rs.client.Client c = cb.build(); - String url = LoginEJB.moodleApiEndpoint + "/login/token.php"; + String url = getMoodleAPIEndpoint() + "/login/token.php"; MoodleTokensDTO tokens = null; try { // https://tics.moodlecloud.com/login/token.php @@ -228,7 +253,7 @@ public class LoginEJB { javax.ws.rs.client.ClientBuilder cb = ClientBuilder.newBuilder(); javax.ws.rs.client.Client c = cb.build(); - String url = LoginEJB.moodleApiEndpoint + "/webservice/rest/server.php"; + String url = getMoodleAPIEndpoint()+ "/webservice/rest/server.php"; MoodleUserInfoDTO userInfo = null; try { @@ -255,7 +280,7 @@ public class LoginEJB { private MoodleCoursesInfoDTO getCursesInfo(String token, Long userId, Long courseId) throws MatefunException { javax.ws.rs.client.ClientBuilder cb = ClientBuilder.newBuilder(); javax.ws.rs.client.Client c = cb.build(); - String url = LoginEJB.moodleApiEndpoint+ "/webservice/rest/server.php"; + String url = getMoodleAPIEndpoint()+ "/webservice/rest/server.php"; List<MoodleCoursesInfoDTO> coursesInfo = null; try { @@ -361,25 +386,6 @@ public class LoginEJB { invitado.addArchivo(mate); em.persist(mate); - // DOCENTE DE PRUEBA - // Docente prueba = new Docente ("prueba", "Nombre", - // "Apellido",generateHash("1234")); - // em.persist(prueba); - // Configuracion configPrueba = new Configuracion(); - // configPrueba.setArgumentoF(true); - // configPrueba.setArgumentoI(true); - // configPrueba.setFontSizeEditor(12); - // configPrueba.setThemeEditor("ambiance"); - // em.persist(configPrueba); - // prueba.setConfiguracion(configPrueba); - // - // Archivo root_prueba = new Archivo("root", new Date(), "Carpeta raiz", - // EstadoArchivo.Edicion, true, true, null, prueba); - // prueba.addArchivo(root_prueba); - // em.persist(root_prueba); - // - // prueba.addGrupoAsignado(segundoAnio); - segundoAnio.addAlumno(invitado); return "ok";