Esempio n. 1
0
  def post(self):
    next_page = self.get_argument('next', '')
    next_page += "&finished=true"
    close_popup = self.get_argument('close_popup', '')
    email = self.get_argument('email', '')
    subscribe_to = self.get_argument('subscribe_to', '')
    error = ''
    status = ''
    slug = ''
    if close_popup != '':
      status = 'close_popup'

    # get the current user's email value
    user = userdb.get_user_by_screen_name(self.current_user)
    if user:
      # Clear the existing email address
      if email == '':
        if subscribe_to == '':
          user['email_address'] = ''
          self.set_secure_cookie('email_address', '')
          userdb.save_user(user)
          error = 'Your email address has been cleared.'
      else:
        # make sure someone else isn't already using this email
        existing = userdb.get_user_by_email(email)
        if existing and existing['user']['id_str'] != user['user']['id_str']:
          error = 'This email address is already in use.'
        else:
          # OK to save as user's email
          user['email_address'] = email
          userdb.save_user(user)
          self.set_secure_cookie('email_address', email)

          if subscribe_to != '':
            post = postsdb.get_post_by_slug(subscribe_to)
            if post:
              slug = post['slug']
              
            # Attempt to create the post's thread
            thread_id = 0
            try:
              # Attempt to create the thread.
              thread_details = disqus.create_thread(post, user['disqus_access_token'])
              thread_id = thread_details['response']['id']
            except:
              try:
                # trouble creating the thread, try to just get the thread via the slug
                thread_details = disqus.get_thread_details(slug)
                thread_id = thread_details['response']['id']
              except:
                thread_id = 0

            if thread_id != 0:
              # Subscribe a user to the thread specified in response
              disqus.subscribe_to_thread(thread_id, user['disqus_access_token'])
    
    self.redirect("/user/%s/settings?msg=updated" % user['user']['screen_name'])
