Skip to content
Merged
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
1 change: 1 addition & 0 deletions .github/workflows/broken-access-control-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
pull_request:
branches:
- Development
- feature/admin-settings-ia # temporary: Admin Settings IA staging branch
paths:
- 'application/**/*.py'
- 'scripts/check_broken_access_control.py'
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
push:
branches: [ "Development" ]
pull_request:
branches: [ "Development" ]
branches: [ "Development", "feature/admin-settings-ia" ]
workflow_dispatch:

jobs:
Expand Down Expand Up @@ -58,17 +58,17 @@
# your codebase is analyzed, see https://docs.github.com/en/code-security/code-scanning/creating-an-advanced-setup-for-code-scanning/codeql-code-scanning-for-compiled-languages
steps:
- name: Checkout repository
uses: actions/checkout@v4

Check warning on line 61 in .github/workflows/codeql.yml

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Low - GitHub Action is version-tagged rather than pinned to an immutable commit SHA. Recommendation%3A Confirm this tag is an accepted repository convention or pin to a reviewed commit SHA.

# Add any setup steps before running the `github/codeql-action/init` action.
# This includes steps like installing compilers or runtimes (`actions/setup-node`
# or others). This is typically only required for manual builds.
# - name: Setup runtime (example)
# uses: actions/setup-example@v1

Check warning on line 67 in .github/workflows/codeql.yml

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Low - GitHub Action is version-tagged rather than pinned to an immutable commit SHA. Recommendation%3A Confirm this tag is an accepted repository convention or pin to a reviewed commit SHA.

# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v4

Check warning on line 71 in .github/workflows/codeql.yml

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Low - GitHub Action is version-tagged rather than pinned to an immutable commit SHA. Recommendation%3A Confirm this tag is an accepted repository convention or pin to a reviewed commit SHA.
with:
languages: ${{ matrix.language }}
build-mode: ${{ matrix.build-mode }}
Expand Down Expand Up @@ -98,6 +98,6 @@
exit 1

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4

Check warning on line 101 in .github/workflows/codeql.yml

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Low - GitHub Action is version-tagged rather than pinned to an immutable commit SHA. Recommendation%3A Confirm this tag is an accepted repository convention or pin to a reviewed commit SHA.
with:
category: "/language:${{matrix.language}}"
1 change: 1 addition & 0 deletions .github/workflows/malicious-pr-security-review.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
pull_request:
branches:
- Development
- feature/admin-settings-ia # temporary: Admin Settings IA staging branch
paths:
- 'application/**'
- 'deployers/**'
Expand Down Expand Up @@ -68,12 +69,12 @@

steps:
- name: Checkout code
uses: actions/checkout@v4

Check warning on line 72 in .github/workflows/malicious-pr-security-review.yml

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Low - GitHub Action is version-tagged rather than pinned to an immutable commit SHA. Recommendation%3A Confirm this tag is an accepted repository convention or pin to a reviewed commit SHA.
with:
fetch-depth: 0

- name: Set up Python
uses: actions/setup-python@v5

Check warning on line 77 in .github/workflows/malicious-pr-security-review.yml

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Low - GitHub Action is version-tagged rather than pinned to an immutable commit SHA. Recommendation%3A Confirm this tag is an accepted repository convention or pin to a reviewed commit SHA.
with:
python-version: '3.12'

Expand Down Expand Up @@ -140,7 +141,7 @@

- name: Upload review report
if: always()
uses: actions/upload-artifact@v4

