From d0055bb8193e12baed081381bede07dc14236351 Mon Sep 17 00:00:00 2001 From: Jaex Date: Wed, 29 Jun 2016 03:52:45 +0300 Subject: [PATCH] Dropbox OAuth and get account info works now --- ShareX.UploadersLib/FileUploaders/Dropbox.cs | 75 +++++++++++++------ .../FileUploaders/GoogleDrive.cs | 2 +- ShareX.UploadersLib/Forms/DropboxFilesForm.cs | 9 ++- .../Forms/UploadersConfigFormHelper.cs | 19 ++--- ShareX.UploadersLib/UploadersConfig.cs | 2 +- 5 files changed, 70 insertions(+), 37 deletions(-) diff --git a/ShareX.UploadersLib/FileUploaders/Dropbox.cs b/ShareX.UploadersLib/FileUploaders/Dropbox.cs index 5d007bea1..97cceda3d 100644 --- a/ShareX.UploadersLib/FileUploaders/Dropbox.cs +++ b/ShareX.UploadersLib/FileUploaders/Dropbox.cs @@ -49,7 +49,7 @@ public override bool CheckConfig(UploadersConfig config) public override GenericUploader CreateUploader(UploadersConfig config, TaskReferenceHelper taskInfo) { - return new Dropbox(config.DropboxOAuth2Info, config.DropboxAccountInfo) + return new Dropbox(config.DropboxOAuth2Info, config.DropboxAccount) { UploadPath = NameParser.Parse(NameParserType.URL, Dropbox.TidyUploadPath(config.DropboxUploadPath)), AutoCreateShareableLink = config.DropboxAutoCreateShareableLink, @@ -63,7 +63,7 @@ public override GenericUploader CreateUploader(UploadersConfig config, TaskRefer public sealed class Dropbox : FileUploader, IOAuth2Basic { public OAuth2Info AuthInfo { get; set; } - public DropboxAccountInfo AccountInfo { get; set; } + public DropboxAccount Account { get; set; } public string UploadPath { get; set; } public bool AutoCreateShareableLink { get; set; } public DropboxURLType ShareURLType { get; set; } @@ -71,12 +71,14 @@ public sealed class Dropbox : FileUploader, IOAuth2Basic private const string APIVersion = "2"; private const string Root = "dropbox"; - private const string URLWEB = "https://www.dropbox.com/"; - private const string URLAPI = "https://api.dropboxapi.com/" + APIVersion; + private const string URLWEB = "https://www.dropbox.com"; + private const string URLAPIBase = "https://api.dropboxapi.com"; + private const string URLAPI = URLAPIBase + "/" + APIVersion; private const string URLContent = "https://content.dropboxapi.com/" + APIVersion; + private const string URLNotify = "https://notify.dropboxapi.com/" + APIVersion; private const string URLOAuth2Authorize = URLWEB + "/oauth2/authorize"; - private const string URLOAuth2Token = URLAPI + "/oauth2/token"; + private const string URLOAuth2Token = URLAPIBase + "/oauth2/token"; private const string URLGetCurrentAccount = URLAPI + "/users/get_current_account"; private const string URLDownload = URLContent + "/files/download"; @@ -96,9 +98,9 @@ public Dropbox(OAuth2Info oauth) AuthInfo = oauth; } - public Dropbox(OAuth2Info oauth, DropboxAccountInfo accountInfo) : this(oauth) + public Dropbox(OAuth2Info oauth, DropboxAccount account) : this(oauth) { - AccountInfo = accountInfo; + Account = account; } public string GetAuthorizationURL() @@ -143,21 +145,21 @@ private NameValueCollection GetAuthHeaders() #region Dropbox accounts - public DropboxAccountInfo GetAccountInfo() + public DropboxAccount GetAccountInfo() { - DropboxAccountInfo account = null; + DropboxAccount account = null; if (OAuth2Info.CheckOAuth(AuthInfo)) { - string response = SendRequest(HttpMethod.GET, URLGetCurrentAccount, headers: GetAuthHeaders()); + string response = SendRequestJSON(URLGetCurrentAccount, "null", GetAuthHeaders()); if (!string.IsNullOrEmpty(response)) { - account = JsonConvert.DeserializeObject(response); + account = JsonConvert.DeserializeObject(response); if (account != null) { - AccountInfo = account; + Account = account; } } } @@ -383,10 +385,11 @@ private void CheckEarlyURLCopy(string path, string fileName) public string GetPublicURL(string path) { - return GetPublicURL(AccountInfo.Uid, path); + // TODO: uid + return GetPublicURL(Account.account_id, path); } - public static string GetPublicURL(long userID, string path) + public static string GetPublicURL(string userID, string path) { if (!string.IsNullOrEmpty(path)) { @@ -395,7 +398,7 @@ public static string GetPublicURL(long userID, string path) if (path.StartsWith("Public/", StringComparison.InvariantCultureIgnoreCase)) { path = URLHelpers.URLPathEncode(path.Substring(7)); - return URLHelpers.CombineURL(URLPublicDirect, userID.ToString(), path); + return URLHelpers.CombineURL(URLPublicDirect, userID, path); } } @@ -420,14 +423,42 @@ public enum DropboxURLType Direct } - public class DropboxAccountInfo + public class DropboxPath { - public string Referral_link { get; set; } // The user's referral link. - public string Display_name { get; set; } // The user's display name. - public long Uid { get; set; } // The user's unique Dropbox ID. - public string Country { get; set; } // The user's two-letter country code, if available. - public DropboxQuotaInfo Quota_info { get; set; } - public string Email { get; set; } + public string path { get; set; } + + public DropboxPath(string path) + { + this.path = path; + } + } + + public class DropboxAccount + { + public string account_id { get; set; } + public DropboxAccountName name { get; set; } + public string email { get; set; } + public bool email_verified { get; set; } + public bool disabled { get; set; } + public string locale { get; set; } + public string referral_link { get; set; } + public bool is_paired { get; set; } + public DropboxAccountType account_type { get; set; } + public string profile_photo_url { get; set; } + public string country { get; set; } + } + + public class DropboxAccountName + { + public string given_name { get; set; } + public string surname { get; set; } + public string familiar_name { get; set; } + public string display_name { get; set; } + } + + public class DropboxAccountType + { + public string tag { get; set; } } public class DropboxQuotaInfo diff --git a/ShareX.UploadersLib/FileUploaders/GoogleDrive.cs b/ShareX.UploadersLib/FileUploaders/GoogleDrive.cs index c16937a14..e24f6fa2a 100644 --- a/ShareX.UploadersLib/FileUploaders/GoogleDrive.cs +++ b/ShareX.UploadersLib/FileUploaders/GoogleDrive.cs @@ -251,7 +251,7 @@ public override UploadResult Upload(Stream stream, string fileName) string metadata = GetMetadata(fileName, FolderID); UploadResult result = UploadData(stream, "https://www.googleapis.com/upload/drive/v2/files?uploadType=multipart", fileName, headers: GetAuthHeaders(), - requestContentType: "multipart/related", metadata: metadata); + contentType: "multipart/related", metadata: metadata); if (!string.IsNullOrEmpty(result.Response)) { diff --git a/ShareX.UploadersLib/Forms/DropboxFilesForm.cs b/ShareX.UploadersLib/Forms/DropboxFilesForm.cs index 00bb1a222..bd74032f4 100644 --- a/ShareX.UploadersLib/Forms/DropboxFilesForm.cs +++ b/ShareX.UploadersLib/Forms/DropboxFilesForm.cs @@ -39,17 +39,17 @@ public partial class DropboxFilesForm : Form public string CurrentFolderPath { get; private set; } private Dropbox dropbox; - private DropboxAccountInfo dropboxAccountInfo; + private DropboxAccount dropboxAccount; private ImageListManager ilm; private bool isSelectedFile, isSelectedPublic; - public DropboxFilesForm(OAuth2Info oauth, string path, DropboxAccountInfo accountInfo) + public DropboxFilesForm(OAuth2Info oauth, string path, DropboxAccount account) { InitializeComponent(); Icon = ShareXResources.Icon; dropbox = new Dropbox(oauth); - dropboxAccountInfo = accountInfo; + dropboxAccount = account; ilm = new ImageListManager(lvDropboxFiles); if (path != null) @@ -156,7 +156,8 @@ private void tsmiCopyPublicLink_Click(object sender, EventArgs e) if (content != null && !content.Is_dir && content.Path.StartsWith("/Public/", StringComparison.InvariantCultureIgnoreCase)) { - string url = Dropbox.GetPublicURL(dropboxAccountInfo.Uid, content.Path); + // TODO: uid + string url = Dropbox.GetPublicURL(dropboxAccount.account_id, content.Path); ClipboardHelpers.CopyText(url); } } diff --git a/ShareX.UploadersLib/Forms/UploadersConfigFormHelper.cs b/ShareX.UploadersLib/Forms/UploadersConfigFormHelper.cs index 6e3fed7f5..23b169c52 100644 --- a/ShareX.UploadersLib/Forms/UploadersConfigFormHelper.cs +++ b/ShareX.UploadersLib/Forms/UploadersConfigFormHelper.cs @@ -437,7 +437,7 @@ public void DropboxOpenFiles() { if (OAuth2Info.CheckOAuth(Config.DropboxOAuth2Info)) { - using (DropboxFilesForm filesForm = new DropboxFilesForm(Config.DropboxOAuth2Info, GetDropboxUploadPath(), Config.DropboxAccountInfo)) + using (DropboxFilesForm filesForm = new DropboxFilesForm(Config.DropboxOAuth2Info, GetDropboxUploadPath(), Config.DropboxAccount)) { if (filesForm.ShowDialog() == DialogResult.OK) { @@ -483,12 +483,12 @@ public void DropboxAuthComplete(string code) if (result) { - Config.DropboxAccountInfo = dropbox.GetAccountInfo(); + Config.DropboxAccount = dropbox.GetAccountInfo(); UpdateDropboxStatus(); oauth2Dropbox.Status = OAuthLoginStatus.LoginSuccessful; - if (Config.DropboxAccountInfo != null) + if (Config.DropboxAccount != null) { MessageBox.Show(Resources.UploadersConfigForm_Login_successful, "ShareX", MessageBoxButtons.OK, MessageBoxIcon.Information); } @@ -507,7 +507,7 @@ public void DropboxAuthComplete(string code) } } - Config.DropboxAccountInfo = null; + Config.DropboxAccount = null; UpdateDropboxStatus(); } catch (Exception ex) @@ -519,15 +519,16 @@ public void DropboxAuthComplete(string code) private void UpdateDropboxStatus() { - if (OAuth2Info.CheckOAuth(Config.DropboxOAuth2Info) && Config.DropboxAccountInfo != null) + if (OAuth2Info.CheckOAuth(Config.DropboxOAuth2Info) && Config.DropboxAccount != null) { StringBuilder sb = new StringBuilder(); - sb.AppendLine(Resources.UploadersConfigForm_UpdateDropboxStatus_Email_ + " " + Config.DropboxAccountInfo.Email); - sb.AppendLine(Resources.UploadersConfigForm_UpdateDropboxStatus_Name_ + " " + Config.DropboxAccountInfo.Display_name); - sb.AppendLine(Resources.UploadersConfigForm_UpdateDropboxStatus_User_ID_ + " " + Config.DropboxAccountInfo.Uid.ToString()); + sb.AppendLine(Resources.UploadersConfigForm_UpdateDropboxStatus_Email_ + " " + Config.DropboxAccount.email); + sb.AppendLine(Resources.UploadersConfigForm_UpdateDropboxStatus_Name_ + " " + Config.DropboxAccount.name.display_name); + sb.AppendLine(Resources.UploadersConfigForm_UpdateDropboxStatus_User_ID_ + " " + Config.DropboxAccount.account_id); string uploadPath = GetDropboxUploadPath(); sb.AppendLine(Resources.UploadersConfigForm_UpdateDropboxStatus_Upload_path_ + " " + uploadPath); - sb.AppendLine(Resources.UploadersConfigForm_UpdateDropboxStatus_Download_path_ + " " + Dropbox.GetPublicURL(Config.DropboxAccountInfo.Uid, uploadPath + "Example.png")); + // TODO: uid + sb.AppendLine(Resources.UploadersConfigForm_UpdateDropboxStatus_Download_path_ + " " + Dropbox.GetPublicURL(Config.DropboxAccount.account_id, uploadPath + "Example.png")); lblDropboxStatus.Text = sb.ToString(); btnDropboxShowFiles.Enabled = true; } diff --git a/ShareX.UploadersLib/UploadersConfig.cs b/ShareX.UploadersLib/UploadersConfig.cs index 4bbdd3be4..254d14db4 100644 --- a/ShareX.UploadersLib/UploadersConfig.cs +++ b/ShareX.UploadersLib/UploadersConfig.cs @@ -130,7 +130,7 @@ public class UploadersConfig : SettingsBase // Dropbox public OAuth2Info DropboxOAuth2Info = null; - public DropboxAccountInfo DropboxAccountInfo = null; + public DropboxAccount DropboxAccount = null; public string DropboxUploadPath = "Public/ShareX/%y/%mo"; public bool DropboxAutoCreateShareableLink = false; public DropboxURLType DropboxURLType = DropboxURLType.Default;