Start working on flask app

master
Micke Nordin 3 years ago
parent 8e19d33343
commit b84d91c9c0
Signed by: micke
GPG Key ID: 0DA0A7A5708FE257

@ -0,0 +1,15 @@
FROM python:3.10.4-slim-bullseye
WORKDIR /app
RUN mkdir keys
RUN mkdir nagrest
COPY requirements.txt ./
COPY app/* ./
COPY lib/* ./nagrest/
COPY keys/* ./keys/
RUN pip3 install --no-cache-dir -r requirements.txt
RUN apt update && apt upgrade && apt install -y gnupg
RUN ["/bin/bash", "-c", "pwd && ls -l"]
RUN ["/bin/bash", "-c", "gpg --import /app/keys/*.asc"]
CMD [ "python3", "./main.py" ]

@ -0,0 +1,27 @@
from flask import Flask
from flask_gnupg import GnuPG
import json
from nagrest.nag_parse import NagParse
app = Flask(__name__)
app.config['GPG_HOME_DIR'] = "/root/.gnupg"
app.config['GPG_BINARY'] = "/usr/bin/gpg"
gpg = GnuPG(app)
parser = NagParse()
@app.route('/')
def index():
keys_list = gpg.list_keys()
for key in keys_list:
gpg.trust_keys(key['fingerprint'], 'TRUST_ULTIMATE')
file = "/app/keys/test.sig"
with open(file, 'rb') as fh:
verified = gpg.decrypt_file(fh)
if verified.trust_level == verified.TRUST_ULTIMATE:
return str(verified).strip()
return '{}'
if __name__ == "__main__":
# use 0.0.0.0 to use it in container
app.run(host='0.0.0.0')

@ -0,0 +1,75 @@
-----BEGIN PGP PUBLIC KEY BLOCK-----
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
DVhe
=wTa2
-----END PGP PUBLIC KEY BLOCK-----

@ -0,0 +1,20 @@
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA512
{"valid": "message"}
-----BEGIN PGP SIGNATURE-----
iQIzBAEBCgAdFiEEIpL7dwHsMfazpY3ODaCnpXCP4lcFAmJEGYwACgkQDaCnpXCP
4lfKwhAAx45ZJGwf6o+aZ5lFtB6b8Nqx/fOm8Ax6IFwQcLebLM79I1yvOSFlcoKk
7t3Vwj0pL8d0w+PwNLrkjC78fKDqltTlHtD7ByW7b6lPXEUX1i/e2uBTd6zv+7zg
vkWQ1tYk9IOa7X4LubwhIC3L04BC0xNwbnlDioyUox1QzOVKpRufOrr30N0CQE3d
U1S6U8y3jLAvHi7dxC+RyvHYH8QGRWoRj6TXa3lsw1aeTShct2f3fXuZT0bQlsap
TJoffKKpr2Fw5wxLja00MYkBA4SXl568HLohSeL3uSxa2D//mwZ0zowERf1C+BC7
Gx7kSIkH/+16Mn1aHVMktNIZlhvAyoLwGUvZvL81bBTP+BMttPOOHzodRHljPFlW
fCWnozTKR0ouWczXR611rIEVCjeXardiDzXyYG41fCl/83TTmMQcQ+NxMbU3Uslk
FjvjANzkz/zzdte0S2kpzfe/zCwHT8vsfQM4Jvs+i8ycH+Ui03ShirjPdtwVuKui
WIj0o8h3PnBsl6aB3uDtHAjzeDsA4qZddoCqIAcrLVm8rIHXYfvFstevMYtGBqZ7
TIq2WhtFIvF8PECXjGK5gN8V4g+uWeBJTykAUbrdWJRaH9g3kbCa2NYRuVvdkwSw
LXJnPXqIDkdxqnO2IiIdsTvTdS6iiK1wwPG+oPVkexQB3tM/Auc=
=W+Mg
-----END PGP SIGNATURE-----

@ -3,7 +3,7 @@ import re
import json import json
import hashlib import hashlib
from enum import Enum, auto from enum import Enum, auto
from nag_object import NagObject, NagObjectType from .nag_object import NagObject, NagObjectType
class ParserState(Enum): class ParserState(Enum):
COMMENT = auto() COMMENT = auto()
@ -18,20 +18,29 @@ def hash_string(string:str) -> int:
return int(digest,16) * 1000000 return int(digest,16) * 1000000
class NagParse: class NagParse:
def __init__(self, config_files: list[str]): def __init__(self):
self.m_config_files: list[str] = config_files
self.m_config_table: dict[int,str] = dict() self.m_config_table: dict[int,str] = dict()
self.m_objects: list[NagObject] = list() self.m_objects: list[NagObject] = list()
for config_file in self.m_config_files:
self.m_config_table[hash_string(config_file)] = config_file
for object in self.parse_config(config_file):
self.m_objects.append(object)
def __str__(self): def __str__(self):
string = str() string = str()
for object in self.m_objects: for object in self.m_objects:
string += str(object) + "\n" string += str(object) + "\n"
return string return string
def consume_config_files(self, config_files: list[str]) -> None:
for config_file in config_files:
self.m_config_table[hash_string(config_file)] = config_file
for object in self.parse_config(config_file):
self.m_objects.append(object)
def consume_config_list(self, config_list: list[dict] ) -> None:
for object in config_list:
nag_object = NagObject()
nag_object.from_object(object)
self.m_objects.append(nag_object)
def to_json(self): def to_json(self):
return json.dumps([x.to_object() for x in self.m_objects]) return json.dumps([x.to_object() for x in self.m_objects])

@ -0,0 +1,2 @@
Flask-GnuPG
Flask

@ -1,3 +0,0 @@
import os, sys
sys.path.append(os.path.dirname(os.path.realpath(__file__)))
from nagparse import NagParse

@ -1,6 +0,0 @@
#!/usr/bin/env python3
import sys
from nagparse import NagParse
parser = NagParse(sys.argv[1:])
for object in parser.m_objects:
print(object.get_id())
Loading…
Cancel
Save