Ejemplo n.º 1
0
 def switch_to():
     log.write("/method/backup.make: API method does not work, W.I.P.")
     return json.dumps({
         "bad_response":{
             "error": "API method W.I.P."
         }
     })
Ejemplo n.º 2
0
def show_transaction_list():
    from app import transaction, log
    import logging
    tx_list = transaction.get_transactions()
    if len(tx_list) == 0:
        print("No Transaction\n")
        main_menu()
    else:
        for t in tx_list:
            log.write(t.message, logging.DEBUG)
        main_menu()
Ejemplo n.º 3
0
def generate_key():
    # 공개키, 개인키 생성
    pri_key = SigningKey.generate(curve=NIST256p)
    pub_key = pri_key.get_verifying_key()

    # 생성된 공인키, 개인키를 파일로 생성
    open(KEY_PATH + "/private.pem", "w",
         encoding='utf-8').write(pri_key.to_pem().decode('utf-8'))
    open(KEY_PATH + "/public.pem", "w",
         encoding='utf-8').write(pub_key.to_pem().decode('utf-8'))
    log.write("New Keys are generated")
Ejemplo n.º 4
0
def list_all_transaction():
	for t in transaction.get_transactions():
		time_stamp = datetime.datetime.__str__(t.time_stamp)
		log.write(
			"\n++++++++++ Transaction ID: "+ t.tx_id +" ++++++++++"
			"\nData: "+ t.message +
			"\n거래시각: "+ time_stamp +
			"\n공개키: "+ t.pub_key +
			"\n서명: "+ t.signature +
			"\n유형: "+ t.type +
			"\n+++++++++++++++++++++++++++++++++++++++++++++++++++++",
			logging.DEBUG)
Ejemplo n.º 5
0
def list_all_block():
	for b in block.get_all_block():
		time_stamp = datetime.datetime.__str__(b.time_stamp)
		log.write(
			"\n======================= Block ======================="
			"\nBlock Hash: "+ b.block_hash +
			"\n이전 Block Hash: "+ b.prev_block_hash +
			"\nBlock 생성시각: "+ time_stamp +
			"\nNonce: "+ b.nonce +
			"\n유형: "+ b.type +
			"\n=====================================================",
			logging.DEBUG)
Ejemplo n.º 6
0
def start_communicator(port):
    import threading
    global port_number
    port_number = port
    set_my_node(False)
    node.key.generate_key()

    log.write("Start node")

    global listen_thread
    listen_thread = threading.Thread(
        target=receiver.start,
        args=("Listener_Thread",
              communicator.my_ip_address.get_ip_address('en0'), port_number))
    listen_thread.start()
Ejemplo n.º 7
0
            def exec_command():

                if "secret" not in request.args:
                    log.write("/method/rcon.exec_command: access denied, expected secret")
                    return json.dumps({
                        "bad_response":{
                            "error": "access denied, expected secret"
                        }
                    })
                if not check_secret(request.args["secret"]):
                    log.write("/method/rcon.exec_command: access denied, wrong secret value: \"" + request.args["secret"] + "\"")
                    return json.dumps({
                        "bad_response":{
                            "error": "access denied, wrong secret value: \"" + request.args["secret"] + "\""
                        }
                    })
                if "command" not in request.args or request.args["command"] == "":
                    log.write("/method/rcon.exec_command: expected command")
                    return json.dumps({
                        "bad_response":{
                            "error": "expected command"
                        }
                    })
                command = request.args["command"]
                # FIXME
                # Temporary part to allow web-developer do his job:
                console_response = "Unrecognized command \"" + command.split()[0] + "\".\n"
                try:
                    console_history = open("temp_console_history.json", "r")
                    history = json.load(console_history)
                    console_history.close()
                except IOError:
                    history = {"msg":[]}
                except:
                    raise
                history["msg"].append({
                    "type":"command",
                    "timestamp": time.time(),
                    "command":command,
                    "console_response":console_response
                })
                try:
                    console_history = open("temp_console_history.json", "w")
                    json.dump(history, console_history, indent=4)
                    console_history.close()
                except:
                    raise
                # End of temporary part
                log.write("/method/rcon.exec_command: successful request, successful command execution")
                return json.dumps({
                    "response":{
                        "command": command,
                        "console_response": console_response
                    }
                })
