1 /** 2 * @namespace 3 * @name fbauth 4 */ 5 6 /** @lends fbauth */ 7 8 var couchlib = require(__dirname + '/couchlib.js'); 9 var lib = require(__dirname + '/lib.js'); 10 11 /** Check to see if a user already exists. */ 12 var check_for_user = function (couchdb_opts, name, cb) { 13 var opts = lib.clone(couchdb_opts); 14 opts.views = exports.couchdb_views; 15 couchlib.check_object_exists(opts, 'users', name, cb); 16 }; 17 exports.check_for_user = check_for_user; 18 19 exports.couchdb_views = { 20 users: [ 21 { 22 uri: '_design/all_users', 23 design: {'all': {'map': "function(doc) { emit(doc._id, doc); }"}} 24 } 25 ] 26 }; 27 28 /** Add a user. */ 29 var add_user = function (couchdb_opts, username, displayname, email, password, cb) { 30 var opts = lib.clone(couchdb_opts); 31 opts.views = exports.couchdb_views; 32 var dbu = couchlib.get_couchdb_schema(opts, 'users'); 33 dbu.save(username, {displayname: displayname, email: email, password: lib.sha1(password)}, function (err, doc) { 34 if (err) { 35 cb(err, false); 36 } else { 37 var dbd = couchlib.get_couchdb_schema(opts, 'displaynames'); 38 dbd.save(displayname, {username: username}, function (err, doc) { 39 if (err) { 40 dbu.delete(username, function (errdel) { 41 cb(err, false); 42 }); 43 } else { 44 cb(undefined, true); 45 } 46 }); 47 } 48 }); 49 }; 50 exports.add_user = add_user; 51 52 /** Load a users document. */ 53 var load_user = function (couchdb_opts, username, cb) { 54 var opts = lib.clone(couchdb_opts); 55 opts.views = exports.couchdb_views; 56 var db = couchlib.get_couchdb_schema(opts, 'users'); 57 db.get(username, function (err, doc) { 58 if (err) { 59 cb(err, undefined); 60 } else { 61 cb(undefined, doc); 62 } 63 }); 64 }; 65 exports.load_user = load_user; 66 67 /** Login a user, returning the document. */ 68 var login_user = function (couchdb_opts, username, password, cb) { 69 load_user(couchdb_opts, username, function (err, doc) { 70 if (err) { 71 cb(err, undefined); 72 } else { 73 if (lib.sha1(password) == doc.password) { 74 cb(undefined, doc); 75 } else { 76 cb("invalid_username_password", undefined); 77 } 78 } 79 }); 80 }; 81 exports.login_user = login_user; 82 83 /** Check if the displayname already exists. */ 84 var check_for_displayname = function (couchdb_opts, name, cb) { 85 couchlib.check_object_exists(couchdb_opts, 'displayname', name, cb); 86 }; 87 exports.check_for_displayname = check_for_displayname; 88 89 /** Load a user based upon displayname. */ 90 var load_user_displayname = function (couchdb_opts, displayname, cb) { 91 var opts = lib.clone(couchdb_opts); 92 opts.views = exports.couchdb_views; 93 var db = couchlib.get_couchdb_schema(opts, 'displaynames'); 94 db.get(displayname, function (err, doc) { 95 if (err) { 96 cb(err, undefined); 97 } else { 98 load_user(doc.username, function (err, doc) { 99 if (err) { 100 cb(err, undefined); 101 } else { 102 cb(undefined, doc); 103 } 104 }); 105 } 106 }); 107 }; 108 exports.load_user_displayname = load_user_displayname;