Skip to content
This repository was archived by the owner on Jan 24, 2018. It is now read-only.

Commit 0bb79e3

Browse files
committed
Refactor for new CFSSL library
1 parent 505edff commit 0bb79e3

12 files changed

Lines changed: 131 additions & 82 deletions
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
# -*- coding: utf-8 -*-
2+
# Copyright 2016 LasLabs Inc.
3+
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
4+
5+
import logging
6+
7+
_logger = logging.getLogger(__name__)
8+
9+
try:
10+
import cfssl
11+
except ImportError:
12+
_logger.info('CFSSL Python library is not installed.')
13+
14+
15+
class API(object):
16+
""" It provides a base for all Models requiring API functionality """
17+
18+
cfssl = cfssl

clouder_certificate_authority/models/certificate.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,12 +27,12 @@ class ClouderCertificate(models.Model):
2727
comodel_name='clouder.certificate.name',
2828
required=True,
2929
)
30-
computed = fields.Serialized(
31-
compute="_compute_computed",
30+
api_object = fields.Binary(
31+
compute="_compute_api_object",
3232
)
3333

3434
@api.multi
35-
def _compute_computed(self):
35+
def _compute_api_object(self):
3636
""" It computes the keys required for the JSON request """
3737
for record in self:
3838
record.computed = {

clouder_certificate_authority/models/certificate_authority.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,9 +3,17 @@
33
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
44

55
import json
6+
import logging
67

78
from odoo import api, fields, models
89

10+
_logger = logging.getLogger(__name__)
11+
12+
try:
13+
from cfssl import CFSSL
14+
except ImportError:
15+
_logger.info('CFSSL Python Library Not Installed.')
16+
917

1018
class ClouderCertificateAuthority(models.Model):
1119
""" It provides an interface for controlling a Cert Authority. """
@@ -23,6 +31,10 @@ class ClouderCertificateAuthority(models.Model):
2331
'clouder_certificate_authority.tag_cert_authority',
2432
),
2533
)
34+
host_id = fields.Many2one(
35+
string='Host',
36+
comodel_name='clouder.certificate.host',
37+
)
2638
private_key_id = fields.Many2one(
2739
string='Private Key',
2840
comodel_name='clouder.key.private',

clouder_certificate_authority/models/certificate_host.py

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22
# Copyright 2016 LasLabs Inc.
33
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
44

5-
from odoo import fields, models
5+
from odoo import api, fields, models
66

7+
from ..api import API
78

8-
class ClouderCertificateHost(models.Model):
9+
10+
class ClouderCertificateHost(models.Model, API):
911
""" It provides the concept of a cert's CommonName """
1012

1113
_name = 'clouder.certificate.host'
@@ -18,3 +20,16 @@ class ClouderCertificateHost(models.Model):
1820
required=True,
1921
)
2022
port = fields.Integer()
23+
api_object = fields.Binary(
24+
compute="_compute_api_object",
25+
)
26+
27+
@api.multi
28+
def _compute_api_object(self):
29+
""" It computes the keys required for the JSON request """
30+
for record in self:
31+
record.computed = self.cfssl.Host(
32+
name=record.name,
33+
host=record.host,
34+
port=record.port,
35+
)

