Example #1
0
 def delete(self, *args, **kwargs):
     event_id = int(self.kwargs.get('event_id'))
     user_data = self.request.user_data
     row_affected = remove_like(event_id, user_data['id'])
     if row_affected == 0:
         return json_response(error='User Id or Event id not found')
     return json_response(data={'msg': 'deleted'})
Example #2
0
 def delete(self, *args, **kwargs):
     event_id = int(self.kwargs.get('event_id'))
     user_id = int(self.request.GET.get('user_id', 0))
     row_affected = remove_participation(event_id, user_id)
     if row_affected == 0:
         return json_response(error='Event not found')
     return json_response(data={'msg': 'deleted'})
Example #3
0
    def post(self, *args, **kwargs):
        body_json = json.loads(self.request.body)
        try:
            validate(body_json, user_login_schema)
            username = body_json.get('username')
            encrypted_password = body_json.get('password')
            user_key = cache.get('{}_key'.format(username))

            if user_key is None:
                log.info(user_key)
                return json_response(error='Invalid login operator')

            cache.delete('{}_key'.format(username))
            password = decrypt(encrypted_password, user_key)
            user, is_valid = validate_user(username, password)

            if not is_valid:
                return json_response(
                    error='Username does not exist or wrong password')

            token = string_generator(TOKEN_LENGTH)
            cache.set(token, {
                'id': user['id'],
                'role': get_user_role(user['id']),
                'username': user['username']
            },
                      time=SESSION_TIMEOUT)
            return json_response(data={'token': token, 'user_id': user['id']})
        except ValidationError:
            return json_response(error='Input validation error')
Example #4
0
 def post(self, *args, **kwargs):
     event_id = int(self.kwargs.get('event_id'))
     body_json = json.loads(self.request.body)
     try:
         validate(body_json, participation_schema)
         insert_participation(event_id, body_json['user_id'])
         return json_response(data={'msg': 'participated'})
     except ValidationError:
         return json_response(error='Invalid behavior')
Example #5
0
 def post(self, *args, **kwargs):
     body_json = json.loads(self.request.body)
     try:
         validate(body_json, user_logout_schema)
         if validate_token_func(body_json["token"], body_json["user_id"]):
             cache.delete(body_json["token"])
             return json_response(data={'msg': 'logged out'})
         return json_response(error='Bad request')
     except ValidationError:
         return json_response(error='Bad request')
Example #6
0
 def get(self, *args, **kwargs):
     username = self.kwargs.get('username')
     user = get_user_by_username(username)
     if user is None:
         return json_response(error='User not found')
     return json_response(data={
         'id': user.id,
         'username': user.username,
         'fullname': user.fullname
     })
Example #7
0
    def post(self, *args, **kwargs):
        body_json = json.loads(self.request.body)
        username = body_json.get('username')
        if not validate_username(username):
            return json_response(error='Invalid username')
        if is_exist_username(username):
            return json_response(error='This username is already taken')

        random_key = string_generator(RANDOM_KEY_LENGTH)
        cache.set('{}_registerkey'.format(username), random_key)
        return json_response(data={'key': random_key})
Example #8
0
	def patch(self, *args, **kwargs):
		event_id = int(self.kwargs.get('event_id'))
		body_json = json.loads(self.request.body)
		try:
			validate(body_json, event_patch_schema)
			event = update_event(event_id, body_json)
			if event is None:
				return json_response(error='update failed')
			return json_response(event)
		except ValidationError:
			return json_response(error='Invalid input')
Example #9
0
    def process_view(self, request, *args, **kwargs):
        if request.path[:9] == '/api/user' or request.path[:6] == '/media':
            return None
        header_token = request.META.get('HTTP_AUTHORIZATION', '')
        token = header_token[6:]
        user_data = cache.get(token)
        if user_data is None:
            return json_response(error='Unauthorized')
        if request.path[:6] == '/admin' and user_data['role'] != 2:
            return json_response(error='Permission denied')

        request.user_data = user_data
        return None
