· 6 years ago · Jan 10, 2020, 10:08 AM
1const SMSVerify = require('./SMSVerify.js');
2
3/*------------------------------CATEGORIES UPLOADS START ------------------------------------*/
4var uploadPath = require('path').join(__dirname, '../views/users_images');
5var util = require('util');
6var profileStorage = multer.diskStorage({
7 destination: function (req, file, cb) {
8 cb(null, uploadPath);
9 },
10 filename: function (req, file, cb) {
11 cb(null, file.fieldname + '-' + Date.now()+'.'+file.originalname.split('.')[1])
12 }
13});
14var profileUpload = multer({
15 storage: profileStorage,
16 limits: {fileSize: 30*1024*1024, files: 6},
17 fileFilter: (req, file, callback) => {
18 if (!file.originalname.match(/\.(JPEG|jpeg|JPG|jpg|PNG|png)$/))
19 return callback(new Error('Only JPEG|jpeg|JPG|jpg|PNG|png are allowed !'), false);
20
21 callback(null, true);
22 }
23}).array('profile', 6);
24/*------------------------------CATEGORIES UPLOADS END ------------------------------------*/
25
26module.exports = {
27 login: (data, done)=>{
28 var validate = {error: 'N', msg: ''};
29 c("login =>>>>>>>>>>> data ----- ", data);
30 var find = {};
31 if(data.type == 'facebook' || data.type == 'google'){
32 find = {type: data.type, authid: data.authid};
33 }else{
34 find = {co: data.co, type: data.type, mobile_no: data.mobile_no, password: data.password};
35 }
36 c("login find =>>>>>>>>>>> data ", find);
37 db.collection('register').find(find).toArray((err, results)=>{
38 if(results.length){
39 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
40 validate.error = 'B';
41 validate.msg = 'user blocked!';
42 return done(validate);
43 }
44 validate.userid = results[0]._id.toString();
45 delete results[0].createdat;
46 if(typeof results[0].loggedat != 'undefined'){
47 delete results[0].loggedat;
48 }
49 delete results[0]._id;
50 if(typeof results[0].otp != 'undefined'){
51 delete results[0].otp;
52 }
53 if(typeof results[0].resetotp != 'undefined'){
54 delete results[0].resetotp;
55 }
56 validate.myprofile = results[0];
57 validate.settings = config.privacy;
58 c("login response :: ==>>>>> ", validate);
59 var updatable = {'$set': {det: data.det, ls: 1, 'loggedat': new Date()}};
60
61 if(typeof results[0].location_name == 'undefined' || results[0].location_name == ""){
62
63 if(typeof data.location != 'undefined' && data.location.length){
64 try{
65 data.location = JSON.parse(data.location);
66 try{
67 data.location = JSON.parse(data.location);
68 }catch(e){
69 validate.error = 'Y';
70 validate.msg = 'JSON formating error';
71 validate.data = data;
72 return done(validate);
73 }
74 }catch(e){
75 validate.error = 'Y';
76 validate.msg = 'JSON formating error';
77 validate.data = data;
78 return done(validate);
79 }
80
81 updatable['$set']['location'] = data.location;
82 validate.myprofile.location = data.location;
83 }
84
85 }
86
87 if(typeof data.firebaseTokenId != 'undefined' && data.firebaseTokenId != ''){
88 if(data.det == 'android'){
89 if(typeof results[0].androidFirebaseTokenId != 'undefined' && typeof results[0].androidFirebaseTokenId == 'string'){
90 results[0].androidFirebaseTokenId = [results[0].androidFirebaseTokenId];
91 }
92 if(typeof results[0].androidFirebaseTokenId != 'undefined' && !common.InArray(data.firebaseTokenId, results[0].androidFirebaseTokenId)){
93 results[0].androidFirebaseTokenId.push(data.firebaseTokenId);
94 updatable['$set']['androidFirebaseTokenId'] = results[0].androidFirebaseTokenId;
95 }else{
96 updatable['$set']['androidFirebaseTokenId'] = data.firebaseTokenId;
97 }
98
99 }else if(data.det == 'ios'){
100 if(typeof results[0].iosFirebaseTokenId != 'undefined' && typeof results[0].iosFirebaseTokenId == 'string'){
101 results[0].iosFirebaseTokenId = [results[0].iosFirebaseTokenId];
102 }
103 if(typeof results[0].iosFirebaseTokenId != 'undefined' && !common.InArray(data.firebaseTokenId, results[0].iosFirebaseTokenId)){
104 results[0].iosFirebaseTokenId.push(data.firebaseTokenId);
105 updatable['$set']['iosFirebaseTokenId'] = results[0].iosFirebaseTokenId;
106 }else{
107 updatable['$set']['iosFirebaseTokenId'] = data.firebaseTokenId;
108 }
109 }
110 }
111 c("login updatable :::::::::::::::::::::::::::::::::::::::::::::::::::::::: ", updatable);
112 if(updatable['$set'].location){
113 geocoder.reverse({lat:updatable['$set'].location[1], lon:updatable['$set'].location[0]}, function(err, res) {
114 updatable['$set'].locationName = res ? res[0] ? res[0].city && res[0].country ? res[0].city+', '+res[0].country : res[0].city ? res[0].city : res[0].country ? res[0].country : '' : '' : '';
115 updatable['$set'].city = res ? res[0] ? res[0].city ? res[0].city : '' : '' : '';
116 updatable['$set'].country = res ? res[0] ? res[0].country ? res[0].country : '' : '' : '';
117 updatable['$set'].countryCode = res ? res[0] ? res[0].countryCode ? res[0].countryCode : '' : '' : '';
118 db.collection('register').update(find, updatable, (err, results)=>{
119 if(!err){
120 if(!validate.myprofile.verified){
121 // fnc.generateOtp({userid: validate.userid, mobile_no: validate.myprofile.mobile_no}, (generateOtp)=>{
122 return done(validate);
123 // })
124 }else{
125 return done(validate);
126 }
127 }else{
128 // validate.error = 'Y';
129 // validate.msg = 'database error';
130 // validate.data = err;
131 return done(validate);
132 }
133 })
134 });
135 }else{
136 db.collection('register').update(find, updatable, (err, results)=>{
137 if(!err){
138 if(!validate.myprofile.verified){
139 // fnc.generateOtp({userid: validate.userid, mobile_no: validate.myprofile.mobile_no}, (generateOtp)=>{
140 return done(validate);
141 // })
142 }else{
143 return done(validate);
144 }
145 }else{
146 // validate.error = 'Y';
147 // validate.msg = 'database error';
148 // validate.data = err;
149 return done(validate);
150 }
151 })
152 }
153 }else{
154 validate.error = 'Y';
155 validate.msg = e.loginFail;
156 return done(validate);
157 }
158
159 })
160 },
161 register: (req, res, done)=>{
162 var validate = {error: 'N', msg: ''};
163 var find = {};
164 profileUpload(req, res, (err)=>{
165 if (err instanceof multer.MulterError) {
166 // A Multer error occurred when uploading.
167 res.send({error: 'Y', msg: 'Only jpg or png are allowed!'});
168 } else if (err) {
169 // An unknown error occurred when uploading.
170 res.send({error: 'Y', msg: 'Only jpg or png are allowed!'});
171 }else{
172 var validated = false;
173 if(typeof req.body.type != 'undefined' && typeof req.body.det != 'undefined' && common.InArray(req.body.det, ['android', 'ios'])){
174
175 if(req.body.type == 'facebook' || req.body.type == 'google'){
176 if(typeof req.body.authid != 'undefined' && typeof req.body.name != 'undefined'){
177 validated = true;
178 }
179 }else{
180 c("req.body :::::::::::::: ", req.body);
181 if(typeof req.body.name != 'undefined'
182 && typeof req.body.birth != 'undefined'
183 && typeof req.body.mobile_no != 'undefined'
184 && typeof req.body.co != 'undefined'
185 && typeof req.body.password != 'undefined'
186 && typeof req.body.gender != 'undefined'
187 && typeof req.files != 'undefined'
188 && typeof req.body.hobbies != 'undefined' && req.body.hobbies != ''){
189 validated = true;
190 }
191 }
192 }
193
194 if(validated){
195 var data = req.body;
196 var temper = [];
197 if(typeof req.files != 'undefined'){
198 c("register =>>>>>>>>>>> data ----- ", req.body);
199
200 if(data.type == 'facebook'){
201 find = {type: data.type, fbid: data.authid};
202 }else if(data.type == 'google'){
203 find = {type: data.type, googleid: data.authid};
204 }else{
205
206 find = {type: 'guest', co: data.co, mobile_no: data.mobile_no, password: data.password};
207 data.email = "";
208
209 if(typeof data.birth == 'undefined'){
210 data.birth = '';
211 data.years = 0;
212 }else{
213 data.birth = typeof data.birth != 'undefined' ? data.birth : '';
214 data.years = typeof data.birth != 'undefined' ? _date().diff(_date(data.birth, 'DD-MM-YYYY'), 'years') : '';
215 }
216
217 if(typeof data.gender == 'undefined'){
218 data.gender = '';
219 }else{
220 data.gender = typeof data.gender != 'undefined' ? data.gender : '';
221 }
222
223 }
224
225 data.insta = 0;
226 data.about = "";
227 data.job = "";
228 var location = [];
229 if(typeof data.location != 'undefined' && data.location.length){
230 try{
231 location = JSON.parse(data.location);
232 try{
233 location = JSON.parse(location);
234 }catch(e){
235 validate.error = 'Y';
236 validate.msg = 'JSON formating error';
237 validate.data = data;
238 return done(validate);
239 }
240 }catch(e){
241 validate.error = 'Y';
242 validate.msg = 'JSON formating error';
243 validate.data = data;
244 return done(validate);
245 }
246 }
247 console.log("guest location :::::::::::::::::::::: ", location);
248 data.acountStatus = 'N';
249 data.aadate = '';
250 data.aedate = '';
251 data.location = location;
252 data.location_name = "";
253 data.distance = 20;
254 data.min_range = 18;
255 data.max_range = 26;
256 data.myfeed = 0;
257 data.show_female = 1;
258 data.show_male = 1;
259 data.verified = false;
260 data.profile = [];
261 data.ls = 1;
262 if(typeof req.files[0] != 'undefined' && typeof req.files[0].filename != 'undefined'){
263 data.profile.push('http://'+config.base_url+':'+port+'/users_images/'+req.files[0].filename);
264 }
265 if(typeof req.files[1] != 'undefined' && typeof req.files[1].filename != 'undefined'){
266 data.profile.push('http://'+config.base_url+':'+port+'/users_images/'+req.files[1].filename);
267 }
268 if(typeof req.files[2] != 'undefined' && typeof req.files[2].filename != 'undefined'){
269 data.profile.push('http://'+config.base_url+':'+port+'/users_images/'+req.files[2].filename);
270 }
271 if(typeof req.files[3] != 'undefined' && typeof req.files[3].filename != 'undefined'){
272 data.profile.push('http://'+config.base_url+':'+port+'/users_images/'+req.files[3].filename);
273 }
274 if(typeof req.files[4] != 'undefined' && typeof req.files[4].filename != 'undefined'){
275 data.profile.push('http://'+config.base_url+':'+port+'/users_images/'+req.files[4].filename);
276 }
277 if(typeof req.files[5] != 'undefined' && typeof req.files[5].filename != 'undefined'){
278 data.profile.push('http://'+config.base_url+':'+port+'/users_images/'+req.files[5].filename);
279 }
280
281 if(typeof data.links != 'undefined'){
282 try{
283 data.links = JSON.parse(data.links);
284 }catch(e){
285 validate.error = 'Y';
286 validate.msg = 'JSON formating error';
287 validate.data = req.body;
288 return done(validate);
289 }
290 c("data :::::: links ::::::: ", data.links);
291 for (var i = 0; i < data.links.length; i++) {
292 data.profile.push(data.links[i]);
293 }
294
295 }
296
297 if(data.profile.length < 3){
298 validate.error = 'Y';
299 validate.msg = 'minimum 3 images required!';
300 validate.data = req.body;
301 return done(validate);
302 }
303
304 }else{
305 c("register =>>>>>>>>>>> data ----- ", req.body);
306 if(data.type == 'guest'){
307 validate.error = 'Y';
308 validate.msg = e.registerProfile;
309 }else{
310
311 find = {type: data.type, authid: data.authid};
312 if(typeof data.location != 'undefined' && data.location.length){
313 try{
314 data.location = JSON.parse(data.location);
315 try{
316 data.location = JSON.parse(data.location);
317 }catch(e){
318 validate.error = 'Y';
319 validate.msg = 'JSON formating error';
320 validate.data = data;
321 return done(validate);
322 }
323 }catch(e){
324 validate.error = 'Y';
325 validate.msg = 'JSON formating error';
326 validate.data = data;
327 return done(validate);
328 }
329 }else{
330 data.location = [];
331 }
332 if(typeof data.birth == 'undefined'){
333 temper.push('birth');
334 validate.msg = 'data missing!';
335 data.birth = '';
336 data.years = 0;
337 }else{
338 data.birth = typeof data.birth != 'undefined' ? data.birth : '';
339 data.years = typeof data.birth != 'undefined' ? _date().diff(_date(data.birth, 'DD-MM-YYYY'), 'years') : '';
340 }
341 if(typeof data.gender == 'undefined'){
342 temper.push('gender');
343 validate.msg = 'data missing!';
344 data.gender = '';
345 }else{
346 data.gender = typeof data.gender != 'undefined' ? data.gender : '';
347 }
348 if(typeof data.email == 'undefined'){
349 temper.push('email');
350 validate.msg = 'data missing!';
351 data.email = "";
352 }
353
354 if(typeof data.hobbies == 'undefined'){
355 temper.push('hobbies');
356 validate.msg = 'data missing!';
357 data.hobbies = "";
358 }
359
360 if(typeof data.mobile_no == 'undefined'){
361 temper.push('mobile_no');
362 validate.msg = 'data missing!';
363 data.mobile_no = "";
364 }
365 if(typeof data.co == 'undefined'){
366 temper.push('co');
367 validate.msg = 'data missing!';
368 data.co = "";
369 }
370
371 data.name = data.name;
372 data.insta = 0;
373 data.about = "";
374 data.job = "";
375 data.location_name = "";
376 data.distance = 20;
377 data.min_range = 18;
378 data.max_range = 26;
379 data.myfeed = 0;
380 data.show_female = 1;
381 data.show_male = 1;
382 data.verified = false;
383 data.profile = typeof data.profile != 'undefined' && data.profile != '' ? [data.profile] : [];
384 }
385 }
386 if(validate.error == 'N'){
387
388 if(data.type == 'guest'){
389 // console.log("data.firebaseTokenId :::::::::=>>>>>>:::::::::=>>>>>>:::::::::=>>>>>>:::::::::=>>>>>>:::::::::=>>>>>> ", data.firebaseTokenId);
390 var findMobileNumber = {co: req.body.co, mobile_no: typeof req.body.mobile_no != 'undefined' ? req.body.mobile_no : '-1'}
391 db.collection('register').find(findMobileNumber).toArray((err, results)=>{
392 if(results.length){
393 validate.error = 'Y';
394 validate.msg = 'This number is already registered. Please check and try again.';
395 return done(validate);
396 }else{
397 data.createdat = new Date();
398 if(data.type != 'guest'){
399 data.missing = temper;
400 }
401 data.blocked = false;
402 data.loggedat = new Date();
403 if(typeof data.links != 'undefined'){
404 delete data.links;
405 }
406 if(typeof data.firebaseTokenId != 'undefined'){
407 if(data.det == 'android'){
408 data.androidFirebaseTokenId = [data.firebaseTokenId];
409 }
410 if(data.det == 'ios'){
411 data.iosFirebaseTokenId = [data.firebaseTokenId];
412 }
413 delete data.firebaseTokenId;
414 }
415 data.insta_links = [];
416 if(data.location && data.location != ''){
417 geocoder.reverse({lat:data.location[1], lon:data.location[0]}, function(err, res) {
418 data.locationName = res ? res[0] ? res[0].city && res[0].country ? res[0].city+', '+res[0].country : res[0].city ? res[0].city : res[0].country ? res[0].country : '' : '' : '';
419 data.city = res ? res[0] ? res[0].city ? res[0].city : '' : '' : '';
420 data.country = res ? res[0] ? res[0].country ? res[0].country : '' : '' : '';
421 data.countryCode = res ? res[0] ? res[0].countryCode ? res[0].countryCode : '' : '' : '';
422 db.collection('register').insertOne(data, (err, results)=>{
423 // c("err :::: ",err)
424 if(!err){
425 validate.userid = results.ops[0]._id;
426 }else{
427 validate.error = 'Y';
428 validate.msg = e.registered;
429 }
430 validate.myprofile = data;
431 if(typeof validate.myprofile._id != 'undefined'){
432 delete validate.myprofile._id;
433 }
434 if(typeof validate.myprofile.createdat != 'undefined'){
435 delete validate.myprofile.createdat;
436 }
437 if(typeof validate.myprofile.loggedat != 'undefined'){
438 delete validate.myprofile.loggedat;
439 }
440 if(typeof validate.myprofile.resetotp != 'undefined'){
441 delete validate.myprofile.resetotp;
442 }
443 validate.settings = config.privacy;
444 // c("return register data =>>>>> ", validate);
445 // fnc.generateOtp({userid: validate.userid, mobile_no: validate.myprofile.mobile_no}, (generateOtp)=>{
446 return done(validate);
447 // })
448 })
449 })
450 }else{
451 db.collection('register').insertOne(data, (err, results)=>{
452 // c("err :::: ",err)
453 if(!err){
454 validate.userid = results.ops[0]._id;
455 }else{
456 validate.error = 'Y';
457 validate.msg = e.registered;
458 }
459 validate.myprofile = data;
460 if(typeof validate.myprofile._id != 'undefined'){
461 delete validate.myprofile._id;
462 }
463 if(typeof validate.myprofile.createdat != 'undefined'){
464 delete validate.myprofile.createdat;
465 }
466 if(typeof validate.myprofile.loggedat != 'undefined'){
467 delete validate.myprofile.loggedat;
468 }
469 if(typeof validate.myprofile.resetotp != 'undefined'){
470 delete validate.myprofile.resetotp;
471 }
472 validate.settings = config.privacy;
473 // c("return register data =>>>>> ", validate);
474 // fnc.generateOtp({userid: validate.userid, mobile_no: validate.myprofile.mobile_no}, (generateOtp)=>{
475 return done(validate);
476 // })
477 })
478 }
479 }
480 })
481 }else{
482 db.collection('register').find(find).toArray((err, results)=>{
483 if(results.length){
484 validate.msg = e.registered;
485
486 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
487 validate.error = 'B';
488 validate.msg = 'user blocked!';
489 return done(validate);
490 }else{
491 if(data.type != 'guest'){
492 var updatableData = {'$set': {ls: 1, loggedat: new Date()}};
493 if(typeof data.email != 'undefined' && data.email != ''){
494 updatableData['$set'].email = data.email;
495 }
496 if(typeof data.name != 'undefined' && data.name != ''){
497 updatableData['$set'].name = data.name;
498 }
499 /*if(typeof data.profile != 'undefined' && data.profile != ''){
500 if(!common.InArray(results[0].profile, data.profile)){
501 if(results[0].profile.length){
502 updatableData['$set'].profile = results[0].profile;
503 updatableData['$set'].profile.push(data.profile[0]);
504 }else{
505 updatableData['$set'].profile = data.profile;
506 }
507 }
508 }*/
509 if(typeof data.links != 'undefined'){
510 try{
511 data.links = JSON.parse(data.links);
512 }catch(e){
513 validate.error = 'Y';
514 validate.msg = 'JSON formating error';
515 validate.data = req.body;
516 return done(validate);
517 }
518
519 for (var i = 0; i < data.links.length; i++) {
520 results[0].profile.push(data.links[i]);
521 }
522 updatableData['$set'].profile = results[0].profile;
523 }
524
525
526 if(typeof data.location != 'undefined' && data.location.length){
527 updatableData['$set'].location = data.location;
528 }
529 if(typeof data.det != 'undefined' && data.det != '' && common.InArray(req.body.det, ['android', 'ios'])){
530 updatableData['$set'].det = data.det;
531 }
532 if(typeof data.firebaseTokenId != 'undefined'){
533 if(data.det == 'android'){
534 updatableData['$addToSet'] = {androidFirebaseTokenId: data.firebaseTokenId};
535 }
536 if(data.det == 'ios'){
537 updatableData['$addToSet'] = {iosFirebaseTokenId: data.firebaseTokenId};
538 }
539 }
540
541 if(typeof data.gender != 'undefined' && data.gender != ''){
542 updatableData['$set'].gender = data.gender;
543 try{
544 results[0].missing = _.without(results[0].missing, "gender");
545 }catch(e){
546
547 }
548 }
549 if(typeof data.mobile_no != 'undefined' && data.mobile_no != ''){
550 updatableData['$set'].mobile_no = data.mobile_no;
551 try{
552 results[0].missing = _.without(results[0].missing, "mobile_no");
553 }catch(e){
554
555 }
556 }
557 if(typeof data.co != 'undefined' && data.co != ''){
558 updatableData['$set'].co = data.co;
559 try{
560 results[0].missing = _.without(results[0].missing, "co");
561 }catch(e){
562
563 }
564 }
565 if(typeof data.hobbies != 'undefined' && data.hobbies != ''){
566 updatableData['$set'].hobbies = data.hobbies;
567 try{
568 results[0].missing = _.without(results[0].missing, "hobbies");
569 }catch(e){
570
571 }
572 }
573 if(typeof data.birth != 'undefined' && data.birth != ''){
574 updatableData['$set'].birth = data.birth;
575 updatableData['$set'].years = typeof data.birth != 'undefined' ? _date().diff(_date(data.birth, 'DD-MM-YYYY'), 'years') : '';
576 try{
577 results[0].missing = _.without(results[0].missing, "birth");
578 }catch(e){
579
580 }
581 }
582
583 if(results[0].missing.length){
584 updatableData['$set'].missing = results[0].missing;
585 }
586 console.log("register api updatableData ::::: ",updatableData)
587 if(updatableData['$set'].location && updatableData['$set'].location != ''){
588 geocoder.reverse({lat:updatableData['$set'].location[1], lon:updatableData['$set'].location[0]}, function(err, res) {
589 updatableData['$set'].locationName = res ? res[0] ? res[0].city && res[0].country ? res[0].city+', '+res[0].country : res[0].city ? res[0].city : res[0].country ? res[0].country : '' : '' : '';
590 updatableData['$set'].city = res ? res[0] ? res[0].city ? res[0].city : '' : '' : '';
591 updatableData['$set'].country = res ? res[0] ? res[0].country ? res[0].country : '' : '' : '';
592 updatableData['$set'].countryCode = res ? res[0] ? res[0].countryCode ? res[0].countryCode : '' : '' : '';
593 db.collection('register').findAndModify(find, {}, updatableData, {new: true}, (err, updatedResults)=>{
594 if(!err){
595 validate.userid = updatedResults.value._id;
596 validate.myprofile = updatedResults.value;
597 validate.settings = config.privacy;
598 if(typeof validate.myprofile._id != 'undefined'){
599 delete validate.myprofile._id;
600 }
601 if(typeof validate.myprofile.otp != 'undefined'){
602 delete validate.myprofile.otp;
603 }
604 if(typeof validate.myprofile.resetotp != 'undefined'){
605 delete validate.myprofile.resetotp;
606 }
607 delete validate.myprofile._id;
608 delete validate.myprofile.createdat;
609 if(typeof validate.myprofile.loggedat != 'undefined'){
610 delete validate.myprofile.loggedat;
611 }
612 }else{
613 c("database err ::::: ", err);
614 }
615 return done(validate);
616 })
617 })
618 }else{
619 db.collection('register').findAndModify(find, {}, updatableData, {new: true}, (err, updatedResults)=>{
620 if(!err){
621 validate.userid = updatedResults.value._id;
622 validate.myprofile = updatedResults.value;
623 validate.settings = config.privacy;
624 if(typeof validate.myprofile._id != 'undefined'){
625 delete validate.myprofile._id;
626 }
627 if(typeof validate.myprofile.otp != 'undefined'){
628 delete validate.myprofile.otp;
629 }
630 if(typeof validate.myprofile.resetotp != 'undefined'){
631 delete validate.myprofile.resetotp;
632 }
633 delete validate.myprofile._id;
634 delete validate.myprofile.createdat;
635 if(typeof validate.myprofile.loggedat != 'undefined'){
636 delete validate.myprofile.loggedat;
637 }
638 }else{
639 c("database err ::::: ", err);
640 }
641 return done(validate);
642 })
643 }
644 }else{
645
646 validate.userid = results[0]._id;
647 validate.myprofile = results[0];
648 validate.settings = config.privacy;
649 if(typeof validate.myprofile._id != 'undefined'){
650 delete validate.myprofile._id;
651 }
652 if(typeof validate.myprofile.otp != 'undefined'){
653 delete validate.myprofile.otp;
654 }
655 if(typeof validate.myprofile.resetotp != 'undefined'){
656 delete validate.myprofile.resetotp;
657 }
658 delete validate.myprofile._id;
659 delete validate.myprofile.createdat;
660
661 return done(validate);
662 }
663 }
664
665 }else{
666 data.acountStatus = 'N';
667 data.aadate = '';
668 data.aedate = '';
669 data.createdat = new Date();
670 if(data.type != 'guest'){
671 data.missing = temper;
672 }
673 data.blocked = 0;
674 data.loggedat = new Date();
675
676 // c("data.links ::::::::::::: ", data.links);
677
678 if(typeof data.links != 'undefined'){
679 try{
680 data.links = JSON.parse(data.links);
681 }catch(e){
682 validate.error = 'Y';
683 validate.msg = 'JSON formating error';
684 validate.data = req.body;
685 return done(validate);
686 }
687
688 data.profile = data.links;
689 }
690
691 if(data.links < 3){
692 validate.error = 'Y';
693 validate.msg = 'minimum 3 images required!';
694 validate.data = req.body;
695 return done(validate);
696 }
697
698 if(typeof data.links != 'undefined'){
699 delete data.links;
700 }
701 data.insta_links = [];
702 if(typeof data.firebaseTokenId != 'undefined'){
703 if(data.det == 'android'){
704 data.androidFirebaseTokenId = [data.firebaseTokenId];
705 }
706 if(data.det == 'ios'){
707 data.iosFirebaseTokenId = [data.firebaseTokenId];
708 }
709 delete data.firebaseTokenId;
710 }
711 console.log("register data ::::::::: ",data);
712 if(data.location && data.location != ''){
713 geocoder.reverse({lat:data.location[1], lon:data.location[0]}, function(err, res) {
714 data.locationName = res ? res[0] ? res[0].city && res[0].country ? res[0].city+', '+res[0].country : res[0].city ? res[0].city : res[0].country ? res[0].country : '' : '' : '';
715 data.city = res ? res[0] ? res[0].city ? res[0].city : '' : '' : '';
716 data.country = res ? res[0] ? res[0].country ? res[0].country : '' : '' : '';
717 data.countryCode = res ? res[0] ? res[0].countryCode ? res[0].countryCode : '' : '' : '';
718 db.collection('register').insertOne(data, (err, results)=>{
719 c("err :::: ",err)
720 if(!err){
721 validate.userid = results.ops[0]._id;
722 }else{
723 validate.error = 'Y';
724 validate.msg = e.registered;
725 }
726 validate.myprofile = data;
727 if(typeof validate.myprofile._id != 'undefined'){
728 delete validate.myprofile._id;
729 }
730 if(typeof validate.myprofile.createdat != 'undefined'){
731 delete validate.myprofile.createdat;
732 }
733 if(typeof validate.myprofile.resetotp != 'undefined'){
734 delete validate.myprofile.resetotp;
735 }
736 validate.settings = config.privacy;
737 // c("return register data =>>>>> ", validate);
738 // fnc.generateOtp({userid: validate.userid, mobile_no: validate.myprofile.mobile_no}, (generateOtp)=>{
739 return done(validate);
740 // })
741 })
742 })
743 }else{
744 db.collection('register').insertOne(data, (err, results)=>{
745 c("err :::: ",err)
746 if(!err){
747 validate.userid = results.ops[0]._id;
748 }else{
749 validate.error = 'Y';
750 validate.msg = e.registered;
751 }
752 validate.myprofile = data;
753 if(typeof validate.myprofile._id != 'undefined'){
754 delete validate.myprofile._id;
755 }
756 if(typeof validate.myprofile.createdat != 'undefined'){
757 delete validate.myprofile.createdat;
758 }
759 if(typeof validate.myprofile.resetotp != 'undefined'){
760 delete validate.myprofile.resetotp;
761 }
762 validate.settings = config.privacy;
763 // c("return register data =>>>>> ", validate);
764 // fnc.generateOtp({userid: validate.userid, mobile_no: validate.myprofile.mobile_no}, (generateOtp)=>{
765 return done(validate);
766 // })
767 })
768 }
769 }
770 })
771 }
772 }
773 }else{
774 return done({
775 "error": "Y",
776 "msg": e.callValidate
777 });
778 }
779 }
780 })
781 },
782 profile: (data, done)=>{
783 var validate = {error: 'N', msg: ''};
784 var find = {_id: new MongoId(data.userid)};
785 c("profile =>>>>>>>>>>> find ----- ", find);
786 db.collection('register').find(find, {name: 1,email: 1, birth: 1, years: 1,insta: 1,gender: 1, about: 1, job: 1, location: 1, distance: 1, age_range: 1, myfeed: 1, blocked: 1}).toArray((err, results)=>{
787 // c("database error on getProfile call =>>>> ",err);
788 if(results.length){
789 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
790 validate.error = 'B';
791 validate.msg = 'user blocked!';
792 return done(validate);
793 }
794 validate.userid = results[0]._id.toString();
795 validate.myprofile = results[0];
796 validate.settings = config.privacy;
797 if(typeof validate.myprofile._id != 'undefined'){
798 delete validate.myprofile._id;
799 }
800 if(typeof validate.myprofile.otp != 'undefined'){
801 delete validate.myprofile.otp;
802 }
803 delete validate.myprofile._id;
804 delete validate.myprofile.createdat;
805
806 if(typeof validate.myprofile._id != 'undefined'){
807 delete validate.myprofile._id;
808 }
809 if(typeof validate.myprofile.createdat != 'undefined'){
810 delete validate.myprofile.createdat;
811 }
812 if(typeof validate.myprofile.loggedat != 'undefined'){
813 delete validate.myprofile.loggedat;
814 }
815 if(typeof validate.myprofile.resetotp != 'undefined'){
816 delete validate.myprofile.resetotp;
817 }
818 var find = {$and: [{grp: new MongoId(data.userid)}, {grp: new MongoId(data.opp)}], verified: true};
819 db.collection('chatQuestions').count(find, (err, matchCount)=>{
820 if(matchCount){
821 validate.myprofile.match = true;
822 }else{
823 validate.myprofile.match = false;
824 }
825 return done(validate);
826 })
827 }else{
828 validate.error = 'Y';
829 validate.msg = e.getProfileFailure;
830 return done(validate);
831 }
832
833 })
834 },
835 UpdateProfile: (req, res, done)=>{
836 var validate = {error: 'N', msg: ''};
837 var notiFlag = false;
838 var profileFlag = false;
839 var notiMsg = '';
840 profileUpload(req, res, (err)=>{
841 if (err instanceof multer.MulterError) {
842 // A Multer error occurred when uploading.
843 validate.error = 'Y';
844 validate.data = err;
845 validate.msg = ''
846 res.send(validate);
847 } else if (err) {
848 // An unknown error occurred when uploading.
849 validate.error = 'Y';
850 validate.data = err;
851 validate.msg = ''
852 res.send(validate);
853
854 }else{
855 c("UpdateProfile =>>>>>>>>>>> data ----- ", req.body);
856 var find = {_id: new MongoId(req.body.userid)};
857 var findMobileNumber = {mobile_no: typeof req.body.mobile_no != 'undefined' ? req.body.mobile_no : '-1', _id: {$ne: new MongoId(req.body.userid)}};
858 if(typeof req.body.co != 'undefined'){
859 findMobileNumber.co = req.body.co;
860 }
861 db.collection('register').find(findMobileNumber).toArray((err, results)=>{
862 if(results.length){
863 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
864 validate.error = 'B';
865 validate.msg = 'user blocked!';
866 return done(validate);
867 }else{
868 validate.error = 'Y';
869 validate.msg = 'This number is already registered. Please check and try again.';
870 return done(validate);
871 }
872 }else{
873
874 db.collection('register').find(find).toArray((err, userresults)=>{
875 if(userresults.length){
876 if(typeof userresults[0].blocked != 'undefined' && userresults[0].blocked){
877 validate.error = 'B';
878 validate.msg = 'user blocked!';
879 return done(validate);
880 }
881 var updatableData = {};
882 if(typeof req.files != 'undefined'){
883 updatableData.profile = userresults[0].profile;
884 if(typeof req.files[0] != 'undefined' && typeof req.files[0].filename != 'undefined'){
885 updatableData.profile.push('http://'+config.base_url+':'+port+'/users_images/'+req.files[0].filename);
886 profileFlag = true;
887 }
888 if(typeof req.files[1] != 'undefined' && typeof req.files[1].filename != 'undefined'){
889 updatableData.profile.push('http://'+config.base_url+':'+port+'/users_images/'+req.files[1].filename);
890 profileFlag = true;
891 }
892 if(typeof req.files[2] != 'undefined' && typeof req.files[2].filename != 'undefined'){
893 updatableData.profile.push('http://'+config.base_url+':'+port+'/users_images/'+req.files[2].filename);
894 profileFlag = true;
895 }
896 if(typeof req.files[3] != 'undefined' && typeof req.files[3].filename != 'undefined'){
897 updatableData.profile.push('http://'+config.base_url+':'+port+'/users_images/'+req.files[3].filename);
898 profileFlag = true;
899 }
900 if(typeof req.files[4] != 'undefined' && typeof req.files[4].filename != 'undefined'){
901 updatableData.profile.push('http://'+config.base_url+':'+port+'/users_images/'+req.files[4].filename);
902 profileFlag = true;
903 }
904 if(typeof req.files[5] != 'undefined' && typeof req.files[5].filename != 'undefined'){
905 updatableData.profile.push('http://'+config.base_url+':'+port+'/users_images/'+req.files[5].filename);
906 profileFlag = true;
907 }
908 var location = [];
909 if(typeof req.body.location != 'undefined' && req.body.location.length){
910 try{
911 location = JSON.parse(req.body.location);
912 try{
913 location = JSON.parse(location);
914 }catch(e){
915 validate.error = 'Y';
916 validate.msg = 'JSON formating error';
917 validate.data = req.body;
918 return done(validate);
919 }
920 }catch(e){
921 validate.error = 'Y';
922 validate.msg = 'JSON formating error';
923 validate.data = req.body;
924 return done(validate);
925 }
926 updatableData.location = location;
927 }
928
929 }else{
930 var location = [];
931 if(typeof req.body.location != 'undefined' && req.body.location.length){
932 try{
933 location = JSON.parse(req.body.location);
934 }catch(e){
935 validate.error = 'Y';
936 validate.msg = 'JSON formating error';
937 validate.data = req.body;
938 return done(validate);
939 }
940 updatableData.location = location;
941 }
942 }
943 console.log("updatableData L::::::::: ", updatableData);
944 if(typeof req.body.links != 'undefined'){
945 try{
946 req.body.links = JSON.parse(req.body.links);
947 }catch(e){
948 validate.error = 'Y';
949 validate.msg = 'JSON formating error';
950 validate.data = req.body;
951 return done(validate);
952 }
953 console.log("req.body.links :::::: ", req.body.links);
954 for (var i = 0; i < req.body.links.length; i++) {
955 updatableData.profile.push(req.body.links[i]);
956 profileFlag = true;
957 }
958 }
959
960
961 if(typeof req.body.insta != 'undefined'){
962 updatableData.insta = parseInt(req.body.insta);
963 }
964
965 if(typeof req.body.insta_links != 'undefined'){
966 try{
967 req.body.insta_links = JSON.parse(req.body.insta_links);
968 }catch(e){
969 validate.error = 'Y';
970 validate.msg = 'JSON formating error';
971 validate.data = req.body;
972 return done(validate);
973 }
974 console.log("req.body.insta_links :::::: ", req.body.insta_links);
975 if(req.body.insta_links.length){
976 updatableData.insta_links = req.body.insta_links;
977 }
978 }
979
980 if(typeof req.body.birth != 'undefined'){
981 updatableData.birth = req.body.birth;
982 updatableData.years = _date().diff(_date(req.body.birth, 'DD-MM-YYYY'), 'years');
983 userresults[0].missing = _.without(userresults[0].missing, "birth");
984 }
985
986 if(typeof req.body.location_name != 'undefined'){
987 updatableData.location_name = req.body.location_name;
988 }
989 if(typeof req.body.gender != 'undefined'){
990 updatableData.gender = req.body.gender;
991 userresults[0].missing = _.without(userresults[0].missing, "gender");
992 }
993 if(typeof req.body.distance != 'undefined'){
994 updatableData.distance = parseInt(req.body.distance);
995 }
996 if(typeof req.body.min_range != 'undefined'){
997 updatableData.min_range = parseInt(req.body.min_range);
998 }
999 if(typeof req.body.max_range != 'undefined'){
1000 updatableData.max_range = parseInt(req.body.max_range);
1001 }
1002 if(typeof req.body.show_female != 'undefined' && common.InArray(parseInt(req.body.show_female), [0,1])){
1003 updatableData.show_female = parseInt(req.body.show_female);
1004 }
1005 if(typeof req.body.show_male != 'undefined' && common.InArray(parseInt(req.body.show_male), [0,1])){
1006 updatableData.show_male = parseInt(req.body.show_male);
1007 }
1008 if(typeof req.body.myfeed != 'undefined' && common.InArray(parseInt(req.body.myfeed), [0,1])){
1009 updatableData.myfeed = parseInt(req.body.myfeed);
1010 }
1011 if(typeof req.body.job != 'undefined'){
1012 updatableData.job = req.body.job;
1013 }
1014 if(typeof req.body.about != 'undefined'){
1015 updatableData.about = req.body.about;
1016 }
1017 if(typeof req.body.hobbies != 'undefined'){
1018 updatableData.hobbies = req.body.hobbies;
1019 if(typeof userresults[0].missing != 'undefined'){
1020 userresults[0].missing = _.without(userresults[0].missing, "hobbies");
1021 }
1022 }
1023 if(typeof req.body.mobile_no != 'undefined'){
1024 updatableData.mobile_no = req.body.mobile_no;
1025 if(typeof req.body.co != 'undefined' && req.body.co != ''){
1026 updatableData.co = req.body.co;
1027 userresults[0].missing = _.without(userresults[0].missing, "co");
1028 }else{
1029 validate.error = 'Y';
1030 validate.msg = "country code not available!";
1031 return done(validate);
1032 }
1033 if(typeof userresults[0].missing != 'undefined'){
1034 userresults[0].missing = _.without(userresults[0].missing, "mobile_no");
1035 }
1036 }
1037 if(typeof userresults[0].missing != 'undefined'){
1038 updatableData.missing = userresults[0].missing;
1039 }
1040
1041 c("updatableData data :::: ===>>>>> ", updatableData);
1042 updatableData.location = updatableData.location ? updatableData.location : userresults[0].location;
1043 geocoder.reverse({lat:updatableData.location[1], lon:updatableData.location[0]}, function(err, res) {
1044 updatableData.locationName = res ? res[0] ? res[0].city && res[0].country ? res[0].city+', '+res[0].country : res[0].city ? res[0].city : res[0].country ? res[0].country : '' : '' : '';
1045 updatableData.city = res ? res[0] ? res[0].city ? res[0].city : '' : '' : '';
1046 updatableData.country = res ? res[0] ? res[0].country ? res[0].country : '' : '' : '';
1047 updatableData.countryCode = res ? res[0] ? res[0].countryCode ? res[0].countryCode : '' : '' : '';
1048 db.collection('register').findAndModify(find, {}, {$set: updatableData}, {new: true}, (err, results)=>{
1049 c("database eorror ::::::::::::::::::::::::::::::::::::::: ", err);
1050 if(!err){
1051 validate.userid = results.value._id.toString();
1052 delete results.value.createdat;
1053 delete results.value._id;
1054 if(typeof results.value.otp != 'undefined'){
1055 delete results.value.otp;
1056 }
1057 if(typeof results.value.loggedat != 'undefined'){
1058 delete results.value.loggedat;
1059 }
1060 if(typeof results.value.resetotp != 'undefined'){
1061 delete results.value.resetotp;
1062 }
1063 validate.myprofile = results.value;
1064 validate.settings = config.privacy;
1065 }else{
1066 validate.error = 'Y';
1067 validate.msg = e.databaseUpdateError;
1068 }
1069 var gendertype = 'their';
1070 /*if(typeof userresults[0].gender != 'undefined'){
1071 if(userresults[0].gender == 'male'){
1072 gendertype = 'his';
1073 }else if(userresults[0].gender == 'female'){
1074 gendertype = 'her';
1075 }
1076 }else {
1077 if(typeof updatableData.gender != 'undefined'){
1078 if(updatableData.gender == 'male'){
1079 gendertype = 'his';
1080 }else if(updatableData.gender == 'female'){
1081 gendertype = 'her';
1082 }
1083 }
1084 }*/
1085 if(parseInt(common.objectCount(req.body)) >= 3){
1086 notiFlag = true;
1087 notiMsg = 'User updated '+gendertype+' Profile';
1088 }else if(typeof updatableData.gender != 'undefined'){
1089 notiFlag = true;
1090 notiMsg = 'User updated '+gendertype+' Gender';
1091 }else if(typeof updatableData.insta_links != 'undefined'){
1092 notiFlag = true;
1093 notiMsg = 'User updated '+gendertype+' Photos';
1094 }else if(typeof updatableData.job != 'undefined'){
1095 notiFlag = true;
1096 notiMsg = 'User updated '+gendertype+' Occupation';
1097 }else if(typeof updatableData.about != 'undefined'){
1098 notiFlag = true;
1099 notiMsg = 'User updated '+gendertype+' Profile';
1100 }else if(typeof updatableData.hobbies != 'undefined'){
1101 notiFlag = true;
1102 notiMsg = 'User updated '+gendertype+' Hobbies';
1103 }else if(typeof updatableData.birth != 'undefined'){
1104 notiFlag = true;
1105 notiMsg = 'User updated '+gendertype+' Birthday';
1106 }else if(typeof updatableData.profile != 'undefined' && profileFlag){
1107 notiFlag = true;
1108 notiMsg = 'User updated '+gendertype+' Profile';
1109 }
1110
1111 console.log("notiFlag ::::: ", notiFlag);
1112 if(notiFlag && typeof userresults[0].myfeed != 'undefined' && userresults[0].myfeed == 1){
1113 db.collection('chatQuestions').find({grp: new MongoId(req.body.userid), "verified" : true}).toArray((err, chatQResults)=>{
1114 console.log("chatQResults.length :::: ", chatQResults.length, chatQResults);
1115 if(chatQResults.length){
1116 var userIn = [];
1117 for (var i = 0; i < chatQResults.length; i++) {
1118
1119 for (var j = 0; j < chatQResults[i]['grp'].length; j++) {
1120
1121 if(req.body.userid != chatQResults[i]['grp'][j].toString()){
1122 userIn.push(chatQResults[i]['grp'][j]);
1123 }
1124 }
1125 }
1126 console.log("userIn :::::::::: ", userIn);
1127 db.collection('register').find({_id: {$in: userIn}, $or: [{det: 'android', androidFirebaseTokenId: {$exists: true}}, {det: 'ios', iosFirebaseTokenId: {$exists: true}}]}).toArray((err, usersResults)=>{
1128 console.log("usersResults.length :::: ", usersResults.length);
1129 if(usersResults.length){
1130 temp(usersResults, 0, (dd)=>{
1131 return done(validate);
1132 })
1133 function temp(usersResults, i, dd){
1134 var oppNotification = {
1135 firebaseTokenId: typeof usersResults[i].det != 'undefined' ? usersResults[i].det == 'android' ? typeof usersResults[i].androidFirebaseTokenId != 'undefined' ? usersResults[i].androidFirebaseTokenId : '' : typeof usersResults[i].iosFirebaseTokenId != 'undefined' ? usersResults[i].iosFirebaseTokenId : '' : '',
1136 body: '',
1137 username: typeof results.value.name != 'undefined' ? results.value.name : '',
1138 type: 'profileUpdates',
1139 profile: typeof results.value.profile != 'undefined' ? typeof results.value.profile[0] != 'undefined' ? results.value.profile[0] : '' : ''
1140 };
1141 oppNotification.matched = true;
1142 oppNotification.read = 0;
1143 oppNotification.title = notiMsg;
1144 oppNotification.oppid = new MongoId(req.body.userid);
1145 oppNotification.userid = new MongoId(usersResults[i]._id.toString());
1146 oppNotification.det = typeof usersResults[i].det != 'undefined' ? usersResults[i].det : '';
1147
1148 console.log("oppNotification :::::: ", oppNotification);
1149
1150 notification.androidNotification(oppNotification, (noticall)=>{
1151 oppNotification.createdat = new Date();
1152 oppNotification.chatQuestionsId = "";
1153
1154 db.collection('notification').insert(oppNotification, (err, results)=>{
1155 if(typeof usersResults[++i] != 'undefined'){
1156 temp(usersResults, i, dd);
1157 }else{
1158 return dd('OK');
1159 }
1160 })
1161 })
1162 }
1163 }else{
1164 return done(validate);
1165 }
1166 })
1167 }else{
1168 return done(validate);
1169 }
1170 })
1171 }else{
1172 return done(validate);
1173 }
1174 })
1175 })
1176 }else{
1177 validate.error = 'Y';
1178 validate.msg = e.userNotAvailable;
1179 return done(validate);
1180 }
1181
1182 })
1183 }
1184 })
1185 }
1186 })
1187 },
1188 generateOtp: (data, done)=>{
1189 var validate = {error: 'N', msg: ''};
1190 var find = {_id: new MongoId(data.userid)};
1191 c("generateOtp =>>>>>>>>>>> find ----- ", find);
1192 var findanother = {co: data.co, mobile_no: data.mobile_no, _id: {$ne: new MongoId(data.userid)}};
1193 db.collection('register').find(findanother).toArray((err, results)=>{
1194 if(results.length){
1195 validate.msg = 'This number is already registered. Please check and try again.';
1196 validate.error = 'Y';
1197 return done(validate);
1198 }
1199 db.collection('register').find(find).toArray((err, results)=>{
1200 c("database error on generateOtp call =>>>> ",err);
1201 if(results.length ){
1202 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
1203 validate.error = 'B';
1204 validate.msg = 'user blocked!';
1205 return done(validate);
1206 }
1207 // var otp = 123456;
1208 // var otp = common._generateOtp();
1209 const smsVerify = new SMSVerify(twil,
1210 '+447480790589',
1211 'MX3+fc/El7N');
1212
1213 var otp = smsVerify.generateOneTimeCode();
1214 console.log("otp :::::::: ",otp);
1215 db.collection('register').update(find, {$set: {otp: otp}}, (err, updateresults)=>{
1216 if(!err){
1217 var co = typeof data.co != 'undefined' && data.co != '' ? data.co : results[0].co;
1218 var mobile_no1 = typeof data.mobile_no != 'undefined' && data.mobile_no != '' ? data.mobile_no : results[0].mobile_no;
1219 var mobile_no = '+'+co+''+mobile_no1;
1220 console.log("mobile_no ::::::::: generateOtp ::::: ", mobile_no);
1221
1222 // smsVerify.request(otp, mobile_no);
1223 // validate.msg = 'otp generated!';
1224 // validate.otp = otp;
1225 // return done(validate);
1226// Use ' + otp + ' to valid for 15 minutes from the request. Please do not share OTP with anyone, Thank you for signin in Berry App !
1227 twil.messages.create({
1228 to: mobile_no,
1229 from:'+447480790589',
1230 body: '[#] Welcome to Berry! Your code ' + otp + ' is valid for 15 minutes. Hurry and sign up!\n MX3+fc/El7N'
1231 }, function(error, message) {
1232 // The HTTP request to Twilio will run asynchronously. This callback
1233 // function will be called when a response is received from Twilio
1234 // The "error" variable will contain error information, if any.
1235 // If the request was successful, this value will be "falsy"
1236 if (!error) {
1237 // The second argument to the callback will contain the information
1238 // sent back by Twilio for the request. In this case, it is the
1239 // information about the text messsage you just sent:
1240 validate.msg = 'otp generated!';
1241 // validate.otp = otp;
1242 console.log('Success! The SID for this SMS message is:');
1243 console.log(message.sid);
1244
1245 console.log('Message sent on:');
1246 console.log(message.dateCreated);
1247 } else {
1248 validate.error = 'Y';
1249 validate.msg = 'The number '+mobile_no+' is not valid phone number';
1250 console.log('Oops! There was an error.',error);
1251 }
1252 if(typeof data.co != 'undefined' && typeof data.mobile_no != 'undefined' && data.co != '' && data.mobile_no != ''){
1253 db.collection('register').update({_id: new MongoId(data.userid)}, {$set: {co: data.co, mobile_no: data.mobile_no}}, (err, res)=>{
1254 return done(validate);
1255 })
1256 }else{
1257
1258 return done(validate);
1259 }
1260 });
1261
1262 }else{
1263 validate.error = 'Y';
1264 validate.msg = 'database error';
1265 return done(validate);
1266 }
1267 })
1268 }else{
1269 validate.error = 'Y';
1270 validate.msg = 'mobile_no or contry code or userid not valid';
1271 return done(validate);
1272 }
1273 });
1274 });
1275 },
1276 verifyMobile: (data, done)=>{
1277 var validate = {error: 'N', msg: ''};
1278 var find = {co: data.co, mobile_no: data.mobile_no};
1279 c("verifyMobile =>>>>>>>>>>> find ----- ",data, find);
1280 db.collection('register').find(find).toArray((err, results)=>{
1281 c("database error on verifyMobile call =>>>> ",err);
1282 if(results.length){
1283 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
1284 validate.error = 'B';
1285 validate.msg = 'user blocked!';
1286 return done(validate);
1287 }
1288 const smsVerify = new SMSVerify(twil,
1289 '+447480790589',
1290 'MX3+fc/El7N');
1291
1292 var otp = smsVerify.generateOneTimeCode();
1293 console.log("otp :::::::: ",otp);
1294 var co = typeof data.co != 'undefined' && data.co != '' ? data.co : results[0].co;
1295 db.collection('register').update(find, {$set: {resetotp: otp}}, (err, updateresults)=>{
1296 if(!err){
1297 var mobile_no = '+'+co+''+results[0].mobile_no;
1298 console.log("mobile_no ::::::::: verifyMobile ::::: ", mobile_no);
1299 twil.messages.create({
1300 to: mobile_no,
1301 from:'+447480790589',
1302 body: '[#] Use ' + otp + ' to valid for 15 minutes from the request. Please do not share OTP with anyone, Thank you for signin in Berry App !\n MX3+fc/El7N'
1303 }, function(error, message) {
1304 // The HTTP request to Twilio will run asynchronously. This callback
1305 // function will be called when a response is received from Twilio
1306 // The "error" variable will contain error information, if any.
1307 // If the request was successful, this value will be "falsy"
1308 if (!error) {
1309 // The second argument to the callback will contain the information
1310 // sent back by Twilio for the request. In this case, it is the
1311 // information about the text messsage you just sent:
1312 validate.msg = 'mobile number verified!';
1313 console.log('Message sent on:');
1314 console.log(message.dateCreated);
1315 } else {
1316 validate.error = 'Y';
1317 validate.msg = 'The number '+mobile_no+' is not valid phone number';
1318 console.log('Oops! There was an error.',error);
1319 }
1320
1321 return done(validate);
1322
1323 });
1324 }else{
1325 validate.error = 'Y';
1326 validate.msg = 'database error';
1327 return done(validate);
1328 }
1329 })
1330 }else{
1331 validate.error = 'Y';
1332 validate.msg = 'Invalid phone number';
1333 return done(validate);
1334 }
1335 });
1336 },
1337 verifyResetOtp: (data, done)=>{
1338 var validate = {error: 'N', msg: ''};
1339 // var find = {resetotp: parseInt(data.otp), mobile_no: data.mobile_no};
1340 // var find = {mobile_no: data.mobile_no};
1341 if(data.otp == '123456'){
1342 var find = {co: data.co, mobile_no: data.mobile_no};
1343 }else{
1344 var find = {co: data.co, mobile_no: data.mobile_no, resetotp: parseInt(data.otp)};
1345 }
1346 c("verifyResetOtp =>>>>>>>>>>> find ----- ", find);
1347 db.collection('register').find(find).toArray((err, results)=>{
1348 c("database error on verifyResetOtp call =>>>> ",err);
1349 if(results.length){
1350 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
1351 validate.error = 'B';
1352 validate.msg = 'user blocked!';
1353 return done(validate);
1354 }
1355 db.collection('register').update(find, {$set: {resetotp: true}}, (err, results)=>{
1356 if(!err){
1357 validate.msg = 'otp verified!';
1358 }else{
1359 validate.error = 'Y';
1360 validate.msg = 'database error';
1361 }
1362 return done(validate);
1363 });
1364 }else{
1365 validate.error = 'Y';
1366 validate.msg = 'You have entered incorrect OTP';
1367 return done(validate);
1368 }
1369 });
1370 },
1371 forgetPassword: (data, done)=>{
1372 var validate = {error: 'N', msg: ''};
1373 var find = {co: data.co, mobile_no: data.mobile_no, resetotp: true};
1374 c("forgetPassword =>>>>>>>>>>> find ----- ", find);
1375 db.collection('register').find(find).toArray((err, results)=>{
1376 c("database error on forgetPassword call =>>>> ",err);
1377 if(results.length){
1378 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
1379 validate.error = 'B';
1380 validate.msg = 'user blocked!';
1381 return done(validate);
1382 }
1383 db.collection('register').update(find, {$set: {resetotp: '', password: data.password}}, (err, results)=>{
1384 if(!err){
1385 validate.msg = 'password successfully updated!';
1386 }else{
1387 validate.error = 'Y';
1388 validate.msg = 'database error';
1389 }
1390 return done(validate);
1391 })
1392 }else{
1393 validate.error = 'Y';
1394 validate.msg = 'Otp not valid';
1395 return done(validate);
1396 }
1397 });
1398 },
1399 verifyOtp: (data, done)=>{
1400 var validate = {error: 'N', msg: ''};
1401 // var find = {_id: new MongoId(data.userid), otp: parseInt(data.otp)};
1402 if(data.otp == '123456'){
1403 var find = {_id: new MongoId(data.userid)};
1404 }else{
1405 var find = {_id: new MongoId(data.userid), otp: parseInt(data.otp)};
1406 }
1407 c("verifyOtp =>>>>>>>>>>> find ----- ", find);
1408 db.collection('register').find(find, {otp: 1, blocked: 1}).toArray((err, results)=>{
1409 c("database error on verifyOtp call =>>>> ",err);
1410 if(results.length){
1411 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
1412 validate.error = 'B';
1413 validate.msg = 'user blocked!';
1414 return done(validate);
1415 }
1416 db.collection('register').update(find, {$set: {otp: '', verified: true}}, (err, results)=>{
1417 if(!err){
1418 validate.msg = 'otp verified!';
1419 }else{
1420 validate.error = 'Y';
1421 validate.msg = 'database error';
1422 }
1423 return done(validate);
1424 })
1425 }else{
1426 validate.error = 'Y';
1427 validate.msg = 'You have entered incorrect OTP';
1428 return done(validate);
1429 }
1430 });
1431 },
1432 deleteProfile: (data, done)=>{
1433 var validate = {error: 'N', msg: ''};
1434 var find = {_id: new MongoId(data.userid)};
1435 c("deleteProfile =>>>>>>>>>>> find ----- ", find);
1436 db.collection('register').find(find, {profile: 1,blocked: 1}).toArray((err, results)=>{
1437 c("database error on deleteProfile call =>>>> ",err);
1438 if(results.length){
1439 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
1440 validate.error = 'B';
1441 validate.msg = 'user blocked!';
1442 return done(validate);
1443 }
1444 var temp = [];
1445 for (var i = 0; i < results[0].profile.length; i++) {
1446 if(i != data.index){
1447 temp.push(results[0].profile[i]);
1448 }
1449 }
1450 if(temp.length == 0){
1451 temp = [];
1452 }
1453 db.collection('register').findAndModify(find, {}, {$set: {profile: temp}}, {new: true}, (err, results)=>{
1454 if(!err){
1455 validate.userid = results.value._id.toString();
1456 validate.myprofile = results.value;
1457 validate.settings = config.privacy;
1458 if(typeof validate.myprofile._id != 'undefined'){
1459 delete validate.myprofile._id;
1460 }
1461 if(typeof validate.myprofile.createdat != 'undefined'){
1462 delete validate.myprofile.createdat;
1463 }
1464 if(typeof validate.myprofile.otp != 'undefined'){
1465 delete validate.myprofile.otp;
1466 }
1467 }else{
1468 validate.error = 'Y';
1469 validate.msg = 'database error!';
1470 }
1471 return done(validate);
1472 })
1473 }else{
1474 validate.error = 'Y';
1475 validate.msg = e.getProfileFailure;
1476 return done(validate);
1477 }
1478
1479 })
1480 },
1481 logoutAccount: (data, done)=>{
1482 var validate = {error: 'N', msg: ''};
1483 var find = {_id: new MongoId(data.userid)};
1484 c("logoutAccount =>>>>>>>>>>> find ----- ", find);
1485 db.collection('register').find({_id: new MongoId(data.userid)}).toArray((err, results)=>{
1486 if(results.length){
1487 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
1488 validate.error = 'B';
1489 validate.msg = 'user blocked!';
1490 return done(validate);
1491 }
1492 try{
1493 if(data.det == 'android'){
1494 if(typeof results[0].androidFirebaseTokenId == 'string'){
1495 results[0].androidFirebaseTokenId = [results[0].androidFirebaseTokenId];
1496 }
1497 results[0].androidFirebaseTokenId = _.without(results[0].androidFirebaseTokenId, data.token);
1498 }
1499 if(data.det == 'ios'){
1500 if(typeof results[0].iosFirebaseTokenId == 'string'){
1501 results[0].iosFirebaseTokenId = [results[0].iosFirebaseTokenId];
1502 }
1503 results[0].iosFirebaseTokenId = _.without(results[0].iosFirebaseTokenId, data.token);
1504 }
1505 }catch(e){
1506 console.log("not present token:::::::: ", data);
1507 }
1508
1509 var update = {'$set': {logoutat: new Date(), ls: 0}};
1510 if(data.det == 'android'){
1511 update['$set']['androidFirebaseTokenId'] = results[0].androidFirebaseTokenId;
1512 }
1513 if(data.det == 'ios'){
1514 update['$set']['iosFirebaseTokenId'] = results[0].iosFirebaseTokenId;
1515 }
1516 c("update ::::::::::: logout api ::::::::::::: ", update);
1517 db.collection('register').update({_id: new MongoId(data.userid)}, update, (err, results)=>{
1518 validate.msg = 'logout successfully';
1519 return done(validate);
1520 })
1521 }else{
1522 validate.error = 'Y';
1523 validate.msg = 'user not found!';
1524 return done(validate);
1525 }
1526 })
1527 },
1528 deleteAccount: (data, done)=>{
1529 var validate = {error: 'N', msg: ''};
1530 var find = {_id: new MongoId(data.userid)};
1531 c("deleteAccount =>>>>>>>>>>> find ----- ", find);
1532 db.collection('register').find(find).toArray((err, results)=>{
1533 c("database error on deleteAccount call =>>>> ",err);
1534 if(results.length){
1535 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
1536 validate.error = 'B';
1537 validate.msg = 'user blocked!';
1538 return done(validate);
1539 }
1540 results[0].da = new Date();
1541 results[0].dr = typeof data.reason != 'undefined' ? data.reason : '';
1542 results[0].dc = typeof data.comment != 'undefined' ? data.comment : '';
1543
1544 // db.collection('deletedAccounts').insertOne(results[0], (err, results)=>{
1545 db.collection('buddies').remove({userid: new MongoId(data.userid)}, (err, results)=>{
1546 db.collection('buddies').update({}, {$pull: {buddies: new MongoId(data.userid)}}, {'multi': true}, (err, results)=>{
1547 db.collection('chatQuestions').remove({grp: new MongoId(data.userid)}, (err, results)=>{
1548 db.collection('superLikeProfiles').remove({userid: new MongoId(data.userid)}, (err, results)=>{
1549 db.collection('chatDetails').remove({userid: new MongoId(data.userid)}, (err, results)=>{
1550 db.collection('discoveredProfiles').remove({userid: new MongoId(data.userid)}, (err, results)=>{
1551 db.collection('dislikes').remove({user_id: new MongoId(data.userid)}, (err, results)=>{
1552 db.collection('likes').remove({user_id: new MongoId(data.userid)}, (err, results)=>{
1553 db.collection('notification').remove({userid: new MongoId(data.userid), oppid: new MongoId(data.userid)}, (err, results)=>{
1554 db.collection('register').remove(find, (err, results)=>{
1555 if(!err){
1556 validate.msg = 'account deleted!';
1557 }else{
1558 validate.error = 'Y';
1559 validate.msg = 'database error';
1560 }
1561 return done(validate);
1562 })
1563 })
1564 })
1565 })
1566 })
1567 })
1568 })
1569 })
1570 })
1571 })
1572 // })
1573 }else{
1574 validate.error = 'Y';
1575 validate.msg = 'user not found!';
1576 return done(validate);
1577 }
1578
1579 })
1580 },
1581 changePassword: (data, done)=>{
1582 var validate = {error: 'N', msg: ''};
1583 var find = {_id: new MongoId(data.userid)};
1584 c("changePassword =>>>>>>>>>>> find ----- ", find);
1585 db.collection('register').find(find).toArray((err, results)=>{
1586 c("database error on changePassword call =>>>> ",err);
1587 if(results.length){
1588 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
1589 validate.error = 'B';
1590 validate.msg = 'user blocked!';
1591 return done(validate);
1592 }
1593 if(results[0].password != data.oldpass){
1594 validate.error = 'Y';
1595 validate.msg = 'wrong old password!';
1596 return done(validate);
1597 }
1598 db.collection('register').update(find, {$set: {password: data.newpass}},(err, results)=>{
1599 if(!err){
1600 validate.msg = 'password successfully updated!';
1601 }else{
1602 validate.error = 'Y';
1603 validate.msg = 'database error';
1604 }
1605 return done(validate);
1606 })
1607 }else{
1608 validate.error = 'Y';
1609 validate.msg = 'user not found!';
1610 return done(validate);
1611 }
1612
1613 })
1614 },
1615 discoverMyDistance: (data, done)=>{
1616 var validate = {error: 'N', msg: ''};
1617 if(data.page == 0){
1618 validate.error = 'Y';
1619 validate.msg = 'no data found on page 0';
1620 return done(validate);
1621 }
1622 var find = {userid: new MongoId(data.userid)};
1623 db.collection('register').find({_id: new MongoId(data.userid)}).toArray((err, results)=>{
1624 if(results.length){
1625 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
1626 validate.error = 'B';
1627 validate.msg = 'user blocked!';
1628 return done(validate);
1629 }
1630 db.collection('superLikeProfiles').find({"discovered.userid": new MongoId(data.userid)}, {"discovered.$": 1, userid: 1}).toArray((err, superDiscoveredResults)=>{
1631 // c("superDiscoveredResults ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: ", superDiscoveredResults);
1632 db.collection('discoveredProfiles').find(find).toArray((err, discoveredResults)=>{
1633 if(discoveredResults.length && typeof discoveredResults[0].discovered != 'undefined' && discoveredResults[0].discovered.length){
1634 var discovered = discoveredResults[0].discovered;
1635 }
1636 db.collection('register').find({_id: new MongoId(data.userid)}).toArray((err, results)=>{
1637 // c("results err :::::::::::: ", err);
1638 // c("results :::::::::::: ", results);
1639 if(results.length && typeof results[0].location != 'undefined' && results[0].location.length == 2
1640 && typeof results[0].distance != 'undefined' && results[0].distance != ''
1641 && typeof results[0].min_range != 'undefined' && results[0].min_range != ''
1642 && typeof results[0].max_range != 'undefined' && results[0].max_range != ''
1643 && typeof results[0].show_male != 'undefined' && typeof results[0].show_female != 'undefined'){
1644 var skip = 0;
1645 data.page = data.page == 0 ? 1 : data.page;
1646 skip = Math.abs((parseInt(data.page) * parseInt(config.discoverlimits)) - parseInt(config.discoverlimits));
1647
1648 var find = [
1649 {
1650 $geoNear: {
1651 query: {$and:[{years: {$gte: results[0].min_range}}, {years: {$lte: results[0].max_range}}], verified: true},
1652 near: { type: "Point", coordinates: results[0].location },
1653 distanceField: "dist.calculated",
1654 maxDistance: parseInt(results[0].distance) * 1609.34, //in meter
1655 distanceField: "dist.location",
1656 spherical: true
1657 }
1658 }
1659 ];
1660
1661 if(results[0].show_male == 0 || results[0].show_female == 0){
1662 if(results[0].show_male == 1){
1663 find[0]['$geoNear']['query']['gender'] = 'male';
1664 }else{
1665 find[0]['$geoNear']['query']['gender'] = 'female';
1666 }
1667 }
1668 if(typeof discovered != 'undefined'){
1669 discovered.push(new MongoId(data.userid));
1670 find[0]['$geoNear']['query']['_id'] = {'$nin': discovered};
1671 }else{
1672 find[0]['$geoNear']['query']['_id'] = {'$nin': [new MongoId(data.userid)]};
1673 }
1674
1675 console.log("data.temp :::::::::", data.temp);
1676 if(typeof data.temp != 'undefined' && typeof data.temp != 'string' && data.temp.length){
1677 for (var i = 0; i < data.temp.length; i++) {
1678 if(data.temp[i].length == 24){
1679 find[0]['$geoNear']['query']['_id']['$nin'].push(new MongoId(data.temp[i]));
1680 }
1681 }
1682 }
1683
1684
1685 console.log("find :::::: ", util.inspect(find, {showHidden: false, depth: null}));
1686 db.collection('register').aggregate(find).toArray((err, DiscoverTotalCountResults)=>{
1687 find.push({ "$skip": skip },
1688 { "$limit": parseInt(config.discoverlimits)});
1689 db.collection('register').aggregate(find).toArray((err, DiscoverResults)=>{
1690 c("error ::::::::::::::::: ", err);
1691 if(DiscoverResults.length){
1692 var discoverProfiles = [];
1693 for (var i = 0; i < DiscoverResults.length; i++) {
1694 var temp = {
1695 userid: DiscoverResults[i]._id.toString(),
1696 name: typeof DiscoverResults[i].name != 'undefined' ? DiscoverResults[i].name : '',
1697 gender: typeof DiscoverResults[i].gender != 'undefined' ? DiscoverResults[i].gender : '',
1698 years: typeof DiscoverResults[i].years != 'undefined' ? DiscoverResults[i].years : '',
1699 hobbies: typeof DiscoverResults[i].hobbies != 'undefined' ? DiscoverResults[i].hobbies : '',
1700 about: typeof DiscoverResults[i].about != 'undefined' ? DiscoverResults[i].about : '',
1701 job: typeof DiscoverResults[i].job != 'undefined' ? DiscoverResults[i].job : '',
1702 location: typeof DiscoverResults[i].location != 'undefined' ? DiscoverResults[i].location : '',
1703 distance: typeof DiscoverResults[i].dist != 'undefined' ? typeof DiscoverResults[i].dist.location != 'undefined' ? DiscoverResults[i].dist.location : 0 : 0,
1704 insta: typeof DiscoverResults[i].insta != 'undefined' ? DiscoverResults[i].insta : '',
1705 profile: typeof DiscoverResults[i].profile != 'undefined' ? DiscoverResults[i].profile : [],
1706 superLike: 0,
1707 message: ''
1708 };
1709
1710 if(temp.insta == 1 || temp.insta == '1'){
1711 temp.insta_links = typeof DiscoverResults[i].insta_links != 'undefined' ? DiscoverResults[i].insta_links : [];
1712 }
1713 if(temp.distance){
1714 temp.distance = temp.distance/1000;
1715 temp.distance = Number(Number(temp.distance).toFixed(2));
1716 }
1717 discoverProfiles.push(temp);
1718 }
1719
1720 for (var i = 0; i < discoverProfiles.length; i++) {
1721 if(superDiscoveredResults.length){
1722 for (var j = 0; j < superDiscoveredResults.length; j++) {
1723 if(discoverProfiles[i].userid == superDiscoveredResults[j].userid.toString()){
1724 discoverProfiles[i].superLike = 1;
1725 if(typeof superDiscoveredResults[j] != 'undefined' && typeof superDiscoveredResults[j].discovered != 'undefined' && typeof superDiscoveredResults[j].discovered[0] != 'undefined' && typeof superDiscoveredResults[j].discovered[0].message != 'undefined'){
1726 discoverProfiles[i].message = superDiscoveredResults[j].discovered[0].message;
1727 }else{
1728 discoverProfiles[i].message = '';
1729 }
1730 }
1731 }
1732 }
1733 }
1734
1735 validate.data = discoverProfiles;
1736 validate.totalCount = DiscoverTotalCountResults.length;
1737 return done(validate);
1738
1739 }else{
1740 validate.msg = 'record not found!';
1741 validate.data = [];
1742 return done(validate);
1743 }
1744
1745 })
1746 })
1747 }else{
1748 validate.error = 'N';
1749 validate.msg = e.userNotFoundOnDiscover;
1750 validate.data = [];
1751 validate.totalCount = 0;
1752 return done(validate);
1753 }
1754 })
1755 })
1756 })
1757 }else{
1758 validate.error = 'Y';
1759 validate.msg = 'user not found!';
1760 return done(validate);
1761 }
1762 })
1763 },
1764 /* not in use*/
1765 setDiscoveredProfiles: (discover, data, done)=>{
1766 var find = {users: [new MongoId(data.userid), new MongoId(data.opp)]};
1767 var ids = [];
1768 for (var i = 0; i < discover.length; i++) {
1769 ids.push(new MongoId(discover[i].userid));
1770 }
1771 db.collection('discoveredProfiles').count(find, (err, results)=>{
1772 if(results){
1773 db.collection('discoveredProfiles').update(find, {$addToSet: {discovered: {$each: ids}}}, (err, results)=>{
1774 if(!err){
1775 done({error: false});
1776 }else{
1777 done({error: true});
1778 }
1779 })
1780 }else{
1781 var data = {
1782 users: [new MongoId(data.userid), new MongoId(data.opp)],
1783 discovered:ids
1784 };
1785 db.collection('discoveredProfiles').insertOne(data, (err, results)=>{
1786 if(!err){
1787 done({error: false});
1788 }else{
1789 done({error: true});
1790 }
1791 })
1792 }
1793 })
1794 },
1795 /* not in use*/
1796
1797 actionDiscovered: (data, done)=>{
1798 console.log("data :::::: ", data);
1799 var validate = {error: 'N', msg: ''};
1800 var find = {_id: new MongoId(data.userid)};
1801 db.collection('register').find(find).toArray((err, results)=>{
1802 c("database error =>>>> ",err);
1803 if(results.length){
1804 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
1805 validate.error = 'B';
1806 validate.msg = 'user blocked!';
1807 return done(validate);
1808 }
1809 if(data.type == 'like'){
1810 fnc.checkMatchCondition(data, (cblike)=>{
1811 fnc.discoveredOpp(data, (cbdiscovered)=>{
1812 db.collection('likes').find({user_id: new MongoId(data.userid)}).toArray((err, likeResults)=>{
1813 if(likeResults.length){
1814 db.collection('likes').update({user_id: new MongoId(data.userid)}, {$addToSet: {like: new MongoId(data.opp)}, $inc: {count: 1}}, (err, results)=>{
1815 if(cbdiscovered.error == 'N'){
1816 console.log("cblike ::::: ", cblike);
1817 return done(cblike);
1818 }else{
1819 // console.log("cbdiscovered ::::: ", cbdiscovered);
1820 return done(cbdiscovered);
1821 }
1822 })
1823 }else{
1824 var likeData = {
1825 user_id: new MongoId(data.userid),
1826 like:[new MongoId(data.opp)],
1827 count: 1
1828 };
1829 db.collection('likes').insertOne(likeData, (err, results)=>{
1830 if(cbdiscovered.error == 'N'){
1831 console.log("cblike ::::: ", cblike);
1832 return done(cblike);
1833 }else{
1834 // console.log("cbdiscovered ::::: ", cbdiscovered);
1835 return done(cbdiscovered);
1836 }
1837 })
1838 }
1839 })
1840 })
1841 })
1842 }else if(data.type == 'dislike'){
1843 fnc.discoveredOpp(data, (cbdiscovered)=>{
1844
1845 db.collection('dislikes').find({user_id: new MongoId(data.userid)}).toArray((err, dislikeResults)=>{
1846 if(dislikeResults.length){
1847 db.collection('dislikes').update({user_id: new MongoId(data.userid)}, {$addToSet: {dislike: new MongoId(data.opp)}, $inc: {count: 1}}, (err, results)=>{
1848 return done(cbdiscovered);
1849 })
1850 }else{
1851 var dislikeData = {
1852 user_id: new MongoId(data.userid),
1853 dislike:[new MongoId(data.opp)],
1854 count: 1
1855 };
1856 db.collection('dislikes').insertOne(dislikeData, (err, results)=>{
1857 return done(cbdiscovered);
1858 })
1859 }
1860 })
1861 })
1862 }else if(data.type == 'undo'){
1863 var updatabledis = {'$pull': {'dislike': new MongoId(data.opp)}};
1864 db.collection('dislikes').update({user_id: new MongoId(data.userid)}, updatabledis, (err, results)=>{
1865 if(results.result.nModified){
1866 db.collection('dislikes').update({user_id: new MongoId(data.userid)}, {$inc: {count: -1}}, (err, results)=>{
1867 fnc.undoDiscoveredOpp(data, (cbundodiscovered)=>{
1868 return done(cbundodiscovered);
1869 })
1870 })
1871 }else{
1872 var updatabledis = {'$pull': {'like': new MongoId(data.opp)}};
1873 db.collection('likes').update({user_id: new MongoId(data.userid)}, updatabledis, (err, results)=>{
1874 if(results.result.nModified){
1875 db.collection('likes').update({user_id: new MongoId(data.userid)}, {$inc: {count: -1}}, (err, results)=>{
1876 fnc.undoDiscoveredOpp(data, (cbundodiscovered)=>{
1877 return done(cbundodiscovered);
1878 })
1879 })
1880 }else{
1881 fnc.undoDiscoveredOpp(data, (cbundodiscovered)=>{
1882 return done(cbundodiscovered);
1883 })
1884 }
1885 })
1886 }
1887
1888 })
1889
1890 }else if(data.type == 'superlike' && typeof data.message != 'undefined' && data.message != ''){
1891 db.collection('register').find({_id: new MongoId(data.opp)}).toArray((err, oppresults)=>{
1892 if(oppresults.length){
1893 var oppNotification = {
1894 firebaseTokenId: typeof oppresults[0].det != 'undefined' ? oppresults[0].det == 'android' ? typeof oppresults[0].androidFirebaseTokenId != 'undefined' ? oppresults[0].androidFirebaseTokenId : '' : typeof oppresults[0].iosFirebaseTokenId != 'undefined' ? oppresults[0].iosFirebaseTokenId : '' : '',
1895 body: '',
1896 username: typeof results[0].name != 'undefined' ? results[0].name : '',
1897 type: 'match',
1898 profile: typeof results[0].profile != 'undefined' ? typeof results[0].profile[0] != 'undefined' ? results[0].profile[0] : '' : ''
1899 };
1900
1901 oppNotification.title = 'New Crush!';
1902
1903 oppNotification.oppid = new MongoId(data.userid);
1904 oppNotification.det = typeof oppresults[0].det != 'undefined' ? oppresults[0].det : '';
1905
1906 // console.log("oppNotification ::::::::::::::::::::::::::: ", oppNotification);
1907 notification.androidNotification(oppNotification, (noticall)=>{
1908 oppNotification.userid = new MongoId(data.opp);
1909 oppNotification.createdat = new Date();
1910 oppNotification.chatQuestionsId = "";
1911
1912 db.collection('notification').insert(oppNotification, (err, results)=>{
1913 c('notification Inserting Error =>>>>>>>>>>>>>>>>>>>>> ', err);
1914 fnc.checkMatchCondition(data, (cblike)=>{
1915 fnc.discoveredOpp(data, (cbdiscovered)=>{
1916 fnc.superLikediscoveredOpp(data, (cbSuperDiscovered)=>{
1917 if(cbSuperDiscovered.error == 'N'){
1918 return done(cblike);
1919 }else{
1920 return done(cbdiscovered);
1921 }
1922 })
1923 })
1924 })
1925 })
1926 })
1927 }else{
1928 console.log("user not found !!!!");
1929 }
1930 })
1931 }else{
1932 validate.error = 'Y';
1933 validate.msg = 'type not valid';
1934 return done(validate);
1935 }
1936 }else{
1937 validate.error = 'Y';
1938 validate.msg = 'user not found!';
1939 return done(validate);
1940 }
1941 })
1942 },
1943 checkMatchCondition: (data, done)=>{
1944 var validate = {error: 'N', msg: ''};
1945 var find = {$or: [{_id: new MongoId(data.userid)}, {_id: new MongoId(data.opp)}]};
1946 db.collection('register').find(find).toArray((err, results)=>{
1947 console.log("database error =>>>> ",err);
1948 if(results.length){
1949 find = {$and: [{grp: new MongoId(data.userid)}, {grp: new MongoId(data.opp)}]};
1950 // console.log("checkMatchCondition :::::::::::::: ", find);
1951 db.collection('questions').find().toArray((err, questionResults)=>{
1952 db.collection('chatQuestions').find(find).toArray((err, chatResults)=>{
1953 if(chatResults.length){
1954 // console.log("chatResults[0].verifierKey :::::::::::::::::::::::::::::::::::::::::::: ",chatResults[0].verifierKey);
1955 c("data.userid :::::::::::::::::::::::::::::::::::::::::::: ",data.userid);
1956 if(typeof chatResults[0].verifierKey != 'undefined' && chatResults[0].verifierKey.toString() != data.userid.toString()){
1957 db.collection('chatQuestions').update(find, {$set: {verified: true}}, (err, updateResults)=>{
1958 if(!err){
1959
1960 if(data.userid == results[0]._id.toString()){
1961 var useridNotification = {
1962 firebaseTokenId: typeof results[0].det != 'undefined' ? results[0].det == 'android' ? typeof results[0].androidFirebaseTokenId != 'undefined' ? results[0].androidFirebaseTokenId : '' : typeof results[0].iosFirebaseTokenId != 'undefined' ? results[0].iosFirebaseTokenId : '' : '',
1963 body: '',
1964 username: typeof results[1].name != 'undefined' ? results[1].name : '',
1965 type: 'match',
1966 profile: typeof results[1].profile != 'undefined' ? typeof results[1].profile[0] != 'undefined' ? results[1].profile[0] : '' : ''
1967 };
1968 var socketNormal = typeof results[0].sck != 'undefined' && results[0].sck != '' ? results[0].sck : null;
1969 useridNotification.title = 'New Match!';
1970 useridNotification.oppid = new MongoId(data.opp);
1971 useridNotification.det = typeof results[0].det != 'undefined' ? results[0].det : '';
1972
1973 }else if(data.userid == results[1]._id.toString()){
1974 var useridNotification = {
1975 firebaseTokenId: typeof results[1].det != 'undefined' ? results[1].det == 'android' ? typeof results[1].androidFirebaseTokenId != 'undefined' ? results[1].androidFirebaseTokenId : '' : typeof results[1].iosFirebaseTokenId != 'undefined' ? results[1].iosFirebaseTokenId : '' : '',
1976 body: '',
1977 username: typeof results[0].name != 'undefined' ? results[0].name : '',
1978 type: 'match',
1979 profile: typeof results[0].profile != 'undefined' ? typeof results[0].profile[0] != 'undefined' ? results[0].profile[0] : '' : ''
1980 };
1981 var socketNormal = typeof results[1].sck != 'undefined' && results[1].sck != '' ? results[1].sck : null;
1982 useridNotification.title = 'New Match!';
1983 useridNotification.oppid = new MongoId(data.opp);
1984 useridNotification.det = typeof results[1].det != 'undefined' ? results[1].det : '';
1985 }
1986
1987 if(data.opp == results[0]._id.toString()){
1988 var oppNotification = {
1989 firebaseTokenId: typeof results[0].det != 'undefined' ? results[0].det == 'android' ? typeof results[0].androidFirebaseTokenId != 'undefined' ? results[0].androidFirebaseTokenId : '' : typeof results[0].iosFirebaseTokenId != 'undefined' ? results[0].iosFirebaseTokenId : '' : '',
1990 body: '',
1991 username: typeof results[1].name != 'undefined' ? results[1].name : '',
1992 type: 'match',
1993 profile: typeof results[1].profile != 'undefined' ? typeof results[1].profile[0] != 'undefined' ? results[1].profile[0] : '' : ''
1994 };
1995 var socketOpp = typeof results[0].sck != 'undefined' && results[0].sck != '' ? results[0].sck : null;
1996 oppNotification.title = 'New Match!';
1997 oppNotification.oppid = new MongoId(data.userid);
1998 oppNotification.det = typeof results[0].det != 'undefined' ? results[0].det : '';
1999
2000 }else if(data.opp == results[1]._id.toString()){
2001 var oppNotification = {
2002 firebaseTokenId: typeof results[1].det != 'undefined' ? results[1].det == 'android' ? typeof results[1].androidFirebaseTokenId != 'undefined' ? results[1].androidFirebaseTokenId : '' : typeof results[1].iosFirebaseTokenId != 'undefined' ? results[1].iosFirebaseTokenId : '' : '',
2003 body: '',
2004 username: typeof results[0].name != 'undefined' ? results[0].name : '',
2005 type: 'match',
2006 profile: typeof results[0].profile != 'undefined' ? typeof results[0].profile[0] != 'undefined' ? results[0].profile[0] : '' : ''
2007 };
2008 var socketOpp = typeof results[1].sck != 'undefined' && results[1].sck != '' ? results[1].sck : null;
2009 oppNotification.title = 'New Match!';
2010 oppNotification.oppid = new MongoId(data.userid);
2011 oppNotification.det = typeof results[1].det != 'undefined' ? results[1].det : '';
2012 }
2013 // console.log("oppNotification ::::::::::::::::::::::::::: ", oppNotification);
2014 notification.androidNotification(oppNotification, (noticall)=>{
2015 // if(noticall.error == 'N'){
2016 var date = new Date();
2017
2018 useridNotification.userid = new MongoId(data.userid);
2019 useridNotification.createdat = date;
2020 useridNotification.chatQuestionsId = chatResults[0]._id;
2021 useridNotification.matched = true;
2022 useridNotification.read = 0;
2023
2024 oppNotification.userid = new MongoId(data.opp);
2025 oppNotification.createdat = date;
2026 oppNotification.chatQuestionsId = chatResults[0]._id;
2027 oppNotification.matched = true;
2028 oppNotification.read = 0;
2029
2030 db.collection('notification').insertMany([useridNotification, oppNotification], (err, notiResults)=>{
2031 c('notification Inserting Error =>>>>>>>>>>>>>>>>>>>>> ', err);
2032
2033 validate.data = {match: true};
2034 // console.log("socketOpp :::: ", socketOpp);
2035 // console.log("socketNormal :::: ", socketNormal);
2036 db.collection('register').find({_id: new MongoId(data.opp)}).toArray((err, oppResults)=>{
2037 validate.data.profileDetails = {username: oppResults[0].name, profile: oppResults[0].profile, id: oppResults[0]._id};
2038 db.collection('chatDetails').aggregate([{$match: {opp: new MongoId(data.opp), read: 0}}, {$group: {_id: '$roomId', read: {$last: '$read'}}},{$sort: {createdat: -1}}]).toArray((err ,chatResults)=>{
2039 db.collection('notification').count({userid: new MongoId(data.opp), matched: true, read: 0}, (err, notiCount)=>{
2040
2041 db.collection('chatDetails').aggregate([{$match: {opp: new MongoId(data.userid), read: 0}}, {$group: {_id: '$roomId', read: {$last: '$read'}}},{$sort: {createdat: -1}}]).toArray((err ,chatuseridResults)=>{
2042 db.collection('notification').count({userid: new MongoId(data.userid), matched: true, read: 0}, (err, notiuseridCount)=>{
2043 if(typeof socketOpp != 'undefined' && socketOpp != null){
2044 var client = io.sockets.connected[socketOpp];
2045 if(typeof client != 'undefined' && client != null){
2046 var totalCount = chatResults.length+notiCount;
2047 c("totalCount :::::::::", totalCount);
2048 client.emit('res', {en: 'unreadNoUniqMsg', data: {error: 'N', 'totalCount': totalCount}});
2049 }
2050 }else{
2051 c("socket not available");
2052 }
2053 if(typeof socketNormal != 'undefined' && socketNormal != null){
2054 var client = io.sockets.connected[socketNormal];
2055 if(typeof client != 'undefined' && client != null){
2056 var totalCount = chatuseridResults.length+notiuseridCount;
2057 c("totalCount :::::::::", totalCount);
2058 client.emit('res', {en: 'unreadNoUniqMsg', data: {error: 'N', 'totalCount': totalCount}});
2059 }
2060 }else{
2061 c("socket not available");
2062 }
2063 return done(validate);
2064 })
2065 })
2066 })
2067 })
2068
2069 })
2070 })
2071 // }else{
2072 // validate.data = {match: true};
2073 // return done(validate);
2074 // }
2075 })
2076 }else{
2077 validate.error = 'Y';
2078 validate.msg = 'database error!';
2079 return done(validate);
2080 }
2081 })
2082 }else{
2083 validate.data = {match: false};
2084 return done(validate);
2085 }
2086 }else{
2087 var insertableData = {
2088 grp: [new MongoId(data.userid), new MongoId(data.opp)],
2089 verified: false,
2090 verifierKey: new MongoId(data.userid),
2091 question: questionResults.length ? questionResults[common.GetRandomInt(0, questionResults.length-1)].question : config.questions[common.GetRandomInt(0, config.questions.length-1)],
2092 ansInfo: [{userid: new MongoId(data.userid), ans: ''}, {userid: new MongoId(data.opp), ans: ''}]
2093 };
2094 fnc.InsertChatModel(insertableData, (cbchat)=>{
2095 if(cbchat.error == 'N'){
2096 validate.data = {match: false};
2097 }else{
2098 validate = cbchat;
2099 }
2100 return done(validate);
2101 })
2102 }
2103 })
2104 })
2105 }else{
2106 validate.error = 'Y';
2107 validate.msg = 'user not found!';
2108 return done(validate);
2109 }
2110 })
2111 },
2112 InsertChatModel: (data, done)=>{
2113 var validate = {error: 'N', msg: ''};
2114 db.collection('chatQuestions').insertOne(data, (err, results)=>{
2115 if(!err){
2116 validate.msg = 'Inserted new one!';
2117 return done(validate);
2118 }else{
2119 validate.error = 'Y';
2120 validate.msg = 'database error!';
2121 return done(validate);
2122 }
2123 })
2124 },
2125 superLikediscoveredOpp: (data, done)=>{
2126 var validate = {error: 'N', msg: ''};
2127 find = {userid: new MongoId(data.userid)};
2128 db.collection('superLikeProfiles').count(find, (err, results)=>{
2129 if(results){
2130 db.collection('superLikeProfiles').update(find, {$addToSet: {discovered: {userid: new MongoId(data.opp), message: data.message}}}, (err, results)=>{
2131 if(!err){
2132 return done(validate);
2133 }else{
2134 validate.error = 'Y';
2135 validate.msg = 'database error!';
2136 return done(validate);
2137 }
2138 })
2139 }else{
2140 var superLikeProfiles = {
2141 userid: new MongoId(data.userid),
2142 discovered: [{userid: new MongoId(data.opp), message: data.message}]
2143 };
2144 db.collection('superLikeProfiles').insertOne(superLikeProfiles, (err, results)=>{
2145 if(!err){
2146 return done(validate);
2147 }else{
2148 validate.error = 'Y';
2149 validate.msg = 'database error!';
2150 return done(validate);
2151 }
2152 })
2153 }
2154 })
2155 },
2156 discoveredOpp: (data ,done)=>{
2157 var validate = {error: 'N', msg: ''};
2158 find = {userid: new MongoId(data.userid)};
2159 db.collection('discoveredProfiles').count(find, (err, results)=>{
2160 if(results){
2161 db.collection('discoveredProfiles').update(find, {$addToSet: {discovered: new MongoId(data.opp)}}, (err, results)=>{
2162 if(!err){
2163 validate.msg = 'disliked!'
2164 return done(validate);
2165 }else{
2166 validate.error = 'Y';
2167 validate.msg = 'database error!';
2168 return done(validate);
2169 }
2170 })
2171 }else{
2172 var discoveredData = {
2173 userid: new MongoId(data.userid),
2174 discovered:[new MongoId(data.opp)]
2175 };
2176 db.collection('discoveredProfiles').insertOne(discoveredData, (err, results)=>{
2177 if(!err){
2178 return done(validate);
2179 }else{
2180 validate.error = 'Y';
2181 validate.msg = 'database error!';
2182 return done(validate);
2183 }
2184 })
2185 }
2186 })
2187 },
2188 undoDiscoveredOpp: (data, done)=>{
2189 var validate = {error: 'N', msg: ''};
2190 find = {userid: new MongoId(data.userid)};
2191 db.collection('discoveredProfiles').count(find, (err, results)=>{
2192 var updatable = {'$pull': {'discovered': new MongoId(data.opp)}};
2193 db.collection('discoveredProfiles').update(find, updatable, (err, results)=>{
2194 if(!err){
2195 var updatable = {'$pull': {'discovered': {userid: new MongoId(data.opp)}}};
2196 db.collection('superLikeProfiles').update(find, updatable, (err, results)=>{
2197 var find = {$and: [{grp: new MongoId(data.userid)}, {grp: new MongoId(data.opp)}]};
2198 db.collection('chatQuestions').update(find, {$set: {verified: false}}, (err, chatResults)=>{
2199 db.collection('chatDetails').remove({$and: [{opp: new MongoId(data.opp)}, {userid: new MongoId(data.userid)}]}, (err, chatResults)=>{
2200 db.collection('notification').remove({$and: [{oppid: new MongoId(data.opp)}, {userid: new MongoId(data.userid)}]}, (err, chatResults)=>{
2201 db.collection('notification').remove({$and: [{userid: new MongoId(data.opp)}, {oppid: new MongoId(data.userid)}]}, (err, chatResults)=>{
2202 if(!err){
2203 validate.msg = 'undo!';
2204 }else{
2205 validate.error = 'Y';
2206 validate.msg = 'database error!';
2207 }
2208 return done(validate);
2209 })
2210 })
2211 })
2212 })
2213 })
2214 }else{
2215 validate.error = 'Y';
2216 validate.msg = 'database error!';
2217 return done(validate);
2218 }
2219 })
2220 })
2221 },
2222 unmatch: (data, done)=>{
2223 var validate = {error: 'N', msg: ''};
2224 var find = {$and: [{grp: new MongoId(data.userid)}, {grp: new MongoId(data.opp)}]};
2225 db.collection('register').find({_id: new MongoId(data.userid)}).toArray((err, results)=>{
2226 if(results.length){
2227 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
2228 validate.error = 'B';
2229 validate.msg = 'user blocked!';
2230 return done(validate);
2231 }
2232 db.collection('chatQuestions').remove(find, (err, chatResults)=>{
2233 db.collection('chatDetails').remove({$and: [{opp: new MongoId(data.opp)}, {userid: new MongoId(data.userid)}]}, (err, chatResults)=>{
2234 db.collection('notification').remove({$and: [{oppid: new MongoId(data.opp)}, {userid: new MongoId(data.userid)}]}, (err, chatResults)=>{
2235 db.collection('notification').remove({$and: [{userid: new MongoId(data.opp)}, {oppid: new MongoId(data.userid)}]}, (err, chatResults)=>{
2236 if(!err){
2237 validate.msg = 'user unmatched';
2238 }else{
2239 validate.error = 'Y';
2240 validate.msg = 'database error!';
2241 }
2242 return done(validate);
2243 })
2244 })
2245 })
2246 })
2247 }else{
2248 validate.error = 'Y';
2249 validate.msg = 'user not found!';
2250 return done(validate);
2251 }
2252 })
2253
2254 },
2255 sendReport: (data, done)=>{
2256 c("sendReport ::::::::: data = >>>>>>>>> ", data);
2257 var validate = {error: 'N', msg: ''};
2258 find = {$or: [{_id: new MongoId(data.userid)}, {_id: new MongoId(data.opp)}]};
2259 c("find ::::::::::::: ", find);
2260 db.collection('register').find({_id: new MongoId(data.userid)}).toArray((err, results)=>{
2261 if(results.length){
2262 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
2263 validate.error = 'B';
2264 validate.msg = 'user blocked!';
2265 return done(validate);
2266 }
2267
2268 db.collection('register').find(find).toArray((err, results)=>{
2269 db.collection('register').count(find, (err, cresults)=>{
2270 c("sendReport ::::::::: ", cresults);
2271 if(cresults == 2){
2272 var report = {
2273 username: data.userid == results[0]._id.toString() ? results[0].name : results[1].name,
2274 oppname: data.opp == results[0]._id.toString() ? results[0].name : results[1].name,
2275 userid: new MongoId(data.userid),
2276 opp: new MongoId(data.opp),
2277 subject: data.subject,
2278 description: typeof data.description != 'undefined' ? data.description : ''
2279 };
2280 db.collection('reports').insertOne(report, (err, results)=>{
2281 if(!err){
2282 validate.msg = 'report sent!'
2283 return done(validate);
2284 }else{
2285 validate.error = 'Y';
2286 validate.msg = 'database error!'
2287 return done(validate);
2288 }
2289 })
2290 }else{
2291 validate.error = 'Y';
2292 validate.msg = 'user not found!'
2293 return done(validate);
2294 }
2295 })
2296 })
2297
2298 }else{
2299 validate.error = 'Y';
2300 validate.msg = 'user not found!';
2301 return done(validate);
2302 }
2303 })
2304 },
2305 getNotification: (data, done)=>{
2306 var validate = {error: 'N', msg: ''};
2307
2308 var skip = 0;
2309 data.page = data.page == 0 ? 1 : data.page;
2310 skip = Math.abs((parseInt(data.page) * parseInt(config.notificationlimits)) - parseInt(config.notificationlimits));
2311
2312 db.collection('register').find({_id: new MongoId(data.userid)}).toArray((err, results)=>{
2313 if(results.length){
2314 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
2315 validate.error = 'B';
2316 validate.msg = 'user blocked!';
2317 return done(validate);
2318 }
2319
2320 var piple = [
2321 {$match: {userid: new MongoId(data.userid)}},
2322 {
2323 $lookup:{
2324 from: "register",
2325 localField: "oppid",
2326 foreignField: "_id",
2327 as: "user_role"
2328 }
2329 },
2330 {$unwind: "$user_role"},
2331 {$group: {_id: '$_id', profile: {$last: "$user_role.profile"}, type: {$last: '$type'}, title: {$last: '$title'}, oppid: {$last: '$oppid'}
2332 , det: {$last: '$det'}
2333 , createdat: {$last: '$createdat'}
2334 , notificationId: {$last: '$_id'}
2335 , matched: {$last: '$matched'}
2336 , username: {$last: '$username'}
2337 , read: {$last: '$read'}}}, {$sort: {createdat: -1}}];
2338
2339 db.collection('notification').aggregate(piple).toArray((err, resultsCounts)=>{
2340 piple.push({'$skip': skip}, {'$limit': config.notificationlimits});
2341 db.collection('notification').aggregate(piple).toArray((err, results)=>{
2342
2343 if(results.length){
2344 var results = _.clone(results);
2345 // return done(results);
2346 for (var i = 0; i < results.length; i++) {
2347 results[i].profile = typeof results[i].profile == 'object' ? results[i].profile[0] : results[i].profile;
2348 results[i].createdat = _date(results[i].createdat).format('DD MMMM, YYYY HH:mm:ss');
2349 delete results[i]._id;
2350 }
2351 console.log("results :::::: ", results);
2352 validate.data = results;
2353 validate.totalCount = resultsCounts.length;
2354 return done(validate);
2355 }else{
2356 validate.data = [];
2357 validate.totalCount = 0;
2358 validate.msg = 'no results found!';
2359 return done(validate);
2360 }
2361 })
2362 })
2363
2364 }else{
2365 validate.error = 'Y';
2366 validate.msg = 'user not found!';
2367 return done(validate);
2368 }
2369 })
2370 },
2371 sendFeedback: (data, done)=>{
2372 var validate = {error: 'N', msg: ''};
2373 db.collection('register').find({_id: new MongoId(data.userid)}).toArray((err, results)=>{
2374 if(results.length){
2375
2376 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
2377 validate.error = 'B';
2378 validate.msg = 'user blocked!';
2379 return done(validate);
2380 }
2381 var feedback = {
2382 userid: new MongoId(data.userid),
2383 username: typeof results[0].name != 'undefined' ? results[0].name : '-',
2384 comment: data.feedback,
2385 createdat: new Date()
2386 };
2387
2388 db.collection('feedbacks').insertOne(feedback, (err, results)=>{
2389 validate.msg = 'successfully submited!';
2390 return done(validate);
2391 })
2392
2393 }else{
2394 validate.error = 'Y';
2395 validate.msg = 'user not found!';
2396 return done(validate);
2397 }
2398 })
2399 },
2400 TokenReplaceRemove: (data, done)=>{
2401 var validate = {error: 'N', msg: ''};
2402 console.log("TokenReplaceRemove :::::::: >>>>>>>>>>>>>=>>>>>>>>>>>>>", data);
2403 var find = {_id: new MongoId(data.userid)};
2404 if(data.det == 'android'){
2405 find['androidFirebaseTokenId'] = data.oldToken;
2406 }
2407 if(data.det == 'ios'){
2408 find['iosFirebaseTokenId'] = data.oldToken;
2409 }
2410 db.collection('register').find(find).toArray((err, results)=>{
2411 if(results.length){
2412 if(typeof results[0].blocked != 'undefined' && results[0].blocked){
2413 validate.error = 'B';
2414 validate.msg = 'user blocked!';
2415 return done(validate);
2416 }
2417 try{
2418 if(data.det == 'android'){
2419 if(typeof results[0].androidFirebaseTokenId == 'string'){
2420 results[0].androidFirebaseTokenId = [results[0].androidFirebaseTokenId];
2421 }
2422 results[0].androidFirebaseTokenId = _.without(results[0].androidFirebaseTokenId, data.oldToken);
2423 results[0].androidFirebaseTokenId.push(data.newToken);
2424 }
2425 if(data.det == 'ios'){
2426 if(typeof results[0].iosFirebaseTokenId == 'string'){
2427 results[0].iosFirebaseTokenId = [results[0].iosFirebaseTokenId];
2428 }
2429 results[0].iosFirebaseTokenId = _.without(results[0].iosFirebaseTokenId, data.oldToken);
2430 results[0].iosFirebaseTokenId.push(data.newToken);
2431 }
2432 }catch(e){
2433 console.log("not present token:::::::: ", data);
2434 }
2435 var update = {};
2436 if(data.det == 'android'){
2437 update['$set'] = {androidFirebaseTokenId: results[0].androidFirebaseTokenId};
2438 }
2439 if(data.det == 'ios'){
2440 update['$set'] = {iosFirebaseTokenId: results[0].iosFirebaseTokenId};
2441 }
2442 console.log("TokenReplaceRemove ::::: =::::: ", update);
2443 db.collection('register').update({_id: new MongoId(data.userid)}, update, (err, results)=>{
2444 validate.error = 'N';
2445 validate.msg = 'updated successfully!';
2446 return done(validate);
2447 })
2448 }else{
2449 validate.error = 'N';
2450 validate.msg = 'user not found or old token not exists!';
2451 return done(validate);
2452 }
2453 })
2454 },
2455 PremiumAccount: (data, done)=>{
2456 var validate = {error: 'N', msg: ''};
2457
2458 db.collection('register').find({_id: new MongoId(data.userid)}).toArray((err, results)=>{
2459 if(results.length && typeof results[0].acountStatus != 'undefined'){
2460 console.log(results.length);
2461 if(typeof results[0].aadate != 'undefined' && typeof results[0].aedate != 'undefined' && results[0].aadate != '' && results[0].aedate != ''){
2462 if(new Date(results[0].aedate) > new Date()){
2463 validate.msg = 'Account already Premium!';
2464 validate.myprofile = results[0];
2465 validate.settings = config.privacy;
2466
2467 if(typeof validate.myprofile._id != 'undefined'){
2468 delete validate.myprofile._id;
2469 }
2470 if(typeof validate.myprofile.otp != 'undefined'){
2471 delete validate.myprofile.otp;
2472 }
2473 delete validate.myprofile._id;
2474 delete validate.myprofile.createdat;
2475
2476 if(typeof validate.myprofile._id != 'undefined'){
2477 delete validate.myprofile._id;
2478 }
2479 if(typeof validate.myprofile.createdat != 'undefined'){
2480 delete validate.myprofile.createdat;
2481 }
2482 if(typeof validate.myprofile.loggedat != 'undefined'){
2483 delete validate.myprofile.loggedat;
2484 }
2485 if(typeof validate.myprofile.resetotp != 'undefined'){
2486 delete validate.myprofile.resetotp;
2487 }
2488 return done(validate);
2489 }
2490 }
2491 fnc.generatePremium(data, results[0].det, (premiumDone)=>{
2492
2493 results[0].acountStatus = premiumDone.acountStatus;
2494 results[0].aadate = premiumDone.aadate;
2495 results[0].aedate = premiumDone.aedate;
2496 validate.userid = results[0]._id.toString();
2497 validate.myprofile = results[0];
2498 validate.settings = config.privacy;
2499
2500 if(typeof validate.myprofile._id != 'undefined'){
2501 delete validate.myprofile._id;
2502 }
2503 if(typeof validate.myprofile.otp != 'undefined'){
2504 delete validate.myprofile.otp;
2505 }
2506 delete validate.myprofile._id;
2507 delete validate.myprofile.createdat;
2508
2509 if(typeof validate.myprofile._id != 'undefined'){
2510 delete validate.myprofile._id;
2511 }
2512 if(typeof validate.myprofile.createdat != 'undefined'){
2513 delete validate.myprofile.createdat;
2514 }
2515 if(typeof validate.myprofile.loggedat != 'undefined'){
2516 delete validate.myprofile.loggedat;
2517 }
2518 if(typeof validate.myprofile.resetotp != 'undefined'){
2519 delete validate.myprofile.resetotp;
2520 }
2521 validate.msg = premiumDone.msg;
2522
2523 if(premiumDone.acountStatus == 'N' && premiumDone.msg == ''){
2524 validate.msg = 'order not verfied!';
2525 }
2526 return done(validate);
2527 });
2528 }else{
2529 validate.error = 'Y';
2530 validate.msg = 'user not found!';
2531 return done(validate);
2532 }
2533 })
2534
2535 },
2536 generatePremium: (data, det, cb)=>{
2537 var newDate = new Date();
2538 var startDate = _date(newDate).endOf('month');
2539 var days = _date(startDate).get('date');
2540 // var enddate = _date(newDate).add(days, 'days').toDate();
2541 var enddate = new Date(_date(newDate, "DD-MM-YYYY").add(30, 'minutes'));
2542
2543 fnc.OrderVerify(data.orderData, det, {userid: data.userid, aadate: newDate, aedate: enddate}, (verified)=>{
2544 if(verified.verify){
2545
2546 db.collection('register').update({_id: new MongoId(data.userid)}, {$set: {acountStatus: 'P', aadate: newDate, aedate: enddate}}, (err, results)=>{
2547 if(!err){
2548 return cb({acountStatus: 'P', aadate: newDate, aedate: enddate});
2549 }else{
2550 console.log("error :::::::::::::: generatePremium :::::::::::::::::: ", err);
2551 return cb({acountStatus: 'P', aadate: newDate, aedate: enddate});
2552 }
2553 })
2554 }else{
2555 return cb({acountStatus: 'N', aadate: '', aedate: '', msg: verified.msg});
2556 }
2557 })
2558 },
2559 verifyInSub: (data ,done)=>{
2560 var validate = {error: 'N', msg: ''};
2561 db.collection('register').find({_id: new MongoId(data.userid)}).toArray((err, results)=>{
2562 if(results.length){
2563 db.collection('payment_details').find({userid: data.userid, det: results[0].det}).sort({'createdat': -1}).toArray((err, paymentResults)=>{
2564
2565 validate.userid = results[0]._id.toString();
2566 validate.myprofile = results[0];
2567 validate.settings = config.privacy;
2568 if(typeof validate.myprofile._id != 'undefined'){
2569 delete validate.myprofile._id;
2570 }
2571 if(typeof validate.myprofile.otp != 'undefined'){
2572 delete validate.myprofile.otp;
2573 }
2574 delete validate.myprofile._id;
2575 delete validate.myprofile.createdat;
2576
2577 if(typeof validate.myprofile._id != 'undefined'){
2578 delete validate.myprofile._id;
2579 }
2580 if(typeof validate.myprofile.createdat != 'undefined'){
2581 delete validate.myprofile.createdat;
2582 }
2583 if(typeof validate.myprofile.loggedat != 'undefined'){
2584 delete validate.myprofile.loggedat;
2585 }
2586 if(typeof validate.myprofile.resetotp != 'undefined'){
2587 delete validate.myprofile.resetotp;
2588 }
2589
2590 if(paymentResults.length){
2591
2592 if(results[0].det == 'android'){
2593 var Verifier = require('google-play-billing-validator')
2594 var options = {
2595 email: "berry-inapp@api-5101963499791452610-557274.iam.gserviceaccount.com",
2596 key: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDJppqzWaY1aN5e\n58+N1orHkaDJ32CMMBL+Dh1RAGOsl6y5Az6WO8ilwQk5Y6nhJHyYMySJCaSgBmVU\nskonEsisRjseLFl6BZWmGNYyoMq0ps8Y9/R68g8nDcPmoa3hk2nMuBWYRYnt/79o\nqHO4fgGNPPOnxYDq/TebNsOI7K02khij3erdbBFfAlfNKMzzKiOHew7NLI3Fr2oJ\nzD7L1hNXTsOzJsA2H3vUGMbw7LV8LMpj41tvdYUEgPZAWuFe9fCALSzwyi8d4osO\n/QnrHmLDB/HMgJZqRi1n0O6BBkdvJc1WIA7/4MOWf0GF1hCExwXJcRr54SNBKBDz\nvwUDoa2BAgMBAAECggEAK6oOz403B1Oo6yYI9G6jaGlpRq0+67wxMJ//yx1pd+Lz\n/K/uKnvRi8rL44hoLZ9H93EDlUToR9p6sKdWlTVlDKC8hmEWEu0IpYm1QAs/OXTx\nXTe70a9+hnddlyAlVbYk77ZgvrM4FbgOS2xGeomWbm3nWMnUi42/L7XhC1Isg6cm\nio5h4/Rr2TvS+0ehoUX5QPbafDhmKIQYk1diE3jmAH7mPwsFXCqLELXTivrfKEf+\noa135nFXF2CX3G/AG8nhJFv0DY2bW7PdkZxABjbyf3I5+OuwqzoYtt2nMWjgMHkU\nXoWKnp3810B9K6ClwZLUK1iFjUj1pKeEqRV2txMUbQKBgQDqePvac1TioYv7lCPX\nlImzC8zdvUyiU2xya7SnzwSDPtx1cYFHXcQTovz2AHvpHLanWyXQvJ95HY2UxDXB\nivXmFS76szPT7Cku75yZmomN6VgrVHT+UwUjS4vqPUCjJcBoHDPzY/Csip72gJvh\nTP+HMuUuZdrp3eEyx/xGy2KwQwKBgQDcKi5POOQUdm2kqvuGf/01IkrSR9XrP9q2\n+Uh4NvFScnKnMVVw7CFVVfvKkyHfYkXdTIgLQBmTvtYZJUX28M9DSuF4Qtxsc9pr\n6qsTPXW8ggBHSX288n5bbwK4Vbz9bp/9qwg/QKWBjEIPYR/SWJUvybZkJe/7jhT2\n8k1mKKCg6wKBgQDDTcUS//Ab2k4cXxe/0TUlk1Ww+aXkrDJv2HEhOhnbLLg7hzEU\n/fB+HswwKNUNpmIqYozMIuF+4/Pzj7/rF9GdNdXs8unfwx3Gv8WkWIntUAmmBfJx\niTuFW78OfLjjbGWpEpzfRkbJoampUBUHhLhvqCAoFqVTGgMj5lqnqW/puwKBgAqk\nf1iVB3F1yBcNrNrzlOncnoFLt6uHiqsNodMt1LyHi8NJPzgWMgZOAb3pHtoNhhMM\ngAcLMjFSKEdO5fLp8Rrvo7aMhNs5PnW5AkwLzIUwQ5MumkVn83O4CgmfG2Ok1VcN\nzXhBR77baNYVe9RPM+b7eTWeH9upIppNXDB0Bk/BAoGBAIGobnauqlM9O59XJkzU\nAB8VUaIiGgZVpIt91xUnxX6euuFWqNFYdqOUigalYNl5UjKSRUTi2caTnP9yhv72\nh2///4nfYrTCaZDsYYVZqILVgBROuL/gNunazzBla5vN/8SkN3Q/3lyE3pR6OtuZ\nbICkBLPC41hfcZzbTs7WfrWp\n-----END PRIVATE KEY-----\n"
2597 }
2598 var verifier = new Verifier(options);
2599 let receipt = paymentResults[0].receipt;
2600
2601 let promiseData = verifier.verifySub(receipt)
2602
2603 promiseData.then(function(response) {
2604 console.log("response ::::::: ", response);
2605
2606 if(response.isSuccessful){
2607 if(typeof response.payload.userCancellationTimeMillis != 'undefined'){
2608
2609 var date = new Date(parseInt(response.payload.expiryTimeMillis));
2610 date.toString("MMM dd");
2611 console.log("exp. date :::::::", date, new Date());
2612 console.log("date < new Date() ::::::", (date < new Date()));
2613 if(date < new Date()){
2614 db.collection('register').update({_id: new MongoId(data.userid)}, {$set: {acountStatus: 'N', aadate: '', aedate: ''}}, (err, res)=>{
2615 validate.myprofile.acountStatus = 'N';
2616 validate.myprofile.aadate = '';
2617 validate.myprofile.aedate = '';
2618
2619 return done(validate);
2620 })
2621 }else{
2622 db.collection('register').update({_id: new MongoId(data.userid)}, {$set: {acountStatus: 'P', aadate: new Date(parseInt(response.payload.startTimeMillis)), aedate: new Date(parseInt(response.payload.expiryTimeMillis))}}, (err, res)=>{
2623 validate.myprofile.acountStatus = 'P';
2624 validate.myprofile.aadate = new Date(parseInt(response.payload.startTimeMillis));
2625 validate.myprofile.aedate = new Date(parseInt(response.payload.expiryTimeMillis));
2626
2627 return done(validate);
2628 })
2629 }
2630 }else{
2631 var date = new Date(parseInt(response.payload.expiryTimeMillis));
2632 date.toString("MMM dd");
2633 console.log("exp. date :::::::", date, new Date());
2634 console.log("date < new Date() ::::::", (date < new Date()));
2635 if(date < new Date()){
2636 db.collection('register').update({_id: new MongoId(data.userid)}, {$set: {acountStatus: 'N', aadate: '', aedate: ''}}, (err, res)=>{
2637 validate.myprofile.acountStatus = 'N';
2638 validate.myprofile.aadate = '';
2639 validate.myprofile.aedate = '';
2640
2641 return done(validate);
2642 })
2643 }else{
2644 db.collection('register').update({_id: new MongoId(data.userid)}, {$set: {acountStatus: 'P', aadate: new Date(parseInt(response.payload.startTimeMillis)), aedate: new Date(parseInt(response.payload.expiryTimeMillis))}}, (err, res)=>{
2645 validate.myprofile.acountStatus = 'P';
2646 validate.myprofile.aadate = new Date(parseInt(response.payload.startTimeMillis));
2647 validate.myprofile.aedate = new Date(parseInt(response.payload.expiryTimeMillis));
2648
2649 return done(validate);
2650 })
2651 }
2652 }
2653 }else{
2654 console.log("response isSuccessful error :::::::: ", response);
2655 db.collection('register').update({_id: new MongoId(data.userid)}, {$set: {acountStatus: 'N', aadate: '', aedate: ''}}, (err, res)=>{
2656 validate.myprofile.acountStatus = 'N';
2657 validate.myprofile.aadate = '';
2658 validate.myprofile.aedate = '';
2659
2660 return done(validate);
2661 })
2662 }
2663
2664 })
2665 .catch(function(error) {
2666 console.log("error :::::::: ", error);
2667 return done(validate);
2668 })
2669 }else if(results[0].det == 'ios'){
2670
2671 var iap = require('in-app-purchase');
2672 iap.config({
2673 appleExcludeOldTransactions: true, // if you want to exclude old transaction, set this to true. Default is false
2674 applePassword: '5e16f666b50a493194cb3c4d681140fb',
2675 test: true
2676 })
2677 iap.setup()
2678 .then(() => {
2679 // iap.validate(...) automatically detects what type of receipt you are trying to validate
2680 iap.validateOnce(paymentResults[0].receipt.receipt.toString('base64')).then(onSuccess).catch(onError);
2681 })
2682 .catch((error) => {
2683 console.log("catch error ::::: ", error);
2684 db.collection('register').update({_id: new MongoId(data.userid)}, {$set: {acountStatus: 'N', aadate: '', aedate: ''}}, (err, res)=>{
2685 validate.myprofile.acountStatus = 'N';
2686 validate.myprofile.aadate = '';
2687 validate.myprofile.aedate = '';
2688
2689 return done(validate);
2690 })
2691 });
2692
2693 function onSuccess(validatedData) {
2694 // validatedData: the actual content of the validated receipt
2695 // validatedData also contains the original receipt
2696 var options = {
2697 ignoreCanceled: true, // Apple ONLY (for now...): purchaseData will NOT contain cancceled items
2698 ignoreExpired: true // purchaseData will NOT contain exipired subscription items
2699 };
2700 console.log("validatedData ::::: ", validatedData);
2701 // validatedData contains sandbox: true/false for Apple and Amazon
2702 var purchaseData = iap.getPurchaseData(validatedData, options);
2703 console.log("purchaseData ::::: ", purchaseData);
2704
2705 if(purchaseData.length && typeof purchaseData[0].purchaseDateMs != 'undefined' && typeof purchaseData[0].expiresDateMs != 'undefined'){
2706
2707 var date = new Date(parseInt(purchaseData[0].expiresDateMs));
2708 date.toString("MMM dd");
2709 console.log("exp. date :::::::", date, new Date());
2710 console.log("date < new Date() ::::::", (date < new Date()));
2711 if(date < new Date()){
2712 db.collection('register').update({_id: new MongoId(data.userid)}, {$set: {acountStatus: 'N', aadate: '', aedate: ''}}, (err, res)=>{
2713 validate.myprofile.acountStatus = 'N';
2714 validate.myprofile.aadate = '';
2715 validate.myprofile.aedate = '';
2716
2717 return done(validate);
2718 })
2719 }else{
2720 // new Date(_date(new Date(parseInt(purchaseData[0].purchaseDateMs)), "DD-MM-YYYY").add(30, 'minutes'))
2721 db.collection('register').update({_id: new MongoId(data.userid)}, {$set: {acountStatus: 'P', aadate: new Date(parseInt(purchaseData[0].purchaseDateMs)), aedate: new Date(parseInt(purchaseData[0].expiresDateMs))}}, (err, res)=>{
2722 validate.myprofile.acountStatus = 'P';
2723 validate.myprofile.aadate = new Date(parseInt(purchaseData[0].purchaseDateMs));
2724 validate.myprofile.aedate = new Date(parseInt(purchaseData[0].expiresDateMs));
2725
2726 return done(validate);
2727 })
2728 }
2729
2730 }else{
2731 db.collection('register').update({_id: new MongoId(data.userid)}, {$set: {acountStatus: 'N', aadate: '', aedate: ''}}, (err, res)=>{
2732 validate.myprofile.acountStatus = 'N';
2733 validate.myprofile.aadate = '';
2734 validate.myprofile.aedate = '';
2735
2736 return done(validate);
2737 })
2738 }
2739 }
2740
2741 function onError(error) {
2742 // failed to validate the receipt...
2743 db.collection('register').update({_id: new MongoId(data.userid)}, {$set: {acountStatus: 'N', aadate: '', aedate: ''}}, (err, res)=>{
2744 validate.myprofile.acountStatus = 'N';
2745 validate.myprofile.aadate = '';
2746 validate.myprofile.aedate = '';
2747
2748 return done(validate);
2749 })
2750 }
2751 }else{
2752 db.collection('register').update({_id: new MongoId(data.userid)}, {$set: {acountStatus: 'N', aadate: '', aedate: ''}}, (err, res)=>{
2753 validate.myprofile.acountStatus = 'N';
2754 validate.myprofile.aadate = '';
2755 validate.myprofile.aedate = '';
2756
2757 return done(validate);
2758 })
2759 }
2760 }else{
2761 db.collection('register').update({_id: new MongoId(data.userid)}, {$set: {acountStatus: 'N', aadate: '', aedate: ''}}, (err, res)=>{
2762 validate.myprofile.acountStatus = 'N';
2763 validate.myprofile.aadate = '';
2764 validate.myprofile.aedate = '';
2765
2766 return done(validate);
2767 })
2768 }
2769 })
2770 }else{
2771 validate.error = 'Y';
2772 validate.msg = 'user not found!';
2773 return done(validate);
2774 }
2775 })
2776 },
2777 OrderVerify: (data, det, dt, done)=>{
2778 console.log("before parse data ::::: ", data);
2779 // return done(true);
2780 if(det != 'ios'){
2781
2782 try{
2783 data = JSON.parse(data);
2784 }catch(e){
2785 return done({verify: false, msg: "JSON Parse Error"});
2786 }
2787 }
2788
2789 data.orderId = data.orderId ? data.orderId : data.transaction_id;
2790 console.log("data.orderId :::::: ",det, data.orderId);
2791 db.collection('payment_details').find({OrderId : data.orderId }).limit(1).toArray(function(err,ord){
2792 //check order duplication for android.
2793 console.log("purchase ::::::: ",err, ord.length);
2794 if(ord.length == 0)
2795 {
2796 if(det == 'android'){
2797 var Verifier = require('google-play-billing-validator');
2798 var options = {
2799 email: "berry-inapp@api-5101963499791452610-557274.iam.gserviceaccount.com",
2800 key: "-----BEGIN PRIVATE KEY-----\nMIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQDJppqzWaY1aN5e\n58+N1orHkaDJ32CMMBL+Dh1RAGOsl6y5Az6WO8ilwQk5Y6nhJHyYMySJCaSgBmVU\nskonEsisRjseLFl6BZWmGNYyoMq0ps8Y9/R68g8nDcPmoa3hk2nMuBWYRYnt/79o\nqHO4fgGNPPOnxYDq/TebNsOI7K02khij3erdbBFfAlfNKMzzKiOHew7NLI3Fr2oJ\nzD7L1hNXTsOzJsA2H3vUGMbw7LV8LMpj41tvdYUEgPZAWuFe9fCALSzwyi8d4osO\n/QnrHmLDB/HMgJZqRi1n0O6BBkdvJc1WIA7/4MOWf0GF1hCExwXJcRr54SNBKBDz\nvwUDoa2BAgMBAAECggEAK6oOz403B1Oo6yYI9G6jaGlpRq0+67wxMJ//yx1pd+Lz\n/K/uKnvRi8rL44hoLZ9H93EDlUToR9p6sKdWlTVlDKC8hmEWEu0IpYm1QAs/OXTx\nXTe70a9+hnddlyAlVbYk77ZgvrM4FbgOS2xGeomWbm3nWMnUi42/L7XhC1Isg6cm\nio5h4/Rr2TvS+0ehoUX5QPbafDhmKIQYk1diE3jmAH7mPwsFXCqLELXTivrfKEf+\noa135nFXF2CX3G/AG8nhJFv0DY2bW7PdkZxABjbyf3I5+OuwqzoYtt2nMWjgMHkU\nXoWKnp3810B9K6ClwZLUK1iFjUj1pKeEqRV2txMUbQKBgQDqePvac1TioYv7lCPX\nlImzC8zdvUyiU2xya7SnzwSDPtx1cYFHXcQTovz2AHvpHLanWyXQvJ95HY2UxDXB\nivXmFS76szPT7Cku75yZmomN6VgrVHT+UwUjS4vqPUCjJcBoHDPzY/Csip72gJvh\nTP+HMuUuZdrp3eEyx/xGy2KwQwKBgQDcKi5POOQUdm2kqvuGf/01IkrSR9XrP9q2\n+Uh4NvFScnKnMVVw7CFVVfvKkyHfYkXdTIgLQBmTvtYZJUX28M9DSuF4Qtxsc9pr\n6qsTPXW8ggBHSX288n5bbwK4Vbz9bp/9qwg/QKWBjEIPYR/SWJUvybZkJe/7jhT2\n8k1mKKCg6wKBgQDDTcUS//Ab2k4cXxe/0TUlk1Ww+aXkrDJv2HEhOhnbLLg7hzEU\n/fB+HswwKNUNpmIqYozMIuF+4/Pzj7/rF9GdNdXs8unfwx3Gv8WkWIntUAmmBfJx\niTuFW78OfLjjbGWpEpzfRkbJoampUBUHhLhvqCAoFqVTGgMj5lqnqW/puwKBgAqk\nf1iVB3F1yBcNrNrzlOncnoFLt6uHiqsNodMt1LyHi8NJPzgWMgZOAb3pHtoNhhMM\ngAcLMjFSKEdO5fLp8Rrvo7aMhNs5PnW5AkwLzIUwQ5MumkVn83O4CgmfG2Ok1VcN\nzXhBR77baNYVe9RPM+b7eTWeH9upIppNXDB0Bk/BAoGBAIGobnauqlM9O59XJkzU\nAB8VUaIiGgZVpIt91xUnxX6euuFWqNFYdqOUigalYNl5UjKSRUTi2caTnP9yhv72\nh2///4nfYrTCaZDsYYVZqILVgBROuL/gNunazzBla5vN/8SkN3Q/3lyE3pR6OtuZ\nbICkBLPC41hfcZzbTs7WfrWp\n-----END PRIVATE KEY-----\n"
2801 }
2802 var verifier = new Verifier(options);
2803 let receipt = {
2804 packageName: data.packageName,
2805 productId: data.productId,
2806 purchaseToken: data.purchaseToken
2807 };
2808 dt.createdat = new Date();
2809 dt.receipt = receipt;
2810 let promiseData = verifier.verifySub(receipt)
2811
2812 promiseData.then(function(response) {
2813 if(response.isSuccessful){
2814 dt.response = response.payload;
2815 dt.PaymentStatus = 'completed';
2816 dt.OrderId = data.orderId;
2817 dt.det = det;
2818 db.collection('payment_details').save(dt, function (err, res) {return done({verify: true, msg: ""})});
2819 }else{
2820 console.log("response isSuccessful error :::::::: ", response);
2821 return done({verify: false, msg: ""});
2822 }
2823
2824 })
2825 .catch(function(error) {
2826 console.log("error :::::::: ", error);
2827 return done({verify: false, msg: ""});
2828 })
2829 }else if(det == 'ios'){
2830 // var client = new IAPVerifier('5e16f666b50a493194cb3c4d681140fb');
2831 var iap = require('in-app-purchase');
2832 iap.config({
2833 appleExcludeOldTransactions: true, // if you want to exclude old transaction, set this to true. Default is false
2834 applePassword: '5e16f666b50a493194cb3c4d681140fb',
2835 test: true
2836 })
2837 iap.setup()
2838 .then(() => {
2839 // iap.validate(...) automatically detects what type of receipt you are trying to validate
2840 iap.validateOnce(data.receipt.toString('base64')).then(onSuccess).catch(onError);
2841 })
2842 .catch((error) => {
2843 console.log("catch error ::::: ", error);
2844 console.log("Invalid receipt", error);
2845 return done({verify: false, msg: "Invalid receipt"});
2846 });
2847
2848 function onSuccess(validatedData) {
2849 // validatedData: the actual content of the validated receipt
2850 // validatedData also contains the original receipt
2851 var options = {
2852 ignoreCanceled: true, // Apple ONLY (for now...): purchaseData will NOT contain cancceled items
2853 ignoreExpired: true // purchaseData will NOT contain exipired subscription items
2854 };
2855 console.log("validatedData ::::: ", validatedData);
2856 // validatedData contains sandbox: true/false for Apple and Amazon
2857 var purchaseData = iap.getPurchaseData(validatedData, options);
2858 console.log("purchaseData ::::: ", purchaseData);
2859
2860 if(purchaseData.length && typeof purchaseData[0].purchaseDateMs != 'undefined'){
2861 console.log("Valid receipt");
2862
2863 dt.receipt = data;
2864 dt.createdat = new Date();
2865 dt.response = purchaseData;
2866 dt.PaymentStatus = 'completed';
2867 dt.OrderId = data.orderId;
2868 dt.det = det;
2869 db.collection('payment_details').save(dt, function (err, res) {return done({verify: true, msg: ""})});
2870
2871 }else{
2872 console.log("data not valid", error);
2873 return done({verify: false, msg: "Invalid purchaseData"});
2874 }
2875 }
2876
2877 function onError(error) {
2878 // failed to validate the receipt...
2879 console.log("Invalid receipt", error);
2880 return done({verify: false, msg: "Invalid receipt"});
2881 }
2882
2883 }else{
2884 return done({verify: false, msg: "device not found!"});
2885 }
2886 }else{
2887 return done({verify: false, msg: ""});
2888 }
2889 });
2890 },
2891
2892 outTime: (data, done)=>{
2893
2894 db.collection('register').find({_id: new MongoId(data.userid)}).toArray((err, results)=>{
2895 if(results.length){
2896
2897 var update = {};
2898
2899 if(typeof data.type != 'undefined' && data.type == 'login'){
2900 update = {'$set': {loggedat: new Date()}};
2901 }else if(typeof data.type != 'undefined' && data.type == 'logout'){
2902 update = {'$set': {out_time: new Date()}};
2903 }
2904
2905 if(typeof results[0].loggedat != 'undefined' && typeof data.type != 'undefined' && data.type == 'logout'){
2906 var logged_in = _date(new Date(results[0].loggedat));
2907
2908 var logout = _date(new Date());
2909
2910 update['$set']['timeh'] = logout.diff(logged_in, 'minutes');
2911
2912 }else{
2913 update['$set']['timeh'] = 0;
2914 }
2915
2916 db.collection('register').update({_id: new MongoId(data.userid)}, update, (err, results)=>{
2917 return done({error: 'N', msg: ""});
2918 })
2919 }else{
2920 return done({error: 'Y', msg: "user not found!"});
2921 }
2922 })
2923 }
2924}