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)
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())
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)
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()
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")
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)
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() )
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)
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) )
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)
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) )
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()
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)