def load_credentials_list(): credentials_list = os.listdir(credentials_path) credentials_list.sort() if len(credentials_list) <= 0 : return None group_dic = {} max_count = 0 last_group_name = util.extract_grouping_name(credentials_list[-1]) for cre in credentials_list: group_name = util.extract_grouping_name(cre) name_count = count_alphabet(group_name) if max_count < name_count: max_count = name_count group_dic[group_name] = cre rec_list = [] with open('./recover_list.txt') as f: for line in f: rec_list.append(line.strip()) group_alphabet = 'a' while True: recover_group(group_alphabet, max_count, group_dic, rec_list) if group_alphabet == last_group_name[0]: break group_alphabet = chr(ord(group_alphabet)+1)
def make_storage(id): grouping_name = "" group_info = None cre_obj = None for g_info in datas.credentials_list: if g_info.get_usable_state() == datas.GroupInfo.STATE_DISABLE_GROUP: for cre_file in g_info.credentials_list: if cre_file.get_state() == datas.CredentialsInfo.STATE_RECOVERY_WAIT: group_info = g_info grouping_name = cre_file.get_group_name() cre_obj = cre_file break if group_info != None: break if group_info == None: end_file_name = util.get_end_credentials_name() if end_file_name == None: grouping_name = "a0" else: end_grouping_name = util.extract_grouping_name(end_file_name) if end_grouping_name[-1] != "2": end_grouping_name = end_grouping_name[:-1] + "2" grouping_name = util.make_grouping_name(end_grouping_name) group_info = datas.GroupInfo(grouping_name[:-1]) cre_obj = group_info.credentials_list[0] datas.credentials_list.append(group_info) file_name = util.make_credentials_name(id, grouping_name) credential_path = os.path.join(datas.credentials_path, file_name) datas.credential_dic[id] = file_name return oauth2client.file.Storage(credential_path), group_info, cre_obj
def recover(): while True: time.sleep(5) lines = [] with open('./recover_list.txt', 'r') as f: lines = f.readlines() if len(lines) <= 0: continue print('recovering start...') credentials = lines[0].strip() group_name = util.extract_grouping_name(credentials) group_alphabet = group_name[:-1] group_info = None for g in datas.credentials_list: if group_alphabet == g.get_group_alphabet(): group_info = g break origin_cre_info = None recover_cre_info = None if group_info: for cre in group_info.credentials_list: print(cre.get_credentials_name()) if cre.get_state() == datas.CredentialsInfo.STATE_USABLE: origin_cre_info = cre if cre.get_credentials_name() == credentials: recover_cre_info = cre if (origin_cre_info == None) or (recover_cre_info == None): continue store = credentials_mgr.get_storage(origin_cre_info.get_user_id()) service_o = credentials_mgr.get_service(store) store = credentials_mgr.get_storage(recover_cre_info.get_user_id()) service_r = credentials_mgr.get_service(store) all_origin_files = credentials_mgr.retrieve_all_files(service_o) recover_files = credentials_mgr.retrieve_all_files(service_r) origin_jigsaw_folder_id = '' for file in all_origin_files: if file['title'] == 'jigsaw': origin_jigsaw_folder_id = file['id'] break origin_children_folder_dic = credentials_mgr.get_children_folder(all_origin_files, origin_jigsaw_folder_id) recover_jigsaw_folder_info = None for file in recover_files: if file['title'] == 'jigsaw': recover_jigsaw_folder_info = file break if recover_jigsaw_folder_info == None: recover_jigsaw_folder_info = credentials_mgr.create_public_folder(service_r, 'jigsaw') recover_children_folder_dic = {} for folder_name in origin_children_folder_dic.values(): folder_info = credentials_mgr.create_public_folder(service_r, folder_name, recover_jigsaw_folder_info['id']) recover_children_folder_dic[folder_info['title']] = folder_info['id'] for file in all_origin_files: parent_folder_id = file['parents'][0]['id'] if parent_folder_id in origin_children_folder_dic: folder_name = origin_children_folder_dic[parent_folder_id] file_name = folder_name + '_' + file['title'] file_path_name = './recover_files/'+ file_name #download credentials_mgr.download_file(service_o, file['id'],file_path_name ) #upload credentials_mgr.upload_file(service_r, recover_children_folder_dic[folder_name], file_name, file['mimeType'], file_path_name) recover_cre_info.set_usable_state() group_info.compute_group_state() lines.pop(0) with open('./recover_list.txt', 'w') as f: f.write('') for str in lines: f.write(str) git_manager.recover_add()
def credentials_delete(): try: id = request.args.get('id', None) if id == None: id = 'anyone' store = credentials_mgr.get_storage(id) if store == None: return 'credentials not exist' credentials = store.get() if credentials == None: return 'already revoked' credentials.revoke(httplib2.Http()) except Exception as e: return 'revoke fail : ' + e try: file_name = store._filename.split('/')[-1] group_name = util.extract_grouping_name(file_name) group_alphabet = group_name[:-1] group_info = None for g_info in datas.credentials_list: if g_info.group_alphabet_ == group_alphabet: group_info = g_info if group_info == None: return 'revoked.' for cre in group_info.credentials_list: if cre.get_group_name() == group_name: cre.set_recovery_wait_state() cre.set_id_credentials_name('','') group_info.compute_group_state() end_group_info = datas.credentials_list[-1] if group_alphabet == end_group_info.group_alphabet_: state = datas.CredentialsInfo.STATE_RECOVERY_WAIT for cre in end_group_info.credentials_list: if cre.get_state() == datas.CredentialsInfo.STATE_USABLE: state = cre.get_state() break if state != datas.CredentialsInfo.STATE_USABLE: for cre in end_group_info.credentials_list: try: os.remove(datas.credentials_path + cre.get_credentials_name()) except: pass datas.credentials_list.pop() datas.credential_dic.pop(id) except Exception as e: print(e) return 'revoked..' return 'revoked'