todos los tiempos de acceso

parent ee94f1d2
......@@ -46,7 +46,7 @@ import edu.proygrado.modelo.Liceo;
import edu.proygrado.modelo.ParametroArchivo;
import edu.proygrado.modelo.ParametroArchivoPK;
import edu.proygrado.modelo.Usuario;
import edu.proygrado.utils.MoodleFiles;
import edu.proygrado.utils.MoodleHelper;
import edu.proygrado.utils.MoodleFunctions;
import edu.proygrado.utils.MoodleWS;
import edu.proygrado.utils.StringPair;
......@@ -210,7 +210,7 @@ public class ArchivosEJB {
invitadoEJB.getUsuario(matefunToken).getCedula(), //String cedulaCreador
true, //boolean editable
false, //boolean eliminado
MoodleFiles.rootFileId, //long padreId
MoodleHelper.rootFileId, //long padreId
-1l, //long archivoOrigenId
false, //boolean directorio
EstadoArchivo.Edicion.toString(), //String estado
......@@ -494,14 +494,14 @@ public class ArchivosEJB {
.getAllFilesSharedToMe(matefunToken, invitadoEJB, this, filepath);
}
public String getMoodleSharedFileContents(String matefunToken, InvitadoEJB invitadoEJB, String filepath) throws Exception {
public String getMoodleSharedFileContents(String matefunToken, InvitadoEJB invitadoEJB, String filepath, TiemposAccesoEJB tiempoAccesoEJB) throws Exception {
return (new WSUserSharedFilesMgr())
.getMoodleSharedFileContents(matefunToken, invitadoEJB, filepath);
.getMoodleSharedFileContents(matefunToken, invitadoEJB, filepath, tiempoAccesoEJB);
}
@SuppressWarnings("serial")
public List<ArchivoDTO> getAllMoodleCourseFiles(String matefunToken, InvitadoEJB invitadoEJB) throws Exception {
public List<ArchivoDTO> getAllMoodleCourseFiles(String matefunToken, InvitadoEJB invitadoEJB, TiemposAccesoEJB tiempoAccesoEJB) throws Exception {
List<ArchivoDTO> files = new ArrayList<ArchivoDTO>();
//files.add(ArchivoDTO.rootDir(-1l, invitadoEJB.getUsuario(matefunToken).getCedula()));
......@@ -533,7 +533,7 @@ public class ArchivosEJB {
.replace("webservice/pluginfile.php", "pluginfile.php")
.replace("pluginfile.php" , "webservice/pluginfile.php");
String fileContents = MoodleFiles.getMoodleFileContents(invitadoEJB, moodleFilePath, matefunToken);
String fileContents = MoodleHelper.getMoodleFileContents(invitadoEJB, moodleFilePath, matefunToken, tiempoAccesoEJB);
/*
String path = entity.getString("filepath") + (!entity.getBoolean("isdir") ? entity.getString("filename") : "");
......
......@@ -21,10 +21,15 @@ import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.ejb.TransactionManagement;
import javax.ejb.TransactionManagementType;
import javax.json.JsonObject;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.transaction.UserTransaction;
import javax.ws.rs.client.ClientBuilder;
import com.fasterxml.jackson.databind.ObjectMapper;
import edu.proygrado.dto.Assignment;
import edu.proygrado.dto.MoodleCourseDTO;
import edu.proygrado.dto.MoodleCoursesInfoDTO;
import edu.proygrado.dto.MoodleRoleDTO;
......@@ -48,6 +53,8 @@ import edu.proygrado.servicios.login.GetCoursesRunnable;
import edu.proygrado.servicios.login.GetUsuariosRunnable;
import edu.proygrado.servicios.login.RolesRunnable;
import edu.proygrado.utils.MoodleFunctions;
import edu.proygrado.utils.MoodleHelper;
import edu.proygrado.utils.MoodleWS;
import edu.proygrado.utils.StringPair;
import edu.proygrado.utils.Utils;
......@@ -176,7 +183,7 @@ public class LoginEJB {
//VERIFICA SI LAS CREDENCIALES SON CORRECTAS
List<StringPair> allMoodleTokens = getAllMoodleTokens(cedula, password, liceoBD);
List<StringPair> allMoodleTokens = MoodleHelper.getAllMoodleTokens(cedula, password, liceoBD, tiempoAccesoEJB, -1l);
String tokenAuth = generateToken();
GetUsuariosRunnable usuariosRunnable = new GetUsuariosRunnable( moodleApiEndpoint,
......@@ -185,7 +192,7 @@ public class LoginEJB {
);
(new Thread(usuariosRunnable)).start();
MoodleUserInfoDTO userInfo = getUserInfoMoodle(allMoodleTokens.get(0).getValue(), moodleApiEndpoint);
MoodleUserInfoDTO userInfo = getUserInfoMoodle(allMoodleTokens.get(0), moodleApiEndpoint);
MoodleCoursesInfoDTO coursesInfo = RolesRunnable.getCursesInfo(allMoodleTokens, userInfo.getUserid(), 1l, moodleApiEndpoint);
//credenciales correctas pregunto si soy el admin del liceo
......@@ -292,70 +299,18 @@ public class LoginEJB {
invitadoEJB.setUsuario(matefunToken, usuarioRetornado, invitadoEJB.getMoodleApiEndpoint(matefunToken), allTokens, usuario.getLiceo().getLiceoPK().getLiceoId(), coursesInfo, invitadoEJB.getMoodleWebServicesUserId(matefunToken));
return new UsuarioDTO(invitadoEJB.getUsuario(matefunToken).getMoodleUserId(), matefunToken, invitadoEJB.getUsuario(matefunToken).getLiceo().getLiceoPK().getLiceoId(), invitadoEJB.getUsuario(matefunToken), coursesInfo.getEnrolledcourses() );
}
private List<StringPair> getAllMoodleTokens(String username, String password, Liceo liceoBD) throws MatefunException, InterruptedException {
//StringPair[] allTokensArr = new StringPair[3];
//TokenRunnable r1 = new TokenRunnable(liceoBD.getMoodleuri(), username, password, "moodle_mobile_app");
//(new Thread(r1)).run();
javax.ws.rs.client.Client c = ClientBuilder.newBuilder().build();
MoodleTokensDTO tokens = null;
try {
tokens = c.target(liceoBD.getMoodleuri() + "/login/token.php")
.queryParam("username", username)
.queryParam("password", password)
.queryParam("service", liceoBD.getMoodlewsservice())
.request().get(MoodleTokensDTO.class);
if (tokens!=null && tokens.getToken() != null) {
List<StringPair> ret = new ArrayList<StringPair>();
ret.add(new StringPair (liceoBD.getMoodlewsservice() ,tokens.getToken()));
ret.add( new StringPair("MatefunUser-CustomService-Token", liceoBD.getMoodleapiusertoken()));
return ret;
}else {
throw new MatefunException("No se puede obtener token para el servicio '" + liceoBD.getMoodlewsservice() + "' y el usuario '" + username + "'.");
}
} finally {
c.close();
}
//List<StringPair> ret = new LinkedList<StringPair>();
//allTokensArr[2] = new StringPair("MatefunUser-CustomService-Token", liceoBD.getMoodleapiusertoken());
//r1.sem.acquire();
//if (Utils.isNullOrEmpty(r1.resultToken))
// throw new MatefunException("Contraseña incorrecta o token no seteado para el usuario.");
//allTokensArr[0] = new StringPair("moodle_mobile_app", r1.resultToken);
//for (StringPair pair : allTokensArr)
// if (!Utils.isNullOrEmpty( pair.getValue()))
// ret.add(pair);
//return ret;
}
private MoodleUserInfoDTO getUserInfoMoodle(String token, String moodleApiEndpoint) throws MatefunException {
javax.ws.rs.client.Client c = ClientBuilder.newBuilder().build();
MoodleUserInfoDTO userInfo = null;
try {
userInfo = c.target(moodleApiEndpoint+ "/webservice/rest/server.php")
.queryParam("wstoken", token)
.queryParam("wsfunction", MoodleFunctions.core_webservice_get_site_info)
.queryParam("moodlewsrestformat", "json")
.request().get(MoodleUserInfoDTO.class);
if (userInfo.getUserid() != null)
return userInfo;
else
private MoodleUserInfoDTO getUserInfoMoodle(StringPair tokenPair, String moodleApiEndpoint) throws Exception {
JsonObject response = MoodleWS.GET(tokenPair, moodleApiEndpoint, MoodleFunctions.core_webservice_get_site_info, new HashMap<String, Object>());
if (!response.getBoolean(MoodleWS.IS_OK)) {
throw new Exception("Error en core_webservice_get_site_info: " + response.toString());
}else {
JsonObject result = response.getJsonObject("result");
if (result.containsKey("userid")) {
return (new ObjectMapper()).readValue(result.toString(), MoodleUserInfoDTO.class);
}else{
throw new MatefunException("Error al obtener datos del usuario Moodle");
} finally {
c.close();
}
}
}
......
......@@ -6,9 +6,10 @@ import edu.proygrado.dto.ArchivoDTO;
import edu.proygrado.dto.CompartirArchivoInputDTO;
import edu.proygrado.ejb.ArchivosEJB;
import edu.proygrado.ejb.InvitadoEJB;
import edu.proygrado.ejb.TiemposAccesoEJB;
public interface ISharedFiles {
public List<ArchivoDTO> getAllFilesSharedToMe(String matefunToken, InvitadoEJB invitadoEJB, ArchivosEJB archivosEJB, String filepath) throws Exception;
public String getMoodleSharedFileContents(String matefunToken, InvitadoEJB invitadoEJB, String filepath) throws Exception;
public String getMoodleSharedFileContents(String matefunToken, InvitadoEJB invitadoEJB, String filepath, TiemposAccesoEJB tiempoAccesoEJB) throws Exception;
public List<ArchivoDTO> createUpdateSharedFile(String matefunToken, InvitadoEJB invitadoEJB, ArchivosEJB archivosEJB, CompartirArchivoInputDTO dataShareFile) throws Exception;
}
......@@ -11,13 +11,14 @@ import edu.proygrado.dto.MoodleCoursesInfoDTO;
import edu.proygrado.dto.TipoDestinatario;
import edu.proygrado.ejb.ArchivosEJB;
import edu.proygrado.ejb.InvitadoEJB;
import edu.proygrado.utils.MoodleFiles;
import edu.proygrado.ejb.TiemposAccesoEJB;
import edu.proygrado.utils.MoodleHelper;
public class WSUserSharedFilesMgr implements ISharedFiles{
@Override
public String getMoodleSharedFileContents(String matefunToken, InvitadoEJB invitadoEJB, String filepath) throws Exception {
return MoodleFiles.getMoodleFileContents(invitadoEJB, filepath, matefunToken, true);
public String getMoodleSharedFileContents(String matefunToken, InvitadoEJB invitadoEJB, String filepath, TiemposAccesoEJB tiempoAccesoEJB) throws Exception {
return MoodleHelper.getMoodleFileContents(invitadoEJB, filepath, matefunToken, tiempoAccesoEJB, true);
}
@Override
......
......@@ -27,7 +27,7 @@ import edu.proygrado.ejb.ArchivosEJB;
import edu.proygrado.ejb.InvitadoEJB;
import edu.proygrado.ejb.TiemposAccesoEJB;
import edu.proygrado.utils.MoodleConstants;
import edu.proygrado.utils.MoodleFiles;
import edu.proygrado.utils.MoodleHelper;
import edu.proygrado.utils.Utils;
@Stateless
......@@ -54,10 +54,10 @@ public class ArchivosRS{
Long startTime;
if (!(compartido!=null && compartido)) {
startTime = (new Date()).getTime();
ret = MoodleFiles.getMoodleFileContents(invitadoEJB, moodleFilePath, Utils.getToken(httpServletRequest));
ret = MoodleHelper.getMoodleFileContents(invitadoEJB, moodleFilePath, Utils.getToken(httpServletRequest), tiempoAccesoEJB);
}else{
startTime = (new Date()).getTime();
ret = archivosEJB.getMoodleSharedFileContents(Utils.getToken(httpServletRequest), invitadoEJB, moodleFilePath);
ret = archivosEJB.getMoodleSharedFileContents(Utils.getToken(httpServletRequest), invitadoEJB, moodleFilePath, tiempoAccesoEJB);
}
String token = Utils.getToken(httpServletRequest);
tiempoAccesoEJB.saveAccessTime(invitadoEJB.getLiceoId(token), invitadoEJB.getMoodleUserId(token), "matefun", "GET /archivo/contenido", (new Date()).getTime()-startTime);
......@@ -89,7 +89,7 @@ public class ArchivosRS{
@Path("/cursos")
public List<ArchivoDTO> getArchivosDeCursos(@QueryParam("cedula") String cedula) throws Exception {
Long startTime = (new Date()).getTime();
List<ArchivoDTO> ret = archivosEJB.getAllMoodleCourseFiles(Utils.getToken(httpServletRequest), invitadoEJB);
List<ArchivoDTO> ret = archivosEJB.getAllMoodleCourseFiles(Utils.getToken(httpServletRequest), invitadoEJB, tiempoAccesoEJB);
String token = Utils.getToken(httpServletRequest);
tiempoAccesoEJB.saveAccessTime(invitadoEJB.getLiceoId(token), invitadoEJB.getMoodleUserId(token), "matefun", "GET /archivo/cursos", (new Date()).getTime()-startTime);
return ret;
......@@ -108,7 +108,7 @@ public class ArchivosRS{
return invitadoEJB.getArchivosCompartidosAlumno(matefunToken, cedula);
}else{
startTime = (new Date()).getTime();
ret = archivosEJB.getAllMoodleCourseFiles(matefunToken, invitadoEJB);
ret = archivosEJB.getAllMoodleCourseFiles(matefunToken, invitadoEJB, tiempoAccesoEJB);
}
}else{
if(Utils.esInvitado(invitadoEJB, httpServletRequest)){
......
......@@ -37,8 +37,6 @@ public class GetCoursesRunnable implements Runnable{
try {
JsonObject result = MoodleWS.GET(this.moodleTokenToUse, moodleApiEndpoint, MoodleFunctions.core_group_get_course_user_groups, new HashMap<String, Object>() {{ put("courseid", curso.getId() ); put("userid", userid); }} );
//JsonObject result = MoodleWS.setTokenAndPerformRequest(MoodleWS.GET, MoodleFunctions.core_group_get_course_user_groups, moodleApiEndpoint, new HashMap<String, Object>() {{ put("courseid", curso.getId() ); put("userid", userid); }}, this.moodleTokenToUse);
if (result.getBoolean(MoodleWS.IS_OK)) {
JsonArray grupos = result.getJsonObject("result").getJsonArray("groups");
this.curso.setGrupos(new ArrayList<GrupoDTO>());
......
package edu.proygrado.utils;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.ws.rs.client.ClientBuilder;
import edu.proygrado.dto.MoodleTokensDTO;
import edu.proygrado.ejb.InvitadoEJB;
import edu.proygrado.ejb.TiemposAccesoEJB;
import edu.proygrado.matefun.MatefunException;
import edu.proygrado.modelo.Liceo;
public class MoodleFiles {
public class MoodleHelper {
public static final Long rootFileId = 0l;
public static String getMoodleFileContents(InvitadoEJB invitadoEJB, String fileurl, String matefunToken, boolean...forceMatefunWebServicesUser) throws MatefunException {
public static String getMoodleFileContents(InvitadoEJB invitadoEJB, String fileurl, String matefunToken, TiemposAccesoEJB tiempoAccesoEJB, boolean...forceMatefunWebServicesUser) throws MatefunException {
List<StringPair> allTokenPairs = invitadoEJB.getAllMoodleTokens(matefunToken);
boolean _forceMatefunWebServicesUser = forceMatefunWebServicesUser!=null && forceMatefunWebServicesUser.length>0 && forceMatefunWebServicesUser[0];
if (_forceMatefunWebServicesUser)
allTokenPairs = allTokenPairs.subList(allTokenPairs.size()-1, allTokenPairs.size());
for (StringPair tokenPair : allTokenPairs) {
String fileContents = getFileContentsUsingToken(fileurl, tokenPair);
String fileContents = getFileContentsUsingToken(fileurl, tokenPair, tiempoAccesoEJB, invitadoEJB.getLiceoId(matefunToken), invitadoEJB.getMoodleUserId(matefunToken));
if (fileContents != null)
return fileContents;
}
throw new MatefunException("No se puede obtener contenido de archivo '" + fileurl + "'");
}
private static String getFileContentsUsingToken(String fileurl, StringPair tokenPair) {
private static String getFileContentsUsingToken(String fileurl, StringPair tokenPair, TiemposAccesoEJB tiempoAccesoEJB, Long liceoId, Long moodleUserId) {
javax.ws.rs.client.Client c = ClientBuilder.newBuilder().build();
try {
return c.target(fileurl + "?token=" + tokenPair.getValue()).request().get(String.class);
javax.ws.rs.client.Invocation.Builder b = c.target(fileurl + "?token=" + tokenPair.getValue()).request();
Long startTime = (new Date()).getTime();
String response = b.get(String.class);
tiempoAccesoEJB.saveAccessTime(liceoId, moodleUserId, "moodle", "webservice/pluginfile.php", (new Date()).getTime()-startTime);
return response;
}catch(Exception e) {
System.out.println("No se puede obtener contenido de archivo '" + fileurl + "' usando token: " + tokenPair.getKey());
return null;
......@@ -36,4 +45,31 @@ public class MoodleFiles {
c.close();
}
}
public static List<StringPair> getAllMoodleTokens(String username, String password, Liceo liceoBD, TiemposAccesoEJB tiempoAccesoEJB, Long moodleUserId) throws MatefunException, InterruptedException {
javax.ws.rs.client.Client c = ClientBuilder.newBuilder().build();
MoodleTokensDTO tokens = null;
try {
javax.ws.rs.client.Invocation.Builder b = c.target(liceoBD.getMoodleuri() + "/login/token.php")
.queryParam("username", username)
.queryParam("password", password)
.queryParam("service", liceoBD.getMoodlewsservice())
.request();
Long startTime = (new Date()).getTime();
tokens = b.get(MoodleTokensDTO.class);
tiempoAccesoEJB.saveAccessTime(liceoBD.getLiceoPK().getLiceoId(), moodleUserId, "moodle", "login/token.php", (new Date()).getTime()-startTime);
if (tokens!=null && tokens.getToken() != null) {
List<StringPair> ret = new ArrayList<StringPair>();
ret.add(new StringPair (liceoBD.getMoodlewsservice() ,tokens.getToken()));
ret.add( new StringPair("MatefunUser-CustomService-Token", liceoBD.getMoodleapiusertoken()));
return ret;
}else {
throw new MatefunException("No se puede obtener token para el servicio '" + liceoBD.getMoodlewsservice() + "' y el usuario '" + username + "'.");
}
} finally {
c.close();
}
}
}
......@@ -170,7 +170,7 @@ public class MoodleWS {
else if (isSitePolicyNotAgreed(result)) {
System.out.println(" ERROR["+verb+" "+functionName+"][token: "+tokenPair.getKey()+"] -> " + result);
try_agree_site_policy(moodleApiEndpoint, tokenPair.getValue());
try_agree_site_policy(moodleApiEndpoint, tokenPair.getValue(), tiempoAccesoEJB, liceoId, moodleUserId);
JsonObject resultAgain = setTokenAndPerformRequest(verb, functionName, moodleApiEndpoint, new HashMap<String,Object>(params), tokenPair, tiempoAccesoEJB, liceoId, moodleUserId);
if (resultAgain.getBoolean(IS_OK))
return resultAgain;
......@@ -188,14 +188,19 @@ public class MoodleWS {
throw new MatefunException("No se puede realizar operacion con ninguno de los "+moodleTokenPairs.size()+" tokens: " + verb + " "+ functionName);
}
private static void try_agree_site_policy(String moodleApiEndpoint, String token) {
private static void try_agree_site_policy(String moodleApiEndpoint, String token, TiemposAccesoEJB tiempoAccesoEJB, Long liceoId, Long moodleUserId) {
javax.ws.rs.client.Client c = ClientBuilder.newBuilder().build();
try {
c.target(moodleApiEndpoint + "/webservice/rest/server.php")
.queryParam("wsfunction", MoodleFunctions.core_user_agree_site_policy)
.queryParam("wstoken", token)
.queryParam("moodlewsrestformat", "json").request()
.get(String.class);
javax.ws.rs.client.Invocation.Builder b = c.target(moodleApiEndpoint + "/webservice/rest/server.php")
.queryParam("wsfunction", MoodleFunctions.core_user_agree_site_policy)
.queryParam("wstoken", token)
.queryParam("moodlewsrestformat", "json").request();
Long startTime = (new Date()).getTime();
b.get(String.class);
if (tiempoAccesoEJB != null) {
tiempoAccesoEJB.saveAccessTime(liceoId, moodleUserId, "moodle", MoodleFunctions.core_user_agree_site_policy, (new Date()).getTime()-startTime);
}
}finally {
c.close();
}
......@@ -209,9 +214,18 @@ public class MoodleWS {
parameters.put(WSRESTFORMAT_KEY, "json");
javax.ws.rs.client.Invocation.Builder b = loadParams(c.target(moodleApiEndpoint + "/webservice/rest/server.php"), parameters).request();
Long startTime = (new Date()).getTime();
Long startTime = null;
String stringResp = null;
String stringResp = verb.equals(GET) ? b.get(String.class) : b.post(Entity.json(""), String.class);
if (verb.equals(GET)) {
//get
startTime = (new Date()).getTime();
stringResp = b.get(String.class);
}else{
//post
startTime = (new Date()).getTime();
stringResp = b.post(Entity.json(""), String.class);
}
if (tiempoAccesoEJB != null) {
tiempoAccesoEJB.saveAccessTime(liceoId, moodleUserId, "moodle", functionName, (new Date()).getTime()-startTime);
......
#Generated by Maven Integration for Eclipse
#Tue May 26 23:35:34 BRT 2020
#Wed May 27 22:03:58 BRT 2020
version=0.0.1-SNAPSHOT
groupId=proygrado
m2e.projectName=Servidor JEE
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment