Esempio n. 1
0
		action: function(params, out){
			var promise =AuthMod.socialLogin(db, params, {});
			promise.then(function(ret1) {
				ret1.user =UserMod.readFilter(ret1.user, {type:'full'});		//only return certain fields (i.e strip out password)
				// ret1.user =UserMod.readFilter(ret1.user, {type:'login'});		//only return certain fields (i.e strip out password)

				//@example: var fields ={'tribe': {'_id':1, 'email': 1, 'phone': 1, 'first_name': 1, 'last_name': 1}, 'follow':{'_id':1, 'email': 1, 'phone': 1, 'first_name': 1, 'last_name': 1} };
				// var fields ={};
				var fields ={ 'follow':{'_id':1, 'email': 1, 'phone': 1, 'first_name': 1, 'last_name': 1} };
				var fill_promise = UserMod.fillInfo(db, {'user': ret1.user, 'fields': fields }, {});
				fill_promise.then(
					function(ret2)
					{
						ret1.user = ret2.user;
						out.win(ret1);
					},
					function(err)
					{
						self.handleError(out, err, {});
					}
				);
			}, function(err) {
				self.handleError(out, err, {});
			});
		}
Esempio n. 2
0
	twitter.getAccessToken(data.request_token, data.request_token_secret, data.oauth_verifier, function(error, accessToken, accessTokenSecret, results) {
		if (error) {
			ret.code =1;
			ret.msg +="Error getting OAuth access token";
			ret.err =error;
			ret.debug =data;
			deferred.reject(ret);
		} else {
		
			// console.log('results: '+JSON.stringify(results));		//TESTING
			//do user import
			var vals ={
				type: 'twitter',
				user: {},
				socialData: {
					id: results.user_id,
					token: accessToken,
					token_secret: accessTokenSecret
				}
			};
			
			AuthMod.socialLogin(db, vals, {})
			.then(function(retLogin) {
				deferred.resolve(retLogin);
			}, function(err) {
				deferred.reject(err);
			});
			
			//Step 4: Verify Credentials belongs here
		}
	});
Esempio n. 3
0
		action: function(params, out){
			var promise =AuthMod.socialLogin(db, params, {});
			promise.then(function(ret1) {
				ret1.user =UserMod.readFilter(ret1.user, {type:'full'});		//only return certain fields (i.e strip out password)
				out.win(ret1);
			}, function(err) {
				self.handleError(out, err, {});
			});
		}
Esempio n. 4
0
			plus.people.get({ userId: 'me', auth: oauth2Client }, function(err, response) {
				if(err) {
					ret.msg +=err;
					deferred.reject(ret);
				}
				else {
					//do user import & login
					var user ={};
					//name
					if(response.name !==undefined) {
						if(response.name.givenName !==undefined) {
							user.first_name =response.name.givenName;
						}
						if(response.name.familyName !==undefined) {
							user.last_name =response.name.familyName;
						}
					}
					//gender
					if(response.gender !==undefined) {
						user.gender =response.gender;
					}
					//email
					if(response.emails !==undefined && response.emails.length >0) {
						user.email =response.emails[0].value;
					}
					
					//age: do not bother with age since we only get a "range" from google
					
					//image
					if(data.pull_pic) {
						if(response.image !==undefined && response.image.url !==undefined) {
							user._imageUrl =response.image.url;
						}
					}
					
					var vals ={
						type: 'google',
						user: user,
						socialData: {
							id: response.id,
							token: tokens.access_token,
							response_token: tokens.response_token
						}
					};
					
					vals.pic_directory =data.pic_directory;		//pass through
					
					AuthMod.socialLogin(db, vals, {})
					.then(function(retLogin) {
						deferred.resolve(retLogin);
					}, function(err) {
						deferred.reject(err);
					});
				}
			});
