예제 #1
0
파일: main.py 프로젝트: skid/fofou
  def get(self):
    forum = Forum.from_url(self.request.path_info)
    user = users.get_current_user()
    is_admin = users.is_current_user_admin()
    
    if not forum or (forum.is_disabled and not is_admin):
      return self.redirect("/")
    
    if not is_admin and not self.settings.check_ip(self.request.remote_addr):
      return self.response.out.write('Your IP address has been banned')

    if not is_admin and not self.settings.check_user( user ):
      return self.redirect( users.create_login_url("/") )

    offset, topics = Topic.getlist(forum, is_admin=is_admin, offset=self.request.get("from") or None)
    for topic in topics:
      topic.excerpt = Post.gql("WHERE topic = :1 ORDER BY created_on", topic)[0].get_excerpt()

    tvals = {
      'user': user,
      'analytics_code': forum.analytics_code or "",
      'siteurl': self.request.url,
      'isadmin': is_admin,
      'forum' : forum,
      'forum_urls': [f.url for f in Forum.all()],
      'topics': topics,
      'offset': offset,
      'login_url': users.create_login_url(forum.root()),
      'logout_url': users.create_logout_url(forum.root())
    }

    self.template_out("skins/default/topic_list.html", tvals)
예제 #2
0
파일: main.py 프로젝트: skid/fofou
  def post(self):
    forum = Forum.from_url(self.request.path_info)
    is_admin = users.is_current_user_admin()

    # Only admins can move topics
    if not forum or not is_admin:
      return self.redirect("/")

    try:
      forumto = Forum.from_url(self.request.get('forumto'))
      topic = db.get( db.Key.from_path( 'Topic', int(self.request.get('id')) ) )
    except ValueError:
      return self.redirect(forum.root())

    if topic and forumto:
      topic.forum = forumto
      topic.put()
      forum.num_topics -= 1
      forum.num_posts -= topic.ncomments
      forum.put()
      forumto.num_topics += 1
      forumto.num_posts += topic.ncomments
      forumto.put()

    return self.redirect(forum.root())
예제 #3
0
파일: main.py 프로젝트: ignovak/uarat
  def get(self):
    self.user()
    # if users.is_current_user_admin():
    #   return self.redirect("/manageforums")
    MAX_FORUMS = 256 # if you need more, tough
    forums = Forum.all().fetch(MAX_FORUMS)
    # forums = db.GqlQuery("SELECT * FROM Forum").fetch(MAX_FORUMS)
    for f in forums:
      f.title_or_url = f.title or f.url

    forums = map(
      lambda group: {
        'title': group,
        'forums': filter(
          lambda forum: forum.group == group,
          forums
        )
      },
      Forum.GROUPES
    )
    tvals = {
      'forums' : forums,
      'role': self.role,
      'uid': self.uid,
      'username': self.username,
      'groupes': Forum.GROUPES
    }
    self.template_out("templates/forum_list.html", tvals)
예제 #4
0
파일: main.py 프로젝트: ignovak/uarat
def forum_from_url(url):
  assert '/' == url[0]
  path = url[1:]
  if '/' in path:
    (forumurl, rest) = path.split("/", 1)
  else:
    forumurl = path
  return Forum.gql("WHERE url = :1", forumurl).get()
예제 #5
0
파일: main.py 프로젝트: skid/fofou
 def post(self):
   """ Responds to POST requests to the /manageforums URL """
   self.init()
   
   if self.redir or not self.admin:
     return self.redirect("/")
   
   if not RE_VALID_URL.match( self.request.get('url') ) or \
      not self.forum and Forum.gql("WHERE url = :1", self.request.get('url') ).get():
     self.tvals.update({
       'errmsg': "Url contains illegal characters or is already used by another forum",
       'hosturl': self.request.host_url,
       'forum': { 
         'url': self.request.get('url'), 
         'title': self.request.get('title'), 
         'tagline': self.request.get('tagline'), 
         'sidebar': self.request.get('sidebar'), 
         'analytics_code': self.request.get('analytics_code')
       }
     })
     return self.template_out(self.tpl, self.tvals)
   
   if self.forum:
     forum         = self.forum
     forum.url     = self.request.get('url')
     forum.title   = self.request.get('title')
     forum.tagline = self.request.get('tagline')
     forum.sidebar = self.request.get('sidebar')
     forum.analytics_code = self.request.get('analytics_code')
   else:
     forum = Forum(
       url=self.request.get('url'), 
       title=self.request.get('title'), 
       tagline=self.request.get('tagline'), 
       sidebar=self.request.get('sidebar'), 
       analytics_code=self.request.get('analytics_code')
     )
   
   forum.put()
   return self.redirect("/manageforums")
