Add support for filtering parameters
This commit is contained in:
		
					parent
					
						
							
								fdb4926260
							
						
					
				
			
			
				commit
				
					
						0cb5337e32
					
				
			
		
					 1 changed files with 16 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -1,4 +1,4 @@
 | 
			
		|||
from fastapi import FastAPI, HTTPException
 | 
			
		||||
from fastapi import FastAPI, HTTPException, Query
 | 
			
		||||
from fastapi_utils.tasks import repeat_every
 | 
			
		||||
from prometheus_client import make_asgi_app, Gauge
 | 
			
		||||
from models import x509_cert, ssh_cert
 | 
			
		||||
| 
						 | 
				
			
			@ -6,6 +6,7 @@ from config import config
 | 
			
		|||
from pydantic import BaseModel
 | 
			
		||||
from typing import List, Union
 | 
			
		||||
from datetime import datetime
 | 
			
		||||
from enum import Enum
 | 
			
		||||
import mariadb
 | 
			
		||||
import sys
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -187,7 +188,14 @@ def get_x509_cert(serial: str) -> Union[x509Cert, None]:
 | 
			
		|||
 | 
			
		||||
@app.get("/ssh/certs", tags=["ssh"])
 | 
			
		||||
def list_ssh_certs(
 | 
			
		||||
    sort_key: str = "not_after", revoked: bool = False, expired: bool = False
 | 
			
		||||
    sort_key: str = Query(enum=["not_after", "not_before"], default="not_after"),
 | 
			
		||||
    revoked: bool = False,
 | 
			
		||||
    expired: bool = False,
 | 
			
		||||
    cert_type: list[Enum("Types", [("Host", "Host"), ("User", "User")])] = Query(
 | 
			
		||||
        ["Host", "User"]
 | 
			
		||||
    ),
 | 
			
		||||
    key: str = None,
 | 
			
		||||
    principal: str = None,
 | 
			
		||||
) -> list[sshCert]:
 | 
			
		||||
    certs = ssh_cert.list(db, sort_key=sort_key)
 | 
			
		||||
    cert_list = []
 | 
			
		||||
| 
						 | 
				
			
			@ -197,6 +205,12 @@ def list_ssh_certs(
 | 
			
		|||
            continue
 | 
			
		||||
        if cert.status.value == ssh_cert.status.REVOKED and not revoked:
 | 
			
		||||
            continue
 | 
			
		||||
        if cert.type not in [item.value for item in cert_type]:
 | 
			
		||||
            continue
 | 
			
		||||
        if key is not None and key not in str(cert.key_id):
 | 
			
		||||
            continue
 | 
			
		||||
        if principal is not None and principal not in str(cert.principals):
 | 
			
		||||
            continue
 | 
			
		||||
 | 
			
		||||
        cert.status = str(cert.status)
 | 
			
		||||
        cert_list.append(cert)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue