mirror of
https://github.com/ShareX/ShareX.git
synced 2024-06-30 20:20:34 +12:00
Use OAuthLoopbackControl for Google Cloud Storage
This commit is contained in:
parent
542df108d1
commit
3382c62c41
|
@ -62,6 +62,8 @@ public override GenericUploader CreateUploader(UploadersConfig config, TaskRefer
|
||||||
|
|
||||||
public sealed class GoogleCloudStorage : FileUploader, IOAuth2
|
public sealed class GoogleCloudStorage : FileUploader, IOAuth2
|
||||||
{
|
{
|
||||||
|
public GoogleOAuth2 OAuth2 { get; private set; }
|
||||||
|
public OAuth2Info AuthInfo => OAuth2.AuthInfo;
|
||||||
public string Bucket { get; set; }
|
public string Bucket { get; set; }
|
||||||
public string Domain { get; set; }
|
public string Domain { get; set; }
|
||||||
public string Prefix { get; set; }
|
public string Prefix { get; set; }
|
||||||
|
@ -70,36 +72,32 @@ public sealed class GoogleCloudStorage : FileUploader, IOAuth2
|
||||||
public bool RemoveExtensionVideo { get; set; }
|
public bool RemoveExtensionVideo { get; set; }
|
||||||
public bool SetPublicACL { get; set; }
|
public bool SetPublicACL { get; set; }
|
||||||
|
|
||||||
public OAuth2Info AuthInfo => googleAuth.AuthInfo;
|
|
||||||
|
|
||||||
private GoogleOAuth2 googleAuth;
|
|
||||||
|
|
||||||
public GoogleCloudStorage(OAuth2Info oauth)
|
public GoogleCloudStorage(OAuth2Info oauth)
|
||||||
{
|
{
|
||||||
googleAuth = new GoogleOAuth2(oauth, this)
|
OAuth2 = new GoogleOAuth2(oauth, this)
|
||||||
{
|
{
|
||||||
Scope = "https://www.googleapis.com/auth/devstorage.read_write"
|
Scope = "https://www.googleapis.com/auth/devstorage.read_write https://www.googleapis.com/auth/userinfo.profile"
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool RefreshAccessToken()
|
public bool RefreshAccessToken()
|
||||||
{
|
{
|
||||||
return googleAuth.RefreshAccessToken();
|
return OAuth2.RefreshAccessToken();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CheckAuthorization()
|
public bool CheckAuthorization()
|
||||||
{
|
{
|
||||||
return googleAuth.CheckAuthorization();
|
return OAuth2.CheckAuthorization();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string GetAuthorizationURL()
|
public string GetAuthorizationURL()
|
||||||
{
|
{
|
||||||
return googleAuth.GetAuthorizationURL();
|
return OAuth2.GetAuthorizationURL();
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool GetAccessToken(string code)
|
public bool GetAccessToken(string code)
|
||||||
{
|
{
|
||||||
return googleAuth.GetAccessToken(code);
|
return OAuth2.GetAccessToken(code);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override UploadResult Upload(Stream stream, string fileName)
|
public override UploadResult Upload(Stream stream, string fileName)
|
||||||
|
@ -129,7 +127,7 @@ public override UploadResult Upload(Stream stream, string fileName)
|
||||||
|
|
||||||
string serializedGoogleCloudStorageMetadata = JsonConvert.SerializeObject(googleCloudStorageMetadata);
|
string serializedGoogleCloudStorageMetadata = JsonConvert.SerializeObject(googleCloudStorageMetadata);
|
||||||
|
|
||||||
UploadResult result = SendRequestFile($"https://www.googleapis.com/upload/storage/v1/b/{Bucket}/o?uploadType=multipart&fields=name", stream, fileName, null, headers: googleAuth.GetAuthHeaders(), contentType: "multipart/related", relatedData: serializedGoogleCloudStorageMetadata);
|
UploadResult result = SendRequestFile($"https://www.googleapis.com/upload/storage/v1/b/{Bucket}/o?uploadType=multipart&fields=name", stream, fileName, null, headers: OAuth2.GetAuthHeaders(), contentType: "multipart/related", relatedData: serializedGoogleCloudStorageMetadata);
|
||||||
|
|
||||||
GoogleCloudStorageResponse googleCloudStorageResponse = JsonConvert.DeserializeObject<GoogleCloudStorageResponse>(result.Response);
|
GoogleCloudStorageResponse googleCloudStorageResponse = JsonConvert.DeserializeObject<GoogleCloudStorageResponse>(result.Response);
|
||||||
|
|
||||||
|
|
|
@ -196,6 +196,7 @@ private void InitializeComponent()
|
||||||
this.cbOneDriveCreateShareableLink = new System.Windows.Forms.CheckBox();
|
this.cbOneDriveCreateShareableLink = new System.Windows.Forms.CheckBox();
|
||||||
this.oAuth2OneDrive = new ShareX.UploadersLib.OAuthControl();
|
this.oAuth2OneDrive = new ShareX.UploadersLib.OAuthControl();
|
||||||
this.tpGoogleDrive = new System.Windows.Forms.TabPage();
|
this.tpGoogleDrive = new System.Windows.Forms.TabPage();
|
||||||
|
this.oauth2GoogleDrive = new ShareX.UploadersLib.OAuthLoopbackControl();
|
||||||
this.cbGoogleDriveSharedDrive = new System.Windows.Forms.ComboBox();
|
this.cbGoogleDriveSharedDrive = new System.Windows.Forms.ComboBox();
|
||||||
this.cbGoogleDriveDirectLink = new System.Windows.Forms.CheckBox();
|
this.cbGoogleDriveDirectLink = new System.Windows.Forms.CheckBox();
|
||||||
this.cbGoogleDriveUseFolder = new System.Windows.Forms.CheckBox();
|
this.cbGoogleDriveUseFolder = new System.Windows.Forms.CheckBox();
|
||||||
|
@ -271,7 +272,6 @@ private void InitializeComponent()
|
||||||
this.txtGoogleCloudStorageDomain = new System.Windows.Forms.TextBox();
|
this.txtGoogleCloudStorageDomain = new System.Windows.Forms.TextBox();
|
||||||
this.lblGoogleCloudStorageBucket = new System.Windows.Forms.Label();
|
this.lblGoogleCloudStorageBucket = new System.Windows.Forms.Label();
|
||||||
this.txtGoogleCloudStorageBucket = new System.Windows.Forms.TextBox();
|
this.txtGoogleCloudStorageBucket = new System.Windows.Forms.TextBox();
|
||||||
this.oauth2GoogleCloudStorage = new ShareX.UploadersLib.OAuthControl();
|
|
||||||
this.tpAzureStorage = new System.Windows.Forms.TabPage();
|
this.tpAzureStorage = new System.Windows.Forms.TabPage();
|
||||||
this.lblAzureStorageURLPreview = new System.Windows.Forms.Label();
|
this.lblAzureStorageURLPreview = new System.Windows.Forms.Label();
|
||||||
this.lblAzureStorageURLPreviewLabel = new System.Windows.Forms.Label();
|
this.lblAzureStorageURLPreviewLabel = new System.Windows.Forms.Label();
|
||||||
|
@ -630,7 +630,7 @@ private void InitializeComponent()
|
||||||
this.tcUploaders = new System.Windows.Forms.TabControl();
|
this.tcUploaders = new System.Windows.Forms.TabControl();
|
||||||
this.tttvMain = new ShareX.HelpersLib.TabToTreeView();
|
this.tttvMain = new ShareX.HelpersLib.TabToTreeView();
|
||||||
this.actRapidShareAccountType = new ShareX.UploadersLib.AccountTypeControl();
|
this.actRapidShareAccountType = new ShareX.UploadersLib.AccountTypeControl();
|
||||||
this.oauth2GoogleDrive = new ShareX.UploadersLib.OAuthLoopbackControl();
|
this.oauth2GoogleCloudStorage = new ShareX.UploadersLib.OAuthLoopbackControl();
|
||||||
this.tpOtherUploaders.SuspendLayout();
|
this.tpOtherUploaders.SuspendLayout();
|
||||||
this.tcOtherUploaders.SuspendLayout();
|
this.tcOtherUploaders.SuspendLayout();
|
||||||
this.tpTwitter.SuspendLayout();
|
this.tpTwitter.SuspendLayout();
|
||||||
|
@ -1784,6 +1784,14 @@ private void InitializeComponent()
|
||||||
resources.ApplyResources(this.tpGoogleDrive, "tpGoogleDrive");
|
resources.ApplyResources(this.tpGoogleDrive, "tpGoogleDrive");
|
||||||
this.tpGoogleDrive.Name = "tpGoogleDrive";
|
this.tpGoogleDrive.Name = "tpGoogleDrive";
|
||||||
//
|
//
|
||||||
|
// oauth2GoogleDrive
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.oauth2GoogleDrive, "oauth2GoogleDrive");
|
||||||
|
this.oauth2GoogleDrive.Name = "oauth2GoogleDrive";
|
||||||
|
this.oauth2GoogleDrive.UserInfo = null;
|
||||||
|
this.oauth2GoogleDrive.ConnectButtonClicked += new System.Action(this.oauth2GoogleDrive_ConnectButtonClicked);
|
||||||
|
this.oauth2GoogleDrive.DisconnectButtonClicked += new System.Action(this.oauth2GoogleDrive_DisconnectButtonClicked);
|
||||||
|
//
|
||||||
// cbGoogleDriveSharedDrive
|
// cbGoogleDriveSharedDrive
|
||||||
//
|
//
|
||||||
this.cbGoogleDriveSharedDrive.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
this.cbGoogleDriveSharedDrive.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList;
|
||||||
|
@ -2216,6 +2224,7 @@ private void InitializeComponent()
|
||||||
//
|
//
|
||||||
// tpGoogleCloudStorage
|
// tpGoogleCloudStorage
|
||||||
//
|
//
|
||||||
|
this.tpGoogleCloudStorage.Controls.Add(this.oauth2GoogleCloudStorage);
|
||||||
this.tpGoogleCloudStorage.Controls.Add(this.gbGoogleCloudStorageAdvanced);
|
this.tpGoogleCloudStorage.Controls.Add(this.gbGoogleCloudStorageAdvanced);
|
||||||
this.tpGoogleCloudStorage.Controls.Add(this.lblGoogleCloudStoragePathPreview);
|
this.tpGoogleCloudStorage.Controls.Add(this.lblGoogleCloudStoragePathPreview);
|
||||||
this.tpGoogleCloudStorage.Controls.Add(this.lblGoogleCloudStoragePathPreviewLabel);
|
this.tpGoogleCloudStorage.Controls.Add(this.lblGoogleCloudStoragePathPreviewLabel);
|
||||||
|
@ -2225,7 +2234,6 @@ private void InitializeComponent()
|
||||||
this.tpGoogleCloudStorage.Controls.Add(this.txtGoogleCloudStorageDomain);
|
this.tpGoogleCloudStorage.Controls.Add(this.txtGoogleCloudStorageDomain);
|
||||||
this.tpGoogleCloudStorage.Controls.Add(this.lblGoogleCloudStorageBucket);
|
this.tpGoogleCloudStorage.Controls.Add(this.lblGoogleCloudStorageBucket);
|
||||||
this.tpGoogleCloudStorage.Controls.Add(this.txtGoogleCloudStorageBucket);
|
this.tpGoogleCloudStorage.Controls.Add(this.txtGoogleCloudStorageBucket);
|
||||||
this.tpGoogleCloudStorage.Controls.Add(this.oauth2GoogleCloudStorage);
|
|
||||||
resources.ApplyResources(this.tpGoogleCloudStorage, "tpGoogleCloudStorage");
|
resources.ApplyResources(this.tpGoogleCloudStorage, "tpGoogleCloudStorage");
|
||||||
this.tpGoogleCloudStorage.Name = "tpGoogleCloudStorage";
|
this.tpGoogleCloudStorage.Name = "tpGoogleCloudStorage";
|
||||||
this.tpGoogleCloudStorage.UseVisualStyleBackColor = true;
|
this.tpGoogleCloudStorage.UseVisualStyleBackColor = true;
|
||||||
|
@ -2317,16 +2325,6 @@ private void InitializeComponent()
|
||||||
this.txtGoogleCloudStorageBucket.Name = "txtGoogleCloudStorageBucket";
|
this.txtGoogleCloudStorageBucket.Name = "txtGoogleCloudStorageBucket";
|
||||||
this.txtGoogleCloudStorageBucket.TextChanged += new System.EventHandler(this.txtGoogleCloudStorageBucket_TextChanged);
|
this.txtGoogleCloudStorageBucket.TextChanged += new System.EventHandler(this.txtGoogleCloudStorageBucket_TextChanged);
|
||||||
//
|
//
|
||||||
// oauth2GoogleCloudStorage
|
|
||||||
//
|
|
||||||
resources.ApplyResources(this.oauth2GoogleCloudStorage, "oauth2GoogleCloudStorage");
|
|
||||||
this.oauth2GoogleCloudStorage.Name = "oauth2GoogleCloudStorage";
|
|
||||||
this.oauth2GoogleCloudStorage.UserInfo = null;
|
|
||||||
this.oauth2GoogleCloudStorage.OpenButtonClicked += new ShareX.UploadersLib.OAuthControl.OpenButtonClickedEventHandler(this.oauth2GoogleCloudStorage_OpenButtonClicked);
|
|
||||||
this.oauth2GoogleCloudStorage.CompleteButtonClicked += new ShareX.UploadersLib.OAuthControl.CompleteButtonClickedEventHandler(this.oauth2GoogleCloudStorage_CompleteButtonClicked);
|
|
||||||
this.oauth2GoogleCloudStorage.ClearButtonClicked += new ShareX.UploadersLib.OAuthControl.ClearButtonclickedEventHandler(this.oauth2GoogleCloudStorage_ClearButtonClicked);
|
|
||||||
this.oauth2GoogleCloudStorage.RefreshButtonClicked += new ShareX.UploadersLib.OAuthControl.RefreshButtonClickedEventHandler(this.oauth2GoogleCloudStorage_RefreshButtonClicked);
|
|
||||||
//
|
|
||||||
// tpAzureStorage
|
// tpAzureStorage
|
||||||
//
|
//
|
||||||
this.tpAzureStorage.BackColor = System.Drawing.SystemColors.Window;
|
this.tpAzureStorage.BackColor = System.Drawing.SystemColors.Window;
|
||||||
|
@ -4945,13 +4943,13 @@ private void InitializeComponent()
|
||||||
this.actRapidShareAccountType.Name = "actRapidShareAccountType";
|
this.actRapidShareAccountType.Name = "actRapidShareAccountType";
|
||||||
this.actRapidShareAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous;
|
this.actRapidShareAccountType.SelectedAccountType = ShareX.UploadersLib.AccountType.Anonymous;
|
||||||
//
|
//
|
||||||
// oauth2GoogleDrive
|
// oauth2GoogleCloudStorage
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this.oauth2GoogleDrive, "oauth2GoogleDrive");
|
resources.ApplyResources(this.oauth2GoogleCloudStorage, "oauth2GoogleCloudStorage");
|
||||||
this.oauth2GoogleDrive.Name = "oauth2GoogleDrive";
|
this.oauth2GoogleCloudStorage.Name = "oauth2GoogleCloudStorage";
|
||||||
this.oauth2GoogleDrive.UserInfo = null;
|
this.oauth2GoogleCloudStorage.UserInfo = null;
|
||||||
this.oauth2GoogleDrive.ConnectButtonClicked += new System.Action(this.oauth2GoogleDrive_ConnectButtonClicked);
|
this.oauth2GoogleCloudStorage.ConnectButtonClicked += new System.Action(this.oauth2GoogleCloudStorage_ConnectButtonClicked);
|
||||||
this.oauth2GoogleDrive.DisconnectButtonClicked += new System.Action(this.oauth2GoogleDrive_DisconnectButtonClicked);
|
this.oauth2GoogleCloudStorage.DisconnectButtonClicked += new System.Action(this.oauth2GoogleCloudStorage_DisconnectButtonClicked);
|
||||||
//
|
//
|
||||||
// UploadersConfigForm
|
// UploadersConfigForm
|
||||||
//
|
//
|
||||||
|
@ -5604,7 +5602,6 @@ private void InitializeComponent()
|
||||||
internal System.Windows.Forms.TabPage tpYouTube;
|
internal System.Windows.Forms.TabPage tpYouTube;
|
||||||
private System.Windows.Forms.CheckBox cbYouTubeUseShortenedLink;
|
private System.Windows.Forms.CheckBox cbYouTubeUseShortenedLink;
|
||||||
internal System.Windows.Forms.TabPage tpGoogleCloudStorage;
|
internal System.Windows.Forms.TabPage tpGoogleCloudStorage;
|
||||||
private OAuthControl oauth2GoogleCloudStorage;
|
|
||||||
private System.Windows.Forms.TextBox txtGoogleCloudStorageBucket;
|
private System.Windows.Forms.TextBox txtGoogleCloudStorageBucket;
|
||||||
private System.Windows.Forms.Label lblGoogleCloudStorageBucket;
|
private System.Windows.Forms.Label lblGoogleCloudStorageBucket;
|
||||||
private System.Windows.Forms.TextBox txtGoogleCloudStorageDomain;
|
private System.Windows.Forms.TextBox txtGoogleCloudStorageDomain;
|
||||||
|
@ -5694,5 +5691,6 @@ private void InitializeComponent()
|
||||||
private OAuthLoopbackControl oauth2YouTube;
|
private OAuthLoopbackControl oauth2YouTube;
|
||||||
private OAuthLoopbackControl oauth2GooglePhotos;
|
private OAuthLoopbackControl oauth2GooglePhotos;
|
||||||
private OAuthLoopbackControl oauth2GoogleDrive;
|
private OAuthLoopbackControl oauth2GoogleDrive;
|
||||||
|
private OAuthLoopbackControl oauth2GoogleCloudStorage;
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -752,7 +752,8 @@ private void LoadFileUploaderSettings()
|
||||||
|
|
||||||
if (OAuth2Info.CheckOAuth(Config.GoogleCloudStorageOAuth2Info))
|
if (OAuth2Info.CheckOAuth(Config.GoogleCloudStorageOAuth2Info))
|
||||||
{
|
{
|
||||||
oauth2GoogleCloudStorage.Status = OAuthLoginStatus.LoginSuccessful;
|
oauth2GoogleCloudStorage.Connected = true;
|
||||||
|
oauth2GoogleCloudStorage.UserInfo = Config.GoogleCloudStorageUserInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
txtGoogleCloudStorageBucket.Text = Config.GoogleCloudStorageBucket;
|
txtGoogleCloudStorageBucket.Text = Config.GoogleCloudStorageBucket;
|
||||||
|
@ -3081,25 +3082,27 @@ private void cbYouTubeShowDialog_CheckedChanged(object sender, EventArgs e)
|
||||||
|
|
||||||
#region Google Cloud Storage
|
#region Google Cloud Storage
|
||||||
|
|
||||||
private void oauth2GoogleCloudStorage_ClearButtonClicked()
|
private void oauth2GoogleCloudStorage_ConnectButtonClicked()
|
||||||
{
|
|
||||||
Config.GoogleCloudStorageOAuth2Info = null;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void oauth2GoogleCloudStorage_CompleteButtonClicked(string code)
|
|
||||||
{
|
|
||||||
OAuth2Complete(new GoogleCloudStorage(Config.GoogleCloudStorageOAuth2Info), code, oauth2GoogleCloudStorage);
|
|
||||||
}
|
|
||||||
|
|
||||||
private void oauth2GoogleCloudStorage_OpenButtonClicked()
|
|
||||||
{
|
{
|
||||||
OAuth2Info oauth = new OAuth2Info(APIKeys.GoogleClientID, APIKeys.GoogleClientSecret);
|
OAuth2Info oauth = new OAuth2Info(APIKeys.GoogleClientID, APIKeys.GoogleClientSecret);
|
||||||
Config.GoogleCloudStorageOAuth2Info = OAuth2Open(new GoogleCloudStorage(oauth));
|
IOAuth2Loopback oauthLoopback = new GoogleCloudStorage(oauth).OAuth2;
|
||||||
|
|
||||||
|
using (OAuthListenerForm form = new OAuthListenerForm(oauthLoopback))
|
||||||
|
{
|
||||||
|
form.ShowDialog();
|
||||||
|
Config.GoogleCloudStorageOAuth2Info = form.OAuth2Info;
|
||||||
|
Config.GoogleCloudStorageUserInfo = form.UserInfo;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void oauth2GoogleCloudStorage_RefreshButtonClicked()
|
oauth2GoogleCloudStorage.Connected = OAuth2Info.CheckOAuth(Config.GoogleCloudStorageOAuth2Info);
|
||||||
|
oauth2GoogleCloudStorage.UserInfo = Config.GoogleCloudStorageUserInfo;
|
||||||
|
this.ForceActivate();
|
||||||
|
}
|
||||||
|
|
||||||
|
private void oauth2GoogleCloudStorage_DisconnectButtonClicked()
|
||||||
{
|
{
|
||||||
OAuth2Refresh(new GoogleCloudStorage(Config.GoogleCloudStorageOAuth2Info), oauth2GoogleCloudStorage);
|
Config.GoogleCloudStorageOAuth2Info = null;
|
||||||
|
Config.GoogleCloudStorageUserInfo = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void txtGoogleCloudStorageBucket_TextChanged(object sender, EventArgs e)
|
private void txtGoogleCloudStorageBucket_TextChanged(object sender, EventArgs e)
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -432,6 +432,7 @@ public class UploadersConfig : SettingsBase<UploadersConfig>
|
||||||
#region Google Cloud Storage
|
#region Google Cloud Storage
|
||||||
|
|
||||||
public OAuth2Info GoogleCloudStorageOAuth2Info { get; set; } = null;
|
public OAuth2Info GoogleCloudStorageOAuth2Info { get; set; } = null;
|
||||||
|
public OAuthUserInfo GoogleCloudStorageUserInfo { get; set; } = null;
|
||||||
public string GoogleCloudStorageBucket { get; set; } = "";
|
public string GoogleCloudStorageBucket { get; set; } = "";
|
||||||
public string GoogleCloudStorageDomain { get; set; } = "";
|
public string GoogleCloudStorageDomain { get; set; } = "";
|
||||||
public string GoogleCloudStorageObjectPrefix { get; set; } = "ShareX/%y/%mo";
|
public string GoogleCloudStorageObjectPrefix { get; set; } = "ShareX/%y/%mo";
|
||||||
|
|
Loading…
Reference in a new issue