Exemplo n.º 1
0
        def _create_folder_user(v_username):
            """ Handles steps needed for the creation of "/folder-user{}".
            """
            # integer is used as initial "user-id" to be assigned to any newly
            # created users; every new user will get the last used user-id +1;
            # see further/usage of macro for details;
            # each new creation can become "slow" due to reading all the ids;
            # for non-example case, this must be done in an efficient!
            init_user_id = 100

            def _get_unused_user_id():
                """ Return "free" (hopefully) user-id that can be used for
                    new user in the "user-storage.yang" configuration.
                """
                cursor = maapi.init_cursor(maapi_socket, helper.th, USER_PATH)
                keys = maapi.get_next(cursor)

                last_user_id = init_user_id
                while keys:
                    last_user_id = int(keys[0])
                    keys = maapi.get_next(cursor)
                maapi.destroy_cursor(cursor)
                return last_user_id + 1

            new_user_id = _get_unused_user_id()
            # new table record in /user-storage/user{}
            maapi.create(maapi_socket, helper.th, kp_user(new_user_id))
            # and username in "/user-storage/user{}/username"
            maapi.set_elem(maapi_socket, helper.th, v_username,
                           kp_user(new_user_id) + '/username')
            return confd.CONFD_OK
Exemplo n.º 2
0
    def cb_set_elem(self, tctx, kp, newval):
        helper = TransformDataHelper(tctx.th)

        v_user_id = helper.get_user_id_value(kp[-2][0])

        leaf_tag = kp[0].tag
        if ns_folders.folders_auth_key == leaf_tag:
            helper.set_auth_type(v_user_id, ns_storage.storage_at_key)
            maapi.set_elem(maapi_socket, helper.th, newval,
                           kp_auth_key(v_user_id))
        elif ns_folders.folders_auth_password == leaf_tag:
            helper.set_auth_type(v_user_id, ns_storage.storage_at_password)
            maapi.set_elem(maapi_socket, helper.th, newval,
                           kp_auth_password(v_user_id))
        else:
            raise NotImplementedError
        return confd.CONFD_OK
Exemplo n.º 3
0
 def _update_content_type(user_id_v, folder_id_v, content_v):
     """ Add the specific content-type to the low-level bitmask.
     """
     path = kp_content_type(user_id_v, folder_id_v)
     bit_to_add = ct_enum_to_bits[int(content_v)]
     # /folder-user{bob}/managed-folder{myhome}/content-type{archive}
     v_bits_set = optional_get_elem(
         maapi_socket, helper.th,
         kp_content_type(user_id_v, folder_id_v))
     if v_bits_set is not None:
         bits_set = int(v_bits_set)
         if not bool(bits_set & bit_to_add):
             new_bitmask = confd.Value(bits_set + bit_to_add,
                                       confd.C_BIT32)
             maapi.set_elem(maapi_socket, helper.th, new_bitmask, path)
     else:
         new_bitmask = confd.Value(bit_to_add, confd.C_BIT32)
         maapi.set_elem(maapi_socket, helper.th, new_bitmask, path)
     return confd.CONFD_OK
Exemplo n.º 4
0
        def _remove_content_type(user_id_v, folder_id_v, content_v):
            """ Remove specific content-type from low-level bitmask.
            """
            path = kp_content_type(user_id_v, folder_id_v)
            bit_to_remove = ct_enum_to_bits[int(content_v)]

            # /folder-user{bob}/managed-folder{myhome}/content-type{archive}
            v_bits_set = optional_get_elem(
                maapi_socket, helper.th,
                kp_content_type(user_id_v, folder_id_v))
            if v_bits_set is not None:
                bits_set = int(v_bits_set)
                if bool(bits_set & bit_to_remove):
                    if bits_set == bit_to_remove:
                        maapi.delete(maapi_socket, helper.th, path)
                    else:
                        new_bitmask = confd.Value(bits_set - bit_to_remove,
                                                  confd.C_BIT32)
                        maapi.set_elem(maapi_socket, helper.th, new_bitmask,
                                       path)
Exemplo n.º 5
0
        def _create_managed_folder(user_id_v, folder_id_v):
            """ Handle all steps needed for creation of
                "/folder-user{}/managed-folder{}" record.
            """
            v_storage_id = concat_storage_id_value(user_id_v, folder_id_v)

            paths_to_create = [
                kp_storage(v_storage_id),
                kp_ownership(user_id_v, v_storage_id)
            ]

            for path in paths_to_create:
                maapi.create(maapi_socket, helper.th, path)

            # + set an artificial mount-point that is not shown in high-level
            # YANG; For example case here, use a string prefix:
            #   "/mnt/user-id/storage-id".
            mountpoint_str = '/mnt/user-storages/{0}/{1}'.format(
                user_id_v, folder_id_v)
            val = confd.Value(mountpoint_str, confd.C_BUF)
            maapi.set_elem(maapi_socket, helper.th, val,
                           kp_storage(v_storage_id) + '/mountpoint')

            return confd.CONFD_OK
Exemplo n.º 6
0
 def set_auth_type(self, v_user_id, tag):
     """ Set user's low level authentication type to a specific value.
     """
     val = confd.Value(tag, confd.C_ENUM_VALUE)
     maapi.set_elem(maapi_socket, self.th, val, kp_auth_type(v_user_id))