You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Comrad/comrad/backend/switchboard.py

83 lines
2.6 KiB
Python

4 years ago
# internal imports
import os,sys; sys.path.append(os.path.abspath(os.path.join(os.path.abspath(os.path.join(os.path.dirname(__file__),'..')),'..')))
from comrad import *
from comrad.backend import *
4 years ago
from getpass import getpass
4 years ago
# external imports
from flask import Flask, request, jsonify
from flask_classful import FlaskView
4 years ago
OP_PASS = None
4 years ago
class TheSwitchboard(FlaskView, Logger):
4 years ago
default_methods = ['POST']
4 years ago
excluded_methods = ['phone','op','send','printt','log','status']
4 years ago
@property
def op(self):
4 years ago
global OP_PASS
from comrad.backend.the_operator import TheOperator
4 years ago
if type(self)==TheOperator: return self
if hasattr(self,'_op'): return self._op
global OPERATOR,OPERATOR_KEYCHAIN
if OPERATOR: return OPERATOR
4 years ago
self._op=OPERATOR=TheOperator()
4 years ago
return OPERATOR
4 years ago
def post(self):
4 years ago
clear_screen()
from comrad.cli.artcode import ART_OLDPHONE4
4 years ago
data_b=request.data
4 years ago
4 years ago
self.log(f'Incoming call! {ART_OLDPHONE4}')#': {data_b}')
4 years ago
if not data_b:
4 years ago
self.log('empty request!')
return OPERATOR_INTERCEPT_MESSAGE
4 years ago
# ask operator to answer phone and request
4 years ago
resp_data_b = self.op.answer_phone(data_b)
4 years ago
# decode to str
4 years ago
# self.log('about to send back -->',resp_data_b)
4 years ago
return resp_data_b
# def get(self,data_b64_str_esc):
# clear_screen()
# from comrad.cli.artcode import ART_OLDPHONE4
# # self.log(f'Incoming call!: {data_b64_str_esc}')
# if not data_b64_str_esc:
# self.log('empty request!')
# return OPERATOR_INTERCEPT_MESSAGE
# # unenescape
# data_b64_str = data_b64_str_esc.replace('_','/')
# # encode to binary
# data_b64 = data_b64_str.encode()
# data_b = b64decode(data_b64)
# # ask operator to answer phone and request
# resp_data_b = self.op.answer_phone(data_b)
# # decode to str
# resp_data_b64 = b64encode(resp_data_b)
# resp_data_b64_str = resp_data_b64.decode()
4 years ago
4 years ago
# # return as str
# return resp_data_b64_str
4 years ago
def run_forever(port='8080'):
4 years ago
# global OP_PASS
# OP_PASS = getpass('@op pass? ')
4 years ago
TELEPHONE = TheTelephone()
4 years ago
OPERATOR = TheOperator()
4 years ago
# print(OPERATOR,'!?',OPERATOR.keychain())
4 years ago
app = Flask(__name__)
4 years ago
TheSwitchboard.register(app, route_base='/op/', route_prefix=None)
4 years ago
app.run(debug=True, port=port, host='0.0.0.0')
if __name__ == '__main__':
port = '8080' if len(sys.argv)<2 or not sys.argv[1].isdigit() else sys.argv[1]
run_forever(port = port)