/impl/conf/language/MessageResourcesCourseUnits.properties |
---|
125,6 → 125,10 |
courseunits.contentsGrants=Permissões de Consulta dos Ficheiros de Conteúdos |
courseunits.contentsGrants.PUBLIC=PUBLICAS |
courseunits.contentsGrants.PRIVATE=PRIVADOS A ESTUDANTES E DOCENTES DA UNIDADE |
courseunits.contentsGrants.INTERNAL=COMUNIDADE ACADÉMICA |
/impl/conf/app.properties |
---|
81,10 → 81,12 |
################################################## |
##Proxy Servers |
#If is an HTTP Server needs encoding config if FTP needs user pass config |
#This server is the server for unit contents, must be named ionline, it is hardcoded |
server.ionline=ftp://www.global.estgp.pt |
server.ionline.start.path= |
ionline.pass=baco |
ionline.user=Baco_web |
ionline.use.default.credentials.to.updates.and.deletes=false |
server.estgp.start.path= |
server.estgp=http://deptal.estgp.pt:9090/static |
/impl/src/java/jomm/dao/impl/AbstractDao.java |
---|
235,6 → 235,13 |
} |
} |
public List<CLAZZ> getAll() |
{ |
Session s = getCurrentSession(); |
Query q = s.createQuery("select * from i where i in class " + getReferenceClass().getName()); |
return q.list(); |
} |
/** |
* Return all objects related to the implementation of this DAO with no |
* filters. |
/impl/src/java/pt/estgp/estgweb/services/ftpservices/FtpRequestForm.java |
---|
5,6 → 5,9 |
import java.io.InputStream; |
import java.util.List; |
import pt.estgp.estgweb.domain.CourseUnit; |
import pt.estgp.estgweb.domain.views.CourseUnitView; |
/** |
* @author Jorge |
* @date 26/Fev/2009 |
13,9 → 16,11 |
public class FtpRequestForm |
{ |
CourseUnitView courseUnitView; |
boolean savePassword = false; |
String startPath; |
String serverUrl; |
String serverConfName; |
String username; |
String password; |
26,6 → 31,22 |
String folderToDelete; |
public CourseUnitView getCourseUnitView() { |
return courseUnitView; |
} |
public void setCourseUnitView(CourseUnitView courseUnitView) { |
this.courseUnitView = courseUnitView; |
} |
public String getServerConfName() { |
return serverConfName; |
} |
public void setServerConfName(String serverConfName) { |
this.serverConfName = serverConfName; |
} |
public boolean isSavePassword() |
{ |
return savePassword; |
/impl/src/java/pt/estgp/estgweb/services/ftpservices/FtpService.java |
---|
6,10 → 6,10 |
import pt.estgp.estgweb.services.email.IAddress; |
import pt.estgp.estgweb.services.email.impl.DefaultPopEmail; |
import pt.estgp.estgweb.services.email.impl.DefaultAddress; |
import pt.estgp.estgweb.domain.UserSession; |
import pt.estgp.estgweb.domain.UserImpl; |
import pt.estgp.estgweb.domain.UserSessionImpl; |
import pt.estgp.estgweb.domain.*; |
import pt.estgp.estgweb.domain.dao.DaoFactory; |
import pt.estgp.estgweb.Globals; |
import pt.estgp.estgweb.utils.ConfigProperties; |
import pt.estgp.estgweb.web.utils.DatesUtils; |
import pt.estgp.estgweb.web.FtpServer; |
import org.apache.log4j.Logger; |
42,34 → 42,59 |
private static final String FTP_PASSWORD = "pt.estgp.estgweb.services.ftpservices.FtpService.FTP_PASSWORD"; |
public String run(FtpRequestForm ftpRequestForm, UserSession userSession) throws IOException |
{ |
if(ftpRequestForm.isSavePassword() && ftpRequestForm.getPassword() != null && ftpRequestForm.getPassword().trim().length() > 0) |
{ |
((UserSessionImpl)userSession).put(FTP_PASSWORD,DesUtils.getInstance().encrypt(ftpRequestForm.getPassword())); |
} |
String passwordCode = (String) ((UserSessionImpl)userSession).get(FTP_PASSWORD); |
boolean isStaticAccess = ConfigProperties.getBooleanProperty(ftpRequestForm.getServerConfName()+".use.default.credentials.to.updates.and.deletes"); |
String password; |
if(passwordCode != null) |
String username; |
//This only works for Contents of CourseUnits, if user uses SavePassword than the password saved will be used |
if(!ftpRequestForm.isSavePassword() && isStaticAccess) |
{ |
logger.info("using saved password"); |
password = DesUtils.getInstance().decrypt(passwordCode); |
if(ftpRequestForm.getCourseUnitView() != null) |
{ |
CourseUnitImpl courseUnit = (CourseUnitImpl) DaoFactory.getCourseUnitDaoImpl().load(ftpRequestForm.getCourseUnitView().getId()); |
if(!courseUnit.isOwnedBy(userSession.getUser(),true)) |
{ |
logger.warn("Trying to admin FTP Folder, no permission for username:" + userSession.getUsername()); |
return "errors.ftp.no.permission"; |
} |
username = ConfigProperties.getProperty(ftpRequestForm.getServerConfName() + ".user"); |
password = ConfigProperties.getProperty(ftpRequestForm.getServerConfName() + ".pass"); |
} |
else |
return "errors.ftp.no.permission"; |
} |
else |
{ |
logger.info("trying pop 3 password"); |
password = DesUtils.getInstance().decrypt(userSession.getUser().getPop3password()); |
if(ftpRequestForm.isSavePassword() && ftpRequestForm.getPassword() != null && ftpRequestForm.getPassword().trim().length() > 0) |
{ |
((UserSessionImpl)userSession).put(FTP_PASSWORD,DesUtils.getInstance().encrypt(ftpRequestForm.getPassword())); |
} |
String passwordCode = (String) ((UserSessionImpl)userSession).get(FTP_PASSWORD); |
if(passwordCode != null) |
{ |
logger.info("using saved password"); |
password = DesUtils.getInstance().decrypt(passwordCode); |
} |
else |
{ |
logger.info("trying pop 3 password"); |
password = DesUtils.getInstance().decrypt(userSession.getUser().getPop3password()); |
} |
username = ftpRequestForm.getUsername(); |
if(username == null || username.trim().length() == 0) |
username = userSession.getUsername(); |
} |
String username = ftpRequestForm.getUsername(); |
if(username == null || username.trim().length() == 0) |
username = userSession.getUsername(); |
FtpServer server = FtpServer.getNewServer(ftpRequestForm.getServerUrl(),username,password); |
FTPClient client = server.getClient(); |
String result = "ftp.operation.success"; |
client.setFileType(FTP.BINARY_FILE_TYPE); |
client.changeWorkingDirectory(ftpRequestForm.getStartPath()); |
if(ftpRequestForm.getFilesToImport() != null) |
{ |
{ |
for(FileItem item: ftpRequestForm.getFilesToImport()) |
{ |
/impl/src/java/pt/estgp/estgweb/domain/enums/CourseUnitContentsGrants.java |
---|
New file |
0,0 → 1,30 |
package pt.estgp.estgweb.domain.enums; |
/** |
* @author Jorge Machado |
* @date 11/Mai/2010 |
* @time 15:54:05 |
* @email machadofisher@gmail.com |
*/ |
public enum CourseUnitContentsGrants { |
PUBLIC, |
PRIVATE, |
INTERNAL; |
private CourseUnitContentsGrants() |
{ |
} |
public static CourseUnitContentsGrants parse(String grants) |
{ |
if(grants == null) |
return PUBLIC; |
for(CourseUnitContentsGrants c: values()) |
{ |
if(grants.equals(c.name())) |
return c; |
} |
return PUBLIC; |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/CourseUnitImpl.java |
---|
1,5 → 1,7 |
package pt.estgp.estgweb.domain; |
import pt.estgp.estgweb.domain.enums.CourseUnitContentsGrants; |
import java.io.Serializable; |
import java.util.List; |
12,11 → 14,26 |
*/ |
public class CourseUnitImpl extends CourseUnit implements ICanManage |
{ |
CourseUnitContentsGrants courseUnitContentsGrants = null; |
public Serializable getSerializable() |
{ |
return getId(); |
} |
public CourseUnitContentsGrants getCourseUnitContentsGrants() { |
if(courseUnitContentsGrants == null) |
courseUnitContentsGrants = CourseUnitContentsGrants.parse(super.getContentsGrants()); |
return courseUnitContentsGrants; |
} |
public void setCourseUnitContentsGrants(CourseUnitContentsGrants courseUnitContentsGrants) { |
super.setContentsGrants(courseUnitContentsGrants.name()); |
this.courseUnitContentsGrants = courseUnitContentsGrants; |
} |
public boolean isValid() |
{ |
return true; //To change body of implemented methods use File | Settings | File Templates. |
84,4 → 101,7 |
return false; |
} |
} |
/impl/src/java/pt/estgp/estgweb/domain/dao/DaoUtils.java |
---|
12,7 → 12,7 |
* @see pt.estgp.estgweb.domain.dao |
*/ |
public class DaoUtils |
{ |
{ |
public static Criterion createSearchQuery(String query, SearchTypeEnum searchTypeEnum, String field1, String field2) |
{ |
/impl/src/java/pt/estgp/estgweb/domain/views/CourseUnitView.java |
---|
32,6 → 32,7 |
private String courseName; |
private String semestre; |
private String importYear; |
private String contentsGrants; |
private BlogView blog; |
private String pathIntranet; |
private String normalizedName; |
112,6 → 113,7 |
this.semestre = courseUnit.getSemestre(); |
this.courseCode = courseUnit.getCourseCode(); |
this.objectives = courseUnit.getObjectives(); |
this.contentsGrants = courseUnit.getContentsGrants(); |
if(courseUnit.getProgramStreamId() != null) |
{ |
programStreamId = courseUnit.getProgramStreamId(); |
234,6 → 236,14 |
return courseUnitAssignements; |
} |
public String getContentsGrants() { |
return contentsGrants; |
} |
public void setContentsGrants(String contentsGrants) { |
this.contentsGrants = contentsGrants; |
} |
public void setId(long id) |
{ |
this.id = id; |
262,6 → 272,7 |
public void persistViewInObject(CourseUnit c) |
{ |
c.setObjectives(objectives); |
c.setContentsGrants(contentsGrants); |
} |
public void persistViewAdminInObject(CourseUnit c) |
/impl/src/java/pt/estgp/estgweb/web/FtpServer.java |
---|
143,7 → 143,7 |
int port = url.getPort(); |
if (port <= 0) |
port = 21; |
logger.info("Connecting to " + host + "in port:" + port); |
logger.info("Connecting to " + host + " in port:" + port); |
FtpServer ftpServer = new FtpServer(host, port, user, pass); |
servers.put(urlStr, ftpServer); |
return ftpServer; |
/impl/src/java/pt/estgp/estgweb/web/LayoutController.java |
---|
47,6 → 47,7 |
String server = ConfigProperties.getProperty("server." + serverParameter); |
if (serverParameter == null || server == null || server.length() == 0 || path == null || layout == null) |
throw new FileNotFoundException("url not found for server:" + server + " and path:" + path); |
63,6 → 64,8 |
path = startPath + path; |
request.setAttribute("path", path); |
request.setAttribute("server", server); |
request.setAttribute("serverConfName", serverParameter); |
request.setAttribute("requestedStartPath", startPath); |
String proxyHost = ConfigProperties.getProperty(serverParameter + ".proxy.host"); |
String proxyPort = ConfigProperties.getProperty(serverParameter + ".proxy.port"); |
/impl/src/java/pt/estgp/estgweb/web/UserSessionProxy.java |
---|
70,5 → 70,10 |
return (UserSession) request.getAttribute(Globals.USER_SESSION_KEY); |
} |
public static boolean isAuthenticated(HttpServletRequest request) |
{ |
return request.getAttribute(Globals.USER_SESSION_KEY) != null && ((UserSession)request.getAttribute(Globals.USER_SESSION_KEY)).getUser() != null; |
} |
} |
/impl/src/java/pt/estgp/estgweb/web/FtpManager.java |
---|
8,6 → 8,7 |
import pt.estgp.estgweb.services.ftpservices.FtpRequestForm; |
import pt.estgp.estgweb.web.controllers.ApplicationDispatchController; |
import pt.estgp.estgweb.web.utils.RequestUtils; |
import pt.estgp.estgweb.domain.views.CourseUnitView; |
import pt.utl.ist.berserk.logic.serviceManager.IServiceManager; |
import pt.utl.ist.berserk.logic.serviceManager.ServiceManager; |
69,6 → 70,7 |
String startPath = (String) request.getAttribute(DirWebProxy.FTP_ACTUAL_PATH_KEY); |
if (startPath == null) |
startPath = (String) request.getAttribute(LayoutController.FTP_ACTUAL_PATH_KEY); |
String serverConfName = (String) request.getAttribute("serverConfName"); |
String savePassword = (String) request.getAttribute("savePassword"); |
String newFolder = (String) request.getAttribute("newFolder"); |
String deleteFile = (String) request.getAttribute("deleteFile"); |
83,6 → 85,10 |
{ |
FtpRequestForm ftpRequestForm = new FtpRequestForm(); |
CourseUnitView courseUnitView = (CourseUnitView) request.getAttribute("CourseUnitView"); |
if(courseUnitView != null) |
ftpRequestForm.setCourseUnitView(courseUnitView); |
ftpRequestForm.setServerConfName(serverConfName); |
ftpRequestForm.setUsername(username); |
ftpRequestForm.setPassword(password); |
if (savePassword != null && savePassword.trim().length() > 0) |
104,7 → 110,6 |
messageBack.addError(request, result); |
else |
messageBack.addMessage(request, result); |
} |
catch (Exception e) |
{ |
/impl/src/doc/baco.ppt |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
/impl/src/updates/db/update6.sql |
---|
New file |
0,0 → 1,2 |
ALTER TABLE `courseunit` ADD COLUMN `contentsGrants` VARCHAR(100) NOT NULL default 'INTERNAL' AFTER `status`; |
ALTER TABLE `courseunit` ADD INDEX `pathIntranetIndex`(`pathIntranet`); |
/impl/src/hbm/pt/estgp/estgweb/domain/CourseUnit.hbm.xml |
---|
27,6 → 27,7 |
<property name="programStreamId" type="string" index="programStreamIdIndex" /> |
<property name="validProgram" type="boolean" index="validProgramIndex"/> |
<property name="status" type="boolean" index="statusIndex" /> |
<property name="contentsGrants" type="string"/> |
<many-to-one name="validatorUser" class="pt.estgp.estgweb.domain.Teacher" lazy="false" outer-join="true"/> |
<many-to-one name="course" class="pt.estgp.estgweb.domain.Course" lazy="false" outer-join="true"/> |
<set name="blogs" cascade="delete" lazy="true" order-by="saveDate asc"> |
/impl/src/web/user/courseunits/courseunit.jsp |
---|
49,7 → 49,18 |
<html:textarea styleClass="textarea" property="courseUnitView.objectives"/> |
</baco:canManage> |
</p> |
<baco:canManage name="CourseUnitView"> |
<h2><bean:message key="courseunits.contentsGrants"/></h2> |
<p> |
<html:select property="courseUnitView.contentsGrants"> |
<%--<html:option value="PUBLIC"><bean:message key="courseunits.contentsGrants.PUBLIC"/></html:option>--%> |
<html:option value="INTERNAL"><bean:message key="courseunits.contentsGrants.INTERNAL"/></html:option> |
<html:option value="PRIVATE"><bean:message key="courseunits.contentsGrants.PRIVATE"/></html:option> |
</html:select> |
</p> |
</baco:canManage> |
<h2><bean:message key="courseunit.programfilepath"/></h2> |
<p> |
<baco:canManage name="CourseUnitView"> |
<logic:equal value="false" name="CourseUnitView" property="validProgram"> |
<html:file property="programFile"/> |
/impl/src/web/user/courseunits/menu.jsp |
---|
4,6 → 4,10 |
<%@ page import="pt.estgp.estgweb.web.utils.RequestUtils" %> |
<%@ page import="java.util.List" %> |
<%@ page import="pt.estgp.estgweb.utils.DatesUtils" %> |
<%@ page import="pt.estgp.estgweb.domain.enums.CourseUnitContentsGrants" %> |
<%@ page import="pt.estgp.estgweb.web.UserSessionProxy" %> |
<%@ page import="pt.estgp.estgweb.domain.UserImpl" %> |
<%@ page import="pt.estgp.estgweb.domain.UserSession" %> |
<%@ page contentType="text/html;charset=UTF-8" language="java" %> |
<%@ taglib uri="/WEB-INF/tlds/baco.tld" prefix="baco" %> |
<%@ taglib uri="/WEB-INF/tlds/struts-html.tld" prefix="html" %> |
73,7 → 77,17 |
<html:link action="${user}/startLoadCourseUnitStudents${fromAction}?courseUnitView.id=${CourseUnitView.id}"><bean:message key="courseunit.students"/></html:link> |
</li> |
<baco:isAuthenticated> |
<% |
UserSession userSession = UserSessionProxy.loadUserSessionFromRequest(request); |
CourseUnitContentsGrants contentsGrants = CourseUnitContentsGrants.parse(CourseUnitView.getContentsGrants()); |
if ( contentsGrants == CourseUnitContentsGrants.PUBLIC || |
(contentsGrants == CourseUnitContentsGrants.INTERNAL && UserSessionProxy.isAuthenticated(request)) || |
(contentsGrants == CourseUnitContentsGrants.PRIVATE && UserSessionProxy.isAuthenticated(request) && |
(((UserImpl) ((userSession.getUser()))).isTeacherOfCourseUnit(CourseUnitView.getId()) || |
((UserImpl) ((userSession.getUser()))).isStudentfCourseUnit(CourseUnitView.getId())))) |
{ |
%> |
<li> |
<html:link action="/user/startLoadCourseUnitContentsFromHome?courseUnitView.id=${CourseUnitView.id}"><bean:message key="courseunit.menu.contents"/></html:link> |
</li> |
83,7 → 97,9 |
<li> |
<html:link action="/user/startLoadCourseUnitGradesFromHome?courseUnitView.id=${CourseUnitView.id}"><bean:message key="courseunit.menu.grades"/></html:link> |
</li> |
</baco:isAuthenticated> |
<% |
} |
%> |