Source code for ucloud.core.auth._cfg

# -*- coding: utf-8 -*-

import hashlib
from collections import OrderedDict
from ucloud.core.typesystem import schema, fields, encoder


class CredentialSchema(schema.Schema):
    fields = {
        "public_key": fields.Str(required=True),
        "private_key": fields.Str(required=True),
    }


def verify_ac(private_key, params):
    """ calculate signature by private_key/public_key

    the keys can be found on `APIKey documentation <https://console.ucloud.cn/uapi/apikey>`__

    >>> verify_ac("my_private_key", {"foo": "bar"})
    '634edc1bb957c0d65e5ab5494cf3b7784fbc87af'

    >>> verify_ac("my_private_key", {"foo": "bar"})
    '634edc1bb957c0d65e5ab5494cf3b7784fbc87af'

    :param private_key: private key
    :param params:
    :return:
    """
    params = OrderedDict(sorted(params.items(), key=lambda item: item[0]))
    simplified = ""
    for key, value in params.items():
        simplified += str(key) + encoder.encode_value(value)
    simplified += private_key
    hash_new = hashlib.sha1()
    hash_new.update(simplified.encode("utf-8"))
    hash_value = hash_new.hexdigest()
    return hash_value


[docs]class Credential(object): """ credential is the object to store credential information the keys can be found on `APIKey documentation <https://console.ucloud.cn/uapi/apikey>`__ it can calculate signature for OpenAPI: >>> cred = Credential('my_public_key', 'my_private_key') >>> cred.verify_ac({"foo": "bar"}) 'd4411ab30953fb0bbcb1e7313081f05e4e91a394' :param public_key: :param private_key: """ PUBLIC_KEY_NAME = "PublicKey" def __init__(self, public_key, private_key, **kwargs): self.public_key = public_key self.private_key = private_key def verify_ac(self, args): args[Credential.PUBLIC_KEY_NAME] = self.public_key return verify_ac(self.private_key, args) @classmethod def from_dict(cls, d): parsed = CredentialSchema().dumps(d) return cls(**parsed) def to_dict(self): return {"public_key": self.public_key, "private_key": self.private_key}