Code Monkey home page Code Monkey logo

redbox-mint / redbox-portal Goto Github PK

View Code? Open in Web Editor NEW
7.0 6.0 15.0 63.39 MB

The core ReDBox application including the web portal and APIs.

Home Page: https://www.redboxresearchdata.com.au

License: GNU General Public License v3.0

JavaScript 4.89% TypeScript 9.48% HTML 82.76% CSS 0.27% Shell 0.06% Gherkin 0.05% Groovy 0.38% Makefile 0.03% Dockerfile 0.01% Less 0.01% SCSS 1.32% EJS 0.75%
research-data research-data-management research-data-repository

redbox-portal's Introduction

ReDBox Logo

Build Status codecov

ReDBox is an open source Research Data Management platform that assists researchers and institutions to plan, create and publish their research data assets. ReDBox is one of the most popular research data management tools in Australia. It is currently in use across 11 universities in Australia and New Zealand. ReDBox supports the Australian research community to describe and share information about research data collections. It assists data custodians in meeting institutional data management policies, applying the requirements of the Australian Code for the Responsible Conduct of Research, and publishing to Research Data Australia (RDA), the national research data discovery system maintained by the Australian Research Data Commons (ARDC).

The Queensland Cyber Infrastructure Foundation (QCIF) leads the ReDBox development initiative and provides several services including a support subscription service to institutions.

Getting Started

For information on the prerequisites, installation, and configuration, please visit our Redbox Portal Wiki.

Usage

For detailed instructions on how to use the Redbox Portal, including features and functionalities, refer to our User Guide in the Redbox Portal Wiki.

Contributing

We welcome contributions from the community! For guidelines on contributing to the Redbox Portal, please check out our Contribution Guidelines.

Development

For development documentation and guidelines, please refer to our Development Guide in the Redbox Portal Wiki.

For further assistance or to report issues, please visit our Issues section.

redbox-portal's People

Contributors

alejandro-bulgaris-qcif avatar andrewbrazzatti avatar cofiem avatar davidjb avatar dependabot-preview[bot] avatar dependabot-support avatar dependabot[bot] avatar moisbo avatar rdpaorg avatar shilob avatar spikelynch avatar thomcuddihy avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar

redbox-portal's Issues

Implement record maintenance screen for administrators

Currently there isn't a dedicated screen for administrators to be able to view all the records in the system for maintenance and reporting purposes.

The existing researcher centric screens work from a research data DLC perspective and where a person isn't expected to have many records of any particular type (e.g. less than 100) but are not easy to use if you need a more universal view of the system.

A data grid component such as ag-Grid should provide a rich interface that will allow searching, filtering and also exporting.

Potentially we may be able to allow batching functionality as well from this screen.

paging through a full list of RDMPs is very slow

When listing all RDMPs and paging through them, each page load is very slow and (in Safari at least) there is no feedback mechanism to show that it is doing anything. Also it appears to get slower the further you get through the list. When trying to go from page 27 to 28 the response time was over 30 seconds and then i would get page 28, 29, 30 and back to 28 in quick succession.

Add ability to refresh data selector in data publication form

A data publication should be should be immutable but not until the record has moved to the published state. Currently, once you link a data record, it is not possible to update the list of attachments if they've changed in the data record even though the record is not yet published.

A refresh button should be added to allow the user to update the list with the latest attachments for all stages except published.

Support storing attachments in the Openstack Swift

Currently ReDBox stores attachments in the MongoDB using GridFS. Supporting other storage backends such as Openstack Swift will allow better integration with institutional systems and research data management processes.

GetMeta Endpoint doesn't handle unexpected inputs

Describe the bug
The RecordController.getMeta endpoint (/record/metadata/:oid) crashes the app when the oid isn't a valid id for a record

To Reproduce
Steps to reproduce the behavior:

  1. Go to /default/rdmp/record/metadata/null in your browser
  2. See the app crash in the logs

Expected behavior
The app should gracefully handle incorrect inputs and return error codes to the client

Search problems

  1. Search doesn't find all records with given keywords. I can send you some examples but not publically.

targetSetp workflow gets overwritten at some point in the RecordController update method

If a configuration option is set to (Example Withdraw button):

{
  class: "SaveButton",
  definition: {
    label: 'Withdraw',
    closeOnSave: true,
    redirectLocation: '/@branding/@portal/dashboard/dataPublication',
    targetStep: 'draft',
    disabledExpression: '<%= _.isEmpty(relatedRecordId) %>'
  },
  variableSubstitutionFields: ['redirectLocation']
},