Ejemplo n.º 8
0
    def find_node_thread():

        # UDP 소켓 생성
        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM,
                             socket.IPPROTO_UDP)

        # 소켓에 브로드캐스트 옵션 설정
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)

        # 포트 번호와 로컬 주소에 바인딩
        sock.bind(('', PING_PORT_NUMBER))

        # zmq라이브러리를 이용해 UDP 소켓을 폴링
        poller = zmq.Poller()
        poller.register(sock, zmq.POLLIN)

        # 실행 시 ping 전송
        ping_at = time.time()

        while is_running:
            # 타이머 설정
            timeout = ping_at - time.time()
            if timeout < 0:
                timeout = 0
            try:
                events = dict(poller.poll(1000 * timeout))
            except KeyboardInterrupt:
                log.write("interrupted")
                break

            # ping 으로부터 응답이 오는 경우 노드 추가
            if sock.fileno() in events:
                msg, addrinfo = sock.recvfrom(PING_MSG_SIZE)
                ip = addrinfo[0]
                n = node.Node(ip)
                node.add_node(n)

            # 일정 주기 마다 브로드캐스트로 ping
            if time.time() >= ping_at:
                sock.sendto(b'!', 0, ("255.255.255.255", PING_PORT_NUMBER))
                ping_at = time.time() + PING_INTERVAL
Ejemplo n.º 9
0
            def get_history():

                if "secret" not in request.args:
                    log.write("/method/rcon.get_history: access denied, expected secret")
                    return json.dumps({
                        "bad_response":{
                            "error": "access denied, expected secret"
                        }
                    })
                if not check_secret(request.args["secret"]):
                    log.write("/method/rcon.get_history: access denied, wrong secret value: \"" + request.args["secret"] + "\"")
                    return json.dumps({
                        "bad_response":{
                            "error": "access denied, wrong secret value: \"" + request.args["secret"] + "\""
                        }
                    })
                # FIXME
                # Temporary part to allow web-developer do his job:
                try:
                    console_history = open("temp_console_history.json", "r")
                    history = json.load(console_history)["msg"]
                    console_history.close()
                except IOError:
                    history = {"msg":[]}
                except:
                    raise
                # End of temporary part
                history.sort(key=lambda x: x["timestamp"])
                log.write("/method/rcon.get_history: successful request")
                return json.dumps({
                    "response":{
                        "history": history
                    }
                })
Ejemplo n.º 10
0
    def find_node_thread():
        sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM,
                             socket.IPPROTO_UDP)
        sock.setsockopt(socket.SOL_SOCKET, socket.SO_BROADCAST, 1)
        sock.bind(('', PING_PORT_NUMBER))

        t = threading.Thread(target=find_node_thread)
        poller = zmq.Poller()
        poller.register(sock, zmq.POLLIN)

        ping_at = time.time()

        # is_running
        while True:
            timeout = ping_at - time.time()
            if timeout < 0:
                timeout = 0
            try:
                events = dict(poller.poll(1000 * timeout))
            except KeyboardInterrupt:
                print("interrupted")
                break

        if sock.fileno() in events:
            msg, addrinfo = sock.recvfrom(PING_MSG_SIZE)
            ip = addrinfo[0]
            n = node.Node(ip)
            if node.add_node(n):
                # print('Find ' + ip)
                log.write('Find ' + ip)

        if time.time() >= ping_at:
            print('Finding a node...')
            sock.sendto(b'!', 0, ("255.255.255.255", PING_PORT_NUMBER))
            ping_at = time.time() + PING_INTERVAL

        t.start()
