Skip to content

Conversation

@ChristianMUG
Copy link

Getting the newest branch from openspecimen

…rticipant medical identifiers.

1. Nullify all the existing MRNs with empty/blank strings. Otherwise, unique constraint will fail
   (1, '') and (1, '') are the same for DB. But for app, they are different PMIs with the same site.

   Converted above tuples to (1, null) and (1, null)

2. Oracle: Added function based unique index. For Oracle, (1, null) and (1, null) are the same.

3. Fixed the API to trim whitespaces from the MRN.
The new column will track the rule that was used for printing the labels.

Fixed the command files API to pick only those files generated by the rule
instead of all files in the print directory.

The filename format of the label/command file is changed from

<object_type>_<tstmp>_<counter>_<copy>.txt

to

<object_type>_<rule_id>_<tstmp>_<counter>_<copy>.txt
…nstraint changeset.

Need to remove the duplicate tuples.
…c692c787a4f

Re-enable the participant (site, MRN) unique constraint changeset.
…insensitive) dropdown values are created.

1. Added an unique constraint on PV (attribute name, value) columns.

2. Oracle: Added function based unique index on PV (attribute name, lower(value)) columns.
… selected or not,

display CP custom fields when the "Collection Protocol" form is selected for adding filter.
…box that no

longer have direct access to Java classes like Runtime etc
is not displayed when searching or selecting a new PV.
…sing

the lookup key (form_id, record_id)

The materialised table is kept in sync with the actual data table using
triggers.

The problem with the original solution of directly looking up in the data
table using record ID was that the record ID is not unique and may be
repeated for different forms.
users create import jobs either from the CPs list view or participants
list view.
… the

specimen actions on specimens selected from the result views.
Removed the extra "\n" that is added when both the comments and reason fields are empty.
Added support for export user profile form records as well.
order, container, shipment related specimens tab.
… API interaction object.

These variables can be used to specify the field on which the list should be sorted
and sort direction - asc or desc
1. Processor metrics - CPU utilisation etc
2. File descriptor metrics - count of open files etc
3. Uptime
4. Count of classes loaded
5. JVM threads - busy, idle, waiting, blocked
6. JVM memory - heap and buffer
7. JVM GC - GC details
8. Disk space usage
9. Error rates
10. HTTP requests - by method, and module
…ocess

The date only fields are exported and imported using the system or user
selected date formats.
…ected from

the specimen actions button of the cart view.
back to the specimen object to ensure compatibility with existing label
formats and rules.

The objects are kind of proxy to the collection and received attributes of
the main specimen object.

Removed the migration script.

With this change, both the new and old variable naming convention can be
used in the labels generation.
…cked ones.

1) Record the API call even before working on it with status = 000
2) After completion of the API call, record its response status and end time
3) This approach helps to trace the thread leaks, stuck API calls etc
…back to the

system level format for visit names generation.

The API will not bother about whether the system level format is set or not as long as
there is a format specified at the CP level.

When no format is specified at both CP and system level, an error is raised.
…late

(more granular) instead of module wise (coarse).
services using the requirement template.

As before, there is no support for partial update of specimen requirement.
…han 90 days (by default).

Users can configure the scheduled job to specify a different retention period

For example:
apiLogsRetentionDays=100
…ecimen process.

rest/ng/metrics/live-heap
rest/ng/metrics/threads-dump
… date in yyyy-MM-dd format.

The problem was - for both date only and date & time fields, the UI was initialising
the default value to milliseconds elapsed since Epoch. While this was correct for
date & time fields, the API rejected it as invalid value for the date only fields
because it represented a moment in the time rather than the specific day start/boundary.
The problem was - the form designer was a separate standalone VueJS based
UI module. It had its own set of reusable components like toasts among
others. When it was merged with the new VueJS based OpenSpecimen UI,
the toasts hook was not removed. As a result, the same error message
appeared twice.
…dating

forms via JSON based input payment or XML based file import.

This ensures the same access control rules are applied in both the cases.
until a deletion confirmation is received from the backend / API.
1) When no files are selected or validation fails and
2) the file is uploaded asynchronously to the server
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.
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.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants