コード例 #1
0
def pollAndExecute():
    global makeTree, txRun, log
    # print(time.time(), x)
    tot = mc.streamInfo(api)
    if tot == txRun:
        return
    else:
        makeTree = 1
        txs = mc.getItems(api, tot - txRun)
        # latestTx = txs[-1]['txid']
        for i in txs:
            item = i['data']['json']
            cur.execute("SELECT pubkey from icreds WHERE uid=%s",
                        (item['id'], ))
            pubkey = bytes.fromhex(cur.fetchone()[0]).decode('utf-8')
            # print(pubkey)
            orig = SHA256.new(item['data'].encode())
            if len(item['data']) < 100:
                abridge = item['data']
            else:
                abridge = item['data'][:90] + "....." + item['data'][-20:]
            if pkcs.new(RSA.importKey(pubkey)).verify(
                    orig, bytes.fromhex(item['sig'])):
                if item['type'] == 'gradeinsert':
                    t = item['data'].split('||')
                    std, courses, grades, [func] = [j.split(',') for j in t]
                    try:
                        cur.callproc(func, (
                            item['id'],
                            std,
                            courses,
                            grades,
                        ))
                        res = cur.fetchone()[0]
                        err = res[1:]
                    except psycopg2.Error as e:
                        err = e.diag.message_primary
                        log[item['id']].append(abridge +
                                               "  (Update)  \u2718 " + err)
                        conn.rollback()
                    else:
                        if res[0] == '0':
                            log[item['id']].append(abridge +
                                                   "  (Insert)  \u2718 " + err)
                            with open("logs.txt", 'a') as f:
                                f.write(i['txid'] + ' gradeinsert\n')
                        else:
                            log[item['id']].append(abridge +
                                                   "  (Insert)  \u2714")
                        # txRun = txRun + 1

                    finally:
                        cur.execute(stmt, (i['txid'], ))
                        conn.commit()
                        txRun = txRun + 1
                        print('INSERT', i['txid'])
                elif item['type'] == 'gradeupdate':
                    uid, course, newGrade, func = item['data'].split(',')
                    try:
                        cur.callproc(func, (
                            item['id'],
                            uid,
                            course,
                            newGrade,
                        ))
                        res = cur.fetchone()[0]
                        err = res[1:]
                    except psycopg2.Error as e:
                        err = e.diag.message_primary
                        log[item['id']].append(abridge +
                                               "  (Update)  \u2718 " + err)
                        conn.rollback()
                    else:
                        if res[0] == '0':
                            log[item['id']].append(abridge +
                                                   "  (Update)  \u2718 " + err)
                            with open("logs.txt", 'a') as f:
                                f.write(i['txid'] + ' gradeupdate\n')
                        else:
                            log[item['id']].append(abridge +
                                                   "  (Update)  \u2714")
                    finally:
                        cur.execute(stmt, (i['txid'], ))
                        conn.commit()
                        txRun = txRun + 1
                        print('UPDATE', i['txid'])
                elif item['type'] == 'userenroll':
                    t = item['data'].split(',')
                    salt = secrets.token_hex(32)
                    phash = hashlib.pbkdf2_hmac('sha256', salt.encode(),
                                                t[1].encode(), 100000).hex()
                    try:
                        cur.callproc(t[3], (
                            t[0],
                            salt,
                            phash,
                            t[2],
                        ))
                        res = cur.fetchone()[0]
                        err = res[1:]
                    except psycopg2.Error as e:
                        err = e.diag.message_primary
                        log[item['id']].append(abridge +
                                               "  (Enroll)  \u2718 " + err)
                        conn.rollback()
                    else:
                        if res[0] == '0':
                            log[item['id']].append(abridge +
                                                   "  (Enroll)  \u2718 " + err)
                            with open("logs.txt", 'a') as f:
                                f.write(i['txid'] + ' userenroll\n')
                        else:
                            log[item['id']].append(abridge +
                                                   "  (Enroll)  \u2714")
                        # txRun = txRun + 1
                    finally:
                        cur.execute(stmt, (i['txid'], ))
                        conn.commit()
                        txRun = txRun + 1
                        print('ENROLL', i['txid'])

                elif item['type'] == 'updatepubkey':
                    t = item['data'].split(',')
                    try:
                        cur.callproc(t[2], (
                            t[0],
                            t[1],
                        ))
                        res = cur.fetchone()[0]
                        err = res[1:]
                    except psycopg2.Error as e:
                        err = e.diag.message_primary
                        log[item['id']].append(abridge + "  (UpK)  \u2718 " +
                                               err)
                        conn.rollback()
                    else:
                        if res[0] == '0':
                            log[item['id']].append(abridge +
                                                   "  (UpK)  \u2718 " + err)
                            with open("logs.txt", 'a') as f:
                                f.write(i['txid'] + ' updatepubkey\n')
                        else:
                            log[item['id']].append(abridge + "  (UpK)  \u2714")
                        # txRun = txRun + 1
                    finally:
                        cur.execute(stmt, (i['txid'], ))
                        conn.commit()
                        txRun = txRun + 1
                        print('PUBKEY', i['txid'])

                elif item['type'] == 'updatesqlpr':
                    try:
                        cur.callproc(item['type'], (item['data'], ))
                        res = cur.fetchone()[0]
                        err = res[1:]
                    except psycopg2.Error as e:
                        err = e.diag.message_primary
                        log[item['id']].append(abridge + "  (SQLF)  \u2718 " +
                                               err)
                        conn.rollback()
                    else:
                        if res[0] == '0':
                            log[item['id']].append(abridge +
                                                   "  (SQLF) \u2718 " + err)
                            with open("logs.txt", 'a') as f:
                                f.write(i['txid'] + ' updatesqlpr\n')
                        else:
                            log[item['id']].append(abridge + "  (SQLF) \u2714")
                        # txRun = txRun + 1
                    finally:
                        cur.execute(stmt, (i['txid'], ))
                        conn.commit()
                        txRun = txRun + 1
                        print('SQL Proc', i['txid'])

                elif item['type'] == 'instrcourses':
                    t = item['data'].split('||')
                    try:
                        cur.callproc(t[2], (
                            [t[0] for i in t[1].split(',')],
                            [i.strip() for i in t[1].split(',')],
                        ))
                        res = cur.fetchone()[0]
                        err = res[1:]
                    except psycopg2.Error as e:
                        err = e.diag.message_primary
                        log[item['id']].append(abridge +
                                               "  (I-Course)  \u2718 " + err)
                        conn.rollback()
                    else:
                        if res[0] == '0':
                            log[item['id']].append(abridge +
                                                   "  (I-Course)  \u2718 " +
                                                   err)
                            with open("logs.txt", 'a') as f:
                                f.write(i['txid'] + ' instrcourses\n')
                        else:
                            log[item['id']].append(abridge +
                                                   "  (I-Course)  \u2714")
                        # txRun = txRun + 1
                    finally:
                        cur.execute(stmt, (i['txid'], ))
                        conn.commit()
                        txRun = txRun + 1
                        print('INSTR COURSES', i['txid'])
                else:  # Execute SQL functions
                    t = item['data'].split('||')
                    funcname = t[0]
                    params = t[1].split()
                    try:
                        if len(params) == 0:
                            cur.callproc(item['type'])
                        elif len(params) == 1:
                            cur.callproc(item['type'],
                                         (ast.literal_eval(params[0]), ))
                        else:
                            cur.callproc(item['type'],
                                         tuple(map(ast.literal_eval, params)))
                        res = cur.fetchone()[0]
                        # err = res[1:]
                    except psycopg2.Error as e:
                        err = e.diag.message_primary
                        log[item['id']].append(abridge +
                                               "  (Exec-Func)  \u2718 " + err)
                        conn.rollback()
                    else:
                        log[item['id']].append(abridge + "  (Exec-Func)  : " +
                                               str(res))
                    finally:
                        cur.execute(stmt, (i['txid'], ))
                        conn.commit()
                        txRun = txRun + 1
                        print('EXEC FUNC', i['txid'])
            else:
                with open("logs.txt", 'a') as f:
                    f.write(i['txid'] + ' Signature Mismatch')
コード例 #2
0
from Crypto.Hash import SHA256
from collections import defaultdict
import threading, os, secrets, time
import select, socket, requests
from anytree import Node, RenderTree, LevelOrderIter
from itertools import product

conn = psycopg2.connect(database="rraj",
                        user="******",
                        password="******",
                        host="127.0.0.1",
                        port="5432")
cur = conn.cursor()
api = mc.getApi()

txRun = mc.streamInfo(api)
stmt = "UPDATE txid SET tx=%s"

POOL_TIME = 5
log = defaultdict(list)

makeTree = 1  ########################################################################################


def pollAndExecute():
    global makeTree, txRun, log
    # print(time.time(), x)
    tot = mc.streamInfo(api)
    if tot == txRun:
        return
    else: