45 lines
1.1 KiB
Python
Executable file
45 lines
1.1 KiB
Python
Executable file
import binascii
|
|
import requests
|
|
|
|
from decouple import config
|
|
from pyotp import TOTP
|
|
from config import VM_POOL
|
|
|
|
|
|
def check_otp(name, realm, token):
|
|
try:
|
|
data = {
|
|
"auth_name": config("AUTH_NAME", ""),
|
|
"auth_token": TOTP(config("AUTH_SEED", "")).now(),
|
|
"auth_realm": config("AUTH_REALM", ""),
|
|
"name": name,
|
|
"realm": realm,
|
|
"token": token,
|
|
}
|
|
except binascii.Error:
|
|
return 400
|
|
|
|
response = requests.get(
|
|
"{OTP_SERVER}{OTP_VERIFY_ENDPOINT}".format(
|
|
OTP_SERVER=config("OTP_SERVER", ""),
|
|
OTP_VERIFY_ENDPOINT=config("OTP_VERIFY_ENDPOINT", "verify"),
|
|
),
|
|
json=data,
|
|
)
|
|
return response.status_code
|
|
|
|
|
|
def resolve_vm_name(name, owner):
|
|
"""
|
|
Input: name of vm, owner of vm
|
|
Output: uuid of vm if found otherwise None
|
|
"""
|
|
result = next(
|
|
filter(
|
|
lambda vm: vm.value["owner"] == owner and vm.value["name"] == name,
|
|
VM_POOL.vms,
|
|
),
|
|
None,
|
|
)
|
|
if result:
|
|
return result.key.split("/")[-1]
|