revision 8251 merged from trunk
This commit is contained in:
commit
ab121ef274
9 changed files with 179 additions and 96 deletions
|
@ -57,7 +57,7 @@ public abstract class UserAccountsEditPageStrategy extends UserAccountsPage {
|
|||
|
||||
private static class EmailStrategy extends UserAccountsEditPageStrategy {
|
||||
private static final String PARAMETER_RESET_PASSWORD = "resetPassword";
|
||||
private static final String EMAIL_TEMPLATE = "userAccounts-resetPasswordEmail.ftl";
|
||||
private static final String EMAIL_TEMPLATE = "userAccounts-passwordResetPendingEmail.ftl";
|
||||
|
||||
public static final String RESET_PASSWORD_URL = "/accounts/resetPassword";
|
||||
|
||||
|
|
|
@ -26,7 +26,7 @@ public class UserAccountsResetPasswordPage extends UserAccountsPasswordBasePage
|
|||
|
||||
private static final String TEMPLATE_NAME = "userAccounts-resetPassword.ftl";
|
||||
|
||||
private static final String EMAIL_TEMPLATE = "userAccounts-passwordResetEmail.ftl";
|
||||
private static final String EMAIL_TEMPLATE = "userAccounts-passwordResetCompleteEmail.ftl";
|
||||
|
||||
protected UserAccountsResetPasswordPage(VitroRequest vreq) {
|
||||
super(vreq);
|
||||
|
|
|
@ -4,7 +4,6 @@ package edu.cornell.mannlib.vitro.webapp.controller.accounts.user;
|
|||
|
||||
import static edu.cornell.mannlib.vedit.beans.LoginStatusBean.AuthenticationSource.EXTERNAL;
|
||||
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.commons.logging.Log;
|
||||
import org.apache.commons.logging.LogFactory;
|
||||
|
||||
|
@ -18,7 +17,6 @@ import edu.cornell.mannlib.vitro.webapp.controller.authenticate.LoginRedirector;
|
|||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.FreemarkerHttpServlet;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.RedirectResponseValues;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.freemarker.responsevalues.ResponseValues;
|
||||
import edu.cornell.mannlib.vitro.webapp.controller.login.LoginProcessBean;
|
||||
|
||||
/**
|
||||
* Parcel out the different actions required of the UserAccounts GUI.
|
||||
|
|
|
@ -114,7 +114,7 @@ public class IndividualController extends FreemarkerHttpServlet {
|
|||
return doNotFound(vreq);
|
||||
}
|
||||
|
||||
ContentType rdfFormat = checkForLinkedDataRequest(url, vreq);
|
||||
ContentType rdfFormat = checkUrlForLinkedDataRequest(url, vreq);
|
||||
if( rdfFormat != null ){
|
||||
return doRdf(vreq, individual, rdfFormat);
|
||||
}
|
||||
|
@ -472,110 +472,119 @@ public class IndividualController extends FreemarkerHttpServlet {
|
|||
* to a GET request because it can only send bytes and not things. The server
|
||||
* sends a 303, to mean "you asked for something I cannot send you, but I can
|
||||
* send you this other stream of bytes about that thing."
|
||||
* In the case of a request like http://vivo.cornell.edu/individual/n1234/n1234.rdf,
|
||||
* In the case of a request like http://vivo.cornell.edu/individual/n1234/n1234.rdf
|
||||
* or http://vivo.cornell.edu/individual/n1234?format=rdfxml,
|
||||
* the request is for a set of bytes rather than an individual, so no 303 is needed.
|
||||
*/
|
||||
private static Pattern URI_PATTERN = Pattern.compile("^/individual/([^/]*)$");
|
||||
private String checkForRedirect(String url, VitroRequest vreq) {
|
||||
Matcher m = URI_PATTERN.matcher(url);
|
||||
if( m.matches() && m.groupCount() == 1 ){
|
||||
ContentType c = checkForLinkedDataRequest(url, vreq);
|
||||
if( c != null ){
|
||||
String redirectUrl = "/individual/" + m.group(1) + "/" + m.group(1) ;
|
||||
if( RDFXML_MIMETYPE.equals( c.getMediaType()) ){
|
||||
return redirectUrl + ".rdf";
|
||||
}else if( N3_MIMETYPE.equals( c.getMediaType() )){
|
||||
return redirectUrl + ".n3";
|
||||
}else if( TTL_MIMETYPE.equals( c.getMediaType() )){
|
||||
return redirectUrl + ".ttl";
|
||||
}//else send them to html
|
||||
}
|
||||
//else redirect to HTML representation
|
||||
return "display/" + m.group(1);
|
||||
}else{
|
||||
return null;
|
||||
}
|
||||
|
||||
String formatParam = (String) vreq.getParameter("format");
|
||||
if ( formatParam == null ) {
|
||||
Matcher m = URI_PATTERN.matcher(url);
|
||||
if ( m.matches() && m.groupCount() == 1 ) {
|
||||
ContentType c = checkAcceptHeaderForLinkedDataRequest(url, vreq);
|
||||
if ( c != null ) {
|
||||
String redirectUrl = "/individual/" + m.group(1) + "/" + m.group(1) ;
|
||||
if ( RDFXML_MIMETYPE.equals( c.getMediaType() ) ) {
|
||||
return redirectUrl + ".rdf";
|
||||
} else if ( N3_MIMETYPE.equals( c.getMediaType() ) ) {
|
||||
return redirectUrl + ".n3";
|
||||
} else if ( TTL_MIMETYPE.equals( c.getMediaType() ) ) {
|
||||
return redirectUrl + ".ttl";
|
||||
}//else send them to html
|
||||
}
|
||||
//else redirect to HTML representation
|
||||
return "display/" + m.group(1);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
private static Pattern RDF_REQUEST = Pattern.compile("^/individual/([^/]*)/\\1.rdf$");
|
||||
private static Pattern N3_REQUEST = Pattern.compile("^/individual/([^/]*)/\\1.n3$");
|
||||
private static Pattern TTL_REQUEST = Pattern.compile("^/individual/([^/]*)/\\1.ttl$");
|
||||
private static Pattern HTML_REQUEST = Pattern.compile("^/display/([^/]*)$");
|
||||
|
||||
protected ContentType checkAcceptHeaderForLinkedDataRequest(String url, VitroRequest vreq) {
|
||||
try {
|
||||
/*
|
||||
* Check the accept header. This request will trigger a
|
||||
* redirect with a 303 ("see also"), because the request is for
|
||||
* an individual but the server can only provide a set of bytes.
|
||||
*/
|
||||
String acceptHeader = vreq.getHeader("accept");
|
||||
if (acceptHeader != null) {
|
||||
String ctStr = ContentType.getBestContentType(
|
||||
ContentType.getTypesAndQ(acceptHeader),
|
||||
getAcceptedContentTypes());
|
||||
|
||||
if (ctStr!=null && (
|
||||
RDFXML_MIMETYPE.equals(ctStr) ||
|
||||
N3_MIMETYPE.equals(ctStr) ||
|
||||
TTL_MIMETYPE.equals(ctStr) ))
|
||||
return new ContentType(ctStr);
|
||||
}
|
||||
} catch (Throwable th) {
|
||||
log.error("Problem while checking accept header " , th);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static final Pattern RDFXML_FORMAT = Pattern.compile("rdfxml");
|
||||
public static final Pattern N3_FORMAT = Pattern.compile("n3");
|
||||
public static final Pattern TTL_FORMAT = Pattern.compile("ttl");
|
||||
|
||||
private static Pattern RDF_REQUEST = Pattern.compile("^/individual/([^/]*)/\\1.rdf$");
|
||||
private static Pattern N3_REQUEST = Pattern.compile("^/individual/([^/]*)/\\1.n3$");
|
||||
private static Pattern TTL_REQUEST = Pattern.compile("^/individual/([^/]*)/\\1.ttl$");
|
||||
private static Pattern HTML_REQUEST = Pattern.compile("^/display/([^/]*)$");
|
||||
|
||||
/**
|
||||
* @return null if this is not a linked data request, returns content type if it is a
|
||||
* linked data request.
|
||||
* linked data request.
|
||||
* These are Vitro-specific ways of requesting rdf, unrelated to semantic web standards.
|
||||
* They do not trigger a redirect with a 303, because the request is for a set of bytes
|
||||
* rather than an individual.
|
||||
*/
|
||||
protected ContentType checkForLinkedDataRequest(String url, VitroRequest vreq ) {
|
||||
try {
|
||||
Matcher m;
|
||||
/*
|
||||
* Check for url param specifying format.
|
||||
* Example: http://vivo.cornell.edu/individual/n23?format=rdfxml
|
||||
* This request will trigger a redirect with a 303.
|
||||
*/
|
||||
String formatParam = (String) vreq.getParameter("format");
|
||||
if (formatParam != null) {
|
||||
m = RDFXML_FORMAT.matcher(formatParam);
|
||||
if ( m.matches() ) {
|
||||
return ContentType.RDFXML;
|
||||
}
|
||||
m = N3_FORMAT.matcher(formatParam);
|
||||
if( m.matches() ) {
|
||||
return ContentType.N3;
|
||||
}
|
||||
m = TTL_FORMAT.matcher(formatParam);
|
||||
if( m.matches() ) {
|
||||
return ContentType.TURTLE;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Check the accept header. This request will trigger a
|
||||
* redirect with a 303, because the request is for an individual
|
||||
* but the server can only provide a set of bytes.
|
||||
*/
|
||||
String acceptHeader = vreq.getHeader("accept");
|
||||
if (acceptHeader != null) {
|
||||
String ctStr = ContentType.getBestContentType(
|
||||
ContentType.getTypesAndQ(acceptHeader),
|
||||
getAcceptedContentTypes());
|
||||
|
||||
if (ctStr!=null && (
|
||||
RDFXML_MIMETYPE.equals(ctStr) ||
|
||||
N3_MIMETYPE.equals(ctStr) ||
|
||||
TTL_MIMETYPE.equals(ctStr) ))
|
||||
return new ContentType(ctStr);
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for parts of URL that indicate request for RDF
|
||||
* http://vivo.cornell.edu/individual/n23/n23.rdf
|
||||
* http://vivo.cornell.edu/individual/n23/n23.n3
|
||||
* http://vivo.cornell.edu/individual/n23/n23.ttl
|
||||
* This request will not trigger a redirect and 303, because
|
||||
* the request is for a set of bytes rather than an individual.
|
||||
*/
|
||||
m = RDF_REQUEST.matcher(url);
|
||||
if( m.matches() ) {
|
||||
return ContentType.RDFXML;
|
||||
protected ContentType checkUrlForLinkedDataRequest(String url, VitroRequest vreq ) {
|
||||
|
||||
Matcher m;
|
||||
|
||||
/*
|
||||
* Check for url param specifying format.
|
||||
* Example: http://vivo.cornell.edu/individual/n23?format=rdfxml
|
||||
*/
|
||||
String formatParam = (String) vreq.getParameter("format");
|
||||
if (formatParam != null) {
|
||||
m = RDFXML_FORMAT.matcher(formatParam);
|
||||
if ( m.matches() ) {
|
||||
return ContentType.RDFXML;
|
||||
}
|
||||
m = N3_REQUEST.matcher(url);
|
||||
if( m.matches() ) {
|
||||
return ContentType.N3;
|
||||
}
|
||||
m = TTL_REQUEST.matcher(url);
|
||||
if( m.matches() ) {
|
||||
return ContentType.TURTLE;
|
||||
}
|
||||
m = N3_FORMAT.matcher(formatParam);
|
||||
if( m.matches() ) {
|
||||
return ContentType.N3;
|
||||
}
|
||||
m = TTL_FORMAT.matcher(formatParam);
|
||||
if( m.matches() ) {
|
||||
return ContentType.TURTLE;
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Check for parts of URL that indicate request for RDF. Examples:
|
||||
* http://vivo.cornell.edu/individual/n23/n23.rdf
|
||||
* http://vivo.cornell.edu/individual/n23/n23.n3
|
||||
* http://vivo.cornell.edu/individual/n23/n23.ttl
|
||||
*/
|
||||
m = RDF_REQUEST.matcher(url);
|
||||
if( m.matches() ) {
|
||||
return ContentType.RDFXML;
|
||||
}
|
||||
m = N3_REQUEST.matcher(url);
|
||||
if( m.matches() ) {
|
||||
return ContentType.N3;
|
||||
}
|
||||
m = TTL_REQUEST.matcher(url);
|
||||
if( m.matches() ) {
|
||||
return ContentType.TURTLE;
|
||||
}
|
||||
|
||||
} catch (Throwable th) {
|
||||
log.error("problem while checking accept header " , th);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue