PageRenderTime 58ms CodeModel.GetById 13ms RepoModel.GetById 0ms app.codeStats 0ms

/example/server.js

https://github.com/robertjd/everyauth
JavaScript | 296 lines | 247 code | 33 blank | 16 comment | 18 complexity | 051feba50cde1b4cc507044c5fb268c5 MD5 | raw file
  1. var express = require('express')
  2. , everyauth = require('../index')
  3. , conf = require('./conf');
  4. everyauth.debug = true;
  5. var usersById = {};
  6. var nextUserId = 0;
  7. function addUser (source, sourceUser) {
  8. var user;
  9. if (arguments.length === 1) { // password-based
  10. user = sourceUser = source;
  11. user.id = ++nextUserId;
  12. return usersById[nextUserId] = user;
  13. } else { // non-password-based
  14. user = usersById[++nextUserId] = {id: nextUserId};
  15. user[source] = sourceUser;
  16. }
  17. return user;
  18. }
  19. var usersByVimeoId = {};
  20. var usersByJustintvId = {};
  21. var usersBy37signalsId = {};
  22. var usersByTumblrName = {};
  23. var usersByDropboxId = {};
  24. var usersByFbId = {};
  25. var usersByTwitId = {};
  26. var usersByGhId = {};
  27. var usersByInstagramId = {};
  28. var usersByFoursquareId = {};
  29. var usersByGowallaId = {};
  30. var usersByLinkedinId = {};
  31. var usersByGoogleId = {};
  32. var usersByYahooId = {};
  33. var usersByGoogleHybridId = {};
  34. var usersByReadabilityId = {};
  35. var usersByBoxId = {};
  36. var usersByOpenId = {};
  37. var usersByLogin = {
  38. 'brian@example.com': addUser({ login: 'brian@example.com', password: 'password'})
  39. };
  40. everyauth.everymodule
  41. .findUserById( function (id, callback) {
  42. callback(null, usersById[id]);
  43. });
  44. everyauth
  45. .openid
  46. .myHostname('http://local.host:3000')
  47. .findOrCreateUser( function (session, userMetadata) {
  48. return usersByOpenId[userMetadata.claimedIdentifier] ||
  49. (usersByOpenId[userMetadata.claimedIdentifier] = addUser('openid', userMetadata));
  50. })
  51. .redirectPath('/');
  52. everyauth
  53. .facebook
  54. .appId(conf.fb.appId)
  55. .appSecret(conf.fb.appSecret)
  56. .findOrCreateUser( function (session, accessToken, accessTokenExtra, fbUserMetadata) {
  57. return usersByFbId[fbUserMetadata.id] ||
  58. (usersByFbId[fbUserMetadata.id] = addUser('facebook', fbUserMetadata));
  59. })
  60. .redirectPath('/');
  61. everyauth
  62. .twitter
  63. .consumerKey(conf.twit.consumerKey)
  64. .consumerSecret(conf.twit.consumerSecret)
  65. .findOrCreateUser( function (sess, accessToken, accessSecret, twitUser) {
  66. return usersByTwitId[twitUser.id] || (usersByTwitId[twitUser.id] = addUser('twitter', twitUser));
  67. })
  68. .redirectPath('/');
  69. everyauth
  70. .password
  71. .loginWith('email')
  72. .getLoginPath('/login')
  73. .postLoginPath('/login')
  74. .loginView('login.jade')
  75. // .loginLocals({
  76. // title: 'Login'
  77. // })
  78. // .loginLocals(function (req, res) {
  79. // return {
  80. // title: 'Login'
  81. // }
  82. // })
  83. .loginLocals( function (req, res, done) {
  84. setTimeout( function () {
  85. done(null, {
  86. title: 'Async login'
  87. });
  88. }, 200);
  89. })
  90. .authenticate( function (login, password) {
  91. var errors = [];
  92. if (!login) errors.push('Missing login');
  93. if (!password) errors.push('Missing password');
  94. if (errors.length) return errors;
  95. var user = usersByLogin[login];
  96. if (!user) return ['Login failed'];
  97. if (user.password !== password) return ['Login failed'];
  98. return user;
  99. })
  100. .getRegisterPath('/register')
  101. .postRegisterPath('/register')
  102. .registerView('register.jade')
  103. // .registerLocals({
  104. // title: 'Register'
  105. // })
  106. // .registerLocals(function (req, res) {
  107. // return {
  108. // title: 'Sync Register'
  109. // }
  110. // })
  111. .registerLocals( function (req, res, done) {
  112. setTimeout( function () {
  113. done(null, {
  114. title: 'Async Register'
  115. });
  116. }, 200);
  117. })
  118. .validateRegistration( function (newUserAttrs, errors) {
  119. var login = newUserAttrs.login;
  120. if (usersByLogin[login]) errors.push('Login already taken');
  121. return errors;
  122. })
  123. .registerUser( function (newUserAttrs) {
  124. var login = newUserAttrs[this.loginKey()];
  125. return usersByLogin[login] = addUser(newUserAttrs);
  126. })
  127. .loginSuccessRedirect('/')
  128. .registerSuccessRedirect('/');
  129. everyauth.github
  130. .appId(conf.github.appId)
  131. .appSecret(conf.github.appSecret)
  132. .findOrCreateUser( function (sess, accessToken, accessTokenExtra, ghUser) {
  133. return usersByGhId[ghUser.id] || (usersByGhId[ghUser.id] = addUser('github', ghUser));
  134. })
  135. .redirectPath('/');
  136. everyauth.instagram
  137. .appId(conf.instagram.clientId)
  138. .appSecret(conf.instagram.clientSecret)
  139. .scope('basic')
  140. .findOrCreateUser( function (sess, accessToken, accessTokenExtra, hipster) {
  141. return usersByInstagramId[hipster.id] || (usersByInstagramId[hipster.id] = addUser('instagram', hipster));
  142. })
  143. .redirectPath('/');
  144. everyauth.foursquare
  145. .appId(conf.foursquare.clientId)
  146. .appSecret(conf.foursquare.clientSecret)
  147. .findOrCreateUser( function (sess, accessTok, accessTokExtra, addict) {
  148. return usersByFoursquareId[addict.id] || (usersByFoursquareId[addict.id] = addUser('foursquare', addict));
  149. })
  150. .redirectPath('/');
  151. everyauth.gowalla
  152. .appId(conf.gowalla.apiKey)
  153. .appSecret(conf.gowalla.apiSecret)
  154. .moduleErrback( function(err) {
  155. console.log("moduleErrback for Gowalla", err);
  156. })
  157. .findOrCreateUser( function (sess, accessToken, accessTokenExtra, loser) {
  158. return usersByGowallaId[loser.url] || (usersByGowallaId[loser.url] = addUser('gowalla', loser));
  159. })
  160. .redirectPath('/');
  161. everyauth.linkedin
  162. .consumerKey(conf.linkedin.apiKey)
  163. .consumerSecret(conf.linkedin.apiSecret)
  164. .findOrCreateUser( function (sess, accessToken, accessSecret, linkedinUser) {
  165. return usersByLinkedinId[linkedinUser.id] || (usersByLinkedinId[linkedinUser.id] = addUser('linkedin', linkedinUser));
  166. })
  167. .redirectPath('/');
  168. everyauth.google
  169. .appId(conf.google.clientId)
  170. .appSecret(conf.google.clientSecret)
  171. .scope('https://www.google.com/m8/feeds/')
  172. .findOrCreateUser( function (sess, accessToken, extra, googleUser) {
  173. googleUser.refreshToken = extra.refresh_token;
  174. googleUser.expiresIn = extra.expires_in;
  175. return usersByGoogleId[googleUser.id] || (usersByGoogleId[googleUser.id] = addUser('google', googleUser));
  176. })
  177. .redirectPath('/');
  178. everyauth.yahoo
  179. .consumerKey(conf.yahoo.consumerKey)
  180. .consumerSecret(conf.yahoo.consumerSecret)
  181. .findOrCreateUser( function (sess, accessToken, accessSecret, yahooUser) {
  182. return usersByYahooId[yahooUser.id] || (usersByYahooId[yahooUser.id] = addUser('yahoo', yahooUser));
  183. })
  184. .redirectPath('/');
  185. everyauth.googlehybrid
  186. .consumerKey(conf.google.clientId)
  187. .consumerSecret(conf.google.clientSecret)
  188. .scope(['http://docs.google.com/feeds/','http://spreadsheets.google.com/feeds/'])
  189. .findOrCreateUser( function(session, userAttributes) {
  190. return usersByGoogleHybridId[userAttributes.claimedIdentifier] || (usersByGoogleHybridId[userAttributes.claimedIdentifier] = addUser('googlehybrid', userAttributes));
  191. })
  192. .redirectPath('/')
  193. everyauth.readability
  194. .consumerKey(conf.readability.consumerKey)
  195. .consumerSecret(conf.readability.consumerSecret)
  196. .findOrCreateUser( function (sess, accessToken, accessSecret, reader) {
  197. return usersByReadabilityId[reader.username] || (usersByReadabilityId[reader.username] = addUser('readability', reader));
  198. })
  199. .redirectPath('/');
  200. everyauth
  201. .dropbox
  202. .consumerKey(conf.dropbox.consumerKey)
  203. .consumerSecret(conf.dropbox.consumerSecret)
  204. .findOrCreateUser( function (sess, accessToken, accessSecret, dropboxUserMetadata) {
  205. return usersByDropboxId[dropboxUserMetadata.uid] ||
  206. (usersByDropboxId[dropboxUserMetadata.uid] = addUser('dropbox', dropboxUserMetadata));
  207. })
  208. .redirectPath('/')
  209. everyauth.vimeo
  210. .consumerKey(conf.vimeo.consumerKey)
  211. .consumerSecret(conf.vimeo.consumerSecret)
  212. .findOrCreateUser( function (sess, accessToken, accessSecret, vimeoUser) {
  213. return usersByVimeoId[vimeoUser.id] ||
  214. (usersByVimeoId[vimeoUser.id] = vimeoUser);
  215. })
  216. .redirectPath('/')
  217. everyauth.justintv
  218. .consumerKey(conf.justintv.consumerKey)
  219. .consumerSecret(conf.justintv.consumerSecret)
  220. .findOrCreateUser( function (sess, accessToken, accessSecret, justintvUser) {
  221. return usersByJustintvId[justintvUser.id] ||
  222. (usersByJustintvId[justintvUser.id] = addUser('justintv', justintvUser));
  223. })
  224. .redirectPath('/')
  225. everyauth['37signals']
  226. .appId(conf['37signals'].clientId)
  227. .appSecret(conf['37signals'].clientSecret)
  228. .findOrCreateUser( function (sess, accessToken, accessSecret, _37signalsUser) {
  229. return usersBy37signalsId[_37signalsUser.id] ||
  230. (usersBy37signalsId[_37signalsUser.identity.id] = addUser('37signals', _37signalsUser));
  231. })
  232. .redirectPath('/')
  233. everyauth.tumblr
  234. .consumerKey(conf.tumblr.consumerKey)
  235. .consumerSecret(conf.tumblr.consumerSecret)
  236. .findOrCreateUser( function (sess, accessToken, accessSecret, tumblrUser) {
  237. return usersByTumblrName[tumblrUser.name] ||
  238. (usersByTumblrName[tumblrUser.name] = addUser('tumblr', tumblrUser));
  239. })
  240. .redirectPath('/');
  241. everyauth.box
  242. .apiKey(conf.box.apiKey)
  243. .findOrCreateUser( function (sess, authToken, boxUser) {
  244. return usersByBoxId[boxUser.user_id] ||
  245. (usersByDropboxId[boxUser.user_id] = addUser('box', boxUser));
  246. })
  247. .redirectPath('/');
  248. var app = express.createServer(
  249. express.bodyParser()
  250. , express.static(__dirname + "/public")
  251. , express.cookieParser()
  252. , express.session({ secret: 'htuayreve'})
  253. , everyauth.middleware()
  254. );
  255. app.configure( function () {
  256. app.set('view engine', 'jade');
  257. });
  258. app.get('/', function (req, res) {
  259. res.render('home');
  260. });
  261. everyauth.helpExpress(app);
  262. app.listen(3000);
  263. console.log('Go to http://local.host:3000');