# External Integrations **Analysis Date:** 2026-04-02 ## APIs & External Services **SharePoint Online:** - Service: Microsoft SharePoint Online (via Microsoft 365) - What it's used for: Site management, permission auditing, file search, storage metrics, templating, bulk operations - SDK/Client: PnP.PowerShell module - Auth: Azure AD interactive login (ClientId required) - Connection method: `Connect-PnPOnline -Url -Interactive -ClientId ` - Search: SharePoint Search API using KQL (keyword query language) via `Submit-PnPSearchQuery` **Azure AD:** - Service: Microsoft Entra ID (formerly Azure Active Directory) - What it's used for: User authentication and app registration - SDK/Client: PnP.PowerShell (handles auth flow) - Auth: Interactive browser-based login - App Registration: Required with delegated permissions configured - No service principal or client secret used (interactive auth only) ## Data Storage **Databases:** - None detected - Application uses file-based storage only **File Storage:** - Service: Local filesystem only - Connection: Configured data folder for JSON files - Client: PowerShell native file I/O - Configuration: `Sharepoint_Settings.json` stores dataFolder path **Caching:** - Service: None detected - In-memory collections used during session (synchronized hashtables for runspace communication) ## Authentication & Identity **Auth Provider:** - Azure AD (Microsoft Entra ID) - Implementation: Interactive browser-based OAuth 2.0 flow - No client secrets or certificates - User must have access to target SharePoint tenant - App registration required with delegated permissions **Registration Process:** - User creates Azure AD App Registration - Client ID stored in profile for reuse - Helper script available: `Register-PnPEntraIDAppForInteractiveLogin` (via PnP.PowerShell) - Result file: Temporary JSON stored in system temp folder, user copies Client ID manually ## Monitoring & Observability **Error Tracking:** - None detected - Errors written to UI log box via `Write-Log` function - Location: UI RichTextBox control in application **Logs:** - Approach: In-app console logging - Function: `Write-Log $Message [Color]` writes timestamped messages to UI log box - Colors: LightGreen (default), Red (errors), Yellow (KQL queries), DarkOrange (dry-run operations) - File location: `C:\Users\SebastienQUEROL\Documents\projets\Sharepoint\Sharepoint_ToolBox.ps1` (lines 6-17) ## CI/CD & Deployment **Hosting:** - Not applicable - Desktop application (local execution) **CI Pipeline:** - None detected **Execution Model:** - Direct script execution: `.\Sharepoint_Toolbox.ps1` - No installation/setup required beyond PowerShell and PnP.PowerShell module ## Environment Configuration **Required env vars:** - None required - All configuration stored in JSON files - User inputs via GUI: Client ID, Tenant URL, Site URL **Secrets location:** - Not applicable - Interactive auth uses no stored secrets - User manages Client ID (non-sensitive app identifier) - Session credentials handled by Azure AD auth flow (in-memory only) **Configuration files:** - `Sharepoint_Settings.json` - Data folder, language preference - `Sharepoint_Export_profiles.json` - Saved connection profiles (Tenant URL, Client ID) - `Sharepoint_Templates.json` - Captured site templates ## Webhooks & Callbacks **Incoming:** - None detected **Outgoing:** - None detected ## Search & Query Integration **SharePoint Search API:** - Usage: File search across libraries using KQL - Location: `Sharepoint_ToolBox.ps1` lines 4744-4773 (search query building) - Function: `Submit-PnPSearchQuery -Query $kql` - Pagination: Automatic via PnP.PowerShell - Client-side filtering: Regex filters applied after results fetched - Query example: Supports file extension, name/path patterns, creation/modification date ranges, author filters, max result limits ## Export & Report Formats **Output Formats:** - CSV: PowerShell `Export-Csv` cmdlet (UTF-8 encoding, no type info) - HTML: Custom HTML generation with: - Interactive tables (sorting, filtering by column) - Collapsible sections (durable state via CSS/JS) - Charts and metrics visualization - Inline styling (no external CSS file) **Export Functions:** - `Export-PermissionsToHTML` (line 1389) - `Export-StorageToHTML` (line 1621) - `Export-SearchResultsToHTML` (line 2112) - `Export-DuplicatesToHTML` (line 2235) - `Export-TransferVerifyToHTML` (line 2412) ## Bulk Import Formats **CSV Input:** - Bulk member add: Expects columns for site, group, user email - Bulk site creation: Site name, alias, owner email, description - Bulk file transfer: Source site/path, destination site/path - Folder structure: Library name, folder path, permissions **Parsing:** - PowerShell `Import-Csv` - Standard CSV parsing - Headers used as property names ## API Rate Limiting **SharePoint Online:** - No explicit rate limiting handling detected - Assumes PnP.PowerShell handles throttling internally - Pagination used for large result sets (PageSize 2000 for list items) --- *Integration audit: 2026-04-02*