Esempio n. 2
0
    def post(self):
        sort_by = self.get_argument('sort_by', 'hot')
        page = abs(int(self.get_argument('page', '1')))
        per_page = abs(int(self.get_argument('per_page', '9')))
        is_blacklisted = False
        msg = 'success'
        if self.current_user:
            is_blacklisted = self.is_blacklisted(self.current_user)

        post = {}
        post['slug'] = self.get_argument('slug', None)
        post['title'] = self.get_argument('title', '')
        post['url'] = self.get_argument('url', '')
        post['body_raw'] = self.get_argument('body_raw', '')
        post['tags'] = self.get_argument('tags', '').split(',')
        post['featured'] = self.get_argument('featured', '')
        post['has_hackpad'] = self.get_argument('has_hackpad', '')
        post['slug'] = self.get_argument('slug', '')
        post['sort_score'] = 0
        post['daily_sort_score'] = 0
        if post['has_hackpad'] != '':
            post['has_hackpad'] = True
        else:
            post['has_hackpad'] = False

        deleted = self.get_argument('deleted', '')
        if deleted != '':
            post['deleted'] = True
            post['date_deleted'] = datetime.datetime.now()

        bypass_dup_check = self.get_argument('bypass_dup_check', '')
        is_edit = False
        if post['slug']:
            bypass_dup_check = "true"
            is_edit = True

        dups = []

        # make sure user isn't blacklisted
        if not self.is_blacklisted(self.current_user):
            # check if there is an existing URL
            if post['url'] != '':
                url = urlparse(post['url'])
                netloc = url.netloc.split('.')
                if netloc[0] == 'www':
                    del netloc[0]
                path = url.path
                if path and path[-1] == '/':
                    path = path[:-1]
                url = '%s%s' % ('.'.join(netloc), path)
                post['normalized_url'] = url

                long_url = post['url']
                if long_url.find('goo.gl') > -1:
                    long_url = google.expand_url(post['url'])
                if long_url.find('bit.ly') > -1 or long_url.find(
                        'bitly.com') > -1:
                    long_url = bitly.expand_url(post['url'].replace(
                        'http://bitly.com', '').replace('http://bit.ly', ''))
                post['domain'] = urlparse(long_url).netloc

            ok_to_post = True
            dups = postsdb.get_posts_by_normalized_url(
                post.get('normalized_url', ""), 1)
            if post['url'] != '' and len(
                    dups) > 0 and bypass_dup_check != "true":
                ##
                ## If there are dupes, kick them back to the post add form
                ##
                return (self.render('post/new_post.html', post=post,
                                    dups=dups))

            # Handle tags
            post['tags'] = [t.strip().lower() for t in post['tags']]
            post['tags'] = [t for t in post['tags'] if t]
            userdb.add_tags_to_user(self.current_user, post['tags'])
            for tag in post['tags']:
                tagsdb.save_tag(tag)

            # format the content as needed
            post['body_html'] = sanitize.html_sanitize(
                post['body_raw'],
                media=self.current_user_can('post_rich_media'))
            post['body_text'] = sanitize.html_to_text(post['body_html'])
            post['body_truncated'] = sanitize.truncate(post['body_text'], 500)

            # determine if this should be a featured post or not
            if self.current_user_can(
                    'feature_posts') and post['featured'] != '':
                post['featured'] = True
                post['date_featured'] = datetime.datetime.now()
            else:
                post['featured'] = False
                post['date_featured'] = None

            user = userdb.get_user_by_screen_name(self.current_user)

            if not post['slug']:
                # No slug -- this is a new post.
                # initiate fields that are new
                post['disqus_shortname'] = settings.get('disqus_short_code')
                post['muted'] = False
                post['comment_count'] = 0
                post['disqus_thread_id_str'] = ''
                post['sort_score'] = 0.0
                post['downvotes'] = 0
                post['hackpad_url'] = ''
                post['date_created'] = datetime.datetime.now()
                post['user_id_str'] = user['user']['id_str']
                post['username'] = self.current_user
                post['user'] = user['user']
                post['votes'] = 1
                post['voted_users'] = [user['user']]
                #save it
                post['slug'] = postsdb.insert_post(post)
                msg = 'success'
            else:
                # this is an existing post.
                # attempt to edit the post (make sure they are the author)
                saved_post = postsdb.get_post_by_slug(post['slug'])
                if saved_post and self.current_user == saved_post['user'][
                        'screen_name']:
                    # looks good - let's update the saved_post values to new values
                    for key in post.keys():
                        saved_post[key] = post[key]
                    # finally let's save the updates
                    postsdb.save_post(saved_post)
                    msg = 'success'

            # log any @ mentions in the post
            mentions = re.findall(r'@([^\s]+)', post['body_raw'])
            for mention in mentions:
                mentionsdb.add_mention(mention.lower(), post['slug'])

        # Send email to USVers if OP is staff
        if self.current_user in settings.get('staff'):
            subject = 'USV.com: %s posted "%s"' % (self.current_user,
                                                   post['title'])
            if 'url' in post and post[
                    'url']:  # post.url is the link to external content (if any)
                post_link = 'External Link: %s \n\n' % post['url']
            else:
                post_link = ''
            post_url = "http://%s/posts/%s" % (settings.get('base_url'),
                                               post['slug'])
            text = '"%s" ( %s ) posted by %s. \n\n %s %s' % (
                post['title'].encode('ascii', errors='ignore'), post_url,
                self.current_user, post_link, post.get('body_text', ""))
            # now attempt to actually send the emails
            for u in settings.get('staff'):
                if u != self.current_user:
                    acc = userdb.get_user_by_screen_name(u)
                    if acc:
                        self.send_email('*****@*****.**', acc['email_address'],
                                        subject, text)

        # Subscribe to Disqus
        # Attempt to create the post's thread
        acc = userdb.get_user_by_screen_name(self.current_user)
        thread_id = 0
        try:
            # Attempt to create the thread.
            thread_details = disqus.create_thread(
                post, acc['disqus']['access_token'])
            thread_id = thread_details['response']['id']
        except:
            try:
                # trouble creating the thread, try to just get the thread via the slug
                thread_details = disqus.get_thread_details(post)
                thread_id = thread_details['response']['id']
            except:
                thread_id = 0
        if thread_id != 0:
            # Subscribe a user to the thread specified in response
            disqus.subscribe_to_thread(thread_id,
                                       acc['disqus']['access_token'])
            # update the thread with the disqus_thread_id_str
            saved_post = postsdb.get_post_by_slug(post['slug'])
            saved_post['disqus_thread_id_str'] = thread_id
            postsdb.save_post(saved_post)

        if is_edit:
            self.redirect('/posts/%s?msg=updated' % post['slug'])
        else:
            self.redirect('/?msg=success&slug=%s' % post['slug'])