예제 #6
0
파일: main.py 프로젝트: ignovak/uarat
def forum_siteroot_tmpldir_from_url(url):
  assert '/' == url[0]
  path = url[1:]
  if '/' in path:
    (forumurl, rest) = path.split("/", 1)
  else:
    forumurl = path
  forum = Forum.gql("WHERE url = :1", forumurl).get()
  if not forum:
    return (None, None, None)
  siteroot = forum_root(forum)
  skin_name = forum.skin
  if skin_name not in SKINS:
    skin_name = SKINS[0]
  tmpldir = os.path.join("skins", skin_name)
  return (forum, siteroot, tmpldir)
예제 #7
0
파일: main.py 프로젝트: skid/fofou
  def get(self):
    forum = Forum.from_url(self.request.path_info)
    is_admin = users.is_current_user_admin()

    # Only admins can delete or undelete posts
    if not forum or not is_admin:
      return self.redirect("/")

    try:
      topic = db.get( db.Key.from_path( 'Topic', int(self.request.get('id')) ) )
    except ValueError:
      return self.redirect( forum.root() )

    if topic:
      topic.is_locked = not topic.is_locked
      topic.put()

    return self.redirect( forum.root() )
예제 #8
0
파일: main.py 프로젝트: skid/fofou
  def get(self):
    forum = Forum.from_url(self.request.path_info)
    is_admin = users.is_current_user_admin()
    user = users.get_current_user()
    
    if not forum or (forum.is_disabled and not is_admin):
      return self.redirect("/")
    
    if not is_admin and not self.settings.check_ip(self.request.remote_addr):
      return self.response.out.write('Your IP address has been banned')

    if not is_admin and not self.settings.check_user( user ):
      return self.redirect( users.create_login_url("/") )
    
    try: 
      topic_id = int( self.request.get('id') or 0 )
    except ValueError:
      topic_id = 0

    if not topic_id:
      return self.redirect(forum.root())

    topic = db.get( db.Key.from_path('Topic', topic_id) )
    
    if not topic or (topic.is_deleted and not is_admin):
      return self.redirect(forum.root())
    
    # TODO: Make Pagination
    if is_admin:
      posts = Post.gql("WHERE topic = :1 ORDER BY created_on", topic)
    else:
      posts = Post.gql("WHERE topic = :1 AND is_deleted = False ORDER BY created_on", topic)
    
    tvals = {
      'user': user,
      'analytics_code' : forum.analytics_code or "",
      'isadmin': is_admin,
      'forum': forum,
      'topic': topic,
      'posts': posts,
      'login_url' : users.create_login_url(self.request.url),
      'logout_url' : users.create_logout_url(self.request.url)
    }
    self.template_out("skins/default/topic.html", tvals)
예제 #9
0
파일: main.py 프로젝트: skid/fofou
  def get(self):
    forum = Forum.from_url(self.request.path_info)
    is_admin = users.is_current_user_admin()

    # Only admins can delete or undelete posts
    if not forum or not is_admin:
      return self.redirect("/")
    
    try:
      post = db.get( db.Key.from_path( 'Post', int( self.request.get('id') ) ) )
    except ValueError:
      return self.redirect(forum.root())

    topic = post.topic
    first = Post.gql("WHERE topic=:1 ORDER BY created_on", topic).get()

    if not post or topic.forum.key() != forum.key():
      return self.redirect(forum.root())

    if post.is_deleted:
      post.is_deleted = False
      if first.key() == post.key():
        topic.is_deleted = False
        forum.num_topics += 1
        forum.num_posts += topic.ncomments
      else:
        topic.ncomments += 1
        if not topic.is_deleted:
          forum.num_posts += 1
    else:
      post.is_deleted = True
      if first.key() == post.key():
        topic.is_deleted = True
        forum.num_topics -= 1
        forum.num_posts -= topic.ncomments
      else:
        topic.ncomments -= 1
        forum.num_posts -= 1
    
    post.put()
    topic.put()
    forum.put()
    return self.redirect( "%stopic?id=%s" % (forum.root(), topic.id) )