The targetStep changes to draft. However it gets overwritten at some point before the page is loaded.

The update method in the RecordController changes the record's workflow correctly, but then it gets rewritten or ignored at some point during the update of the metadata.

To pinpoint the bug it happens between the updatedataStream method and the triggerPostSaveTriggers

redboxportal_1  | debug: updateDataStream {"stage":"draft","stageLabel":"Draft"}
redboxportal_1  | debug: Triggering post save triggers 
redboxportal_1  | debug: {"stage":"reviewing","stageLabel":"Reviewing"}

Is this configuration?

My onUpdate pre configuration looks like this: (config/recordtype.js:)

hooks:{
...
...
onUpdate:{
        pre: [
          //Transition workflow from queued to reviewing. TODO: Condition needs to be changed to check when staging location set
          {
            function: 'sails.services.triggerservice.transitionWorkflow',
            options: {
              "triggerCondition": "<%= _.isEqual(workflow.stage, 'draft') && _.isEqual(metadata.embargoByDate, '') %>",
              "targetWorkflowStageName": "reviewing",
              "targetWorkflowStageLabel": "Reviewing",
              "targetForm": "dataPublication-1.0-reviewing"
            }
          },
          {
            function: 'sails.services.triggerservice.transitionWorkflow',
            options: {
              "triggerCondition": "<%= _.isEqual(workflow.stage, 'draft') && _.isEqual(metadata.embargoByDate, true) %>",
              "targetWorkflowStageName": "embargoed",
              "targetWorkflowStageLabel": "Embargoed",
              "targetForm": "dataPublication-1.0-embargoed"
            }
          },
          //Transition workflow from publishing to published. TODO: Condition needs to be changed to check when published location set
          {
            function: 'sails.services.triggerservice.transitionWorkflow',
            options: {
              "triggerCondition": "<%= _.isEqual(workflow.stage, 'publishing') %>",
              "targetWorkflowStageName": "published",
              "targetWorkflowStageLabel": "Published",
              "targetForm": "dataPublication-1.0-published"
            }
          },
          // Set the notification state for draft publications
          {
            function: 'sails.services.recordsservice.updateNotificationLog',
            options: {
              name: "Set Notification to Draft",
              // when notification is undefined, start with 'draft', so skipping stages will still work (as with the shipped behavior above)
              triggerCondition: "<%= typeof record.notification == 'undefined'%>",
              flagName: 'notification.state', // the record's path to the notification flag
              flagVal: 'draft', // hard coded value
              saveRecord: false // when true, do metadata update -> false, since this is on a pre-save hook, gets saved anyway
            }
          }
        ]

Note: if the record has draft and embargo details it changes correctly to draft.

setVisibility function does not return data object

The setVisibility function used with subscriber functions to determine visibility doesn't return the data object its provided. Because the subscriber functions can be chained and used to process the data provided before setting the value, not returning the data object means that it can only be placed at the end of the chain. In some cases you may want to determine visibility before the data is processed, e.g. checking different property of a larger object than the one you're attempting to set on the object.

Support storing attachments in AWS S3

Currently ReDBox stores attachments in the MongoDB using GridFS. Supporting other storage backends such as AWS S3 will allow better integration with institutional systems and research data management processes.

Update Angular apps to version 7

We are currently using Angular 4, upgrading to a version greater than 6 will allow us to more easily move the shared module to its own library and should also produce smaller bundles.

Support storing attachments in the file system

Currently ReDBox stores attachments in the MongoDB using GridFS. Supporting other storage backends such as the file system will allow better integration with institutional systems and research data management processes.

Add pagination on search results

Hi,

I was wondering if we can have pagination on search results. At the moment it only shows 10 results in any query.

/record/search?q=some

Cheers,
Moises

Implement OpenID Connect authentication adapter

OpenID Connect is a popular single sign-on protocol that the Australian Access Federation(AAF) are beginning to support with the view to eventually phase out the JWT authentication currently used by AAF RapidConnect.

In addition to supporting AAF's OpenId Connect provider, an OpenID Connect adapter authentication adapter could be used with a service such as Keycloak to support many more authentication sources such as:

  • Social sign-ins such as Google, LinkedIn and Facebook
  • Active directory and LDAP

VocabField value cannot be populated with data via subscribe

If you add a subscribe block to a VocabField component, it doesn't update its value.
Example configuration

          class: 'VocabField',
          definition: {
            name: 'project_title',
            label: '@dmpt-project-title',
            help: '@dmpt-project-title-help',
            type: 'text',
            required: true,
            disableEditAfterSelect: false,
           vocabId: 'Projects',
           sourceType: 'mint',
           fieldNames: ['dc_title','dc_description','Identifier',], 
            searchFields: 'dc_title,Identifier', 
            titleFieldArr: ['dc_title'],
            stringLabelToField: 'dc_title',
            publish: {
              onValueUpdate: {
                modelEventSource: 'valueChanges'
              }
            }
          }
        },

Changing the component to a RepeatableVocab allows the value to change.

RecordService.provideUserAccessAndRemovePendingAccess breaks app

Hi,

Found out by doing Generate API Key (Key is saved); RecordService.provideUserAccessAndRemovePendingAccess runs breaking the app because brand is null:

redboxportal_1  | TypeError: Cannot read property 'id' of null
redboxportal_1  |     at RecordTypes.get (/opt/redbox-portal/api/services/RecordTypesService.js:63:57)
redboxportal_1  |     at Object.wrapper [as get] (/opt/redbox-portal/node_modules/@sailshq/lodash/lib/index.js:3275:19)
redboxportal_1  |     at Records.updateMeta (/opt/redbox-portal/api/services/RecordsService.js:114:39)
redboxportal_1  |     at SafeSubscriber.metadataResponse.subscribe.metadata [as _next] (/opt/redbox-portal/api/services/RecordsService.js:447:22)

this.updateMeta(null, oid, metadata);

brand is null when sending updateMeta breaking there after

Permissions are lost after user saves record

When a user saves a record. The permissions on mongo are scraped
Example (text edited)

Before:

    "authorization" : {
        "view" : [
        "nsIdBwb2jgAzVwEBL5guOBiObMcNI7sfJvSxlbrprzyqAnP7cOM8ppQWu4HdtaucUoMm7g6xWjqaPH4TntGHXEWbKgZTylDIFmse1WEOmzBRkQWjcQMd09U5mEqgElkxm9O=="
        ],
        "edit" : [      
      "nsIdBwb2jgAzVwEBL5guOBiObMcNI7sfJvSxlbrprzyqAnP7cOM8ppQWu4HdtaucUoMm7g6xWjqaPH4TntGHXEWbKgZTylDIFmse1WEOmzBRkQWjcQMd09U5mEqgElkxm9O=="
        ],
        "viewRoles" : [
            "Admin",
            "Librarians"
        ],
        "editRoles" : [
            "Admin",
            "Librarians"
        ],
        "editPending" : [],
        "viewPending" : [
            "Moises.Sacal@xxx"
        ]
    }

After:

    "authorization" : {
        "view" : [
            "admin"
        ],
        "edit" : [
            "admin"
        ],
        "viewRoles" : [
            "Admin",
            "Librarians"
        ],
        "editRoles" : [
            "Admin",
            "Librarians"
        ],
        "editPending" : [
            "Moises.Sacal@xxx"
        ],
        "viewPending" : [
            "Moises.Sacal@xxx"
        ]
    }

Transfer of responsibility

Applying transfer of responsibility, correctly sets EditPending/ViewPending email, however when signing on as the user transferred the record does not appear.

new user with records assigned to, makes the portal error at login and crashes it

If a user that logs in via AAF has records in the database associated to their email/permissions, the redbox-portal crashes with 500 error

(In vagrant) Steps to reproduce:

  • deleteDBs (delete all records from database)
    screen shot 2019-02-12 at 10 13 41 am

  • wait for start

  • login as admin

  • create rdmp

  • add FNCI and DataManager someone different than the Admin
    screen shot 2019-02-12 at 10 15 09 am

  • save

  • login with AAF
    portal error

redbox-portal_redboxportal_1 exited with code 1

and in
redbox-storage

2019-02-11 23:17:07,355          ERROR  ebServiceApplication Exception or error caught in server resource
org.restlet.resource.ResourceException: Internal Server Error (500) - The server encountered an unexpected condition which prevented it from fulfilling the request
	at org.restlet.resource.ServerResource.doHandle(ServerResource.java:539) ~[org.restlet-2.3.7.jar:na]
	at org.restlet.resource.ServerResource.get(ServerResource.java:742) ~[org.restlet-2.3.7.jar:na]
	at org.restlet.resource.ServerResource.doHandle(ServerResource.java:617) ~[org.restlet-2.3.7.jar:na]
	at org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:678) ~[org.restlet-2.3.7.jar:na]
	at org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:356) ~[org.restlet-2.3.7.jar:na]
	at org.restlet.resource.ServerResource.handle(ServerResource.java:1043) ~[org.restlet-2.3.7.jar:na]
	at org.restlet.resource.Finder.handle(Finder.java:236) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.doHandle(Filter.java:150) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.handle(Filter.java:197) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Router.doHandle(Router.java:422) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Router.handle(Router.java:639) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.doHandle(Filter.java:150) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.handle(Filter.java:197) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.doHandle(Filter.java:150) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.handle(Filter.java:197) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Router.doHandle(Router.java:422) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Router.handle(Router.java:639) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.doHandle(Filter.java:150) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.handle(Filter.java:197) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.doHandle(Filter.java:150) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.handle(Filter.java:197) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.doHandle(Filter.java:150) [org.restlet-2.3.7.jar:na]
	at org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:140) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.handle(Filter.java:197) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.doHandle(Filter.java:150) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.handle(Filter.java:197) [org.restlet-2.3.7.jar:na]
	at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202) [org.restlet-2.3.7.jar:na]
	at org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:77) [org.restlet-2.3.7.jar:na]
	at org.restlet.Application.handle(Application.java:385) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.doHandle(Filter.java:150) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.handle(Filter.java:197) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Router.doHandle(Router.java:422) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Router.handle(Router.java:639) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.doHandle(Filter.java:150) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.handle(Filter.java:197) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Router.doHandle(Router.java:422) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Router.handle(Router.java:639) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.doHandle(Filter.java:150) [org.restlet-2.3.7.jar:na]
	at org.restlet.routing.Filter.handle(Filter.java:197) [org.restlet-2.3.7.jar:na]
	at org.restlet.engine.CompositeHelper.handle(CompositeHelper.java:202) [org.restlet-2.3.7.jar:na]
	at org.restlet.Component.handle(Component.java:408) [org.restlet-2.3.7.jar:na]
	at org.restlet.Server.handle(Server.java:507) [org.restlet-2.3.7.jar:na]
	at org.restlet.engine.connector.ServerHelper.handle(ServerHelper.java:63) [org.restlet-2.3.7.jar:na]
	at org.restlet.engine.adapter.HttpServerHelper.handle(HttpServerHelper.java:143) [org.restlet-2.3.7.jar:na]
	at org.restlet.ext.servlet.ServerServlet.service(ServerServlet.java:1117) [org.restlet.ext.servlet-2.3.7.jar:na]
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) [servlet-api-2.5-20081211.jar:na]
	at org.mortbay.jetty.servlet.ServletHolder.handle(ServletHolder.java:511) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1166) [jetty-6.1.24.jar:6.1.24]
	at org.apache.tapestry5.TapestryFilter.doFilter(TapestryFilter.java:171) [tapestry-core-5.4.1.jar:na]
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:327) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.servlet.Dispatcher.forward(Dispatcher.java:126) [jetty-6.1.24.jar:6.1.24]
	at org.tuckey.web.filters.urlrewrite.NormalRewrittenUrl.doRewrite(NormalRewrittenUrl.java:195) [urlrewritefilter-3.1.0.jar:3.1.0]
	at org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:159) [urlrewritefilter-3.1.0.jar:3.1.0]
	at org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141) [urlrewritefilter-3.1.0.jar:3.1.0]
	at org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90) [urlrewritefilter-3.1.0.jar:3.1.0]
	at org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:417) [urlrewritefilter-3.1.0.jar:3.1.0]
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) [jetty-6.1.24.jar:6.1.24]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:330) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:118) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:84) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.10.RELEASE.jar:na]
	at com.googlecode.fascinator.portal.security.filter.FascinatorAuthenticationInterceptorFilter.doFilterInternal(FascinatorAuthenticationInterceptorFilter.java:138) [fascinator-portal-1.6-SNAPSHOT-classes.jar:na]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) [spring-web-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:113) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:103) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.authentication.AnonymousAuthenticationFilter.doFilter(AnonymousAuthenticationFilter.java:113) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:154) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:45) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:199) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:57) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) [spring-web-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.10.RELEASE.jar:na]
	at com.googlecode.fascinator.portal.security.filter.FascinatorOwaspInterceptorFilter.doFilterInternal(FascinatorOwaspInterceptorFilter.java:62) [fascinator-portal-1.6-SNAPSHOT-classes.jar:na]
	at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) [spring-web-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:87) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:342) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:192) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:160) [spring-security-web-3.2.10.RELEASE.jar:na]
	at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:237) [spring-web-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:167) [spring-web-3.0.7.RELEASE.jar:3.0.7.RELEASE]
	at org.mortbay.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1157) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.servlet.ServletHandler.handle(ServletHandler.java:388) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.security.SecurityHandler.handle(SecurityHandler.java:216) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.servlet.SessionHandler.handle(SessionHandler.java:182) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.handler.ContextHandler.handle(ContextHandler.java:765) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.webapp.WebAppContext.handle(WebAppContext.java:418) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:230) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.handler.HandlerCollection.handle(HandlerCollection.java:114) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.handler.HandlerWrapper.handle(HandlerWrapper.java:152) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.Server.handle(Server.java:326) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.HttpConnection.handleRequest(HttpConnection.java:542) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.HttpConnection$RequestHandler.headerComplete(HttpConnection.java:926) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.HttpParser.parseNext(HttpParser.java:549) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.HttpParser.parseAvailable(HttpParser.java:212) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.jetty.HttpConnection.handle(HttpConnection.java:404) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:410) [jetty-6.1.24.jar:6.1.24]
	at org.mortbay.thread.QueuedThreadPool$PoolThread.run(QueuedThreadPool.java:582) [jetty-util-6.1.24.jar:6.1.24]
