Beispiel #1
0
def create_volume(email, name, description, blocksize, **attrs):
    caller_user = _check_authenticated(attrs)

    # user must exist
    user = read_user(email)
    if user is None:
        raise Exception("No such user '%s'" % email)

    # a user can only create volumes for herself (admin can for anyone)
    if caller_user.owner_id != user.owner_id and not caller_user.is_admin:
        raise Exception("Caller cannot create Volumes for other users")

    # check quota for this user
    user_volume_ids = list_accessible_volumes(email,
                                              caller_user=caller_user,
                                              projection=['volume_id'])
    if len(user_volume_ids) > user.get_volume_quota():
        raise Exception("User '%s' has exceeded Volume quota %s" %
                        (email, user.get_volume_quota()))

    new_volume_key = Volume.Create(user,
                                   blocksize=blocksize,
                                   name=name,
                                   description=description,
                                   **attrs)
    if new_volume_key != None:
        # create succeed.  Make a root directory
        volume = new_volume_key.get()
        MSEntry.MakeRoot(user.owner_id, volume)
        return new_volume_key.get()

    else:
        raise Exception("Failed to create Volume")
Beispiel #2
0
    rc = verify_data(user.public_key, root_inode_nosig, root_inode_sig)
    if not rc:
        raise Exception("Root inode not signed by user '%s'" % (user.email))

    # finally, verify that the name is *not* numeric
    tmp = None
    try:
        tmp = int(volume_cert.name)
    except:
        pass

    if tmp is not None:
        raise Exception("Invalid volume name '%s'" % volume_cert.name)

    new_volume_key = Volume.Create(user, volume_cert)
    if new_volume_key is not None:

        volume = new_volume_key.get()

        # put the root inode
        MSEntry.MakeRoot(user.owner_id, volume, volume_cert.root)

        # put the cert bundle
        VolumeCertBundle.Put(volume.volume_id, cert_bundle_bin)

        return volume

    else:
        raise Exception("Failed to create Volume")