Beispiel #1
0
 def setValueOfType(self, entryPath, value):
     from main import config_types
     typ = self.getType(entryPath)
     if not typ or typ in [
             config_types.TYPE_STRING,
             config_types.TYPE_TEXT,
             config_types.TYPE_UNDEFINED,
     ]:
         self.setData(entryPath, strng.text_type(value))
     elif typ in [
             config_types.TYPE_BOOLEAN,
     ]:
         if strng.is_string(value):
             vl = strng.to_text(value).strip().lower() == 'true'
         else:
             vl = bool(value)
         self.setBool(entryPath, vl)
     elif typ in [
             config_types.TYPE_INTEGER,
             config_types.TYPE_POSITIVE_INTEGER,
             config_types.TYPE_NON_ZERO_POSITIVE_INTEGER,
             config_types.TYPE_PORT_NUMBER,
     ]:
         self.setInt(entryPath, int(value))
     elif typ in [
             config_types.TYPE_FOLDER_PATH,
             config_types.TYPE_FILE_PATH,
             config_types.TYPE_COMBO_BOX,
             config_types.TYPE_PASSWORD,
     ]:
         self.setString(entryPath, value)
     else:
         self.setData(entryPath, strng.text_type(value))
     return True
Beispiel #2
0
def register_key(key_id, key_object_or_string, label='', keys_folder=None):
    """
    """
    if key_id in known_keys():
        lg.warn('key %s already exists' % key_id)
        return None
    if not label:
        label = 'key%s' % utime.make_timestamp() 
    if strng.is_string(key_object_or_string):
        if _Debug:
            lg.out(_DebugLevel, 'my_keys.register_key %s from %d bytes openssh_input_string' % (
                key_id, len(key_object_or_string)))
        key_object = unserialize_key_to_object(key_object_or_string)
        if not key_object:
            lg.warn('invalid openssh string, unserialize_key_to_object() failed')
            return None
    else:
        if _Debug:
            lg.out(_DebugLevel, 'my_keys.register_key %s from object' % key_id)
        key_object = key_object_or_string
    known_keys()[key_id] = key_object
    if _Debug:
        lg.out(_DebugLevel, '    key %s added' % key_id)
    if not keys_folder:
        keys_folder = settings.KeyStoreDir()
    save_key(key_id, keys_folder=keys_folder)
    events.send('key-registered', data=dict(key_id=key_id, label=label, key_size=key_object.size(), ))
    return key_object
Beispiel #3
0
 def _on_packet_request_result(self, NewPacketOrPacketID, result):
     if _Debug:
         lg.args(_DebugLevel, packet=NewPacketOrPacketID, result=result)
     packet_id = None
     if strng.is_string(NewPacketOrPacketID):
         packet_id = NewPacketOrPacketID
     else:
         packet_id = getattr(NewPacketOrPacketID, 'PacketID', None)
     if not packet_id:
         raise Exception('packet ID is unknown from %r' % NewPacketOrPacketID)
     if packet_id not in self.block_requests:
         if _Debug:
             lg.args(_DebugLevel, block_requests=self.block_requests)
         raise Exception('packet ID not registered')
     if result == 'in queue':
         if self.block_requests[packet_id] is not None:
             raise Exception('packet is still in IO queue, but already unregistered')
         lg.warn('packet already in the request queue: %r' % packet_id)
         return
     if result in ['received', 'exist', ]:
         self.block_requests[packet_id] = True
         if result == 'exist':
             reactor.callLater(0, self.automat, 'data-received', (None, packet_id, ))  # @UndefinedVariable
         else:
             reactor.callLater(0, self.automat, 'data-received', (NewPacketOrPacketID, packet_id, ))  # @UndefinedVariable
     else:
         self.block_requests[packet_id] = False
         self.RequestFails.append(packet_id)
         reactor.callLater(0, self.automat, 'request-failed', packet_id)  # @UndefinedVariable
