Skip to content
Closed
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
18 changes: 18 additions & 0 deletions RELEASE_NOTES.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,24 @@
<!-- BEGIN RELEASE_NOTES.MD BLOCK -->
# Feature Release

### **(v0.229.063)**

#### Bug Fixes

* **Admin Plugins Modal Load Fix**
* Fixed issue where Admin Plugins modal would fail to load when using sidenav navigation.
* **Root Cause**: JavaScript code attempted to access DOM elements that didn't exist in sidenav navigation.
* **Solution**: Corrected DOM element checks to ensure compatibility with both top-nav and sidenav layouts.
* **User Experience**: Admins can now access the Plugins modal regardless of navigation style.
* (Ref: `admin_plugins.js`, DOM existence checks)

* **Banner Text Color Accessibility Enhancement**
* Added configurable text color option for the top banner to ensure proper contrast and readability alongside the existing banner background color setting.
* **Accessibility Issue**: Banner text was previously locked to a default color, which could result in poor contrast ratios when admins selected certain background colors, violating WCAG accessibility guidelines.
* **Solution**: Introduced `banner_text_color` setting in Admin Settings alongside `banner_color`, allowing admins to specify both background and foreground colors for optimal readability.
* **Benefits**: Ensures WCAG-compliant contrast ratios, provides full control over banner appearance, improves readability for all users including those with visual impairments.
* (Ref: `admin_settings.html`, `route_frontend_admin_settings.py`, banner color configuration, accessibility compliance)

### **(v0.229.062)**

#### Bug Fixes
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -131,6 +131,7 @@
"speech_service_key": "",
"classification_banner_enabled": true,
"classification_banner_text": "Classification",
"classification_banner_text_color": "#ffffff",
"classification_banner_color": "#ffc107",
"enable_dark_mode_default": false,
"enable_left_nav_default": true,
Expand Down
6 changes: 3 additions & 3 deletions application/single_app/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@
EXECUTOR_TYPE = 'thread'
EXECUTOR_MAX_WORKERS = 30
SESSION_TYPE = 'filesystem'
VERSION = "0.229.062"
VERSION = "0.229.098"


SECRET_KEY = os.getenv('SECRET_KEY', 'dev-secret-key-change-in-production')
Expand Down Expand Up @@ -121,9 +121,9 @@
CLIENTS_LOCK = threading.Lock()

ALLOWED_EXTENSIONS = {
'txt', 'pdf', 'docx', 'xlsx', 'xls', 'csv', 'pptx', 'html', 'jpg', 'jpeg', 'png', 'bmp', 'tiff', 'tif', 'heif', 'md', 'json',
'txt', 'pdf', 'doc', 'docm', 'docx', 'xlsx', 'xls', 'xlsm','csv', 'pptx', 'html', 'jpg', 'jpeg', 'png', 'bmp', 'tiff', 'tif', 'heif', 'md', 'json',
'mp4', 'mov', 'avi', 'mkv', 'flv', 'mxf', 'gxf', 'ts', 'ps', '3gp', '3gpp', 'mpg', 'wmv', 'asf', 'm4a', 'm4v', 'isma', 'ismv',
'dvr-ms', 'wav'
'dvr-ms', 'wav', 'xml', 'yaml', 'yml', 'log'
}
ALLOWED_EXTENSIONS_IMG = {'png', 'jpg', 'jpeg'}
MAX_CONTENT_LENGTH = 5000 * 1024 * 1024 # 5000 MB AKA 5 GB
Expand Down
25 changes: 22 additions & 3 deletions application/single_app/functions_authentication.py
Original file line number Diff line number Diff line change
Expand Up @@ -245,15 +245,34 @@ def get_valid_access_token_for_plugins(scopes=None):

def get_video_indexer_account_token(settings, video_id=None):
"""
For ARM-based VideoIndexer accounts:
Get Video Indexer access token using managed identity authentication.

This function authenticates with Azure Video Indexer using the App Service's
managed identity. The managed identity must have Contributor role on the
Video Indexer resource.

Authentication flow:
1. Acquire ARM access token using DefaultAzureCredential (managed identity)
2. Call ARM generateAccessToken API to get Video Indexer access token
3. Use Video Indexer access token for all API operations
"""
from functions_debug import debug_print

debug_print(f"[VIDEO INDEXER AUTH] Starting token acquisition using managed identity for video_id: {video_id}")
debug_print(f"[VIDEO INDEXER AUTH] Azure environment: {AZURE_ENVIRONMENT}")

return get_video_indexer_managed_identity_token(settings, video_id)

def get_video_indexer_managed_identity_token(settings, video_id=None):
"""
For ARM-based VideoIndexer accounts using managed identity:
1) Acquire an ARM token with DefaultAzureCredential
2) POST to the ARM generateAccessToken endpoint
3) Return the account-level accessToken
"""
from functions_debug import debug_print

debug_print(f"[VIDEO INDEXER AUTH] Starting token acquisition for video_id: {video_id}")
debug_print(f"[VIDEO INDEXER AUTH] Azure environment: {AZURE_ENVIRONMENT}")
debug_print(f"[VIDEO INDEXER AUTH] Using managed identity authentication")

# 1) ARM token
if AZURE_ENVIRONMENT == "usgovernment":
Expand Down
2 changes: 1 addition & 1 deletion application/single_app/functions_content.py
Original file line number Diff line number Diff line change
Expand Up @@ -172,7 +172,7 @@ def extract_table_file(file_path, file_ext):
try:
if file_ext == '.csv':
df = pandas.read_csv(file_path)
elif file_ext in ['.xls', '.xlsx']:
elif file_ext in ['.xls', '.xlsx', '.xlsm']:
df = pandas.read_excel(file_path)
else:
raise ValueError("Unsupported file extension for table extraction.")
Expand Down
Loading