Removed Google Drive backup storage support.
I'm satistfied with how the SFTP method has been working, and it also means the backups aren't stored by Google as a MASSIVE plus.
This commit is contained in:
parent
621f05c6dc
commit
13d51c7bf8
3 changed files with 1 additions and 171 deletions
|
@ -6,7 +6,6 @@
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<PackageReference Include="Google.Apis.Drive.v3" Version="1.34.0.1239" />
|
|
||||||
<PackageReference Include="SSH.NET" Version="2016.1.0" />
|
<PackageReference Include="SSH.NET" Version="2016.1.0" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
|
|
@ -1,78 +0,0 @@
|
||||||
using Google.Apis.Auth.OAuth2.Responses;
|
|
||||||
using Google.Apis.Json;
|
|
||||||
using Google.Apis.Util.Store;
|
|
||||||
using Newtonsoft.Json.Linq;
|
|
||||||
using System;
|
|
||||||
using System.Text;
|
|
||||||
using System.Threading.Tasks;
|
|
||||||
|
|
||||||
namespace BackupManager
|
|
||||||
{
|
|
||||||
public sealed class GoogleDatastore : IDataStore
|
|
||||||
{
|
|
||||||
public Config Config { get; set; }
|
|
||||||
|
|
||||||
public GoogleDatastore(Config config)
|
|
||||||
{
|
|
||||||
Config = config;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Task<T> GetAsync<T>(string key)
|
|
||||||
{
|
|
||||||
TaskCompletionSource<T> tcs = new TaskCompletionSource<T>();
|
|
||||||
|
|
||||||
TokenResponse tr = new TokenResponse {
|
|
||||||
AccessToken = Config.GoogleAccessToken,
|
|
||||||
TokenType = Config.GoogleTokenType,
|
|
||||||
ExpiresInSeconds = Config.GoogleTokenExpires,
|
|
||||||
RefreshToken = Config.GoogleRefreshToken,
|
|
||||||
IssuedUtc = Config.GoogleTokenIssued == null
|
|
||||||
? new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc)
|
|
||||||
: DateTime.Parse(Config.GoogleTokenIssued)
|
|
||||||
};
|
|
||||||
|
|
||||||
tcs.SetResult((T)(object)tr); // fuck it
|
|
||||||
return tcs.Task;
|
|
||||||
}
|
|
||||||
|
|
||||||
public Task DeleteAsync<T>(string key)
|
|
||||||
=> ClearAsync();
|
|
||||||
|
|
||||||
public Task ClearAsync()
|
|
||||||
{
|
|
||||||
Config.GoogleAccessToken = null;
|
|
||||||
Config.GoogleTokenType = null;
|
|
||||||
Config.GoogleTokenExpires = null;
|
|
||||||
Config.GoogleTokenIssued = null;
|
|
||||||
Config.GoogleTokenIssued = null;
|
|
||||||
return Task.Delay(0);
|
|
||||||
}
|
|
||||||
|
|
||||||
public Task StoreAsync<T>(string key, T value)
|
|
||||||
{
|
|
||||||
JObject json = JObject.Parse(NewtonsoftJsonSerializer.Instance.Serialize(value));
|
|
||||||
|
|
||||||
JToken accessToken = json.SelectToken(@"access_token");
|
|
||||||
if (accessToken != null)
|
|
||||||
Config.GoogleAccessToken = (string)accessToken;
|
|
||||||
|
|
||||||
JToken tokenType = json.SelectToken(@"token_type");
|
|
||||||
if (tokenType != null)
|
|
||||||
Config.GoogleTokenType = (string)tokenType;
|
|
||||||
|
|
||||||
JToken expiresIn = json.SelectToken(@"expires_in");
|
|
||||||
if (expiresIn != null)
|
|
||||||
Config.GoogleTokenExpires = (long?)expiresIn;
|
|
||||||
|
|
||||||
JToken refreshToken = json.SelectToken(@"refresh_token");
|
|
||||||
if (refreshToken != null)
|
|
||||||
Config.GoogleRefreshToken = (string)refreshToken;
|
|
||||||
|
|
||||||
JToken tokenIssued = json.SelectToken(@"Issued");
|
|
||||||
if (refreshToken != null)
|
|
||||||
Config.GoogleTokenIssued = (string)tokenIssued;
|
|
||||||
|
|
||||||
return Task.Delay(0);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,10 +1,6 @@
|
||||||
using Google.Apis.Auth.OAuth2;
|
using Renci.SshNet;
|
||||||
using Google.Apis.Drive.v3;
|
|
||||||
using Google.Apis.Services;
|
|
||||||
using Renci.SshNet;
|
|
||||||
using Renci.SshNet.Common;
|
using Renci.SshNet.Common;
|
||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.IO.Compression;
|
using System.IO.Compression;
|
||||||
|
@ -17,7 +13,6 @@ using System.Text;
|
||||||
using System.Threading;
|
using System.Threading;
|
||||||
using System.Xml;
|
using System.Xml;
|
||||||
using System.Xml.Serialization;
|
using System.Xml.Serialization;
|
||||||
using GFile = Google.Apis.Drive.v3.Data.File;
|
|
||||||
|
|
||||||
namespace BackupManager
|
namespace BackupManager
|
||||||
{
|
{
|
||||||
|
@ -25,8 +20,6 @@ namespace BackupManager
|
||||||
{
|
{
|
||||||
public readonly static Stopwatch sw = new Stopwatch();
|
public readonly static Stopwatch sw = new Stopwatch();
|
||||||
|
|
||||||
private const string FOLDER_MIME = @"application/vnd.google-apps.folder";
|
|
||||||
|
|
||||||
private const string CONFIG_NAME = @"FlashiiBackupManager.v1.xml";
|
private const string CONFIG_NAME = @"FlashiiBackupManager.v1.xml";
|
||||||
|
|
||||||
public static bool IsWindows
|
public static bool IsWindows
|
||||||
|
@ -47,7 +40,6 @@ namespace BackupManager
|
||||||
CONFIG_NAME
|
CONFIG_NAME
|
||||||
);
|
);
|
||||||
|
|
||||||
private static DriveService DriveService;
|
|
||||||
private static object BackupStorage;
|
private static object BackupStorage;
|
||||||
|
|
||||||
private static SftpClient SFTP;
|
private static SftpClient SFTP;
|
||||||
|
@ -113,22 +105,6 @@ namespace BackupManager
|
||||||
|
|
||||||
switch (Config.StorageMethod)
|
switch (Config.StorageMethod)
|
||||||
{
|
{
|
||||||
case StorageMethod.GoogleDrive:
|
|
||||||
UserCredential uc = GoogleAuthenticate(
|
|
||||||
new ClientSecrets
|
|
||||||
{
|
|
||||||
ClientId = Config.GoogleClientId,
|
|
||||||
ClientSecret = Config.GoogleClientSecret,
|
|
||||||
},
|
|
||||||
new[] {
|
|
||||||
DriveService.Scope.Drive,
|
|
||||||
DriveService.Scope.DriveFile,
|
|
||||||
}
|
|
||||||
);
|
|
||||||
|
|
||||||
CreateDriveService(uc);
|
|
||||||
break;
|
|
||||||
|
|
||||||
case StorageMethod.Sftp:
|
case StorageMethod.Sftp:
|
||||||
if (string.IsNullOrWhiteSpace(Config.SftpHost) || string.IsNullOrWhiteSpace(Config.SftpUsername))
|
if (string.IsNullOrWhiteSpace(Config.SftpHost) || string.IsNullOrWhiteSpace(Config.SftpUsername))
|
||||||
{
|
{
|
||||||
|
@ -185,10 +161,6 @@ namespace BackupManager
|
||||||
|
|
||||||
switch (f)
|
switch (f)
|
||||||
{
|
{
|
||||||
case GFile fgf:
|
|
||||||
Log($@"MySQL dump uploaded: {fgf.Name} ({fgf.Id})");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Log($@"MySQL dump uploaded.");
|
Log($@"MySQL dump uploaded.");
|
||||||
break;
|
break;
|
||||||
|
@ -216,10 +188,6 @@ namespace BackupManager
|
||||||
|
|
||||||
switch (f)
|
switch (f)
|
||||||
{
|
{
|
||||||
case GFile fgf:
|
|
||||||
Log($@"Misuzu data uploaded: {fgf.Name} ({fgf.Id})");
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Log($@"Misuzu data uploaded.");
|
Log($@"Misuzu data uploaded.");
|
||||||
break;
|
break;
|
||||||
|
@ -281,18 +249,6 @@ namespace BackupManager
|
||||||
|
|
||||||
switch (BackupStorage)
|
switch (BackupStorage)
|
||||||
{
|
{
|
||||||
case GFile gfile:
|
|
||||||
FilesResource.CreateMediaUpload request = DriveService.Files.Create(new GFile
|
|
||||||
{
|
|
||||||
Name = name,
|
|
||||||
Parents = new List<string> {
|
|
||||||
gfile.Id,
|
|
||||||
},
|
|
||||||
}, stream, type);
|
|
||||||
request.Fields = @"id, name";
|
|
||||||
request.Upload();
|
|
||||||
return request.ResponseBody;
|
|
||||||
|
|
||||||
case string scpName:
|
case string scpName:
|
||||||
SFTP.UploadFile(stream, scpName + @"/" + name);
|
SFTP.UploadFile(stream, scpName + @"/" + name);
|
||||||
break;
|
break;
|
||||||
|
@ -413,57 +369,10 @@ namespace BackupManager
|
||||||
return output;
|
return output;
|
||||||
}
|
}
|
||||||
|
|
||||||
public static UserCredential GoogleAuthenticate(ClientSecrets cs, string[] scopes)
|
|
||||||
{
|
|
||||||
Log(@"Authenticating with Google...");
|
|
||||||
return GoogleWebAuthorizationBroker.AuthorizeAsync(
|
|
||||||
cs,
|
|
||||||
scopes,
|
|
||||||
@"user",
|
|
||||||
CancellationToken.None,
|
|
||||||
new GoogleDatastore(Config),
|
|
||||||
new PromptCodeReceiver()
|
|
||||||
).Result;
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void CreateDriveService(UserCredential uc)
|
|
||||||
{
|
|
||||||
Log(@"Creating Google Drive service...");
|
|
||||||
DriveService = new DriveService(new BaseClientService.Initializer()
|
|
||||||
{
|
|
||||||
HttpClientInitializer = uc,
|
|
||||||
ApplicationName = @"Flashii Backup Manager",
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
public static void GetBackupStorage(string name = null)
|
public static void GetBackupStorage(string name = null)
|
||||||
{
|
{
|
||||||
switch (Config.StorageMethod)
|
switch (Config.StorageMethod)
|
||||||
{
|
{
|
||||||
case StorageMethod.GoogleDrive:
|
|
||||||
name = name ?? Config.GoogleBackupDirectory;
|
|
||||||
Log(@"Getting backup folder...");
|
|
||||||
FilesResource.ListRequest lr = DriveService.Files.List();
|
|
||||||
lr.Q = $@"name = '{name}' and mimeType = '{FOLDER_MIME}'";
|
|
||||||
lr.PageSize = 1;
|
|
||||||
lr.Fields = @"files(id)";
|
|
||||||
GFile backupFolder = lr.Execute().Files.FirstOrDefault();
|
|
||||||
|
|
||||||
if (backupFolder == null)
|
|
||||||
{
|
|
||||||
Log(@"Backup folder doesn't exist yet, creating it...");
|
|
||||||
FilesResource.CreateRequest dcr = DriveService.Files.Create(new GFile
|
|
||||||
{
|
|
||||||
Name = name,
|
|
||||||
MimeType = FOLDER_MIME,
|
|
||||||
});
|
|
||||||
dcr.Fields = @"id";
|
|
||||||
backupFolder = dcr.Execute();
|
|
||||||
}
|
|
||||||
|
|
||||||
BackupStorage = backupFolder;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case StorageMethod.Sftp:
|
case StorageMethod.Sftp:
|
||||||
string directory = (BackupStorage = name ?? Config.SftpBackupDirectoryPath) as string;
|
string directory = (BackupStorage = name ?? Config.SftpBackupDirectoryPath) as string;
|
||||||
try
|
try
|
||||||
|
|
Reference in a new issue