Files
duplicati/proprietary/Office365/SourceProvider/SourceProvider.Site.cs
T

58 lines
2.1 KiB
C#

// Copyright (c) 2026 Duplicati Inc. All rights reserved.
using Duplicati.Library.Interface;
namespace Duplicati.Proprietary.Office365;
partial class SourceProvider
{
internal SiteApiImpl SiteApi => new SiteApiImpl(_apiHelper);
internal class SiteApiImpl(APIHelper provider)
{
internal Task<Stream> GetSiteMetadataStreamAsync(string siteId, CancellationToken ct)
{
var baseUrl = provider.GraphBaseUrl.TrimEnd('/');
var site = Uri.EscapeDataString(siteId);
var select = "id,name,displayName,webUrl,createdDateTime,description,siteCollection,root";
var url =
$"{baseUrl}/v1.0/sites/{site}" +
$"?$select={Uri.EscapeDataString(select)}";
return provider.GetGraphItemAsStreamAsync(url, "application/json", ct);
}
internal IAsyncEnumerable<GraphDrive> ListSiteDrivesAsync(string siteId, CancellationToken ct)
{
var baseUrl = provider.GraphBaseUrl.TrimEnd('/');
var select = GraphSelectBuilder.BuildSelect<GraphDrive>();
var site = Uri.EscapeDataString(siteId);
var url =
$"{baseUrl}/v1.0/sites/{site}/drives" +
$"?$select={Uri.EscapeDataString(select)}" +
$"&$top={APIHelper.GENERAL_PAGE_SIZE}";
return provider.GetAllGraphItemsAsync<GraphDrive>(url, ct);
}
internal async Task<GraphDrive> GetSitePrimaryDriveAsync(string siteId, CancellationToken ct)
{
var baseUrl = provider.GraphBaseUrl.TrimEnd('/');
var site = Uri.EscapeDataString(siteId);
var select = GraphSelectBuilder.BuildSelect<GraphDrive>();
var url =
$"{baseUrl}/v1.0/sites/{site}/drive" +
$"?$select={Uri.EscapeDataString(select)}";
var drive = await provider.GetGraphItemAsync<GraphDrive>(url, ct).ConfigureAwait(false);
if (string.IsNullOrWhiteSpace(drive.Id))
throw new UserInformationException("Failed to read site's primary drive.", nameof(SourceProvider));
return drive;
}
}
}