예제 #10
0
파일: main.py 프로젝트: skid/fofou
  def get(self):
    is_admin = users.is_current_user_admin()
    forum = Forum.from_url(self.request.path_info)
    user = users.get_current_user()
    
    if not forum or (forum.is_disabled and not is_admin):
      return self.redirect("/")
    
    if not is_admin and not self.settings.check_ip(self.request.remote_addr):
      return self.response.out.write('Your IP address has been banned')

    if not is_admin and not self.settings.check_user( user ):
      return self.redirect( users.create_login_url("/") )
    
    # Get user either by google user id or cookie
    if user:
      fuser = FofouUser.gql("WHERE user = :1", user).get()
    else: 
      fuser = FofouUser.gql("WHERE cookie = :1", self.cookie ).get()

    tvals = {
      'user': user,
      'isadmin': is_admin,
      'forum': forum,
      'fuser': fuser or {
        'email': user.email() if user else "",
        'name': user.nickname() if user else "",
        'remember_me': True
      },
      'post': { 'subject': '' },
      'login_url' : users.create_login_url(self.request.url),
      'logout_url' : users.create_logout_url(self.request.url)
    }
    
    topic_id = self.request.get('id')
    if topic_id:
      tvals['topic'] = db.get(db.Key.from_path('Topic', int(topic_id)))
      if not tvals['topic']:
        return self.redirect( forum.root() )

    self.template_out("skins/default/post.html", tvals)
예제 #11
0
파일: main.py 프로젝트: skid/fofou
  def post(self):
    forum = Forum.from_url(self.request.path_info)
    is_admin = users.is_current_user_admin()
    user = users.get_current_user()
    
    if not forum or (forum.is_disabled and not is_admin):
      return self.redirect("/")

    if not is_admin and not self.settings.check_ip(self.request.remote_addr):
      return self.response.out.write('Your IP address has been banned')

    if not is_admin and not self.settings.check_user( user ):
      return self.redirect( users.create_login_url("/") )

    name = self.request.get('name').strip()
    email = self.request.get('email').strip()
    subject = self.request.get('subject').strip()
    message = to_unicode( self.request.get('message') ).strip()
    homepage = self.request.get('homepage').strip()
    homepage = "" if homepage == "http://" else homepage
    remember = bool(self.request.get('remember'))
    
    try: 
      topic_id = int( self.request.get('topic_id') or 0 )
      if topic_id:
        topic = db.get(db.Key.from_path('Topic', topic_id))
      else:
        topic = None
    except ValueError:
      topic = None
    
    if topic and topic.is_locked:
      return self.redirect( "%stopic?id=%s" % (forum.root(), topic.id) )
    
    # Perform simple validation
    errors = { 'valid': True }
    
    # First post must have a subject
    if not topic and not subject: 
      errors['valid'] = False
      errors['subject'] = "Subject required for new topic"
    
    if not message:
      errors['valid'] = False
      errors['message'] = "Message is required"
    
    # sha.new() doesn't accept Unicode strings, so convert to utf8 first
    sha1_digest = sha.new( message.encode('UTF-8') ).hexdigest()
    if Post.gql("WHERE sha1_digest = :1 AND topic = :2", sha1_digest, topic).get():
      errors['valid'] = False
      errors['message'] = "This is a duplicate post"

    if not errors['valid']:
      return self.template_out("skins/default/post.html", {
        'isadmin': is_admin,
        'user': user,
        'errors': errors,
        'forum': forum,
        'topic': topic and { 'id': topic_id, 'subject': topic.subject },
        'post': { 'message': message, 'subject': subject },
        'fuser': { 'name': name, 'email': email, 'homepage': homepage, 'remember_me': remember }
      })

    # Get user either by google user id or cookie. Create user objects if don't already exist    

    if user:
      fuser = FofouUser.gql("WHERE user = :1", user).get()
    else: 
      fuser = FofouUser.gql("WHERE cookie = :1", self.cookie).get()

    if not fuser:
      fuser = FofouUser(
        user = user or users.User('*****@*****.**'),
        remember_me = remember, 
        email = email or '*****@*****.**', 
        name = name or 'Anonymous', 
        homepage = homepage,
        cookie = self.cookie )
    else:
      fuser.remember_me = remember
      fuser.email = email or '*****@*****.**'
      fuser.name = name or 'Anonymous'
      fuser.homepage = homepage

    if not topic:
      topic = Topic(forum=forum, subject=subject, created_by=fuser.name)
      forum.num_topics += 1
    else:
      topic.ncomments += 1
      forum.num_posts += 1
    
    topic.put()
    fuser.put()
    
    post = Post(
      topic = topic, 
      user = fuser, 
      user_ip = self.request.remote_addr, 
      message = message, 
      sha1_digest = sha1_digest, 
      user_name = fuser.name,
      user_email = fuser.email,
      user_homepage = homepage
    )
    
    post.put()
    forum.put()

    self.redirect( "%stopic?id=%s" % (forum.root(), topic.id) )
