Validate that the provided value for "limit" query parameter is valid. Note: We only perform max_page_size check for non-admin users. Admin users can provide arbitrary limit value.
(limit, requester_user=None)
| 782 | |
| 783 | |
| 784 | def validate_limit_query_param(limit, requester_user=None): |
| 785 | """ |
| 786 | Validate that the provided value for "limit" query parameter is valid. |
| 787 | |
| 788 | Note: We only perform max_page_size check for non-admin users. Admin users |
| 789 | can provide arbitrary limit value. |
| 790 | """ |
| 791 | rbac_utils = get_rbac_backend().get_utils_class() |
| 792 | user_is_admin = rbac_utils.user_is_admin(user_db=requester_user) |
| 793 | |
| 794 | if limit: |
| 795 | # Display all the results |
| 796 | if int(limit) == -1: |
| 797 | if not user_is_admin: |
| 798 | # Only admins can specify limit -1 |
| 799 | message = ( |
| 800 | "Administrator access required to be able to specify limit=-1 and " |
| 801 | "retrieve all the records" |
| 802 | ) |
| 803 | raise AccessDeniedError(message=message, user_db=requester_user) |
| 804 | |
| 805 | return 0 |
| 806 | elif int(limit) <= -2: |
| 807 | msg = 'Limit, "%s" specified, must be a positive number.' % (limit) |
| 808 | raise ValueError(msg) |
| 809 | elif int(limit) > cfg.CONF.api.max_page_size and not user_is_admin: |
| 810 | msg = 'Limit "%s" specified, maximum value is "%s"' % ( |
| 811 | limit, |
| 812 | cfg.CONF.api.max_page_size, |
| 813 | ) |
| 814 | |
| 815 | raise AccessDeniedError(message=msg, user_db=requester_user) |
| 816 | # Disable n = 0 |
| 817 | elif limit == 0: |
| 818 | msg = ( |
| 819 | 'Limit, "%s" specified, must be a positive number or -1 for full result set.' |
| 820 | % (limit) |
| 821 | ) |
| 822 | raise ValueError(msg) |
| 823 | |
| 824 | return limit |
no test coverage detected