1a195a96bd
- Merge origin/main into branch (resolve conflict in integrations_dashboard.html) - Add defensive JSON parsing with try/except for integration.config - Wrap tester() call in try/except to prevent 500 errors from bad config - Add i18n key integrations.connection_test_failed_fallback in en.json - Reference i18n key in template JS fallback message - Update SECURITY_AUDIT.md: add fix date (2026-03-23), update doc date - Remove accidental revert.sh file - Fix missing MagicMock/patch imports in test file - Add tests for invalid JSON config and tester exception error paths Co-authored-by: christianlouis <361235+christianlouis@users.noreply.github.com> Agent-Logs-Url: https://github.com/christianlouis/DocuElevate/sessions/daebb70e-059a-4601-8864-88eef49f99cf
186 lines
7.9 KiB
Markdown
186 lines
7.9 KiB
Markdown
# Setting up SharePoint Integration
|
|
|
|
This guide explains how to set up the Microsoft SharePoint Online integration for DocuElevate.
|
|
|
|
## Required Configuration Parameters
|
|
|
|
| **Variable** | **Description** |
|
|
|---------------------------------|-------------------------------------------------------|
|
|
| `SHAREPOINT_CLIENT_ID` | Azure AD application client ID |
|
|
| `SHAREPOINT_CLIENT_SECRET` | Azure AD application client secret |
|
|
| `SHAREPOINT_TENANT_ID` | Azure AD tenant ID (use "common" for multi-tenant apps) |
|
|
| `SHAREPOINT_REFRESH_TOKEN` | OAuth 2.0 refresh token |
|
|
| `SHAREPOINT_SITE_URL` | SharePoint site URL (e.g. `https://tenant.sharepoint.com/sites/sitename`) |
|
|
| `SHAREPOINT_DOCUMENT_LIBRARY` | Document library name (default: `Documents`) |
|
|
| `SHAREPOINT_FOLDER_PATH` | Subfolder path inside the document library |
|
|
|
|
For a complete list of configuration options, see the [Configuration Guide](ConfigurationGuide.md).
|
|
|
|
## Overview
|
|
|
|
SharePoint Online integration uses the same Microsoft Graph API as OneDrive. The key difference is that SharePoint targets a **site-specific document library** rather than a personal OneDrive. Documents are uploaded via chunked upload sessions for reliability with large files.
|
|
|
|
> **Tip:** If you already have an Azure AD app registration for OneDrive, you can reuse it for SharePoint — just add the `Sites.ReadWrite.All` permission.
|
|
|
|
## Setup Steps
|
|
|
|
### 1. Register an application in Azure Active Directory
|
|
|
|
If you don't already have an app registration (e.g. from OneDrive setup):
|
|
|
|
1. Go to the [Azure Portal](https://portal.azure.com/)
|
|
2. Navigate to **Azure Active Directory** > **App registrations**
|
|
3. Click **New registration**
|
|
4. Enter a name for your application (e.g., "DocuElevate")
|
|
5. For **Supported account types**, select:
|
|
- **Single tenant**: "Accounts in this organizational directory only"
|
|
- **Multi-tenant**: "Accounts in any organizational directory"
|
|
6. For **Redirect URI**, select "Web" and enter your callback URL (e.g., `https://your-domain.com/onedrive-callback`)
|
|
7. Click **Register**
|
|
|
|
### 2. Get Application (client) ID
|
|
|
|
1. After registration, note the **Application (client) ID** from the overview page
|
|
2. Set this value as `SHAREPOINT_CLIENT_ID`
|
|
|
|
### 3. Create a client secret
|
|
|
|
1. In your application page, go to **Certificates & secrets**
|
|
2. Under **Client secrets**, click **New client secret**
|
|
3. Add a description and select an expiration period
|
|
4. Click **Add** and immediately copy the secret value (it will only be shown once)
|
|
5. Set this value as `SHAREPOINT_CLIENT_SECRET`
|
|
|
|
### 4. Configure API permissions
|
|
|
|
1. In your application page, go to **API permissions**
|
|
2. Click **Add a permission**
|
|
3. Select **Microsoft Graph**
|
|
4. For **delegated permissions** (user-context access), add:
|
|
- `Sites.ReadWrite.All` — Read and write items in all site collections
|
|
- `offline_access` — Required for refresh tokens
|
|
5. For **application permissions** (app-only access without a user), add:
|
|
- `Sites.ReadWrite.All` — Read and write items in all site collections
|
|
6. Click **Add permissions**
|
|
7. Click **Grant admin consent** (requires admin privileges)
|
|
|
|
> **Important:** SharePoint access requires `Sites.ReadWrite.All` rather than the `Files.ReadWrite` permission used by OneDrive.
|
|
|
|
### 5. Get your Tenant ID
|
|
|
|
1. In the Azure Portal, find your **Tenant ID** (also called "Directory ID")
|
|
2. It is on the **Azure Active Directory** overview page
|
|
3. Set this value as `SHAREPOINT_TENANT_ID`
|
|
|
|
### 6. Generate a Refresh Token
|
|
|
|
#### Using the OneDrive Auth Wizard
|
|
|
|
The SharePoint integration reuses the same MSAL token flow as OneDrive:
|
|
|
|
1. Navigate to `/onedrive-setup`
|
|
2. Enter your SharePoint Client ID and Tenant ID
|
|
3. Click **Start Authentication Flow** and follow the prompts
|
|
4. Copy the generated refresh token and set it as `SHAREPOINT_REFRESH_TOKEN`
|
|
|
|
#### Manual Method
|
|
|
|
1. Open the following URL in your browser (replace placeholders):
|
|
```
|
|
https://login.microsoftonline.com/YOUR_TENANT_ID/oauth2/v2.0/authorize?client_id=YOUR_CLIENT_ID&response_type=code&redirect_uri=YOUR_REDIRECT_URI&response_mode=query&scope=https://graph.microsoft.com/.default offline_access&prompt=consent
|
|
```
|
|
2. Sign in with your Microsoft work account
|
|
3. After authentication, copy the `code` parameter from the redirect URL
|
|
4. Exchange the code for tokens:
|
|
```bash
|
|
curl -X POST https://login.microsoftonline.com/YOUR_TENANT_ID/oauth2/v2.0/token \
|
|
-H "Content-Type: application/x-www-form-urlencoded" \
|
|
-d "client_id=YOUR_CLIENT_ID&scope=https://graph.microsoft.com/.default offline_access&code=YOUR_AUTH_CODE&redirect_uri=YOUR_REDIRECT_URI&grant_type=authorization_code&client_secret=YOUR_CLIENT_SECRET"
|
|
```
|
|
5. From the response JSON, copy the `refresh_token` value
|
|
6. Set this as `SHAREPOINT_REFRESH_TOKEN`
|
|
|
|
### 7. Find your SharePoint Site URL
|
|
|
|
Your SharePoint site URL follows the pattern:
|
|
```
|
|
https://YOUR-TENANT.sharepoint.com/sites/SITE-NAME
|
|
```
|
|
|
|
For example:
|
|
- `https://contoso.sharepoint.com/sites/documents`
|
|
- `https://contoso.sharepoint.com/sites/engineering-team`
|
|
|
|
Set this as `SHAREPOINT_SITE_URL`.
|
|
|
|
### 8. Choose your Document Library
|
|
|
|
Each SharePoint site has one or more document libraries. The default library is usually called `Documents` (or `Shared Documents`). You can find your library names by navigating to your SharePoint site in a browser and looking at the left sidebar.
|
|
|
|
Set the library name as `SHAREPOINT_DOCUMENT_LIBRARY` (default: `Documents`).
|
|
|
|
### 9. Set the Upload Folder (Optional)
|
|
|
|
If you want documents to be uploaded into a subfolder inside the library, set `SHAREPOINT_FOLDER_PATH`. For example, `Uploads` or `DocuElevate/Processed`.
|
|
|
|
## App-Only Access (No User Token)
|
|
|
|
For fully automated scenarios without user interaction:
|
|
|
|
1. Add **Application permissions** (not Delegated) for `Sites.ReadWrite.All`
|
|
2. Grant admin consent
|
|
3. Set `SHAREPOINT_TENANT_ID` to your organization's tenant ID
|
|
4. Leave `SHAREPOINT_REFRESH_TOKEN` empty — the app will use the client credentials flow
|
|
|
|
> **Note:** Client credentials flow requires a specific tenant ID (not "common").
|
|
|
|
## Configuration Examples
|
|
|
|
**With Refresh Token (Delegated Permissions):**
|
|
```dotenv
|
|
SHAREPOINT_CLIENT_ID=12345678-1234-1234-1234-123456789012
|
|
SHAREPOINT_CLIENT_SECRET=your_client_secret
|
|
SHAREPOINT_TENANT_ID=87654321-4321-4321-4321-210987654321
|
|
SHAREPOINT_REFRESH_TOKEN=your_refresh_token
|
|
SHAREPOINT_SITE_URL=https://contoso.sharepoint.com/sites/documents
|
|
SHAREPOINT_DOCUMENT_LIBRARY=Documents
|
|
SHAREPOINT_FOLDER_PATH=Uploads
|
|
```
|
|
|
|
**App-Only Access (Application Permissions):**
|
|
```dotenv
|
|
SHAREPOINT_CLIENT_ID=12345678-1234-1234-1234-123456789012
|
|
SHAREPOINT_CLIENT_SECRET=your_client_secret
|
|
SHAREPOINT_TENANT_ID=87654321-4321-4321-4321-210987654321
|
|
# No refresh token needed for app-only access
|
|
SHAREPOINT_SITE_URL=https://contoso.sharepoint.com/sites/documents
|
|
SHAREPOINT_DOCUMENT_LIBRARY=Shared Documents
|
|
SHAREPOINT_FOLDER_PATH=DocuElevate/Processed
|
|
```
|
|
|
|
## Troubleshooting
|
|
|
|
### "Failed to resolve SharePoint site"
|
|
|
|
- Verify `SHAREPOINT_SITE_URL` is correct and accessible
|
|
- Ensure your app has `Sites.ReadWrite.All` permission with admin consent
|
|
- Check that the site exists and your account has access to it
|
|
|
|
### "Document library not found"
|
|
|
|
- Verify the library name in `SHAREPOINT_DOCUMENT_LIBRARY` matches exactly (case-insensitive)
|
|
- Navigate to your SharePoint site in a browser to confirm the library name
|
|
- Common names: `Documents`, `Shared Documents`
|
|
|
|
### Token errors
|
|
|
|
- If using a refresh token, try re-authorizing via the OAuth flow
|
|
- Ensure `offline_access` scope is included in your permissions
|
|
- For app-only access, verify the tenant ID is not set to "common"
|
|
|
|
### Permission errors
|
|
|
|
- Ensure an admin has granted consent for `Sites.ReadWrite.All`
|
|
- Verify the app registration has the correct permissions
|
|
- Check that the site's sharing settings allow API access
|