mirror of
https://github.com/meteor/meteor.git
synced 2026-05-02 03:01:46 -04:00
accounts-meetup package
This commit is contained in:
25
packages/accounts-meetup/meetup_client.js
Normal file
25
packages/accounts-meetup/meetup_client.js
Normal file
@@ -0,0 +1,25 @@
|
||||
(function () {
|
||||
Meteor.loginWithMeetup = function (options, callback) {
|
||||
// support both (options, callback) and (callback).
|
||||
if (!callback && typeof options === 'function') {
|
||||
callback = options;
|
||||
options = {};
|
||||
}
|
||||
|
||||
var config = Accounts.loginServiceConfiguration.findOne({service: 'meetup'});
|
||||
if (!config) {
|
||||
callback && callback(new Accounts.ConfigError("Service not configured"));
|
||||
return;
|
||||
}
|
||||
var state = Random.id();
|
||||
|
||||
var loginUrl =
|
||||
'https://secure.meetup.com/oauth2/authorize' +
|
||||
'?client_id=' + config.clientId +
|
||||
'&response_type=code' +
|
||||
'&redirect_uri=' + Meteor.absoluteUrl('_oauth/meetup?close') +
|
||||
'&state=' + state;
|
||||
|
||||
Accounts.oauth.initiateLogin(state, loginUrl, callback, {width: 900, height: 450});
|
||||
};
|
||||
}) ();
|
||||
3
packages/accounts-meetup/meetup_common.js
Normal file
3
packages/accounts-meetup/meetup_common.js
Normal file
@@ -0,0 +1,3 @@
|
||||
if (!Accounts.meetup) {
|
||||
Accounts.meetup = {};
|
||||
}
|
||||
20
packages/accounts-meetup/meetup_configure.html
Normal file
20
packages/accounts-meetup/meetup_configure.html
Normal file
@@ -0,0 +1,20 @@
|
||||
<template name="configureLoginServiceDialogForMeetup">
|
||||
<p>
|
||||
First, you'll need to get a Meetup Client ID. Follow these steps:
|
||||
</p>
|
||||
<ol>
|
||||
<li>
|
||||
Visit <a href="http://www.meetup.com/meetup_api/oauth_consumers/create/" target="blank">http://www.meetup.com/meetup_api/oauth_consumers/create/</a>
|
||||
</li>
|
||||
<li>
|
||||
Set the Consumer name to the name of your application.
|
||||
</li>
|
||||
<li>
|
||||
Optionally set the Application Website to the URL of your
|
||||
website. You can leave this blank.
|
||||
</li>
|
||||
<li>
|
||||
Set the <b>Redirect URI</b> to: <span class="url">{{siteUrl}}</span>. (Do not append a path to this URL.)
|
||||
</li>
|
||||
</ol>
|
||||
</template>
|
||||
10
packages/accounts-meetup/meetup_configure.js
Normal file
10
packages/accounts-meetup/meetup_configure.js
Normal file
@@ -0,0 +1,10 @@
|
||||
Template.configureLoginServiceDialogForMeetup.siteUrl = function () {
|
||||
return Meteor.absoluteUrl();
|
||||
};
|
||||
|
||||
Template.configureLoginServiceDialogForMeetup.fields = function () {
|
||||
return [
|
||||
{property: 'clientId', label: 'Key'},
|
||||
{property: 'secret', label: 'Secret'}
|
||||
];
|
||||
};
|
||||
5
packages/accounts-meetup/meetup_login_button.css
Normal file
5
packages/accounts-meetup/meetup_login_button.css
Normal file
@@ -0,0 +1,5 @@
|
||||
#login-buttons-image-meetup.login-image {
|
||||
top: 8px;
|
||||
height: 11px;
|
||||
background-image: url(data:image/png;base64,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);
|
||||
}
|
||||
47
packages/accounts-meetup/meetup_server.js
Normal file
47
packages/accounts-meetup/meetup_server.js
Normal file
@@ -0,0 +1,47 @@
|
||||
(function () {
|
||||
Accounts.oauth.registerService('meetup', 2, function(query) {
|
||||
|
||||
var accessToken = getAccessToken(query);
|
||||
var identity = getIdentity(accessToken);
|
||||
|
||||
return {
|
||||
serviceData: {
|
||||
id: identity.id,
|
||||
accessToken: accessToken
|
||||
},
|
||||
options: {profile: {name: identity.name}}
|
||||
};
|
||||
});
|
||||
|
||||
var getAccessToken = function (query) {
|
||||
var config = Accounts.loginServiceConfiguration.findOne({service: 'meetup'});
|
||||
if (!config)
|
||||
throw new Accounts.ConfigError("Service not configured");
|
||||
|
||||
var result = Meteor.http.post(
|
||||
"https://secure.meetup.com/oauth2/access", {headers: {Accept: 'application/json'}, params: {
|
||||
code: query.code,
|
||||
client_id: config.clientId,
|
||||
client_secret: config.secret,
|
||||
grant_type: 'authorization_code',
|
||||
redirect_uri: Meteor.absoluteUrl("_oauth/meetup?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://secure.meetup.com/2/members",
|
||||
{params: {member_id: 'self', access_token: accessToken}});
|
||||
if (result.error)
|
||||
throw result.error;
|
||||
|
||||
return result.data.results && result.data.results[0];
|
||||
};
|
||||
}) ();
|
||||
18
packages/accounts-meetup/package.js
Normal file
18
packages/accounts-meetup/package.js
Normal file
@@ -0,0 +1,18 @@
|
||||
Package.describe({
|
||||
summary: "Login service for Meetup accounts"
|
||||
});
|
||||
|
||||
Package.on_use(function(api) {
|
||||
api.use('accounts-base', ['client', 'server']);
|
||||
api.use('accounts-oauth2-helper', ['client', 'server']);
|
||||
api.use('http', ['client', 'server']);
|
||||
api.use('templating', 'client');
|
||||
|
||||
api.add_files(
|
||||
['meetup_login_button.css', 'meetup_configure.html', 'meetup_configure.js'],
|
||||
'client');
|
||||
|
||||
api.add_files('meetup_common.js', ['client', 'server']);
|
||||
api.add_files('meetup_server.js', 'server');
|
||||
api.add_files('meetup_client.js', 'client');
|
||||
});
|
||||
Reference in New Issue
Block a user