Ejemplo n.º 11
0
            def get_cpu_usage():

                if "secret" not in request.args:
                    log.write("/method/stats.get_cpu_usage: access denied, expected secret")
                    return json.dumps({
                        "bad_response":{
                            "error": "access denied, expected secret"
                        }
                    })
                if not check_secret(request.args["secret"]):
                    log.write("/method/stats.get_cpu_usage: access denied, wrong secret value: \"" + request.args["secret"] + "\"")
                    return json.dumps({
                        "bad_response":{
                            "error": "access denied, wrong secret value: \"" + request.args["secret"] + "\""
                        }
                    })
                if "format" not in request.args:
                    format = "fraction"
                elif request.args["format"] not in ["percent", "fraction"]:
                    log.write("/method/stats.get_cpu_usage: wrong format value")
                    return json.dumps({
                        "bad_response":{
                            "error": "wrong format value, expected \"percent\" or \"fraction\""
                        }
                    })
                else:
                    format = request.args["format"]

                # FIXME
                result = 56.3
                log.write("/method/stats.get_cpu_usage: successful request, cpu usage equal to " + result + "%")
                if format == "fraction":
                    result /= 100
                return json.dumps({
                    "response":{
                        "ram_usage": result,
                        "format": format
                    }
                })
Ejemplo n.º 12
0
def start(thread_name, ip_address, port):
    import json

    addr = (ip_address, port)
    buf_size = 1024

    # 소켓 생성 및 바인딩
    tcp_socket = socket(AF_INET, SOCK_STREAM)
    tcp_socket.bind(addr)
    tcp_socket.listen(5)

    while is_running:

        # 요청이 있을 경우 소켓과 송신자의 ip 주소 저장
        receive_socket, sender_ip = tcp_socket.accept()

        while is_running:
            log.write("Receiving")

            # 소켓으로부터 버퍼 사이즈씩 데이터 수신
            data = receive_socket.recv(buf_size)
            try:

                # 수신된 데이터가 없는 경우
                if len(data) == 0:
                    break

                # json 형태의 데이터를 dict 타입으로 변경 dict = {'key': 'value'}
                data_json_obj = json.loads(data)

                # Transaction을 받은 경우
                if data_json_obj['type'] == 'T':
                    log.write("Receiving a transaction")
                # todo

                # 블록을 수신한 경우
                elif data_json_obj['type'] == 'B':
                    log.write("Receiving a block")
                # todo
            except:
                traceback.print_exc()
                break

    tcp_socket.close()
    receive_socket.close()
Ejemplo n.º 13
0
 def test_method():
     if "secret" not in request.args:
         log.write("/method/test: access denied, expected secret")
         return json.dumps({
             "bad_response": {
                 "error": "access denied, expected secret"
             }
         })
     if not check_secret(request.args["secret"]):
         log.write("/method/test: access denied, wrong secret value: \"" + request.args["secret"] + "\"")
         return json.dumps({
             "bad_response": {
                 "error": "access denied, wrong secret value: \"" + request.args["secret"] + "\""
             }
         })
     log.write("/method/test: is working fine")
     return json.dumps({
         "response":{
             "message": "working fine, {}".format(api_cpp.stats.get_ram_usage())
         }
     })
Ejemplo n.º 14
0
def list_all_node():
	for n in node.get_all():
		log.write(n, logging.DEBUG)
Ejemplo n.º 15
0
def initiate_node(*args):
	set_my_node()

	log.write("Start node")
	start_node()
Ejemplo n.º 16
0
def set_my_node():
	my_node = Node(util.get_ip_address('en0'))
	key.generate_key()
	log.write("Set my node")
	node.add_node(my_node)
Ejemplo n.º 17
0
def list_all_transaction():
    import logging
    for t in transaction.get_transactions():
        log.write(t, logging.DEBUG)
Ejemplo n.º 18
0
def list_all_block():
    import logging
    for b in block.get_all_block():
        log.write(b, logging.DEBUG)
