forked from filefog/filefog-onedrive
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit e234b7f
Showing
9 changed files
with
578 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,16 @@ | ||
lib-cov | ||
*.seed | ||
*.log | ||
*.csv | ||
*.dat | ||
*.out | ||
*.pid | ||
*.gz | ||
|
||
pids | ||
logs | ||
results | ||
|
||
npm-debug.log | ||
node_modules | ||
/.idea |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,8 @@ | ||
|
||
MOCHA_OPTS= --check-leaks | ||
REPORTER = dot | ||
|
||
test:test-integration | ||
|
||
test-integration: | ||
@NODE_ENV=test node test/runner.js |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,4 @@ | ||
exports.provider = require('./lib/provider.js'); | ||
exports.client = require('./lib/client.js'); | ||
exports.transform = require('./lib/transform.js'); | ||
exports.config = {client_scope : "wl.basic wl.emails wl.offline_access wl.skydrive_update"}; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,229 @@ | ||
var q = require('q') | ||
, fs = require('fs') | ||
, path = require('path') | ||
, extend = require('node.extend') | ||
, request = require('request') | ||
|
||
|
||
var Client = function () { | ||
|
||
this._skydriveClientPromise = null | ||
}; | ||
|
||
Client.prototype.accountInfo = function (options) { | ||
var self = this; | ||
return self._getClient().then(function (client) { | ||
var deferred = q.defer(); | ||
client.get({ | ||
url: 'https://apis.live.net/v5.0/me' | ||
}, | ||
function (err, r, body) { | ||
if (err) return deferred.reject(err); | ||
return deferred.resolve({ "response": r, "body": body}); | ||
}); | ||
|
||
return deferred.promise; | ||
}) | ||
}; | ||
|
||
Client.prototype.checkQuota = function (options) { | ||
var self = this; | ||
return self._getClient().then(function (client) { | ||
var deferred = q.defer(); | ||
client.get({ | ||
url: 'https://apis.live.net/v5.0/me/skydrive/quota' | ||
}, | ||
function (err, r, body) { | ||
if (err) return deferred.reject(err); | ||
return deferred.resolve({ "response": r, "body": body}); | ||
}); | ||
|
||
return deferred.promise; | ||
}) | ||
}; | ||
|
||
Client.prototype.createFile = function (fileName, parentIdentifier, content_buffer, options) { | ||
var self = this; | ||
parentIdentifier = parentIdentifier || 'me/skydrive'; | ||
return self._getClient().then(function (client) { | ||
var deferred = q.defer(); | ||
client.put({ | ||
url: 'https://apis.live.net/v5.0/' + parentIdentifier + '/files/'+ fileName, | ||
body: content_buffer | ||
// multipart: [ | ||
// { | ||
// 'content-type': 'application/octet-stream', | ||
// 'content-disposition':' form-data; name="file"; filename="' + fileName + '"', | ||
// | ||
// } | ||
// ] | ||
}, | ||
function (err, r, body) { | ||
err = errorHandler(r, body, err); | ||
if (err) return deferred.reject(err); | ||
return deferred.resolve({ "response": r, "body": body}); | ||
}); | ||
return deferred.promise; | ||
}) | ||
}; | ||
|
||
Client.prototype.deleteFile = function (identifier) { | ||
var self = this; | ||
return self._getClient().then(function (client) { | ||
var deferred = q.defer(); | ||
client.del( | ||
{ | ||
url: 'https://apis.live.net/v5.0/' + identifier | ||
}, | ||
function (err, r, body) { | ||
err = errorHandler(r, body, err); | ||
if (err) return deferred.reject(err); | ||
return deferred.resolve({ "response": r, "body": body}); | ||
} | ||
); | ||
return deferred.promise; | ||
}) | ||
}; | ||
|
||
Client.prototype.downloadFile = function (identifier) { | ||
var self = this; | ||
return self._getClient().then(function (client) { | ||
var deferred = q.defer(); | ||
client.get( | ||
{ | ||
url: 'https://apis.live.net/v5.0/' + identifier + '/content', | ||
encoding: null /*forces the content to be sent back in binary form, body will always be a buffer.*/ | ||
}, | ||
function (err, r, body) { | ||
err = errorHandler(r, body, err); | ||
if (err) return deferred.reject(err); | ||
return deferred.resolve({ "headers": r.headers, "data": body}); | ||
} | ||
); | ||
return deferred.promise; | ||
}) | ||
}; | ||
|
||
Client.prototype.getFileInformation = function (identifier) { | ||
var self = this; | ||
return self._getClient().then(function (client) { | ||
var deferred = q.defer(); | ||
client.get( | ||
{ | ||
url: 'https://apis.live.net/v5.0/' + identifier | ||
}, | ||
function (err, r, body) { | ||
err = errorHandler(r, body, err); | ||
if (err) return deferred.reject(err); | ||
return deferred.resolve({ "response": r, "body": body}); | ||
} | ||
); | ||
return deferred.promise; | ||
}) | ||
}; | ||
|
||
Client.prototype.createFolder = function (folderName, parentIdentifier, options) { | ||
var self = this; | ||
parentIdentifier = parentIdentifier || 'me/skydrive/' | ||
return self._getClient().then(function (client) { | ||
var deferred = q.defer(); | ||
client.post( | ||
{ | ||
headers: { | ||
'Authorization': 'Bearer ' + this.credentials.access_token, | ||
'content-type': 'application/json' | ||
}, | ||
url: 'https://apis.live.net/v5.0/' + parentIdentifier, | ||
body: '{"name":"' + folderName + '", "description": ""}' | ||
}, | ||
function (err, r, body) { | ||
err = errorHandler(r, body, err); | ||
if (err) return deferred.reject(err); | ||
return deferred.resolve({ "response": r, "body": body}); | ||
} | ||
); | ||
return deferred.promise; | ||
}) | ||
}; | ||
|
||
Client.prototype.deleteFolder = function (identifier){ | ||
var self = this; | ||
return self._getClient().then(function (client) { | ||
var deferred = q.defer(); | ||
client.del( | ||
{ | ||
url: 'https://apis.live.net/v5.0/' + identifier | ||
}, | ||
function (err, r, body) { | ||
err = errorHandler(r, body, err); | ||
if (err) return deferred.reject(err); | ||
return deferred.resolve({ "response": r, "body": body}); | ||
} | ||
); | ||
return deferred.promise; | ||
}) | ||
}; | ||
|
||
Client.prototype.getFolderInformation = function(identifier){ | ||
var self = this; | ||
identifier = identifier || 'me/skydrive' | ||
return self._getClient().then(function (client) { | ||
var deferred = q.defer(); | ||
client.get( | ||
{ | ||
url: 'https://apis.live.net/v5.0/' + identifier | ||
}, | ||
function (err, r, body) { | ||
err = errorHandler(r, body, err); | ||
if (err) return deferred.reject(err); | ||
return deferred.resolve({ "response": r, "body": body}); | ||
} | ||
); | ||
return deferred.promise; | ||
}) | ||
} | ||
|
||
Client.prototype.retrieveFolderItems = function (identifier,options) { | ||
identifier = identifier || 'me/skydrive'; | ||
return this._getClient().then(function (client) { | ||
var deferred = q.defer(); | ||
client.get( | ||
{ | ||
url: 'https://apis.live.net/v5.0/' + identifier + '/files' | ||
}, | ||
function (err, r, body) { | ||
err = errorHandler(r, body, err); | ||
if (err) return deferred.reject(err); | ||
return deferred.resolve({ "response": r, "body": body}); | ||
} | ||
); | ||
return deferred.promise; | ||
}) | ||
}; | ||
|
||
/////////////////////////////////////////////////////////////////////////////// | ||
// Helper Methods | ||
Client.prototype._getClient = function(){ | ||
if (this._skydriveClientPromise) return this._skydriveClientPromise; | ||
var options = { | ||
headers: { | ||
'Authorization': 'Bearer ' + this.credentials.access_token | ||
} | ||
}; | ||
this._skydriveClientPromise = q.when(request.defaults(options)); | ||
return this._skydriveClientPromise; | ||
} | ||
|
||
//custom error detection method. | ||
function errorHandler(response, body, err){ | ||
if(err) return err; | ||
if(response.statusCode != 200 && body.error){ | ||
|
||
return body.error; | ||
//if(response.statusCode == 401 && response.body.error) return new FFTokenRejected(err_message); | ||
//if(response.statusCode == 403) return new FFAdditionalAuthorizationRequired(err_message); | ||
} | ||
|
||
return false; | ||
} | ||
module.exports = Client; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
var q = require('q') | ||
, OAuth = require('oauth'); | ||
|
||
var OAuth2 = OAuth.OAuth2; | ||
|
||
var Provider = function(){ | ||
this._oauth2Client = new OAuth2( | ||
this.config.client_key, | ||
this.config.client_secret, | ||
'', | ||
'https://login.live.com/oauth20_authorize.srf', | ||
'https://login.live.com/oauth20_token.srf' | ||
); | ||
}; | ||
Provider.prototype.interfaces = []; | ||
|
||
|
||
Provider.prototype.oAuthGetAuthorizeUrl = function oAuthGetAuthorizeUrl() { | ||
return this._oauth2Client.getAuthorizeUrl({ | ||
"redirect_uri": this.config.redirect_url, | ||
"response_type": "code", | ||
"scope": this.config.client_scope | ||
|
||
}) | ||
} | ||
|
||
Provider.prototype.oAuthGetAccessToken = function oAuthGetAccessToken(code) { | ||
var deferred = q.defer(); | ||
this._oauth2Client.getOAuthAccessToken( | ||
code, | ||
{ | ||
"grant_type": "authorization_code", | ||
"redirect_uri": this.config.redirect_url | ||
}, | ||
function (err, access_token, refresh_token, results) { | ||
if (err) return deferred.reject(err); | ||
results['access_token'] = access_token; | ||
results['refresh_token'] = refresh_token; | ||
return deferred.resolve(results); | ||
}); | ||
return deferred.promise; | ||
} | ||
|
||
Provider.prototype.oAuthRefreshAccessToken = function oAuthRefreshAccessToken(credentials){ | ||
var deferred = Q.defer(); | ||
this._oauth2Client.getOAuthAccessToken( | ||
credentials.refresh_token, | ||
{ | ||
"grant_type": "refresh_token" | ||
}, | ||
function (err, access_token, refresh_token, results) { | ||
if (err) return deferred.reject(err); | ||
results['access_token'] = access_token; | ||
results['refresh_token'] = refresh_token; | ||
return deferred.resolve(results); | ||
}); | ||
return deferred.promise; | ||
} | ||
|
||
module.exports = Provider; | ||
|
||
|
||
|
||
|
||
|
Oops, something went wrong.