Example #10
0
	def post(self, *args, **kwargs):
		event_id = int(self.kwargs.get('event_id'))
		incoming_files = self.request.FILES.getlist('image')
		if len(incoming_files) == 0:
			return json_response(error='no image found')

		for afile in incoming_files:
			ext = os.path.splitext(afile.name)[1]
			if not ext.lower() in VALID_IMAGE_EXTENSIONS:
				continue
			filename = default_storage.save(tempfile.NamedTemporaryFile(prefix='image').name.split('/')[-1] + ext,
			                                afile)
			image_id = insert_image('/media/' + filename)
			insert_image_to_event(event_id, image_id)

		return json_response(data={'msg': 'Upload images successful'})
Example #11
0
	def get(self, *args, **kwargs):
		event_id = int(self.kwargs.get('event_id'))
		event = get_event_by_id(event_id)
		if event is None:
			return json_response(data={})

		event = model_to_dict(event)

		event['count_like'] = get_event_like_count(event_id)
		event['count_participation'] = get_event_participation_count(event_id)

		user_data = self.request.user_data
		event['has_liked'] = is_user_liked_event(user_data['id'], event.get('id'))
		event['has_participated'] = is_user_participated_event(user_data['id'], event.get('id'))

		return json_response(data=event)
Example #12
0
	def post(self, *args, **kwargs):
		body_json = json.loads(self.request.body)
		try:
			validate(body_json, event_schema)
			current_timestamp = int(time.time())
			body_json["create_time"] = current_timestamp
			body_json["update_time"] = current_timestamp
			event = insert_event(body_json)
			if event is None:
				return json_response(error='missing data field or wrong data type')

			for channel in body_json["channels"]:
				insert_event_channel(event_id=event.id, channel_id=channel['id'])

			return json_response(data=event)
		except ValidationError:
			return json_response(error='missing data field or wrong data type')
Example #13
0
 def post(self, *args, **kwargs):
     event_id = int(self.kwargs.get('event_id'))
     body_json = json.loads(self.request.body)
     try:
         validate(body_json, comment_schema)
         timestamp = time.time()
         comment_data = {
             'user_id': body_json['user_id'],
             'event_id': event_id,
             'content': body_json['content'],
             'create_time': timestamp,
             'update_time': timestamp
         }
         insert_comment(comment_data)
         return json_response(data='Comment posted')
     except ValidationError:
         return json_response(error='Invalid input data')
Example #14
0
    def get(self, *args, **kwargs):
        event_id = int(self.kwargs.get('event_id'))
        base = int(self.request.GET.get('base', 0))
        offset = min(int(self.request.GET.get('offset', PAGING_SIZE)),
                     PAGING_SIZE)

        likes = get_like_of_event(event_id, base, offset)
        users_id = [like.user_id for like in likes]
        user_data = get_user_by_ids(users_id)

        return json_response(data=user_data)
Example #15
0
    def get(self, *args, **kwargs):
        event_id = int(self.kwargs.get('event_id'))
        base = self.request.GET.get('base', 0)
        offset = min(int(self.request.GET.get('offset', PAGING_SIZE)),
                     PAGING_SIZE)
        comments = get_event_comments(event_id, base, offset)

        return json_response(data={
            'base': base,
            'offset': len(comments),
            'comments': comments
        })
Example #16
0
	def get(self, *args, **kwargs):
		raw_conditions = {
			'start_date__gte': self.request.GET.get('from'),
			'end_date__lte': self.request.GET.get('to'),
			'location': self.request.GET.get('location')
		}

		base = int(self.request.GET.get('base', 0))
		offset = min(int(self.request.GET.get('offset', PAGING_SIZE)), PAGING_SIZE)

		filtered_conditions = {k: v for k, v in raw_conditions.items() if v is not None}
		if self.request.GET.get('channels') is not None:
			channels = self.request.GET.get('channels').split(',')
			events = get_events_with_channels(filtered_conditions, channels, base, offset)
		else:
			events = get_events(filtered_conditions, base, offset)

		if events is None or len(events) == 0:
			return json_response(data=[])

		user_data = self.request.user_data

		event_ids = [event['id'] for event in events]

		count_like_map = get_events_like_count(event_ids)
		count_participation_map = get_events_participation_count(event_ids)
		events_user_liked = get_events_user_liked(user_data['id'])
		events_user_participated = get_events_user_participated(user_data['id'])
		events_channels = get_events_channels(event_ids)
		event_images = get_events_images(event_ids)

		for event in events:
			event['channels'] = events_channels.get(event.get('id'), None)
			event['image_urls'] = event_images.get(event.get('id'), None)
			event['count_like'] = count_like_map[event.get('id')] if event.get('id') in count_like_map else 0
			event['count_participation'] = count_participation_map[event.get('id')] if event.get(
				'id') in count_participation_map else 0
			event['has_liked'] = event['id'] in events_user_liked
			event['has_participated'] = event['id'] in events_user_participated
		return json_response(data=events)
