Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 30 additions & 1 deletion src/main/java/edu/harvard/iq/dataverse/ApiTokenPage.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,9 +4,9 @@
import edu.harvard.iq.dataverse.authorization.users.ApiToken;
import edu.harvard.iq.dataverse.authorization.users.AuthenticatedUser;
import edu.harvard.iq.dataverse.util.BundleUtil;
import edu.harvard.iq.dataverse.api.Util;
import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
import java.util.logging.Logger;
import javax.ejb.EJB;
Expand Down Expand Up @@ -75,4 +75,33 @@ public void generate() {

}
}

public String getApiTokenExpiration() {
if (session.getUser().isAuthenticated()) {
AuthenticatedUser au = (AuthenticatedUser) session.getUser();
apiToken = authSvc.findApiTokenByUser(au);
if (apiToken != null) {
return Util.getDateFormat().format(apiToken.getExpireTime());
} else {
return "";
}
} else {
// It should be impossible to get here from the UI.
return "";
}
}

public Boolean tokenIsExpired(){
return apiToken.getExpireTime().before(new Timestamp(System.currentTimeMillis()));
}

public void revoke() {
if (session.getUser().isAuthenticated()) {
AuthenticatedUser au = (AuthenticatedUser) session.getUser();
apiToken = authSvc.findApiTokenByUser(au);
if (apiToken != null) {
authSvc.removeApiToken(au);
}
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -437,7 +437,7 @@ public ApiToken findApiTokenByUser(AuthenticatedUser au) {
try {
return typedQuery.getSingleResult();
} catch (NoResultException | NonUniqueResultException ex) {
logger.log(Level.INFO, "When looking up API token for {0} caught {1}", new Object[]{au, ex});
logger.log(Level.FINE, "When looking up API token for {0} caught {1}", new Object[]{au, ex});
return null;
}
}
Expand Down
6 changes: 5 additions & 1 deletion src/main/java/propertyFiles/Bundle.properties
Original file line number Diff line number Diff line change
Expand Up @@ -397,10 +397,14 @@ oauth2.callback.message=<strong>Authentication Error</strong> - Dataverse could

# tab on dataverseuser.xhtml
apitoken.title=API Token
apitoken.message=Your API Token is displayed below after it has been created. Check out our {0}API Guide{1} for more information on using your API Token with the Dataverse APIs.
apitoken.message=Your API Token is valid for a year. Check out our {0}API Guide{1} for more information on using your API Token with the Dataverse APIs.
apitoken.notFound=API Token for {0} has not been created.
apitoken.expired.warning=This token is about to expire, please generate a new one.
apitoken.expired.error=This token is expired, please generate a new one.
apitoken.generateBtn=Create Token
apitoken.regenerateBtn=Recreate Token
apitoken.revokeBtn=Revoke Token
apitoken.expirationDate.label=Expiration Date

#dashboard.xhtml
dashboard.title=Dashboard
Expand Down
2 changes: 1 addition & 1 deletion src/main/webapp/dataset.xhtml
Original file line number Diff line number Diff line change
Expand Up @@ -443,7 +443,7 @@
or !empty DatasetPage.datasetVersionUI.subject.value
or !empty DatasetPage.datasetVersionUI.relPublicationCitation
or !empty DatasetPage.datasetVersionUI.notes.value) and !empty DatasetPage.datasetSummaryFields}">
<div class="col-sm-12 metadata-container">
<div class="col-sm-12 metadata-container margin-bottom-half">
<table class="metadata">
<tbody>
<ui:repeat value="#{DatasetPage.datasetSummaryFields}" var="dsf">
Expand Down
41 changes: 29 additions & 12 deletions src/main/webapp/dataverseuser.xhtml
Original file line number Diff line number Diff line change
Expand Up @@ -40,10 +40,6 @@

<p:focus context="dataverseUserForm"/>





