def regenerate_key(key_id, k=None, save=False): if key_id is None or key_id not in keys_by_id: raise ResourceNotFound if keys_by_id[key_id].master or not keys_by_id[key_id].dynamic: raise FunctionFailed('Master and static keys can not be changed') key = keys_by_id[key_id] old_key = key.key key.set_key(gen_random_str() if k is None else k) keys[key.key] = keys.pop(old_key) key.set_modified(save) return key.key
def append_token(key_id, user=None): i = 0 while True: token = 'token:' + gen_random_str() if token not in tokens: break i += 1 if i > 3: return False tokens[token] = {'u': user, 'ki': key_id, 't': time.time()} logging.debug('{} added. user: {}, key id: {}'.format( token[:12], user, key_id)) return token
def add_api_key(key_id=None, save=False): if key_id is None: raise FunctionFailed if key_id in keys_by_id: raise ResourceAlreadyExists key_hash = gen_random_str() key = APIKey(key_hash, key_id) key.master = False key.dynamic = True key.set_prop('hosts_allow', '0.0.0.0/0', save) keys_by_id[key.key_id] = key keys[key.key] = key result = key.serialize() if key_id in keys_to_delete: keys_to_delete.remove(key_id) return result
def add_api_key(key_id=None, save=False): with key_lock: if key_id is None: raise FunctionFailed if key_id in keys_by_id: raise ResourceAlreadyExists key_value = gen_random_str(length=64) key = APIKey(key_value, key_id) key.master = False key.dynamic = True key.set_prop('hosts_allow', '0.0.0.0/0', save) keys_by_id[key.key_id] = key keys[key.key] = key result = key.serialize() if key_id in keys_to_delete: keys_to_delete.remove(key_id) for k, v in combined_keys_cache.items(): ckey = keys_by_id[v] if key_id in ckey.combined_from: ckey.need_recombine = True return result
def create_combined_key(key_ids=[]): with key_lock: _key_ids = [k for k in sorted(key_ids) if k in keys_by_id] if not _key_ids: raise ValueError(f'no such API keys: {key_ids}') _combined_id = ','.join(_key_ids) try: return combined_keys_cache[_combined_id] except KeyError: # setup combined key ckey_value = gen_random_str(length=64) ckey_id = f'comb:{"+".join(_key_ids)}' combined_key = APIKey(ckey_value, ckey_id) combined_key.master = False combined_key.dynamic = True combined_key.temporary = True combined_key.combined_from = _key_ids combined_key.need_recombine = True # register keys_by_id[ckey_id] = combined_key keys[ckey_value] = combined_key combined_keys_cache[_combined_id] = ckey_id return ckey_id