mirror of
https://github.com/kellyjonbrazil/jc.git
synced 2025-07-11 01:10:37 +02:00
initial working gpg parser
This commit is contained in:
@ -36,6 +36,7 @@ parsers = [
|
|||||||
'fstab',
|
'fstab',
|
||||||
'git-log',
|
'git-log',
|
||||||
'git-log-s',
|
'git-log-s',
|
||||||
|
'gpg',
|
||||||
'group',
|
'group',
|
||||||
'gshadow',
|
'gshadow',
|
||||||
'hash',
|
'hash',
|
||||||
|
129
jc/parsers/gpg.py
Normal file
129
jc/parsers/gpg.py
Normal file
@ -0,0 +1,129 @@
|
|||||||
|
"""jc - JSON Convert `gpg --with-colons` command output parser
|
||||||
|
|
||||||
|
<<Short gpg description and caveats>>
|
||||||
|
|
||||||
|
Usage (cli):
|
||||||
|
|
||||||
|
$ gpg --with-colons | jc --gpg
|
||||||
|
|
||||||
|
or
|
||||||
|
|
||||||
|
$ jc gpg --with-colons
|
||||||
|
|
||||||
|
Usage (module):
|
||||||
|
|
||||||
|
import jc
|
||||||
|
result = jc.parse('gpg', gpg_command_output)
|
||||||
|
|
||||||
|
Schema:
|
||||||
|
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"gpg": string,
|
||||||
|
"bar": boolean,
|
||||||
|
"baz": integer
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
||||||
|
Examples:
|
||||||
|
|
||||||
|
$ gpg | jc --gpg -p
|
||||||
|
[]
|
||||||
|
|
||||||
|
$ gpg | jc --gpg -p -r
|
||||||
|
[]
|
||||||
|
"""
|
||||||
|
from typing import List, Dict, Optional
|
||||||
|
import jc.utils
|
||||||
|
|
||||||
|
|
||||||
|
class info():
|
||||||
|
"""Provides parser metadata (version, author, etc.)"""
|
||||||
|
version = '1.0'
|
||||||
|
description = '`gpg --with-colons` command parser'
|
||||||
|
author = 'Kelly Brazil'
|
||||||
|
author_email = 'kellyjonbrazil@gmail.com'
|
||||||
|
compatible = ['linux']
|
||||||
|
magic_commands = ['gpg --with-colons']
|
||||||
|
|
||||||
|
|
||||||
|
__version__ = info.version
|
||||||
|
|
||||||
|
|
||||||
|
def _process(proc_data: List[Dict]) -> List[Dict]:
|
||||||
|
"""
|
||||||
|
Final processing to conform to the schema.
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
proc_data: (List of Dictionaries) raw structured data to process
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
List of Dictionaries. Structured to conform to the schema.
|
||||||
|
"""
|
||||||
|
return proc_data
|
||||||
|
|
||||||
|
|
||||||
|
def _list_get(my_list: List, index: int, default_val=None) -> Optional[str]:
|
||||||
|
"""get a list value or return None/default value if out of range."""
|
||||||
|
if index <= len(my_list) - 1:
|
||||||
|
return my_list[index] or None
|
||||||
|
|
||||||
|
return default_val
|
||||||
|
|
||||||
|
|
||||||
|
def parse(
|
||||||
|
data: str,
|
||||||
|
raw: bool = False,
|
||||||
|
quiet: bool = False
|
||||||
|
) -> List[Dict]:
|
||||||
|
"""
|
||||||
|
Main text parsing function
|
||||||
|
|
||||||
|
Parameters:
|
||||||
|
|
||||||
|
data: (string) text data to parse
|
||||||
|
raw: (boolean) unprocessed output if True
|
||||||
|
quiet: (boolean) suppress warning messages if True
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
|
||||||
|
List of Dictionaries. Raw or processed structured data.
|
||||||
|
"""
|
||||||
|
jc.utils.compatibility(__name__, info.compatible, quiet)
|
||||||
|
jc.utils.input_type_check(data)
|
||||||
|
|
||||||
|
raw_output: List = []
|
||||||
|
|
||||||
|
if jc.utils.has_data(data):
|
||||||
|
|
||||||
|
for line in filter(None, data.splitlines()):
|
||||||
|
values = line.split(':')
|
||||||
|
line_obj = {
|
||||||
|
'type': _list_get(values, 0),
|
||||||
|
'validity': _list_get(values, 1),
|
||||||
|
'key_length': _list_get(values, 2),
|
||||||
|
'pub_key_alg': _list_get(values, 3),
|
||||||
|
'key_id': _list_get(values, 4),
|
||||||
|
'creation_date': _list_get(values, 5),
|
||||||
|
'expiration_date': _list_get(values, 6),
|
||||||
|
'certsn_uidhash_trustinfo': _list_get(values, 7),
|
||||||
|
'owner_trust': _list_get(values, 8),
|
||||||
|
'user_id': _list_get(values, 9),
|
||||||
|
'signature_class': _list_get(values, 10),
|
||||||
|
'key_capabilities': _list_get(values, 11),
|
||||||
|
'cert_fingerprint_other': _list_get(values, 12),
|
||||||
|
'flag': _list_get(values, 13),
|
||||||
|
'token_sn': _list_get(values, 14),
|
||||||
|
'hash_alg': _list_get(values, 15),
|
||||||
|
'curve_name': _list_get(values, 16),
|
||||||
|
'compliance_flags': _list_get(values, 17),
|
||||||
|
'last_update_date': _list_get(values, 18),
|
||||||
|
'origin': _list_get(values, 19),
|
||||||
|
'comment': _list_get(values, 20)
|
||||||
|
}
|
||||||
|
|
||||||
|
raw_output.append(line_obj)
|
||||||
|
|
||||||
|
return raw_output if raw else _process(raw_output)
|
Reference in New Issue
Block a user