async def get(self, *, code: str = None, state: str = None): self.check_oauth('jaccount') redirect_url = misc.generate_url( self.reverse_url('user_login_jaccount')) if self.has_priv(builtin.PRIV_USER_PROFILE): self.redirect(self.reverse_url('domain_main')) elif code: # redirected from jaccount oauth server # print(code) data = await oauth.get_profile(code, redirect_url) if not data: raise error.LoginError('') uid = int(data['code']) udoc = await user.get_by_uid(uid) if not udoc: mail = data['account'] + '@sjtu.edu.cn' await user.add(uid=uid, uname=data['account'], password=data['id'], mail=mail, regip=self.remote_ip, realname=data['name']) udoc = await user.get_by_uid(uid) if not udoc: raise error.LoginError(data['account']) await asyncio.gather( user.set_by_uid(udoc['_id'], loginat=datetime.datetime.utcnow(), loginip=self.remote_ip), self.update_session(new_saved=True, uid=udoc['_id'])) self.redirect(self.reverse_url('domain_main')) else: self.redirect(oauth.get_authorize_url(redirect_url))
async def post(self, *, uname: str, password: str, rememberme: bool = False): udoc = await user.check_password_by_uname(uname, password) if not udoc: raise error.LoginError(uname) await asyncio.gather(user.set_by_uid(udoc['_id'], loginat=datetime.datetime.utcnow(), loginip=self.remote_ip), self.update_session(new_saved=rememberme, uid=udoc['_id'])) self.json_or_redirect(self.referer_or_main)