Revize e77c14f9
Přidáno uživatelem Michal Seják před téměř 4 roky(ů)
src/controllers/certificates_controller.py | ||
---|---|---|
328 | 328 |
f"\n{dict_to_string(data)}") |
329 | 329 |
|
330 | 330 |
target_types = {ROOT_CA_ID, INTERMEDIATE_CA_ID, CERTIFICATE_ID} |
331 |
target_usages = {v for v in CertController.INVERSE_USAGE_KEY_MAP.keys()}
|
|
331 |
target_usages = None
|
|
332 | 332 |
target_cn_substring = None |
333 | 333 |
issuer_id = -1 |
334 | 334 |
|
src/dao/certificate_repository.py | ||
---|---|---|
269 | 269 |
try: |
270 | 270 |
values = [] |
271 | 271 |
values += list(target_types) |
272 |
values += list(target_usages) |
|
273 | 272 |
|
274 | 273 |
sql = ( |
275 | 274 |
f"SELECT * " |
276 | 275 |
f"FROM {TAB_CERTIFICATES} a " |
277 | 276 |
f"WHERE (a.{COL_DELETION_DATE} IS NULL OR a.{COL_DELETION_DATE} = '') " |
278 | 277 |
f"AND a.{COL_TYPE_ID} IN ({','.join('?' * len(target_types))}) " |
279 |
f"AND (SELECT COUNT(*) FROM {TAB_CERTIFICATE_USAGES} " |
|
280 |
f"WHERE {COL_CERTIFICATE_ID} = a.{COL_ID} " |
|
281 |
f"AND {COL_USAGE_TYPE_ID} IN ({','.join('?' * len(target_usages))}) " |
|
282 |
f") > 0 " |
|
283 | 278 |
) |
279 |
|
|
280 |
if target_usages is not None: |
|
281 |
sql += f"AND (SELECT COUNT(*) FROM {TAB_CERTIFICATE_USAGES} WHERE {COL_CERTIFICATE_ID} = a.{COL_ID} " \ |
|
282 |
f"AND {COL_USAGE_TYPE_ID} IN ({','.join('?' * len(target_usages))})) > 0 " |
|
283 |
values += list(target_usages) |
|
284 | 284 |
|
285 | 285 |
if target_cn_substring is not None: |
286 | 286 |
sql += f" AND a.{COL_COMMON_NAME} LIKE '%' || ? || '%'" |
... | ... | |
728 | 728 |
try: |
729 | 729 |
values = [issuer_id, issuer_id] |
730 | 730 |
values += list(target_types) |
731 |
values += list(target_usages) |
|
732 | 731 |
|
733 | 732 |
sql = ( |
734 | 733 |
f"SELECT * " |
... | ... | |
736 | 735 |
f"WHERE (a.{COL_DELETION_DATE} IS NULL OR a.{COL_DELETION_DATE} = '') " |
737 | 736 |
f"AND a.{COL_PARENT_ID} = ? AND a.{COL_ID} != ? " |
738 | 737 |
f"AND a.{COL_TYPE_ID} IN ({','.join('?' * len(target_types))}) " |
739 |
f"AND (SELECT COUNT(*) FROM {TAB_CERTIFICATE_USAGES} " |
|
740 |
f"WHERE {COL_CERTIFICATE_ID} = a.{COL_ID} " |
|
741 |
f"AND {COL_USAGE_TYPE_ID} IN ({','.join('?' * len(target_usages))}) " |
|
742 |
f") > 0 " |
|
738 |
|
|
743 | 739 |
) |
740 |
|
|
741 |
if target_usages is not None: |
|
742 |
sql += f"AND (SELECT COUNT(*) FROM {TAB_CERTIFICATE_USAGES} WHERE {COL_CERTIFICATE_ID} = a.{COL_ID} " \ |
|
743 |
f"AND {COL_USAGE_TYPE_ID} IN ({','.join('?' * len(target_usages))})) > 0 " |
|
744 |
values += list(target_usages) |
|
744 | 745 |
|
745 | 746 |
if target_cn_substring is not None: |
746 | 747 |
sql += f" AND a.{COL_COMMON_NAME} LIKE '%' || ? || '%'" |
747 |
|
|
748 | 748 |
values += [target_cn_substring] |
749 | 749 |
|
750 | 750 |
if page is not None and per_page is not None: |
tests/integration_tests/rest_api/certificates_test.py | ||
---|---|---|
368 | 368 |
all_certs_actual = ret.json["data"] |
369 | 369 |
|
370 | 370 |
assert len(all_certs_actual) == len(all_certs_expected) |
371 |
|
|
372 |
|
|
373 |
def test_filtering_certs_empty_usage(server): |
|
374 |
ret = server.get("/api/certificates?per_page=200") |
|
375 |
assert ret.status_code == 200 |
|
376 |
assert "data" in ret.json |
|
377 |
assert "success" in ret.json |
|
378 |
assert ret.json["success"] |
|
379 |
l1 = len(ret.json["data"]) |
|
380 |
print(ret.json["data"]) |
|
381 |
|
|
382 |
original = { |
|
383 |
"CA": 1, |
|
384 |
"subject": { |
|
385 |
"C": "CZ", |
|
386 |
"CN": "AWD s.r.o.", |
|
387 |
"L": "Pilsen", |
|
388 |
"O": "This is most likely a bad s.r.o.", |
|
389 |
"OU": "IT department", |
|
390 |
"ST": "Pilsen Region", |
|
391 |
"emailAddress": "end@ca.com" |
|
392 |
}, |
|
393 |
"usage": [], |
|
394 |
"validityDays": 30 |
|
395 |
} |
|
396 |
ret = server.post("/api/certificates", content_type="application/json", json=original) |
|
397 |
assert ret.status_code == 201 |
|
398 |
|
|
399 |
ret = server.get("/api/certificates?per_page=200") |
|
400 |
assert ret.status_code == 200 |
|
401 |
assert "data" in ret.json |
|
402 |
assert "success" in ret.json |
|
403 |
assert ret.json["success"] |
|
404 |
l2 = len(ret.json["data"]) |
|
405 |
print(ret.json["data"]) |
|
406 |
|
|
407 |
assert l2 == l1 + 1 |
|
408 |
|
|
371 | 409 |
|
372 | 410 |
def test_filtering_issuer(server): |
373 | 411 |
ret = server.get("/api/certificates", json={"filtering": {"issuedby": 2}}) |
... | ... | |
528 | 566 |
|
529 | 567 |
d = ret.json |
530 | 568 |
|
531 |
assert d["data"] == 10
|
|
569 |
assert d["data"] == 11
|
|
532 | 570 |
|
533 | 571 |
id = d["data"] |
534 | 572 |
|
Také k dispozici: Unified diff
Re #8706 - Fixed a bug where certificates without usages would not be returned when the usage filter was unspecified. Added a related integration test.