From 294dc08adb9917b77c9bbe0bbbcb0d6cd3864f1e Mon Sep 17 00:00:00 2001 From: "Liguros - Gitlab CI/CD [develop]" Date: Sat, 16 Aug 2025 19:02:30 +0000 Subject: Adding metadata --- dev-python/steam/Manifest | 2 +- .../steam-2.0.0-path-pycryptodome-and-gevent.patch | 188 +++++++++++++++++++++ dev-python/steam/steam-1.6.1.ebuild | 50 ------ dev-python/steam/steam-2.0.0-r1.ebuild | 62 +++++++ 4 files changed, 251 insertions(+), 51 deletions(-) create mode 100644 dev-python/steam/files/steam-2.0.0-path-pycryptodome-and-gevent.patch delete mode 100644 dev-python/steam/steam-1.6.1.ebuild create mode 100644 dev-python/steam/steam-2.0.0-r1.ebuild (limited to 'dev-python/steam') diff --git a/dev-python/steam/Manifest b/dev-python/steam/Manifest index 9a40ad9f58e0..60ad0dc2881e 100644 --- a/dev-python/steam/Manifest +++ b/dev-python/steam/Manifest @@ -1 +1 @@ -DIST steam-1.6.1.gh.tar.gz 888055 BLAKE2B b02fcfbab0a3fba49eedc66720f50c3c191b01a0361500c5c8bb24c685bc6a463f25185bbb128483d8bd65a63474ed40689dd3174205610438295dd7e9e0b324 SHA512 4dcc2777232f0ddd946512edad495385d0132658eeb10e9510e56e472ae5ce193fe1de0e7e36b552aedef792ca2cf4d1a1429ecee535c948c512c5f5055a6632 +DIST steam-2.0.0.gh.tar.gz 675414 BLAKE2B 9ee5c412a1a7f498a773aaf290bba4b268ea71e929d6cec3cbe6629f4af994cb375aaac102364d5fe3aa5b14c40078a53ecd12adea09ee9bb06f8412d6880994 SHA512 7168dc500ae116dc8230abf9405cfd46f9ec9a518e9c0e2ee7902a610dbc2fff92e975061f080c257746979b9fd240d713ced53603b44cbc5361118174eae1b9 diff --git a/dev-python/steam/files/steam-2.0.0-path-pycryptodome-and-gevent.patch b/dev-python/steam/files/steam-2.0.0-path-pycryptodome-and-gevent.patch new file mode 100644 index 000000000000..571a48d17afd --- /dev/null +++ b/dev-python/steam/files/steam-2.0.0-path-pycryptodome-and-gevent.patch @@ -0,0 +1,188 @@ +From dd8334ce47dbb0c5cc5547094e9800e7789821ce Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Gon=C3=A7alo=20Negrier=20Duarte?= + +Date: Thu, 14 Aug 2025 15:30:13 +0100 +Subject: [PATCH] dev-python: patched for `dev-python/pycryptodome` and remove + test depend on `dev-python/gevent` +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +* Since `dev-python/gevent` was removed in BUG 879011 so + tests/test_core_cm.py need to be removed + +Signed-off-by: Gonçalo Negrier Duarte +--- + steam/core/crypto.py | 8 +-- + tests/test_core_cm.py | 140 ------------------------------------------ + 2 files changed, 4 insertions(+), 144 deletions(-) + delete mode 100644 tests/test_core_cm.py + +diff --git a/steam/core/crypto.py b/steam/core/crypto.py +index 9557ee6..7894dcf 100644 +--- a/steam/core/crypto.py ++++ b/steam/core/crypto.py +@@ -6,10 +6,10 @@ from os import urandom as random_bytes + from struct import pack + from base64 import b64decode + +-from Cryptodome.Hash import MD5, SHA1, HMAC +-from Cryptodome.PublicKey.RSA import import_key as rsa_import_key, construct as rsa_construct +-from Cryptodome.Cipher import PKCS1_OAEP, PKCS1_v1_5 +-from Cryptodome.Cipher import AES as AES ++from Crypto.Hash import MD5, SHA1, HMAC ++from Crypto.PublicKey.RSA import import_key as rsa_import_key, construct as rsa_construct ++from Crypto.Cipher import PKCS1_OAEP, PKCS1_v1_5 ++from Crypto.Cipher import AES as AES + + + class UniverseKey: +diff --git a/tests/test_core_cm.py b/tests/test_core_cm.py +deleted file mode 100644 +index bbc2c27..0000000 +--- a/tests/test_core_cm.py ++++ /dev/null +@@ -1,140 +0,0 @@ +-import unittest +-from unittest.mock import patch +-import gevent +-import gevent.queue +- +-from steam.core.cm import CMClient +- +-class CMClient_Scenarios(unittest.TestCase): +- test_channel_key = b'SESSION KEY LOL' +- +- def setUp(self): +- # mock out crypto +- patcher = patch('steam.core.crypto.generate_session_key') +- self.addCleanup(patcher.stop) +- self.gen_skey = patcher.start() +- self.gen_skey.return_value = (self.test_channel_key, b'PUBKEY ENCRYPTED SESSION KEY') +- +- patcher = patch('steam.core.crypto.symmetric_encrypt') +- self.addCleanup(patcher.stop) +- self.s_enc = patcher.start() +- self.s_enc.side_effect = lambda m, k: m +- patcher = patch('steam.core.crypto.symmetric_encrypt_HMAC') +- self.addCleanup(patcher.stop) +- self.s_enc_hmac = patcher.start() +- self.s_enc_hmac.side_effect = lambda m, k, mac: m +- +- patcher = patch('steam.core.crypto.symmetric_decrypt') +- self.addCleanup(patcher.stop) +- self.s_dec = patcher.start() +- self.s_dec.side_effect = lambda c, k: c +- patcher = patch('steam.core.crypto.symmetric_decrypt_HMAC') +- self.addCleanup(patcher.stop) +- self.s_dec_hmac = patcher.start() +- self.s_dec_hmac.side_effect = lambda c, k, mac: c +- +- # TODO: Tests for WebsocketConnection +- +- # mock out TCPConnection +- patcher = patch('steam.core.cm.TCPConnection', autospec=True) +- self.addCleanup(patcher.stop) +- self.conn = patcher.start().return_value +- +- self.conn_in = gevent.queue.Queue() +- self.conn.__iter__.return_value = self.conn_in +- +- # mock out CMServerList +- patcher = patch('steam.core.cm.CMServerList', autospec=True) +- self.addCleanup(patcher.stop) +- self.server_list = patcher.start().return_value +- self.server_list.__iter__.return_value = [(127001, 20000+i) for i in range(10)] +- self.server_list.bootstrap_from_webapi.return_value = False +- self.server_list.bootstrap_from_dns.return_value = False +- +- @patch.object(CMClient, 'emit') +- @patch.object(CMClient, '_recv_messages') +- def test_connect(self, mock_recv, mock_emit): +- # setup +- self.conn.connect.return_value = True +- self.server_list.__len__.return_value = 10 +- +- # run +- cm = CMClient() +- +- with gevent.Timeout(2, False): +- cm.connect(retry=1) +- +- gevent.idle() +- +- # verify +- self.conn.connect.assert_called_once_with((127001, 20000)) +- mock_emit.assert_called_once_with('connected') +- mock_recv.assert_called_once_with() +- +- @patch.object(CMClient, 'emit') +- @patch.object(CMClient, '_recv_messages') +- def test_connect_auto_discovery_failing(self, mock_recv, mock_emit): +- # setup +- self.conn.connect.return_value = True +- self.server_list.__len__.return_value = 0 +- +- # run +- cm = CMClient() +- +- with gevent.Timeout(3, False): +- cm.connect(retry=1) +- +- gevent.idle() +- +- # verify +- self.server_list.bootstrap_from_webapi.assert_called_once_with() +- self.server_list.bootstrap_from_dns.assert_called_once_with() +- self.conn.connect.assert_not_called() +- +- @patch.object(CMClient, 'emit') +- @patch.object(CMClient, '_recv_messages') +- def test_connect_auto_discovery_success(self, mock_recv, mock_emit): +- # setup +- self.conn.connect.return_value = True +- self.server_list.__len__.return_value = 0 +- +- def fake_servers(*args, **kwargs): +- self.server_list.__len__.return_value = 10 +- return True +- +- self.server_list.bootstrap_from_webapi.side_effect = fake_servers +- +- # run +- cm = CMClient() +- +- with gevent.Timeout(3, False): +- cm.connect(retry=1) +- +- gevent.idle() +- +- # verify +- self.server_list.bootstrap_from_webapi.assert_called_once_with() +- self.server_list.bootstrap_from_dns.assert_not_called() +- self.conn.connect.assert_called_once_with((127001, 20000)) +- mock_emit.assert_called_once_with('connected') +- mock_recv.assert_called_once_with() +- +- def test_channel_encrypt_sequence(self): +- # setup +- self.conn.connect.return_value = True +- +- # run ------------ +- cm = CMClient() +- cm.connected = True +- gevent.spawn(cm._recv_messages) +- +- # recieve ChannelEncryptRequest +- self.conn_in.put(b'\x17\x05\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x01\x00\x00\x00') +- gevent.idle(); gevent.idle(); gevent.idle(); gevent.idle() +- +- self.conn.put_message.assert_called_once_with(b'\x18\x05\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00\x80\x00\x00\x00PUBKEY ENCRYPTED SESSION KEY\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00h-\xc4@\x00\x00\x00\x00') +- +- # recieve ChannelEncryptResult (OK) +- self.conn_in.put(b'\x19\x05\x00\x00\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x00\x00\x00') +- +- cm.wait_event('channel_secured', timeout=2, raises=True) +-- +2.50.0 + diff --git a/dev-python/steam/steam-1.6.1.ebuild b/dev-python/steam/steam-1.6.1.ebuild deleted file mode 100644 index 50212243e70f..000000000000 --- a/dev-python/steam/steam-1.6.1.ebuild +++ /dev/null @@ -1,50 +0,0 @@ -# Copyright 1999-2025 Gentoo Authors -# Distributed under the terms of the GNU General Public License v2 - -EAPI=8 - -DISTUTILS_USE_PEP517=setuptools -PYTHON_COMPAT=( python3_{9,10,11,12,13} ) - -inherit distutils-r1 - -DESCRIPTION="Python package for interacting with Steam" -HOMEPAGE=" - https://github.com/solsticegamestudios/steam/ - https://pypi.org/project/steam/ -" -SRC_URI=" - https://github.com/solsticegamestudios/steam/archive/refs/tags/v${PV}.tar.gz - -> ${P}.gh.tar.gz -" - -LICENSE="GPL-3" -SLOT="0" -KEYWORDS="~amd64 ~x86" - -RDEPEND=" - >=dev-python/cachetools-3.0.0[${PYTHON_USEDEP}] - >=dev-python/pycryptodome-3.7.0[${PYTHON_USEDEP}] - >=dev-python/requests-2.9.1[${PYTHON_USEDEP}] - >=dev-python/six-1.10.0[${PYTHON_USEDEP}] - >=dev-python/vdf-4.0[${PYTHON_USEDEP}] - - dev-python/certifi[${PYTHON_USEDEP}] - dev-python/protobuf[${PYTHON_USEDEP}] - dev-python/wsproto[${PYTHON_USEDEP}] -" - -distutils_enable_tests pytest - -pkg_postinst() { - if [[ ! ${REPLACING_VERSIONS} ]]; then - ewarn "If you intend to use this library for anything else than" - ewarn "ProtonUp-Qt you most likely need additional ebuilds for" - ewarn "gevent and gevent-eventemitter. These are currently not" - ewarn "part of the GURU repository." - ewarn - ewarn "Project references:" - ewarn " - http://www.gevent.org/" - ewarn " - https://github.com/rossengeorgiev/gevent-eventemitter" - fi -} diff --git a/dev-python/steam/steam-2.0.0-r1.ebuild b/dev-python/steam/steam-2.0.0-r1.ebuild new file mode 100644 index 000000000000..96020b5158ee --- /dev/null +++ b/dev-python/steam/steam-2.0.0-r1.ebuild @@ -0,0 +1,62 @@ +# Copyright 1999-2025 Gentoo Authors +# Distributed under the terms of the GNU General Public License v2 + +EAPI=8 + +DISTUTILS_USE_PEP517=setuptools +PYTHON_COMPAT=( python3_{9,10,11,12,13} ) + +inherit distutils-r1 + +DESCRIPTION="Python package for interacting with Steam" +HOMEPAGE=" + https://github.com/solsticegamestudios/steam/ + https://pypi.org/project/steam/ +" +SRC_URI=" + https://github.com/solsticegamestudios/steam/archive/refs/tags/v${PV}-alpha1.tar.gz + -> ${P}.gh.tar.gz +" +S="${WORKDIR}/${P}-alpha1" + +PATCHES=( + "${FILESDIR}/${P}-path-pycryptodome-and-gevent.patch" +) + +LICENSE="GPL-3" +SLOT="0" +KEYWORDS="~amd64 ~x86" + +RDEPEND=" + >=dev-python/cachetools-3.0.0[${PYTHON_USEDEP}] + >=dev-python/pycryptodome-3.7.0[${PYTHON_USEDEP}] + >=dev-python/requests-2.9.1[${PYTHON_USEDEP}] + >=dev-python/six-1.10.0[${PYTHON_USEDEP}] + >=dev-python/vdf-4.0[${PYTHON_USEDEP}] + + dev-python/certifi[${PYTHON_USEDEP}] + dev-python/protobuf[${PYTHON_USEDEP}] + dev-python/wsproto[${PYTHON_USEDEP}] +" + +BDEPEND=" + test? ( + dev-python/vcrpy[${PYTHON_USEDEP}] + dev-python/mock[${PYTHON_USEDEP}] + ) +" + +distutils_enable_tests pytest + +pkg_postinst() { + if [[ ! ${REPLACING_VERSIONS} ]]; then + ewarn "If you intend to use this library for anything else than" + ewarn "ProtonUp-Qt you most likely need additional ebuilds for" + ewarn "gevent and gevent-eventemitter. These are currently not" + ewarn "part of the GURU repository." + ewarn + ewarn "Project references:" + ewarn " - http://www.gevent.org/" + ewarn " - https://github.com/rossengeorgiev/gevent-eventemitter" + fi +} -- cgit v1.3