Пример #1
0
	def login(self,env,start_response):
		
		cl = vanilla.getContentLength(env)
		if cl == None:
			return vanilla.http_error(411,env,start_response,'missing Content-Length header')
		
		content = env['wsgi.input'].read(cl)
		query = urlparse.parse_qs(content)
		
		if 'username' not in query:
			return vanilla.http_error(400,env,start_response,msg='missing username')
		#Use first occurence from query string
		username = query['username'][0]
		
		if 'password' not in query:
			return vanilla.http_error(400,env,start_response,msg='missing password')
		#Use first occurence from query string
		password = query['password'][0]
		
		userId = self.authenticateUser(username,password)
		if userId == None:
			self.logger.info('Failed authorization for user:%s' , username)
			return vanilla.sendJsonWsgiResponse(env,start_response,{'error':'bad username or password'})
		
		session = self.sm.startSession(username,userId)
			
		return vanilla.sendJsonWsgiResponse(env,start_response,self.getResponseForSession(session),additionalHeaders=[session.getCookie()])
Пример #2
0
    def _extractParams(self, env):

        #If the function doesn't request parameters,
        #then don't read from env['wsgi.input']. It is possible
        #the function handles what it needs on its own
        if len(self.parameters) == 0:
            return {}

        requestMethod = env['REQUEST_METHOD']
        retval = {}

        if requestMethod == 'POST':
            cl = vanilla.getContentLength(env)
            if cl == None:
                raise ValueError('Missing content length header')

            query = urlparse.parse_qs(env['wsgi.input'].read(cl))
            for parameter, converter, isArray in self.parameters:
                if parameter not in query:
                    raise ValueError('Missing parameter %s' % parameter)

                if isArray:
                    if converter:
                        raise NotImplementedError(
                            'Cannot handle array parameters with conversion')
                    retval[parameter] = query[parameter]

                else:
                    retval[parameter] = query[parameter][0]
                    if converter:
                        result = converter(retval[parameter])
                        if result == None:
                            if len(retval[parameter]) < 64:
                                raise ValueError(
                                    'Bad value "%s" for parameter %s' % (
                                        retval[parameter],
                                        parameter,
                                    ))
                            else:
                                raise ValueError('Bad value for parameter %s' %
                                                 (parameter, ))

                        retval[parameter] = result

            return retval
        else:
            raise NotImplementedError(
                "Cannot handle %s requests with parameters" % requestMethod)
Пример #3
0
	def _extractParams(self,env):
		
		#If the function doesn't request parameters,
		#then don't read from env['wsgi.input']. It is possible
		#the function handles what it needs on its own
		if len(self.parameters) == 0:
			return {}
			
		requestMethod = env['REQUEST_METHOD']
		retval = {}
		
		if requestMethod == 'POST':
			cl = vanilla.getContentLength(env)
			if cl == None:
				raise ValueError('Missing content length header')
		
			query = urlparse.parse_qs(env['wsgi.input'].read(cl))
			for parameter,converter,isArray in self.parameters:
				if parameter not in query:
					raise ValueError('Missing parameter %s' % parameter)

				if isArray:
					if converter:
						raise NotImplementedError('Cannot handle array parameters with conversion')
					retval[parameter] = query[parameter]
						
				else:
					retval[parameter] = query[parameter][0]
					if converter:
						result = converter(retval[parameter])
						if result == None:
							if len(retval[parameter]) < 64:
								raise ValueError('Bad value "%s" for parameter %s' % (retval[parameter], parameter,))
							else:
								raise ValueError('Bad value for parameter %s' %(parameter,))
							
						retval[parameter] = result
					
			return retval
		else:
			raise NotImplementedError("Cannot handle %s requests with parameters" % requestMethod)
Пример #4
0
    def login(self, env, start_response):

        cl = vanilla.getContentLength(env)
        if cl == None:
            return vanilla.http_error(411, env, start_response,
                                      'missing Content-Length header')

        content = env['wsgi.input'].read(cl)
        query = urlparse.parse_qs(content)

        if 'username' not in query:
            return vanilla.http_error(400,
                                      env,
                                      start_response,
                                      msg='missing username')
        #Use first occurence from query string
        username = query['username'][0]

        if 'password' not in query:
            return vanilla.http_error(400,
                                      env,
                                      start_response,
                                      msg='missing password')
        #Use first occurence from query string
        password = query['password'][0]

        userId = self.authenticateUser(username, password)
        if userId == None:
            self.logger.info('Failed authorization for user:%s', username)
            return vanilla.sendJsonWsgiResponse(
                env, start_response, {'error': 'bad username or password'})

        session = self.sm.startSession(username, userId)

        return vanilla.sendJsonWsgiResponse(
            env,
            start_response,
            self.getResponseForSession(session),
            additionalHeaders=[session.getCookie()])