def message_socket(ws: WebSocket, connection: Connection) -> None: if Api.__COOKIE_SESSION_NAME not in session: ws.close() return db_session = connection.session() for post in db_session.query(Post).all(): ws.send( Message(datetime=floor(post.datetime.timestamp()), author=post.author, text=post.message).serialize()) with MessageSubscribersQueue.subscribe(request, ws): ws.receive()
def authorization( user: User, connection: Connection) -> Union[Response, Serializable]: if len(user.name) > 150: return Response(status=HTTPStatus.BAD_REQUEST) db_session = connection.session() db_user = db_session.query(DB_User).filter( DB_User.user_name == user.name).first() if db_user is None or db_user.password != PasswordHasher.get_hash( db_user.salt, user.password): return Result(StatusCode.InvalidUsernameOrPassword.name) session[Api.__COOKIE_SESSION_NAME] = UserIdPrincipal(user.name) return Result(StatusCode.Success.name)
def send_message( message: MessageToSend, connection: Connection) -> Union[Response, Serializable]: if len(message.text) > 280: return Response(status=HTTPStatus.BAD_REQUEST) post = Post(datetime=datetime.utcnow(), author=session[Api.__COOKIE_SESSION_NAME]["name"], message=message.text) db_session = connection.session() db_session.add(post) MessageSubscribersQueue.send_to_subscribers( Message(floor(post.datetime.timestamp()), post.author, post.message)) db_session.commit() return Result(StatusCode.Success.value)