Beispiel #4
0
def on_message_failed(idurl, json_data, recipient_global_id, packet_id, response, info, result_defer=None, error=None):
    global _LastUserPingTime
    idurl = id_url.to_bin(idurl)
    lg.err('message %s failed sending to %s in %s because : %r' % (
        packet_id, recipient_global_id, response, error, ))
    if idurl in _LastUserPingTime:
        _LastUserPingTime[idurl] = 0
    if result_defer and not result_defer.called:
        err = Exception(response) if response else (error if not strng.is_string(error) else Exception(error))
        result_defer.errback(err)
Beispiel #5
0
def process(json_request):
    lg.out(12, 'filemanager_api.process %s' % json_request)
    if not driver.is_on('service_my_data'):
        return {'result': {
            "success": False,
            "error": "network [service_my_data] is not started: %s" % (
                driver.services().get('service_my_data', '!!! not found !!!'))}}
    mode = ''
    result = {}
    try:
        if strng.is_string(json_request):
            import json
            json_request = json.loads(json_request)
        mode = json_request['params']['mode']
        if mode == 'config':
            result = _config(json_request['params'])
        elif mode == 'stats':
            result = _stats(json_request['params'])
        elif mode == 'list':
            result = _list(json_request['params'])
        elif mode == 'listlocal':
            result = _list_local(json_request['params'])
        elif mode == 'listall':
            result = _list_all(json_request['params'])
        elif mode == 'upload':
            result = _upload(json_request['params'])
        elif mode == 'delete':
            result = _delete(json_request['params'])
        elif mode == 'deleteversion':
            result = _delete_version(json_request['params'])
        elif mode == 'download':
            result = _download(json_request['params'])
        elif mode == 'tasks':
            result = _list_active_tasks(json_request['params'])
        elif mode == 'packets':
            result = _list_in_out_packets(json_request['params'])
        elif mode == 'connections':
            result = _list_active_connections(json_request['params'])
        elif mode == 'streams':
            result = _list_active_streams(json_request['params'])
        elif mode == 'debuginfo':
            result = _debuginfo(json_request['params'])
        else:
            result = {"result": {"success": False,
                                 "error": 'filemanager method %s not found' % mode}}
    except Exception as exc:
        lg.exc()
        descr = str(sys.exc_info()[0].__name__) + ': ' + str(sys.exc_info()[1])
        result = {"result": {"success": False,
                             "error": descr}}
    # lg.out(4, '    ERROR unknown mode: %s' % mode)
    lg.out(20, '    %s' % pprint.pformat(result))
    return result
Beispiel #6
0
def is_idurl(value):
    """
    Return True if input is `ID_URL_FIELD` field or string in valid format.
    """
    if value in [None, 'None', '', b'None', b'', False, ]:
        return False
    if isinstance(value, ID_URL_FIELD):
        return True
    if not strng.is_string(value):
        return False
    v = strng.to_text(value)
    if not v.startswith('http') or not v.endswith('.xml') or v.count('://') != 1:
        return False
    return True