예제 #12
0
def add_starter_forums():
    with app.app_context():
        if Forum.query.filter_by(forum_id=1).all() == []:
            cam = Forum(
                forum_id=1,
                forum_name="Cam Modeling",
                forum_type="main",
                forum_desc=
                "Central Forum for all Cam Models to discuss Strategies.",
                created_by="dev",
                parent_forum_id=0)
            db.session.add(cam)

            dom = Forum(
                forum_id=2,
                forum_name="Pro-Domination",
                forum_type="main",
                forum_desc=
                "Central Forum for all Pro Domme's to discuss Strategies.",
                created_by="dev",
                parent_forum_id=0)
            db.session.add(dom)

            escort = Forum(
                forum_id=3,
                forum_name="Escorting",
                forum_type="main",
                forum_desc=
                "Central Forum for all escorts to discuss Strategies.",
                created_by="dev",
                parent_forum_id=0)
            db.session.add(escort)

            p**n = Forum(
                forum_id=4,
                forum_name="P**n",
                forum_type="main",
                forum_desc=
                "Central Forum for all p**n-makers to discuss Strategies.",
                created_by="dev",
                parent_forum_id=0)
            db.session.add(p**n)

            dance = Forum(
                forum_id=5,
                forum_name="Dancing/Stripping",
                forum_type="main",
                forum_desc=
                "Central Forum for all dancers to discuss Strategies.",
                created_by="dev",
                parent_forum_id=0)
            db.session.add(dance)

            phone = Forum(
                forum_id=6,
                forum_name="Phone Sex Operating",
                forum_type="main",
                forum_desc=
                "Central Forum for all phone operators to discuss Strategies.",
                created_by="dev",
                parent_forum_id=0)
            db.session.add(phone)

            sugar = Forum(
                forum_id=7,
                forum_name="Sugaring",
                forum_type="main",
                forum_desc=
                "Central Forum for all Sugar Babies to discuss Strategies.",
                created_by="dev",
                parent_forum_id=0)
            db.session.add(sugar)

            other = Forum(
                forum_id=8,
                forum_name="All Other Forums",
                forum_type="main",
                forum_desc=
                "Collection of all other discussion forums that crosscut all sex work types.",
                created_by="dev",
                parent_forum_id=0)
            db.session.add(other)
            db.session.commit()

            cam_sites = Forum(
                forum_id=9,
                forum_name="What sites do workers actually make money on?",
                forum_type="secondary",
                forum_desc=
                "There are so many camming sites out there and so much biased info about which is the best. What sites have you actually performed on and which made you the most money?",
                created_by="dev",
                parent_forum_id=1)
            db.session.add(cam_sites)

            cam_strat = Forum(
                forum_id=10,
                forum_name="What camming strategies make you the most money?",
                forum_type="secondary",
                forum_desc=
                "Performers each have their own unique styles of camming and strategies for making money. Some tease forever. Some jump right into playtime. Some use games. What actually makes the most money? What has (and hasn't) worked for you?",
                created_by="dev",
                parent_forum_id=1)
            db.session.add(cam_strat)

            dom_dungeon = Forum(
                forum_id=11,
                forum_name="Free Agent or Dungeon?",
                forum_type="secondary",
                forum_desc=
                "What will actually make you the most money? Going it alone or working at a dungeon? Do you end up sacrificing safety either way? (If willing, include what state you were/are working in)",
                created_by="dev",
                parent_forum_id=2)
            db.session.add(dom_dungeon)

            escort_safe_cops = Forum(
                forum_id=12,
                forum_name="Staying Safe from Cops and out of Jail",
                forum_type="secondary",
                forum_desc=
                "What are strategies you've used to stay away from cops and out of jail? If you are a street-walker, your experience is particularly needed!",
                created_by="dev",
                parent_forum_id=3)
            db.session.add(escort_safe_cops)

            escort_convictions = Forum(
                forum_id=13,
                forum_name="If Caught, Avoiding a Conviction",
                forum_type="secondary",
                forum_desc=
                "If you are caught escorting, how can you avoid or minimize a convinction? What strategies and resources have worked for people before?",
                created_by="dev",
                parent_forum_id=3)
            db.session.add(escort_convictions)

            escort_clients = Forum(
                forum_id=14,
                forum_name="How to Stay Safe from Clients",
                forum_type="secondary",
                forum_desc=
                "The greatest dangers to sex workers often come from their clients/johns. What strategies have you used to stay safe from johns and how do you prevent them from corning you or ripping you off?",
                created_by="dev",
                parent_forum_id=3)
            db.session.add(escort_clients)

            escort_money = Forum(
                forum_id=15,
                forum_name="Best Ways to Actually Make Money",
                forum_type="secondary",
                forum_desc=
                "What strategies, advertising, and rates actually have made you the most money?",
                created_by="dev",
                parent_forum_id=3)
            db.session.add(escort_money)

            escort_sites = Forum(
                forum_id=16,
                forum_name=
                "What Websites can you still Advertise on and Make Money?",
                forum_type="secondary",
                forum_desc=
                "Over the past couple of years, more and more of the escorting sites have been taken down. What sites are currently available to advertise on and which provide the most (safe) clients.",
                created_by="dev",
                parent_forum_id=3)
            db.session.add(escort_sites)
            db.session.commit()

            trans_women = Forum(
                forum_id=17,
                forum_name="Issues for Trans Women",
                forum_type="main",
                forum_desc=
                "Forum for all trans women sex workers to discuss issues specific to them.",
                created_by="dev",
                parent_forum_id=8)
            db.session.add(trans_women)

            cis_women = Forum(
                forum_id=18,
                forum_name="Issues for Cis Women",
                forum_type="main",
                forum_desc=
                "Forum for all cis women sex workers to discuss issues specific to them.",
                created_by="dev",
                parent_forum_id=8)
            db.session.add(cis_women)

            cis_men = Forum(
                forum_id=19,
                forum_name="Issues for Cis Men",
                forum_type="main",
                forum_desc=
                "Forum for all cis men sex workers to discuss issues specific to them.",
                created_by="dev",
                parent_forum_id=8)
            db.session.add(cis_men)

            all_trans = Forum(
                forum_id=20,
                forum_name="Issues for all Trans* People",
                forum_type="main",
                forum_desc=
                "Forum for all non-binary and trans-masculine sex workers to discuss issues specific to them.",
                created_by="dev",
                parent_forum_id=8)
            db.session.add(all_trans)

            poc_issues = Forum(
                forum_id=21,
                forum_name="Issues for POC",
                forum_type="main",
                forum_desc=
                "Forum for all sex workers of color to discuss issues specific to them.",
                created_by="dev",
                parent_forum_id=8)
            db.session.add(poc_issues)
            db.session.commit()