Caused by: com.googlecode.fascinator.api.storage.StorageException: Error; Null PID recieved
	at au.com.redboxresearchdata.fascinator.storage.mongo.MongoDigitalObject.getPayload(MongoDigitalObject.java:282) ~[plugin-storage-mongo-1.0.1-SNAPSHOT.jar:na]
	at com.googlecode.fascinator.redbox.ws.v1.resources.RecordMetadataResource.getMetadataResource(RecordMetadataResource.java:53) ~[redbox-web-service-1.2-SNAPSHOT.jar:na]
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_191]
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_191]
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_191]
	at java.lang.reflect.Method.invoke(Method.java:498) ~[na:1.8.0_191]
	at org.restlet.resource.ServerResource.doHandle(ServerResource.java:523) ~[org.restlet-2.3.7.jar:na]
	... 110 common frames omitted

Handle SSO login failure gracefully when unique email constraint is not met.

Occurs when multiple SSO methods uses the same email. For example, when AAF is/was enabled alongside the institution-specific SSO, and some users had logged in previously using one of the methods.

Logging in with an account that had used the same email will result in a silent request error, without notifying the user. Perhaps create a page to inform the user of the next steps?

@andrewbrazzatti what should be the next steps?

templateDirectoryLocation is not defined

Hi,

