[pull] dev from KelvinTegelaar:dev - #105
Open
pull[bot] wants to merge 825 commits into
Open
Conversation
- Updated backend to require a single tenant for template deployment, enhancing clarity and reducing complexity. - Adjusted frontend to reflect the change from multiple tenant selection to a single tenant context, ensuring the Site/Team Owner picker is appropriately scoped. - Improved logging and messaging to accurately represent the deployment status for the selected tenant. Synced from CyberDrain/CIPP@0aa759a
…ation - Enhanced backend logic to determine the SharePoint template type (Team or Communication) based on the provided site template data, defaulting to Team for older templates. - Updated frontend to include a SharePoint template selection dialog, allowing users to choose between Team and Communication site templates during site creation. - Introduced constants for SharePoint template options and integrated them into the site template card for better user experience. Synced from CyberDrain/CIPP@711e461
Build a case-insensitive lookup of test markdown files once instead of scanning the test directory for every result. This reduces repeated filesystem work when listing tests and keeps the markdown match tied to the `Invoke-CippTest<RowKey>` naming convention. Synced from CyberDrain/CIPP@0143eeb
…template handling - Added a 'templateEngineVersion' property to the SharePoint template object in the backend to ensure compatibility with the API. - Stamped the current provisioning engine version in the frontend, allowing for better tracking of template versions during save operations. - Updated the template initialization and submission logic to include the engine version, enhancing consistency across the application. Synced from CyberDrain/CIPP@24e59ee
Synced from CyberDrain/CIPP@bd6b53f
If the TenantID secret is set to a domain name instead of a GUID, resolve it via the OpenID metadata endpoint and update the stored secret (DevSecrets table or Key Vault) so subsequent loads use the GUID directly. Synced from CyberDrain/CIPP@6d65d86
Fresh deployments hold 'tenantId' as a placeholder until the setup wizard writes real secrets. Skip the OpenID metadata lookup for placeholder values to avoid unnecessary errors on initial deployment. Synced from CyberDrain/CIPP@acea292
fix: restore function-parameters.json generation for ListFunctionParameters Synced from CyberDrain/CIPP@a1e479e
Shift Teams voice/resource-account flows from MicrosoftTeams cmdlets to Graph-based endpoints and ConfigAPI paths via `New-TeamsRequestV2`, including number-type normalization and LIS location shape mapping. Remove the bundled MicrosoftTeams module from Docker images and delete the legacy `New-TeamsRequest` helper. Add token-cache invalidation support (`Clear-CippTokenCache`, CIPPSharp tenant/global cache clear methods) and invoke it after consent/permission updates so new scopes apply immediately. Also add `TeamsUserConfiguration.Read.All` delegated/app IDs to permissions and SAM manifests. Synced from CyberDrain/CIPP@39d8a4e
Refactor reporting DB writes to keep memory bounded by batch size and switch orphan detection from a run-wide RowKey set to Timestamp-based evidence. This adds a skew margin option, skips undated rows instead of risking mass deletion, and only runs orphan cleanup after successful writes. Also rework audit-log ingestion tenant discovery to stream directly into HashSets with minimal property projection, removing Group-Object and large intermediate arrays that were triggering OutOfMemoryException under backlog load. Synced from CyberDrain/CIPP@453928c
Update tenant onboarding and access validation to treat direct tenants separately from GDAP tenants. The backend now records direct-tenant service account metadata, blocks in-place GDAP→Direct conversion, cleans up stored direct refresh tokens when conversion is refused, and evaluates direct-tenant permissions from the authenticated service account (including Global Admin handling). Frontend settings pages were updated to show tenant type/service-account details, use AssignedRoles (with backward compatibility for GDAPRoles), hide GDAP-only actions where not applicable, and add a direct-tenant re-auth flow via wizard deep links. Adds Pester coverage for direct-token cleanup and the new direct-vs-GDAP access-check behavior. Synced from CyberDrain/CIPP@b231564
Normalize vacation exclusion group naming to avoid Graph lookup/create issues when policy display names are long: cap at 120 chars, append an 8-char policy ID suffix when truncated, and reuse that computed name consistently for filtering and CA exclusion updates. Also update the wizard info text to document the new truncation-and-suffix behavior. Synced from CyberDrain/CIPP@7a37d19
Add a reusable policy diff table and a new compare dialog used from Drift and Applied Standards to compare Intune template standards against live tenant policy state. Extend ExecCompareIntunePolicy with template-prepared resolution, tenantPolicyByTemplate lookup, fuzzy-name matching aligned to standard settings, and explicit missing-policy responses. Also extract Intune template type inference into a shared CIPPCore helper and reuse it in the IntuneTemplate standard. Synced from CyberDrain/CIPP@2c9020b
Add a shared Get-CIPPOfficeAppBody helper and use it in both manual and template/queued Office app deployments so all paths build the same Graph payload and strip unsupported properties consistently. Also detect existing Office apps by @odata.type (officeSuiteApp) instead of display name to avoid repeated redeploys, and trim/validate assignment group names with clearer error output when no groups resolve. Synced from CyberDrain/CIPP@f72e7bf
Improve SharePoint admin link handling across backend and frontend. The API now requires `TenantFilter`, resolves and persists a valid admin URL, logs and returns clearer errors when resolution fails, and includes the URL in redirect responses. Tenant listing and portal UI now prefer the cached `SharepointAdminUrl` field (with fallback to the resolver endpoint), so portal links behave like other direct admin links after first resolution. Synced from CyberDrain/CIPP@81a896f
Mark ListFeatureFlags and several settings endpoints (BackupRetentionConfig, DnsConfig, JITAdminSettings, LogRetentionConfig, PasswordConfig) as AnyTenant so they can be called without a tenant context. Synced from CyberDrain/CIPP@113df59
Add `Initialize-CippRequestContext` and call it at the start of `New-CippCoreRequest` so AsyncLocal-backed tenant/group scope and role cache are always reset on reused workers. Also ensure unrestricted paths explicitly clear scope slots instead of leaving stale restricted values behind. Add `Get-CippRequestContext` for safe cross-module diagnostics, then update `Invoke-ListApiTest` to read context through CIPPCore rather than CIPPHTTP module scope. Update access-role in-memory caching to include a 15-minute TTL aligned with table cache expiration so role changes are picked up without waiting for process recycle. Synced from CyberDrain/CIPP@f1caebb
Introduces a per-worker cache for access scope rules derived from custom roles and tenant group membership, keyed on a shared version stamp stored in Azure Table. - Add Get-CippAccessScopeRule to cache the rule (allow/block lists) rather than resolved tenant ids, keeping correctness as tenants change - Add Get-CippAccessScopeVersion to memo the shared stamp with a short TTL - Add Clear-CippAccessScopeCache to bump the stamp and drop local memos; called from ExecCustomRole, ExecTenantGroup, Set-CIPPAccessRole, and Update-CIPPDynamicTenantGroups - Add Expand-CippScopeTenantItem to resolve tenant group references in allowed/blocked lists - Refactor Test-CIPPAccess to use the cache for TenantList and GroupList requests, avoiding a full tenant load on every warm request - Extract Resolve-CippRoleTenantEntry and fix silent drop of unresolvable tenant ids in ListCustomRole, which previously caused a blocked tenant to render as unrestricted Synced from CyberDrain/CIPP@aa01643
…ine number and detailed JSON output for better diagnostics. (fallback in case write-logmessage doesn't capture it) Synced from CyberDrain/CIPP@224f2de
Synced from CyberDrain/CIPP@8f5c2e2
Synced from CyberDrain/CIPP@67af255
Replace wildcard match for '*/organization' with a regex pattern '/organization(\?|$)' to avoid false positives from URLs containing '/organization' as a path prefix (e.g., '/organizationSettings'). Synced from CyberDrain/CIPP@523be86
Synced from CyberDrain/CIPP@6bbc09a
Add a dedicated AnyTenant backend endpoint that reports whether the CIPP host tenant is a Microsoft Partner tenant. The frontend now uses this shared API instead of a direct Graph request so partner-only onboarding and GDAP permission flows stay available for custom roles that cannot access the partner tenant directly. Synced from CyberDrain/CIPP@b009b96
Treat Device Preparation profile assignments as user-group-only, map “all users” to the Intune virtual group target, and block unsupported “all devices” writes. The standard now checks assignment drift separately from settings drift and can repair assignment-only drift in place. Also hardens policy/template deployment by preferring the selected template RowKey over display-name fallback, surfacing corrupt template rows in template listings instead of dropping them, and failing early on empty RAWJson or missing derived policy names. Added and updated Pester coverage for assignment-target logic and DevicePrepProfile assignment remediation behavior. Synced from CyberDrain/CIPP@1ad1ff1
Prevent PWPush account lookups from failing hard when bearer-auth account retrieval errors or returns no data by returning a user-visible placeholder option instead. Also harden `CippAutocomplete` to treat null `dataKey` payloads and null items as empty results, avoiding null-option rendering and downstream field access errors. Synced from CyberDrain/CIPP@cd8d818
Wrap the SPO ProcessQuery call in a targeted catch so tenant-level SharePoint app-only consent gaps are surfaced as a clear, actionable error. When the admin endpoint returns 401, the function now throws a specific exception (tagged with `SPOAccessDenied`) that distinguishes configuration/access denial from transient request failures and points operators to reset CPV permissions. Synced from CyberDrain/CIPP@dfe3b2b
Wraps Update-AzDataTableEntity so callers can merge into rows that already exist without creating missing ones. Add-CIPPAzDataTableEntity's UpsertMerge recreates a concurrently deleted row as a stateless shell, which in the audit log claim path becomes a row that can never be parsed or drained and re-enters every processing cycle. Push-AuditLogProcessingBatchV2 already depends on it. Synced from CyberDrain/CIPP@f01e6c6
Ensure permissions are always serialized as a JSON array, even when a single permission is returned. Synced from CyberDrain/CIPP@5a41570
…ions Introduce Repair-CIPPTable to recreate missing Azure tables and refresh the cache, handling concurrent creation scenarios. Add Test-CIPPTableNotFound to identify errors indicating a table does not exist, ensuring robust error handling in entity operations. Include comprehensive Pester tests for both functions to validate their behavior and integration. Synced from CyberDrain/CIPP@9b28834
Implement retry logic for Add, Get, and Remove operations in case of TableNotFound errors. This includes invalidating the CreateTable cache, recreating the table, and retrying the operation to prevent stale entries from disrupting data operations. Synced from CyberDrain/CIPP@3403433
When running DB tests with `allTenants`, filter cached tenant partitions against the current managed tenant list before execution. This prevents tests from running on excluded or removed tenants and logs how many stale cached tenants were skipped. Synced from CyberDrain/CIPP@157fbb8
Domain Analyser does not expose a `DMARCRecord` property. Replace it with the actual properties: `DMARCPresent`, `DMARCFullPolicy`, and `DMARCActionPolicy`. Synced from CyberDrain/CIPP@0b36f94
…y row Both customDataformatters opened by collapsing the selection to row[0] and returned a single object. CippApiDialog only enters bulk request mode when the formatter returns an array, so one request went out and the remaining selected rows were silently skipped while the dialog reported success. Map over the selection in both, as Start Version Cleanup Job already does. Edit Site now evaluates isGroupSite per row, so a mixed selection is no longer judged by the first site's rootWebTemplate. Fixes #226 Synced from CyberDrain/CIPP@9135881
Synced from CyberDrain/CIPP@d77a930
feat: mcp docs search tools Synced from CyberDrain/CIPP@a888ae8
- Remove false-positive throws in OneDrive and SharePoint cached report functions when usage rows are empty — an empty usage set is a valid cached result and the merge is a left join on the site listing anyway. - Add CippSharePointQuotaCard component showing tenant-wide storage usage bar on the SharePoint page. - Add anonymization and empty-usage-report alerts to the SharePoint page table header so users understand why owner/usage columns may be blank. Synced from CyberDrain/CIPP@85a8b14
Sites and OneDrive drives with no matching usage report row were showing '0 GB' for storage, which is indistinguishable from a genuinely empty drive. Null is now preserved and passed through so the UI can show the absence of data rather than a misleading zero. Also adds Multi-Geo support to the SharePoint quota card: per-geo usage chips are shown when the tenant spans more than one geo location, and the raw GeoLocations array is now included in the ListSharepointQuota response. Synced from CyberDrain/CIPP@7cfe118
A throw in the delta lookup escaped Push-ExecScheduledCommand with no result written, leaving the task on the orchestrator's Pending claim to be re-picked as stale every hour. Changes: - Wrap delta lookup + refresh in try/catch; record failure on the task and reschedule instead of leaking the exception - Normalise bare-number Recurrence values (days) before the recurrence switch so they stay recurring - Extract New-CIPPTaskDeltaQuery to centralise trigger→delta-params mapping across task creation, rebuild, and repair - Get-DeltaQueryUrl now self-heals a missing DeltaQueries row by rebuilding from the owning task's trigger - New-GraphDeltaQuery promotes Write-Error to throw so callers can catch it - Add DeltaQueries to the backup table list - Add Pester tests for all three changed functions Synced from CyberDrain/CIPP@9e29339
- Refactor shared GitHub function-app call into a reusable helper - On 401/403/429 from a configured PAT, log a warning and fall back to the anonymous function-app path for GET requests - Serve cached releases on refresh failure instead of 500-ing - Change release notes dialog default selection to baseTag (vX.Y.0) so feature release notes lead; hotfix notes remain accessible via dropdown Synced from CyberDrain/CIPP@4878da5
Add -NoFallback switch to Invoke-GitHubApiRequest to skip the anonymous function-app fallback. Use it in the extension test endpoint so a rejected PAT returns an error instead of a false success. Synced from CyberDrain/CIPP@c7ec759
Synced from CyberDrain/CIPP@4ebd248
Synced from CyberDrain/CIPP@da95ad2
Synced from CyberDrain/CIPP@5f7b527
Synced from CyberDrain/CIPP@888e38c
Synced from CyberDrain/CIPP@162e81d
Synced from CyberDrain/CIPP@5de48fd
Synced from CyberDrain/CIPP@00686a9
Synced from CyberDrain/CIPP@7d2a9c3
Synced from CyberDrain/CIPP@ebbc9db
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 subscribe to this conversation on GitHub.
Already have an account?
Sign in.
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.
See Commits and Changes for more details.
Created by
pull[bot] (v2.0.0-alpha.4)
Can you help keep this open source service alive? 💖 Please sponsor : )