)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2e013ef81828a6d045c9d21ff845e48ab1519843","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Lance Bragstad \u003cldbragst@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-06-02 19:31:58 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Purpose keystone-api-validation blueprint"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This document describes the work required for adding a jsonschema"},{"line_number":10,"context_line":"validation layer to the Keystone API."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1ae5cdf2_cf055f7b","line":7,"updated":"2014-06-03 05:58:06.000000000","message":"s/Purpose/Propose?\n\nalso, the blueprint is called api-validation now","commit_id":"f388e4310ded5ea3067598487794d24467472d27"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e58a9aa4bf92d11cca6977003cdce18f229c10e9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Lance Bragstad \u003cldbragst@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-06-02 19:31:58 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Purpose keystone-api-validation blueprint"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This document describes the work required for adding a jsonschema"},{"line_number":10,"context_line":"validation layer to the Keystone API."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1ae5cdf2_d1b41484","line":7,"in_reply_to":"1ae5cdf2_cf055f7b","updated":"2014-06-03 13:18:38.000000000","message":"good catch, done.","commit_id":"f388e4310ded5ea3067598487794d24467472d27"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2e013ef81828a6d045c9d21ff845e48ab1519843","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This document describes the work required for adding a jsonschema"},{"line_number":10,"context_line":"validation layer to the Keystone API."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I9057014227ebc093d15dfe6ee1f43c60693b6230"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1ae5cdf2_cf2c7f05","line":12,"updated":"2014-06-03 05:58:06.000000000","message":"want to add a reference to the BP here?\nimplements: bp api-validation","commit_id":"f388e4310ded5ea3067598487794d24467472d27"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e58a9aa4bf92d11cca6977003cdce18f229c10e9","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This document describes the work required for adding a jsonschema"},{"line_number":10,"context_line":"validation layer to the Keystone API."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I9057014227ebc093d15dfe6ee1f43c60693b6230"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"1ae5cdf2_317618d8","line":12,"in_reply_to":"1ae5cdf2_cf2c7f05","updated":"2014-06-03 13:18:38.000000000","message":"Done","commit_id":"f388e4310ded5ea3067598487794d24467472d27"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"69adeddcfbf76f26579f41aa996ba076262cff0b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Lance Bragstad \u003cldbragst@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-06-03 13:21:22 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Purpose api-validation blueprint"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This document describes the work required for adding a jsonschema"},{"line_number":10,"context_line":"validation layer to the Keystone API."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1ae5cdf2_43464350","line":7,"updated":"2014-06-04 18:57:26.000000000","message":"Change \"Purpose\" to \"Propose\" ?","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Lance Bragstad \u003cldbragst@us.ibm.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-06-03 13:21:22 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Purpose api-validation blueprint"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This document describes the work required for adding a jsonschema"},{"line_number":10,"context_line":"validation layer to the Keystone API."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1ae5cdf2_27c75e65","line":7,"in_reply_to":"1ae5cdf2_43464350","updated":"2014-06-05 18:23:42.000000000","message":"Done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"}],"specs/juno/keystone-api-validation.rst":[{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6697f2621488c054d73e59d755d3452e24d21453","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Keystone API Validation"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Existing launchpad blueprint URL::"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_364bc12c","line":9,"updated":"2014-05-28 04:15:58.000000000","message":"the number of \u003d\u0027s has to match the number of characters in the title (Keystone API Validation)","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"61d143ce6e475a32d90eb414e5a4d13bc7fde909","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Keystone API Validation"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Existing launchpad blueprint URL::"},{"line_number":12,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_de79c4fd","line":9,"in_reply_to":"3ae8d1ca_364bc12c","updated":"2014-05-28 13:50:47.000000000","message":"Done","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6697f2621488c054d73e59d755d3452e24d21453","unresolved":false,"context_lines":[{"line_number":13,"context_line":"  https://blueprints.launchpad.net/keystone/+spec/keystone-api-validation"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Currently, the Keystone API has different implementations for validating"},{"line_number":16,"context_line":"resources. The purpose of this blueprint is to track the progress of"},{"line_number":17,"context_line":"standardizing the validation layer in Keystone and implement it consistently"},{"line_number":18,"context_line":"across Keystone."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_96ee55eb","line":16,"updated":"2014-05-28 04:15:58.000000000","message":"requests instead of resources?","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"61d143ce6e475a32d90eb414e5a4d13bc7fde909","unresolved":false,"context_lines":[{"line_number":13,"context_line":"  https://blueprints.launchpad.net/keystone/+spec/keystone-api-validation"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Currently, the Keystone API has different implementations for validating"},{"line_number":16,"context_line":"resources. The purpose of this blueprint is to track the progress of"},{"line_number":17,"context_line":"standardizing the validation layer in Keystone and implement it consistently"},{"line_number":18,"context_line":"across Keystone."},{"line_number":19,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_1e840cd3","line":16,"in_reply_to":"3ae8d1ca_96ee55eb","updated":"2014-05-28 13:50:47.000000000","message":"Done","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6697f2621488c054d73e59d755d3452e24d21453","unresolved":false,"context_lines":[{"line_number":22,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Currently Keystone doesn\u0027t have a consistent API validation layer. Some"},{"line_number":25,"context_line":"resources validate input in the resource controller and some fail out in the"},{"line_number":26,"context_line":"backend. Ideally, Keystone would have some validation in place to catch"},{"line_number":27,"context_line":"unallowed parameters and return a validation error to the user."},{"line_number":28,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_b6ba71df","line":25,"updated":"2014-05-28 04:15:58.000000000","message":"s/in/at","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"61d143ce6e475a32d90eb414e5a4d13bc7fde909","unresolved":false,"context_lines":[{"line_number":22,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Currently Keystone doesn\u0027t have a consistent API validation layer. Some"},{"line_number":25,"context_line":"resources validate input in the resource controller and some fail out in the"},{"line_number":26,"context_line":"backend. Ideally, Keystone would have some validation in place to catch"},{"line_number":27,"context_line":"unallowed parameters and return a validation error to the user."},{"line_number":28,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_de60e437","line":25,"in_reply_to":"3ae8d1ca_b6ba71df","updated":"2014-05-28 13:50:47.000000000","message":"Done","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6697f2621488c054d73e59d755d3452e24d21453","unresolved":false,"context_lines":[{"line_number":118,"context_line":"Security Impact"},{"line_number":119,"context_line":"---------------"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Describe any potential security impact on the system.  Some of the items to"},{"line_number":122,"context_line":"consider include:"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"* Does this change touch sensitive data such as tokens, keys, or user data? No"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_31f90bc9","line":121,"updated":"2014-05-28 04:15:58.000000000","message":"Needs to be updated, probably None","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"61d143ce6e475a32d90eb414e5a4d13bc7fde909","unresolved":false,"context_lines":[{"line_number":118,"context_line":"Security Impact"},{"line_number":119,"context_line":"---------------"},{"line_number":120,"context_line":""},{"line_number":121,"context_line":"Describe any potential security impact on the system.  Some of the items to"},{"line_number":122,"context_line":"consider include:"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"* Does this change touch sensitive data such as tokens, keys, or user data? No"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_940abc1f","line":121,"in_reply_to":"3ae8d1ca_31f90bc9","updated":"2014-05-28 13:50:47.000000000","message":"Done","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6697f2621488c054d73e59d755d3452e24d21453","unresolved":false,"context_lines":[{"line_number":147,"context_line":"---------------------"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Aside from the API, are there other ways a user will interact with this"},{"line_number":150,"context_line":"feature? No"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"* Does this change have an impact on python-keystoneclient? What does the user"},{"line_number":153,"context_line":"  interface there look like? This change will be enforcing the Identity API"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_1115eff0","line":150,"updated":"2014-05-28 04:15:58.000000000","message":"Needs to be updated, probably None","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"61d143ce6e475a32d90eb414e5a4d13bc7fde909","unresolved":false,"context_lines":[{"line_number":147,"context_line":"---------------------"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Aside from the API, are there other ways a user will interact with this"},{"line_number":150,"context_line":"feature? No"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"* Does this change have an impact on python-keystoneclient? What does the user"},{"line_number":153,"context_line":"  interface there look like? This change will be enforcing the Identity API"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_141eac63","line":150,"in_reply_to":"3ae8d1ca_1115eff0","updated":"2014-05-28 13:50:47.000000000","message":"Done","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6697f2621488c054d73e59d755d3452e24d21453","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"This code will be called primarily on resource create and update. The"},{"line_number":161,"context_line":"validator will not have to rely on persistent storage for validating a"},{"line_number":162,"context_line":"request. A similar operation to this would be the performance of"},{"line_number":163,"context_line":"notifications, as they are implemented with a wrapper and called on the"},{"line_number":164,"context_line":"create, update, and delete operations of some Keystone resources."},{"line_number":165,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_f10fa3df","line":162,"updated":"2014-05-28 04:15:58.000000000","message":"Needs to be updated","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"61d143ce6e475a32d90eb414e5a4d13bc7fde909","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"This code will be called primarily on resource create and update. The"},{"line_number":161,"context_line":"validator will not have to rely on persistent storage for validating a"},{"line_number":162,"context_line":"request. A similar operation to this would be the performance of"},{"line_number":163,"context_line":"notifications, as they are implemented with a wrapper and called on the"},{"line_number":164,"context_line":"create, update, and delete operations of some Keystone resources."},{"line_number":165,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_7451b00d","line":162,"in_reply_to":"3ae8d1ca_f10fa3df","updated":"2014-05-28 13:50:47.000000000","message":"Response inline","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6697f2621488c054d73e59d755d3452e24d21453","unresolved":false,"context_lines":[{"line_number":170,"context_line":"---------------------"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"Discuss things that will affect how you deploy and configure OpenStack"},{"line_number":173,"context_line":"that have not already been mentioned, such as:"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"* What config options are being added? Should they be more generic than"},{"line_number":176,"context_line":"  proposed (for example a flag that other hypervisor drivers might want to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_716c739d","line":173,"updated":"2014-05-28 04:15:58.000000000","message":"replace with None? \nI don\u0027t think there are any deployer impacts","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"61d143ce6e475a32d90eb414e5a4d13bc7fde909","unresolved":false,"context_lines":[{"line_number":170,"context_line":"---------------------"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"Discuss things that will affect how you deploy and configure OpenStack"},{"line_number":173,"context_line":"that have not already been mentioned, such as:"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"* What config options are being added? Should they be more generic than"},{"line_number":176,"context_line":"  proposed (for example a flag that other hypervisor drivers might want to"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_544e7470","line":173,"in_reply_to":"3ae8d1ca_716c739d","updated":"2014-05-28 13:50:47.000000000","message":"Done","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6697f2621488c054d73e59d755d3452e24d21453","unresolved":false,"context_lines":[{"line_number":214,"context_line":"----------"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"Work items or tasks -- break the feature up into the things that need to be"},{"line_number":217,"context_line":"done to implement it. Those parts might end up being done by different people,"},{"line_number":218,"context_line":"but we\u0027re mostly trying to understand the timeline for implementation."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"1. Initial validator implementation"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_d16387af","line":217,"updated":"2014-05-28 04:15:58.000000000","message":"you can get rid of this paragraph","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"61d143ce6e475a32d90eb414e5a4d13bc7fde909","unresolved":false,"context_lines":[{"line_number":214,"context_line":"----------"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"Work items or tasks -- break the feature up into the things that need to be"},{"line_number":217,"context_line":"done to implement it. Those parts might end up being done by different people,"},{"line_number":218,"context_line":"but we\u0027re mostly trying to understand the timeline for implementation."},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"1. Initial validator implementation"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_14630cdd","line":217,"in_reply_to":"3ae8d1ca_d16387af","updated":"2014-05-28 13:50:47.000000000","message":"Done","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6697f2621488c054d73e59d755d3452e24d21453","unresolved":false,"context_lines":[{"line_number":220,"context_line":"1. Initial validator implementation"},{"line_number":221,"context_line":"2. Implement validator on existing Keystone resources"},{"line_number":222,"context_line":"3. Implement validator on existing Keystone extentions"},{"line_number":223,"context_line":"4. Enforce validation on purposed Keystone extentions"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_5148572d","line":223,"updated":"2014-05-28 04:15:58.000000000","message":"s/purposed/proposed ?","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"61d143ce6e475a32d90eb414e5a4d13bc7fde909","unresolved":false,"context_lines":[{"line_number":220,"context_line":"1. Initial validator implementation"},{"line_number":221,"context_line":"2. Implement validator on existing Keystone resources"},{"line_number":222,"context_line":"3. Implement validator on existing Keystone extentions"},{"line_number":223,"context_line":"4. Enforce validation on purposed Keystone extentions"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_f4aa20d1","line":223,"in_reply_to":"3ae8d1ca_5148572d","updated":"2014-05-28 13:50:47.000000000","message":"Done","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6697f2621488c054d73e59d755d3452e24d21453","unresolved":false,"context_lines":[{"line_number":226,"context_line":"Dependencies"},{"line_number":227,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"* Include specific references to specs and/or blueprints in keystone, or in"},{"line_number":230,"context_line":"  other projects, that this one either depends on or is related to. None"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"* If this requires functionality of another project that is not currently used"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_314bcb2c","line":229,"updated":"2014-05-28 04:15:58.000000000","message":"replace all this with None?\nMight want to mention jsonschema library, but that it\u0027s already in global requirements","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"61d143ce6e475a32d90eb414e5a4d13bc7fde909","unresolved":false,"context_lines":[{"line_number":226,"context_line":"Dependencies"},{"line_number":227,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":228,"context_line":""},{"line_number":229,"context_line":"* Include specific references to specs and/or blueprints in keystone, or in"},{"line_number":230,"context_line":"  other projects, that this one either depends on or is related to. None"},{"line_number":231,"context_line":""},{"line_number":232,"context_line":"* If this requires functionality of another project that is not currently used"}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_545f54e5","line":229,"in_reply_to":"3ae8d1ca_314bcb2c","updated":"2014-05-28 13:50:47.000000000","message":"Done","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"6697f2621488c054d73e59d755d3452e24d21453","unresolved":false,"context_lines":[{"line_number":261,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"Useful Links:"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"* http://spacetelescope.github.io/understanding-json-schema/reference/ \\"},{"line_number":266,"context_line":"  object.html"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_71be3301","line":264,"updated":"2014-05-28 04:15:58.000000000","message":"i would add links to the jsonschema library (pypi)\n\nand the jsonschema spec, and what version you will be using - 3 or 4\n\nhttp://tools.ietf.org/html/draft-zyp-json-schema-04\nhttp://tools.ietf.org/html/draft-zyp-json-schema-03","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"61d143ce6e475a32d90eb414e5a4d13bc7fde909","unresolved":false,"context_lines":[{"line_number":261,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":262,"context_line":""},{"line_number":263,"context_line":"Useful Links:"},{"line_number":264,"context_line":""},{"line_number":265,"context_line":"* http://spacetelescope.github.io/understanding-json-schema/reference/ \\"},{"line_number":266,"context_line":"  object.html"},{"line_number":267,"context_line":""}],"source_content_type":"text/x-rst","patch_set":2,"id":"3ae8d1ca_1456acd2","line":264,"in_reply_to":"3ae8d1ca_71be3301","updated":"2014-05-28 13:50:47.000000000","message":"Done","commit_id":"f83d91569f0744fa87b3569e24f0a4f6e2ce26c6"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"e96743fa62e1426d6fc899ab1af2b8e85787993f","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Keystone API Validation"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Existing launchpad blueprint URL::"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"  https://blueprints.launchpad.net/keystone/+spec/keystone-api-validation"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ae8d1ca_dbd56844","line":11,"updated":"2014-05-28 02:32:39.000000000","message":"Single colon only needed here (see comment about indent below)","commit_id":"6d15daafe471fc5bcabd91edd6997024b6279c0d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d6905cdc459a2b3c8e7752f9b8b3642409430676","unresolved":false,"context_lines":[{"line_number":8,"context_line":"Keystone API Validation"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Existing launchpad blueprint URL::"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"  https://blueprints.launchpad.net/keystone/+spec/keystone-api-validation"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ae8d1ca_ded38436","line":11,"in_reply_to":"3ae8d1ca_dbd56844","updated":"2014-05-28 13:39:19.000000000","message":"Done","commit_id":"6d15daafe471fc5bcabd91edd6997024b6279c0d"},{"author":{"_account_id":2903,"name":"Morgan Fainberg","email":"morgan.fainberg@gmail.com","username":"mdrnstm"},"change_message_id":"e96743fa62e1426d6fc899ab1af2b8e85787993f","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Existing launchpad blueprint URL::"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"  https://blueprints.launchpad.net/keystone/+spec/keystone-api-validation"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Currently, the Keystone API has different implementations for validating"},{"line_number":16,"context_line":"resources. The purpose of this blueprint is to track the progress of"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ae8d1ca_bbd09c54","line":13,"updated":"2014-05-28 02:32:39.000000000","message":"This shouldn\u0027t be indented, it turns this into a code-block instead of a link.","commit_id":"6d15daafe471fc5bcabd91edd6997024b6279c0d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d6905cdc459a2b3c8e7752f9b8b3642409430676","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Existing launchpad blueprint URL::"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"  https://blueprints.launchpad.net/keystone/+spec/keystone-api-validation"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Currently, the Keystone API has different implementations for validating"},{"line_number":16,"context_line":"resources. The purpose of this blueprint is to track the progress of"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ae8d1ca_fed84055","line":13,"in_reply_to":"3ae8d1ca_bbd09c54","updated":"2014-05-28 13:39:19.000000000","message":"Done","commit_id":"6d15daafe471fc5bcabd91edd6997024b6279c0d"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"dbd5fd0c7176b081924af9e5453d5768cca73c3a","unresolved":false,"context_lines":[{"line_number":89,"context_line":"Alternatives"},{"line_number":90,"context_line":"------------"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"None, but open to other suggestions here."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Data Model Impact"},{"line_number":95,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ae8d1ca_20029b3e","line":92,"updated":"2014-05-28 02:13:30.000000000","message":"Probably the most \"correct\" alternative would be a set of Python objects that mapped properties to the values of the JSON objects.  This is only correct from an object oriented approach, and not from a JSON driven approach.  In a strictly typed language, the objects would enforce the contract, but Python\u0027s weak typing makes it a poorer choice to enforce the contract.","commit_id":"6d15daafe471fc5bcabd91edd6997024b6279c0d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d6905cdc459a2b3c8e7752f9b8b3642409430676","unresolved":false,"context_lines":[{"line_number":89,"context_line":"Alternatives"},{"line_number":90,"context_line":"------------"},{"line_number":91,"context_line":""},{"line_number":92,"context_line":"None, but open to other suggestions here."},{"line_number":93,"context_line":""},{"line_number":94,"context_line":"Data Model Impact"},{"line_number":95,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ae8d1ca_dedd4416","line":92,"in_reply_to":"3ae8d1ca_20029b3e","updated":"2014-05-28 13:39:19.000000000","message":"Done","commit_id":"6d15daafe471fc5bcabd91edd6997024b6279c0d"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"dbd5fd0c7176b081924af9e5453d5768cca73c3a","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Other End User Impact"},{"line_number":147,"context_line":"---------------------"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Aside from the API, are there other ways a user will interact with this"},{"line_number":150,"context_line":"feature? No"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ae8d1ca_e09fd301","line":148,"updated":"2014-05-28 02:13:30.000000000","message":"The paste-api pipeline won;t have to be modified to account for the new middleware?  Will we just modify the existing middleware? That kind-of makes this change all-or-nothing.  Would suggest a new middleware for this to allow for a gradual roll out.","commit_id":"6d15daafe471fc5bcabd91edd6997024b6279c0d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"d6905cdc459a2b3c8e7752f9b8b3642409430676","unresolved":false,"context_lines":[{"line_number":145,"context_line":""},{"line_number":146,"context_line":"Other End User Impact"},{"line_number":147,"context_line":"---------------------"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"Aside from the API, are there other ways a user will interact with this"},{"line_number":150,"context_line":"feature? No"},{"line_number":151,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ae8d1ca_7e79902e","line":148,"in_reply_to":"3ae8d1ca_e09fd301","updated":"2014-05-28 13:39:19.000000000","message":"As the current implementation stands, there shouldn\u0027t be any modifications to the middleware. The validation is handled at the controller layer.\n\nDo you have an example of providing new middleware to make this a gradual change?","commit_id":"6d15daafe471fc5bcabd91edd6997024b6279c0d"},{"author":{"_account_id":2218,"name":"Adam Young","email":"adam@younglogic.com","username":"ayoung"},"change_message_id":"dbd5fd0c7176b081924af9e5453d5768cca73c3a","unresolved":false,"context_lines":[{"line_number":239,"context_line":""},{"line_number":240,"context_line":"Testing"},{"line_number":241,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":242,"context_line":""},{"line_number":243,"context_line":"Tempest tests can be added as each resource is validated against its schema."},{"line_number":244,"context_line":"These tests should walk through invalid request types."},{"line_number":245,"context_line":""}],"source_content_type":"text/x-rst","patch_set":3,"id":"3ae8d1ca_60aae31a","line":242,"updated":"2014-05-28 02:13:30.000000000","message":"Keystone tests currently test the JSON marshalling, and will have to be updated to account for differences, but they should, once updated, cover this change fairly well.","commit_id":"6d15daafe471fc5bcabd91edd6997024b6279c0d"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"63c0828cf738f06d0c57df8d0215cfbf7124a267","unresolved":false,"context_lines":[{"line_number":188,"context_line":"These tests should walk through invalid request types."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"We can follow some of the validation work already done in the Nova V3 API:"},{"line_number":191,"context_line":"http://git.openstack.org/cgit/openstack/tempest/tree/etc/schemas/compute/ \\"},{"line_number":192,"context_line":"flavors/flavors_list.json"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"http://git.openstack.org/cgit/openstack/tempest/tree/tempest/api/compute/ \\"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3ae8d1ca_da138d5a","line":191,"updated":"2014-05-28 14:25:10.000000000","message":"Looking at the docs, there is a space between the slash and object.html\n\ni think it should be:\n  schemas/compute/\\","commit_id":"bfc43cab25ce126dffe13a2dd8e1277a6c587973"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fd8d7e4f8e149ca80af5e97364d58417068af97a","unresolved":false,"context_lines":[{"line_number":188,"context_line":"These tests should walk through invalid request types."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"We can follow some of the validation work already done in the Nova V3 API:"},{"line_number":191,"context_line":"http://git.openstack.org/cgit/openstack/tempest/tree/etc/schemas/compute/ \\"},{"line_number":192,"context_line":"flavors/flavors_list.json"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"http://git.openstack.org/cgit/openstack/tempest/tree/tempest/api/compute/ \\"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3ae8d1ca_7d51930d","line":191,"in_reply_to":"3ae8d1ca_da138d5a","updated":"2014-06-02 17:32:28.000000000","message":"Done","commit_id":"bfc43cab25ce126dffe13a2dd8e1277a6c587973"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"63c0828cf738f06d0c57df8d0215cfbf7124a267","unresolved":false,"context_lines":[{"line_number":191,"context_line":"http://git.openstack.org/cgit/openstack/tempest/tree/etc/schemas/compute/ \\"},{"line_number":192,"context_line":"flavors/flavors_list.json"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"http://git.openstack.org/cgit/openstack/tempest/tree/tempest/api/compute/ \\"},{"line_number":195,"context_line":"flavors/test_flavors_negative.py"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"Negative validation tests should use tempest.test.NegativeAutoTest"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3ae8d1ca_5a277db6","line":194,"updated":"2014-05-28 14:25:10.000000000","message":"same","commit_id":"bfc43cab25ce126dffe13a2dd8e1277a6c587973"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fd8d7e4f8e149ca80af5e97364d58417068af97a","unresolved":false,"context_lines":[{"line_number":191,"context_line":"http://git.openstack.org/cgit/openstack/tempest/tree/etc/schemas/compute/ \\"},{"line_number":192,"context_line":"flavors/flavors_list.json"},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"http://git.openstack.org/cgit/openstack/tempest/tree/tempest/api/compute/ \\"},{"line_number":195,"context_line":"flavors/test_flavors_negative.py"},{"line_number":196,"context_line":""},{"line_number":197,"context_line":"Negative validation tests should use tempest.test.NegativeAutoTest"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3ae8d1ca_dd41c73a","line":194,"in_reply_to":"3ae8d1ca_5a277db6","updated":"2014-06-02 17:32:28.000000000","message":"Done","commit_id":"bfc43cab25ce126dffe13a2dd8e1277a6c587973"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"63c0828cf738f06d0c57df8d0215cfbf7124a267","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Useful Links:"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"http://spacetelescope.github.io/understanding-json-schema/reference/ \\"},{"line_number":210,"context_line":"object.html"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"http://git.openstack.org/cgit/openstack/nova/tree/nova/api/validation"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3ae8d1ca_d72526c3","line":209,"updated":"2014-05-28 14:25:10.000000000","message":"same","commit_id":"bfc43cab25ce126dffe13a2dd8e1277a6c587973"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"fd8d7e4f8e149ca80af5e97364d58417068af97a","unresolved":false,"context_lines":[{"line_number":206,"context_line":""},{"line_number":207,"context_line":"Useful Links:"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"http://spacetelescope.github.io/understanding-json-schema/reference/ \\"},{"line_number":210,"context_line":"object.html"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"http://git.openstack.org/cgit/openstack/nova/tree/nova/api/validation"}],"source_content_type":"text/x-rst","patch_set":5,"id":"3ae8d1ca_fd3cc3c1","line":209,"in_reply_to":"3ae8d1ca_d72526c3","updated":"2014-06-02 17:32:28.000000000","message":"Done","commit_id":"bfc43cab25ce126dffe13a2dd8e1277a6c587973"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Keystone API Validation"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Existing launchpad blueprint URL:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_8a263cb9","line":8,"updated":"2014-06-02 18:25:16.000000000","message":"remove \"Keystone\" from the blueprint title \u0026 file name -- that\u0027s a given","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":5,"context_line":" http://creativecommons.org/licenses/by/3.0/legalcode"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":8,"context_line":"Keystone API Validation"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Existing launchpad blueprint URL:"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_0b4f496c","line":8,"in_reply_to":"1ae5cdf2_8a263cb9","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Existing launchpad blueprint URL:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/keystone/+spec/keystone-api-validation"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Currently, the Keystone API has different implementations for validating"},{"line_number":16,"context_line":"requests. The purpose of this blueprint is to track the progress of"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_aa521811","line":13,"updated":"2014-06-02 18:25:16.000000000","message":"same here","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Existing launchpad blueprint URL:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/keystone/+spec/keystone-api-validation"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Currently, the Keystone API has different implementations for validating"},{"line_number":16,"context_line":"requests. The purpose of this blueprint is to track the progress of"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_6b144df5","line":13,"in_reply_to":"1ae5cdf2_aa521811","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Currently, the Keystone API has different implementations for validating"},{"line_number":16,"context_line":"requests. The purpose of this blueprint is to track the progress of"},{"line_number":17,"context_line":"standardizing the validation layer in Keystone and implement it consistently"},{"line_number":18,"context_line":"across Keystone."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Problem Description"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_2a6528e1","line":18,"updated":"2014-06-02 18:25:16.000000000","message":"You\u0027re specifically looking to validation request bodies, not just \"the API.\" The resources, for example, are sort of validated by the routing framework already, and I assume you\u0027re not planning on doing anything new with request headers. Narrow the scope of the description here and below accordingly.","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":15,"context_line":"Currently, the Keystone API has different implementations for validating"},{"line_number":16,"context_line":"requests. The purpose of this blueprint is to track the progress of"},{"line_number":17,"context_line":"standardizing the validation layer in Keystone and implement it consistently"},{"line_number":18,"context_line":"across Keystone."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":""},{"line_number":21,"context_line":"Problem Description"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_46594835","line":18,"in_reply_to":"1ae5cdf2_2a6528e1","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Problem Description"},{"line_number":22,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Currently Keystone doesn\u0027t have a consistent API validation layer. Some"},{"line_number":25,"context_line":"resources validate input at the resource controller and some fail out in the"},{"line_number":26,"context_line":"backend. Ideally, Keystone would have some validation in place to catch"},{"line_number":27,"context_line":"unallowed parameters and return a validation error to the user."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_4a6274d9","line":24,"updated":"2014-06-02 18:25:16.000000000","message":"request validation layer?","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":21,"context_line":"Problem Description"},{"line_number":22,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"Currently Keystone doesn\u0027t have a consistent API validation layer. Some"},{"line_number":25,"context_line":"resources validate input at the resource controller and some fail out in the"},{"line_number":26,"context_line":"backend. Ideally, Keystone would have some validation in place to catch"},{"line_number":27,"context_line":"unallowed parameters and return a validation error to the user."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_8642703c","line":24,"in_reply_to":"1ae5cdf2_4a6274d9","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Currently Keystone doesn\u0027t have a consistent API validation layer. Some"},{"line_number":25,"context_line":"resources validate input at the resource controller and some fail out in the"},{"line_number":26,"context_line":"backend. Ideally, Keystone would have some validation in place to catch"},{"line_number":27,"context_line":"unallowed parameters and return a validation error to the user."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"The use cases for this improvement should be relatively transparent to the"},{"line_number":30,"context_line":"user."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_caf3e408","line":27,"updated":"2014-06-02 18:25:16.000000000","message":"disallowed? unallowed appears to be a word only in some dictionaries *shrug*\n\nit\u0027s also not just disallowed parameters that you need to validate, but also validate the data type and value of things (say, positive integers, booleans, string length, etc)","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":24,"context_line":"Currently Keystone doesn\u0027t have a consistent API validation layer. Some"},{"line_number":25,"context_line":"resources validate input at the resource controller and some fail out in the"},{"line_number":26,"context_line":"backend. Ideally, Keystone would have some validation in place to catch"},{"line_number":27,"context_line":"unallowed parameters and return a validation error to the user."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"The use cases for this improvement should be relatively transparent to the"},{"line_number":30,"context_line":"user."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_467068a5","line":27,"in_reply_to":"1ae5cdf2_caf3e408","updated":"2014-06-02 19:29:13.000000000","message":"good catch, done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":27,"context_line":"unallowed parameters and return a validation error to the user."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"The use cases for this improvement should be relatively transparent to the"},{"line_number":30,"context_line":"user."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Use Case: As an End User, I want to observe consistent API validation"},{"line_number":33,"context_line":"regardless of the backend being used and values passed to the Keystone server."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_ca5844fd","line":30,"updated":"2014-06-02 18:25:16.000000000","message":"end user benefit would hopefully be more consistent, helpful feedback on failure","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":27,"context_line":"unallowed parameters and return a validation error to the user."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"The use cases for this improvement should be relatively transparent to the"},{"line_number":30,"context_line":"user."},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"Use Case: As an End User, I want to observe consistent API validation"},{"line_number":33,"context_line":"regardless of the backend being used and values passed to the Keystone server."}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_e6b5f431","line":30,"in_reply_to":"1ae5cdf2_ca5844fd","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":36,"context_line":"Proposed Change"},{"line_number":37,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"One possible way to validate the Keystone API is to use jsonschema. A"},{"line_number":40,"context_line":"jsonschema validator object can be used to check each resource against an"},{"line_number":41,"context_line":"appropriate schema for that resource. If the validation passes, the request"},{"line_number":42,"context_line":"can follow the existing flow of control to the resource manager to the"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_6a69f08a","line":39,"updated":"2014-06-02 18:25:16.000000000","message":"link to jsonschema on pypi since this is the first mention of it","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":36,"context_line":"Proposed Change"},{"line_number":37,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":"One possible way to validate the Keystone API is to use jsonschema. A"},{"line_number":40,"context_line":"jsonschema validator object can be used to check each resource against an"},{"line_number":41,"context_line":"appropriate schema for that resource. If the validation passes, the request"},{"line_number":42,"context_line":"can follow the existing flow of control to the resource manager to the"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_26d51c43","line":39,"in_reply_to":"1ae5cdf2_6a69f08a","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* Initial work will include capturing the Identity API Spec for existing"},{"line_number":53,"context_line":"  resources in a schema. This should be a one time operation for each"},{"line_number":54,"context_line":"  version of the API."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"* The current implementation up for review uses a method decorator in the"},{"line_number":57,"context_line":"  resource controller. This is a fairly simple change and doesn\u0027t clutter"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_e0a95c7c","line":54,"updated":"2014-06-02 18:25:16.000000000","message":"for each *major* version","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* Initial work will include capturing the Identity API Spec for existing"},{"line_number":53,"context_line":"  resources in a schema. This should be a one time operation for each"},{"line_number":54,"context_line":"  version of the API."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"* The current implementation up for review uses a method decorator in the"},{"line_number":57,"context_line":"  resource controller. This is a fairly simple change and doesn\u0027t clutter"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_86c51090","line":54,"in_reply_to":"1ae5cdf2_e0a95c7c","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":53,"context_line":"  resources in a schema. This should be a one time operation for each"},{"line_number":54,"context_line":"  version of the API."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"* The current implementation up for review uses a method decorator in the"},{"line_number":57,"context_line":"  resource controller. This is a fairly simple change and doesn\u0027t clutter"},{"line_number":58,"context_line":"  the existing controller code."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_20098495","line":56,"updated":"2014-06-02 18:25:16.000000000","message":"since this is the first mention of the implementation, either link to it, or refer to the link below [1]","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":53,"context_line":"  resources in a schema. This should be a one time operation for each"},{"line_number":54,"context_line":"  version of the API."},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"* The current implementation up for review uses a method decorator in the"},{"line_number":57,"context_line":"  resource controller. This is a fairly simple change and doesn\u0027t clutter"},{"line_number":58,"context_line":"  the existing controller code."},{"line_number":59,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_a6476c1c","line":56,"in_reply_to":"1ae5cdf2_20098495","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":82,"context_line":"* Convert resources to validator:"},{"line_number":83,"context_line":"  https://review.openstack.org/#/c/86484/"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"The second part could be considered an on going effort given the addition"},{"line_number":86,"context_line":"of Keystone extensions."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_4037704e","line":85,"updated":"2014-06-02 18:25:16.000000000","message":"s/could/should\n\ns/on going/ongoing/","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":82,"context_line":"* Convert resources to validator:"},{"line_number":83,"context_line":"  https://review.openstack.org/#/c/86484/"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"The second part could be considered an on going effort given the addition"},{"line_number":86,"context_line":"of Keystone extensions."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_86fa70bb","line":85,"in_reply_to":"1ae5cdf2_4037704e","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":83,"context_line":"  https://review.openstack.org/#/c/86484/"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"The second part could be considered an on going effort given the addition"},{"line_number":86,"context_line":"of Keystone extensions."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_0014889e","line":86,"updated":"2014-06-02 18:25:16.000000000","message":"don\u0027t forget future additions to the core API","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":83,"context_line":"  https://review.openstack.org/#/c/86484/"},{"line_number":84,"context_line":""},{"line_number":85,"context_line":"The second part could be considered an on going effort given the addition"},{"line_number":86,"context_line":"of Keystone extensions."},{"line_number":87,"context_line":""},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_e6ffb4a8","line":86,"in_reply_to":"1ae5cdf2_0014889e","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"Another alternative would be to map the properties from the incoming request"},{"line_number":93,"context_line":"to Python objects and enforce the contract that way. This might be a tougher"},{"line_number":94,"context_line":"choice since Python is not stictly typed."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"Data Model Impact"},{"line_number":97,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_207ee4e4","line":94,"updated":"2014-06-02 18:25:16.000000000","message":"there are alternative validation frameworks too, or you could roll your own","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"Another alternative would be to map the properties from the incoming request"},{"line_number":93,"context_line":"to Python objects and enforce the contract that way. This might be a tougher"},{"line_number":94,"context_line":"choice since Python is not stictly typed."},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"Data Model Impact"},{"line_number":97,"context_line":"-----------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_669e4458","line":94,"in_reply_to":"1ae5cdf2_207ee4e4","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":115,"context_line":"---------------"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"This blueprint shouldn\u0027t effect the existing API. In the event that it does,"},{"line_number":118,"context_line":"it will be correcting the API to following the Identity API Spec."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Security Impact"},{"line_number":121,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_e0731c13","line":118,"updated":"2014-06-02 18:25:16.000000000","message":"if we\u0027ve already shipped such a bug in a stable release, we\u0027d have to consider changing the spec instead :(\n\nI\u0027d say no impact, but it may raise bugs against the API implementation that need to be addressed case-by-case","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":115,"context_line":"---------------"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"This blueprint shouldn\u0027t effect the existing API. In the event that it does,"},{"line_number":118,"context_line":"it will be correcting the API to following the Identity API Spec."},{"line_number":119,"context_line":""},{"line_number":120,"context_line":"Security Impact"},{"line_number":121,"context_line":"---------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_a6f4cc87","line":118,"in_reply_to":"1ae5cdf2_e0731c13","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":120,"context_line":"Security Impact"},{"line_number":121,"context_line":"---------------"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"None"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Notifications Impact"},{"line_number":126,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_00f00866","line":123,"updated":"2014-06-02 18:25:16.000000000","message":"could the error messages produced by the validation framework leak any security details?\n\nyou\u0027re introducing a new dependency, what does it\u0027s security track record look like?","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":120,"context_line":"Security Impact"},{"line_number":121,"context_line":"---------------"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"None"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Notifications Impact"},{"line_number":126,"context_line":"--------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_11ebf813","line":123,"in_reply_to":"1ae5cdf2_00f00866","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":142,"context_line":"create, update, and delete operations of some Keystone resources."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"* Will the change include any locking, and if so what considerations are there"},{"line_number":145,"context_line":"  on holding the lock? No"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"Other Deployer Impact"},{"line_number":148,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_60a46c57","line":145,"updated":"2014-06-02 18:25:16.000000000","message":"rephrase this into a factual sentence rather than Q/A","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":142,"context_line":"create, update, and delete operations of some Keystone resources."},{"line_number":143,"context_line":""},{"line_number":144,"context_line":"* Will the change include any locking, and if so what considerations are there"},{"line_number":145,"context_line":"  on holding the lock? No"},{"line_number":146,"context_line":""},{"line_number":147,"context_line":"Other Deployer Impact"},{"line_number":148,"context_line":"---------------------"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_31d55443","line":145,"in_reply_to":"1ae5cdf2_60a46c57","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":170,"context_line":"Work Items"},{"line_number":171,"context_line":"----------"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"1. Initial validator implementation"},{"line_number":174,"context_line":"2. Implement validator on existing Keystone resources"},{"line_number":175,"context_line":"3. Implement validator on existing Keystone extensions"},{"line_number":176,"context_line":"4. Enforce validation on proposed Keystone extensions"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_e08f9cca","line":173,"updated":"2014-06-02 18:25:16.000000000","message":"this is super vague, not sure what it means","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":170,"context_line":"Work Items"},{"line_number":171,"context_line":"----------"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"1. Initial validator implementation"},{"line_number":174,"context_line":"2. Implement validator on existing Keystone resources"},{"line_number":175,"context_line":"3. Implement validator on existing Keystone extensions"},{"line_number":176,"context_line":"4. Enforce validation on proposed Keystone extensions"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_116058a4","line":173,"in_reply_to":"1ae5cdf2_e08f9cca","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":171,"context_line":"----------"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"1. Initial validator implementation"},{"line_number":174,"context_line":"2. Implement validator on existing Keystone resources"},{"line_number":175,"context_line":"3. Implement validator on existing Keystone extensions"},{"line_number":176,"context_line":"4. Enforce validation on proposed Keystone extensions"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_40b85076","line":174,"updated":"2014-06-02 18:25:16.000000000","message":"introduce validation schemas for existing core API resources?","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":171,"context_line":"----------"},{"line_number":172,"context_line":""},{"line_number":173,"context_line":"1. Initial validator implementation"},{"line_number":174,"context_line":"2. Implement validator on existing Keystone resources"},{"line_number":175,"context_line":"3. Implement validator on existing Keystone extensions"},{"line_number":176,"context_line":"4. Enforce validation on proposed Keystone extensions"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_d16d109a","line":174,"in_reply_to":"1ae5cdf2_40b85076","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"1. Initial validator implementation"},{"line_number":174,"context_line":"2. Implement validator on existing Keystone resources"},{"line_number":175,"context_line":"3. Implement validator on existing Keystone extensions"},{"line_number":176,"context_line":"4. Enforce validation on proposed Keystone extensions"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_c0ab801b","line":175,"updated":"2014-06-02 18:25:16.000000000","message":"... API extensions","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":172,"context_line":""},{"line_number":173,"context_line":"1. Initial validator implementation"},{"line_number":174,"context_line":"2. Implement validator on existing Keystone resources"},{"line_number":175,"context_line":"3. Implement validator on existing Keystone extensions"},{"line_number":176,"context_line":"4. Enforce validation on proposed Keystone extensions"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_f1684c89","line":175,"in_reply_to":"1ae5cdf2_c0ab801b","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":173,"context_line":"1. Initial validator implementation"},{"line_number":174,"context_line":"2. Implement validator on existing Keystone resources"},{"line_number":175,"context_line":"3. Implement validator on existing Keystone extensions"},{"line_number":176,"context_line":"4. Enforce validation on proposed Keystone extensions"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_2068a4f4","line":176,"updated":"2014-06-02 18:25:16.000000000","message":"why is this a separate step, but not for the core API?","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":173,"context_line":"1. Initial validator implementation"},{"line_number":174,"context_line":"2. Implement validator on existing Keystone resources"},{"line_number":175,"context_line":"3. Implement validator on existing Keystone extensions"},{"line_number":176,"context_line":"4. Enforce validation on proposed Keystone extensions"},{"line_number":177,"context_line":""},{"line_number":178,"context_line":""},{"line_number":179,"context_line":"Dependencies"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_b1f5e4cc","line":176,"in_reply_to":"1ae5cdf2_2068a4f4","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":187,"context_line":"Tempest tests can be added as each resource is validated against its schema."},{"line_number":188,"context_line":"These tests should walk through invalid request types."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"We can follow some of the validation work already done in the Nova V3 API:"},{"line_number":191,"context_line":"http://git.openstack.org/cgit/openstack/tempest/tree/etc/schemas/compute/\\"},{"line_number":192,"context_line":"flavors/flavors_list.json"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_a073d4e5","line":190,"updated":"2014-06-02 18:25:16.000000000","message":"use an inline link rather than just pasting the URL as plain text","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":187,"context_line":"Tempest tests can be added as each resource is validated against its schema."},{"line_number":188,"context_line":"These tests should walk through invalid request types."},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"We can follow some of the validation work already done in the Nova V3 API:"},{"line_number":191,"context_line":"http://git.openstack.org/cgit/openstack/tempest/tree/etc/schemas/compute/\\"},{"line_number":192,"context_line":"flavors/flavors_list.json"},{"line_number":193,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_b1cde45f","line":190,"in_reply_to":"1ae5cdf2_a073d4e5","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":4,"name":"Dolph Mathews","email":"dolph.mathews@gmail.com","username":"dolph"},"change_message_id":"0363c20172c6c2890a0202d2eca25ff33b23c738","unresolved":false,"context_lines":[{"line_number":207,"context_line":"Useful Links:"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"http://spacetelescope.github.io/understanding-json-schema/reference/\\"},{"line_number":210,"context_line":"object.html"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"http://git.openstack.org/cgit/openstack/nova/tree/nova/api/validation"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_805fb840","line":210,"updated":"2014-06-02 18:25:16.000000000","message":"same as above - put these in a list of some sort and give them hypertext","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":207,"context_line":"Useful Links:"},{"line_number":208,"context_line":""},{"line_number":209,"context_line":"http://spacetelescope.github.io/understanding-json-schema/reference/\\"},{"line_number":210,"context_line":"object.html"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"http://git.openstack.org/cgit/openstack/nova/tree/nova/api/validation"},{"line_number":213,"context_line":""}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_d1dc3015","line":210,"in_reply_to":"1ae5cdf2_805fb840","updated":"2014-06-02 19:29:13.000000000","message":"Done","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":11589,"name":"Harry Rybacki","email":"hrybacki@redhat.com","username":"hrybacki"},"change_message_id":"dc1732b62367cdc2a1bc1ccaada1c136a29631ea","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"http://spacetelescope.github.io/understanding-json-schema/reference/\\"},{"line_number":210,"context_line":"object.html"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"http://git.openstack.org/cgit/openstack/nova/tree/nova/api/validation"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"https://pypi.python.org/pypi/jsonschema"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_2b36c503","line":211,"updated":"2014-06-02 18:50:35.000000000","message":"Would relevant links to official JSON Schema Core/Validation drafts be useful? -- http://json-schema.org/documentation.html","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"db306eb13e4f2c728f7f2660590b0d42f12898fd","unresolved":false,"context_lines":[{"line_number":208,"context_line":""},{"line_number":209,"context_line":"http://spacetelescope.github.io/understanding-json-schema/reference/\\"},{"line_number":210,"context_line":"object.html"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"http://git.openstack.org/cgit/openstack/nova/tree/nova/api/validation"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"https://pypi.python.org/pypi/jsonschema"}],"source_content_type":"text/x-rst","patch_set":7,"id":"1ae5cdf2_112db8fe","line":211,"in_reply_to":"1ae5cdf2_2b36c503","updated":"2014-06-02 19:29:13.000000000","message":"yep, I\u0027ll add that.. some of the core defs and terminology is covered here: \n\nhttp://tools.ietf.org/html/draft-zyp-json-schema-04\n\nDone.","commit_id":"ee3ae57f4deeb344ad8abaae66f4a23c1b5870ba"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2e013ef81828a6d045c9d21ff845e48ab1519843","unresolved":false,"context_lines":[{"line_number":61,"context_line":"  resource controller [1]. This is a fairly simple change and doesn\u0027t clutter"},{"line_number":62,"context_line":"  the existing controller code."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"* When adding a new extension to Keystone, the new extension could be purposed"},{"line_number":65,"context_line":"  with its appropriate schema."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"There are a couple notes on how to deal with different backend constraints."}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_0f0e678d","line":64,"updated":"2014-06-03 05:58:06.000000000","message":"nit: s/purposed/proposed?","commit_id":"f388e4310ded5ea3067598487794d24467472d27"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e58a9aa4bf92d11cca6977003cdce18f229c10e9","unresolved":false,"context_lines":[{"line_number":61,"context_line":"  resource controller [1]. This is a fairly simple change and doesn\u0027t clutter"},{"line_number":62,"context_line":"  the existing controller code."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"* When adding a new extension to Keystone, the new extension could be purposed"},{"line_number":65,"context_line":"  with its appropriate schema."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"There are a couple notes on how to deal with different backend constraints."}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_d1425467","line":64,"in_reply_to":"1ae5cdf2_0f0e678d","updated":"2014-06-03 13:18:38.000000000","message":"Done","commit_id":"f388e4310ded5ea3067598487794d24467472d27"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2e013ef81828a6d045c9d21ff845e48ab1519843","unresolved":false,"context_lines":[{"line_number":72,"context_line":"following:"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"* Validate against the least common denominator, 255 in this example. This"},{"line_number":75,"context_line":"  might be the suboptimal solution since it could effect existing deployments."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* Have the backend call back to the validator, giving it a value to validate"},{"line_number":78,"context_line":"  with. Example, the SQL backend understands the schema, so when asked the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_b28cf880","line":75,"updated":"2014-06-03 05:58:06.000000000","message":"my 2c:\n\nI think in this case, greatest common denominator might work better. It\u0027s safer for existing deployments.\n\nAnd if it\u0027s a bad call (260 char name in SQL db), it\u0027s no worse than the existing behaviour, where it fails at the backend layer.","commit_id":"f388e4310ded5ea3067598487794d24467472d27"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e58a9aa4bf92d11cca6977003cdce18f229c10e9","unresolved":false,"context_lines":[{"line_number":72,"context_line":"following:"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"* Validate against the least common denominator, 255 in this example. This"},{"line_number":75,"context_line":"  might be the suboptimal solution since it could effect existing deployments."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* Have the backend call back to the validator, giving it a value to validate"},{"line_number":78,"context_line":"  with. Example, the SQL backend understands the schema, so when asked the"}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_b4893677","line":75,"in_reply_to":"1ae5cdf2_b28cf880","updated":"2014-06-03 13:18:38.000000000","message":"True, but that\u0027s some of the behavior we try to avoid. Once a request passes through jsonschema it should be valid for any backend. \n\nFrom an end user perspective, if a request body is invalid, Keystone should throw a consistent exception regardless of the resource. I believe there can also be an argument made for the security implications of passing \"unchecked\" input to a backend in hopes that it will be handled properly.","commit_id":"f388e4310ded5ea3067598487794d24467472d27"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2e013ef81828a6d045c9d21ff845e48ab1519843","unresolved":false,"context_lines":[{"line_number":141,"context_line":""},{"line_number":142,"context_line":"jsonschema documentation notes security considerations for both schemas and"},{"line_number":143,"context_line":"instances:"},{"line_number":144,"context_line":"  http://json-schema.org/latest/json-schema-core.html#anchor21"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"From a Keystone perspective, jsonschema will be a new dependency, but it is"},{"line_number":147,"context_line":"already included in global-requirements for OpenStack."}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_afc0132b","line":144,"updated":"2014-06-03 05:58:06.000000000","message":"looks like this line is failing the docs job","commit_id":"f388e4310ded5ea3067598487794d24467472d27"},{"author":{"_account_id":6482,"name":"Steve Martinelli","email":"s.martinelli@gmail.com","username":"stevemar"},"change_message_id":"2e013ef81828a6d045c9d21ff845e48ab1519843","unresolved":false,"context_lines":[{"line_number":143,"context_line":"instances:"},{"line_number":144,"context_line":"  http://json-schema.org/latest/json-schema-core.html#anchor21"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"From a Keystone perspective, jsonschema will be a new dependency, but it is"},{"line_number":147,"context_line":"already included in global-requirements for OpenStack."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_0fe907b8","line":146,"updated":"2014-06-03 05:58:06.000000000","message":"false, it\u0027s already in keystone requirements, the federation mapping validation used it.\n\nhttps://github.com/openstack/keystone/blob/master/requirements.txt","commit_id":"f388e4310ded5ea3067598487794d24467472d27"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"e58a9aa4bf92d11cca6977003cdce18f229c10e9","unresolved":false,"context_lines":[{"line_number":143,"context_line":"instances:"},{"line_number":144,"context_line":"  http://json-schema.org/latest/json-schema-core.html#anchor21"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"From a Keystone perspective, jsonschema will be a new dependency, but it is"},{"line_number":147,"context_line":"already included in global-requirements for OpenStack."},{"line_number":148,"context_line":""},{"line_number":149,"context_line":""}],"source_content_type":"text/x-rst","patch_set":8,"id":"1ae5cdf2_14982abf","line":146,"in_reply_to":"1ae5cdf2_0fe907b8","updated":"2014-06-03 13:18:38.000000000","message":"nice catch, thanks!","commit_id":"f388e4310ded5ea3067598487794d24467472d27"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4c800f08c81bb14420ef433971da418ee99c2c6","unresolved":false,"context_lines":[{"line_number":8,"context_line":"API Validation"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Existing launchpad blueprint URL:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/keystone/+spec/api-validation"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_cda2824a","line":11,"updated":"2014-06-04 18:56:51.000000000","message":"remove this line.","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":8,"context_line":"API Validation"},{"line_number":9,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Existing launchpad blueprint URL:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/keystone/+spec/api-validation"},{"line_number":14,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_c7adda9c","line":11,"in_reply_to":"1ae5cdf2_cda2824a","updated":"2014-06-05 18:23:42.000000000","message":"Done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4c800f08c81bb14420ef433971da418ee99c2c6","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Existing launchpad blueprint URL:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/keystone/+spec/api-validation"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Currently, Keystone has different implementations for validating"},{"line_number":16,"context_line":"requests bodies. The purpose of this blueprint is to track the progress of"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_2d9126f1","line":13,"updated":"2014-06-04 18:56:51.000000000","message":"switch to\n\n `bp api-validation \u003chttps://blueprints.launchpad.net/keystone/+spec/api-validation\u003e`_","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Existing launchpad blueprint URL:"},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"https://blueprints.launchpad.net/keystone/+spec/api-validation"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Currently, Keystone has different implementations for validating"},{"line_number":16,"context_line":"requests bodies. The purpose of this blueprint is to track the progress of"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_4799ca77","line":13,"in_reply_to":"1ae5cdf2_2d9126f1","updated":"2014-06-05 18:23:42.000000000","message":"Done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4c800f08c81bb14420ef433971da418ee99c2c6","unresolved":false,"context_lines":[{"line_number":13,"context_line":"https://blueprints.launchpad.net/keystone/+spec/api-validation"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Currently, Keystone has different implementations for validating"},{"line_number":16,"context_line":"requests bodies. The purpose of this blueprint is to track the progress of"},{"line_number":17,"context_line":"validating the request bodies sent to the Keystone server, accepting requests"},{"line_number":18,"context_line":"that fit the resource schema and rejecting requests that do not fit the"},{"line_number":19,"context_line":"schema. Depending on the content of the request body, the request should"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_8dc31aec","line":16,"updated":"2014-06-04 18:56:51.000000000","message":"change \"requests\" to \"request\"","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":13,"context_line":"https://blueprints.launchpad.net/keystone/+spec/api-validation"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Currently, Keystone has different implementations for validating"},{"line_number":16,"context_line":"requests bodies. The purpose of this blueprint is to track the progress of"},{"line_number":17,"context_line":"validating the request bodies sent to the Keystone server, accepting requests"},{"line_number":18,"context_line":"that fit the resource schema and rejecting requests that do not fit the"},{"line_number":19,"context_line":"schema. Depending on the content of the request body, the request should"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_e77e5618","line":16,"in_reply_to":"1ae5cdf2_8dc31aec","updated":"2014-06-05 18:23:42.000000000","message":"Done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"5422616af01c761c4f48fbf4aa9afd716e4dd2f9","unresolved":false,"context_lines":[{"line_number":39,"context_line":"Proposed Change"},{"line_number":40,"context_line":"\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d\u003d"},{"line_number":41,"context_line":""},{"line_number":42,"context_line":"One possible way to validate the Keystone API is to use jsonschema"},{"line_number":43,"context_line":"(https://pypi.python.org/pypi/jsonschema). A jsonschema validator object can"},{"line_number":44,"context_line":"be used to check each resource against an appropriate schema for that"},{"line_number":45,"context_line":"resource. If the validation passes, the request can follow the existing flow"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_d515c5e5","line":42,"updated":"2014-06-04 04:28:53.000000000","message":"Do we have other alternatives?  If so can you mention alternatives and why  you used one over the other?","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4c800f08c81bb14420ef433971da418ee99c2c6","unresolved":false,"context_lines":[{"line_number":45,"context_line":"resource. If the validation passes, the request can follow the existing flow"},{"line_number":46,"context_line":"of control to the resource manager to the backend. If the request body"},{"line_number":47,"context_line":"parameters fail the validation specified by the resource schema, a validation"},{"line_number":48,"context_line":"error will be returned from the server."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Some notes on doing this implementation:"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_2d2da6a8","line":48,"updated":"2014-06-04 18:56:51.000000000","message":"what does the validation error look like?","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":45,"context_line":"resource. If the validation passes, the request can follow the existing flow"},{"line_number":46,"context_line":"of control to the resource manager to the backend. If the request body"},{"line_number":47,"context_line":"parameters fail the validation specified by the resource schema, a validation"},{"line_number":48,"context_line":"error will be returned from the server."},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Some notes on doing this implementation:"},{"line_number":51,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_e76f3629","line":48,"in_reply_to":"1ae5cdf2_2d2da6a8","updated":"2014-06-05 18:23:42.000000000","message":"Done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4c800f08c81bb14420ef433971da418ee99c2c6","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Some notes on doing this implementation:"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* Common parameter types can be leveraged across all Keystone resources."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* The validation can take place at the controller layer."},{"line_number":55,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_60017504","line":52,"updated":"2014-06-04 18:56:51.000000000","message":"an example would be nice to see.","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":49,"context_line":""},{"line_number":50,"context_line":"Some notes on doing this implementation:"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"* Common parameter types can be leveraged across all Keystone resources."},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"* The validation can take place at the controller layer."},{"line_number":55,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_e72736c8","line":52,"in_reply_to":"1ae5cdf2_60017504","updated":"2014-06-05 18:23:42.000000000","message":"Done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4c800f08c81bb14420ef433971da418ee99c2c6","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"* Initial work will include capturing the Identity API Spec for existing"},{"line_number":57,"context_line":"  resources in a schema. This should be a one time operation for each"},{"line_number":58,"context_line":"  major version of the API."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"* The current implementation up for review uses a method decorator in the"},{"line_number":61,"context_line":"  resource controller [1]. This is a fairly simple change and doesn\u0027t clutter"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_20320df2","line":58,"updated":"2014-06-04 18:56:51.000000000","message":"is this going to apply to both V2 and V3?","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":55,"context_line":""},{"line_number":56,"context_line":"* Initial work will include capturing the Identity API Spec for existing"},{"line_number":57,"context_line":"  resources in a schema. This should be a one time operation for each"},{"line_number":58,"context_line":"  major version of the API."},{"line_number":59,"context_line":""},{"line_number":60,"context_line":"* The current implementation up for review uses a method decorator in the"},{"line_number":61,"context_line":"  resource controller [1]. This is a fairly simple change and doesn\u0027t clutter"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_ea3c5bca","line":58,"in_reply_to":"1ae5cdf2_20320df2","updated":"2014-06-05 18:23:42.000000000","message":"Done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":1091,"name":"Arun Kant","email":"arukant@cisco.com","username":"arunkant-uws"},"change_message_id":"8d051a67591a6b2d99fdb1ef0fe4c7afaa2956bc","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":"* The current implementation up for review uses a method decorator in the"},{"line_number":61,"context_line":"  resource controller [1]. This is a fairly simple change and doesn\u0027t clutter"},{"line_number":62,"context_line":"  the existing controller code."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"* When adding a new extension to Keystone, the new extension could be proposed"},{"line_number":65,"context_line":"  with its appropriate schema."}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_af3e06d8","line":62,"updated":"2014-06-04 22:31:49.000000000","message":"Is thinking to go with lazy validation where error(s) is returned once all fields are validated? Most likely this is going to be implemented (configurable??) in common logic similar to decorator mentioned above.","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4c800f08c81bb14420ef433971da418ee99c2c6","unresolved":false,"context_lines":[{"line_number":61,"context_line":"  resource controller [1]. This is a fairly simple change and doesn\u0027t clutter"},{"line_number":62,"context_line":"  the existing controller code."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"* When adding a new extension to Keystone, the new extension could be proposed"},{"line_number":65,"context_line":"  with its appropriate schema."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"There are a couple notes on how to deal with different backend constraints."}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_807be18a","line":64,"updated":"2014-06-04 18:56:51.000000000","message":"\"could\" or \"must\" ? Seems like we should require this for new extensions otherwise they will be inconsistent.","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":61,"context_line":"  resource controller [1]. This is a fairly simple change and doesn\u0027t clutter"},{"line_number":62,"context_line":"  the existing controller code."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"* When adding a new extension to Keystone, the new extension could be proposed"},{"line_number":65,"context_line":"  with its appropriate schema."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"There are a couple notes on how to deal with different backend constraints."}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_8a53d715","line":64,"in_reply_to":"1ae5cdf2_807be18a","updated":"2014-06-05 18:23:42.000000000","message":"good point, done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":1091,"name":"Arun Kant","email":"arukant@cisco.com","username":"arunkant-uws"},"change_message_id":"8d051a67591a6b2d99fdb1ef0fe4c7afaa2956bc","unresolved":false,"context_lines":[{"line_number":62,"context_line":"  the existing controller code."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"* When adding a new extension to Keystone, the new extension could be proposed"},{"line_number":65,"context_line":"  with its appropriate schema."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"There are a couple notes on how to deal with different backend constraints."},{"line_number":68,"context_line":"The validator will have to honor the Identity API Spec but it will also have"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_c6ec1c2d","line":65,"updated":"2014-06-04 22:31:49.000000000","message":"Keystone existing entities generally contains id, name, enabled fields only. In most of deployments, there will be need to have extra fields. \n1) How validation support for those fields is expected to be done. Will there be some extension mechanism or deployer will need to change entity schema directly? \n2) I am assuming that when existing entity schema is going to be defined, additionalProperties will be allowed (similar to allow situation mentioned above). Is that a correct understanding?","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":62,"context_line":"  the existing controller code."},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"* When adding a new extension to Keystone, the new extension could be proposed"},{"line_number":65,"context_line":"  with its appropriate schema."},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"There are a couple notes on how to deal with different backend constraints."},{"line_number":68,"context_line":"The validator will have to honor the Identity API Spec but it will also have"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_ca7ebf69","line":65,"in_reply_to":"1ae5cdf2_c6ec1c2d","updated":"2014-06-05 18:23:42.000000000","message":"yes, additionalProperties will be allowed. We will validate properties that we know about... i.e. when \u0027enabled\u0027 is provided in the request body, it has to be of boolean type.","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4c800f08c81bb14420ef433971da418ee99c2c6","unresolved":false,"context_lines":[{"line_number":71,"context_line":"restriction against the length of user names. In this case, we could do the"},{"line_number":72,"context_line":"following:"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"* Validate against the least common denominator, 255 in this example. This"},{"line_number":75,"context_line":"  might be the suboptimal solution since it could effect existing deployments."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* Have the backend call back to the validator, giving it a value to validate"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_0067d1e9","line":74,"updated":"2014-06-04 18:56:51.000000000","message":"LCD is unlimited in this case, not 255.","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":71,"context_line":"restriction against the length of user names. In this case, we could do the"},{"line_number":72,"context_line":"following:"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"* Validate against the least common denominator, 255 in this example. This"},{"line_number":75,"context_line":"  might be the suboptimal solution since it could effect existing deployments."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* Have the backend call back to the validator, giving it a value to validate"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_aaf25303","line":74,"in_reply_to":"1ae5cdf2_0067d1e9","updated":"2014-06-05 18:23:42.000000000","message":"Done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4c800f08c81bb14420ef433971da418ee99c2c6","unresolved":false,"context_lines":[{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* Have the backend call back to the validator, giving it a value to validate"},{"line_number":78,"context_line":"  with. Example, the SQL backend understands the schema, so when asked the"},{"line_number":79,"context_line":"  limit of user names, it could return 255."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"This work can be taken in steps:"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_405d5914","line":79,"updated":"2014-06-04 18:56:51.000000000","message":"I think this is what the server should do. It can be done as an add-on to going with an LCD approach.","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4c800f08c81bb14420ef433971da418ee99c2c6","unresolved":false,"context_lines":[{"line_number":78,"context_line":"  with. Example, the SQL backend understands the schema, so when asked the"},{"line_number":79,"context_line":"  limit of user names, it could return 255."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"This work can be taken in steps:"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* Introduce a jsonschema validator implementation:"},{"line_number":84,"context_line":"  https://review.openstack.org/#/c/86483/"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_4d011205","line":81,"updated":"2014-06-04 18:56:51.000000000","message":"this belongs in the \"work items\" section.","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":78,"context_line":"  with. Example, the SQL backend understands the schema, so when asked the"},{"line_number":79,"context_line":"  limit of user names, it could return 255."},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"This work can be taken in steps:"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"* Introduce a jsonschema validator implementation:"},{"line_number":84,"context_line":"  https://review.openstack.org/#/c/86483/"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_2ac3a338","line":81,"in_reply_to":"1ae5cdf2_4d011205","updated":"2014-06-05 18:23:42.000000000","message":"Done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4c800f08c81bb14420ef433971da418ee99c2c6","unresolved":false,"context_lines":[{"line_number":87,"context_line":"  https://review.openstack.org/#/c/86484/"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"The second part should be considered an ongoing effort given the addition"},{"line_number":90,"context_line":"of Keystone extensions, along with future additions to the core API."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_408b9967","line":90,"updated":"2014-06-04 18:56:51.000000000","message":"Add a section to the template that says new features have to do input validation.","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":87,"context_line":"  https://review.openstack.org/#/c/86484/"},{"line_number":88,"context_line":""},{"line_number":89,"context_line":"The second part should be considered an ongoing effort given the addition"},{"line_number":90,"context_line":"of Keystone extensions, along with future additions to the core API."},{"line_number":91,"context_line":""},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_2a80038a","line":90,"in_reply_to":"1ae5cdf2_408b9967","updated":"2014-06-05 18:23:42.000000000","message":"Done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4c800f08c81bb14420ef433971da418ee99c2c6","unresolved":false,"context_lines":[{"line_number":100,"context_line":"For the time being, jsonschema will fill this requirement. If at some point"},{"line_number":101,"context_line":"jsonschema no longer meets the needs of validating requests we can look into"},{"line_number":102,"context_line":"another framework, or consider building our own validation framework, specific"},{"line_number":103,"context_line":"to the use cases we need."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Data Model Impact"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_6d332e14","line":103,"updated":"2014-06-04 18:56:51.000000000","message":"Here\u0027s another python validation library that should be mentioned as an alternative: https://github.com/alecthomas/voluptuous","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":100,"context_line":"For the time being, jsonschema will fill this requirement. If at some point"},{"line_number":101,"context_line":"jsonschema no longer meets the needs of validating requests we can look into"},{"line_number":102,"context_line":"another framework, or consider building our own validation framework, specific"},{"line_number":103,"context_line":"to the use cases we need."},{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Data Model Impact"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_2d481dcb","line":103,"in_reply_to":"1ae5cdf2_6d332e14","updated":"2014-06-05 18:23:42.000000000","message":"Done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"5422616af01c761c4f48fbf4aa9afd716e4dd2f9","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Data Model Impact"},{"line_number":107,"context_line":"-----------------"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* What new data objects and/or database schema changes is this going to"},{"line_number":110,"context_line":"  require? The incoming request could be represented as an object, in"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_15a9ed90","line":107,"updated":"2014-06-04 04:28:53.000000000","message":"There was a suggestion about  using pecan,  Will that affect this?, since it defines model for each request and there we can do validation .","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":104,"context_line":""},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"Data Model Impact"},{"line_number":107,"context_line":"-----------------"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"* What new data objects and/or database schema changes is this going to"},{"line_number":110,"context_line":"  require? The incoming request could be represented as an object, in"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_4df6495e","line":107,"in_reply_to":"1ae5cdf2_15a9ed90","updated":"2014-06-05 18:23:42.000000000","message":"Done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":220,"name":"Haneef Ali","email":"haneef.ali@hp.com","username":"haneef"},"change_message_id":"5422616af01c761c4f48fbf4aa9afd716e4dd2f9","unresolved":false,"context_lines":[{"line_number":114,"context_line":"* What database migrations will accompany this change? None, this blueprint"},{"line_number":115,"context_line":"  shouldn\u0027t require a database migration or schema change."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"* How will the initial set of new data objects be generated, for example if you"},{"line_number":118,"context_line":"  need to take into account existing instances, or modify other existing data"},{"line_number":119,"context_line":"  describe how that will work. The validator should be the new object added in"},{"line_number":120,"context_line":"  this case. There is discussion about implementing the request as an object,"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_f58ac119","line":117,"updated":"2014-06-04 04:28:53.000000000","message":"Is there an ability to override default schema provided by keystone?\nCan the validation be disabled?\n\nI understand these are implementation details, can we add a  note about those things in spec","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":114,"context_line":"* What database migrations will accompany this change? None, this blueprint"},{"line_number":115,"context_line":"  shouldn\u0027t require a database migration or schema change."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"* How will the initial set of new data objects be generated, for example if you"},{"line_number":118,"context_line":"  need to take into account existing instances, or modify other existing data"},{"line_number":119,"context_line":"  describe how that will work. The validator should be the new object added in"},{"line_number":120,"context_line":"  this case. There is discussion about implementing the request as an object,"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_cdb89977","line":117,"in_reply_to":"1ae5cdf2_f58ac119","updated":"2014-06-05 18:23:42.000000000","message":"No, the validation should not be disabled. If Keystone implements the Identity V3 API, then it should also validate against that spec.","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4c800f08c81bb14420ef433971da418ee99c2c6","unresolved":false,"context_lines":[{"line_number":124,"context_line":"REST API Impact"},{"line_number":125,"context_line":"---------------"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"This blueprint shouldn\u0027t effect the existing API. In the event that it does,"},{"line_number":128,"context_line":"it will be correcting the API to follow the Identity API Spec. In the event"},{"line_number":129,"context_line":"a bug is discovered in a stable release that has already shipped, we will"},{"line_number":130,"context_line":"need to address in a case-by-case basis and update the API spec"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_606095a5","line":127,"updated":"2014-06-04 18:56:51.000000000","message":"change \"effect\" to \"affect\"","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":124,"context_line":"REST API Impact"},{"line_number":125,"context_line":"---------------"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"This blueprint shouldn\u0027t effect the existing API. In the event that it does,"},{"line_number":128,"context_line":"it will be correcting the API to follow the Identity API Spec. In the event"},{"line_number":129,"context_line":"a bug is discovered in a stable release that has already shipped, we will"},{"line_number":130,"context_line":"need to address in a case-by-case basis and update the API spec"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_2da9fd23","line":127,"in_reply_to":"1ae5cdf2_606095a5","updated":"2014-06-05 18:23:42.000000000","message":"Done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4c800f08c81bb14420ef433971da418ee99c2c6","unresolved":false,"context_lines":[{"line_number":125,"context_line":"---------------"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"This blueprint shouldn\u0027t effect the existing API. In the event that it does,"},{"line_number":128,"context_line":"it will be correcting the API to follow the Identity API Spec. In the event"},{"line_number":129,"context_line":"a bug is discovered in a stable release that has already shipped, we will"},{"line_number":130,"context_line":"need to address in a case-by-case basis and update the API spec"},{"line_number":131,"context_line":"accordingly."}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_001fd108","line":128,"updated":"2014-06-04 18:56:51.000000000","message":"Correcting the implementation to follow the spec is generally not something that we can fix -- https://wiki.openstack.org/wiki/APIChangeGuidelines#Generally_Not_Acceptable","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":125,"context_line":"---------------"},{"line_number":126,"context_line":""},{"line_number":127,"context_line":"This blueprint shouldn\u0027t effect the existing API. In the event that it does,"},{"line_number":128,"context_line":"it will be correcting the API to follow the Identity API Spec. In the event"},{"line_number":129,"context_line":"a bug is discovered in a stable release that has already shipped, we will"},{"line_number":130,"context_line":"need to address in a case-by-case basis and update the API spec"},{"line_number":131,"context_line":"accordingly."}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_f0744a69","line":128,"in_reply_to":"1ae5cdf2_001fd108","updated":"2014-06-05 18:23:42.000000000","message":"Done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":1091,"name":"Arun Kant","email":"arukant@cisco.com","username":"arunkant-uws"},"change_message_id":"8d051a67591a6b2d99fdb1ef0fe4c7afaa2956bc","unresolved":false,"context_lines":[{"line_number":157,"context_line":"Performance Impact"},{"line_number":158,"context_line":"------------------"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"Changes required for request validation do not require any locking mechanisms."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Other Deployer Impact"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_86e4d4ac","line":160,"updated":"2014-06-04 22:31:49.000000000","message":"Schema based validation will add some overhead. Is there going to be caching of parsed schema to reduce the overhead?","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":157,"context_line":"Performance Impact"},{"line_number":158,"context_line":"------------------"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"Changes required for request validation do not require any locking mechanisms."},{"line_number":161,"context_line":""},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"Other Deployer Impact"}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_d00bce21","line":160,"in_reply_to":"1ae5cdf2_86e4d4ac","updated":"2014-06-05 18:23:42.000000000","message":"Each resource will have a valdiator for update and create. These validator objects will be reused since they have the schema loaded.","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4c800f08c81bb14420ef433971da418ee99c2c6","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"We can follow some of the validation work already done in the Nova V3 API:"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"* [Validation Testing] (http://git.openstack.org/cgit/openstack/tempest/tree/etc/schemas/compute/flavors/flavors_list.json)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"* [Negaive Validation Testing] (http://git.openstack.org/cgit/openstack/tempest/tree/tempest/api/compute/flavors/test_flavors_negative.py)"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_c32333a5","line":212,"updated":"2014-06-04 18:56:51.000000000","message":"Make this a more persistent like by adding the commit id -- http://git.openstack.org/cgit/openstack/tempest/tree/etc/schemas/compute/flavors/flavors_list.json?id\u003d24eb89cd3efd9e9873c78aacde804870962ddcbb\n\nalso, suggest make it a link -- `Validation Testing \u003chttp://git.openstack.org/cgit/openstack/tempest/tree/etc/schemas/compute/flavors/flavors_list.json?id\u003d24eb89cd3efd9e9873c78aacde804870962ddcbb\u003e`_","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":209,"context_line":""},{"line_number":210,"context_line":"We can follow some of the validation work already done in the Nova V3 API:"},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"* [Validation Testing] (http://git.openstack.org/cgit/openstack/tempest/tree/etc/schemas/compute/flavors/flavors_list.json)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"* [Negaive Validation Testing] (http://git.openstack.org/cgit/openstack/tempest/tree/tempest/api/compute/flavors/test_flavors_negative.py)"},{"line_number":215,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_30acf28b","line":212,"in_reply_to":"1ae5cdf2_c32333a5","updated":"2014-06-05 18:23:42.000000000","message":"Done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"b4c800f08c81bb14420ef433971da418ee99c2c6","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"* [Validation Testing] (http://git.openstack.org/cgit/openstack/tempest/tree/etc/schemas/compute/flavors/flavors_list.json)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"* [Negaive Validation Testing] (http://git.openstack.org/cgit/openstack/tempest/tree/tempest/api/compute/flavors/test_flavors_negative.py)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"Negative validation tests should use tempest.test.NegativeAutoTest"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_03399bd6","line":214,"updated":"2014-06-04 18:56:51.000000000","message":"Same here","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"f45d8aa39b53dea44fc0f97747181c4a8a4a6317","unresolved":false,"context_lines":[{"line_number":211,"context_line":""},{"line_number":212,"context_line":"* [Validation Testing] (http://git.openstack.org/cgit/openstack/tempest/tree/etc/schemas/compute/flavors/flavors_list.json)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"* [Negaive Validation Testing] (http://git.openstack.org/cgit/openstack/tempest/tree/tempest/api/compute/flavors/test_flavors_negative.py)"},{"line_number":215,"context_line":""},{"line_number":216,"context_line":"Negative validation tests should use tempest.test.NegativeAutoTest"},{"line_number":217,"context_line":""}],"source_content_type":"text/x-rst","patch_set":9,"id":"1ae5cdf2_10a1b693","line":214,"in_reply_to":"1ae5cdf2_03399bd6","updated":"2014-06-05 18:23:42.000000000","message":"Done","commit_id":"eb6c39147c1c54f13b6e4396afca98c8695e771d"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"594be1d659d6a8e04bf2e630263b1c2d51ab0da3","unresolved":false,"context_lines":[{"line_number":88,"context_line":"restriction against the length of user names. In this case, we could do the"},{"line_number":89,"context_line":"following:"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"* Validate against the least common denominator, unlimited in this example."},{"line_number":92,"context_line":"  This might be the suboptimal solution since it could effect existing"},{"line_number":93,"context_line":"  deployments."},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"1ae5cdf2_762564ad","line":91,"updated":"2014-06-07 04:13:37.000000000","message":"At the controller level, right? If so, maybe it\u0027s worth adding that to the spec?","commit_id":"b0a05ff33c6821d4e18358de13bf478eacf14f1e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c2ecd2cfb9706421f1538bb7efdccbc8f840b461","unresolved":false,"context_lines":[{"line_number":88,"context_line":"restriction against the length of user names. In this case, we could do the"},{"line_number":89,"context_line":"following:"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"* Validate against the least common denominator, unlimited in this example."},{"line_number":92,"context_line":"  This might be the suboptimal solution since it could effect existing"},{"line_number":93,"context_line":"  deployments."},{"line_number":94,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"1ae5cdf2_22fb9648","line":91,"in_reply_to":"1ae5cdf2_762564ad","updated":"2014-06-08 05:27:16.000000000","message":"Done","commit_id":"b0a05ff33c6821d4e18358de13bf478eacf14f1e"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"594be1d659d6a8e04bf2e630263b1c2d51ab0da3","unresolved":false,"context_lines":[{"line_number":92,"context_line":"  This might be the suboptimal solution since it could effect existing"},{"line_number":93,"context_line":"  deployments."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"* Have the backend call back to the validator, giving it a value to validate"},{"line_number":96,"context_line":"  with. Example, the SQL backend understands the schema, so when asked the"},{"line_number":97,"context_line":"  limit of user names, it could return 255."},{"line_number":98,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"1ae5cdf2_96d4b048","line":95,"updated":"2014-06-07 04:13:37.000000000","message":"Maybe going too much into impl details here: how would that be executed? Another decorator, this time on backend\u0027s method?","commit_id":"b0a05ff33c6821d4e18358de13bf478eacf14f1e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c2ecd2cfb9706421f1538bb7efdccbc8f840b461","unresolved":false,"context_lines":[{"line_number":92,"context_line":"  This might be the suboptimal solution since it could effect existing"},{"line_number":93,"context_line":"  deployments."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"* Have the backend call back to the validator, giving it a value to validate"},{"line_number":96,"context_line":"  with. Example, the SQL backend understands the schema, so when asked the"},{"line_number":97,"context_line":"  limit of user names, it could return 255."},{"line_number":98,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"1ae5cdf2_8299ca21","line":95,"in_reply_to":"1ae5cdf2_96d4b048","updated":"2014-06-08 05:27:16.000000000","message":"Not exactly sure what the best way to go about this would be. I do know Brant had some ideas.","commit_id":"b0a05ff33c6821d4e18358de13bf478eacf14f1e"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"594be1d659d6a8e04bf2e630263b1c2d51ab0da3","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"* How will the initial set of new data objects be generated, for example if you"},{"line_number":137,"context_line":"  need to take into account existing instances, or modify other existing data"},{"line_number":138,"context_line":"  describe how that will work. The validator should be the new object added in"},{"line_number":139,"context_line":"  this case. There is discussion about implementing the request as an object,"},{"line_number":140,"context_line":"  which jamielennox has posted in a review:"},{"line_number":141,"context_line":"  https://review.openstack.org/#/c/92031/"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1ae5cdf2_f63894d6","line":138,"updated":"2014-06-07 04:13:37.000000000","message":"If the questions from the template (\"How will the initial set of new data [...] describe how that will work.\") stay I\u0027d suggest separating them from answers (\"The validator should be [...]\").","commit_id":"b0a05ff33c6821d4e18358de13bf478eacf14f1e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c2ecd2cfb9706421f1538bb7efdccbc8f840b461","unresolved":false,"context_lines":[{"line_number":135,"context_line":""},{"line_number":136,"context_line":"* How will the initial set of new data objects be generated, for example if you"},{"line_number":137,"context_line":"  need to take into account existing instances, or modify other existing data"},{"line_number":138,"context_line":"  describe how that will work. The validator should be the new object added in"},{"line_number":139,"context_line":"  this case. There is discussion about implementing the request as an object,"},{"line_number":140,"context_line":"  which jamielennox has posted in a review:"},{"line_number":141,"context_line":"  https://review.openstack.org/#/c/92031/"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1ae5cdf2_e2ae0e2f","line":138,"in_reply_to":"1ae5cdf2_f63894d6","updated":"2014-06-08 05:27:16.000000000","message":"Done","commit_id":"b0a05ff33c6821d4e18358de13bf478eacf14f1e"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"594be1d659d6a8e04bf2e630263b1c2d51ab0da3","unresolved":false,"context_lines":[{"line_number":159,"context_line":"expose private data to an external user. Request validation should not"},{"line_number":160,"context_line":"return information upon valid request bodies. In the event a request body"},{"line_number":161,"context_line":"is not valid, the validation layer should return the invalid values and/or the"},{"line_number":162,"context_line":"values required by the request, of which the end user should know."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"jsonschema documentation notes security considerations for both schemas and"},{"line_number":165,"context_line":"instances:"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1ae5cdf2_7673a4b4","line":162,"updated":"2014-06-07 04:13:37.000000000","message":"Is it configurable what parameters\u0027 values should be returned to the user, providing there is something wrong with them? Otherwise how the validation layer knows what can be revealed and what shouldn\u0027t (like my secrets or password)?","commit_id":"b0a05ff33c6821d4e18358de13bf478eacf14f1e"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c2ecd2cfb9706421f1538bb7efdccbc8f840b461","unresolved":false,"context_lines":[{"line_number":159,"context_line":"expose private data to an external user. Request validation should not"},{"line_number":160,"context_line":"return information upon valid request bodies. In the event a request body"},{"line_number":161,"context_line":"is not valid, the validation layer should return the invalid values and/or the"},{"line_number":162,"context_line":"values required by the request, of which the end user should know."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"jsonschema documentation notes security considerations for both schemas and"},{"line_number":165,"context_line":"instances:"}],"source_content_type":"text/x-rst","patch_set":11,"id":"1ae5cdf2_42a6e254","line":162,"in_reply_to":"1ae5cdf2_7673a4b4","updated":"2014-06-08 05:27:16.000000000","message":"Adding that the information being validated is public in the Identity API spec.","commit_id":"b0a05ff33c6821d4e18358de13bf478eacf14f1e"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"da4550891ed67bed79dc59ba9b53b6189d48afe0","unresolved":false,"context_lines":[{"line_number":126,"context_line":"-----------------"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"* What new data objects and/or database schema changes is this going to"},{"line_number":129,"context_line":"  require? The incoming request could be represented as an object, in"},{"line_number":130,"context_line":"  which case the request object would have the jsonschema validator as an"},{"line_number":131,"context_line":"  attribute."},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1ae5cdf2_599ed464","line":129,"updated":"2014-06-07 22:14:46.000000000","message":"split template-question and answer","commit_id":"d1abbf94f76bd460950d7fe975aa037fc2fcd67b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"617b3b317bb78bc02594da874d1718bcac702e3d","unresolved":false,"context_lines":[{"line_number":126,"context_line":"-----------------"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"* What new data objects and/or database schema changes is this going to"},{"line_number":129,"context_line":"  require? The incoming request could be represented as an object, in"},{"line_number":130,"context_line":"  which case the request object would have the jsonschema validator as an"},{"line_number":131,"context_line":"  attribute."},{"line_number":132,"context_line":""}],"source_content_type":"text/x-rst","patch_set":12,"id":"1ae5cdf2_6c73d015","line":129,"in_reply_to":"1ae5cdf2_599ed464","updated":"2014-06-08 05:27:20.000000000","message":"Done","commit_id":"d1abbf94f76bd460950d7fe975aa037fc2fcd67b"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"da4550891ed67bed79dc59ba9b53b6189d48afe0","unresolved":false,"context_lines":[{"line_number":130,"context_line":"  which case the request object would have the jsonschema validator as an"},{"line_number":131,"context_line":"  attribute."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* What database migrations will accompany this change? None, this blueprint"},{"line_number":134,"context_line":"  shouldn\u0027t require a database migration or schema change."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"* The validator should be the new object added in this case. There is"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1ae5cdf2_799b9072","line":133,"updated":"2014-06-07 22:14:46.000000000","message":"split template-question and answer","commit_id":"d1abbf94f76bd460950d7fe975aa037fc2fcd67b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"617b3b317bb78bc02594da874d1718bcac702e3d","unresolved":false,"context_lines":[{"line_number":130,"context_line":"  which case the request object would have the jsonschema validator as an"},{"line_number":131,"context_line":"  attribute."},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"* What database migrations will accompany this change? None, this blueprint"},{"line_number":134,"context_line":"  shouldn\u0027t require a database migration or schema change."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"* The validator should be the new object added in this case. There is"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1ae5cdf2_8c5f3c75","line":133,"in_reply_to":"1ae5cdf2_799b9072","updated":"2014-06-08 05:27:20.000000000","message":"Done","commit_id":"d1abbf94f76bd460950d7fe975aa037fc2fcd67b"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"da4550891ed67bed79dc59ba9b53b6189d48afe0","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"The output from the request validation layer should not compromise data or"},{"line_number":156,"context_line":"expose private data to an external user. Request validation should not"},{"line_number":157,"context_line":"return information upon valid successful validation. In the event a request"},{"line_number":158,"context_line":"body is not valid, the validation layer should return the invalid values"},{"line_number":159,"context_line":"and/or the values required by the request, of which the end user should know."},{"line_number":160,"context_line":"The parameters of the resources being validated are public information,"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1ae5cdf2_39cae86e","line":157,"updated":"2014-06-07 22:14:46.000000000","message":"I think first \u0027valid\u0027 should be removed.","commit_id":"d1abbf94f76bd460950d7fe975aa037fc2fcd67b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"617b3b317bb78bc02594da874d1718bcac702e3d","unresolved":false,"context_lines":[{"line_number":154,"context_line":""},{"line_number":155,"context_line":"The output from the request validation layer should not compromise data or"},{"line_number":156,"context_line":"expose private data to an external user. Request validation should not"},{"line_number":157,"context_line":"return information upon valid successful validation. In the event a request"},{"line_number":158,"context_line":"body is not valid, the validation layer should return the invalid values"},{"line_number":159,"context_line":"and/or the values required by the request, of which the end user should know."},{"line_number":160,"context_line":"The parameters of the resources being validated are public information,"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1ae5cdf2_cc594490","line":157,"in_reply_to":"1ae5cdf2_39cae86e","updated":"2014-06-08 05:27:20.000000000","message":"Done","commit_id":"d1abbf94f76bd460950d7fe975aa037fc2fcd67b"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"da4550891ed67bed79dc59ba9b53b6189d48afe0","unresolved":false,"context_lines":[{"line_number":158,"context_line":"body is not valid, the validation layer should return the invalid values"},{"line_number":159,"context_line":"and/or the values required by the request, of which the end user should know."},{"line_number":160,"context_line":"The parameters of the resources being validated are public information,"},{"line_number":161,"context_line":"described in the Identity API spec."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"jsonschema documentation notes security considerations for both schemas and"},{"line_number":164,"context_line":"instances:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1ae5cdf2_19944c43","line":161,"updated":"2014-06-07 22:14:46.000000000","message":"What I understood was that some values should be revealed when the request is invalid, some shouldn\u0027t. My question was : can we somehow configure locally or globally what values should be revealed? For instance, I don\u0027t think validator should ever return an error with response like \"your pasword \u0027mysupersecretpassword\u0027 is too long or whatever reason\"","commit_id":"d1abbf94f76bd460950d7fe975aa037fc2fcd67b"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"617b3b317bb78bc02594da874d1718bcac702e3d","unresolved":false,"context_lines":[{"line_number":158,"context_line":"body is not valid, the validation layer should return the invalid values"},{"line_number":159,"context_line":"and/or the values required by the request, of which the end user should know."},{"line_number":160,"context_line":"The parameters of the resources being validated are public information,"},{"line_number":161,"context_line":"described in the Identity API spec."},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"jsonschema documentation notes security considerations for both schemas and"},{"line_number":164,"context_line":"instances:"}],"source_content_type":"text/x-rst","patch_set":12,"id":"1ae5cdf2_2c50e85d","line":161,"in_reply_to":"1ae5cdf2_19944c43","updated":"2014-06-08 05:27:20.000000000","message":"Sure, that makes sense, good point. We can add a check in the validation of the identity API I\u0027m sure that can alter the error message in this case.. \n\nSomething like: \n\n    \"User password not valid\"\n\nVersus: \n\n    \"Invalid input for field/attribute password. Value: \u0027some-super-secret-password\u0027 value. \u0027some-super-secret-password\u0027 is not a \u0027password\u0027\"\n\nGenerally, the format of the error messages returned is pretty good, but I think in this case it would be fine to modify the message.","commit_id":"d1abbf94f76bd460950d7fe975aa037fc2fcd67b"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"aff481de77fdb2ddb63f3182dfb4631a5e639bfe","unresolved":false,"context_lines":[{"line_number":46,"context_line":"error will be returned from the server."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Example:"},{"line_number":49,"context_line":"\"Invalid input for field/attribute email. Value: some invalid email value."},{"line_number":50,"context_line":"\u0027some invalid email value\u0027 is not a \u0027email\u0027\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Some notes on doing this implementation:"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_5fa84677","line":49,"updated":"2014-06-10 00:12:12.000000000","message":"Can \"field/attribute\" be changed to \"field\"? Also, should all replaced values be put in \u0027 (for example, \u0027email\u0027)?\n\nAlso, I\u0027m not sure users are going to know what \"Value: some invalid email value\" means, so how about make it more explicit: \"The value is \u0027some invalid email value\u0027.\"\n\nAlso, the values could be very long, e.g., someone might put in a 2k email and then that would wind up in the log. The server should truncate it if it\u0027s really long. Or not include the value in the message.","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c0bc386df0aa2dc0133accacdcf53945ec111f7d","unresolved":false,"context_lines":[{"line_number":46,"context_line":"error will be returned from the server."},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Example:"},{"line_number":49,"context_line":"\"Invalid input for field/attribute email. Value: some invalid email value."},{"line_number":50,"context_line":"\u0027some invalid email value\u0027 is not a \u0027email\u0027\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Some notes on doing this implementation:"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_a76c4ed1","line":49,"in_reply_to":"1ae5cdf2_5fa84677","updated":"2014-06-13 14:20:36.000000000","message":"Done","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"aff481de77fdb2ddb63f3182dfb4631a5e639bfe","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Example:"},{"line_number":49,"context_line":"\"Invalid input for field/attribute email. Value: some invalid email value."},{"line_number":50,"context_line":"\u0027some invalid email value\u0027 is not a \u0027email\u0027\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Some notes on doing this implementation:"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_bfe86a7d","line":50,"updated":"2014-06-10 00:12:12.000000000","message":"Is this the same as the previous sentence? Does it have to be repeated?","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c0bc386df0aa2dc0133accacdcf53945ec111f7d","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"Example:"},{"line_number":49,"context_line":"\"Invalid input for field/attribute email. Value: some invalid email value."},{"line_number":50,"context_line":"\u0027some invalid email value\u0027 is not a \u0027email\u0027\""},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"Some notes on doing this implementation:"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_076502e0","line":50,"in_reply_to":"1ae5cdf2_bfe86a7d","updated":"2014-06-13 14:20:36.000000000","message":"Done","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"aff481de77fdb2ddb63f3182dfb4631a5e639bfe","unresolved":false,"context_lines":[{"line_number":54,"context_line":"* Common parameter types can be leveraged across all Keystone resources. An"},{"line_number":55,"context_line":"  example of this would be as follows::"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    from keystone.common.validation import parameter_types"},{"line_number":58,"context_line":"    \u003csnip\u003e"},{"line_number":59,"context_line":"    CREATE \u003d {"},{"line_number":60,"context_line":"        \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_dfea96ab","line":57,"updated":"2014-06-10 00:12:12.000000000","message":"I expected the example to be like ... entity names are always strings of 1-255 characters, so a parameter type would be created for names to enforce this.","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c0bc386df0aa2dc0133accacdcf53945ec111f7d","unresolved":false,"context_lines":[{"line_number":54,"context_line":"* Common parameter types can be leveraged across all Keystone resources. An"},{"line_number":55,"context_line":"  example of this would be as follows::"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"    from keystone.common.validation import parameter_types"},{"line_number":58,"context_line":"    \u003csnip\u003e"},{"line_number":59,"context_line":"    CREATE \u003d {"},{"line_number":60,"context_line":"        \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_c7423a0e","line":57,"in_reply_to":"1ae5cdf2_dfea96ab","updated":"2014-06-13 14:20:36.000000000","message":"Isn\u0027t there an LDAP case where names can be longer than 255 characters?","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"aff481de77fdb2ddb63f3182dfb4631a5e639bfe","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"* Initial work will include capturing the Identity API Spec for existing"},{"line_number":74,"context_line":"  resources in a schema. This should be a one time operation for each"},{"line_number":75,"context_line":"  major version of the API. This will be applied to the Keystone V3 API."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* The current implementation up for review uses a method decorator in the"},{"line_number":78,"context_line":"  resource controller [1]. This is a fairly simple change and doesn\u0027t clutter"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_5fd686f2","line":75,"updated":"2014-06-10 00:12:12.000000000","message":"change Keystone V3 API to Identity API V3.","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c0bc386df0aa2dc0133accacdcf53945ec111f7d","unresolved":false,"context_lines":[{"line_number":72,"context_line":""},{"line_number":73,"context_line":"* Initial work will include capturing the Identity API Spec for existing"},{"line_number":74,"context_line":"  resources in a schema. This should be a one time operation for each"},{"line_number":75,"context_line":"  major version of the API. This will be applied to the Keystone V3 API."},{"line_number":76,"context_line":""},{"line_number":77,"context_line":"* The current implementation up for review uses a method decorator in the"},{"line_number":78,"context_line":"  resource controller [1]. This is a fairly simple change and doesn\u0027t clutter"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_2753dee2","line":75,"in_reply_to":"1ae5cdf2_5fd686f2","updated":"2014-06-13 14:20:36.000000000","message":"Done","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"a27aaafc52bf1d58d2824bf555d65568dd6af122","unresolved":false,"context_lines":[{"line_number":86,"context_line":"to account for the cases specific to the backend. Example, the SQL backend"},{"line_number":87,"context_line":"allows for 255 character user names but the LDAP backend doesn\u0027t have a"},{"line_number":88,"context_line":"restriction against the length of user names. In this case, we could do the"},{"line_number":89,"context_line":"following:"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"* Validate against the least common denominator at the controller layer,"},{"line_number":92,"context_line":"  unlimited in this example. This might be the suboptimal solution since it"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_c982bf51","line":89,"updated":"2014-06-10 18:29:30.000000000","message":"I think this can be done at two stages and you will really confuse things by allowing the backend to be involved in the validation. \n\nOn first pass with jsonschema you validate that in a global sense the input makes sense.\n\nWhen you get to the backend the backend has the ability to raises it\u0027s own validation errors for input that doesn\u0027t work for it.","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"aff481de77fdb2ddb63f3182dfb4631a5e639bfe","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"* Validate against the least common denominator at the controller layer,"},{"line_number":92,"context_line":"  unlimited in this example. This might be the suboptimal solution since it"},{"line_number":93,"context_line":"  could effect existing deployments."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"* Have the backend call back to the validator, giving it a value to validate"},{"line_number":96,"context_line":"  with. Example, the SQL backend understands the schema, so when asked the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_7fd34238","line":93,"updated":"2014-06-10 00:12:12.000000000","message":"why would this affect existing deployments?\n\n(also, change \"effect\" to \"affect\")","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c0bc386df0aa2dc0133accacdcf53945ec111f7d","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"* Validate against the least common denominator at the controller layer,"},{"line_number":92,"context_line":"  unlimited in this example. This might be the suboptimal solution since it"},{"line_number":93,"context_line":"  could effect existing deployments."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"* Have the backend call back to the validator, giving it a value to validate"},{"line_number":96,"context_line":"  with. Example, the SQL backend understands the schema, so when asked the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_e773b67d","line":93,"in_reply_to":"1ae5cdf2_7fd34238","updated":"2014-06-13 14:20:36.000000000","message":"Done","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"a27aaafc52bf1d58d2824bf555d65568dd6af122","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"* Validate against the least common denominator at the controller layer,"},{"line_number":92,"context_line":"  unlimited in this example. This might be the suboptimal solution since it"},{"line_number":93,"context_line":"  could effect existing deployments."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"* Have the backend call back to the validator, giving it a value to validate"},{"line_number":96,"context_line":"  with. Example, the SQL backend understands the schema, so when asked the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_c9d0ff55","line":93,"in_reply_to":"1ae5cdf2_7fd34238","updated":"2014-06-10 18:29:30.000000000","message":"I would recommend we go this way. At least start this way. I think getting the backend involved in the first validation is going to be confusing - not to mention it implies at that time that you know what the backend will be (you probably do, but you shouldn\u0027t assume it).","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c0bc386df0aa2dc0133accacdcf53945ec111f7d","unresolved":false,"context_lines":[{"line_number":90,"context_line":""},{"line_number":91,"context_line":"* Validate against the least common denominator at the controller layer,"},{"line_number":92,"context_line":"  unlimited in this example. This might be the suboptimal solution since it"},{"line_number":93,"context_line":"  could effect existing deployments."},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"* Have the backend call back to the validator, giving it a value to validate"},{"line_number":96,"context_line":"  with. Example, the SQL backend understands the schema, so when asked the"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_a7ae0e7f","line":93,"in_reply_to":"1ae5cdf2_c9d0ff55","updated":"2014-06-13 14:20:36.000000000","message":"So, for example, if we hit some sort of SQL error, then catch it and raise a validation error instead?","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"aff481de77fdb2ddb63f3182dfb4631a5e639bfe","unresolved":false,"context_lines":[{"line_number":94,"context_line":""},{"line_number":95,"context_line":"* Have the backend call back to the validator, giving it a value to validate"},{"line_number":96,"context_line":"  with. Example, the SQL backend understands the schema, so when asked the"},{"line_number":97,"context_line":"  limit of user names, it could return 255."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"New features will be required to do input validation."},{"line_number":100,"context_line":""}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_5feda6b6","line":97,"updated":"2014-06-10 00:12:12.000000000","message":"Which of these are going to be implemented?","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"aff481de77fdb2ddb63f3182dfb4631a5e639bfe","unresolved":false,"context_lines":[{"line_number":96,"context_line":"  with. Example, the SQL backend understands the schema, so when asked the"},{"line_number":97,"context_line":"  limit of user names, it could return 255."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"New features will be required to do input validation."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_fff7528a","line":99,"updated":"2014-06-10 00:12:12.000000000","message":"This is already mentioned at line 81.","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c0bc386df0aa2dc0133accacdcf53945ec111f7d","unresolved":false,"context_lines":[{"line_number":96,"context_line":"  with. Example, the SQL backend understands the schema, so when asked the"},{"line_number":97,"context_line":"  limit of user names, it could return 255."},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"New features will be required to do input validation."},{"line_number":100,"context_line":""},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"Alternatives"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_e7fad6bb","line":99,"in_reply_to":"1ae5cdf2_fff7528a","updated":"2014-06-13 14:20:36.000000000","message":"Done","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":6486,"name":"Brant Knudson","email":"blk@acm.org","username":"blk-u"},"change_message_id":"aff481de77fdb2ddb63f3182dfb4631a5e639bfe","unresolved":false,"context_lines":[{"line_number":115,"context_line":"option for input validation."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"There have been discussions about using"},{"line_number":118,"context_line":"`Pecan \u003chttp://pecan.readthedocs.org/en/latest/\u003e`_ as the webframe work for"},{"line_number":119,"context_line":"Keystone. Pecan does offer input validation. If/When Keystone moves over to"},{"line_number":120,"context_line":"using Pecan, the validation layer may be refactored then. This implementation"},{"line_number":121,"context_line":"should be sufficient and work with Pecan until it is decided if validation"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_dfb7f6f3","line":118,"updated":"2014-06-10 00:12:12.000000000","message":"change \"webframe work\" to \"web framwork\"","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c0bc386df0aa2dc0133accacdcf53945ec111f7d","unresolved":false,"context_lines":[{"line_number":115,"context_line":"option for input validation."},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"There have been discussions about using"},{"line_number":118,"context_line":"`Pecan \u003chttp://pecan.readthedocs.org/en/latest/\u003e`_ as the webframe work for"},{"line_number":119,"context_line":"Keystone. Pecan does offer input validation. If/When Keystone moves over to"},{"line_number":120,"context_line":"using Pecan, the validation layer may be refactored then. This implementation"},{"line_number":121,"context_line":"should be sufficient and work with Pecan until it is decided if validation"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_07c7c245","line":118,"in_reply_to":"1ae5cdf2_dfb7f6f3","updated":"2014-06-13 14:20:36.000000000","message":"Done","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":7191,"name":"Jamie Lennox","email":"jamielennox@gmail.com","username":"jamielennox"},"change_message_id":"a27aaafc52bf1d58d2824bf555d65568dd6af122","unresolved":false,"context_lines":[{"line_number":119,"context_line":"Keystone. Pecan does offer input validation. If/When Keystone moves over to"},{"line_number":120,"context_line":"using Pecan, the validation layer may be refactored then. This implementation"},{"line_number":121,"context_line":"should be sufficient and work with Pecan until it is decided if validation"},{"line_number":122,"context_line":"will live with Pecan or not."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Data Model Impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_0942e70f","line":122,"updated":"2014-06-10 18:29:30.000000000","message":"Pecan doesn\u0027t offer input validation, WSME is often used in conjunction with pecan for validatoin.","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c0bc386df0aa2dc0133accacdcf53945ec111f7d","unresolved":false,"context_lines":[{"line_number":119,"context_line":"Keystone. Pecan does offer input validation. If/When Keystone moves over to"},{"line_number":120,"context_line":"using Pecan, the validation layer may be refactored then. This implementation"},{"line_number":121,"context_line":"should be sufficient and work with Pecan until it is decided if validation"},{"line_number":122,"context_line":"will live with Pecan or not."},{"line_number":123,"context_line":""},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"Data Model Impact"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_47d46ae8","line":122,"in_reply_to":"1ae5cdf2_0942e70f","updated":"2014-06-13 14:20:36.000000000","message":"Done","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":8978,"name":"Marek Denis","email":"marek.denis+openstack@gmail.com","username":"marek-denis"},"change_message_id":"0c1f105fef0d91f23d20ac00d2863c17bfb96f9c","unresolved":false,"context_lines":[{"line_number":159,"context_line":"described in the Identity API spec, with the exception of passwords. In the"},{"line_number":160,"context_line":"event the user\u0027s password fails validation, a check can be built into the"},{"line_number":161,"context_line":"error handling of the validator to not return the actual value of the"},{"line_number":162,"context_line":"password."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"jsonschema documentation notes security considerations for both schemas and"},{"line_number":165,"context_line":"instances:"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_cf9e9607","line":162,"updated":"2014-06-08 08:38:26.000000000","message":"I\u0027d still not mention password explicitely, rather \u0027private data\u0027, just like in your very first sentence: \"The output from the request validation layer should not compromise data or\texpose private data to an external user. Request validation should not expose private data to an external user.\"","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":5046,"name":"Lance Bragstad","email":"lbragstad@redhat.com","username":"ldbragst"},"change_message_id":"c0bc386df0aa2dc0133accacdcf53945ec111f7d","unresolved":false,"context_lines":[{"line_number":159,"context_line":"described in the Identity API spec, with the exception of passwords. In the"},{"line_number":160,"context_line":"event the user\u0027s password fails validation, a check can be built into the"},{"line_number":161,"context_line":"error handling of the validator to not return the actual value of the"},{"line_number":162,"context_line":"password."},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"jsonschema documentation notes security considerations for both schemas and"},{"line_number":165,"context_line":"instances:"}],"source_content_type":"text/x-rst","patch_set":13,"id":"1ae5cdf2_073c222e","line":162,"in_reply_to":"1ae5cdf2_cf9e9607","updated":"2014-06-13 14:20:36.000000000","message":"Done","commit_id":"8c87807145dde9ed8f988f73ea974f49740b5513"},{"author":{"_account_id":6460,"name":"Brad Topol","email":"btopol@us.ibm.com","username":"btopol"},"change_message_id":"87e1f69c16c1466d70686924d623f727a700a648","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"There are a couple notes on how to deal with different backend constraints."},{"line_number":94,"context_line":"The validator will have to honor the Identity API Spec but it will also have"},{"line_number":95,"context_line":"to account for the cases specific to the backend. Example, the SQL backend"},{"line_number":96,"context_line":"allows for 255 character user names but the LDAP backend doesn\u0027t have a"},{"line_number":97,"context_line":"restriction against the length of user names. In this case, we could do the"},{"line_number":98,"context_line":"following:"}],"source_content_type":"text/x-rst","patch_set":14,"id":"1ae5cdf2_2102ca72","line":95,"updated":"2014-06-15 22:12:59.000000000","message":"Put \"For example,\"  instead of just  example","commit_id":"d4b56e36dc639cdc74b8046aa24498d55124eec9"}]}