Example #17
0
    def post(self, *args, **kwargs):
        body_json = json.loads(self.request.body)
        try:
            validate(body_json, user_register_schema)
            username = body_json.get('username')
            random_key = cache.get('{}_registerkey'.format(username))
            if random_key is None:
                return json_response(error='Invalid user register')

            password = decrypt(body_json.get('password'), random_key)
            salt = bcrypt.gensalt()

            email = body_json.get('email')
            if not validate_email(email):
                return json_response(error='Invalid email')

            fullname = body_json.get('fullname')
            if not validate_fullname(fullname):
                return json_response(error='Invalid fullname')

            user = insert_user({
                'username': username,
                'email': email,
                'fullname': fullname,
                'salt': salt,
                'salted_password': hasher(password, salt)
            })
            if user is None:
                return json_response(error='Register user unsuccessful')
            return json_response(data={'msg': 'User registered'})
        except ValidationError as exception:
            return json_response(error=exception.message)
Example #18
0
    def post(self, *args, **kwargs):
        body_json = json.loads(self.request.body)
        username = body_json.get('username')

        user = cache.get('{}_userinfo'.format(username))
        if user is None:
            user = model_to_dict(get_user_by_username(username))
            if user is None:
                return json_response(error='Username does not exist')

        random_key = cache.get('{}_key'.format(username))
        if random_key is None:
            random_key = string_generator(RANDOM_KEY_LENGTH)

        cache.set('{}_key'.format(username),
                  random_key,
                  time=LOGIN_CACHE_TIMEOUT,
                  noreply=True)
        cache.set('{}_userinfo'.format(username),
                  user,
                  time=SESSION_TIMEOUT,
                  noreply=True)

        return json_response(data={'key': random_key})
Example #19
0
    def get(self, *args, **kwargs):
        event_id = int(self.kwargs.get('event_id'))
        base = int(self.request.GET.get('base', 0))
        offset = min(int(self.request.GET.get('offset', PAGING_SIZE)),
                     PAGING_SIZE)

        list_participant = cache.get('participation_' + str(event_id))
        if list_participant is None:
            list_participant = get_participation_of_event(
                event_id, base, offset)
            cache.set('participation_' + str(event_id), list_participant,
                      SINGLE_DAY)

        users_id = [participant.user_id for participant in list_participant]
        user_data = get_user_by_ids(users_id)

        return json_response(data=user_data)
Example #20
0
	def delete(self, *args, **kwargs):
		event_id = int(self.kwargs.get('event_id'))
		row_affected = delete_event(event_id)
		if row_affected is None or row_affected[0] == 0:
			return json_response(error='Event not found')
		return json_response(data={'msg': 'deleted event {}'.format(event_id)})
Example #21
0
 def post(self, *args, **kwargs):
     event_id = int(self.kwargs.get('event_id'))
     user_data = self.request.user_data
     insert_like(event_id, user_data['id'])
     return json_response(data={'msg': 'liked'})
Example #22
0
 def get(self, *args, **kwargs):
     base = int(self.request.GET.get('base', 0))
     offset = min(int(self.request.GET.get('offset', PAGING_SIZE)),
                  PAGING_SIZE)
     channels = get_channels(base, offset)
     return json_response(data=channels)
Example #23
0
 def _inner_function(*args, **kwargs):
     try:
         return func(*args, **kwargs)
     except Exception as exception:
         log.error(exception.message)
         return json_response(error=exception.message)