Ejemplo n.º 19
0
def start(thread_name, ip_address, port):
    import json

    addr = (ip_address, port)
    buf_size = 1024

    # 소켓 생성 및 바인딩
    tcp_socket = socket(AF_INET, SOCK_STREAM)
    tcp_socket.bind(addr)
    tcp_socket.listen(5)

    while is_running:

        # 요청이 있을 경우 소켓과 송신자의 ip 주소 저장
        receive_socket, sender_ip = tcp_socket.accept()

        while is_running:
            log.write("Receiving")

            # 소켓으로부터 버퍼 사이즈씩 데이터 수신
            data = receive_socket.recv(buf_size)
            try:

                # 수신된 데이터가 없는 경우
                if len(data) == 0:
                    break

                # json 형태의 데이터를 dict 타입으로 변경
                data_json_obj = json.loads(data)

                # Transaction을 받은 경우
                if data_json_obj['type'] == 'T':
                    log.write("Receiving a transaction")

                    verify_msg = data_json_obj['time_stamp'] + data_json_obj[
                        'message']

                    if key.verify_signature(data_json_obj['pub_key'],
                                            data_json_obj['signature'],
                                            verify_msg) is True:
                        log.write("Transaction is valid")
                        tx = Transaction().from_json(data_json_obj)
                        transaction.add_transaction(tx)
                    else:
                        log.write("Transaction is invalid")

                # 블록을 수신한 경우
                elif data_json_obj['type'] == 'B':
                    # 기존의 트랜잭션 삭제
                    transaction.remove_all()

                    # 블록 생성
                    received_block = Block().from_json(data_json_obj)

                    # 블록 저장
                    create_block(received_block)

            except:
                traceback.print_exc()
                break

    tcp_socket.close()
    receive_socket.close()
Ejemplo n.º 20
0
def start(thread_name, ip_address, port):
    import json

    addr = (ip_address, port)
    buf_size = 1024

    tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

    # tcp_socket.bind(addr)
    tcp_socket.listen(5)

    while True:

        receive_socket, sender_ip = tcp_socket.accept()

        while True:
            log.write("Receiving")
            data = receive_socket.recv(buf_size)
            try:

                if len(data) == 0:
                    break

                data_json_obj = json.loads(data)

                if data_json_obj['type'] == 'T':
                    log.write("Receiving a transaction")

                    verify_msg = data_json_obj['time_stamp'] + data_json_obj[
                        'message']

                    verification = key.verify_signature(
                        data_json_obj['pub_key'], data_json_obj['signature'],
                        verify_msg)

                    if verification is True:
                        log.write("Transaction is valid")
                        tx = Transaction().from_json(data_json_obj)
                        transaction.add_transaction(tx)

                elif data_json_obj['type'] == 'N':
                    from node import node_controller
                    log.write("Receiving Node")

                    node_list = node.get_all()
                    received_ip = data_json_obj['ip_address']
                    sync_flag = False

                    for outer_list in node_list:
                        outer_list = str(outer_list)
                        if outer_list == received_ip:
                            sync_flag = True

                    if sync_flag is False:
                        node_controller.add_new_node(data_json_obj)

                        # # When received block, add to file database
                        # elif data_json_obj['type'] == 'B':
                        #     transaction.remove_all()
                        #     create_block(data_json_obj['block_id'], data)

            except:
                traceback.print_exc()
                break

    tcp_socket.close()
    receive_socket.close()
Ejemplo n.º 21
0
def admin_required(f):
    log.write('admin_required','admin_required')
    return permission_required(Permission.ADMINISTER)(f)
Ejemplo n.º 22
0
def set_my_node(set_my_node=True):
    if set_my_node:
        my_node = Node(my_ip_address.get_ip_address('en0'))
        node.add_node(my_node)
    log.write("Set my node")
Ejemplo n.º 23
0
def show_node_list():
    from app import node, log
    import logging
    for n in node.get_all():
        log.write(n, logging.DEBUG)
    main_menu()