Esempio n. 5
0
			}, accessToken, accessTokenSecret, function(error, dataUser, responseUser) {
				if (error) {
					ret.code =1;
					ret.msg +="Error getting user for Twitter id: "+results.user_id;
					ret.err =error;
					ret.debug =data;
					deferred.reject(ret);
				} else {
					// ret.response =responseUser;		//breaks things - too raw of data..
					ret.debug =dataUser;
					
					//separate name into first and last (default both to blank)
					var first_name ='';
					var last_name ='';
					if(dataUser.name !==undefined) {
						//if has a space
						var indexSpace =dataUser.name.indexOf(' ');
						if(indexSpace >-1) {
							first_name =dataUser.name.slice(0, indexSpace);
							last_name =dataUser.name.slice((indexSpace+1), dataUser.name.length);
						}
						else {
							first_name =dataUser.name;
						}
					}
					
					//do user import
					var vals ={
						type: 'twitter',
						user: {
							first_name: first_name,
							last_name: last_name
						},
						socialData: {
							id: results.user_id,
							token: accessToken,
							token_secret: accessTokenSecret
						}
					};
					
					AuthMod.socialLogin(db, vals, {})
					.then(function(retLogin) {
						
						//profile image: now that we have a user with a user id, IF user does NOT already have a profile image AND IF we have a profile image from Twitter, add that in for the user
						if(data.pull_pic && (retLogin.user.image ===undefined || retLogin.user.image.profile ===undefined || !retLogin.user.image.profile) && dataUser.profile_image_url !==undefined) {
							var imgUrl =dataUser.profile_image_url;
							var imgUrlStripped =imgUrl;
							//strip url params if they're there as this will mess up things (get an ESDIR or ENOENT error since the file extension isn't at the end)
							if(imgUrlStripped.indexOf('?') >-1) {
								imgUrlStripped =imgUrlStripped.slice(0, imgUrlStripped.indexOf('?'));
							}
							//get the file extension
							var posExt =imgUrlStripped.lastIndexOf('.');
							var ext =imgUrlStripped.slice(posExt, imgUrlStripped.length);
							
							//get the big sized image by removing the underscore part - https://dev.twitter.com/docs/user-profile-images-and-banners
							var posUnderscore =imgUrl.lastIndexOf('_');
							if(posUnderscore >-1 && posUnderscore >imgUrl.lastIndexOf('/')) {
								imgUrl =imgUrl.slice(0, posUnderscore) +ext;
							}
							
							var filename ='profile'+ext;
							var imgSavePath =data.pic_directory +'/'+retLogin.user._id;
							var folderWritePath =path.normalize(__dirname +'../../../../' +imageInfo.imgPath +'/' +imgSavePath);		//hardcoded - 4 '../' to get from this directory back to 'app/'. Very important to use path.normalize so it works on both windows and linux!!
							
							//recursively create directories / folders in case they don't exist yet
							fs.mkdirSync(folderWritePath, parseInt('777', 8), true);		//0777 octal in strict mode is not allowed
							
							var dbSavePath =imgSavePath +'/' +filename;		//what will be stored in the database
							var imgWritePath =folderWritePath +'/' +filename;
							var picStream =fs.createWriteStream(imgWritePath);
							picStream.on('close', function() {
								//update user with this image
								var userUpdate ={};
								if(retLogin.user.image !==undefined) {		//image key already exists
									userUpdate['image.profile'] =dbSavePath;		//have to do it this way for mongo db syntax and to avoid over-writing any other keys (other than 'profile') that may exist
									//update for return as well
									retLogin.user.image.profile =dbSavePath;
								}
								else {		//image key doesn't exist yet
									userUpdate.image ={
										profile: dbSavePath
									};
									//update for return as well
									retLogin.user.image ={
										profile: dbSavePath
									};
								}
								UserMod.update(db, {user_id: retLogin.user._id, user:userUpdate}, {})
								.then(function(retUserUpdate) {
									deferred.resolve(retLogin);
								}, function(retErr) {
									deferred.reject(retErr);
								});
							});
							request(imgUrl).pipe(picStream);
						}
						else {
							deferred.resolve(retLogin);
						}
						
					}, function(err) {
						deferred.reject(err);
					});
				}
			});