Beispiel #1
0
    def post(self):
        if self.request.get('_put'):
            self.put()
            return

        name = self.request.get('name')
        member_ids = self.request.get_all('member_uuid')
        public = self.request.get('public')

        user = api.get_user(self.request)
        if not user:
            api.write_error(self.response, 400, 'Unknown or missing user')
            return

        group = Group(uuid=str(uuid.uuid4()))
        group.admins.append(user.key)
        group.members.append(user.key)
        group.name = name
        if 'public' in self.request.params and not public == '':
            group.public = public.lower() in ("yes", "true", "t", "1", "on")
        for member_id in member_ids:
            member = User.query(User.uuid == member_id).get()
            if member:
                group.members.append(member.key)
        group.put()
        if group.public:
            api.search.update_public_index(group)
        else:
            api.search.update_private_index(group, user.uuid)

        api.write_message(self.response, 'success', extra={'groups' : [ get_group_json(group) ]})
Beispiel #2
0
 def get(self, recipe_id):
   # check if ID is found in recipe database
   recipe = Recipe.get_by_id(int(recipe_id))
   if not recipe : 
     error = "That recipe was not found."
     template_values = { 'error' : error }
   else : 
     # check if this recipe belongs to user
     if recipe.author == UserId() :
       isOwner = True
     else :
       isOwner = False
     recipe_author_name = User.query().filter(User.user_id == recipe.author).fetch(1)[0].name
     recipe_author_pic = User.query().filter(User.user_id == recipe.author).fetch(1)[0].picUrl()
     template_values = { 'recipe_author_pic' : recipe_author_pic, 'title': recipe.name, 'recipe' : recipe, 'isOwner' : isOwner, 'header': GetHeader('recipe'), 'recipe_author_name': recipe_author_name } 
   IndividualRecipe = jinja_environment.get_template('templates/recipes_individual.html').render(template_values)
   self.response.write(IndividualRecipe)
Beispiel #3
0
def get_user(request):
    try:
        auth_header = request.headers['Authorization']
    except KeyError:
        auth_header = request.get('auth')

    if auth_header:
        uuid, auth = get_uuid_auth(auth_header)
        if uuid and auth:
            user = User.query(User.uuid == uuid).get()
            if user and user.auth == auth:
                return user

    return None
Beispiel #4
0
    def get(self):
        uuid = self.request.get('uuid')

        user = api.get_user(self.request)
        if not user:
            api.write_error(self.response, 403, 'Unknown or missing user')
            return

        json = None
        if uuid:
            other = User.query(User.uuid == uuid).get()
            if other:
                json = get_user_json(other)

        if not json:
            json = get_user_json(user, public=False)

        api.write_message(self.response, 'success', extra={'users' : [json]})
Beispiel #5
0
  def get(self):
    # check if user is already in database
    rawRecipes = Recipe.query().fetch()
    recipes = []
    for rawRecipe in rawRecipes : 
      if rawRecipe.image :
        recipes.append({
          'name': rawRecipe.name, 
          'latlng': str(rawRecipe.location), 
          'location': rawRecipe.location_name, 
          'cooktime': rawRecipe.cooktime, 
          'image': '<div style="background-image: url(' + rawRecipe.imageUrl() + ')"></div>',
          'servings': rawRecipe.servings, 
          'ingredients': json.dumps(rawRecipe.ingredients),
          'recipeUrl' : rawRecipe.viewUrl()
        })
      else :
        recipes.append({
          'name': rawRecipe.name, 
          'latlng': str(rawRecipe.location), 
          'location': rawRecipe.location_name, 
          'cooktime': rawRecipe.cooktime, 
          'servings': rawRecipe.servings, 
          'ingredients': json.dumps(rawRecipe.ingredients),
          'recipeUrl' : rawRecipe.viewUrl()
        })    
    user = users.get_current_user()
    name = user.nickname()
    userID = user.user_id()
    dbUser = User.query().filter(User.user_id == userID).fetch(1)

    if UserInfo() : 
      name = dbUser[0].name
      template_values = { 'name': name }
      firstTime = False
    else :
      newUser = User(user_id=userID, name=name, savedRecipes=[''])
      newUser.put()
      name = user.nickname()
      firstTime = True

    template_values = { 'title': 'Homepage', 'recipes': json.dumps(recipes), 'header': GetHeader('homepage'), 'logout_url': users.create_logout_url('/'), 'first_time': firstTime }
    Homepage = jinja_environment.get_template('templates/homepage.html').render(template_values)
    self.response.write(Homepage)
