From 7f27693c2fc482ae3c2a0f8efec321629b5d6fbf Mon Sep 17 00:00:00 2001
From: Gonzalo Fabian Cameto Hernandez <gonzalo.cameto@fing.edu.uy>
Date: Sat, 11 Nov 2017 19:05:47 -0300
Subject: [PATCH] Agrego properties para asignar grupo local por defecto.

---
 Servidor JEE/WebContent/WEB-INF/config.json   |   4 -
 .../WebContent/WEB-INF/matefun.properties     |   7 ++
 Servidor JEE/pom.xml                          |  14 +--
 .../java/edu/proygrado/ejb/CommandsBean.java  |  17 +--
 .../main/java/edu/proygrado/ejb/LoginEJB.java | 110 +++++++++---------
 5 files changed, 70 insertions(+), 82 deletions(-)
 delete mode 100644 Servidor JEE/WebContent/WEB-INF/config.json
 create mode 100644 Servidor JEE/WebContent/WEB-INF/matefun.properties

diff --git a/Servidor JEE/WebContent/WEB-INF/config.json b/Servidor JEE/WebContent/WEB-INF/config.json
deleted file mode 100644
index 18488fa..0000000
--- 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 0000000..038644a
--- /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 8951a05..bd6f0ed 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 ec59172..b9d2c7c 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 dbd73f0..b5afe2e 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";
-- 
GitLab