def add_user(): sha256 = hashlib.sha256(bytes(request.form.get('pass'), encoding='utf-8')).hexdigest() name = request.form.get('name') email = request.form.get('email') result = not DB.check_user(name) and not DB.check_email(email) if not (search('^.+@.+\..+$', email) and search('^[a-zA-Z0-9_]+$', name) and result): return make_response('Wrong data', 400) if request.files: file = request.files['file'] if file.mimetype in const.IMAGES: file_ext = const.IMAGES[file.mimetype] file.save("./server/static/avatar/{}{}".format(name, file_ext)) else: return make_response('Wrong data', 400) else: file_ext = None (activation_token, result) = DB.add_user(name, sha256, file_ext, email) if result: response = make_response('OK') result2 = DB.check_user(name, sha256) if result2: session = Session(name, result2.activated, result2.uid) self.sessions[session.get_id()] = session self.sessions_by_user_name[name] = session session['avatar'] = result2.file DB.add_session(session, result2.uid) session.add_cookie_to_resp(response) email_.send_email( "Для подтвеждения регистрации пожалуйста перейдите по ссылке " "http://{domain}/api/activate_account?token={token}".format( domain=(self.domain if self.domain is not None else self.ip), token=activation_token ), "Account activation", email) else: self.logger.write_msg("Something wrong with registration ({})".format(name)) response.headers["Content-type"] = "text/plain" return response else: return 'Error', 500
def init_session(): if self.get_session(request) is not None: response = make_response('OK') response.headers["Content-type"] = "text/plain" return response user_name = request.form.get('user_name') password = request.form.get('pass') if user_name is None or password is None: return 'Bad request', 400 sha256 = hashlib.sha256(bytes(password, encoding='utf-8')).hexdigest() result = DB.check_user(request.form.get('user_name'), sha256) if result: if user_name in self.sessions_by_user_name: session = self.sessions_by_user_name[user_name] else: session = Session(user_name, result.activated, result.uid, admin=result.admin) self.sessions[session.get_id()] = session self.sessions_by_user_name[user_name] = session session['avatar'] = result.file DB.add_session(session, result.uid) session['ip'] = request.remote_addr response = make_response('True') response.headers["Content-type"] = "text/plain" session.add_cookie_to_resp(response) return response else: response = make_response('False') response.headers["Content-type"] = "text/plain" return response
def account_settings(): session = self.get_session(request) if session: user_data = DB.check_user(session.user) return render_template( 'account_settings.html', header_mini=True, page_name='Настройки аккаунта', page_title='Настройки', u_name=session.user, email=user_data.email) else: return redirect(self.app.config["APPLICATION_ROOT"] + '/')
def change_pass(): session = self.get_session(request) if not session: return 'Fail', 401 sha256 = hashlib.sha256(bytes(request.form.get('old_pass'), encoding='utf-8')).hexdigest() if DB.check_user(session.user, sha256): sha256 = hashlib.sha256(bytes(request.form.get('new_pass'), encoding='utf-8')).hexdigest() DB.set_new_pass(session.user, sha256) return 'OK' else: return 'Wrong password'
def check_user(): password = request.form.get('pass') sha256 = hashlib.sha256(bytes(password, encoding='utf-8')).hexdigest() if password is not None else None email = request.form.get('email') name = request.form.get('name') if name is not None: result = DB.check_user(name, sha256) response = make_response((not result).__str__()) elif email is not None: result = DB.check_email(email) response = make_response((not result).__str__()) else: response = make_response('Bad request', 400) response.headers["Content-type"] = "text/plain" return response
def get_avatar(): user = request.args.get('user') if user == 'AI' or user == 'root': if request.args.get('type') == 'menu' or request.args.get('type') == 'round': response = make_response("/static_/svg/ic_computer_24px.svg") else: response = make_response("/static_/svg/ic_computer_24px_white.svg") else: file_ext = DB.check_user(user).file if file_ext is not None and file_ext != 'None': response = make_response("/static/avatar/{user_name}{file_ext}". format(user_name=user, file_ext=file_ext)) else: if request.args.get('type') == 'menu': response = make_response("/static_/svg/ic_person_24px.svg") elif request.args.get('type') == 'round': response = make_response("/static_/svg/account-circle.svg") elif request.args.get('type') == 'round_white': response = make_response("/static_/svg/account-circle_white.svg") else: response = make_response("/static_/svg/ic_person_24px_white.svg") response.headers["Cache-Control"] = "no-store" return response
def join_room(): session = self.get_session(request) if not self.get_session(request): return 'Fail', 401 mode = int(request.args.get('mode')) if mode == const.MODE_PVE: room = RoomPvE(session, seed=self.seed) self.rooms['PvE'][room.id] = session['cur_room'] = room session['player_n'] = const.PLAYER_HAND room.send_player_inf() room.send_changes() elif mode == const.MODE_FRIEND: for_ = request.args.get('for') if for_ is None or session.user == for_ or DB.check_user(for_) is None: return 'Bad request', 400 for id, room in self.rooms['Friends'].items(): if session.user in room.for_ and for_ in room.for_: if session in room.players: return 'Player is already invited' session['player_n'] = room.add_player(session) break else: room = RoomFriend(session, for_=for_, seed=self.seed) session['player_n'] = 0 self.rooms['Friends'][room.id] = room session['cur_room'] = room if room.is_ready(): room.send_player_inf() room.send_changes() room.send_msg(dumps({ 'data': [{ 'type': 'wait', 'player': room.game.turn, 'card': None, 'inf': None }] })) else: room.send_msg('wait') elif mode == const.MODE_PVP: for room in self.rooms['PvP'].values(): if room.type == const.MODE_PVP and not room.is_ready(): break else: room = RoomPvP(seed=self.seed) self.rooms['PvP'][room.id] = room session['player_n'] = room.add_player(session) session['cur_room'] = room if room.is_ready(): room.send_player_inf() room.send_changes() room.send_msg(dumps({ 'data': [{ 'type': 'wait', 'player': room.game.turn, 'card': None, 'inf': None }] })) else: room.send_msg('wait') return 'OK'
def update_activation_status(self): self.activated = bool(DB.check_user(self.user).activated)