Beispiel #6
0
 def post(self):
   data = json.loads(self.request.body)
   recipe = Recipe.get_by_id(int( data['recipeID'] ))
   # check if user has already saved this recipe
   dbUser = User.query().filter(User.user_id == UserId()).fetch(1)
   user = dbUser[0]
   matches = 0
   for savedRecipe in user.savedRecipes :
     if savedRecipe == data['recipeID'] :
       matches += 1
       break;
   if matches == 0 :
     if recipe.thumbsUp == None :
       recipe.thumbsUp = 1
     else :
       recipe.thumbsUp += 1
     recipe.put()
     user.savedRecipes.append( data['recipeID'] );
     user.put()
   self.response.write(json.dumps(({'recipe_thumbsUp': recipe.thumbsUp, 'net_thumbs': recipe.thumbsUp})))
Beispiel #7
0
 def get(self, author_id):
   # check if there is user that corresponds with the ID
   author = User.query().filter(User.user_id == author_id).fetch()
   if author : 
     # check if the user has any recipes
     recipes = Recipe.query().filter(Recipe.author == author_id).fetch()
     if recipes : 
       template_values = { 'header': GetHeader('recipe'), 'recipes' : recipes, 'author' : author[0].name ,'author_bio' : author[0].bio , 'title' : 'Recipes by ' + author[0].name}
       if author[0].pic :
         template_values['author_pic'] = author[0].picUrl()
       if author[0].location :
         template_values['author_location'] = author[0].location
     else : 
       error = "This user has not uploaded any recipes."
       template_values = { 'header': GetHeader('recipe'), 'title': 'Error', 'error' : error }
   else : 
     error = "This user doesn't not exist."
     template_values = { 'header': GetHeader('recipe'), 'title': 'Error', 'error' : error }
   RecipesBy = jinja_environment.get_template('templates/recipes_by.html').render(template_values)
   self.response.write(RecipesBy)
Beispiel #8
0
    def get(self):
        tags = self.request.get('tags')
        public = self.request.get('public')

        user = api.get_user(self.request)
        if not user:
            api.write_error(self.response, 400, 'Unknown or missing user')
            return

        if public:
            user = User.query(User.uuid == config.SUPER_USER_UUID).get()

        cards = []
        if tags:
            tags = tags.lower().split(',')
            query = Card.query(Card.tags.IN(tags),
                               ancestor=user.key).order(-Card.create_time)
        else:
            query = Card.query(ancestor=user.key).order(-Card.create_time)

        for card in query:
            cards.append(get_card_json(card))

        api.write_message(self.response, 'success', extra={'cards': cards})
Beispiel #9
0
def UserInfo() :
  user = users.get_current_user()
  name = user.nickname()
  userID = UserId()
  dbUser = User.query().filter(User.user_id == userID).fetch(1)
  return dbUser
    def load_user_obj(self, user_name):

        logging.info("Trying to load user with user name - " +
                     user_name.lower())
        self.user_obj = User.query(User.name == user_name.lower()).get()
