131 lines
3.8 KiB
Python
131 lines
3.8 KiB
Python
# Copyright (c) 2014 Rackspace, Inc.
|
|
#
|
|
# 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.
|
|
|
|
AVAILABLE_PROTOCOLS = [
|
|
u'http',
|
|
u'https']
|
|
|
|
CERTIFICATE_OPTIONS = [
|
|
None,
|
|
u'shared',
|
|
u'san',
|
|
u'custom']
|
|
|
|
from poppy.model import common
|
|
|
|
|
|
class Domain(common.DictSerializableModel):
|
|
|
|
def __init__(self, domain, protocol='http',
|
|
certificate=None):
|
|
self._domain = domain.lower().strip()
|
|
|
|
if (protocol in AVAILABLE_PROTOCOLS):
|
|
self._protocol = protocol
|
|
else:
|
|
raise ValueError(
|
|
u'Protocol: {0} not in currently available'
|
|
' protocols: {1}'.format(
|
|
protocol,
|
|
AVAILABLE_PROTOCOLS)
|
|
)
|
|
|
|
# certificate option only effective when protocol is https
|
|
self._certificate = certificate
|
|
if self._protocol == 'https':
|
|
if self._certificate not in CERTIFICATE_OPTIONS:
|
|
raise ValueError(
|
|
u'Certificate option: {0} is not valid.'
|
|
'Valid certificate options are: {1}'.format(
|
|
certificate,
|
|
CERTIFICATE_OPTIONS)
|
|
)
|
|
|
|
@property
|
|
def domain(self):
|
|
"""domain.
|
|
|
|
:returns domain
|
|
"""
|
|
return self._domain
|
|
|
|
@domain.setter
|
|
def domain(self, value):
|
|
"""domain setter."""
|
|
self._domain = value.lower().strip()
|
|
|
|
@property
|
|
def certificate(self):
|
|
"""certificate option.
|
|
|
|
:returns certificate
|
|
"""
|
|
return self._certificate
|
|
|
|
@certificate.setter
|
|
def certificate(self, value):
|
|
"""domain certificate setter."""
|
|
if self._protocol != 'https':
|
|
raise ValueError('Cannot set certificate option for'
|
|
' non-https domain')
|
|
if value not in CERTIFICATE_OPTIONS:
|
|
raise ValueError(
|
|
u'Certificate option: {0} is not valid.'
|
|
'Valid certificate options are: {1}'.format(
|
|
value,
|
|
CERTIFICATE_OPTIONS)
|
|
)
|
|
self._certificate = value
|
|
|
|
@property
|
|
def protocol(self):
|
|
return self._protocol
|
|
|
|
@protocol.setter
|
|
def protocol(self, value):
|
|
if (value in AVAILABLE_PROTOCOLS):
|
|
self._protocol = value
|
|
else:
|
|
raise ValueError(
|
|
u'Protocol: {0} not in currently available'
|
|
' protocols: {1}'.format(
|
|
value,
|
|
AVAILABLE_PROTOCOLS)
|
|
)
|
|
|
|
@classmethod
|
|
def init_from_dict(cls, dict_obj):
|
|
"""Construct a model instance from a dictionary.
|
|
|
|
This serves as a 2nd constructor
|
|
|
|
:param dict_obj: dictionary object
|
|
:returns o
|
|
"""
|
|
o = cls("")
|
|
o.domain = dict_obj.get("domain").lower().strip()
|
|
o.protocol = dict_obj.get("protocol", "http")
|
|
if o.protocol == 'https':
|
|
o.certificate = dict_obj.get("certificate", None)
|
|
return o
|
|
|
|
def to_dict(self):
|
|
res = super(Domain, self).to_dict()
|
|
# cert info is a temporary property when
|
|
# trying to create cert, so skip serialization
|
|
if 'cert_info' in res and res['cert_info'] is not None:
|
|
res['cert_info'] = res['cert_info'].to_dict()
|
|
return res
|