mirror of
https://github.com/ShareX/ShareX.git
synced 2024-07-04 22:21:23 +12:00
Dropbox OAuth and get account info works now
This commit is contained in:
parent
68509503a3
commit
d0055bb819
|
@ -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<DropboxAccountInfo>(response);
|
||||
account = JsonConvert.DeserializeObject<DropboxAccount>(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
|
||||
|
|
|
@ -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))
|
||||
{
|
||||
|
|
|
@ -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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
|
|
@ -130,7 +130,7 @@ public class UploadersConfig : SettingsBase<UploadersConfig>
|
|||
// 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;
|
||||
|
|
Loading…
Reference in a new issue