Beispiel #11
0
    def post(self):
        email = self.request.get('email')
        push_token = self.request.get('token')
        device_type = self.request.get('type')

        user_uuid = self.request.get('uuid')
        code = self.request.get('code')
        if user_uuid and code:
            code = int(code)
            user = User.query(User.uuid == user_uuid).get()

            if not user or not user.recovery:
                api.write_error(self.response, 404, 'User not found')
                return

            if not user.recovery.code == code:
                api.write_error(self.response, 403, 'Invalid recovery code')
                return

            if (datetime.datetime.now() - user.recovery.time).seconds > (15 * 60):
                api.write_error(self.response, 403, 'Old recovery code')
                return

            user.auth = str(uuid.uuid4())
            user.put()
            api.write_message(self.response, 'success',
                              extra={'users' : [get_user_json(user, public=False)]})
            return


        users = User.query(User.devices.data == email)
        if not users or users.count(limit=1) < 1:
            api.write_error(self.response, 404, 'User not found')
            return



        extra = {}
        push_token_found = False;
        first_user = None
        for user in users:
            if not user or not user.devices:
                continue
            if not first_user:
                first_user = user
            for device in user.devices:
                if not device.device_type in ['GOOGLE', 'APPLE', 'AMAZON']:
                    continue
                if device.device_type == device_type and device.data == push_token:
                    push_token_found = True
                    if device.device_type == 'GOOGLE':
                        user.auth = str(uuid.uuid4())
                        user.put()
                        user_json = get_user_json(user, public=False)
                        user_json['cards'] = []
                        api.gcm([push_token], {'user': user_json})
                    elif device.device_type == 'APPLE':
                        # Until we can deliver data to iOS app directly, use email for them
                        push_token_found = False

        if not push_token_found and first_user:
            # Is this correct to pick first user?
            if not first_user.recovery:
                first_user.recovery = Recovery()
            first_user.recovery.code = random.randint(1000, 9999)
            api.email(email, config.EMAIL_RECOVERY_SUBJECT,
                      config.EMAIL_RECOVERY_BODY % (first_user.recovery.code))
            first_user.put()
            extra = {'users' : [get_user_json(first_user)]}

        api.write_message(self.response, 'success', extra=extra)
Beispiel #12
0
    def put(self):
        uuid = self.request.get('group_uuid')
        name = self.request.get('name')
        admin_ids = self.request.get_all('admin_uuid')
        member_ids = self.request.get_all('member_uuid')
        public = self.request.get('public')

        if not uuid:
            api.write_error(self.response, 400, 'Missing required parameter, group_uuid')
            return

        user = api.get_user(self.request)
        if not user:
            api.write_error(self.response, 403, 'Unknown or missing user')
            return

        group = Group.query(Group.uuid == uuid).get()
        if not group:
            api.write_error(self.response, 404, 'Unknown or missing group')
            return

        if not user.key in group.admins:
            api.write_error(self.response, 403, 'User not allowed to update group')
            return

        if name:
            group.name = name
        if 'public' in self.request.params and not public == '':
            group.public = public.lower() in ("yes", "true", "t", "1", "on")

        for admin_id in admin_ids:
            remove_user = False
            if admin_id and admin_id[0] == '-':
                remove_user = True
                admin_id = admin_id[1:]
            admin = User.query(User.uuid == admin_id).get()
            if admin:
                if remove_user and admin.key in group.admins:
                    if len(group.admins) > 1:
                        group.admins.remove(admin.key)
                    else:
                        api.write_error(self.response, 403, 'Cannot remove last admin')
                        return
                elif not admin.key in group.admins:
                    group.admins.append(admin.key)
            else:
                logging.warn('Unknown user %s' % (admin_id))

        for member_id in member_ids:
            remove_user = False
            if member_id and member_id[0] == '-':
                remove_user = True
                member_id = member_id[1:]
            member = User.query(User.uuid == member_id).get()
            if member:
                if remove_user and member.key in group.members:
                    group.members.remove(member.key)
                elif not member.key in group.members:
                    group.members.append(member.key)
            else:
                logging.warn('Unknown user %s' % (member_id))
        group.put()
        if group.public:
            api.search.update_public_index(group)
        else:
            api.search.update_private_index(group, user.uuid)

        api.write_message(self.response, 'Updated group',
                          extra={'groups' : [ get_group_json(group) ]})