mirror of
				https://github.com/OpenKMIP/PyKMIP.git
				synced 2025-11-03 21:16:30 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			224 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			224 lines
		
	
	
		
			7.0 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
# Copyright (c) 2017 Pure Storage, Inc. All Rights Reserved.
 | 
						|
# All Rights Reserved.
 | 
						|
#
 | 
						|
# Licensed under the Apache License, Version 2.0 (the "License"); you may
 | 
						|
# not use this file except in compliance with the License. You may obtain
 | 
						|
# a copy of the License at
 | 
						|
#
 | 
						|
#    http://www.apache.org/licenses/LICENSE-2.0
 | 
						|
#
 | 
						|
# Unless required by applicable law or agreed to in writing, software
 | 
						|
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 | 
						|
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 | 
						|
# License for the specific language governing permissions and limitations
 | 
						|
# under the License.
 | 
						|
 | 
						|
import calendar
 | 
						|
import logging
 | 
						|
import sys
 | 
						|
import time
 | 
						|
 | 
						|
from kmip.core import enums
 | 
						|
from kmip.core.factories.attributes import AttributeFactory
 | 
						|
from kmip.demos import utils
 | 
						|
from kmip.pie import client
 | 
						|
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    logger = utils.build_console_logger(logging.INFO)
 | 
						|
 | 
						|
    # Build and parse arguments
 | 
						|
    parser = utils.build_cli_parser(enums.Operation.LOCATE)
 | 
						|
    opts, args = parser.parse_args(sys.argv[1:])
 | 
						|
 | 
						|
    config = opts.config
 | 
						|
    offset_items = opts.offset_items
 | 
						|
    maximum_items = opts.maximum_items
 | 
						|
    name = opts.name
 | 
						|
    initial_dates = opts.initial_dates
 | 
						|
    state = opts.state
 | 
						|
    object_type = opts.object_type
 | 
						|
    certificate_type = opts.certificate_type
 | 
						|
    cryptographic_algorithm = opts.cryptographic_algorithm
 | 
						|
    cryptographic_length = opts.cryptographic_length
 | 
						|
    cryptographic_usage_masks = opts.cryptographic_usage_masks
 | 
						|
    unique_identifier = opts.unique_identifier
 | 
						|
    operation_policy_name = opts.operation_policy_name
 | 
						|
 | 
						|
    attribute_factory = AttributeFactory()
 | 
						|
 | 
						|
    if offset_items and (offset_items < 0):
 | 
						|
        logger.error("Invalid offset items value provided.")
 | 
						|
        sys.exit(-1)
 | 
						|
    if maximum_items and (maximum_items < 0):
 | 
						|
        logger.error("Invalid maximum items value provided.")
 | 
						|
        sys.exit(-1)
 | 
						|
 | 
						|
    # Build attributes if any are specified
 | 
						|
    attributes = []
 | 
						|
    if name:
 | 
						|
        attributes.append(
 | 
						|
            attribute_factory.create_attribute(enums.AttributeType.NAME, name)
 | 
						|
        )
 | 
						|
    for initial_date in initial_dates:
 | 
						|
        try:
 | 
						|
            t = time.strptime(initial_date)
 | 
						|
        except (ValueError, TypeError):
 | 
						|
            logger.error(
 | 
						|
                "Invalid initial date provided: {}".format(initial_date)
 | 
						|
            )
 | 
						|
            logger.info(
 | 
						|
                "Date values should be formatted like this: "
 | 
						|
                "'Tue Jul 23 18:39:01 2019'"
 | 
						|
            )
 | 
						|
            sys.exit(-1)
 | 
						|
 | 
						|
        try:
 | 
						|
            t = calendar.timegm(t)
 | 
						|
        except Exception:
 | 
						|
            logger.error(
 | 
						|
                "Failed to convert initial date time tuple "
 | 
						|
                "to an integer: {}".format(t)
 | 
						|
            )
 | 
						|
            sys.exit(-2)
 | 
						|
 | 
						|
        attributes.append(
 | 
						|
            attribute_factory.create_attribute(
 | 
						|
                enums.AttributeType.INITIAL_DATE,
 | 
						|
                t
 | 
						|
            )
 | 
						|
        )
 | 
						|
    if state:
 | 
						|
        state = getattr(enums.State, state, None)
 | 
						|
        if state:
 | 
						|
            attributes.append(
 | 
						|
                attribute_factory.create_attribute(
 | 
						|
                    enums.AttributeType.STATE,
 | 
						|
                    state
 | 
						|
                )
 | 
						|
            )
 | 
						|
        else:
 | 
						|
            logger.error("Invalid state provided: {}".format(opts.state))
 | 
						|
            sys.exit(-3)
 | 
						|
    if object_type:
 | 
						|
        object_type = getattr(enums.ObjectType, object_type, None)
 | 
						|
        if object_type:
 | 
						|
            attributes.append(
 | 
						|
                attribute_factory.create_attribute(
 | 
						|
                    enums.AttributeType.OBJECT_TYPE,
 | 
						|
                    object_type
 | 
						|
                )
 | 
						|
            )
 | 
						|
        else:
 | 
						|
            logger.error(
 | 
						|
                "Invalid object type provided: {}".format(opts.object_type)
 | 
						|
            )
 | 
						|
            sys.exit(-4)
 | 
						|
    if cryptographic_algorithm:
 | 
						|
        cryptographic_algorithm = getattr(
 | 
						|
            enums.CryptographicAlgorithm,
 | 
						|
            cryptographic_algorithm,
 | 
						|
            None
 | 
						|
        )
 | 
						|
        if cryptographic_algorithm:
 | 
						|
            attributes.append(
 | 
						|
                attribute_factory.create_attribute(
 | 
						|
                    enums.AttributeType.CRYPTOGRAPHIC_ALGORITHM,
 | 
						|
                    cryptographic_algorithm
 | 
						|
                )
 | 
						|
            )
 | 
						|
        else:
 | 
						|
            logger.error(
 | 
						|
                "Invalid cryptographic algorithm provided: {}".format(
 | 
						|
                    opts.cryptographic_algorithm
 | 
						|
                )
 | 
						|
            )
 | 
						|
            sys.exit(-5)
 | 
						|
    if cryptographic_length:
 | 
						|
        if cryptographic_length > 0:
 | 
						|
            attributes.append(
 | 
						|
                attribute_factory.create_attribute(
 | 
						|
                    enums.AttributeType.CRYPTOGRAPHIC_LENGTH,
 | 
						|
                    cryptographic_length
 | 
						|
                )
 | 
						|
            )
 | 
						|
        else:
 | 
						|
            logger.error(
 | 
						|
                "Invalid cryptographic length provided: {}".format(
 | 
						|
                    opts.cryptographic_length
 | 
						|
                )
 | 
						|
            )
 | 
						|
            sys.exit(-6)
 | 
						|
    if cryptographic_usage_masks:
 | 
						|
        masks = []
 | 
						|
        for cryptographic_usage_mask in cryptographic_usage_masks:
 | 
						|
            mask = getattr(
 | 
						|
                enums.CryptographicUsageMask,
 | 
						|
                cryptographic_usage_mask,
 | 
						|
                None
 | 
						|
            )
 | 
						|
            if mask:
 | 
						|
                masks.append(mask)
 | 
						|
            else:
 | 
						|
                logger.error(
 | 
						|
                    "Invalid cryptographic usage mask provided: {}".format(
 | 
						|
                        cryptographic_usage_mask
 | 
						|
                    )
 | 
						|
                )
 | 
						|
                sys.exit(-7)
 | 
						|
        attributes.append(
 | 
						|
            attribute_factory.create_attribute(
 | 
						|
                enums.AttributeType.CRYPTOGRAPHIC_USAGE_MASK,
 | 
						|
                masks
 | 
						|
            )
 | 
						|
        )
 | 
						|
    if certificate_type:
 | 
						|
        certificate_type = getattr(
 | 
						|
            enums.CertificateType,
 | 
						|
            certificate_type,
 | 
						|
            None
 | 
						|
        )
 | 
						|
        if certificate_type:
 | 
						|
            attributes.append(
 | 
						|
                attribute_factory.create_attribute(
 | 
						|
                    enums.AttributeType.CERTIFICATE_TYPE,
 | 
						|
                    certificate_type
 | 
						|
                )
 | 
						|
            )
 | 
						|
        else:
 | 
						|
            logger.error(
 | 
						|
                "Invalid certificate type provided: {}".format(
 | 
						|
                    opts.certificate_type
 | 
						|
                )
 | 
						|
            )
 | 
						|
            sys.exit(-8)
 | 
						|
    if unique_identifier:
 | 
						|
        attributes.append(
 | 
						|
            attribute_factory.create_attribute(
 | 
						|
                enums.AttributeType.UNIQUE_IDENTIFIER,
 | 
						|
                unique_identifier
 | 
						|
            )
 | 
						|
        )
 | 
						|
    if operation_policy_name:
 | 
						|
        attributes.append(
 | 
						|
            attribute_factory.create_attribute(
 | 
						|
                enums.AttributeType.OPERATION_POLICY_NAME,
 | 
						|
                operation_policy_name
 | 
						|
            )
 | 
						|
        )
 | 
						|
 | 
						|
    # Build the client and connect to the server
 | 
						|
    with client.ProxyKmipClient(
 | 
						|
            config=config,
 | 
						|
            config_file=opts.config_file
 | 
						|
    ) as client:
 | 
						|
        try:
 | 
						|
            uuids = client.locate(
 | 
						|
                attributes=attributes,
 | 
						|
                offset_items=offset_items,
 | 
						|
                maximum_items=maximum_items
 | 
						|
            )
 | 
						|
            logger.info("Located uuids: {0}".format(uuids))
 | 
						|
        except Exception as e:
 | 
						|
            logger.error(e)
 |