<p:panel rendered="#{DataverseUserPage.editMode == 'FORGOT'}">
<h:outputText value="#{bundle['user.lostPasswdTip']}" />
</p:panel>
Expand Down Expand Up @@ -330,8 +326,6 @@
</div>
</p:tab>
<p:tab id="accountInfo" title="#{bundle['header.user.selectTab.accountInfo']}">


<div class="button-block tab-header margin-bottom text-right" jsf:rendered="#{empty DataverseUserPage.editMode or DataverseUserPage.passwordEditable or DataverseUserPage.accountDetailsEditable}">
<div class="btn-group">
<button type="button" id="editAccount" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
Expand Down Expand Up @@ -361,8 +355,6 @@
</ul>
</div>
</div>


<div class="form-horizontal" jsf:rendered="#{!empty DataverseUserPage.currentUser}">
<div class="form-group" jsf:rendered="#{not DataverseUserPage.accountDetailsEditable}">
<div class="col-sm-12">
Expand Down Expand Up @@ -489,10 +481,33 @@
<f:param value="&lt;/a&gt;"/>
</h:outputFormat>
</p>
<div class="metadata-container margin-bottom-half" jsf:rendered="${ApiTokenPage.apiTokenExpiration != ''}">
<table class="metadata">
<tbody>
<tr>
<th scope="row">
<h:outputText value="#{bundle['apitoken.expirationDate.label']}"/>
</th>
<td>
<h:outputText value="#{ApiTokenPage.apiTokenExpiration}"/>
</td>
<td class="text-warning" jsf:rendered="#{ApiTokenPage.tokenIsExpired()}">
<span class="glyphicon glyphicon-warning-sign"></span>
<h:outputText value=" #{bundle['apitoken.expired.error']}"/>
</td>
<!-- leaving warning off for now -->
<td class="text-danger" jsf:rendered="#{false}">
<span class="glyphicon glyphicon-exclamation-sign"></span>
<h:outputText value=" #{bundle['apitoken.expired.warning']}"/>
</td>
</tr>
</tbody>
</table>
</div>
<div id="apiToken" class="highlight hidden">
<pre>
<pre>
<code class="language-html" data-lang="html">${ApiTokenPage.apiToken}</code>
</pre>
</pre>
</div>
<!--Script removes "hidden" class from div containing API token to stop javascript browser exploits-->
<script>
Expand All @@ -506,10 +521,13 @@
});
//]]>
</script>
<div>
<div class="btn-toolbar" role="toolbar">
<button class="btn btn-default" jsf:action="#{ApiTokenPage.generate()}">
#{ApiTokenPage.checkForApiToken() ? bundle['apitoken.regenerateBtn'] : bundle['apitoken.generateBtn']}
</button>
<button class="btn btn-default" jsf:action="#{ApiTokenPage.revoke()}" jsf:rendered="${ApiTokenPage.apiTokenExpiration != ''}">
#{bundle['apitoken.revokeBtn']}
</button>
</div>
</p:tab>
<ui:remove>
Expand Down Expand Up @@ -690,6 +708,5 @@
</h:form>
</ui:define>
</ui:composition>

</h:body>
</html>
2 changes: 1 addition & 1 deletion src/main/webapp/resources/css/structure.css
Original file line number Diff line number Diff line change
Expand Up @@ -648,7 +648,7 @@ div.panel-group div.panel {margin-bottom:1em;}
div.panel div.panel-body div.form-group {overflow: hidden;}
div.edit-field div.ui-message {margin:6px 0;}
.metadata-container table.metadata {border-collapse:separate;margin:0 4px;}
.metadata-container table.metadata th {width:25%;vertical-align:top;padding:6px 12px 12px 12px;}
.metadata-container table.metadata th {width:25%;vertical-align:top;padding:6px 12px;}
.metadata-container table.metadata td {padding:6px 12px;}
@media(max-width:767px){
.metadata-container table.metadata th, .metadata-container table.metadata td {display:block;width:100%;}
Expand Down