¡@

Home 

OpenStack Study: password.py

OpenStack Index

**** CubicPower OpenStack Study ****

def extract_password(instance):

    result = ''

    sys_meta = utils.instance_sys_meta(instance)

    for key in sorted(sys_meta.keys()):

        if key.startswith('password_'):

            result += sys_meta[key]

    return result or None

**** CubicPower OpenStack Study ****

def convert_password(context, password):

    """Stores password as system_metadata items.

    Password is stored with the keys 'password_0' -> 'password_3'.

    """

    password = password or ''

    meta = {}

    for i in xrange(CHUNKS):

        meta['password_%d' % i] = password[:CHUNK_LENGTH]

        password = password[CHUNK_LENGTH:]

    return meta

**** CubicPower OpenStack Study ****

def handle_password(req, meta_data):

    ctxt = context.get_admin_context()

    if req.method == 'GET':

        return meta_data.password

    elif req.method == 'POST':

        # NOTE(vish): The conflict will only happen once the metadata cache

        #             updates, but it isn't a huge issue if it can be set for

        #             a short window.

        if meta_data.password:

            raise exc.HTTPConflict()

        if (req.content_length > MAX_SIZE or len(req.body) > MAX_SIZE):

            msg = _("Request is too large.")

            raise exc.HTTPBadRequest(explanation=msg)

        conductor_api = conductor.API()

        instance = conductor_api.instance_get_by_uuid(ctxt, meta_data.uuid)

        sys_meta = utils.instance_sys_meta(instance)

        sys_meta.update(convert_password(ctxt, req.body))

        conductor_api.instance_update(ctxt, meta_data.uuid,

                                      system_metadata=sys_meta)

    else:

        raise exc.HTTPBadRequest()