Update Openspecimen to 6.3RC8#1
Open
ChristianMUG wants to merge 3484 commits into
Open
Conversation
…ecked out from a dimensionless container.
1) When no files are selected or validation fails and 2) the file is uploaded asynchronously to the server
time of unarchive to the container API.
when the message is processed successfully.
listing of containers based on the restrictions on the leaf node containers. Used virtual columns to auto compute free spaces in the container.
500 storage container objects in-memory irrespective of the depth and width of the container tree/hierarchy.
…m both container and specimen perspective. Earlier the API was clearing the position only from the container perspective. This was causing the position to be resaved by the specimen resulting in stale update error.
Supports 2 OAuth workflows: 1. Client Credentials Flow: The client obtains JWT by authenticating itself with the OAuth provider (without involving OpenSpecimen) and then uses the JWT as a Bearer token for subsequent communication with OpenSpecimen (invoking APIs). 2. Authorization Code Flow using PKCE: In this case, OpenSpecimen redirects (human) users to the respective OAuth providers in order to get consents for sharing their account details (openid) for accessing OpenSpecimen resources and APIs. 3. JWT Validation: OpenSpecimen validates and resolves the JWT to a valid user. The validation involves ensuring the token is: 3.1: Issued by an OAuth provider registered with OpenSpecimen 3.2: Not expired 3.3: Intended for accessing OpenSpecimen The public keys required for verification of the JWT signature are fetched from the respective OAuth providers at periodic intervals and cached in-memory. The resolution includes mapping the received subject claims to the user record in OpenSpecimen database by performing lookup on the login_name attribute. Tested the implementations using Auth0 and Google OAuth providers. TODO: Okta and Azure AD.
…r logout or session timeout/expiry.
commit 88a6881 Author: Vinayak Pawar <vinayakapawar@gmail.com> Date: Sat Jan 24 17:12:10 2026 +0530 Invalidate any active (servlet) session and delete all cookies on user logout or session timeout/expiry.
to facilitate faster cancellation of the reservations. A side effect of this is only the required positions are locked, which helps in performing concurrent actions on other positions.
to facilitate faster cancellation of the reservations. A side effect of this is only the required positions are locked, which helps in performing concurrent actions on other positions.
of CPR visits instead of using the session cached CPR object's visits list. The visits list is required to find the relevant visit to use for updating and creating specimens underneath it.
…r a given session) in cache. This ensures last API call time is used to determine whether the session is active or not.
… are deleted at regular intervals.
… not appear in the dropdown of other rows of the sub-form. DP add/edit UI fixes 1. Institute is made mandatory 2. Selected institute does not appear in institute dropdown of other distributing sites row 3. Filter the distributing sites by the selected institute. Participant add/edit UI fixes 1. Selected MRN site does not appear in site dropdown of other MRNs To use this filtering capability, the field configuration should include the following attribute "unique": "cpr.participant.pmis.siteName"
update the token access time without a token will result in NPE. Fixed the API filter to by pass updating the token access time when no token is present.
1) Participant, Visit, and Specimen overview/detail, edit page header - left and right titles 2) Specimen description
…d consent documents).
When event point is specified, ensure event point unit is mandatory Ensure the sorting of events do not break/crash when event point unit is not specified.
1. Display freezer utilisation using reusable tiles and legend dropdown 2. Load up to 20 freezers at a time with View More 3. Use a flexible layout that fits available tiles per row 4. Reuse utilisation components in freezer and child container maps 5. Add a search interface for displaying freezers by name and site
…ion protocol groups
1. Update CPG API to prevent CP level workflow customisations from being overwritten
when workflows are uploaded or updated at the CPG level.
2. Track whether a CP's workflows are inherited from its CPG or customised at the
CP level.
3. When a CP is associated with a group
3.1. CPs with workflows matching with that of CPG are treated as inherited.
3.2. CPs with different workflows are treated as customised.
3.3. CPG workflow updates are propagated only to CPs that inherit CPG workflows.
4. When a CP is added to a group
4.1. If it has no workflow config, it inherits the CPG workflows and
is marked inherited.
4.2. If it has existing workflows matching that of CPG, it is marked inherited
without rewriting workflows.
4.3. If it has different workflows then those workflows are preserved and
marked customised.
5. When a CP is removed from a group, the inheritance state is cleared (=null).
6. Add a "Workflows" source column in the CPG and CP overview to show whether
CP's workflows are inherited or customised.
7. Add a "Use Group Workflows" row action for customised CPs, allowing CPG admins to
replace CP level workflows with CPG workflows and resume inheritance.
8. Add the same "Use Group Workflows" menu action on the CP overview page when the
CP belongs to a group and has customised workflows.
9. Add migration to initialise workflow inheritance state for existing CPs and CPGs.
10. Add normalised workflow comparison utility
10.1. Compares workflow sections structurally
10.2. Ignores field ordering, whitespaces
10.3. Stops on first detected difference
(Ask for a gift if you have read till the end. The first person to send the email
will receive the gift)
Use Types.NUMERIC when setting the nullable workflow inheritance flag. Oracle stores boolean values as NUMBER(1,0) and does not support the JDBC BOOLEAN type.
Dynamic extensions library from commit #: 98b97168574f23622fb662b1fc3e026cf57a8be3
Use canonical and friendly attribute names published in SAML assertions to resolve user login names and email addresses.
Permit metadata and collection status updates, form and event changes, shipping, and storage transfers for reserved specimens. Continue to prohibit child and pooled specimen creation, cross-protocol distribution, disposal, and deletion.
…l event Add a migration script to close redundant/duplicate active disposal events. After migration, no active or no deleted specimens will have any active disposal events. The closed specimens will retain only the latest active disposal event. Report closed specimens that do no have an active disposal event. Soft delete disposal events when reopening specimens.
Add the opsmn_domain_api_only auth setting to restrict local openspecimen domain access to API users only. When enabled, non-API local domain users cannot 1) sign in 2) access APIs 3) be created/updated in the local domain. Hide the local domain from UI sign-in/sign-up flows Notify super admins when the setting changes. Block API users from using the UI app (irrespective of setting)
Use a shared DAO helper to read named native SQL from Hibernate mappings without losing named parameters. This fixes form records export failures caused by parameters such as formId and entityName being replaced with JDBC placeholders. Populate the exported form record status and activity status columns.
Resolve the input specimen disposal reason against the disposal reason permissible values and update the event row with the corresponding PV ID.
Use event-specific ID message keys in bulk event import schemas so exported specimen event form records can be imported back without losing the event ID.
… reported by Snyk.
…ties reported by Snyk.
Add a text cell renderer that splits values into plain text and URL segments. Render plain text as spans and URL segments as anchors that open in a new tab.
…Enter Add an opt-in dropdown option to ignore Enter key presses in the filter input. Enable it for the storage position container dropdown so scanner entered barcodes can finish filtering before users select a shortlisted container.
Use the CP group relationship directly when building query restrictions instead of expanding the group into a large IN clause of CP IDs. Update the CP query form to include a cpGroup sub form mapped to OS_CP_GROUPS via CP_GROUP_ID. The new sub form exposes CP Group ID and CP Group Name fields. This allows restricting the result set by CP group using the AQL filter expression CollectionProtocol.cpGroup.id Important Note: The restriction builder no longer performs early existence or access validation for the input CP or CP group IDs. Invalid, inaccessible, or mismatched CP/group IDs are handled by the generated query predicates and existing access restrictions, resulting in an empty result set instead of an explicit validation error.
1. Users can search fields by label or field id/name. 2. Matching fields are shown with their parent form/subform hierarchy. 3. Matching paths are expanded automatically. 4. Users can select or unselect matching fields from the filtered tree. 5. Existing selection hidden by the active search are preserved. 6. Column ordering is disabled while search filtering is active. 7. Clearing search restores the full tree and normal ordering.
1. Add the primarySpecimen sub-form with the following fields - primary specimen ID, label, and barcode. 2. Hyperlink each of the primary specimen fields to navigate to the relevant specimen page. 3. For consistency, add barcode field to the parentSpecimen sub-form and hyperlink it. 4. Hyperlink the current specimen barcode.
When a reporting data source is configured, ad-hoc queries run through the query module and scheduled query tasks are executed against it. Otherwise, queries continue to use the default application data source. This decouples data entry workloads from query/reporting workloads.
…rds are associated with their collection protocol prior to validating custom fields. Add guard rails to prevent null-pointer dereferencing when CPs do not exist.
…ted children Avoids Hibernate's "object references transient instance" errors
Return an appropriate HTTP status code and error message when an API request is malformed or invalid.
Fix endpoint declarations to ensure URL path variables correctly map to their corresponding function arguments.
Provide utility methods to parse and convert JSON input strings or InputStreams directly into target Java objects.
…an true and false respectively. Dynamic Extensions Commit #6b7e78f214c905e30dc56eb03d5e8a1f749e4de6
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Getting the newest branch from openspecimen