title: Uploading to Dropbox from Google Drive
body: <p>As a test case, I'm trying to copy a file from Google Drive to Dropbox using Google Scripts</p>
  
  <pre><code>function pushBuild() {
    // Setup OAuthServiceConfig
    var oAuthConfig = UrlFetchApp.addOAuthService("dropbox");
    oAuthConfig.setAccessTokenUrl("https://api.dropbox.com/1/oauth/access_token");
    oAuthConfig.setRequestTokenUrl("https://api.dropbox.com/1/oauth/request_token");
    oAuthConfig.setAuthorizationUrl("https://www.dropbox.com/1/oauth/authorize");
    oAuthConfig.setConsumerKey(ScriptProperties.getProperty("dropboxKey"));
    oAuthConfig.setConsumerSecret(ScriptProperties.getProperty("dropboxSecret"));
  
    var fileName = "blah.zip"
    var folderName = "upload_dir"
  
    var docs = DocsList.getFolder(folderName).find(fileName);
    for(n=0;n&lt;docs.length;++n){
      if(docs[n].getName() == fileName){
        var ID = docs[n].getId();
        var options = {
          "oAuthServiceName" : "dropbox",
          "oAuthUseToken" : "always",
          "method" : "put",
          "payload" : docs[n].getBlob().getBytes(),
          "contentType" : "application/zip"        
      };
  
    var response = UrlFetchApp.fetch("https://api-content.dropbox.com/1/files_put/sandbox/upload_dir/" + fileName, options);
  
    Logger.log(response);
    }
   }
  
  }
  </code></pre>
  
  <p>The authorization request for the application in Dropbox appears and it tells me that I've successfully authorized my app, but when I check, the app is not in the list of "My Apps", the file has not been uploaded and there are no entries in the log. The directory "upload_dir" exists on both GD and DB. I've tried the same code with "App Folder" and "Full Dropbox" app types, but get the same result.</p>
  
  <p>Additionally, running the script again once again triggers the Authorization page, similar to</p>
  
  <p><img src="https://i.stack.imgur.com/MpOb3.png" alt="this"></p>
  
  <p>to appear, clicking "Allow" then shows the success screen but the application is not listed in "My Apps". Running the script again repeats the process.</p>
  
  <p>Can anyone point out what I've done wrong?</p>
  
  <p>Update</p>
  
  <p>So, I've now tried to implement this using the individual api calls and am still not having any success.</p>
  
  <pre><code>function testOAuth() {
  
    var timestamp = getTimestamp();
    var nonce = getNonce(timestamp);
  
    var authString = 'OAuth oauth_version="1.0", oauth_signature_method="PLAINTEXT", oauth_signature="' + encodeURIComponent(ScriptProperties.getProperty("dropboxSecret") + '&amp;') + '", oauth_consumer_key="' + ScriptProperties.getProperty("dropboxKey") + '"';
  
    Logger.log(authString)
  
    var options = {
      method : "POST",
      headers : {"Authorization" : authString}
    }
  
    var response = UrlFetchApp.fetch("https://api.dropbox.com/1/oauth/request_token",options);  
    var params = response.getContentText().split("&amp;");  
    var map = new Map;  
        for(i = 0; i &lt; params.length; i++){
          var param = params[i].split("=");
          map.put(param[0],param[1]);        
        }
  
    var authStringx = "https://www.dropbox.com/1/oauth/authorize?oauth_token=" + map.get("oauth_token");
  
    Logger.log(authStringx);
  
    var response2 = UrlFetchApp.fetch(authStringx);
  
    Logger.log(response2.getContentText());
  
    var authString2 = 'OAuth oauth_version="1.0", oauth_signature_method="PLAINTEXT", oauth_token="' + map.get("oauth_token") + '" , oauth_signature="' + encodeURIComponent(ScriptProperties.getProperty("dropboxSecret") + '&amp;' + map.get("oauth_token_secret")) + '", oauth_consumer_key="' + ScriptProperties.getProperty("dropboxKey") + '",oauth_timestamp="'+ timestamp +'", oauth_nonce="' + nonce +'"';
  
    Logger.log(authString2);
  
    var options3 = {
      "method" : "POST",
      "Authorization" : authString2  
    }
  
    var response3 = UrlFetchApp.fetch("https://api.dropbox.com/1/oauth/access_token", options3);
  
    Logger.log(response3.getContentText());
  }
  
  var getTimestamp = function(){
    return (Math.floor((new Date()).getTime() / 1000)).toString()
  }
  
  var getNonce = function(timestamp){
    return timestamp + Math.floor( Math.random() * 100000000)
  }
  </code></pre>
  
  <p>The code implementation for the map is <a href="http://pastebin.com/KBi63NAj" rel="noreferrer">here</a>. The main problem that I can see is that authorize step does not invoke the Dropbox authorize end point (ie no browser redirection takes place to authorize the application). If I place a breakpoint just after the line <code>Logger.log(authStringx);</code> and manually visit the web page pasting in the contents of authStringx I get the screen to authorize my app. I accept that and get the message that the app is registered in "My Apps". I now let the program continue and I am greeted with the message</p>
  
  <p><img src="https://i.stack.imgur.com/6xIe4.png" alt="enter image description here"></p>
  
  <p>Any ideas?</p>