)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"7aa7c1bc94676051c2029a2f4638fcb35b83cb55","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ee46b31f_8f3f97b9","updated":"2023-08-02 05:59:32.000000000","message":"I will also soon push the counterpart of this change Ironic as Ironic also needs user-image server basic auth support to be able to verify the image urls.","commit_id":"17befea7e9cdda2a546068052aaf8828a0473b18"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"a48e325b9b385f38f1add05698990204daf14a91","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"5ff8cb8a_9c94e882","updated":"2023-08-04 16:51:17.000000000","message":"I have pushed the related Ironic change also:\nhttps://review.opendev.org/c/openstack/ironic/+/890411","commit_id":"240538bc4e0d31ba6d2a741c50b4df963a404d99"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"d511e3dcbf309eea08000622e9ffa71c78f206fa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"6708941b_ae1f539b","updated":"2023-08-07 21:02:28.000000000","message":"See here: https://github.com/openstack/ironic-python-agent/blob/b68a4c8a926b68ec50ef8ac58cb8300a94052975/ironic_python_agent/agent.py#L394 for a better place to send credentials -- as a response to lookup so they aren\u0027t exposed to the log files.","commit_id":"240538bc4e0d31ba6d2a741c50b4df963a404d99"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"031e6410857104e9f06a4b96f80b48e6adcb8664","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"876b49ee_e1ed442a","updated":"2023-09-11 16:15:32.000000000","message":"removing ironic-week-prio as this is not ready for re-review; please readd it when you\u0027ve updated. Thanks!","commit_id":"240538bc4e0d31ba6d2a741c50b4df963a404d99"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"db6321d08e96f564f1fd011e3cbc94980d1af317","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"1c1c8070_c2f6e0d0","updated":"2023-09-15 10:20:43.000000000","message":"I have implemented and prioritized the \"image_info\" support.\n\nI have left the oslo.config based options as a backup and removed the use\nof the kernel parameters.","commit_id":"720a3a1674b671bdb28bbb7e1c504340010015c0"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"e6f5c3b4b98a206dbe8aea67aa9420c722791ced","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"bfb8ef5c_9362736e","updated":"2023-10-02 04:51:18.000000000","message":"I\u0027d have the same suggestion here as in [1], why not implement rfc1738 section 3.1 to encode username/password in the url itself rather than adding image_info attributes?\n\n[1] https://review.opendev.org/c/openstack/ironic/+/890411","commit_id":"9bf768479bbc1d1a797275aaf460adb4fb53b845"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"b93207a95810b750dc0ffae9df3222d331a0c4e4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"a34ea94b_fa90701a","in_reply_to":"26bce39e_acc39f88","updated":"2023-10-02 08:53:28.000000000","message":"If I take a different interpretation of your comment and you have actually meant to use Basic Auth rfc 7617 but pass the creds to Ironic the same way as rfc 1738 used to. Then my objection would be that in this case we would need to have the credentials stored in all the places where the urls are used which could also increase the attack surface for users of Ironic. \n\nWith the current approach the user needs to specify the credentials once in 1 place. Ofc there is a limitation currently, because the credentials are added to global ironic config, they apply to all image downloads. In the future we could implement node specific Bauth support but even in that case I would rather expand e.g. the Ironic Node\u0027s instance_info API field with bauth username and password or something along these lines, instead of adding the credentials to the url.","commit_id":"9bf768479bbc1d1a797275aaf460adb4fb53b845"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"9d34b5bd9f550cb634c37feab8be1864103d79ff","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"26bce39e_acc39f88","in_reply_to":"536e7601_988e4765","updated":"2023-10-02 08:18:46.000000000","message":"Edit typo:\n\nin point 2 I mean to say this:\n\nupdated by [1] and in section 3.2.1 of [1] it is clearly stated that passing username and password in the url as clear text is a security issue in almost all context","commit_id":"9bf768479bbc1d1a797275aaf460adb4fb53b845"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"6a312f0f342512ae0a5d240c17ea5734fe2901c7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"536e7601_988e4765","in_reply_to":"bfb8ef5c_9362736e","updated":"2023-10-02 08:16:31.000000000","message":"Thanks for the review.\n\nMy opinion related to rfc 1738 3.1 support and it\u0027s relation to \u0027Basic Auth\u0027 support is the following:\n\n- rfc 1738 is \"supported\" by Ironic, user can just add the username and password to the url, Ironic/IPA won\u0027t remove it\n- That said rfc 1738 is obsolete for nearly 20 years and it was updated by [1] and in section 3.2.1 of [2] it is clearly stated that passing username and  \n  password in the url as clear text is a security issue in almost all context\n- In my current work I am implementing support for [2] known as \u0027Basic Auth\u0027 which is also supported by default in [3] that is used by Ironic and IPA to handle HTTP requests,\n  and the authentication credentials are sent in the request header in encrypted format which is more secure compared to passing them in the URL.\n- My \u0027Basic Auth\u0027 work is not mutually exclusive with the rfc 1738 section 3.1 support so I don\u0027t see any reason why my changes should be put on hold.\n\n[1] : https://datatracker.ietf.org/doc/html/rfc3986\n[2] : https://datatracker.ietf.org/doc/html/rfc7617\n[3] : https://requests.readthedocs.io/en/latest/user/authentication/#basic-authentication","commit_id":"9bf768479bbc1d1a797275aaf460adb4fb53b845"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"6d121567203aeb160d6fb41149bbc7822efdcd62","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"12c3859b_bb4bc374","updated":"2023-10-13 12:57:21.000000000","message":"recheck","commit_id":"70961789a60c18c7169adef1bbafee232274ac2e"}],"ironic_python_agent/config.py":[{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"d511e3dcbf309eea08000622e9ffa71c78f206fa","unresolved":true,"context_lines":[{"line_number":267,"context_line":"               help\u003d\u0027Pre-shared username used in Basic Auth process \u0027"},{"line_number":268,"context_line":"                    \u0027against the http(s) server that hosts the disk image.\u0027),"},{"line_number":269,"context_line":"    cfg.StrOpt(\u0027user_image_server_password\u0027,"},{"line_number":270,"context_line":"               default\u003dAPARAMS.get(\u0027ipa-user-image-server-password\u0027),"},{"line_number":271,"context_line":"               help\u003d\u0027Pre-shared password used in Basic Auth process \u0027"},{"line_number":272,"context_line":"                    \u0027against the http(s) server that hosts the disk image.\u0027),"},{"line_number":273,"context_line":"    cfg.BoolOpt(\u0027user_image_server_basic_auth\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"eb106c4f_43120bcd","line":270,"updated":"2023-08-07 21:02:28.000000000","message":"This is going to be problematic. Kernel command lines are logged in plaintext all over the place, and we won\u0027t be able to secure this password. We need to set this late with the payload from conductor...","commit_id":"240538bc4e0d31ba6d2a741c50b4df963a404d99"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"db6321d08e96f564f1fd011e3cbc94980d1af317","unresolved":false,"context_lines":[{"line_number":267,"context_line":"               help\u003d\u0027Pre-shared username used in Basic Auth process \u0027"},{"line_number":268,"context_line":"                    \u0027against the http(s) server that hosts the disk image.\u0027),"},{"line_number":269,"context_line":"    cfg.StrOpt(\u0027user_image_server_password\u0027,"},{"line_number":270,"context_line":"               default\u003dAPARAMS.get(\u0027ipa-user-image-server-password\u0027),"},{"line_number":271,"context_line":"               help\u003d\u0027Pre-shared password used in Basic Auth process \u0027"},{"line_number":272,"context_line":"                    \u0027against the http(s) server that hosts the disk image.\u0027),"},{"line_number":273,"context_line":"    cfg.BoolOpt(\u0027user_image_server_basic_auth\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"0ce61187_7fd9f6c5","line":270,"in_reply_to":"cbc01ace_51ffa0f1","updated":"2023-09-15 10:20:43.000000000","message":"Done","commit_id":"240538bc4e0d31ba6d2a741c50b4df963a404d99"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"7a7c7dd3ffd8ea3556b898910761944761e1c60e","unresolved":true,"context_lines":[{"line_number":267,"context_line":"               help\u003d\u0027Pre-shared username used in Basic Auth process \u0027"},{"line_number":268,"context_line":"                    \u0027against the http(s) server that hosts the disk image.\u0027),"},{"line_number":269,"context_line":"    cfg.StrOpt(\u0027user_image_server_password\u0027,"},{"line_number":270,"context_line":"               default\u003dAPARAMS.get(\u0027ipa-user-image-server-password\u0027),"},{"line_number":271,"context_line":"               help\u003d\u0027Pre-shared password used in Basic Auth process \u0027"},{"line_number":272,"context_line":"                    \u0027against the http(s) server that hosts the disk image.\u0027),"},{"line_number":273,"context_line":"    cfg.BoolOpt(\u0027user_image_server_basic_auth\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"cbc01ace_51ffa0f1","line":270,"in_reply_to":"e8c0d6ef_1b1c87be","updated":"2023-09-04 08:38:41.000000000","message":"Thanks for the reviews!!! I am back from vacation, I will modify this feature according to your comments.","commit_id":"240538bc4e0d31ba6d2a741c50b4df963a404d99"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a392a9e4b4332c5165cd678dd144cd9e15393362","unresolved":true,"context_lines":[{"line_number":267,"context_line":"               help\u003d\u0027Pre-shared username used in Basic Auth process \u0027"},{"line_number":268,"context_line":"                    \u0027against the http(s) server that hosts the disk image.\u0027),"},{"line_number":269,"context_line":"    cfg.StrOpt(\u0027user_image_server_password\u0027,"},{"line_number":270,"context_line":"               default\u003dAPARAMS.get(\u0027ipa-user-image-server-password\u0027),"},{"line_number":271,"context_line":"               help\u003d\u0027Pre-shared password used in Basic Auth process \u0027"},{"line_number":272,"context_line":"                    \u0027against the http(s) server that hosts the disk image.\u0027),"},{"line_number":273,"context_line":"    cfg.BoolOpt(\u0027user_image_server_basic_auth\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"e8c0d6ef_1b1c87be","line":270,"in_reply_to":"eb106c4f_43120bcd","updated":"2023-08-17 15:09:29.000000000","message":"Agreed. Can we receive these parameters with the rest of image information? That already includes the potentially sensitive configdrive.","commit_id":"240538bc4e0d31ba6d2a741c50b4df963a404d99"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"6c6cc178b68ae8db31146441509f7dd1a2aba876","unresolved":true,"context_lines":[{"line_number":285,"context_line":"                     \u0027into mandatory variables.\u0027"},{"line_number":286,"context_line":"                     \u0027This variable can be also configured via image_info.\u0027"},{"line_number":287,"context_line":"                     \u0027Value coming from image_info takes precedence over\u0027"},{"line_number":288,"context_line":"                     \u0027value coming from command line or configuration file.\u0027),"},{"line_number":289,"context_line":"    cfg.BoolOpt(\u0027agent_token_required\u0027,"},{"line_number":290,"context_line":"                default\u003dAPARAMS.get(\u0027ipa-agent-token-required\u0027, False),"},{"line_number":291,"context_line":"                help\u003d\u0027Control to enforce if API command requests should \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"eea1aafa_2a5ca395","line":288,"updated":"2023-10-03 00:57:50.000000000","message":"My comment on the ironic review[1] would apply here too, to future proof adding other authentication types\n\n[1] https://review.opendev.org/c/openstack/ironic/+/890411/5/ironic/conf/deploy.py#38","commit_id":"9bf768479bbc1d1a797275aaf460adb4fb53b845"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"68fc2f6014dc1834f55ed5d6f97e05c1d9740d2b","unresolved":false,"context_lines":[{"line_number":285,"context_line":"                     \u0027into mandatory variables.\u0027"},{"line_number":286,"context_line":"                     \u0027This variable can be also configured via image_info.\u0027"},{"line_number":287,"context_line":"                     \u0027Value coming from image_info takes precedence over\u0027"},{"line_number":288,"context_line":"                     \u0027value coming from command line or configuration file.\u0027),"},{"line_number":289,"context_line":"    cfg.BoolOpt(\u0027agent_token_required\u0027,"},{"line_number":290,"context_line":"                default\u003dAPARAMS.get(\u0027ipa-agent-token-required\u0027, False),"},{"line_number":291,"context_line":"                help\u003d\u0027Control to enforce if API command requests should \u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"68c5315d_922868ce","line":288,"in_reply_to":"eea1aafa_2a5ca395","updated":"2023-10-10 08:12:48.000000000","message":"Done","commit_id":"9bf768479bbc1d1a797275aaf460adb4fb53b845"}],"ironic_python_agent/extensions/standby.py":[{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"a392a9e4b4332c5165cd678dd144cd9e15393362","unresolved":true,"context_lines":[{"line_number":852,"context_line":"        return result_msg"},{"line_number":853,"context_line":""},{"line_number":854,"context_line":"    @base.async_command(\u0027prepare_image\u0027, _validate_image_info)"},{"line_number":855,"context_line":"    def prepare_image(self, image_info, configdrive\u003dNone):"},{"line_number":856,"context_line":"        \"\"\"Asynchronously prepares specified image on local OS install device."},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        In this case, \u0027prepare\u0027 means make local machine completely ready to"}],"source_content_type":"text/x-python","patch_set":4,"id":"1a826fae_6f619567","line":855,"updated":"2023-08-17 15:09:29.000000000","message":"Could be a new argument here or a part of image_info.","commit_id":"240538bc4e0d31ba6d2a741c50b4df963a404d99"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"7a7c7dd3ffd8ea3556b898910761944761e1c60e","unresolved":true,"context_lines":[{"line_number":852,"context_line":"        return result_msg"},{"line_number":853,"context_line":""},{"line_number":854,"context_line":"    @base.async_command(\u0027prepare_image\u0027, _validate_image_info)"},{"line_number":855,"context_line":"    def prepare_image(self, image_info, configdrive\u003dNone):"},{"line_number":856,"context_line":"        \"\"\"Asynchronously prepares specified image on local OS install device."},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        In this case, \u0027prepare\u0027 means make local machine completely ready to"}],"source_content_type":"text/x-python","patch_set":4,"id":"d243ed86_50b7c2c7","line":855,"in_reply_to":"1a826fae_6f619567","updated":"2023-09-04 08:38:41.000000000","message":"Ack","commit_id":"240538bc4e0d31ba6d2a741c50b4df963a404d99"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"db6321d08e96f564f1fd011e3cbc94980d1af317","unresolved":false,"context_lines":[{"line_number":852,"context_line":"        return result_msg"},{"line_number":853,"context_line":""},{"line_number":854,"context_line":"    @base.async_command(\u0027prepare_image\u0027, _validate_image_info)"},{"line_number":855,"context_line":"    def prepare_image(self, image_info, configdrive\u003dNone):"},{"line_number":856,"context_line":"        \"\"\"Asynchronously prepares specified image on local OS install device."},{"line_number":857,"context_line":""},{"line_number":858,"context_line":"        In this case, \u0027prepare\u0027 means make local machine completely ready to"}],"source_content_type":"text/x-python","patch_set":4,"id":"f1b5a33d_0f6abcaf","line":855,"in_reply_to":"d243ed86_50b7c2c7","updated":"2023-09-15 10:20:43.000000000","message":"Done","commit_id":"240538bc4e0d31ba6d2a741c50b4df963a404d99"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"e85491e15fe3a296a44f07c65c440132e0c802a0","unresolved":true,"context_lines":[{"line_number":88,"context_line":"    image_server_password \u003d None"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    if image_info.get(\u0027image_server_auth_strategy\u0027) \u003d\u003d \u0027http_basic\u0027:"},{"line_number":91,"context_line":"        image_server_user \u003d image_info.get(\u0027image_server_user\u0027)"},{"line_number":92,"context_line":"        image_server_password \u003d image_info.get(\u0027image_server_password\u0027)"},{"line_number":93,"context_line":"        _verify_basic_auth_creds("},{"line_number":94,"context_line":"            image_server_user,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9610f3c8_f4db339b","line":91,"range":{"start_line":91,"start_character":44,"end_line":91,"end_character":61},"updated":"2023-10-16 09:16:56.000000000","message":"This really should have been image_server_username, since we use \"username\" as a standard in ironic..","commit_id":"70961789a60c18c7169adef1bbafee232274ac2e"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"466f46f808840e97f8f4a3c01c246d9b308b99f8","unresolved":true,"context_lines":[{"line_number":88,"context_line":"    image_server_password \u003d None"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":"    if image_info.get(\u0027image_server_auth_strategy\u0027) \u003d\u003d \u0027http_basic\u0027:"},{"line_number":91,"context_line":"        image_server_user \u003d image_info.get(\u0027image_server_user\u0027)"},{"line_number":92,"context_line":"        image_server_password \u003d image_info.get(\u0027image_server_password\u0027)"},{"line_number":93,"context_line":"        _verify_basic_auth_creds("},{"line_number":94,"context_line":"            image_server_user,"}],"source_content_type":"text/x-python","patch_set":10,"id":"eaf5f8eb_87ec4067","line":91,"range":{"start_line":91,"start_character":44,"end_line":91,"end_character":61},"in_reply_to":"9610f3c8_f4db339b","updated":"2023-10-16 10:55:01.000000000","message":"Would it be fine to make a new change and change it to username? or is it fine like this going forward?","commit_id":"70961789a60c18c7169adef1bbafee232274ac2e"}],"ironic_python_agent/tests/unit/extensions/test_standby.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"6c6cc178b68ae8db31146441509f7dd1a2aba876","unresolved":true,"context_lines":[{"line_number":545,"context_line":"    @mock.patch(\u0027hashlib.new\u0027, autospec\u003dTrue)"},{"line_number":546,"context_line":"    @mock.patch(\u0027builtins.open\u0027, autospec\u003dTrue)"},{"line_number":547,"context_line":"    @mock.patch(\u0027requests.get\u0027, autospec\u003dTrue)"},{"line_number":548,"context_line":"    def test_download_image_basic_auth_conf_sucess(self, requests_mock,"},{"line_number":549,"context_line":"                                                   open_mock, hash_mock):"},{"line_number":550,"context_line":"        image_info \u003d _build_fake_image_info()"},{"line_number":551,"context_line":"        CONF.set_override(\u0027image_server_basic_auth\u0027, True)"}],"source_content_type":"text/x-python","patch_set":6,"id":"c20588e0_3b008d3e","line":548,"range":{"start_line":548,"start_character":44,"end_line":548,"end_character":50},"updated":"2023-10-03 00:57:50.000000000","message":"nit: success","commit_id":"9bf768479bbc1d1a797275aaf460adb4fb53b845"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"68fc2f6014dc1834f55ed5d6f97e05c1d9740d2b","unresolved":false,"context_lines":[{"line_number":545,"context_line":"    @mock.patch(\u0027hashlib.new\u0027, autospec\u003dTrue)"},{"line_number":546,"context_line":"    @mock.patch(\u0027builtins.open\u0027, autospec\u003dTrue)"},{"line_number":547,"context_line":"    @mock.patch(\u0027requests.get\u0027, autospec\u003dTrue)"},{"line_number":548,"context_line":"    def test_download_image_basic_auth_conf_sucess(self, requests_mock,"},{"line_number":549,"context_line":"                                                   open_mock, hash_mock):"},{"line_number":550,"context_line":"        image_info \u003d _build_fake_image_info()"},{"line_number":551,"context_line":"        CONF.set_override(\u0027image_server_basic_auth\u0027, True)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ccc21c10_6cf1a5b3","line":548,"range":{"start_line":548,"start_character":44,"end_line":548,"end_character":50},"in_reply_to":"c20588e0_3b008d3e","updated":"2023-10-10 08:12:48.000000000","message":"Done","commit_id":"9bf768479bbc1d1a797275aaf460adb4fb53b845"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"6c6cc178b68ae8db31146441509f7dd1a2aba876","unresolved":true,"context_lines":[{"line_number":576,"context_line":"    @mock.patch(\u0027hashlib.new\u0027, autospec\u003dTrue)"},{"line_number":577,"context_line":"    @mock.patch(\u0027builtins.open\u0027, autospec\u003dTrue)"},{"line_number":578,"context_line":"    @mock.patch(\u0027requests.get\u0027, autospec\u003dTrue)"},{"line_number":579,"context_line":"    def test_download_image_basic_auth_image_info_sucess(self,"},{"line_number":580,"context_line":"                                                         requests_mock,"},{"line_number":581,"context_line":"                                                         open_mock,"},{"line_number":582,"context_line":"                                                         hash_mock):"}],"source_content_type":"text/x-python","patch_set":6,"id":"c314a8fd_d6390278","line":579,"updated":"2023-10-03 00:57:50.000000000","message":"ditto","commit_id":"9bf768479bbc1d1a797275aaf460adb4fb53b845"},{"author":{"_account_id":35233,"name":"Adam Rozman","email":"adam.rozman@est.tech","username":"rozzix"},"change_message_id":"68fc2f6014dc1834f55ed5d6f97e05c1d9740d2b","unresolved":false,"context_lines":[{"line_number":576,"context_line":"    @mock.patch(\u0027hashlib.new\u0027, autospec\u003dTrue)"},{"line_number":577,"context_line":"    @mock.patch(\u0027builtins.open\u0027, autospec\u003dTrue)"},{"line_number":578,"context_line":"    @mock.patch(\u0027requests.get\u0027, autospec\u003dTrue)"},{"line_number":579,"context_line":"    def test_download_image_basic_auth_image_info_sucess(self,"},{"line_number":580,"context_line":"                                                         requests_mock,"},{"line_number":581,"context_line":"                                                         open_mock,"},{"line_number":582,"context_line":"                                                         hash_mock):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ab55e05f_df1bd7f3","line":579,"in_reply_to":"c314a8fd_d6390278","updated":"2023-10-10 08:12:48.000000000","message":"Done","commit_id":"9bf768479bbc1d1a797275aaf460adb4fb53b845"}],"releasenotes/notes/basic-auth-for-user-image-server-150835e7567444da.yaml":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"533260200b12b2c76648087388653cedb77882b1","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    Introducing basic authentication and configurable authentication strategy"},{"line_number":5,"context_line":"    support for image and image checksum download processes. This feature"},{"line_number":6,"context_line":"    introduces 3 new variables that could be set (either via oslo.config or"},{"line_number":7,"context_line":"    image_info) to select the authentication strategy an provide credentials"},{"line_number":8,"context_line":"    for HTTP(S) basic authentication. The 3 variables are structured in way"},{"line_number":9,"context_line":"    that 1 of them \u0027image_server_auth_strategy\u0027 (string) provides the ability"},{"line_number":10,"context_line":"    to select between authentication strategies by specifying the name of"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"38eb2cfc_12448fbd","line":7,"range":{"start_line":7,"start_character":54,"end_line":7,"end_character":56},"updated":"2023-10-13 10:03:28.000000000","message":"nit: and","commit_id":"70961789a60c18c7169adef1bbafee232274ac2e"}]}
