wrolpi/modules/otp/api.py
lrnselfreliance 6e55e7360b
Feature/raspberry pi archive (#72)
* Converting OTP PDF generation to Latex to avoid installing wkhtmltopdf.

* Creating temporary_directory_path to simplify creating a TemporaryDirectory of type Path.

* Removing author

* Linting

* Installing texlive-latex-extra for more readable font.

* Raspberry pi has to archive locally.

Signed-off-by: Roland <roland@learningselfreliance.com>
2022-01-06 13:56:19 -07:00

45 lines
1.3 KiB
Python

import random
from http import HTTPStatus
from string import ascii_letters
from sanic import response
from sanic.request import Request
from wrolpi.root_api import get_blueprint
from wrolpi.schema import validate_doc
from .common import generate_pdf, encrypt_otp, decrypt_otp
from .schema import EncryptOTPRequest, DecryptOTPRequest
bp = get_blueprint('OTP', '/api/otp')
@bp.post('/encrypt_otp')
@validate_doc(
summary='Encrypt a message with OTP',
consumes=EncryptOTPRequest,
)
async def post_encrypt_otp(_: Request, data: dict):
data = encrypt_otp(data['otp'], data['plaintext'])
return response.json(data)
@bp.post('/decrypt_otp')
@validate_doc(
summary='Decrypt a message with OTP',
consumes=DecryptOTPRequest,
)
async def post_decrypt_otp(_: Request, data: dict):
data = decrypt_otp(data['otp'], data['ciphertext'])
return response.json(data)
@bp.get('/pdf')
async def get_new_otp_pdf(_: Request):
random_name = ''.join(random.choice(ascii_letters) for _ in range(8))
filename = f'one-time-pad-{random_name}.pdf'
headers = {
'Content-type': 'application/pdf',
'Content-Disposition': f'attachment;filename={filename}'
}
contents = generate_pdf()
return response.raw(contents, HTTPStatus.OK, headers)