Search code examples
c#oauthdropboxdropnet

Access token key and secret not working in DropNet


I'm using DropNet for Dropbox OAuth but I have one major problem - I can't store access token key and secret cause there is no point storing them. The storing mechanism is not a problem and not a key problem here - the problem is in this:

private void dropboxUpload()
{
    DropNetClient _Dclient = new DropNetClient("xxxxxxxxxxxxxxx", "yyyyyyyyyyyyyyy");
    _Dclient.UseSandbox = true;
    if (!dropboxLoggedIn)
    {
            _Dclient.GetToken();
            string url = _Dclient.BuildAuthorizeUrl();
            Process.Start(url);
            if (MessageBox.Show("Click OK after you have allowed Sizester to create and access a sub-folder called Sizester in a folder called Apps in your Dropbox account.", "Sizester access request", MessageBoxButtons.OKCancel) != System.Windows.Forms.DialogResult.OK)
            {
                return;
            }
        }
        try
        {
            if (!dropboxLoggedIn)
            {
                _Dclient.GetAccessToken();
                dropboxAsecret = _Dclient.UserLogin.Secret;
                dropboxAtoken = _Dclient.UserLogin.Token;
            }
            else
            {
                _Dclient.UserLogin.Token = dropboxAtoken;
                _Dclient.UserLogin.Secret = dropboxAsecret;
            }
            dropboxLoggedIn = true;
            //...
            _Dclient.UploadFile("/", fileE, FileToByteArray(newFilePath));
            MessageBox.Show("Successfully uploaded to Dropbox.", "Uploaded to Dropbox");
        }
        catch (Exception dropboxEx)
        {
            MessageBox.Show("Error: " + dropboxEx.Message);
        }
    }

The problem here is - first time it uploads ok, but the second time it doesn't - although dropboxLoggedIn is true, and access token key and secret are stored ok, it doesn't upload file, but more strangely it doesn't return any error or exception. If I move GetToken out of if same thing happens. I know I'm doing somewhere wrong, but I can't quite get where. I've striped some parts of code like file paths and getting the file which are irrelevant. I did the same thing for Twitter, but it works there with no problems. Any ideas?


Solution

  • Ok, so the problem was in initialization of the object - if you do:

    DropNetClient _Dclient = new DropNetClient("xxxxxxxxxxxxxxx", "yyyyyyyyyyyyyyy");
    _Dclient.UseSandbox = true;
    _Dclient.UserLogin.Token = "zzzzzzzzzzzzzzz";
    _Dclient.UserLogin.Secret = "wwwwwwwwwwwwww";
    

    This wouldn't work - instead it needs to be initialized like this:

    DropNetClient _Dclient = new DropNetClient("xxxxxxxxxxxxxxx", "yyyyyyyyyyyyyyy","zzzzzzzzzzzzzzz","wwwwwwwwwwwwww");
    _Dclient.UseSandbox = true;
    

    I'm not sure where I found the first code sample in some documentation or forum but it's wrong. If you use it - no error or exception will happen, but dropbox file upload or operation won't be done. If you use the second one all will work.