Esempio n. 3
0
  def post(self):
    sort_by = self.get_argument('sort_by', 'hot')
    page = abs(int(self.get_argument('page', '1')))
    per_page = abs(int(self.get_argument('per_page', '9')))
    is_blacklisted = False
    msg = 'success'
    if self.current_user:
      is_blacklisted = self.is_blacklisted(self.current_user)
    
    post = {}
    post['slug'] = self.get_argument('slug', None)
    post['title'] = self.get_argument('title', '')
    post['url'] = self.get_argument('url', '')
    post['body_raw'] = self.get_argument('body_raw', '')
    post['tags'] = self.get_argument('tags', '').split(',')
    post['featured'] = self.get_argument('featured', '')
    post['has_hackpad'] = self.get_argument('has_hackpad', '')
    post['slug'] = self.get_argument('slug', '')
    post['sort_score'] = 0
    post['daily_sort_score'] = 0
    if post['has_hackpad'] != '':
      post['has_hackpad'] = True
    else:
      post['has_hackpad'] = False

    deleted = self.get_argument('deleted', '')
    if deleted != '':
      post['deleted'] = True
      post['date_deleted'] = datetime.datetime.now()

    bypass_dup_check = self.get_argument('bypass_dup_check', '')
    is_edit = False
    if post['slug']:
      bypass_dup_check = "true"
      is_edit = True

    dups = []

    # make sure user isn't blacklisted
    if not self.is_blacklisted(self.current_user):
      # check if there is an existing URL
      if post['url'] != '':
        url = urlparse(post['url'])
        netloc = url.netloc.split('.')
        if netloc[0] == 'www':
          del netloc[0]
        path = url.path
        if path and path[-1] == '/':
          path = path[:-1]
        url = '%s%s' % ('.'.join(netloc), path)
        post['normalized_url'] = url

        long_url = post['url']
        if long_url.find('goo.gl') > -1:
          long_url = google.expand_url(post['url'])
        if long_url.find('bit.ly') > -1 or long_url.find('bitly.com') > -1:
          long_url = bitly.expand_url(post['url'].replace('http://bitly.com','').replace('http://bit.ly',''))
        post['domain'] = urlparse(long_url).netloc

      ok_to_post = True
      dups = postsdb.get_posts_by_normalized_url(post.get('normalized_url', ""), 1)
      if post['url'] != '' and len(dups) > 0 and bypass_dup_check != "true":
        ## 
        ## If there are dupes, kick them back to the post add form
        ##
        return (self.render('post/new_post.html', post=post, dups=dups))
        
      # Handle tags
      post['tags'] = [t.strip().lower() for t in post['tags']]
      post['tags'] = [t for t in post['tags'] if t]
      userdb.add_tags_to_user(self.current_user, post['tags'])
      for tag in post['tags']:
        tagsdb.save_tag(tag)

      # format the content as needed
      post['body_html'] = sanitize.html_sanitize(post['body_raw'], media=self.current_user_can('post_rich_media'))
      post['body_text'] = sanitize.html_to_text(post['body_html'])
      post['body_truncated'] = sanitize.truncate(post['body_text'], 500)

      # determine if this should be a featured post or not
      if self.current_user_can('feature_posts') and post['featured'] != '':
        post['featured'] = True
        post['date_featured'] = datetime.datetime.now()
      else:
        post['featured'] = False
        post['date_featured'] = None

      user = userdb.get_user_by_screen_name(self.current_user)

      if not post['slug']:
        # No slug -- this is a new post.
        # initiate fields that are new
        post['disqus_shortname'] = settings.get('disqus_short_code')
        post['muted'] = False
        post['comment_count'] = 0
        post['disqus_thread_id_str'] = ''
        post['sort_score'] = 0.0
        post['downvotes'] = 0
        post['hackpad_url'] = ''
        post['date_created'] = datetime.datetime.now()
        post['user_id_str'] = user['user']['id_str']
        post['username'] = self.current_user
        post['user'] = user['user']
        post['votes'] = 1
        post['voted_users'] = [user['user']]
        #save it
        post['slug'] = postsdb.insert_post(post)
        msg = 'success'
      else:
        # this is an existing post.
        # attempt to edit the post (make sure they are the author)
        saved_post = postsdb.get_post_by_slug(post['slug'])
        if saved_post and self.current_user == saved_post['user']['screen_name']:
          # looks good - let's update the saved_post values to new values
          for key in post.keys():
            saved_post[key] = post[key]
          # finally let's save the updates
          postsdb.save_post(saved_post)
          msg = 'success'

      # log any @ mentions in the post
      mentions = re.findall(r'@([^\s]+)', post['body_raw'])
      for mention in mentions:
        mentionsdb.add_mention(mention.lower(), post['slug'])

    # Send email to USVers if OP is staff
    if self.current_user in settings.get('staff'):
      subject = 'USV.com: %s posted "%s"' % (self.current_user, post['title'])
      if 'url' in post and post['url']: # post.url is the link to external content (if any)
        post_link = 'External Link: %s \n\n' % post['url']
      else:
        post_link = ''
      post_url = "http://%s/posts/%s" % (settings.get('base_url'), post['slug'])
      text = '"%s" ( %s ) posted by %s. \n\n %s %s' % (post['title'].encode('ascii', errors='ignore'), post_url, self.current_user, post_link, post.get('body_text', ""))
      # now attempt to actually send the emails
      for u in settings.get('staff'):
        if u != self.current_user:
          acc = userdb.get_user_by_screen_name(u)
          if acc:
            self.send_email('*****@*****.**', acc['email_address'], subject, text)
  
    # Subscribe to Disqus
    # Attempt to create the post's thread
    acc = userdb.get_user_by_screen_name(self.current_user)
    thread_id = 0
    try:
      # Attempt to create the thread.
      thread_details = disqus.create_thread(post, acc['disqus']['access_token'])
      thread_id = thread_details['response']['id']
    except:
      try:
        # trouble creating the thread, try to just get the thread via the slug
        thread_details = disqus.get_thread_details(post)
        thread_id = thread_details['response']['id']
      except:
        thread_id = 0
    if thread_id != 0:
      # Subscribe a user to the thread specified in response
      disqus.subscribe_to_thread(thread_id, acc['disqus']['access_token'])
      # update the thread with the disqus_thread_id_str
      saved_post = postsdb.get_post_by_slug(post['slug'])
      saved_post['disqus_thread_id_str'] = thread_id
      postsdb.save_post(saved_post)

    if is_edit:
      self.redirect('/posts/%s?msg=updated' % post['slug'])
    else:
      self.redirect('/?msg=success&slug=%s' % post['slug'])
    def post(self):
        next_page = self.get_argument('next', '')
        next_page += "&finished=true"
        close_popup = self.get_argument('close_popup', '')
        email = self.get_argument('email', '')
        subscribe_to = self.get_argument('subscribe_to', '')
        error = ''
        status = ''
        slug = ''
        if close_popup != '':
            status = 'close_popup'

        # get the current user's email value
        user = userdb.get_user_by_screen_name(self.current_user)
        if user:
            # Clear the existing email address
            if email == '':
                if subscribe_to == '':
                    user['email_address'] = ''
                    self.set_secure_cookie('email_address', '')
                    userdb.save_user(user)
                    error = 'Your email address has been cleared.'
            else:
                # make sure someone else isn't already using this email
                existing = userdb.get_user_by_email(email)
                if existing and existing['user']['id_str'] != user['user'][
                        'id_str']:
                    error = 'This email address is already in use.'
                else:
                    # OK to save as user's email
                    user['email_address'] = email
                    userdb.save_user(user)
                    self.set_secure_cookie('email_address', email)

                    if subscribe_to != '':
                        post = postsdb.get_post_by_slug(subscribe_to)
                        if post:
                            slug = post['slug']

                        # Attempt to create the post's thread
                        thread_id = 0
                        try:
                            # Attempt to create the thread.
                            thread_details = disqus.create_thread(
                                post, user['disqus_access_token'])
                            thread_id = thread_details['response']['id']
                        except:
                            try:
                                # trouble creating the thread, try to just get the thread via the slug
                                thread_details = disqus.get_thread_details(
                                    post)
                                thread_id = thread_details['response']['id']
                            except:
                                thread_id = 0

                        if thread_id != 0:
                            # Subscribe a user to the thread specified in response
                            disqus.subscribe_to_thread(
                                thread_id, user['disqus_access_token'])

        #save email prefs
        user['wants_daily_email'] = self.get_argument('wants_daily_email',
                                                      False)
        if user['wants_daily_email'] == "on":
            user['wants_daily_email'] = True

        user['wants_email_alerts'] = self.get_argument('wants_email_alerts',
                                                       False)
        if user['wants_email_alerts'] == "on":
            user['wants_email_alerts'] = True

        userdb.save_user(user)

        self.redirect("/user/%s/settings?msg=updated" %
                      user['user']['screen_name'])
