Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
60 commits
Select commit Hold shift + click to select a range
256dca0
Admin Pages Only Show Data Associated With Selected Organization (#252)
pmonington Nov 25, 2025
7588a62
Update Help Page Descriptions and Images (#254)
pmonington Dec 1, 2025
7bb4891
Improving Environment Variable Default values (#245)
jacob6838 Dec 30, 2025
1e61a1d
Fix/heatmap message type change (#250)
jacob6838 Dec 31, 2025
aa26a95
fix: add useEffect to fetch RSU last online status in DisplayRsuError…
dmccoystephenson Dec 31, 2025
fa6ab93
Allowing Operators to use RSU Configuration Menu (#262)
jacob6838 Jan 12, 2026
76b9645
Fixing RSU Configuration Menu Permissions (#263)
jacob6838 Jan 13, 2026
fa5b207
Pull message forward configurations directly from RSU when refreshing…
dmccoystephenson Jan 21, 2026
d5eebb9
Deprecating Moove AI Features (#265)
jacob6838 Jan 21, 2026
b029a88
Resolve vulnerabilities by updating webapp dependencies (#268)
dmccoystephenson Jan 26, 2026
ba592ba
Fixing python api port reference (#269)
jacob6838 Jan 28, 2026
c98c868
Migrate to Vite to resolve deprecation warnings (#270)
dmccoystephenson Jan 28, 2026
1e9d615
Intersection API JPA Postgres Tables (#271)
jacob6838 Jan 29, 2026
4646b8a
Fix PSID for Map in rsu_snmpset script (#275)
drewjj Feb 3, 2026
2bc1edd
Adding RSU admin endpoints to IAPI (#276)
jacob6838 Feb 9, 2026
2674245
Admin RSU Webapp Migration to Intersection API (#277)
jacob6838 Feb 11, 2026
41429b6
npm: update jspdf dependency to version 4.1.0 (#282)
dmccoystephenson Feb 11, 2026
8db96b8
Restrict Super User Privilege Changes to Super Users Only (#281)
dmccoystephenson Feb 11, 2026
5797aed
Admin RSU Server Side Searching (#287)
jacob6838 Feb 17, 2026
67c1eb3
Migrating User Auth Endpoint To Webapp (#280)
jacob6838 Feb 17, 2026
22bd44a
Add End-to-End Support for RSU TIM Deposit Eligibility (#279)
dmccoystephenson Feb 23, 2026
481650e
RSU Info Bridge - Initial Setup (#295)
dmccoystephenson Feb 25, 2026
d2b6902
Org Scoped Creds - Add Owner Org To Tables (#288)
dmccoystephenson Feb 27, 2026
8a50f78
RSU Info Bridge - DTO & Endpoints (#296)
dmccoystephenson Mar 2, 2026
bbbe3eb
RSU Info Bridge - OpenAPI Integration (#297)
dmccoystephenson Mar 3, 2026
4c82f82
Admin Create RSU Intersection API Migration (#289)
jacob6838 Mar 9, 2026
6277625
Org Scoped Creds - Enforce Cred Ownership in CRUD Endpoints (#292)
dmccoystephenson Mar 10, 2026
1cefbbe
Fixing Webapp Refresh Absolute Path (#306)
jacob6838 Mar 11, 2026
2ee34c1
feat: add Jib Maven plugin for Docker image building and update READM…
dmccoystephenson Mar 12, 2026
f59aa61
RSU Info Bridge - Data Access Layer (#299)
dmccoystephenson Mar 13, 2026
22f52ef
Updating Webapp Typescript Configuration (#300)
jacob6838 Mar 16, 2026
bb68b51
Intersection API Authentication From Keycloak Token (#290)
jacob6838 Mar 17, 2026
3a5c9fc
Intersection API Email Generation and Templating (#258)
jacob6838 Mar 18, 2026
fdeca18
Migrating Admin User Features to Intersection API (#298)
jacob6838 Mar 24, 2026
ffe071e
Resolving Webapp Unused Imports (#301)
jacob6838 Mar 24, 2026
43c89e6
Fix: iapi integration test failures wsl (#310)
mcook42 Mar 24, 2026
43af2ba
Resolving Webapp General Typescript Errors (#302)
jacob6838 Mar 25, 2026
13a063e
Fix: Webapp Role Handling Consistency Issue (#312)
drewjj Mar 31, 2026
3b2fd5e
Standardizing Webapp User Role Verification (#315)
jacob6838 Apr 6, 2026
677c512
Migrate iapi admin intersection to Spring Boot (#311)
mcook42 Apr 7, 2026
812b213
Adding Enum for IAPI User Role (#308)
jacob6838 Apr 15, 2026
c0860ad
Feat: iapi admin intersection UI (#317)
mcook42 Apr 17, 2026
d084ad9
Feat: migrate iapi admin new intersection API to Spring Boot (#319)
mcook42 Apr 17, 2026
3886dbe
Feat: update iapi admin new intersection UI to use Spring Boot backen…
mcook42 Apr 17, 2026
6445409
CV Manager Firmware Upgrade Endpoint Migration (#309)
drewjj Apr 20, 2026
e01bdae
Migrate SCMS Status Endpoint (#313)
dmccoystephenson Apr 23, 2026
89fa5e2
IAPI Email Generation - Python API Email Types (#285)
jacob6838 Apr 27, 2026
b90910c
Iapi email generation python email sending (#320)
jacob6838 Apr 27, 2026
719e074
Migrating Admin New User Endpoint to Intersection API (#318)
jacob6838 May 11, 2026
c04e11e
feat: replace manual SQL scripts with Flyway-managed migrations (#333)
mcook42 Jun 1, 2026
8859faa
Adding IAPI email generation to addons (#284)
jacob6838 Jun 2, 2026
ba65c25
Intersection API Email Controller Rate Limiting (#327)
jacob6838 Jun 4, 2026
568c813
Intersection API Email Subscription Management Endpoints (#322)
jacob6838 Jun 4, 2026
ab849ff
feat(db): normalize schema constraints, indexes, and JPA annotations …
mcook42 Jun 11, 2026
c50e217
Fixed issue where dismissing a notification returns a 500 error (#337)
John-Wiens Jun 19, 2026
3fac570
Migrate the rsuinfo endpoint to the intersection-api
drewjj Jun 26, 2026
b13e3aa
Implement tests for the Java rsus/info endpoint
drewjj Jun 26, 2026
8686614
Remove deprecated Python implementation
drewjj Jun 26, 2026
e4e3bbb
Update the webapp to use the new rsus/info endpoint
drewjj Jun 26, 2026
d2f0c17
Remove rsuinfo endpoint from the main.py
drewjj Jun 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
144 changes: 133 additions & 11 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ jobs:

build_api:
needs: test_change_limit
if: ${{ always() && !failure() && !cancelled() }}
if: ${{ always() && !cancelled() }}
runs-on: ubuntu-latest
container:
image: python:3.12.2
Expand Down Expand Up @@ -80,13 +80,14 @@ jobs:

webapp:
needs: test_change_limit
if: ${{ always() && !failure() && !cancelled() }}
if: ${{ always() && !cancelled() }}
runs-on: ubuntu-latest
container:
image: node:19.8.1
image: node:22
options: --user root
env:
CI: true
TZ: America/Denver
steps:
- name: Checkout ${{ github.event.repository.name }}
uses: actions/checkout@v4
Expand All @@ -96,9 +97,7 @@ jobs:
run: |
# Navigate to the webapp directory and perform necessary setup
cd $GITHUB_WORKSPACE/webapp
npm install -g nodemon
npm init -y
npm install --force
npm ci

# Run tests with coverage and suppress failures
npm test -- --coverage
Expand All @@ -116,7 +115,7 @@ jobs:

build_keycloak_provider:
needs: test_change_limit
if: ${{ always() && !failure() && !cancelled() }}
if: ${{ always() && !cancelled() }}
runs-on: ubuntu-latest
container:
image: maven:3.9.9-eclipse-temurin-21
Expand All @@ -142,17 +141,54 @@ jobs:
name: keycloak-user-provider-test-results
path: $GITHUB_WORKSPACE/resources/keycloak/custom-user-provider/target/surefire-reports

build_rsu_info_bridge:
needs: test_change_limit
if: ${{ always() && !cancelled() }}
runs-on: ubuntu-latest
steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Set up JDK 25
uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: "25"

- name: Cache Maven packages
uses: actions/cache@v4
with:
path: ~/.m2
key: ${{ runner.os }}-maven-rsu-info-bridge-${{ hashFiles('**/services/rsu-info-bridge/pom.xml') }}
restore-keys: |
${{ runner.os }}-maven-rsu-info-bridge-
${{ runner.os }}-maven-

- name: Build and Test with Maven
run: |
cd $GITHUB_WORKSPACE/services/rsu-info-bridge
./mvnw clean verify

- name: Archive Test Results
uses: actions/upload-artifact@v4
with:
name: rsu-info-bridge-test-results
path: $GITHUB_WORKSPACE/services/rsu-info-bridge/target/surefire-reports

build_intersection_api:
needs: test_change_limit
if: ${{ always() && !failure() && !cancelled() }}
if: ${{ always() && !cancelled() }}
runs-on: ubuntu-latest
container:
image: maven:3.9.9-eclipse-temurin-22
options: --user root
steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Set up JDK 22
uses: actions/setup-java@v4
with:
distribution: "temurin"
java-version: "22"

- name: Cache Maven packages
uses: actions/cache@v4
with:
Expand Down Expand Up @@ -190,6 +226,92 @@ jobs:
run: |
rm -rf $GITHUB_WORKSPACE/services/intersection-api/api/target

build_flyway_image:
needs: [test_change_limit, validate_migrations]
if: ${{ !cancelled() && needs.validate_migrations.result == 'success' }}
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
steps:
- name: Checkout Repository
uses: actions/checkout@v4

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Log in to GitHub Container Registry
if: github.event_name == 'push'
uses: docker/login-action@v3
with:
registry: ghcr.io
username: ${{ github.actor }}
password: ${{ secrets.GITHUB_TOKEN }}

- name: Extract image metadata
id: meta
uses: docker/metadata-action@v5
with:
images: ghcr.io/${{ github.repository_owner }}/cvmanager-flyway
tags: |
type=sha
type=ref,event=branch

- name: Build and push Flyway image
uses: docker/build-push-action@v6
with:
context: resources/db/
file: resources/db/Dockerfile
push: ${{ github.event_name == 'push' }}
tags: ${{ steps.meta.outputs.tags }}
labels: ${{ steps.meta.outputs.labels }}

validate_migrations:
needs: test_change_limit
if: ${{ always() && !cancelled() }}
runs-on: ubuntu-latest
services:
postgres:
image: postgis/postgis:15-3.4
env:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
ports:
- 5432:5432
options: >-
--health-cmd pg_isready
--health-interval 5s
--health-timeout 5s
--health-retries 10
steps:
- name: Checkout ${{ github.event.repository.name }}
uses: actions/checkout@v4

- name: Run Flyway migrations
run: |
docker run --rm \
--network host \
-v "$GITHUB_WORKSPACE/resources/db/migration:/flyway/sql" \
-v "$GITHUB_WORKSPACE/resources/db/flyway.toml:/flyway/conf/flyway.toml" \
flyway/flyway:10-alpine \
-url=jdbc:postgresql://localhost:5432/postgres \
-user=postgres \
-password=postgres \
migrate

- name: Verify migration state
run: |
docker run --rm \
--network host \
-v "$GITHUB_WORKSPACE/resources/db/migration:/flyway/sql" \
-v "$GITHUB_WORKSPACE/resources/db/flyway.toml:/flyway/conf/flyway.toml" \
flyway/flyway:10-alpine \
-url=jdbc:postgresql://localhost:5432/postgres \
-user=postgres \
-password=postgres \
info

sonar:
if: github.event.pull_request.base.repo.owner.login == 'usdot-jpo-ode'
needs: [build_api, webapp]
Expand Down
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -9,3 +9,5 @@ htmlcov
.pytest_cache
local_blob_storage
services/coverage.xml
.idea/**
**/*.iml
2 changes: 1 addition & 1 deletion .gitmodules
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
[submodule "jpo-utils"]
path = jpo-utils
url = https://github.com/usdot-jpo-ode/jpo-utils
url = https://github.com/CDOT-CV/jpo-utils
branch = master
35 changes: 32 additions & 3 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,23 @@
"stopOnEntry": false,
"program": "${workspaceRoot}/services/api/src/main.py",
"env": {
"FLASK_APP": "${workspaceRoot}/services/api/src/main.py"
"PYTHONPATH": "${workspaceRoot}/services",
"FLASK_APP": "${workspaceRoot}/services/api/src/main.py",
"FLASK_RUN_PORT": "8081",
"PG_DB_HOST": "localhost:5432",
"PG_DB_USER": "postgres",
"PG_DB_PASS": "postgres",
"PG_DB_NAME": "postgres",
"MONGO_DB_URI": "mongodb://ode:replace-me@localhost:27017/?directConnection=true&authSource=admin",
"MONGO_DB_NAME": "CV",
"MONGO_PROCESSED_BSM_COLLECTION_NAME": "processed_bsm",
"MONGO_PROCESSED_PSM_COLLECTION_NAME": "processed_psm",
"ENABLE_WZDX_FEATURES": "false",
"CORS_DOMAIN": "*",
"KEYCLOAK_ENDPOINT": "http://localhost:8084",
"KEYCLOAK_REALM": "cvmanager",
"KEYCLOAK_API_CLIENT_ID": "cvmanager-api",
"KEYCLOAK_API_CLIENT_SECRET_KEY": "keycloak-secret-key"
},
"args": ["run"],
"envFile": "${workspaceRoot}/services/api/.env",
Expand All @@ -48,13 +64,26 @@
"mainClass": "us.dot.its.jpo.ode.api.ConflictApiApplication",
"projectName": "intersection-api",
"envFile": "${workspaceFolder}/.env",
"preLaunchTask": "run-docker-compose-intersection-no-api"
"preLaunchTask": "run-intersection-no-api",
"env": {
"AUTH_SERVER_URL": "http://localhost:8084",
"KAFKA_BROKER_IP": "localhost",
"DB_HOST_IP": "localhost",
"PG_DB_PASS": "postgres",
"POSTGRES_SERVER_URL": "jdbc:postgresql://localhost:5432",
"CM_SERVER_URL": "http://localhost:8082",
"UNSUBSCRIBE_SECRET_KEY": "b5f9070ca58d4576ea6a2d8d4c1b97caf8abc2554198f8f9acf86d0d31a52a52",
"INTERSECTION_SMTP_USERNAME": "admin",
"INTERSECTION_SMTP_PASSWORD": "password",
"INTERSECTION_SMTP_AUTH": "true",
"INTERSECTION_SMTP_STARTTLS": "false"
}
}
],
"compounds": [
{
"name": "Debug Solution",
"configurations": ["Python: Flask", "Launch web app with Intersection Data"]
"configurations": ["Python: Flask", "Launch web app with Intersection API"]
}
]
}
14 changes: 9 additions & 5 deletions .vscode/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,9 @@
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.formatOnSave": true
},
"[html]": {
"editor.formatOnSave": false
},
"cSpell.words": [
"assertj",
"authpriv",
Expand Down Expand Up @@ -52,6 +55,7 @@
"dont",
"drivername",
"Dsrc",
"dtos",
"formik",
"fromaddr",
"Fwding",
Expand All @@ -78,8 +82,6 @@
"MESSAGETYPE",
"millis",
"mongosh",
"moove",
"mooveai",
"msgfwd",
"multidict",
"Multivalued",
Expand All @@ -88,6 +90,7 @@
"OIDC",
"OIDCID",
"pgdb",
"pgquery",
"PGSQL",
"postgis",
"pythjon",
Expand All @@ -106,8 +109,8 @@
"rwdata",
"rxtxfwd",
"SASL",
"secretmanager",
"Scms",
"secretmanager",
"SNMP",
"snmpcredential",
"snmperrorcheck",
Expand All @@ -120,13 +123,13 @@
"subquery",
"svcs",
"TABLENAME",
"Thymeleaf",
"timefield",
"toaddrs",
"txrxmsg",
"upgrader",
"usdot",
"usdotjpoode",
"userauth",
"utctimestamp",
"writedb",
"WSMP",
Expand All @@ -153,5 +156,6 @@
"json",
"jsonc",
"markdown"
]
],
"java.debug.settings.onBuildFailureProceed": true
}
Loading
Loading