Beispiel #1
0
		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
Beispiel #2
0
		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
Beispiel #3
0
		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"] + '/')
Beispiel #4
0
		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'
Beispiel #5
0
		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
Beispiel #6
0
		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
Beispiel #7
0
		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'
Beispiel #8
0
	def update_activation_status(self):
		self.activated = bool(DB.check_user(self.user).activated)