PyKMIP/kmip/demos/pie/locate.py

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)