Check warning on line 144 in .github/workflows/malicious-pr-security-review.yml

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Low - GitHub Action is version-tagged rather than pinned to an immutable commit SHA. Recommendation%3A Confirm this tag is an accepted repository convention or pin to a reviewed commit SHA.
with:
name: malicious-pr-security-review
path: artifacts/malicious-pr-security-review.md
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/python-syntax-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ on:
branches:
- main
- Development
- feature/admin-settings-ia # temporary: Admin Settings IA staging branch
paths:
- 'application/single_app/**.py'
- '.github/workflows/python-syntax-check.yml'
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/swagger-route-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ on:
- main
- Development
- Staging
- feature/admin-settings-ia # temporary: Admin Settings IA staging branch
paths:
- 'application/single_app/**/*.py'
- 'scripts/check_swagger_routes.py'
Expand Down
1 change: 1 addition & 0 deletions .github/workflows/xss-sink-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ on:
pull_request:
branches:
- Development
- feature/admin-settings-ia # temporary: Admin Settings IA staging branch
paths:
- 'application/**/*.js'
- 'application/**/*.html'
Expand Down
2 changes: 1 addition & 1 deletion application/single_app/config.py
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@
EXECUTOR_TYPE = 'thread'
EXECUTOR_MAX_WORKERS = 30
SESSION_TYPE = 'filesystem'
VERSION = "0.260.006"
VERSION = "0.260.007"
IS_DEVELOPMENT = is_development_env_enabled()

SESSION_COOKIE_SAMESITE = os.getenv('SESSION_COOKIE_SAMESITE', 'Lax')
Expand Down
91 changes: 9 additions & 82 deletions application/single_app/static/js/admin/admin_sidebar_nav.js
Original file line number Diff line number Diff line change
Expand Up @@ -135,13 +135,14 @@
});
});

