def list_by_procinstid(db_host, db_user, db_passwd, db_name, tenant_id, instance_id): conn = torch.connect(db_host, db_user, db_passwd, db_name) sql = ("SELECT ActivityID " "FROM flowcraft_execution " "WHERE TenantID = %s AND ProcInstID = %s ") return torch.query_with_param(conn, sql, (tenant_id, instance_id))
def get(db_host, db_user, db_passwd, db_name, tenant_id, task_id): conn = torch.connect(db_host, db_user, db_passwd, db_name) sql = ("SELECT TaskID, Name, StartTime, EndTime, " "DeleteReason, Outcome " "FROM flowcraft_task " "WHERE TenantID = %s AND TaskID = %s ") return torch.query_with_param(conn, sql, (tenant_id, task_id))
def get_by_name(db_host, db_user, db_passwd, username): conn = torch.connect(db_host, db_user, db_passwd, 'hephaestus') sql = ("SELECT `id`, `name`, dominated, `status`, " "created, modified, last_login " "FROM gods " "WHERE name = '{}'").format(username) return torch.query(conn, sql)
def get_tenant_db(db_host, db_user, db_passwd, tenant_id): conn = torch.connect(db_host, db_user, db_passwd, 'yeeoffice-management') sql = ("SELECT DISTINCT map.DatabaseName AS tenant_db " "FROM merchant m " "INNER JOIN merchantdbmapping map " "ON m.MerchantID = map.MerchantID " "WHERE m.MerchantKey = {}".format(tenant_id)) return torch.query(conn, sql)
def test(host, user, passwd, db='mysql'): result = 0 try: conn = torch.connect(host, user, passwd, db) conn.close() except Exception as e: result = 1 logger.error("{} occured".format(type(e).__name__), exc_info=True) return result
def find_duplicate(host, user, passwd, env, env_read_host, env_write_host): conn = torch.connect(host, user, passwd, 'hephaestus') sql = ("SELECT `name`, read_host, user, " "CBC_DECRYPT(guid, secret, vector) AS passwd " "FROM islands " "WHERE `name` = '{}' " "OR read_host = '{}' " "OR write_host = '{}' ").format(env, env_read_host, env_write_host) return torch.query(conn, sql)
def get( db_host, db_user, db_passwd, db_name, tenant_id, instance_id ): conn = torch.connect(db_host, db_user, db_passwd, db_name) sql = ( "SELECT ProcInstID, `Name`, Created, Modified, `Status`, " "`Comment`" "FROM flowcraft_procinst " "WHERE TenantID = %s AND ProcInstID = %s " ) return torch.query_with_param(conn, sql, (tenant_id, instance_id))
def create(db_host, db_user, db_passwd, username, passwd, permission_list): conn = torch.connect(db_host, db_user, db_passwd, 'hephaestus') sql = ("INSERT INTO gods(`name`, `secret`) " "VALUES(%s, SHA2(%s, 256))") result = torch.execute(conn, sql, (username, passwd)) # 添加用户 if result == 0: new_user = get_by_name(db_host, db_user, db_passwd, username) if new_user and new_user[0]['id']: # 添加用户权限 pl = [] user_id = new_user[0]['id'] for p in permission_list: if p['permission'] != 0: pl.append((p['env'], user_id, p['permission'])) conn = torch.connect(db_host, db_user, db_passwd, 'hephaestus') sql = ("INSERT INTO permission(island_name, god_id, access_level) " "VALUES(%s, %s, %s)") return torch.execute_many(conn, sql, pl) else: return 1 else: return 1
def get_detail(db_host, db_user, db_passwd, tenant_id): conn = torch.connect(db_host, db_user, db_passwd, 'yeeoffice-management') sql = ("SELECT " "e.TenantID, m.MerchantName, m.Created, " "DATE_FORMAT(e.ExpireDate, '%Y-%m-%d') AS ExpireDate, " "(SELECT DISTINCT map.DatabaseName AS tenant_db " "FROM merchantdbmapping map " "WHERE map.MerchantID = m.MerchantID " ") AS tenant_db " "FROM yeeoffice_enterprise e " "INNER JOIN merchant m ON e.TenantID = m.MerchantKey " "WHERE TenantID = {}".format(tenant_id)) return torch.query(conn, sql)
def create(host, user, passwd, env, env_read_host, env_write_host, env_user, env_passwd): conn = torch.connect(host, user, passwd, 'hephaestus') guid = str(uuid.uuid4()) vector = secrets.token_bytes(16) sql = ("INSERT INTO islands" "(name, read_host, write_host, user, secret, guid, vector) " "VALUES(%s, %s, %s, %s, " "CBC_ENCRYPT(%s, %s, _binary %s), " "%s, _binary %s)") return torch.execute(conn, sql, (env, env_read_host, env_write_host, env_user, guid, env_passwd, vector, guid, vector))
def list(db_host, db_user, db_passwd, curr_user_id=None): conn = torch.connect(db_host, db_user, db_passwd, 'hephaestus') if curr_user_id: sql = ("SELECT `name` FROM islands i " "WHERE EXISTS(SELECT 1 " "FROM permission p " "WHERE i.name = p.island_name " "AND p.god_id = {} " "AND p.access_level >= 1) " "ORDER BY Created").format(curr_user_id) else: sql = "SELECT `name` FROM islands ORDER BY Created" return torch.query(conn, sql)
def list_root_instances( db_host, db_user, db_passwd, db_name, tenant_id, applicationid ): conn = torch.connect(db_host, db_user, db_passwd, db_name) sql = ( "SELECT ProcInstID, `Name`, Created, Modified, `Status`, " "`Comment`" "FROM flowcraft_procinst " "WHERE TenantID = %s AND ApplicationID = %s " "AND ParentInstID = 0 " "ORDER BY Created DESC" ) return torch.query_with_param(conn, sql, (tenant_id, applicationid))
def list_by_procinstid( db_host, db_user, db_passwd, db_name, tenant_id, procinstid ): conn = torch.connect(db_host, db_user, db_passwd, db_name) sql = ( "SELECT ActivityID, PrevAcitivtyID AS PrevActivityID, `Name`, " "ExecutionID, ActivityDefID, ProcDefID, CallProcInstID, TaskID, " "ActivityType, `Status`, Created, Modified " "FROM flowcraft_activity " "WHERE TenantID = %s AND ProcInstID = %s " "ORDER BY ActivityID, Created" ) return torch.query_with_param(conn, sql, (tenant_id, procinstid))
def update(db_host, db_user, db_passwd, env, read_host, write_host, user, passwd): conn = torch.connect(db_host, db_user, db_passwd, 'hephaestus') guid = str(uuid.uuid4()) vector = secrets.token_bytes(16) sql = ("UPDATE islands " "SET read_host = %s, " "write_host = %s, " "user = %s, " "secret = CBC_ENCRYPT(%s, %s, _binary %s), " "guid = %s, " "vector = _binary %s " "WHERE `name` = %s") return torch.execute(conn, sql, (read_host if read_host else None, write_host, user, guid, passwd, vector, guid, vector, env))
def update_by_user(db_host, db_user, db_passwd, user_permisson, user_id): result = 0 for up in user_permisson: conn = torch.connect(db_host, db_user, db_passwd, 'hephaestus') if up['permission']: sql = ("INSERT INTO permission VALUES(" "%s, %s, %s, NOW()" ") ON DUPLICATE KEY UPDATE " "access_level = %s") params = (up['env'], user_id, up['permission'], up['permission']) else: sql = ("DELETE FROM permission " "WHERE island_name = %s AND god_id = %s") params = (up['env'], user_id) result += torch.execute(conn, sql, params) return result
def create(host, user, passwd, module, operator, operation, result): """ Operation: 1: Create 2: Modify 3: Query 4: Delete Result: 0: Succeeded 1: Failed """ conn = torch.connect(host, user, passwd, 'hephaestus') list_sql = list() list_sql.append( "INSERT INTO mnemosyne(module, operator, operation, result) " "VALUES('{}', {}, {}, {})".format(module, operator, operation, result)) torch.execute_list(conn, list_sql)
def get(host, user, passwd, env, curr_user_id=None): conn = torch.connect(host, user, passwd, 'hephaestus') if curr_user_id: sql = ("SELECT i.`name`, i.read_host, i.user, " "CBC_DECRYPT(i.guid, i.secret, i.vector) AS passwd " "FROM islands i " "WHERE `name` = '{}' " "AND EXISTS(SELECT 1 " "FROM permission p " "WHERE i.name = p.island_name " "AND p.god_id = {} " "AND p.access_level >= 1) ").format(env, curr_user_id) else: sql = ("SELECT `name`, read_host, user, " "write_host, " "CBC_DECRYPT(guid, secret, vector) AS passwd " "FROM islands " "WHERE `name` = '{}' ").format(env) return torch.query(conn, sql)
def list(db_host, db_user, db_passwd): conn = torch.connect(db_host, db_user, db_passwd, 'yeeoffice-management') sql = ("SELECT MerchantKey AS id, MerchantName AS `name` " "FROM merchant " "ORDER BY Created DESC") return torch.query(conn, sql)
def delete(db_host, db_user, db_passwd, env): conn = torch.connect(db_host, db_user, db_passwd, 'hephaestus') sql = "DELETE FROM islands WHERE `name` = %s" return torch.execute(conn, sql, (env, ))
def update_name(db_host, db_user, db_passwd, env, new_env): conn = torch.connect(db_host, db_user, db_passwd, 'hephaestus') sql = "UPDATE islands SET `name` = %s WHERE `name` = %s" return torch.execute(conn, sql, (new_env, env))
def update_name(db_host, db_user, db_passwd, user_id, new_name): conn = torch.connect(db_host, db_user, db_passwd, 'hephaestus') sql = ("UPDATE gods SET name = %s " "WHERE id = %s") return torch.execute(conn, sql, (new_name, user_id))
def update_passwd(db_host, db_user, db_passwd, user_id, passwd): conn = torch.connect(db_host, db_user, db_passwd, 'hephaestus') sql = ("UPDATE gods SET secret = SHA2(%s, 256) " "WHERE id = %s") return torch.execute(conn, sql, (passwd, user_id))
def delete(db_host, db_user, db_passwd, user_id): conn = torch.connect(db_host, db_user, db_passwd, 'hephaestus') sql = ("DELETE FROM gods WHERE id = %s") return torch.execute(conn, sql, (user_id, ))
def update_user_status(db_host, db_user, db_passwd, user_status, user_id): conn = torch.connect(db_host, db_user, db_passwd, 'hephaestus') sql = ("UPDATE gods SET `status` = %s " "WHERE id = %s") return torch.execute(conn, sql, (user_status, user_id))
def list(db_host, db_user, db_passwd): conn = torch.connect(db_host, db_user, db_passwd, 'hephaestus') sql = ("SELECT id, `name`, dominated FROM gods " "WHERE dominated = FALSE") return torch.query(conn, sql)
def login(db_host, db_user, db_passwd, user, passwd): conn = torch.connect(db_host, db_user, db_passwd, 'hephaestus') sql = ("CALL login('{}', '{}')").format(user, passwd) result, resultset = torch.call_proc_with_resultset(conn, sql) return resultset[0] if resultset else None
def find_duplicate(db_host, db_user, db_passwd, username): conn = torch.connect(db_host, db_user, db_passwd, 'hephaestus') sql = "SELECT `name` FROM gods WHERE `name` = '{}'".format(username) return torch.query(conn, sql)
def get_by_user(db_host, db_user, db_passwd, user_id): conn = torch.connect(db_host, db_user, db_passwd, 'hephaestus') sql = ("SELECT island_name, access_level " "FROM permission " "WHERE god_id = {}").format(user_id) return torch.query(conn, sql)
def reset_option(): global special special = input('欢迎回到您的世界!\n') print(datetime.now().strftime('%Y-%m-%d %H:%M:%S')) print('准备点燃火山...') host = input('请指定火山位置(默认为本地): ') or 'localhost' user = input('以谁的名义点燃? ') passwd = getpass.getpass('出示您的密令: ') lighted, message = torch.light_up(host, user, passwd) if lighted: print('尊者! 火山已为您点燃!') conn = torch.connect( host, user, passwd, 'information_schema' ) if torch.seek_hera(conn): special = None thread_reset_option = threading.Thread( target=reset_option ) thread_reset_option.daemon = True thread_reset_option.start() thread_reset_option.join(6) # 等待用户输入(10秒) if special == 'Hera': while True: passwd1 = getpass.getpass('请重置主宰的密令: ') passwd2 = getpass.getpass('请再次确认您的密令: ') if passwd1 == passwd2: try: