Skip to content

Commit

Permalink
init commit.
Browse files Browse the repository at this point in the history
  • Loading branch information
AnalogJ committed Jun 13, 2014
0 parents commit e234b7f
Show file tree
Hide file tree
Showing 9 changed files with 578 additions and 0 deletions.
16 changes: 16 additions & 0 deletions .gitignore
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
8 changes: 8 additions & 0 deletions Makefile
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
4 changes: 4 additions & 0 deletions index.js
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"};
229 changes: 229 additions & 0 deletions lib/client.js
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;
65 changes: 65 additions & 0 deletions lib/provider.js
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;





Loading

0 comments on commit e234b7f

Please sign in to comment.