def login(username, passwd): try: u = Academic(username) if u.authenticates(passwd): return u.login() except: return False
def GET(self, username=""): if username: try: user = Academic.get(username, safe=True) return render().profiles.index(user) except: pass raise web.seeother("/")
def GET(self, username=""): if username: try: user = Academic.get(username, safe=True) return render().profiles.index(user) except: pass raise web.seeother('/')
def POST(self): i = web.input(username='', passwd='', redir='/') if session().logged: raise web.seeother(i.redir) if not Academic.validates(i.username, i.passwd): return render().auth.login(err=AUTH_ERR['malformed_creds']) # attempting login first if login(i.username, i.passwd): raise web.seeother(i.redir) try: u = Academic.register(i.username, i.passwd, **Academic.defaults()) u.login() raise web.seeother(i.redir) except Academic.RegistrationException as e: err = AUTH_ERR[str(e.message)] return render().auth.register(err=err)
def POST(self): """TODO: handle redir""" i = web.input(username='', passwd='', redir='/') if not Academic.validates(i.username, i.passwd): return render().auth.login(err=AUTH_ERR['malformed_creds']) if login(i.username, i.passwd): raise web.seeother(i.redir) return render().auth.login(err=AUTH_ERR['wrong_creds'])
def GET(self): """Research http://news.ycombinator.com/item?id=1781013 how hacker news voting works and emulate XXX Restrict voting to session().logged users + element id must not already exist in user['votes'] set. XXX Requires accounting + record keeping XXX Preserve the web.ctx GET query params to preserve sorting / ordering Algo: 1. Add karma to paper['submitter'] if vote 2. Record vote in user['votes'] set by id - calc unique vote id via some linear combination of paper pid (and or comment id [cid], if it exists) """ i = web.input(pid=None, sort="popular") if not session().logged: raise web.seeother('/register') if i.pid: i.pid = int(i.pid) u = Academic(session()['uname']) p = Paper(i.pid) if canvote(u, i.pid): try: # move set_vote to paper api p.votes += 1 p.save() record_vote(u['username'], p.submitter, i.pid) except IndexError: return "No such items exists to vote on" raise web.seeother('/?sort=%s' % i.sort)
def GET(self): """Invalidate session, etc""" i = web.input(redir='/') Academic.logout() raise web.seeother(i.redir)