clouder_certificate_authority/models/certificate_name.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ class ClouderCertificateName(models.Model):
2727
default=lambda s: s.env.user.city,
2828
)
2929
company_id = fields.Many2one(
30-
string='Company',
30+
string='Organization',
3131
model='res.company',
3232
required=True,
3333
domain='[(company_id, "=", company_id)]',
@@ -36,18 +36,18 @@ class ClouderCertificateName(models.Model):
3636
organization_unit = fields.Char(
3737
required=True,
3838
)
39-
computed = fields.Serialized(
40-
compute="_compute_computed",
39+
api_object = fields.Binary(
40+
compute="_compute_api_object",
4141
)
4242

4343
@api.multi
44-
def _compute_computed(self):
44+
def _compute_api_object(self):
4545
""" It computes the keys required for the JSON request """
4646
for record in self:
47-
record.computed = {
48-
'C': record.country_id.code,
49-
'ST': record.state_id.name,
50-
'L': record.city,
51-
'O': record.company_id.name,
52-
'OU': record.organization_unit,
53-
}
47+
record.computed = self.cfssl.SubjectInfo(
48+
record.company_id.name,
49+
record.organizational_unit,
50+
record.city,
51+
record.state_id.name,
52+
record.country_id.code,
53+
)

clouder_certificate_authority/models/certificate_policy_auth.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,8 @@ class ClouderCertificatePolicyAuth(models.Model):
2626
default='standard',
2727
required=True,
2828
)
29-
computed = fields.Serialized(
30-
compute="_compute_computed",
29+
api_object = fields.Binary(
30+
compute="_compute_api_object",
3131
)
3232

3333
_sql_constraints = [
@@ -41,10 +41,11 @@ def _default_key(self):
4141
return passwd.encode('hex')[:16]
4242

4343
@api.multi
44-
def _compute_computed(self):
44+
def _compute_api_object(self):
4545
""" It computes the keys required for the JSON request """
4646
for record in self:
47-
record.computed = {
47+
record.computed = self.cfssl.PolicyAuth({
48+
'name': record.name,
4849
'key': record.key,
49-
'type': record.key_type,
50-
}
50+
'key_type': record.key_type,
51+
})

clouder_certificate_authority/models/certificate_policy_sign.py

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,16 @@ class ClouderCertificatePolicySign(models.Model):
2828
required=True,
2929
default=(365 * 24),
3030
)
31-
computed = fields.Serialized(
32-
compute="_compute_computed",
31+
api_object = fields.Binary(
32+
compute="_compute_api_object",
3333
)
3434

3535
@api.multi
36-
def _compute_computed(self):
36+
def _compute_api_object(self):
3737
""" It computes the keys required for the JSON request """
3838
for record in self:
39-
record.computed = {
40-
'auth_key': record.auth_policy_id.name,
41-
'expiry': '%sh' % expire_hours,
42-
'usages': [
43-
usage.code for usage in record.usage_ids
44-
],
45-
}
39+
record.computed = self.cfssl.PolicySign({
40+
'name': record.name,
41+
'usage_policies': record.usage_ids.mapped('computed'),
42+
'auth_policy': record.auth_policy_id.computed,
43+
})

clouder_certificate_authority/models/certificate_policy_use.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,20 @@ class ClouderCertificatePolicyUse(models.Model):
2222
required=True,
2323
default=5,
2424
)
25+
api_object = fields.Binary(
26+
compute="_compute_api_object",
27+
)
2528

2629
_sql_constraints = [
2730
('code_uniq', 'UNIQUE(code)', 'Code must be unique.'),
2831
('name_uniq', 'UNIQUE(name)', 'Name must be unique.'),
2932
]
33+
34+
@api.multi
35+
def _compute_api_object(self):
36+
""" It computes the keys required for the JSON request """
37+
for record in self:
38+
record.computed = self.cfssl.PolicyUse(
39+
name=record.name,
40+
code=record.code,
41+
)

clouder_certificate_authority/models/certificate_request.py

Lines changed: 12 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@
22
# Copyright 2016 LasLabs Inc.
33
# License LGPL-3.0 or later (http://www.gnu.org/licenses/lgpl.html).
44

5-
import json
6-
75
from odoo import api, fields, models
86

97

@@ -45,30 +43,20 @@ class ClouderCertificateRequest(models.Model):
4543
default='rsa',
4644
selection=lambda s: s.env['clouder.key.abstract']._get_algorithms(),
4745
)
48-
computed = fields.Serialized(
49-
compute="_compute_computed",
46+
api_object = fields.Binary(
47+
compute="_compute_api_object",
5048
)
5149

5250
@api.multi
53-
def _compute_computed(self):
51+
def _compute_api_object(self):
5452
""" It computes the keys required for the JSON request """
5553
for record in self:
56-
record.computed = {
57-
'CN': record.name,
58-
'names': [
59-
name.computed for name in record.subject_info_ids
60-
],
61-
'hosts': [
62-
'%s:%s' % (h.host, h.port) for h in record.host_ids
63-
],
64-
'key': {
65-
'algo': record.algorithm,
66-
'size': record.strength,
67-
},
68-
}
69-
70-
@api.multi
71-
def to_json(self):
72-
""" It returns the JSON representation of this object """
73-
self.ensure_one()
74-
return json.dumps(self.computed)
54+
record.computed = self.cfssl.CertificateRequest(
55+
CN=record.name,
56+
names=record.subject_info_ids.mapped('computed'),
57+
hosts=record.host_ids.mapped('computed'),
58+
key=self.cfssl.ConfigKey(
59+
algorithm=record.algorithm,
60+
strength=record.strength,
61+
),
62+
)

clouder_certificate_authority/models/config_certificate_abstract.py

Lines changed: 10 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -25,30 +25,18 @@ class ClouderConfigCertificateAbstract(models.AbstractModel):
2525
comodel_name='clouder.certificate.policy.auth',
2626
compute='_compute_auth_policy_ids',
2727
)
28-
computed = fields.Serialized(
29-
compute="_compute_computed",
28+
api_object = fields.Binary(
29+
compute="_compute_api_object",
3030
)
3131

3232
@api.multi
33-
def _compute_computed(self):
33+
def _compute_api_object(self):
3434
""" It computes the keys required for the JSON request. """
3535
for record in self:
36-
profiles = {
37-
p.name: p.computed for p in record.sign_policy_profile_ids
38-
}
39-
auth_keys = {
40-
auth.name: auth.computed for auth in record.auth_policy_ids
41-
}
42-
record.computed_config = {
43-
'signing': {
44-
'default': record.sign_policy_default_id.computed,
45-
'profiles': profiles,
46-
},
47-
'auth_keys': auth_keys,
48-
}
49-
50-
@api.multi
51-
def to_json(self):
52-
""" It returns the JSON representation of this object """
53-
self.ensure_one()
54-
return json.dumps(self.computed)
36+
profiles = record.sign_policy_profile_ids.mapped('computed')
37+
auth_keys = record.auth_policy_ids.mapped('computed')
38+
record.computed = self.cfssl.ConfigMixer(
39+
sign_policy=record.sign_policy_default_id.computed,
40+
sign_policies=profiles,
41+
auth_policies=auth_keys,
42+
)

0 commit comments

Comments
 (0)