Projekt

Obecné

Profil

« Předchozí | Další » 

Revize e77c14f9

Přidáno uživatelem Michal Seják před téměř 4 roky(ů)

Re #8706 - Fixed a bug where certificates without usages would not be returned when the usage filter was unspecified. Added a related integration test.

Zobrazit rozdíly:

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