Beispiel #7
0
 def _on_packet_request_result(self, NewPacketOrPacketID, result):
     if self.block_requests is None:
         return
     if _Debug:
         lg.args(_DebugLevel, packet=NewPacketOrPacketID, result=result)
     packet_id = None
     if strng.is_string(NewPacketOrPacketID):
         packet_id = NewPacketOrPacketID
     else:
         packet_id = getattr(NewPacketOrPacketID, 'PacketID', None)
     if not packet_id:
         raise Exception('packet ID is unknown from %r' %
                         NewPacketOrPacketID)
     if packet_id not in self.block_requests:
         resp = global_id.NormalizeGlobalID(packet_id)
         for req_packet_id in self.block_requests:
             req = global_id.NormalizeGlobalID(req_packet_id)
             if resp['version'] == req['version'] and resp['path'] == req[
                     'path']:
                 if resp['key_alias'] == req['key_alias'] and resp[
                         'user'] == req['user']:
                     if id_url.is_the_same(resp['idurl'], req['idurl']):
                         packet_id = req_packet_id
                         lg.warn(
                             'found matching packet request %r for rotated idurl %r'
                             % (
                                 packet_id,
                                 resp['idurl'],
                             ))
                         break
     if packet_id not in self.block_requests:
         if _Debug:
             lg.args(_DebugLevel, block_requests=self.block_requests)
         raise Exception('packet ID not registered')
     if result == 'in queue':
         if self.block_requests[packet_id] is not None:
             raise Exception(
                 'packet is still in IO queue, but already unregistered')
         lg.warn('packet already in the request queue: %r' % packet_id)
         return
     if result in [
             'received',
             'exist',
     ]:
         self.block_requests[packet_id] = True
         if result == 'exist':
             # reactor.callLater(0, self.automat, 'data-received', (None, packet_id, ))  # @UndefinedVariable
             self.event('data-received', (
                 None,
                 packet_id,
             ))
         else:
             # reactor.callLater(0, self.automat, 'data-received', (NewPacketOrPacketID, packet_id, ))  # @UndefinedVariable
             self.event('data-received', (
                 NewPacketOrPacketID,
                 packet_id,
             ))
     else:
         self.block_requests[packet_id] = False
         self.RequestFails.append(packet_id)
         # reactor.callLater(0, self.automat, 'request-failed', packet_id)  # @UndefinedVariable
         self.event('request-failed', packet_id)
Beispiel #8
0
def register_key(key_id, key_object_or_string, label='', keys_folder=None):
    global _LatestLocalKeyID
    key_id = latest_key_id(key_id)
    if is_key_registered(key_id):
        lg.warn('key %s already registered' % key_id)
        return None
    if not keys_folder:
        keys_folder = settings.KeyStoreDir()
    if not label:
        label = 'key%s' % utime.make_timestamp()
    if strng.is_string(key_object_or_string):
        key_object_or_string = strng.to_bin(key_object_or_string)
        if _Debug:
            lg.out(
                _DebugLevel,
                'my_keys.register_key %r from %d bytes openssh_input_string' %
                (key_id, len(key_object_or_string)))
        key_object = unserialize_key_to_object(key_object_or_string)
        if not key_object:
            lg.warn(
                'invalid openssh string, unserialize_key_to_object() failed')
            return None
    else:
        if _Debug:
            lg.out(_DebugLevel, 'my_keys.register_key %r from object' % key_id)
        key_object = key_object_or_string
    known_local_key_id = local_keys_index().get(key_object.toPublicString())
    if known_local_key_id is not None:
        known_key_id = local_keys().get(known_local_key_id)
        if known_key_id is not None:
            known_key_id = latest_key_id(known_key_id)
            if known_key_id != key_id:
                raise Exception(
                    'must not register same key with local_key_id=%r twice with different key_id: %r ~ %r'
                    % (
                        known_local_key_id,
                        known_key_id,
                        key_id,
                    ))
    new_local_key_id = known_local_key_id
    if new_local_key_id is None:
        _LatestLocalKeyID += 1
        save_latest_local_key_id(keys_folder=keys_folder)
        new_local_key_id = _LatestLocalKeyID
    key_object.local_key_id = new_local_key_id
    known_keys()[key_id] = key_object
    if _Debug:
        lg.out(_DebugLevel, '    key %r registered' % key_id)
    save_key(key_id, keys_folder=keys_folder)
    events.send('key-registered',
                data=dict(
                    key_id=key_id,
                    label=label,
                    key_size=key_object.size(),
                ))
    listeners.push_snapshot('key',
                            snap_id=key_id,
                            data=make_key_info(
                                key_object=key_object,
                                key_id=key_id,
                                event='key-registered',
                                include_private=False,
                                include_local_id=True,
                                include_signature=True,
                                include_label=True,
                            ))
    return key_object