|
34 | 34 |
|
35 | 35 | __all__ = ["RestHandler"] |
36 | 36 |
|
| 37 | +BASIC_NAME_VALIDATORS = { |
| 38 | + "PROHIBITED_NAME_CHARACTERS": ["*", "\\", "[", "]", "(", ")", "?", ":"], |
| 39 | + "PROHIBITED_NAMES": ["default", ".", ".."], |
| 40 | + "MAX_LENGTH": 1024, |
| 41 | +} |
| 42 | + |
37 | 43 |
|
38 | 44 | def _check_name_for_create(name): |
39 | 45 | if name == "default": |
@@ -102,13 +108,38 @@ def check_existing(self, name): |
102 | 108 | else: |
103 | 109 | return None |
104 | 110 |
|
| 111 | + def basic_name_validation(name: str): |
| 112 | + tmp_name = str(name) |
| 113 | + prohibited_chars = BASIC_NAME_VALIDATORS["PROHIBITED_NAME_CHARACTERS"] |
| 114 | + prohibited_names = BASIC_NAME_VALIDATORS["PROHIBITED_NAMES"] |
| 115 | + max_chars = BASIC_NAME_VALIDATORS["MAX_LENGTH"] |
| 116 | + val_err_msg = ( |
| 117 | + f'{prohibited_names}, string started with "_" and string including any one ' |
| 118 | + f'of {prohibited_chars} are reserved value which cannot be used for field Name"' |
| 119 | + ) |
| 120 | + |
| 121 | + if tmp_name.startswith("_") or any( |
| 122 | + tmp_name == el for el in prohibited_names |
| 123 | + ): |
| 124 | + raise RestError(400, val_err_msg) |
| 125 | + |
| 126 | + if any(pc in prohibited_chars for pc in tmp_name): |
| 127 | + raise RestError(400, val_err_msg) |
| 128 | + |
| 129 | + if len(tmp_name) >= max_chars: |
| 130 | + raise RestError( |
| 131 | + 400, f"Field Name must be less than {max_chars} characters" |
| 132 | + ) |
| 133 | + |
105 | 134 | @wraps(meth) |
106 | 135 | def wrapper(self, name, data): |
107 | 136 | self._endpoint.validate( |
108 | 137 | name, |
109 | 138 | data, |
110 | 139 | check_existing(self, name), |
111 | 140 | ) |
| 141 | + basic_name_validation(name) |
| 142 | + self._endpoint.validate_special(name, data) |
112 | 143 | self._endpoint.encode(name, data) |
113 | 144 |
|
114 | 145 | return meth(self, name, data) |
@@ -194,7 +225,7 @@ def all(self, decrypt=False, **query): |
194 | 225 | response = self._client.get( |
195 | 226 | self.path_segment(self._endpoint.internal_endpoint), |
196 | 227 | output_mode="json", |
197 | | - **query |
| 228 | + **query, |
198 | 229 | ) |
199 | 230 | return self._format_all_response(response, decrypt) |
200 | 231 |
|
@@ -382,7 +413,7 @@ def _load_credentials(self, name, data): |
382 | 413 | self._endpoint.internal_endpoint, |
383 | 414 | name=name, |
384 | 415 | ), |
385 | | - **masked |
| 416 | + **masked, |
386 | 417 | ) |
387 | 418 |
|
388 | 419 | def _encrypt_raw_credentials(self, data): |
|
0 commit comments