Files
meteor/packages/accounts-github/github_server.js
David Glasser 00eda43420 OAuth login to an existing account now *does* update the services.PROVIDER
field (eg, to refresh access tokens) but does *not* update anything else (which
is effectively a no-op change because in practice the only thing that it
attempted to update was "profile" but because existing fields were not
overridden, this never did anything).

Remove the "extra" argument from createUser and related functions. Add a new
"profile" option to the main options dictionary, interpreted by
defaultCreateUserHook.
2012-10-10 21:55:02 -07:00

46 lines
1.4 KiB
JavaScript

(function () {
Accounts.oauth.registerService('github', 2, function(query) {
var accessToken = getAccessToken(query);
var identity = getIdentity(accessToken);
return {
serviceData: {
id: identity.id,
accessToken: accessToken,
email: identity.email,
username: identity.login
},
options: {profile: {name: identity.name}}
};
});
var getAccessToken = function (query) {
var config = Accounts.loginServiceConfiguration.findOne({service: 'github'});
if (!config)
throw new Accounts.ConfigError("Service not configured");
var result = Meteor.http.post(
"https://github.com/login/oauth/access_token", {headers: {Accept: 'application/json'}, params: {
code: query.code,
client_id: config.clientId,
client_secret: config.secret,
redirect_uri: Meteor.absoluteUrl("_oauth/github?close"),
state: query.state
}});
if (result.error) // if the http response was an error
throw result.error;
if (result.data.error) // if the http response was a json object with an error attribute
throw result.data;
return result.data.access_token;
};
var getIdentity = function (accessToken) {
var result = Meteor.http.get(
"https://api.github.com/user",
{params: {access_token: accessToken}});
if (result.error)
throw result.error;
return result.data;
};
}) ();