I am wondering if you get this issue in your environments.

When it tries to render a forbidden page such as default/rdmp/admin/users when the user is not admin I get an error in rendering referring to:

warn: res.forbidden() :: When attempting to render error page view, an error occured (sending JSON instead).  Details:  { ReferenceError: /opt/redbox-portal/views/default/default/layout.ejs:61
 <div class="container">
  <div class="row" style="position:relative">
  >>  <%- superPartial("/layout/logo.ejs", branding, portal, true) %>
 <div class="col-sm-2 search-box">
<a href="<%= BrandingService.getBrandAndPortalPath(req) %>/getAdvice"><img src="<%= BrandingService.getBrandAndPortalPath(req) %>/images/help.png" alt="<%= TranslationService.t('help-alt-text') %>"/></a>
templateDirectoryLocation is not defined

Browsing:

partialLocation = ViewUtils.resolvePartialPath(value,branding,portal,templateDirectoryLocation,fromTemplate);

found no declaration. or it might come from somewhere else.

Thanks,
Moises

Contributor Component Email Validation

If a validator is enabled in the contributor component a validation is toggled for the email. However, if the user deletes the name field the field does not get blanked after a save.

frank

Bugs in data publishing workflow

Researcher submitted a Data Publication (DP) for publishing. They couldn't see it anymore after submitting for review (bug 1: it should have been viewable, even if not editable). I clicked withdraw and returned it to them for re-editing. Somehow we ended up with one publication in draft and one under reviewing (bug 2: shouldn't be duplicates). I tried to delete the additional publication but the "delete publication" button was not selectable when I was logged in as my local user with admin privileges (Bug 3).

I busted my local user down to researcher privileges and tried to replicate this case. Bug 1 replicated (i.e. as a researcher, after submitting the publication disappeared altogether instead of moving under "reviewing"). Trying to replicate Bug 2 this time ended up with me as researcher unable to see any DPs at all (so no duplicate at least but it should have been visible to me as researcher back in my drafts - Bug 4). I logged in again as admin, and the DP had moved back into drafts: just not viewable to me as researcher. (and this is when I noticed that I could delete the publication when logged in as admin.)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.