コード例 #1
2
ファイル: chatroomservice.py プロジェクト: azoff/Darbo
def getIdFromUrl(url):
	if stringutils.isEmpty(url):
		return None
	url = urlsplit(url)
	path = url.path if stringutils.isNotEmpty(url.path) else "/" 
	# normalize referrers down to a path (get rid of query+fragment)
	seed = "%s://%s%s" % (url.scheme, url.netloc, path)
	return hashlib.md5(seed).hexdigest()
コード例 #2
0
ファイル: joinhandler.py プロジェクト: azoff/Darbo
	def onApiRequest(self):
		id = self.param(settings.CHATROOM_ID_PARAM)
		token = self.param(settings.TOKEN_PARAM)
		name = self.param(settings.CHATROOM_NAME_PARAM, "", settings.ROOM_NAME_CHARACTER_LIMIT, True)
		participants = 0
		chatroom = None
		
		if stringutils.isNotEmpty(id):
			chatroom = chatroomservice.getChatroom(id)
			if chatroom is None: # check for bad IDs
				id = None
		if stringutils.isEmpty(id):
			id = chatroomservice.getIdFromUrl(self.request.referrer)
		
		if stringutils.isNotEmpty(id):
			chatroom = chatroomservice.getChatroom(id)
			if chatroom is None:
				chatroom = Chatroom(id, name)
				chatroomservice.cacheAndEnqueueSave(chatroom)
			elif len(name) > 0 and (name != chatroom.getName()):
				chatroom.setName(name)
				chatroomservice.cacheAndEnqueueSave(chatroom)
			if channelservice.isValidToken(id, token):
				participants = channelservice.activateToken(id, token)
			else:
				token, participants = channelservice.createToken(id)
			channelservice.updateParticipantCount(id, token)
			self.sendApiResponse({
				'token': token,
				'chatroom': chatroom.asLiteral(),
				'participants': participants,
				'settings': settings.getClientSettings()
			})
		else:
			self.sendApiError('invalid or missing referrer', 401)
コード例 #3
0
ファイル: talkhandler.py プロジェクト: azoff/Darbo
    def onApiRequest(self):
		id = self.param(settings.CHATROOM_ID_PARAM)
		if stringutils.isNotEmpty(id):
			chatroom = chatroomservice.getChatroom(id)
			if chatroom is not None:
				token = self.param(settings.TOKEN_PARAM)
				if stringutils.isNotEmpty(token):
					if channelservice.isValidToken(id, token, active=True):
						chat = self.param(settings.CHAT_MESSAGE_PARAM, "",
							settings.MESSAGE_CHARACTER_LIMIT, sanitize=True)
						alias = self.param(settings.CHAT_ALIAS_PARAM, settings.DEFAULT_CHAT_ALIAS,
							settings.ALIAS_CHARACTER_LIMIT, sanitize=True)
						message = Message(alias, chat)
						chatroom.addMessage(message)
						chatroomservice.cacheAndEnqueueSave(chatroom)
						status = channelservice.sendMessage(id, token, message)
						self.sendApiResponse(status)
					else:
						self.sendApiError('expired token', 401, {'expired':True})
				else:
					self.sendApiError('missing access token', 401)
			else:
				self.sendApiError('chatroom does not exist', 404)
		else:
			self.sendApiError('missing chatroom id', 401)
コード例 #4
0
ファイル: channelservice.py プロジェクト: azoff/Darbo
def isValidToken(id, token, active=False):
	sessions, count = _getSessions(id)
	valid = stringutils.isNotEmpty(token) and sessions.has_key(token)
	if active:
		active = valid and sessions[token].isActive()
		return valid and active
	else:
		return valid
コード例 #5
0
ファイル: leavehandler.py プロジェクト: azoff/Darbo
    def onApiRequest(self):
		id = self.param(settings.CHATROOM_ID_PARAM)
		token = self.param(settings.TOKEN_PARAM)
		if stringutils.isNotEmpty(token):
			participants = channelservice.deactivateToken(id, token)
			channelservice.updateParticipantCount(id, token)
			self.sendApiResponse({'participants': participants});
		else:
			self.sendApiError('missing token', 401)
コード例 #6
0
ファイル: apihandler.py プロジェクト: azoff/Darbo
	def sendApiResponse(self, data, status=200):
		# The response body in CORS requests is ignored by browsers if the status code is not 200
		# As a result, we always return 200 and add the status to the response json
		data['status'] = status
		json = simplejson.dumps(data)
		if stringutils.isNotEmpty(self._jsonp):
			self.setContentType('application/javascript')
			json = "%s(%s);" % (self._jsonp, json)
		else:
			self.setContentType('application/json')
		self.send(json)
コード例 #7
0
ファイル: assethandler.py プロジェクト: azoff/Darbo
	def serveAsset(self, path, timeout=settings.ASSET_CACHE_WINDOW):
		cacheKey = self.getCacheKey(path, self.assetVersion)
		asset = memcache.get(cacheKey)
		if stringutils.isEmpty(asset) or not settings.CACHE_ASSETS:
			if os.path.exists(path):
				asset = open(path).read()
				if stringutils.isNotEmpty(asset):
					memcache.set(cacheKey, asset, timeout)
				else:
					return self.send("Empty Asset - %s" % path, 409)
			else:
				return self.send("Missing Asset - %s" % path, 404)
		self.send(asset)
コード例 #8
0
ファイル: savehandler.py プロジェクト: azoff/Darbo
	def onApiRequest(self):
		chatroomJson = self.param(settings.CHATROOM_JSON_PARAM)
		if stringutils.isNotEmpty(chatroomJson):
			chatroom = ChatroomFromJson(chatroomJson)
			if chatroom is not None:
				chatroomservice.saveChatroom(chatroom)
				self.sendApiResponse({
					settings.CHATROOM_ID_PARAM: chatroom.getId(), 
					'complete': time()
				})
			else:
				self.sendApiError('invalid chatroom JSON', 401)
		else:
			self.sendApiError('missing chatroom data', 402)
コード例 #9
0
ファイル: templatehandler.py プロジェクト: azoff/Darbo
	def onAssetRequest(self):
		selectedTemplatePath = self.getTemplatePath(settings.DEFAULT_LOCALE)
		preferredLocales = self.param(settings.LOCALE_PARAM)
		if stringutils.isNotEmpty(preferredLocales):
			preferredLocales = preferredLocales.split(',')
		else:
			preferredLocales = self.getAcceptedLocales()
		for preferredLocale in preferredLocales:
			preferredTemplatePath = self.getTemplatePath(preferredLocale)
			if os.path.exists(preferredTemplatePath):
				selectedTemplatePath = preferredTemplatePath
				break
		self.setContentType("text/html")
		self.serveAsset(selectedTemplatePath)