// Set the initial active tab (General) - but only if no tab is already active
// Set the initial active tab - but only if no tab is already active.
// Latest Features is deliberately excluded so it never opens by default.
const activeTab = document.querySelector('.admin-nav-tab.active, .admin-nav-section.active');
if (!activeTab) {
const firstTab = document.querySelector('.admin-nav-tab[data-tab="latest-features"]');
const firstTab = document.querySelector('.admin-nav-tab[data-tab="general"]');
if (firstTab) {
firstTab.classList.add('active');
showAdminTab('latest-features');
showAdminTab('general');
}
} else {
console.log('initAdminSidebarNav - Found existing active tab, preserving current state:', activeTab.getAttribute('data-tab'));
Expand Down Expand Up @@ -179,91 +180,17 @@
window.showAdminTab = showAdminTab;

function scrollToSection(sectionId) {
// Map section IDs to actual element IDs/classes in the admin settings
// Resolve a sidebar data-section value to the element it should scroll to.
const sectionMap = {
// Only genuine aliases belong here. Any sidebar data-section value
// that already matches its element id resolves through the
// `sectionMap[sectionId] || sectionId` fallback below.
'gpt-config': 'gpt-configuration',
'embeddings-config': 'embeddings-configuration',
'embeddings-config': 'embeddings-configuration',

Check warning on line 189 in application/single_app/static/js/admin/admin_sidebar_nav.js

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Important - Changed line contains AI, plugin, agent, or workspace boundary marker. Recommendation%3A Check whether prompts, chat history, uploaded documents, embeddings, citations, settings, or identity can cross a new boundary.
'image-config': 'image-generation-configuration',
'multi-endpoint-configuration': 'multi-endpoint-configuration',
'document-action-capabilities-card': 'document-action-capabilities-card',
'agents-config': 'agents-configuration',
'agent-template-approvals-section': 'agent-template-approvals-section',
'actions-config': 'actions-configuration',
// Governance tab sections
'governance-feature-toggles-section': 'governance-feature-toggles-section',
'governance-mcp-destination-section': 'governance-mcp-destination-section',
'governance-inbound-mcp-section': 'governance-inbound-mcp-section',
'governance-feature-policies-section': 'governance-feature-policies-section',
'governance-item-policies-section': 'governance-item-policies-section',
// General tab sections
'branding-section': 'branding-section',
'home-page-text-section': 'home-page-text-section',
'appearance-section': 'appearance-section',
'classification-banner-section': 'classification-banner-section',
'ai-notice-section': 'ai-notice-section',
'terms-of-use-section': 'terms-of-use-section',
'custom-pages-section': 'custom-pages-section',
'external-links-section': 'external-links-section',
'health-check-section': 'health-check-section',
'system-settings-section': 'system-settings-section',
'control-center-admin-section': 'control-center-admin-section',
// Control Center tab sections
'control-center-auto-refresh-section': 'control-center-auto-refresh-section',
'control-center-overview-section': 'control-center-overview-section',
// Logging tab sections
'application-insights-section': 'application-insights-section',
'debug-logging-section': 'debug-logging-section',
'file-processing-logs-section': 'file-processing-logs-section',
// Scale tab sections
'redis-cache-section': 'redis-cache-section',
'redis-monitoring-section': 'redis-monitoring-section',
'conversation-cache-section': 'conversation-cache-section',
'document-access-index-section': 'document-access-index-section',
'cosmos-maintenance-section': 'cosmos-maintenance-section',
'cosmos-throughput-section': 'cosmos-throughput-section',
'cosmos-throughput-metrics-table-section': 'cosmos-throughput-metrics-table-section',
'front-door-section': 'front-door-section',
// Workspaces tab sections
'personal-workspaces-section': 'personal-workspaces-section',
'group-workspaces-section': 'group-workspaces-section',
'public-workspaces-section': 'public-workspaces-section',
'file-sharing-section': 'file-sharing-section',
'file-download-settings-section': 'file-download-settings-section',
'chat-file-uploads-section': 'chat-file-uploads-section',
'metadata-extraction-section': 'metadata-extraction-section',
'multimodal-vision-section': 'multimodal-vision-section',
'document-classification-section': 'document-classification-section',
'workspace-scope-lock-section': 'workspace-scope-lock-section',
// Citations tab sections
'standard-citations-section': 'standard-citations-section',
'enhanced-citations-section': 'enhanced-citations-section',
// Safety tab sections
'content-safety-section': 'content-safety-section',
'user-feedback-section': 'user-feedback-section',
'desktop-notifications-section': 'desktop-notifications-section',
'permissions-section': 'permissions-section',
'conversation-archiving-section': 'conversation-archiving-section',
// Security tab sections
'keyvault-section': 'keyvault-section',
// Data Management tab sections
'data-management-readiness-section': 'data-management-readiness-section',
'data-management-backup-section': 'data-management-backup-section',
'data-management-schedule-section': 'data-management-schedule-section',
'data-management-storage-section': 'data-management-storage-section',
'data-management-encryption-section': 'data-management-encryption-section',
'data-management-migration-section': 'data-management-migration-section',
'data-management-target-cosmos-section': 'data-management-target-cosmos-section',
'data-management-backup-inventory-section': 'data-management-backup-inventory-section',
'data-management-jobs-section': 'data-management-jobs-section',
// Search & Extract tab sections
'web-search-section': 'web-search-foundry-section',
'url-access-section': 'url-access-section',
'source-review-section': 'source-review-section',
'azure-ai-search-section': 'azure-ai-search-section',
'document-intelligence-section': 'document-intelligence-section',
'chunk-size-section': 'chunk-size-section',
'video-intelligence-section': 'video-intelligence-section',
'ai-voice-chat-section': 'ai-voice-chat-section'
};

const targetElementId = sectionMap[sectionId] || sectionId;
Expand Down
134 changes: 81 additions & 53 deletions application/single_app/templates/_sidebar_nav.html
Original file line number Diff line number Diff line change
Expand Up @@ -442,59 +442,6 @@
</div>
<div id="admin-settings-section"{% if not admin_settings_menu_expanded %} class="d-none"{% endif %} aria-hidden="{{ 'false' if admin_settings_menu_expanded else 'true' }}">
<ul class="nav flex-column mb-2">
{% if not latest_features_nav_is_hidden %}
<li class="nav-item latest-features-nav-item" data-latest-features-nav-item>
<div class="d-flex align-items-center">
<a class="nav-link d-flex align-items-center admin-nav-tab flex-grow-1" href="#" data-tab="latest-features">
<i class="bi bi-lightning-charge me-2"></i><span class="nav-text">Latest Features</span><span class="badge bg-warning text-dark text-uppercase ms-2">New</span>
</a>
<div class="dropdown latest-features-hide-menu me-2">
<button
type="button"
class="btn btn-sm btn-link nav-link p-1 latest-features-options-toggle"
data-bs-toggle="dropdown"
aria-expanded="false"
aria-label="Latest Features options"
title="Latest Features options"
data-sidebar-menu-ignore="true"
>
<i class="bi bi-three-dots" aria-hidden="true"></i>
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li>
<button type="button" class="dropdown-item latest-features-hide-action" data-latest-features-hide-action>
Hide Latest Features
</button>
</li>
</ul>
</div>
</div>
<ul class="nav flex-column ms-3" style="display: none;" id="latest-features-submenu">
{% for release_group in admin_latest_feature_release_groups %}
{% if release_group.id == 'current_release' %}
{% for feature in release_group.features %}
{% set feature_card_id = 'latest-features-' ~ feature.id|replace('_', '-') ~ '-card' %}
<li class="nav-item">
<a class="nav-link d-flex align-items-center admin-nav-section" href="#" data-tab="latest-features" data-section="{{ feature_card_id }}">
<i class="bi {{ feature.icon }} me-2" style="font-size: 0.8em;"></i><span class="nav-text">{{ feature.title }}</span>
</a>
</li>
{% endfor %}
{% endif %}
{% endfor %}
{% for release_group in admin_latest_feature_release_groups %}
{% if release_group.id != 'current_release' %}
{% set release_card_id = 'latest-features-' ~ release_group.id|replace('_', '-') ~ '-card' %}
<li class="nav-item">
<a class="nav-link d-flex align-items-center admin-nav-section" href="#" data-tab="latest-features" data-section="{{ release_card_id }}">
<i class="bi bi-clock-history me-2" style="font-size: 0.8em;"></i><span class="nav-text">{{ release_group.label|replace(' Features', '') }}</span>
</a>
</li>
{% endif %}
{% endfor %}
</ul>
</li>
{% endif %}
<li class="nav-item">
<a class="nav-link d-flex align-items-center admin-nav-tab" href="#" data-tab="general">
<i class="bi bi-gear me-2"></i><span class="nav-text">General</span>
Expand Down Expand Up @@ -883,6 +830,33 @@
<a class="nav-link d-flex align-items-center admin-nav-tab" href="#" data-tab="file-sync">
<i class="bi bi-arrow-repeat me-2"></i><span class="nav-text">File Sync</span>
</a>
<ul class="nav flex-column ms-3" style="display: none;" id="file-sync-submenu">
<li class="nav-item">
<a class="nav-link d-flex align-items-center admin-nav-section" href="#" data-tab="file-sync" data-section="file-sync-section">
<i class="bi bi-arrow-repeat me-2" style="font-size: 0.8em;"></i><span class="nav-text">File Sync</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link d-flex align-items-center admin-nav-section" href="#" data-tab="file-sync" data-section="file-sync-source-types-section">
<i class="bi bi-sliders me-2" style="font-size: 0.8em;"></i><span class="nav-text">Visible Source Types</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link d-flex align-items-center admin-nav-section" href="#" data-tab="file-sync" data-section="file-sync-personal-section">
<i class="bi bi-person me-2" style="font-size: 0.8em;"></i><span class="nav-text">Personal Workspace Sync</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link d-flex align-items-center admin-nav-section" href="#" data-tab="file-sync" data-section="file-sync-group-section">
<i class="bi bi-people me-2" style="font-size: 0.8em;"></i><span class="nav-text">Group Workspace Sync</span>
</a>
</li>
<li class="nav-item">
<a class="nav-link d-flex align-items-center admin-nav-section" href="#" data-tab="file-sync" data-section="file-sync-public-section">
<i class="bi bi-globe me-2" style="font-size: 0.8em;"></i><span class="nav-text">Public Workspace Sync</span>
</a>
</li>
</ul>
</li>
<li class="nav-item">
<a class="nav-link d-flex align-items-center admin-nav-tab" href="#" data-tab="workspace-identities">
Expand Down Expand Up @@ -1019,6 +993,60 @@
</li>
</ul>
</li>
{# Latest Features stays last so it never opens by default #}
{% if not latest_features_nav_is_hidden %}

Check warning on line 997 in application/single_app/templates/_sidebar_nav.html

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Moderate - Changed line contains obfuscation, dynamic loading, or hidden payload marker. Recommendation%3A Confirm the changed code is not hiding behavior, decoding payloads, or bypassing normal review.
<li class="nav-item latest-features-nav-item" data-latest-features-nav-item>
<div class="d-flex align-items-center">
<a class="nav-link d-flex align-items-center admin-nav-tab flex-grow-1" href="#" data-tab="latest-features">
<i class="bi bi-lightning-charge me-2"></i><span class="nav-text">Latest Features</span><span class="badge bg-warning text-dark text-uppercase ms-2">New</span>
</a>
<div class="dropdown latest-features-hide-menu me-2">
<button
type="button"
class="btn btn-sm btn-link nav-link p-1 latest-features-options-toggle"
data-bs-toggle="dropdown"
aria-expanded="false"
aria-label="Latest Features options"
title="Latest Features options"
data-sidebar-menu-ignore="true"
>
<i class="bi bi-three-dots" aria-hidden="true"></i>

Check warning on line 1013 in application/single_app/templates/_sidebar_nav.html

View workflow job for this annotation

GitHub Actions / malicious-pr-security-review

Moderate - Changed line contains obfuscation, dynamic loading, or hidden payload marker. Recommendation%3A Confirm the changed code is not hiding behavior, decoding payloads, or bypassing normal review.
</button>
<ul class="dropdown-menu dropdown-menu-end">
<li>
<button type="button" class="dropdown-item latest-features-hide-action" data-latest-features-hide-action>
Hide Latest Features
</button>
</li>
</ul>
</div>
</div>
<ul class="nav flex-column ms-3" style="display: none;" id="latest-features-submenu">
{% for release_group in admin_latest_feature_release_groups %}
{% if release_group.id == 'current_release' %}
{% for feature in release_group.features %}
{% set feature_card_id = 'latest-features-' ~ feature.id|replace('_', '-') ~ '-card' %}
<li class="nav-item">
<a class="nav-link d-flex align-items-center admin-nav-section" href="#" data-tab="latest-features" data-section="{{ feature_card_id }}">
<i class="bi {{ feature.icon }} me-2" style="font-size: 0.8em;"></i><span class="nav-text">{{ feature.title }}</span>
</a>
</li>
{% endfor %}
{% endif %}
{% endfor %}
{% for release_group in admin_latest_feature_release_groups %}
{% if release_group.id != 'current_release' %}
{% set release_card_id = 'latest-features-' ~ release_group.id|replace('_', '-') ~ '-card' %}
<li class="nav-item">
<a class="nav-link d-flex align-items-center admin-nav-section" href="#" data-tab="latest-features" data-section="{{ release_card_id }}">
<i class="bi bi-clock-history me-2" style="font-size: 0.8em;"></i><span class="nav-text">{{ release_group.label|replace(' Features', '') }}</span>
</a>
</li>
{% endif %}
{% endfor %}
</ul>
</li>
{% endif %}
</ul>
</div>
</div>
Expand Down
Loading
Loading