Esempio n. 5
0
    def post(self):
        sort_by = self.get_argument("sort_by", "hot")
        page = abs(int(self.get_argument("page", "1")))
        per_page = abs(int(self.get_argument("per_page", "9")))
        is_blacklisted = False
        msg = "success"
        if self.current_user:
            is_blacklisted = self.is_blacklisted(self.current_user)

        post = {}
        post["slug"] = self.get_argument("slug", None)
        post["title"] = self.get_argument("title", "")
        post["url"] = self.get_argument("url", "")
        post["body_raw"] = self.get_argument("body_raw", "")
        post["tags"] = self.get_argument("tags", "").split(",")
        post["featured"] = self.get_argument("featured", "")
        post["has_hackpad"] = self.get_argument("has_hackpad", "")
        post["slug"] = self.get_argument("slug", "")
        if post["has_hackpad"] != "":
            post["has_hackpad"] = True
        else:
            post["has_hackpad"] = False

        deleted = self.get_argument("deleted", "")
        if deleted != "":
            post["deleted"] = True
            post["date_deleted"] = datetime.now()

        bypass_dup_check = self.get_argument("bypass_dup_check", "")
        is_edit = False
        if post["slug"]:
            bypass_dup_check = "true"
            is_edit = True

        dups = []

        # make sure user isn't blacklisted
        if not self.is_blacklisted(self.current_user):
            # check if there is an existing URL
            if post["url"] != "":
                url = urlparse(post["url"])
                netloc = url.netloc.split(".")
                if netloc[0] == "www":
                    del netloc[0]
                path = url.path
                if path and path[-1] == "/":
                    path = path[:-1]
                url = "%s%s" % (".".join(netloc), path)
                post["normalized_url"] = url

                long_url = post["url"]
                if long_url.find("goo.gl") > -1:
                    long_url = google.expand_url(post["url"])
                if long_url.find("bit.ly") > -1 or long_url.find("bitly.com") > -1:
                    long_url = bitly.expand_url(
                        post["url"].replace("http://bitly.com", "").replace("http://bit.ly", "")
                    )
                post["domain"] = urlparse(long_url).netloc

            ok_to_post = True
            dups = postsdb.get_posts_by_normalized_url(post.get("normalized_url", ""), 1)
            if post["url"] != "" and len(dups) > 0 and bypass_dup_check != "true":
                ##
                ## If there are dupes, kick them back to the post add form
                ##
                return self.render("post/new_post.html", post=post, dups=dups)

            # Handle tags
            post["tags"] = [t.strip().lower() for t in post["tags"]]
            post["tags"] = [t for t in post["tags"] if t]
            userdb.add_tags_to_user(self.current_user, post["tags"])
            for tag in post["tags"]:
                tagsdb.save_tag(tag)

            # format the content as needed
            post["body_html"] = sanitize.html_sanitize(post["body_raw"], media=self.current_user_can("post_rich_media"))
            post["body_text"] = sanitize.html_to_text(post["body_html"])
            post["body_truncated"] = sanitize.truncate(post["body_text"], 500)

            # determine if this should be a featured post or not
            if self.current_user_can("feature_posts") and post["featured"] != "":
                post["featured"] = True
                post["date_featured"] = datetime.now()
            else:
                post["featured"] = False
                post["date_featured"] = None

            user = userdb.get_user_by_screen_name(self.current_user)

            if not post["slug"]:
                # No slug -- this is a new post.
                # initiate fields that are new
                post["disqus_shortname"] = settings.get("disqus_short_code")
                post["muted"] = False
                post["comment_count"] = 0
                post["disqus_thread_id_str"] = ""
                post["sort_score"] = 0.0
                post["downvotes"] = 0
                post["hackpad_url"] = ""
                post["date_created"] = datetime.now()
                post["user_id_str"] = user["user"]["id_str"]
                post["username"] = self.current_user
                post["user"] = user["user"]
                post["votes"] = 1
                post["voted_users"] = [user["user"]]
                # save it
                post["slug"] = postsdb.insert_post(post)
                msg = "success"
            else:
                # this is an existing post.
                # attempt to edit the post (make sure they are the author)
                saved_post = postsdb.get_post_by_slug(post["slug"])
                if saved_post and self.current_user == saved_post["user"]["screen_name"]:
                    # looks good - let's update the saved_post values to new values
                    for key in post.keys():
                        saved_post[key] = post[key]
                    # finally let's save the updates
                    postsdb.save_post(saved_post)
                    msg = "success"

            # log any @ mentions in the post
            mentions = re.findall(r"@([^\s]+)", post["body_raw"])
            for mention in mentions:
                mentionsdb.add_mention(mention.lower(), post["slug"])

        # Send email to USVers if OP is staff
        if self.current_user in settings.get("staff"):
            subject = 'USV.com: %s posted "%s"' % (self.current_user, post["title"])
            if "url" in post and post["url"]:  # post.url is the link to external content (if any)
                post_link = "External Link: %s \n\n" % post["url"]
            else:
                post_link = ""
            post_url = "http://%s/posts/%s" % (settings.get("base_url"), post["slug"])
            text = '"%s" ( %s ) posted by %s. \n\n %s %s' % (
                post["title"].encode("ascii", errors="ignore"),
                post_url,
                self.current_user,
                post_link,
                post.get("body_text", ""),
            )
            # now attempt to actually send the emails
            for u in settings.get("staff"):
                if u != self.current_user:
                    acc = userdb.get_user_by_screen_name(u)
                    if acc:
                        self.send_email("*****@*****.**", acc["email_address"], subject, text)

        # Subscribe to Disqus
        # Attempt to create the post's thread
        acc = userdb.get_user_by_screen_name(self.current_user)
        thread_id = 0
        try:
            # Attempt to create the thread.
            thread_details = disqus.create_thread(post, acc["disqus_access_token"])
            thread_id = thread_details["response"]["id"]
        except:
            try:
                # trouble creating the thread, try to just get the thread via the slug
                thread_details = disqus.get_thread_details(post.slug)
                thread_id = thread_details["response"]["id"]
            except:
                thread_id = 0
        if thread_id != 0:
            # Subscribe a user to the thread specified in response
            disqus.subscribe_to_thread(thread_id, acc["disqus_access_token"])
            # update the thread with the disqus_thread_id_str
            saved_post = postsdb.get_post_by_slug(post["slug"])
            saved_post["disqus_thread_id_str"] = thread_id
            postsdb.save_post(saved_post)

        featured_posts = postsdb.get_featured_posts(6, 1)
        sort_by = "newest"
        posts = postsdb.get_new_posts(per_page, page)

        if is_edit:
            self.redirect("/posts/%s?msg=updated" % post["slug"])
        else:
            self.render(
                "post/lists_posts.html",
                sort_by=sort_by,
                msg=msg,
                page=page,
                posts=posts,
                featured_posts=featured_posts,
                is_blacklisted=is_blacklisted,
                new_post=post,
                dups=dups,
            )