def dispatch(self, request): if request.path not in ('/', self.login_url): return redirect('') if request.path == self.login_url: if request.is_somebody: return redirect('') elif request.authorization: if 'username' in request.authorization: username = request.authorization.get('username') password = request.authorization.get('password') user = self.app.database_engine.execute( users.select(users.c.username == username)).fetchone() if user and check_pwhash(user.pw_hash, password): request.session['uid'] = user.user_id request.session['lt'] = time() request.is_somebody = True return redirect('') response = Response() response.www_authenticate.set_basic() response.status_code = 401 return response if not request.is_admin: response = render_response(request, 'upgrade_maintenance.html', login_url=self.login_url) response.status_code = 503 return response if request.method == 'POST': open(self.lockfile, 'w').write('locked on database upgrade\n') mdb = ManageDatabase(request.app) db.session.close() # close open sessions def finish(): # this is run from the template after the upgrade finishes remove(self.lockfile) db.session.close() # close open sessions self.wants_reload = True # force application reload return '' # just because I need to return something to jinja return render_response(request, 'admin/perform_upgrade.html', live_log=mdb.cmd_upgrade(), _stream=True, finish=finish, blog_url=self.blog_url, maintenance_url=self.maintenance_url, in_progress=False) return render_response(request, 'admin/perform_upgrade.html', in_progress=isfile(self.lockfile), repo_ids=self.repo_ids)
def dispatch(self, request): if request.path not in ('/', self.login_url): return redirect('') if request.path == self.login_url: if request.is_somebody: return redirect('') elif request.authorization: if 'username' in request.authorization: username = request.authorization.get('username') password = request.authorization.get('password') user = self.app.database_engine.execute( users.select(users.c.username==username) ).fetchone() if user and check_pwhash(user.pw_hash, password): request.session['uid'] = user.user_id request.session['lt'] = time() request.is_somebody = True return redirect('') response = Response() response.www_authenticate.set_basic() response.status_code = 401 return response if not request.is_admin: response = render_response(request, 'upgrade_maintenance.html', login_url=self.login_url) response.status_code = 503 return response if request.method == 'POST': open(self.lockfile, 'w').write('locked on database upgrade\n') mdb = ManageDatabase(request.app) db.session.close() # close open sessions def finish(): # this is run from the template after the upgrade finishes remove(self.lockfile) db.session.close() # close open sessions self.wants_reload = True # force application reload return '' # just because I need to return something to jinja return render_response(request, 'admin/perform_upgrade.html', live_log=mdb.cmd_upgrade(), _stream=True, finish=finish, blog_url=self.blog_url, maintenance_url=self.maintenance_url, in_progress=False) return render_response(request, 'admin/perform_upgrade.html', in_progress=isfile(self.lockfile), repo_ids=self.repo_ids)
def check_password(self, password): if self.pw_hash == '!': return False return check_pwhash(self.pw_hash, password)