)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9311,"name":"Tristan Cacqueray","email":"tdecacqu@redhat.com","username":"tristanC"},"change_message_id":"c3a34a63d5e8bdabd31c0baf1b4e6025688e55f3","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If /etc/zuul/zuul.conf is user-readable, and if an auth token was not"},{"line_number":10,"context_line":"provided but is needed, zuul-client will attempt to generate such a"},{"line_number":11,"context_line":"token from /etc/zuul/zuul.conf\u0027s authenticator config."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The first non OpenID Connect authenticator found in the config is used."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1fcdcf9b_1c537519","line":11,"updated":"2022-05-05 12:57:43.000000000","message":"nit: the feature doesn\u0027t seems related to /etc/zuul/zuul.conf , and perhaps we should not mention the path location. How about simply saying that if there is an authenticator config, then the zuul-client can automatically generate the auth token, so that it\u0027s usage is similar to the legacy zuul command.","commit_id":"323a5391f81e4377f8d764b83b07e76763aaebbc"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"f3896e5fc2300b69be10f2c83687a1488a8707fc","unresolved":true,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"If /etc/zuul/zuul.conf is user-readable, and if an auth token was not"},{"line_number":10,"context_line":"provided but is needed, zuul-client will attempt to generate such a"},{"line_number":11,"context_line":"token from /etc/zuul/zuul.conf\u0027s authenticator config."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"The first non OpenID Connect authenticator found in the config is used."},{"line_number":14,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"93a702be_c78cbfb6","line":11,"in_reply_to":"1fcdcf9b_1c537519","updated":"2022-05-18 13:13:48.000000000","message":"/etc/zuul/zuul.conf is one of the default paths the CLI will look for when loading a configuration, but it is true that the authenticator config could live in some other file.","commit_id":"323a5391f81e4377f8d764b83b07e76763aaebbc"}],"doc/source/configuration.rst":[{"author":{"_account_id":6889,"name":"Fabien Boucher","email":"fboucher@redhat.com","username":"fabien-boucher"},"change_message_id":"951ec7c706458622b25022456c3eeefe3061e184","unresolved":true,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"* ``url``: (mandatory) the base URL of the Zuul web server."},{"line_number":17,"context_line":"* ``verify_ssl``: True by default, can be set to False to disable TLS verifications when connecting to Zuul."},{"line_number":18,"context_line":"* ``tenant``: optional parameter to set a default tenant for the queries."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Authentication configuration can be specified in two ways:"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"df387c36_c6277605","line":18,"updated":"2024-06-17 07:00:36.000000000","message":"What happen if no \u0027tenant\u0027 is specified ?","commit_id":"6e575fd84593eece2c425e27e228f5a3b8bea1aa"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"9700ff75249490e83646961d1b59e72251c92639","unresolved":true,"context_lines":[{"line_number":15,"context_line":""},{"line_number":16,"context_line":"* ``url``: (mandatory) the base URL of the Zuul web server."},{"line_number":17,"context_line":"* ``verify_ssl``: True by default, can be set to False to disable TLS verifications when connecting to Zuul."},{"line_number":18,"context_line":"* ``tenant``: optional parameter to set a default tenant for the queries."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Authentication configuration can be specified in two ways:"},{"line_number":21,"context_line":""}],"source_content_type":"text/x-rst","patch_set":6,"id":"e9745f07_ef32cfb6","line":18,"in_reply_to":"df387c36_c6277605","updated":"2024-06-20 08:00:54.000000000","message":"if --tenant isn\u0027t passed to the CLI then an error is returned. It is tested in \"test_tenant_scoping_errors\"","commit_id":"6e575fd84593eece2c425e27e228f5a3b8bea1aa"},{"author":{"_account_id":6889,"name":"Fabien Boucher","email":"fboucher@redhat.com","username":"fabien-boucher"},"change_message_id":"951ec7c706458622b25022456c3eeefe3061e184","unresolved":true,"context_lines":[{"line_number":31,"context_line":"----------------"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Zuul-client will look by default, and in this order, for ``/etc/zuul/zuul.conf``, or a"},{"line_number":34,"context_line":"``$HOME/.config/zuul/client.conf`` or a ``$HOME/.zuul.conf`` file for its configuration if no file"},{"line_number":35,"context_line":"is passed with the ``--config`` argument of the CLI."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"If a configuration file is found and no configuration section is passed with the ``--use-config`` argument of"}],"source_content_type":"text/x-rst","patch_set":6,"id":"504f5f20_5a54ec6a","line":34,"updated":"2024-06-17 07:00:36.000000000","message":"Maybe a bullet list will be convenient here.","commit_id":"6e575fd84593eece2c425e27e228f5a3b8bea1aa"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"9700ff75249490e83646961d1b59e72251c92639","unresolved":false,"context_lines":[{"line_number":31,"context_line":"----------------"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"Zuul-client will look by default, and in this order, for ``/etc/zuul/zuul.conf``, or a"},{"line_number":34,"context_line":"``$HOME/.config/zuul/client.conf`` or a ``$HOME/.zuul.conf`` file for its configuration if no file"},{"line_number":35,"context_line":"is passed with the ``--config`` argument of the CLI."},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"If a configuration file is found and no configuration section is passed with the ``--use-config`` argument of"}],"source_content_type":"text/x-rst","patch_set":6,"id":"0c97af6f_bdd14da8","line":34,"in_reply_to":"504f5f20_5a54ec6a","updated":"2024-06-20 08:00:54.000000000","message":"Done","commit_id":"6e575fd84593eece2c425e27e228f5a3b8bea1aa"}],"tests/unit/test_cmd.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"547c815f3c33009db4075860923a2cd443fd85da","unresolved":false,"context_lines":[{"line_number":199,"context_line":"user\u003dzuul"},{"line_number":200,"context_line":"password\u003dzuul"},{"line_number":201,"context_line":";keepalive\u003d60"},{"line_number":202,"context_line":"\"\"\""},{"line_number":203,"context_line":"            )"},{"line_number":204,"context_line":"            conf_file.close()"},{"line_number":205,"context_line":"            with patch(\"requests.Session\") as mock_sesh:"}],"source_content_type":"text/x-python","patch_set":1,"id":"9c79171d_9e3dafd7","line":202,"updated":"2022-04-14 16:31:36.000000000","message":"The test file could probably be a lot shorter?  Just include what we need?","commit_id":"0f8ce7324ead6c52e5adf0e820373d2bd8467c8b"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"7b7cd183ca8db55159ed1d6dc58160a2474bd495","unresolved":false,"context_lines":[{"line_number":199,"context_line":"user\u003dzuul"},{"line_number":200,"context_line":"password\u003dzuul"},{"line_number":201,"context_line":";keepalive\u003d60"},{"line_number":202,"context_line":"\"\"\""},{"line_number":203,"context_line":"            )"},{"line_number":204,"context_line":"            conf_file.close()"},{"line_number":205,"context_line":"            with patch(\"requests.Session\") as mock_sesh:"}],"source_content_type":"text/x-python","patch_set":1,"id":"719c5dbf_12255c83","line":202,"in_reply_to":"9c79171d_9e3dafd7","updated":"2022-04-15 10:11:44.000000000","message":"Done","commit_id":"0f8ce7324ead6c52e5adf0e820373d2bd8467c8b"}],"zuulclient/cmd/__init__.py":[{"author":{"_account_id":1,"name":"James E. Blair","email":"jim@acmegating.com","username":"corvus"},"change_message_id":"0a1b593455e5da98871f913bd7bbc0d87f0e2a09","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            # Raise only if we do not have a zuul URL"},{"line_number":222,"context_line":"            if not self.args.zuul_url:"},{"line_number":223,"context_line":"                print(e)"},{"line_number":224,"context_line":"                sys.exit(1)"},{"line_number":225,"context_line":"        self.setup_logging()"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        ret \u003d self.args.func()"}],"source_content_type":"text/x-python","patch_set":2,"id":"e28e3edd_959f64b0","line":224,"updated":"2022-05-05 14:19:25.000000000","message":"Why not \"raise\" here like above?","commit_id":"323a5391f81e4377f8d764b83b07e76763aaebbc"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"b5dc7d893ec1fd9a3b7c243bb34f7b24d5e8a104","unresolved":false,"context_lines":[{"line_number":221,"context_line":"            # Raise only if we do not have a zuul URL"},{"line_number":222,"context_line":"            if not self.args.zuul_url:"},{"line_number":223,"context_line":"                print(e)"},{"line_number":224,"context_line":"                sys.exit(1)"},{"line_number":225,"context_line":"        self.setup_logging()"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"        ret \u003d self.args.func()"}],"source_content_type":"text/x-python","patch_set":2,"id":"9e757419_7ebb9336","line":224,"in_reply_to":"e28e3edd_959f64b0","updated":"2022-05-17 12:49:35.000000000","message":"Done","commit_id":"323a5391f81e4377f8d764b83b07e76763aaebbc"}],"zuulclient/utils/__init__.py":[{"author":{"_account_id":6889,"name":"Fabien Boucher","email":"fboucher@redhat.com","username":"fabien-boucher"},"change_message_id":"bf0450bf231f81c247c4d9477682f979f9f608f1","unresolved":true,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"def create_auth_token("},{"line_number":104,"context_line":"    user, tenant, config_func, expires_in\u003dNone, leeway\u003d0):"},{"line_number":105,"context_line":"    now \u003d timegm(datetime.now(tz\u003dtimezone.utc).utctimetuple()) - leeway"},{"line_number":106,"context_line":"    exp_claim \u003d now + (expires_in is None and 60 or expires_in) + leeway"},{"line_number":107,"context_line":"    token \u003d {\u0027iat\u0027: now - leeway,"},{"line_number":108,"context_line":"             \u0027exp\u0027: exp_claim,"}],"source_content_type":"text/x-python","patch_set":5,"id":"12ac8960_6da94b62","line":105,"updated":"2023-01-25 11:16:54.000000000","message":"Could it be just:\ntimegm(time.gmtime())\nor\nint(time.time())","commit_id":"ac1302578180511fa565bbb2bfb0de6d8f43784d"},{"author":{"_account_id":6889,"name":"Fabien Boucher","email":"fboucher@redhat.com","username":"fabien-boucher"},"change_message_id":"5d0f6388eafc5d38284d14987be822efabfbb626","unresolved":true,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"def create_auth_token("},{"line_number":104,"context_line":"    user, tenant, config_func, expires_in\u003dNone, leeway\u003d0):"},{"line_number":105,"context_line":"    now \u003d timegm(datetime.now(tz\u003dtimezone.utc).utctimetuple()) - leeway"},{"line_number":106,"context_line":"    exp_claim \u003d now + (expires_in is None and 60 or expires_in) + leeway"},{"line_number":107,"context_line":"    token \u003d {\u0027iat\u0027: now - leeway,"},{"line_number":108,"context_line":"             \u0027exp\u0027: exp_claim,"}],"source_content_type":"text/x-python","patch_set":5,"id":"628b90ea_29e915ea","line":105,"in_reply_to":"12ac8960_6da94b62","updated":"2023-01-25 12:10:25.000000000","message":"The way to get the epoch introduced by the patchset is similar than within pyjwt.","commit_id":"ac1302578180511fa565bbb2bfb0de6d8f43784d"},{"author":{"_account_id":7186,"name":"Matthieu Huin","email":"mhuin@redhat.com","username":"mhu"},"change_message_id":"2092c3a927681649859da4f8d17bf030b189b0d0","unresolved":false,"context_lines":[{"line_number":102,"context_line":""},{"line_number":103,"context_line":"def create_auth_token("},{"line_number":104,"context_line":"    user, tenant, config_func, expires_in\u003dNone, leeway\u003d0):"},{"line_number":105,"context_line":"    now \u003d timegm(datetime.now(tz\u003dtimezone.utc).utctimetuple()) - leeway"},{"line_number":106,"context_line":"    exp_claim \u003d now + (expires_in is None and 60 or expires_in) + leeway"},{"line_number":107,"context_line":"    token \u003d {\u0027iat\u0027: now - leeway,"},{"line_number":108,"context_line":"             \u0027exp\u0027: exp_claim,"}],"source_content_type":"text/x-python","patch_set":5,"id":"820a8d67_54422db8","line":105,"in_reply_to":"628b90ea_29e915ea","updated":"2023-02-02 15:32:56.000000000","message":"it\u0027s done this way to avoid discrepancies between the client and the server, as it uses the pyjwt library to verify the token.","commit_id":"ac1302578180511fa565bbb2bfb0de6d8f43784d"}]}
