Esempio n. 1
0
	def _post(self, request, response, id=None):
		response.content_type = "application/json"
		
		try:
			user = TextyUser.find(challenge=request.params["challenge"]).next()
		except StopIteration:
			raise NotFound("Invalid challenge code.")
		user.is_active = True
		user.put()
		user.sms('Thanks for signing up with Texty! Text HLP for commands.')

		response.body = json.dumps(user.to_dict())
		return response
Esempio n. 2
0
	def _put(self, request, response, id=None):
		required_params = ["email", "refresh"]
		missing_fields = []
		for param in required_params:
			if param not in request.params:
				missing_fields.append(param)
		if missing_fields:
			raise BadRequest("Missing required field(s): %s" % " ".join(missing_fields))

		try:
			user = TextyUser.find(email=request.params.email).next()
		except StopIteration:
			raise NotFound("No such user.")

		user.refresh_token = request.params["refresh"]
		user.put()

		return response
Esempio n. 3
0
def createUser(params):
	required_params = ["email", "phone", "auth_token", "refresh_token"]
	log.info(params)
	missing_fields = []
	for param in required_params:
		if param not in params:
			missing_fields.append(param)
	if missing_fields:
		raise BadRequest("Missing required field(s): %s" % " ".join(missing_fields))

	user = TextyUser()
	user.email = params["email"]
	user.phone = params["phone"]
	user.auth_token = params["auth_token"]
	user.refresh_token = params["refresh_token"]

	return user.put()
Esempio n. 4
0
	def run(self):

		while self.running:

			msg = self.text_queue.read()
			if msg:
				self.backoff_level = 0
				# Create and set up the connection to SkyDrive
				# client_secret and client_id do not change from user to user
				sd = skydrive.api_v5.SkyDriveAPI()
				sd.client_id = CLIENT_ID
				sd.client_secret = CLIENT_SECRET
				
				#Consists of a phone number and a text message body
				body = json.loads(msg.get_body())

				phone_num = body[0]
				txt = body[1].split(' ', 1)

				command = txt[0].lower()
				if len(txt) > 1:
					args = txt[1]
				else:
					args = ""

				try:
					user = TextyUser.find(phone=phone_num).next()
					sd.auth_access_token = user.auth_token
					sd.auth_refresh_token = user.refresh_token

					if command in self.VALID_COMMANDS:
						self.log.info(command)
						return_msg = self.VALID_COMMANDS[command](sd, user, args)

					elif command.isdigit():
						return_msg = self.choose_command(sd, user, command)
					else:
						return_msg = 'Error: Command not found or incorrectly formated'
					try:
						self.log.info(return_msg)
						if len(return_msg) >= MAX_MESSAGE_LENGTH:
							messages = self.split_message(return_msg)
							for message in messages:
								user.sms(message)
						else:
							user.sms(return_msg)
					except:
						# failed to send message
						self.log.exception('Failed sending sms to %s.' % phone_num)

				except StopIteration:
					self.log.info("Didn't recognize number: %s" % phone_num)
				except:
					import traceback
					traceback.print_exc()
				
				self.text_queue.delete_message(msg)
			else:
				if self.backoff_level < BACKOFF_MAX:
					self.backoff_level += BACKOFF_STEP
				self.log.info("Sleeping %d seconds." % self.backoff_level)
				time.sleep(self.backoff_level)