Ejemplo n.º 24
0
def handle_sent():
    lines = []

    # Process current entries in file
    try:
        with open(files['outfile'], 'r') as f:
            log.write(log.NOTICE, 'outfile', 'Opening file')

            for line in f:
                parse = smsfile.parseline(line)

                # Handle message based on status
                if 'STATE' in parse and parse['STATE'] in states:

                    if parse['STATE'] == 'DONE':
                        try:
                            SentSMS.update_state(parse['ID'], 2)

                            log.write(log.NOTICE, 'outfile', 'Updating and ' \
                                      'removing message (id: %s; status: 2)' % 
                                      parse['ID'])
                        except:
                            lines.append(line)

                            log.write(log.NOTICE, 'outfile', 'Failed to ' \
                                      'update status and remove message ' \
                                      '(id: %s; status: 2)' % parse['ID'])

                    if parse['STATE'] == 'ERROR':
                        try:
                            SentSMS.update_state(parse['ID'], 3)

                            log.write(log.NOTICE, 'outfile', 'Updating ' \
                                      'status and removing message (id: %s; ' \
                                      'status: 3)'  % parse['ID'])
                        except:
                            lines.append(line)

                            log.write(log.NOTICE, 'outfile', 'Failed to ' \
                                      'update status and remove message ' \
                                      '(id: %s; status: 3)' % parse['ID'])

                else:
                    # State unexistant or unknown - simply write the line back
                    lines.append(line)
    except Exception as e:
        log.write(log.FAIL, 'outfile', 'Could not process file: %s' % (e))
    else:
        # Append new entries
        try:
            usms = SentSMS.get_unprocessed()

            log.write(log.NOTICE, 'outfile', 'Fetched %d messages' % 
                      len(usms))
        except:
            log.write(log.FAIL, 'outfile', 'Could not fetch unprocessed ' \
                      'messages from database')
        else:
            for sms in usms:
                sms.state = 1
                lines.append(smsfile.add(sms.phone, sms.text, sms.id))

                log.write(log.NOTICE, 'outfile', 'Adding message (phone: ' \
                          '%s; text: %s; id: %s)' % 
                          (sms.phone, sms.text, sms.id))
        try:
            with open(files['outfile'], 'w') as f:
                f.write(''.join(lines))

            log.write(log.NOTICE, 'outfile', 'Writing %d messages back to ' \
                      'file' % (len(lines)))

            session.commit()

            log.write(log.NOTICE, 'outfile', 'Comitting database changes')
        except:
            session.rollback()

            log.write(log.FAIL, 'outfile', 'Could not commit changes to ' \
                      'database')
        else:
            log.write(log.OK, 'outfile', 'Processed file')
Ejemplo n.º 25
0
def handle_recv():
    lines = []

    try:
        with open(files['infile'], 'r') as f:
            log.write(log.NOTICE, 'infile', 'Opening file')
            for line in f:
                data = smsfile.parseline(line)
                try:
                    sms = ReceivedSMS(data['PHONE'],
                                      data['TEXT'], data['TIME'])
                    session.add(sms)

                    log.write(log.NOTICE, 'infile', 'Adding message by %s ' \
                              'with text %s (timestamp: %s)' %
                              (data['PHONE'], data['TEXT'], data['TIME']))
                except:
                    lines.append(line)

                    log.write(log.FAIL, 'infile', 'Could not add ' \
                              'message(%s, %s, %s) to database' %
                              (data['PHONE'], data['TEXT'], data['TIME']))
    except Exception as e:
        log.write(log.FAIL, 'infile', 'Could not process file: %s' % (e))
    else:
        try:
            with open(files['infile'], 'w') as f:
                f.write(''.join(lines))

            log.write(log.NOTICE, 'infile', 'Writing %s messages back to ' \
                      'file' % (len(lines)))
            
            session.commit()

            log.write(log.NOTICE, 'infile', 'Comitting database changes')
        except:
            session.rollback()

            log.write(log.FAIL, 'infile', 'Could not commit changes to ' \
                      'database')
        else:
            log.write(log.OK, 'infile', 'Processed file')