예제 #13
0
파일: main.py 프로젝트: ignovak/uarat
  def post(self):
    self.user()
    if not self.is_admin:
      return self.redirect("/")

    forum_key = self.request.get('forum_key')
    forum = None
    if forum_key:
      forum = db.get(db.Key(forum_key))
      if not forum:
        # invalid key - should not happen so go to top-level
        return self.redirect("/")

    vals = ['url','title', 'tagline', 'sidebar', 'group', 'disable', 'enable', 'analyticscode']
    (url, title, tagline, sidebar, group, disable, enable, analytics_code) = req_get_vals(self.request, vals)

    if group not in Forum.GROUPES:
      # invalid group - should not happen so go to top-level
      return self.redirect("/")

    errmsg = None
    if not valid_forum_url(url):
      errmsg = "Url contains illegal characters"
    if not forum:
      forum_exists = Forum.gql("WHERE url = :1", url).get()
      if forum_exists:
        errmsg = "Forum with this url already exists"

    if errmsg:
      tvals = {
        'urlclass' : "error",
        'hosturl' : self.request.host_url,
        'prevurl' : url,
        'prevtitle' : title,
        'prevtagline' : tagline,
        'prevsidebar' : sidebar,
        'prevanalyticscode' : analytics_code,
        'forum_key' : forum_key,
        'errmsg' : errmsg
      }
      return self.render_rest(tvals)

    title_or_url = title or url
    if forum:
      # update existing forum
      forum.url = url
      forum.title = title
      forum.tagline = tagline
      forum.sidebar = sidebar
      forum.group = group
      forum.analytics_code = analytics_code
      forum.put()
      msg = "Forum '%s' has been updated." % title_or_url
    else:
      # create a new forum
      Forum(
        url=url,
        title=title,
        tagline=tagline,
        sidebar=sidebar,
        group=group,
        analytics_code=analytics_code
      ).put()
      msg = "Forum '%s' has been created." % title_or_url
    url = "/manageforums?msg=%s" % urllib.quote(to_utf8(msg))
    return self.redirect(url)