async def get_session_by_hash(self, session_hash: str) -> Union[Session, None]: sql = "SELECT * FROM sessions WHERE hash = $1" async with self.pool.acquire() as con: # type: Connection row = await con.fetchrow(sql, session_hash) if row is None: return None session = Session() session.id = row['id'] session.user = await self.get_user_by_id(user_id=row['user']) session.hash = row['hash'] session.created = row['created'] session.last_used = row['last_used'] session.last_ip = row['last_ip'] return session
async def new_session(self, user_id: UUID, ip: str) -> Session: session_id = uuid4() user = await self._get_user(user_id=user_id) created = datetime.utcnow() sess_hash = sha256( (u"%s %s %s" % (session_id, user.id, created)).encode("utf8")).hexdigest() sql = "INSERT INTO sessions (id, \"user\", hash, created, last_used, last_ip) VALUES ($1, $2, $3, $4, $5, $6)" async with self.pool.acquire() as con: # type: Connection await con.execute(sql, session_id, user_id, sess_hash, created, created, ip) session = Session() session.id = session_id session.user = user session.hash = sess_hash session.created = created session.last_used = created session.last_ip = ip return session