GoogleOauth2.0 First implementation
First try for GoogleOauth2.0
This commit is contained in:
168
express-server/node_modules/oauth/examples/express-gdata/server.js
generated
vendored
Normal file
168
express-server/node_modules/oauth/examples/express-gdata/server.js
generated
vendored
Normal file
@ -0,0 +1,168 @@
|
||||
var express = require('express'),
|
||||
OAuth = require('oauth').OAuth,
|
||||
querystring = require('querystring');
|
||||
|
||||
// Setup the Express.js server
|
||||
var app = express.createServer();
|
||||
app.use(express.logger());
|
||||
app.use(express.bodyParser());
|
||||
app.use(express.cookieParser());
|
||||
app.use(express.session({
|
||||
secret: "skjghskdjfhbqigohqdiouk"
|
||||
}));
|
||||
|
||||
// Home Page
|
||||
app.get('/', function(req, res){
|
||||
if(!req.session.oauth_access_token) {
|
||||
res.redirect("/google_login");
|
||||
}
|
||||
else {
|
||||
res.redirect("/google_contacts");
|
||||
}
|
||||
});
|
||||
|
||||
// Request an OAuth Request Token, and redirects the user to authorize it
|
||||
app.get('/google_login', function(req, res) {
|
||||
|
||||
var getRequestTokenUrl = "https://www.google.com/accounts/OAuthGetRequestToken";
|
||||
|
||||
// GData specifid: scopes that wa want access to
|
||||
var gdataScopes = [
|
||||
querystring.escape("https://www.google.com/m8/feeds/"),
|
||||
querystring.escape("https://www.google.com/calendar/feeds/")
|
||||
];
|
||||
|
||||
var oa = new OAuth(getRequestTokenUrl+"?scope="+gdataScopes.join('+'),
|
||||
"https://www.google.com/accounts/OAuthGetAccessToken",
|
||||
"anonymous",
|
||||
"anonymous",
|
||||
"1.0",
|
||||
"http://localhost:3000/google_cb"+( req.param('action') && req.param('action') != "" ? "?action="+querystring.escape(req.param('action')) : "" ),
|
||||
"HMAC-SHA1");
|
||||
|
||||
oa.getOAuthRequestToken(function(error, oauth_token, oauth_token_secret, results){
|
||||
if(error) {
|
||||
console.log('error');
|
||||
console.log(error);
|
||||
}
|
||||
else {
|
||||
// store the tokens in the session
|
||||
req.session.oa = oa;
|
||||
req.session.oauth_token = oauth_token;
|
||||
req.session.oauth_token_secret = oauth_token_secret;
|
||||
|
||||
// redirect the user to authorize the token
|
||||
res.redirect("https://www.google.com/accounts/OAuthAuthorizeToken?oauth_token="+oauth_token);
|
||||
}
|
||||
})
|
||||
|
||||
});
|
||||
|
||||
// Callback for the authorization page
|
||||
app.get('/google_cb', function(req, res) {
|
||||
|
||||
// get the OAuth access token with the 'oauth_verifier' that we received
|
||||
|
||||
var oa = new OAuth(req.session.oa._requestUrl,
|
||||
req.session.oa._accessUrl,
|
||||
req.session.oa._consumerKey,
|
||||
req.session.oa._consumerSecret,
|
||||
req.session.oa._version,
|
||||
req.session.oa._authorize_callback,
|
||||
req.session.oa._signatureMethod);
|
||||
|
||||
console.log(oa);
|
||||
|
||||
oa.getOAuthAccessToken(
|
||||
req.session.oauth_token,
|
||||
req.session.oauth_token_secret,
|
||||
req.param('oauth_verifier'),
|
||||
function(error, oauth_access_token, oauth_access_token_secret, results2) {
|
||||
|
||||
if(error) {
|
||||
console.log('error');
|
||||
console.log(error);
|
||||
}
|
||||
else {
|
||||
|
||||
// store the access token in the session
|
||||
req.session.oauth_access_token = oauth_access_token;
|
||||
req.session.oauth_access_token_secret = oauth_access_token_secret;
|
||||
|
||||
res.redirect((req.param('action') && req.param('action') != "") ? req.param('action') : "/google_contacts");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
|
||||
function require_google_login(req, res, next) {
|
||||
if(!req.session.oauth_access_token) {
|
||||
res.redirect("/google_login?action="+querystring.escape(req.originalUrl));
|
||||
return;
|
||||
}
|
||||
next();
|
||||
};
|
||||
|
||||
app.get('/google_contacts', require_google_login, function(req, res) {
|
||||
var oa = new OAuth(req.session.oa._requestUrl,
|
||||
req.session.oa._accessUrl,
|
||||
req.session.oa._consumerKey,
|
||||
req.session.oa._consumerSecret,
|
||||
req.session.oa._version,
|
||||
req.session.oa._authorize_callback,
|
||||
req.session.oa._signatureMethod);
|
||||
|
||||
console.log(oa);
|
||||
|
||||
// Example using GData API v3
|
||||
// GData Specific Header
|
||||
oa._headers['GData-Version'] = '3.0';
|
||||
|
||||
oa.getProtectedResource(
|
||||
"https://www.google.com/m8/feeds/contacts/default/full?alt=json",
|
||||
"GET",
|
||||
req.session.oauth_access_token,
|
||||
req.session.oauth_access_token_secret,
|
||||
function (error, data, response) {
|
||||
|
||||
var feed = JSON.parse(data);
|
||||
|
||||
res.render('google_contacts.ejs', {
|
||||
locals: { feed: feed }
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
app.get('/google_calendars', require_google_login, function(req, res) {
|
||||
var oa = new OAuth(req.session.oa._requestUrl,
|
||||
req.session.oa._accessUrl,
|
||||
req.session.oa._consumerKey,
|
||||
req.session.oa._consumerSecret,
|
||||
req.session.oa._version,
|
||||
req.session.oa._authorize_callback,
|
||||
req.session.oa._signatureMethod);
|
||||
// Example using GData API v2
|
||||
// GData Specific Header
|
||||
oa._headers['GData-Version'] = '2';
|
||||
|
||||
oa.getProtectedResource(
|
||||
"https://www.google.com/calendar/feeds/default/allcalendars/full?alt=jsonc",
|
||||
"GET",
|
||||
req.session.oauth_access_token,
|
||||
req.session.oauth_access_token_secret,
|
||||
function (error, data, response) {
|
||||
|
||||
var feed = JSON.parse(data);
|
||||
|
||||
res.render('google_calendars.ejs', {
|
||||
locals: { feed: feed }
|
||||
});
|
||||
});
|
||||
|
||||
});
|
||||
|
||||
app.listen(3000);
|
||||
console.log("listening on http://localhost:3000");
|
21
express-server/node_modules/oauth/examples/express-gdata/views/google_calendars.ejs
generated
vendored
Normal file
21
express-server/node_modules/oauth/examples/express-gdata/views/google_calendars.ejs
generated
vendored
Normal file
@ -0,0 +1,21 @@
|
||||
|
||||
<p><a href="/google_contacts">Check google_contacts</a></p>
|
||||
|
||||
<h1>Google Calendars</h1>
|
||||
|
||||
<% for(var i = 0 ; i < feed.data.items.length ; i++ ) {
|
||||
|
||||
var calendar = feed.data.items[i]; %>
|
||||
<div>
|
||||
|
||||
<h2 style="color:white;background-color:<%= calendar["color"] %>"><%= calendar["title"] %></h2>
|
||||
|
||||
<p>canEdit: <%= calendar["canEdit"] %></p>
|
||||
<p>accessLevel: <%= calendar["accessLevel"] %></p>
|
||||
<p>timeZone: <%= calendar["timeZone"] %></p>
|
||||
<p>kind: <%= calendar["kind"] %></p>
|
||||
<p>updated: <%= calendar["updated"] %></p>
|
||||
<p>created: <%= calendar["created"] %></p>
|
||||
|
||||
</div>
|
||||
<% } %>
|
24
express-server/node_modules/oauth/examples/express-gdata/views/google_contacts.ejs
generated
vendored
Normal file
24
express-server/node_modules/oauth/examples/express-gdata/views/google_contacts.ejs
generated
vendored
Normal file
@ -0,0 +1,24 @@
|
||||
|
||||
<p><a href="/google_calendars">Check google_calendars</a></p>
|
||||
|
||||
<h1>Google Contacts</h1>
|
||||
|
||||
<% for(var i = 0 ; i < feed.feed.entry.length ; i++ ) {
|
||||
|
||||
var contact = feed.feed.entry[i]; %>
|
||||
|
||||
<div>
|
||||
<!-- you can access much more ! Just a sample: -->
|
||||
<%= contact["title"]["$t"] %>
|
||||
<% emails = contact["gd$email"] %>
|
||||
|
||||
<ul>
|
||||
<% for(var j = 0 ; j < emails.length ; j++) { %>
|
||||
<li><%= emails[j]["address" ]%></li>
|
||||
<% } %>
|
||||
</ul>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
<% } %>
|
9
express-server/node_modules/oauth/examples/express-gdata/views/layout.ejs
generated
vendored
Normal file
9
express-server/node_modules/oauth/examples/express-gdata/views/layout.ejs
generated
vendored
Normal file
@ -0,0 +1,9 @@
|
||||
<html>
|
||||
<head>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<%- body %>
|
||||
|
||||
</body>
|
||||
</html>
|
73
express-server/node_modules/oauth/examples/github-example.js
generated
vendored
Normal file
73
express-server/node_modules/oauth/examples/github-example.js
generated
vendored
Normal file
@ -0,0 +1,73 @@
|
||||
var http = require('http');
|
||||
var qs = require('querystring');
|
||||
// var OAuth = require('oauth'), OAuth2 = OAuth.OAuth2;
|
||||
var OAuth2 = require('../lib/oauth2.js').OAuth2;
|
||||
|
||||
var clientID = '';
|
||||
var clientSecret = '';
|
||||
var oauth2 = new OAuth2(clientID,
|
||||
clientSecret,
|
||||
'https://github.com/',
|
||||
'login/oauth/authorize',
|
||||
'login/oauth/access_token',
|
||||
null); /** Custom headers */
|
||||
|
||||
http.createServer(function (req, res) {
|
||||
var p = req.url.split('/');
|
||||
pLen = p.length;
|
||||
|
||||
/**
|
||||
* Authorised url as per github docs:
|
||||
* https://developer.github.com/v3/oauth/#redirect-users-to-request-github-access
|
||||
*
|
||||
* getAuthorizedUrl: https://github.com/ciaranj/node-oauth/blob/master/lib/oauth2.js#L148
|
||||
* Adding params to authorize url with fields as mentioned in github docs
|
||||
*
|
||||
*/
|
||||
var authURL = oauth2.getAuthorizeUrl({
|
||||
redirect_uri: 'http://localhost:8080/code',
|
||||
scope: ['repo', 'user'],
|
||||
state: 'some random string to protect against cross-site request forgery attacks'
|
||||
});
|
||||
|
||||
|
||||
/**
|
||||
* Creating an anchor with authURL as href and sending as response
|
||||
*/
|
||||
var body = '<a href="' + authURL + '"> Get Code </a>';
|
||||
if (pLen === 2 && p[1] === '') {
|
||||
res.writeHead(200, {
|
||||
'Content-Length': body.length,
|
||||
'Content-Type': 'text/html' });
|
||||
res.end(body);
|
||||
} else if (pLen === 2 && p[1].indexOf('code') === 0) {
|
||||
|
||||
/** Github sends auth code so that access_token can be obtained */
|
||||
var qsObj = {};
|
||||
|
||||
/** To obtain and parse code='...' from code?code='...' */
|
||||
qsObj = qs.parse(p[1].split('?')[1]);
|
||||
|
||||
/** Obtaining access_token */
|
||||
oauth2.getOAuthAccessToken(
|
||||
qsObj.code,
|
||||
{'redirect_uri': 'http://localhost:8080/code/'},
|
||||
function (e, access_token, refresh_token, results){
|
||||
if (e) {
|
||||
console.log(e);
|
||||
res.end(e);
|
||||
} else if (results.error) {
|
||||
console.log(results);
|
||||
res.end(JSON.stringify(results));
|
||||
}
|
||||
else {
|
||||
console.log('Obtained access_token: ', access_token);
|
||||
res.end( access_token);
|
||||
}
|
||||
});
|
||||
|
||||
} else {
|
||||
// Unhandled url
|
||||
}
|
||||
|
||||
}).listen(8080);
|
31
express-server/node_modules/oauth/examples/term.ie.oauth-HMAC-SHA1.js
generated
vendored
Normal file
31
express-server/node_modules/oauth/examples/term.ie.oauth-HMAC-SHA1.js
generated
vendored
Normal file
@ -0,0 +1,31 @@
|
||||
var util= require('util')
|
||||
|
||||
var OAuth= require('../lib/oauth').OAuth;
|
||||
|
||||
var oa= new OAuth("http://term.ie/oauth/example/request_token.php",
|
||||
"http://term.ie/oauth/example/access_token.php",
|
||||
"key",
|
||||
"secret",
|
||||
"1.0",
|
||||
null,
|
||||
"HMAC-SHA1")
|
||||
|
||||
oa.getOAuthRequestToken(function(error, oauth_token, oauth_token_secret, results){
|
||||
if(error) util.puts('error :' + error)
|
||||
else {
|
||||
util.puts('oauth_token :' + oauth_token)
|
||||
util.puts('oauth_token_secret :' + oauth_token_secret)
|
||||
util.puts('requestoken results :' + util.inspect(results))
|
||||
util.puts("Requesting access token")
|
||||
oa.getOAuthAccessToken(oauth_token, oauth_token_secret, function(error, oauth_access_token, oauth_access_token_secret, results2) {
|
||||
util.puts('oauth_access_token :' + oauth_access_token)
|
||||
util.puts('oauth_token_secret :' + oauth_access_token_secret)
|
||||
util.puts('accesstoken results :' + util.inspect(results2))
|
||||
util.puts("Requesting access token")
|
||||
var data= "";
|
||||
oa.getProtectedResource("http://term.ie/oauth/example/echo_api.php?foo=bar&too=roo", "GET", oauth_access_token, oauth_access_token_secret, function (error, data, response) {
|
||||
util.puts(data);
|
||||
});
|
||||
});
|
||||
}
|
||||
})
|
75
express-server/node_modules/oauth/examples/twitter-example.js
generated
vendored
Normal file
75
express-server/node_modules/oauth/examples/twitter-example.js
generated
vendored
Normal file
@ -0,0 +1,75 @@
|
||||
var http = require('http');
|
||||
var OAuth = require('../lib/oauth.js').OAuth;
|
||||
var nodeUrl = require('url');
|
||||
var clientID = '';
|
||||
var clientSecret = '';
|
||||
var callbackURL = '';
|
||||
|
||||
oa = new OAuth(
|
||||
'https://api.twitter.com/oauth/request_token',
|
||||
'https://api.twitter.com/oauth/access_token',
|
||||
clientID,
|
||||
clientSecret,
|
||||
'1.0',
|
||||
callbackURL,
|
||||
'HMAC-SHA1'
|
||||
);
|
||||
|
||||
http.createServer(function (request, response) {
|
||||
oa.getOAuthRequestToken(function (error, oAuthToken, oAuthTokenSecret, results) {
|
||||
var urlObj = nodeUrl.parse(request.url, true);
|
||||
var authURL = 'https://twitter.com/' +
|
||||
'oauth/authenticate?oauth_token=' + oAuthToken;
|
||||
var handlers = {
|
||||
'/': function (request, response) {
|
||||
/**
|
||||
* Creating an anchor with authURL as href and sending as response
|
||||
*/
|
||||
var body = '<a href="' + authURL + '"> Get Code </a>';
|
||||
response.writeHead(200, {
|
||||
'Content-Length': body.length,
|
||||
'Content-Type': 'text/html' });
|
||||
response.end(body);
|
||||
},
|
||||
'/callback': function (request, response) {
|
||||
/** Obtaining access_token */
|
||||
var getOAuthRequestTokenCallback = function (error, oAuthAccessToken,
|
||||
oAuthAccessTokenSecret, results) {
|
||||
if (error) {
|
||||
console.log(error);
|
||||
response.end(JSON.stringify({
|
||||
message: 'Error occured while getting access token',
|
||||
error: error
|
||||
}));
|
||||
return;
|
||||
}
|
||||
|
||||
oa.get('https://api.twitter.com/1.1/account/verify_credentials.json',
|
||||
oAuthAccessToken,
|
||||
oAuthAccessTokenSecret,
|
||||
function (error, twitterResponseData, result) {
|
||||
if (error) {
|
||||
console.log(error)
|
||||
res.end(JSON.stringify(error));
|
||||
return;
|
||||
}
|
||||
try {
|
||||
console.log(JSON.parse(twitterResponseData));
|
||||
} catch (parseError) {
|
||||
console.log(parseError);
|
||||
}
|
||||
console.log(twitterResponseData);
|
||||
response.end(twitterResponseData);
|
||||
});
|
||||
};
|
||||
|
||||
oa.getOAuthAccessToken(urlObj.query.oauth_token, oAuthTokenSecret,
|
||||
urlObj.query.oauth_verifier,
|
||||
getOAuthRequestTokenCallback);
|
||||
|
||||
}
|
||||
};
|
||||
handlers[urlObj.pathname](request, response);
|
||||
})
|
||||
|
||||
}).listen(3000);
|
Reference in New Issue
Block a user