Add a 'key' query parameter that will skip verification limits.
This commit is contained in:
		
							
								
								
									
										70
									
								
								app.js
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								app.js
									
									
									
									
									
								
							| @@ -8,6 +8,14 @@ var express = require('express') | ||||
|   , Stream = require('stream') | ||||
|   , providers = require('./providers.js') | ||||
|  | ||||
| var access_keys; | ||||
| try { | ||||
|   access_keys = require('./keys.json'); | ||||
| } catch (e) { | ||||
|   access_keys = {}; | ||||
| } | ||||
| console.log('Loaded access keys:', access_keys); | ||||
|  | ||||
| var mpq = new mixpanel.Client('6e6e6b71ed5ada4504c52d915388d73d'); | ||||
|  | ||||
| var redis = require('redis-url').connect(); | ||||
| @@ -39,18 +47,18 @@ app.post('/text', function(req, res) { | ||||
|     res.send({success:false,message:'Invalid phone number.'}); | ||||
|     return; | ||||
|   } | ||||
|   textRequestHandler(req, res, number, 'us'); | ||||
|   textRequestHandler(req, res, number, 'us', req.query.key); | ||||
| }); | ||||
|  | ||||
| app.post('/canada', function(req, res) { | ||||
|   textRequestHandler(req, res, stripPhone(req.body.number), 'canada'); | ||||
|   textRequestHandler(req, res, stripPhone(req.body.number), 'canada', req.query.key); | ||||
| }); | ||||
|  | ||||
| app.post('/intl', function(req, res) { | ||||
|   textRequestHandler(req, res, stripPhone(req.body.number), 'intl'); | ||||
|   textRequestHandler(req, res, stripPhone(req.body.number), 'intl', req.query.key); | ||||
| }); | ||||
|  | ||||
| function textRequestHandler(req, res, number, region) { | ||||
| function textRequestHandler(req, res, number, region, key) { | ||||
|   if (!req.body.number || !req.body.message) { | ||||
|     mpq.track('incomplete request'); | ||||
|     res.send({success:false,message:'Number and message parameters are required.'}); | ||||
| @@ -61,9 +69,43 @@ function textRequestHandler(req, res, number, region) { | ||||
|  | ||||
|   var message = req.body.message; | ||||
|   if (message.indexOf('http') === 0) { | ||||
|     // Handle problem with vtext where message would not get sent properly if it | ||||
|     // begins with h ttp | ||||
|     message = ' ' + message; | ||||
|   } | ||||
|  | ||||
|   var tracking_details = { | ||||
|     number: req.body.number, | ||||
|     message: req.body.message, | ||||
|     ip: ip | ||||
|   }; | ||||
|  | ||||
|   var doSendText = function() { | ||||
|     // Time to actually send the message | ||||
|     sendText(req.body.number, message, region, function(err) { | ||||
|       if (err) { | ||||
|         mpq.track('sendText failed', tracking_details); | ||||
|         res.send({success:false, message:'Communication with SMS gateway failed.'}); | ||||
|       } | ||||
|       else { | ||||
|         mpq.track('sendText success', tracking_details); | ||||
|         res.send({success:true}); | ||||
|       } | ||||
|     }); | ||||
|   }; | ||||
|  | ||||
|   // Do they have a valid access key? | ||||
|   if (key && key in access_keys) { | ||||
|     console.log('Got valid key', key, '... not applying limits.'); | ||||
|     // Skip verification | ||||
|     mpq.track('sendText skipping verification', _.extend(tracking_details, { | ||||
|       key: key, | ||||
|     })); | ||||
|     doSendText(); | ||||
|     return; | ||||
|   } | ||||
|  | ||||
|   // If they don't have a special key, apply rate limiting and verification | ||||
|   var ipkey = 'textbelt:ip:' + ip + '_' + dateStr(); | ||||
|   var phonekey = 'textbelt:phone:' + number; | ||||
|  | ||||
| @@ -109,21 +151,11 @@ function textRequestHandler(req, res, number, region) { | ||||
|         }); | ||||
|       }, 1000*60*60*24); | ||||
|  | ||||
|       sendText(req.body.number, message, region, function(err) { | ||||
|         if (err) { | ||||
|           mpq.track('sendText failed', {number: req.body.number, message: req.body.message, ip: ip}); | ||||
|           res.send({success:false,message:'Communication with SMS gateway failed.'}); | ||||
|         } | ||||
|         else { | ||||
|           mpq.track('sendText success', {number: req.body.number, message: req.body.message, ip: ip, region: region}); | ||||
|           res.send({success:true}); | ||||
|         } | ||||
|       }); | ||||
|     }); | ||||
|  | ||||
|   }); | ||||
|  | ||||
| } | ||||
|       // Cleared to send now | ||||
|       doSendText(); | ||||
|     });     // end redis ipkey incr | ||||
|   });       // end redis phonekey incr | ||||
| }           // end textRequestHandler | ||||
|  | ||||
| function dateStr() { | ||||
|   var today = new Date(); | ||||
|   | ||||
							
								
								
									
										3
									
								
								keys_example.json
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								keys_example.json
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | ||||
| { | ||||
|   "specialkey": -1 | ||||
| } | ||||
		Reference in New Issue
	
	Block a user