mirror of
https://github.com/abraunegg/onedrive
synced 2024-06-28 18:30:09 +02:00
Merge branch 'master' into fix-issue-966
This commit is contained in:
commit
4c99d53894
1
config
1
config
|
@ -38,4 +38,5 @@
|
|||
# resync = "false"
|
||||
# bypass_data_preservation = "false"
|
||||
# azure_ad_endpoint = ""
|
||||
# azure_tenant_id = "common"
|
||||
# sync_business_shared_folders = "false"
|
||||
|
|
18
configure
vendored
18
configure
vendored
|
@ -1,6 +1,6 @@
|
|||
#! /bin/sh
|
||||
# Guess values for system-dependent variables and create Makefiles.
|
||||
# Generated by GNU Autoconf 2.69 for onedrive v2.4.6.
|
||||
# Generated by GNU Autoconf 2.69 for onedrive v2.4.7-dev.
|
||||
#
|
||||
# Report bugs to <https://github.com/abraunegg/onedrive>.
|
||||
#
|
||||
|
@ -579,8 +579,8 @@ MAKEFLAGS=
|
|||
# Identity of this package.
|
||||
PACKAGE_NAME='onedrive'
|
||||
PACKAGE_TARNAME='onedrive'
|
||||
PACKAGE_VERSION='v2.4.6'
|
||||
PACKAGE_STRING='onedrive v2.4.6'
|
||||
PACKAGE_VERSION='v2.4.7-dev'
|
||||
PACKAGE_STRING='onedrive v2.4.7-dev'
|
||||
PACKAGE_BUGREPORT='https://github.com/abraunegg/onedrive'
|
||||
PACKAGE_URL=''
|
||||
|
||||
|
@ -1219,7 +1219,7 @@ if test "$ac_init_help" = "long"; then
|
|||
# Omit some internal or obsolete options to make the list less imposing.
|
||||
# This message is too long to be a string in the A/UX 3.1 sh.
|
||||
cat <<_ACEOF
|
||||
\`configure' configures onedrive v2.4.6 to adapt to many kinds of systems.
|
||||
\`configure' configures onedrive v2.4.7-dev to adapt to many kinds of systems.
|
||||
|
||||
Usage: $0 [OPTION]... [VAR=VALUE]...
|
||||
|
||||
|
@ -1280,7 +1280,7 @@ fi
|
|||
|
||||
if test -n "$ac_init_help"; then
|
||||
case $ac_init_help in
|
||||
short | recursive ) echo "Configuration of onedrive v2.4.6:";;
|
||||
short | recursive ) echo "Configuration of onedrive v2.4.7-dev:";;
|
||||
esac
|
||||
cat <<\_ACEOF
|
||||
|
||||
|
@ -1393,7 +1393,7 @@ fi
|
|||
test -n "$ac_init_help" && exit $ac_status
|
||||
if $ac_init_version; then
|
||||
cat <<\_ACEOF
|
||||
onedrive configure v2.4.6
|
||||
onedrive configure v2.4.7-dev
|
||||
generated by GNU Autoconf 2.69
|
||||
|
||||
Copyright (C) 2012 Free Software Foundation, Inc.
|
||||
|
@ -1410,7 +1410,7 @@ cat >config.log <<_ACEOF
|
|||
This file contains any messages produced by compilers while
|
||||
running configure, to aid debugging if configure makes a mistake.
|
||||
|
||||
It was created by onedrive $as_me v2.4.6, which was
|
||||
It was created by onedrive $as_me v2.4.7-dev, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
$ $0 $@
|
||||
|
@ -3159,7 +3159,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
|
|||
# report actual input values of CONFIG_FILES etc. instead of their
|
||||
# values after options handling.
|
||||
ac_log="
|
||||
This file was extended by onedrive $as_me v2.4.6, which was
|
||||
This file was extended by onedrive $as_me v2.4.7-dev, which was
|
||||
generated by GNU Autoconf 2.69. Invocation command line was
|
||||
|
||||
CONFIG_FILES = $CONFIG_FILES
|
||||
|
@ -3212,7 +3212,7 @@ _ACEOF
|
|||
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
|
||||
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
|
||||
ac_cs_version="\\
|
||||
onedrive config.status v2.4.6
|
||||
onedrive config.status v2.4.7-dev
|
||||
configured by $0, generated by GNU Autoconf 2.69,
|
||||
with options \\"\$ac_cs_config\\"
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ dnl - commit the changed files (configure.ac, configure)
|
|||
dnl - tag the release
|
||||
|
||||
AC_PREREQ([2.69])
|
||||
AC_INIT([onedrive],[v2.4.6], [https://github.com/abraunegg/onedrive], [onedrive])
|
||||
AC_INIT([onedrive],[v2.4.7-dev], [https://github.com/abraunegg/onedrive], [onedrive])
|
||||
AC_CONFIG_SRCDIR([src/main.d])
|
||||
|
||||
|
||||
|
|
|
@ -316,10 +316,10 @@ By passing `--enable-debug` to the `configure` call, `onedrive` gets built with
|
|||
information, useful (for example) to get `perf`-issued figures.
|
||||
|
||||
By passing `--enable-completions` to the `configure` call, shell completion functions are
|
||||
installed for `bash` and `zsh`. The installation directories are determined
|
||||
installed for `bash`, `zsh` and `fish`. The installation directories are determined
|
||||
as far as possible automatically, but can be overridden by passing
|
||||
`--with-bash-completion-dir=<DIR>` and
|
||||
`--with-zsh-completion-dir=<DIR>` to `configure`.
|
||||
`--with-bash-completion-dir=<DIR>`, `--with-zsh-completion-dir=<DIR>`, and
|
||||
`--with-fish-completion-dir=<DIR>` to `configure`.
|
||||
|
||||
### Building using a different compiler (for example [LDC](https://wiki.dlang.org/LDC))
|
||||
#### ARMHF Architecture
|
||||
|
|
|
@ -298,6 +298,7 @@ The default configuration file is listed below:
|
|||
# resync = "false"
|
||||
# bypass_data_preservation = "false"
|
||||
# azure_ad_endpoint = ""
|
||||
# azure_tenant_id = "common"
|
||||
# sync_business_shared_folders = "false"
|
||||
```
|
||||
|
||||
|
|
|
@ -51,6 +51,11 @@ A valid entry for the response URI should be one of:
|
|||
* https://login.microsoftonline.de/common/oauth2/nativeclient (Microsoft Cloud Germany)
|
||||
* https://login.chinacloudapi.cn/common/oauth2/nativeclient (Azure and Office 365 operated by 21Vianet in China)
|
||||
|
||||
For a single-tenant application, it may be necessary to use your specific tenant id instead of "common":
|
||||
* https://login.microsoftonline.us/example.onmicrosoft.us/oauth2/nativeclient (Microsoft Cloud for US Government)
|
||||
* https://login.microsoftonline.de/example.onmicrosoft.de/oauth2/nativeclient (Microsoft Cloud Germany)
|
||||
* https://login.chinacloudapi.cn/example.onmicrosoft.cn/oauth2/nativeclient (Azure and Office 365 operated by 21Vianet in China)
|
||||
|
||||
## Step 4: Configure the onedrive client to use new application registration
|
||||
Update to your 'onedrive' configuration file (`~/.config/onedrive/config`) the following:
|
||||
```text
|
||||
|
@ -64,7 +69,7 @@ This will reconfigure the client to use the new application registration you hav
|
|||
application_id = "22c49a0d-d21c-4792-aed1-8f163c982546"
|
||||
```
|
||||
|
||||
## Step 5: Confgure the onedrive client to use the specific Microsoft Azure deployment
|
||||
## Step 5: Configure the onedrive client to use the specific Microsoft Azure deployment
|
||||
Update to your 'onedrive' configuration file (`~/.config/onedrive/config`) the following:
|
||||
```text
|
||||
azure_ad_endpoint = "insert valid entry here"
|
||||
|
@ -83,6 +88,23 @@ This will configure your client to use the correct Azure AD and Graph endpoints
|
|||
azure_ad_endpoint = "USL4"
|
||||
```
|
||||
|
||||
If the Microsoft Azure deployment does not support multi-tenant applications, update to your 'onedrive' configuration file (`~/.config/onedrive/config`) the following:
|
||||
```text
|
||||
azure_tenant_id = "insert valid entry here"
|
||||
```
|
||||
|
||||
This will configure your client to use the specified tenant id in its Azure AD and Graph endpoint URIs, instead of "common".
|
||||
The tenant id may be the GUID Directory ID (formatted "00000000-0000-0000-0000-000000000000"), or the fully qualified tenant name (e.g. "example.onmicrosoft.us").
|
||||
The GUID Directory ID may be located in the Azure administation page as per [https://docs.microsoft.com/en-us/onedrive/find-your-office-365-tenant-id](https://docs.microsoft.com/en-us/onedrive/find-your-office-365-tenant-id). Note that you may need to go to your national-deployment-specific administration page, rather than following the links within that document.
|
||||
The tenant name may be obtained by following the PowerShell instructions on [https://docs.microsoft.com/en-us/onedrive/find-your-office-365-tenant-id](https://docs.microsoft.com/en-us/onedrive/find-your-office-365-tenant-id); it is shown as the "TenantDomain" upon completion of the "Connect-AzureAD" command.
|
||||
|
||||
**Example:**
|
||||
```text
|
||||
azure_tenant_id = "example.onmicrosoft.us"
|
||||
# or
|
||||
azure_tenant_id = "0c4be462-a1ab-499b-99e0-da08ce52a2cc"
|
||||
```
|
||||
|
||||
## Step 6: Authenticate the client
|
||||
Run the application without any additional command switches.
|
||||
|
||||
|
|
|
@ -102,6 +102,8 @@ final class Config
|
|||
// AD Endpoint: https://login.chinacloudapi.cn
|
||||
// Graph Endpoint: https://microsoftgraph.chinacloudapi.cn
|
||||
stringValues["azure_ad_endpoint"] = "";
|
||||
// Support single-tenant applications that are not able to use the "common" multiplexer
|
||||
stringValues["azure_tenant_id"] = "common";
|
||||
// Allow enable / disable of the syncing of OneDrive Business Shared Folders via configuration file
|
||||
boolValues["sync_business_shared_folders"] = false;
|
||||
|
||||
|
|
|
@ -149,6 +149,14 @@ final class OneDriveApi
|
|||
.debugResponse = true;
|
||||
}
|
||||
|
||||
// Configure tenant id value, if 'azure_tenant_id' is configured,
|
||||
// otherwise use the "common" multiplexer
|
||||
string tenantId = "common";
|
||||
if (cfg.getValueString("azure_tenant_id") != "") {
|
||||
// Use the value entered by the user
|
||||
tenantId = cfg.getValueString("azure_tenant_id");
|
||||
}
|
||||
|
||||
// Configure Azure AD endpoints if 'azure_ad_endpoint' is configured
|
||||
string azureConfigValue = cfg.getValueString("azure_ad_endpoint");
|
||||
switch(azureConfigValue) {
|
||||
|
@ -158,9 +166,9 @@ final class OneDriveApi
|
|||
case "USL4":
|
||||
log.log("Configuring Azure AD for US Government Endpoints");
|
||||
// Authentication
|
||||
authUrl = usl4AuthEndpoint ~ "/common/oauth2/v2.0/authorize";
|
||||
redirectUrl = usl4AuthEndpoint ~ "/common/oauth2/nativeclient";
|
||||
tokenUrl = usl4AuthEndpoint ~ "/common/oauth2/v2.0/token";
|
||||
authUrl = usl4AuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/authorize";
|
||||
redirectUrl = usl4AuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/nativeclient";
|
||||
tokenUrl = usl4AuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/token";
|
||||
// Drive Queries
|
||||
driveUrl = usl4GraphEndpoint ~ "/v1.0/me/drive";
|
||||
driveByIdUrl = usl4GraphEndpoint ~ "/v1.0/drives/";
|
||||
|
@ -177,9 +185,9 @@ final class OneDriveApi
|
|||
case "USL5":
|
||||
log.log("Configuring Azure AD for US Government Endpoints (DOD)");
|
||||
// Authentication
|
||||
authUrl = usl5AuthEndpoint ~ "/common/oauth2/v2.0/authorize";
|
||||
redirectUrl = usl5AuthEndpoint ~ "/common/oauth2/nativeclient";
|
||||
tokenUrl = usl5AuthEndpoint ~ "/common/oauth2/v2.0/token";
|
||||
authUrl = usl5AuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/authorize";
|
||||
redirectUrl = usl5AuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/nativeclient";
|
||||
tokenUrl = usl5AuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/token";
|
||||
// Drive Queries
|
||||
driveUrl = usl5GraphEndpoint ~ "/v1.0/me/drive";
|
||||
driveByIdUrl = usl5GraphEndpoint ~ "/v1.0/drives/";
|
||||
|
@ -196,9 +204,9 @@ final class OneDriveApi
|
|||
case "DE":
|
||||
log.log("Configuring Azure AD Germany");
|
||||
// Authentication
|
||||
authUrl = deAuthEndpoint ~ "/common/oauth2/v2.0/authorize";
|
||||
redirectUrl = deAuthEndpoint ~ "/common/oauth2/nativeclient";
|
||||
tokenUrl = deAuthEndpoint ~ "/common/oauth2/v2.0/token";
|
||||
authUrl = deAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/authorize";
|
||||
redirectUrl = deAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/nativeclient";
|
||||
tokenUrl = deAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/token";
|
||||
// Drive Queries
|
||||
driveUrl = deGraphEndpoint ~ "/v1.0/me/drive";
|
||||
driveByIdUrl = deGraphEndpoint ~ "/v1.0/drives/";
|
||||
|
@ -215,9 +223,9 @@ final class OneDriveApi
|
|||
case "CN":
|
||||
log.log("Configuring AD China operated by 21Vianet");
|
||||
// Authentication
|
||||
authUrl = cnAuthEndpoint ~ "/common/oauth2/v2.0/authorize";
|
||||
redirectUrl = cnAuthEndpoint ~ "/common/oauth2/nativeclient";
|
||||
tokenUrl = cnAuthEndpoint ~ "/common/oauth2/v2.0/token";
|
||||
authUrl = cnAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/authorize";
|
||||
redirectUrl = cnAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/nativeclient";
|
||||
tokenUrl = cnAuthEndpoint ~ "/" ~ tenantId ~ "/oauth2/v2.0/token";
|
||||
// Drive Queries
|
||||
driveUrl = cnGraphEndpoint ~ "/v1.0/me/drive";
|
||||
driveByIdUrl = cnGraphEndpoint ~ "/v1.0/drives/";
|
||||
|
|
26
src/sync.d
26
src/sync.d
|
@ -978,7 +978,7 @@ final class SyncEngine
|
|||
{
|
||||
log.vlog("Applying changes of Path ID: " ~ id);
|
||||
// function variables
|
||||
const(char)[] idToQuery;
|
||||
char[] idToQuery;
|
||||
JSONValue changes;
|
||||
JSONValue changesAvailable;
|
||||
JSONValue idDetails;
|
||||
|
@ -1260,14 +1260,16 @@ final class SyncEngine
|
|||
if (driveId == defaultDriveId) {
|
||||
// The drive id matches our users default drive id
|
||||
idToQuery = defaultRootId.dup;
|
||||
log.vdebug("Configuring 'idToQuery' as defaultRootId duplicate");
|
||||
} else {
|
||||
// The drive id does not match our users default drive id
|
||||
// Potentially the 'path id' we are requesting the details of is a Shared Folder (remote item)
|
||||
// Use the 'id' that was passed in (folderId)
|
||||
idToQuery = id;
|
||||
idToQuery = id.dup;
|
||||
log.vdebug("Configuring 'idToQuery' as 'id' duplicate");
|
||||
}
|
||||
// what path id are we going to query?
|
||||
log.vdebug("path idToQuery = ", idToQuery);
|
||||
log.vdebug("Path object to query configured as 'idToQuery' = ", idToQuery);
|
||||
long deltaChanges = 0;
|
||||
|
||||
// What query do we use?
|
||||
|
@ -1277,7 +1279,7 @@ final class SyncEngine
|
|||
if ((nationalCloudDeployment) || ((driveId!= defaultDriveId) && (syncBusinessFolders))) {
|
||||
// Have to query /children rather than /delta
|
||||
nationalCloudChildrenScan = true;
|
||||
log.vdebug("Using /children call to query drive for items");
|
||||
log.vdebug("Using /children call to query drive for items to populate 'changes' and 'changesAvailable'");
|
||||
// In OneDrive Business Shared Folder scenario, if ALL items are downgraded, then this leads to local file deletion
|
||||
// Downgrade ONLY files associated with this driveId and idToQuery
|
||||
log.vdebug("Downgrading all children for this driveId (" ~ driveId ~ ") and idToQuery (" ~ idToQuery ~ ") to an out-of-sync state");
|
||||
|
@ -1360,10 +1362,14 @@ final class SyncEngine
|
|||
}
|
||||
}
|
||||
} else {
|
||||
log.vdebug("Using /delta call to query drive for items");
|
||||
log.vdebug("Using /delta call to query drive for items to populate 'changes' and 'changesAvailable'");
|
||||
// query for changes = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLink);
|
||||
try {
|
||||
// Fetch the changes relative to the path id we want to query
|
||||
log.vdebug("Attempting query 'changes = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLink)'");
|
||||
log.vdebug("driveId: ", driveId);
|
||||
log.vdebug("idToQuery: ", idToQuery);
|
||||
log.vdebug("deltaLink: ", deltaLink);
|
||||
// changes with or without deltaLink
|
||||
changes = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLink);
|
||||
if (changes.type() == JSONType.object) {
|
||||
|
@ -1373,9 +1379,6 @@ final class SyncEngine
|
|||
// OneDrive threw an error
|
||||
log.vdebug("------------------------------------------------------------------");
|
||||
log.vdebug("Query Error: changes = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLink)");
|
||||
log.vdebug("driveId: ", driveId);
|
||||
log.vdebug("idToQuery: ", idToQuery);
|
||||
log.vdebug("deltaLink: ", deltaLink);
|
||||
|
||||
// HTTP request returned status code 404 (Not Found)
|
||||
if (e.httpStatusCode == 404) {
|
||||
|
@ -1457,6 +1460,10 @@ final class SyncEngine
|
|||
// query for changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable);
|
||||
try {
|
||||
// Fetch the changes relative to the path id we want to query
|
||||
log.vdebug("Attempting query 'changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable)'");
|
||||
log.vdebug("driveId: ", driveId);
|
||||
log.vdebug("idToQuery: ", idToQuery);
|
||||
log.vdebug("deltaLinkAvailable: ", deltaLinkAvailable);
|
||||
// changes based on deltaLink
|
||||
changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable);
|
||||
if (changesAvailable.type() == JSONType.object) {
|
||||
|
@ -1471,9 +1478,6 @@ final class SyncEngine
|
|||
// OneDrive threw an error
|
||||
log.vdebug("------------------------------------------------------------------");
|
||||
log.vdebug("Query Error: changesAvailable = onedrive.viewChangesByItemId(driveId, idToQuery, deltaLinkAvailable)");
|
||||
log.vdebug("driveId: ", driveId);
|
||||
log.vdebug("idToQuery: ", idToQuery);
|
||||
log.vdebug("deltaLinkAvailable: ", deltaLinkAvailable);
|
||||
|
||||
// HTTP request returned status code 404 (Not Found)
|
||||
if (e.httpStatusCode == 404) {
|
||||
|
|
Loading…
Reference in a new issue