Docs (#344)
* Adding release info. * adding some fields * Adding Source Plugin change. * Updating docs
This commit is contained in:
parent
acd47d5ec9
commit
dc198fec8c
|
@ -1,12 +1,62 @@
|
||||||
Changelog
|
Changelog
|
||||||
=========
|
=========
|
||||||
|
|
||||||
|
0.3.1 - `master`
|
||||||
0.2.3 - `master`
|
|
||||||
~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
.. note:: This version is not yet released and is under active development
|
.. note:: This version is not yet released and is under active development
|
||||||
|
|
||||||
|
0.3.0 - `master`
|
||||||
|
~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
This is quite a large upgrade, it is highly advised you backup your database before attempting to upgrade as this release
|
||||||
|
requires the migration of database structure as well as data.
|
||||||
|
|
||||||
|
|
||||||
|
Upgrading
|
||||||
|
---------
|
||||||
|
|
||||||
|
Please follow the `documentation <https://lemur.readthedocs.io/en/latest/administration.html#upgrading-lemur>`_ to upgrade Lemur.
|
||||||
|
|
||||||
|
|
||||||
|
Source Plugin Owners
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
The dictionary returned from a source plugin has changed keys from `public_certificate` to `body` and `intermediate_certificate` to chain.
|
||||||
|
|
||||||
|
|
||||||
|
Issuer Plugin Owners
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
This release may break your plugins, the keys in `issuer_options` have been changed from `camelCase` to `under_score`.
|
||||||
|
This change was made to break a undue reliance on downstream options maintains a more pythonic naming convention. Renaming
|
||||||
|
these keys should be fairly trivial, additionally pull requests have been submitted to affected plugins to help ease the transition.
|
||||||
|
|
||||||
|
.. note:: This change only affects issuer plugins and does not affect any other types of plugins.
|
||||||
|
|
||||||
|
|
||||||
|
* Closed `#63 <https://github.com/Netflix/lemur/issues/63>`_ - Validates all endpoints with Marshmallow schemas, this allows for
|
||||||
|
stricter input validation and better error messages when validation fails.
|
||||||
|
* Closed `#146 <https://github.com/Netflix/lemur/issues/146>`_ - Moved authority type to first pane of authority creation wizard.
|
||||||
|
* Closed `#147 <https://github.com/Netflix/lemur/issues/147>`_ - Added and refactored the relationship between authorities and their
|
||||||
|
root certificates. Displays the certificates (and chains) next the the authority in question.
|
||||||
|
* Closed `#199 <https://github.com/Netflix/lemur/issues/199>`_ - Ensures that the dates submitted to Lemur during authority and
|
||||||
|
certificate creation are actually dates.
|
||||||
|
* Closed `#230 <https://github.com/Netflix/lemur/issues/230>`_ - Migrated authority dropdown to a ui-select based dropdown, this
|
||||||
|
should be easier to determine what authorities are available and when an authority has actually been selected.
|
||||||
|
* Closed `#254 <https://github.com/Netflix/lemur/issues/254>`_ - Forces certificate names to be generally unique. If a certificate name
|
||||||
|
(generated or otherwise) is found to be a duplicate we increment by appending a counter.
|
||||||
|
* Closed `#254 <https://github.com/Netflix/lemur/issues/275>`_ - Switched to using Fernet generated passphrases for exported items.
|
||||||
|
These are more sounds that pseudo random passphrases generated before and have the nice property of being in base64.
|
||||||
|
* Closed `#278 <https://github.com/Netflix/lemur/issues/278>`_ - Added ability to specify a custom name to certificate creation, previously
|
||||||
|
this was only available in the certificate import wizard.
|
||||||
|
* Closed `#281 <https://github.com/Netflix/lemur/issues/281>`_ - Fixed an issue where notifications could not be removed from a certificate
|
||||||
|
via the UI.
|
||||||
|
* Closed `#289 <https://github.com/Netflix/lemur/issues/289>`_ - Fixed and issue where intermediates were not being properly exported.
|
||||||
|
* Closed `#315 <https://github.com/Netflix/lemur/issues/315>`_ - Made how roles are associated with certificates and authorities much more
|
||||||
|
explict, including adding the ability to add roles directly to certificates and authorities on creation.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
0.2.2 - 2016-02-05
|
0.2.2 - 2016-02-05
|
||||||
~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
@ -36,7 +86,7 @@ Changelog
|
||||||
|
|
||||||
|
|
||||||
0.2.0 - 2015-12-02
|
0.2.0 - 2015-12-02
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
* Closed #120 - Error messages not displaying long enough
|
* Closed #120 - Error messages not displaying long enough
|
||||||
* Closed #121 - Certificate create form should not be valid until a Certificate Authority object is available
|
* Closed #121 - Certificate create form should not be valid until a Certificate Authority object is available
|
||||||
|
@ -52,7 +102,7 @@ Changelog
|
||||||
|
|
||||||
|
|
||||||
0.1.5 - 2015-10-26
|
0.1.5 - 2015-10-26
|
||||||
~~~~~~~~~~~~~~~~~~~
|
~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
* **SECURITY ISSUE**: Switched from use a AES static key to Fernet encryption.
|
* **SECURITY ISSUE**: Switched from use a AES static key to Fernet encryption.
|
||||||
Affects all versions prior to 0.1.5. If upgrading this will require a data migration.
|
Affects all versions prior to 0.1.5. If upgrading this will require a data migration.
|
||||||
|
|
|
@ -5,10 +5,6 @@ Lemur
|
||||||
:alt: Join the chat at https://gitter.im/Netflix/lemur
|
:alt: Join the chat at https://gitter.im/Netflix/lemur
|
||||||
:target: https://gitter.im/Netflix/lemur?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
|
:target: https://gitter.im/Netflix/lemur?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge
|
||||||
|
|
||||||
.. image:: https://img.shields.io/pypi/v/lemur.svg
|
|
||||||
:target: https://pypi.python.org/pypi/lemur/
|
|
||||||
:alt: Latest Version
|
|
||||||
|
|
||||||
.. image:: https://readthedocs.org/projects/lemur/badge/?version=latest
|
.. image:: https://readthedocs.org/projects/lemur/badge/?version=latest
|
||||||
:target: https://lemur.readthedocs.org
|
:target: https://lemur.readthedocs.org
|
||||||
:alt: Latest Docs
|
:alt: Latest Docs
|
||||||
|
@ -20,10 +16,6 @@ Lemur
|
||||||
:target: https://requires.io/github/Netflix/lemur/requirements/?branch=master
|
:target: https://requires.io/github/Netflix/lemur/requirements/?branch=master
|
||||||
:alt: Requirements Status
|
:alt: Requirements Status
|
||||||
|
|
||||||
.. image:: https://badge.waffle.io/Netflix/lemur.png?label=ready&title=Ready
|
|
||||||
:target: https://waffle.io/Netflix/lemur
|
|
||||||
:alt: 'Stories in Ready'
|
|
||||||
|
|
||||||
Lemur manages TLS certificate creation. While not able to issue certificates itself, Lemur acts as a broker between CAs
|
Lemur manages TLS certificate creation. While not able to issue certificates itself, Lemur acts as a broker between CAs
|
||||||
and environments providing a central portal for developers to issue TLS certificates with 'sane' defaults.
|
and environments providing a central portal for developers to issue TLS certificates with 'sane' defaults.
|
||||||
|
|
||||||
|
|
|
@ -211,8 +211,8 @@ certificate Lemur does not know about and adding the certificate to it's invento
|
||||||
|
|
||||||
The `SourcePlugin` object has one default option of `pollRate`. This controls the number of seconds which to get new certificates.
|
The `SourcePlugin` object has one default option of `pollRate`. This controls the number of seconds which to get new certificates.
|
||||||
|
|
||||||
.. warning::
|
.. warning::
|
||||||
Lemur currently has a very basic polling system of running a cron job every 15min to see which source plugins need to be run. A lock file is generated to guarantee that
|
Lemur currently has a very basic polling system of running a cron job every 15min to see which source plugins need to be run. A lock file is generated to guarantee that
|
||||||
only one sync is running at a time. It also means that the minimum resolution of a source plugin poll rate is effectively 15min. You can always specify a faster cron
|
only one sync is running at a time. It also means that the minimum resolution of a source plugin poll rate is effectively 15min. You can always specify a faster cron
|
||||||
job if you need a higher resolution sync job.
|
job if you need a higher resolution sync job.
|
||||||
|
|
||||||
|
@ -223,8 +223,8 @@ The `SourcePlugin` object requires implementation of one function::
|
||||||
# request.get("some source of certificates")
|
# request.get("some source of certificates")
|
||||||
|
|
||||||
|
|
||||||
.. Note::
|
.. note::
|
||||||
Often times to facilitate code re-use it makes sense put source and destination plugins into one package.
|
Often times to facilitate code re-use it makes sense put source and destination plugins into one package.
|
||||||
|
|
||||||
|
|
||||||
Export
|
Export
|
||||||
|
@ -244,9 +244,8 @@ The `ExportPlugin` object requires the implementation of one function::
|
||||||
# return "extension", passphrase, raw
|
# return "extension", passphrase, raw
|
||||||
|
|
||||||
|
|
||||||
.. Note::
|
.. note::
|
||||||
Support of various formats sometimes relies on external tools system calls. Always be mindful of sanitizing any input to
|
Support of various formats sometimes relies on external tools system calls. Always be mindful of sanitizing any input to these calls.
|
||||||
these calls.
|
|
||||||
|
|
||||||
|
|
||||||
Testing
|
Testing
|
||||||
|
|
|
@ -9,7 +9,7 @@ __title__ = "lemur"
|
||||||
__summary__ = ("Certificate management and orchestration service")
|
__summary__ = ("Certificate management and orchestration service")
|
||||||
__uri__ = "https://github.com/Netflix/lemur"
|
__uri__ = "https://github.com/Netflix/lemur"
|
||||||
|
|
||||||
__version__ = "0.2.3dev"
|
__version__ = "0.3.0"
|
||||||
|
|
||||||
__author__ = "The Lemur developers"
|
__author__ = "The Lemur developers"
|
||||||
__email__ = "security@netflix.com"
|
__email__ = "security@netflix.com"
|
||||||
|
|
|
@ -53,20 +53,44 @@ class AuthoritiesList(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"items": [
|
"items": [{
|
||||||
{
|
"name": "TestAuthority",
|
||||||
"id": 1,
|
"roles": [{
|
||||||
"name": "authority1",
|
"id": 123,
|
||||||
"description": "this is authority1",
|
"name": "secure@example.com"
|
||||||
"pluginName": null,
|
}, {
|
||||||
"chain": "-----Begin ...",
|
"id": 564,
|
||||||
"body": "-----Begin ...",
|
"name": "TestAuthority_admin"
|
||||||
|
}, {
|
||||||
|
"id": 565,
|
||||||
|
"name": "TestAuthority_operator"
|
||||||
|
}],
|
||||||
|
"options": null,
|
||||||
"active": true,
|
"active": true,
|
||||||
"notBefore": "2015-06-05T17:09:39",
|
"authorityCertificate": {
|
||||||
"notAfter": "2015-06-10T17:09:39"
|
"body": "-----BEGIN CERTIFICATE-----IyMzU5MTVaMHk...",
|
||||||
"options": null
|
"status": true,
|
||||||
|
"cn": "AcommonName",
|
||||||
|
"description": "This is the ROOT certificate for the TestAuthority certificate authority.",
|
||||||
|
"chain": "",
|
||||||
|
"notBefore": "2016-06-02T00:00:15+00:00",
|
||||||
|
"notAfter": "2023-06-02T23:59:15+00:00",
|
||||||
|
"owner": "secure@example.com",
|
||||||
|
"user": {
|
||||||
|
"username": "joe@example.com",
|
||||||
|
"active": true,
|
||||||
|
"email": "joe@example.com",
|
||||||
|
"id": 3
|
||||||
|
},
|
||||||
|
"active": true,
|
||||||
|
"bits": 2048,
|
||||||
|
"id": 2235,
|
||||||
|
"name": "TestAuthority"
|
||||||
|
},
|
||||||
|
"owner": "secure@example.com",
|
||||||
|
"id": 43,
|
||||||
|
"description": "This is the ROOT certificate for the TestAuthority certificate authority."
|
||||||
}
|
}
|
||||||
]
|
|
||||||
"total": 1
|
"total": 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -74,7 +98,7 @@ class AuthoritiesList(AuthenticatedResource):
|
||||||
:query sortDir: acs or desc
|
:query sortDir: acs or desc
|
||||||
:query page: int default is 1
|
:query page: int default is 1
|
||||||
:query filter: key value pair. format is k;v
|
:query filter: key value pair. format is k;v
|
||||||
:query limit: limit number default is 10
|
:query count: count number default is 10
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
:statuscode 403: unauthenticated
|
:statuscode 403: unauthenticated
|
||||||
|
@ -101,29 +125,28 @@ class AuthoritiesList(AuthenticatedResource):
|
||||||
Accept: application/json, text/javascript
|
Accept: application/json, text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"caDN": {
|
|
||||||
"country": "US",
|
"country": "US",
|
||||||
"state": "CA",
|
"state": "California",
|
||||||
"location": "A Location",
|
"location": "Los Gatos",
|
||||||
"organization": "ExampleInc",
|
"organization": "Netflix",
|
||||||
"organizationalUnit": "Operations",
|
"organizationalUnit": "Operations",
|
||||||
"commonName": "a common name"
|
"type": "root",
|
||||||
},
|
"signingAlgorithm": "sha256WithRSA",
|
||||||
"caType": "root",
|
"sensitivity": "medium",
|
||||||
"caSigningAlgo": "sha256WithRSA",
|
|
||||||
"caSensitivity": "medium",
|
|
||||||
"keyType": "RSA2048",
|
"keyType": "RSA2048",
|
||||||
"pluginName": "cloudca",
|
"plugin": {
|
||||||
"validityStart": "2015-06-11T07:00:00.000Z",
|
"slug": "cloudca-issuer",
|
||||||
"validityEnd": "2015-06-13T07:00:00.000Z",
|
},
|
||||||
"caName": "DoctestCA",
|
"name": "TimeTestAuthority5",
|
||||||
"ownerEmail": "jimbob@example.com",
|
"owner": "secure@example.com",
|
||||||
"caDescription": "Example CA",
|
"description": "test",
|
||||||
|
"commonName": "AcommonName",
|
||||||
|
"validityYears": "20",
|
||||||
"extensions": {
|
"extensions": {
|
||||||
"subAltNames": {
|
"subAltNames": {
|
||||||
"names": []
|
"names": []
|
||||||
}
|
|
||||||
},
|
},
|
||||||
|
"custom": []
|
||||||
}
|
}
|
||||||
|
|
||||||
**Example response**:
|
**Example response**:
|
||||||
|
@ -135,34 +158,62 @@ class AuthoritiesList(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"id": 1,
|
"name": "TestAuthority",
|
||||||
"name": "authority1",
|
"roles": [{
|
||||||
"description": "this is authority1",
|
"id": 123,
|
||||||
"pluginName": null,
|
"name": "secure@example.com"
|
||||||
"chain": "-----Begin ...",
|
}, {
|
||||||
"body": "-----Begin ...",
|
"id": 564,
|
||||||
|
"name": "TestAuthority_admin"
|
||||||
|
}, {
|
||||||
|
"id": 565,
|
||||||
|
"name": "TestAuthority_operator"
|
||||||
|
}],
|
||||||
|
"options": null,
|
||||||
"active": true,
|
"active": true,
|
||||||
"notBefore": "2015-06-05T17:09:39",
|
"authorityCertificate": {
|
||||||
"notAfter": "2015-06-10T17:09:39"
|
"body": "-----BEGIN CERTIFICATE-----IyMzU5MTVaMHk...",
|
||||||
"options": null
|
"status": true,
|
||||||
|
"cn": "AcommonName",
|
||||||
|
"description": "This is the ROOT certificate for the TestAuthority certificate authority.",
|
||||||
|
"chain": "",
|
||||||
|
"notBefore": "2016-06-02T00:00:15+00:00",
|
||||||
|
"notAfter": "2023-06-02T23:59:15+00:00",
|
||||||
|
"owner": "secure@example.com",
|
||||||
|
"user": {
|
||||||
|
"username": "joe@example.com",
|
||||||
|
"active": true,
|
||||||
|
"email": "joe@example.com",
|
||||||
|
"id": 3
|
||||||
|
},
|
||||||
|
"active": true,
|
||||||
|
"bits": 2048,
|
||||||
|
"id": 2235,
|
||||||
|
"name": "TestAuthority"
|
||||||
|
},
|
||||||
|
"owner": "secure@example.com",
|
||||||
|
"id": 43,
|
||||||
|
"description": "This is the ROOT certificate for the TestAuthority certificate authority."
|
||||||
}
|
}
|
||||||
|
|
||||||
:arg caName: authority's name
|
|
||||||
:arg caDescription: a sensible description about what the CA with be used for
|
:arg name: authority's name
|
||||||
:arg ownerEmail: the team or person who 'owns' this authority
|
:arg description: a sensible description about what the CA with be used for
|
||||||
|
:arg owner: the team or person who 'owns' this authority
|
||||||
:arg validityStart: when this authority should start issuing certificates
|
:arg validityStart: when this authority should start issuing certificates
|
||||||
:arg validityEnd: when this authority should stop issuing certificates
|
:arg validityEnd: when this authority should stop issuing certificates
|
||||||
|
:arg validityYears: starting from `now` how many years into the future the authority should be valid
|
||||||
:arg extensions: certificate extensions
|
:arg extensions: certificate extensions
|
||||||
:arg pluginName: name of the plugin to create the authority
|
:arg plugin: name of the plugin to create the authority
|
||||||
:arg caType: the type of authority (root/subca)
|
:arg type: the type of authority (root/subca)
|
||||||
:arg caParent: the parent authority if this is to be a subca
|
:arg parent: the parent authority if this is to be a subca
|
||||||
:arg caSigningAlgo: algorithm used to sign the authority
|
:arg signingAlgorithm: algorithm used to sign the authority
|
||||||
:arg keyType: key type
|
:arg keyType: key type
|
||||||
:arg caSensitivity: the sensitivity of the root key, for CloudCA this determines if the root keys are stored
|
:arg sensitivity: the sensitivity of the root key, for CloudCA this determines if the root keys are stored
|
||||||
in an HSM
|
in an HSM
|
||||||
:arg caKeyName: name of the key to store in the HSM (CloudCA)
|
:arg keyName: name of the key to store in the HSM (CloudCA)
|
||||||
:arg caSerialNumber: serial number of the authority
|
:arg serialNumber: serial number of the authority
|
||||||
:arg caFirstSerial: specifies the starting serial number for certificates issued off of this authority
|
:arg firstSerial: specifies the starting serial number for certificates issued off of this authority
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 403: unauthenticated
|
:statuscode 403: unauthenticated
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
|
@ -199,18 +250,28 @@ class Authorities(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"id": 1,
|
"roles": [{
|
||||||
"name": "authority1",
|
"id": 123,
|
||||||
"description": "this is authority1",
|
"name": "secure@example.com"
|
||||||
"pluginName": null,
|
}, {
|
||||||
"chain": "-----Begin ...",
|
"id": 564,
|
||||||
"body": "-----Begin ...",
|
"name": "TestAuthority_admin"
|
||||||
|
}, {
|
||||||
|
"id": 565,
|
||||||
|
"name": "TestAuthority_operator"
|
||||||
|
}],
|
||||||
"active": true,
|
"active": true,
|
||||||
"notBefore": "2015-06-05T17:09:39",
|
"owner": "secure@example.com",
|
||||||
"notAfter": "2015-06-10T17:09:39"
|
"id": 43,
|
||||||
"options": null
|
"description": "This is the ROOT certificate for the TestAuthority certificate authority."
|
||||||
}
|
}
|
||||||
|
|
||||||
|
:arg description: a sensible description about what the CA with be used for
|
||||||
|
:arg owner: the team or person who 'owns' this authority
|
||||||
|
:arg active: set whether this authoritity is currently in use
|
||||||
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
|
:statuscode 403: unauthenticated
|
||||||
|
:statuscode 200: no error
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
:statuscode 403: unauthenticated
|
:statuscode 403: unauthenticated
|
||||||
|
@ -233,10 +294,41 @@ class Authorities(AuthenticatedResource):
|
||||||
Accept: application/json, text/javascript
|
Accept: application/json, text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"roles": [],
|
"name": "TestAuthority5",
|
||||||
"active": false,
|
"roles": [{
|
||||||
"owner": "bob@example.com",
|
"id": 566,
|
||||||
"description": "this is authority1"
|
"name": "TestAuthority5_admin"
|
||||||
|
}, {
|
||||||
|
"id": 567,
|
||||||
|
"name": "TestAuthority5_operator"
|
||||||
|
}, {
|
||||||
|
"id": 123,
|
||||||
|
"name": "secure@example.com"
|
||||||
|
}],
|
||||||
|
"active": true,
|
||||||
|
"authorityCertificate": {
|
||||||
|
"body": "-----BEGIN CERTIFICATE-----",
|
||||||
|
"status": null,
|
||||||
|
"cn": "AcommonName",
|
||||||
|
"description": "This is the ROOT certificate for the TestAuthority5 certificate authority.",
|
||||||
|
"chain": "",
|
||||||
|
"notBefore": "2016-06-03T00:00:51+00:00",
|
||||||
|
"notAfter": "2036-06-03T23:59:51+00:00",
|
||||||
|
"owner": "secure@example.com",
|
||||||
|
"user": {
|
||||||
|
"username": "joe@example.com",
|
||||||
|
"active": true,
|
||||||
|
"email": "joe@example.com",
|
||||||
|
"id": 3
|
||||||
|
},
|
||||||
|
"active": true,
|
||||||
|
"bits": 2048,
|
||||||
|
"id": 2280,
|
||||||
|
"name": "TestAuthority5"
|
||||||
|
},
|
||||||
|
"owner": "secure@example.com",
|
||||||
|
"id": 44,
|
||||||
|
"description": "This is the ROOT certificate for the TestAuthority5 certificate authority."
|
||||||
}
|
}
|
||||||
|
|
||||||
**Example response**:
|
**Example response**:
|
||||||
|
@ -248,16 +340,42 @@ class Authorities(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"id": 1,
|
"name": "TestAuthority",
|
||||||
"name": "authority1",
|
"roles": [{
|
||||||
"description": "this is authority1",
|
"id": 123,
|
||||||
"pluginName": null,
|
"name": "secure@example.com"
|
||||||
"chain": "-----begin ...",
|
}, {
|
||||||
"body": "-----begin ...",
|
"id": 564,
|
||||||
"active": false,
|
"name": "TestAuthority_admin"
|
||||||
"notBefore": "2015-06-05t17:09:39",
|
}, {
|
||||||
"notAfter": "2015-06-10t17:09:39"
|
"id": 565,
|
||||||
"options": null
|
"name": "TestAuthority_operator"
|
||||||
|
}],
|
||||||
|
"options": null,
|
||||||
|
"active": true,
|
||||||
|
"authorityCertificate": {
|
||||||
|
"body": "-----BEGIN CERTIFICATE-----IyMzU5MTVaMHk...",
|
||||||
|
"status": true,
|
||||||
|
"cn": "AcommonName",
|
||||||
|
"description": "This is the ROOT certificate for the TestAuthority certificate authority.",
|
||||||
|
"chain": "",
|
||||||
|
"notBefore": "2016-06-02T00:00:15+00:00",
|
||||||
|
"notAfter": "2023-06-02T23:59:15+00:00",
|
||||||
|
"owner": "secure@example.com",
|
||||||
|
"user": {
|
||||||
|
"username": "joe@example.com",
|
||||||
|
"active": true,
|
||||||
|
"email": "joe@example.com",
|
||||||
|
"id": 3
|
||||||
|
},
|
||||||
|
"active": true,
|
||||||
|
"bits": 2048,
|
||||||
|
"id": 2235,
|
||||||
|
"name": "TestAuthority"
|
||||||
|
},
|
||||||
|
"owner": "secure@example.com",
|
||||||
|
"id": 43,
|
||||||
|
"description": "This is the ROOT certificate for the TestAuthority certificate authority."
|
||||||
}
|
}
|
||||||
|
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
|
@ -313,16 +431,42 @@ class CertificateAuthority(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"id": 1,
|
"name": "TestAuthority",
|
||||||
"name": "authority1",
|
"roles": [{
|
||||||
"description": "this is authority1",
|
"id": 123,
|
||||||
"pluginName": null,
|
"name": "secure@example.com"
|
||||||
"chain": "-----Begin ...",
|
}, {
|
||||||
"body": "-----Begin ...",
|
"id": 564,
|
||||||
|
"name": "TestAuthority_admin"
|
||||||
|
}, {
|
||||||
|
"id": 565,
|
||||||
|
"name": "TestAuthority_operator"
|
||||||
|
}],
|
||||||
|
"options": null,
|
||||||
"active": true,
|
"active": true,
|
||||||
"notBefore": "2015-06-05T17:09:39",
|
"authorityCertificate": {
|
||||||
"notAfter": "2015-06-10T17:09:39"
|
"body": "-----BEGIN CERTIFICATE-----IyMzU5MTVaMHk...",
|
||||||
"options": null
|
"status": true,
|
||||||
|
"cn": "AcommonName",
|
||||||
|
"description": "This is the ROOT certificate for the TestAuthority certificate authority.",
|
||||||
|
"chain": "",
|
||||||
|
"notBefore": "2016-06-02T00:00:15+00:00",
|
||||||
|
"notAfter": "2023-06-02T23:59:15+00:00",
|
||||||
|
"owner": "secure@example.com",
|
||||||
|
"user": {
|
||||||
|
"username": "joe@example.com",
|
||||||
|
"active": true,
|
||||||
|
"email": "joe@example.com",
|
||||||
|
"id": 3
|
||||||
|
},
|
||||||
|
"active": true,
|
||||||
|
"bits": 2048,
|
||||||
|
"id": 2235,
|
||||||
|
"name": "TestAuthority"
|
||||||
|
},
|
||||||
|
"owner": "secure@example.com",
|
||||||
|
"id": 43,
|
||||||
|
"description": "This is the ROOT certificate for the TestAuthority certificate authority."
|
||||||
}
|
}
|
||||||
|
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
|
|
|
@ -59,26 +59,53 @@ class CertificatesList(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"items": [
|
"items": [{
|
||||||
{
|
"status": null,
|
||||||
"id": 1,
|
"cn": "*.test.example.net",
|
||||||
"name": "cert1",
|
"chain": "",
|
||||||
"description": "this is cert1",
|
"authority": {
|
||||||
"bits": 2048,
|
|
||||||
"deleted": false,
|
|
||||||
"issuer": "ExampeInc.",
|
|
||||||
"serial": "123450",
|
|
||||||
"chain": "-----Begin ...",
|
|
||||||
"body": "-----Begin ...",
|
|
||||||
"san": true,
|
|
||||||
"owner": 'bob@example.com",
|
|
||||||
"active": true,
|
"active": true,
|
||||||
"notBefore": "2015-06-05T17:09:39",
|
"owner": "secure@example.com",
|
||||||
"notAfter": "2015-06-10T17:09:39",
|
"id": 1,
|
||||||
"cn": "example.com",
|
"description": "verisign test authority",
|
||||||
"status": "unknown"
|
"name": "verisign"
|
||||||
}
|
},
|
||||||
]
|
"owner": "joe@example.com",
|
||||||
|
"serial": "82311058732025924142789179368889309156",
|
||||||
|
"id": 2288,
|
||||||
|
"issuer": "SymantecCorporation",
|
||||||
|
"notBefore": "2016-06-03T00:00:00+00:00",
|
||||||
|
"notAfter": "2018-01-12T23:59:59+00:00",
|
||||||
|
"destinations": [],
|
||||||
|
"bits": 2048,
|
||||||
|
"body": "-----BEGIN CERTIFICATE-----...",
|
||||||
|
"description": null,
|
||||||
|
"deleted": null,
|
||||||
|
"notifications": [{
|
||||||
|
"id": 1
|
||||||
|
}]
|
||||||
|
"signingAlgorithm": "sha256",
|
||||||
|
"user": {
|
||||||
|
"username": "jane",
|
||||||
|
"active": true,
|
||||||
|
"email": "jane@example.com",
|
||||||
|
"id": 2
|
||||||
|
},
|
||||||
|
"active": true,
|
||||||
|
"domains": [{
|
||||||
|
"sensitive": false,
|
||||||
|
"id": 1090,
|
||||||
|
"name": "*.test.example.net"
|
||||||
|
}],
|
||||||
|
"replaces": [],
|
||||||
|
"name": "WILDCARD.test.example.net-SymantecCorporation-20160603-20180112",
|
||||||
|
"roles": [{
|
||||||
|
"id": 464,
|
||||||
|
"description": "This is a google group based role created by Lemur",
|
||||||
|
"name": "joe@example.com"
|
||||||
|
}],
|
||||||
|
"san": null
|
||||||
|
}],
|
||||||
"total": 1
|
"total": 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -86,10 +113,11 @@ class CertificatesList(AuthenticatedResource):
|
||||||
:query sortDir: acs or desc
|
:query sortDir: acs or desc
|
||||||
:query page: int. default is 1
|
:query page: int. default is 1
|
||||||
:query filter: key value pair format is k;v
|
:query filter: key value pair format is k;v
|
||||||
:query limit: limit number. default is 10
|
:query count: count number. default is 10
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
:statuscode 403: unauthenticated
|
:statuscode 403: unauthenticated
|
||||||
|
|
||||||
"""
|
"""
|
||||||
parser = paginated_parser.copy()
|
parser = paginated_parser.copy()
|
||||||
parser.add_argument('timeRange', type=int, dest='time_range', location='args')
|
parser.add_argument('timeRange', type=int, dest='time_range', location='args')
|
||||||
|
@ -118,92 +146,6 @@ class CertificatesList(AuthenticatedResource):
|
||||||
Host: example.com
|
Host: example.com
|
||||||
Accept: application/json, text/javascript
|
Accept: application/json, text/javascript
|
||||||
|
|
||||||
{
|
|
||||||
"country": "US",
|
|
||||||
"state": "CA",
|
|
||||||
"location": "A Place",
|
|
||||||
"organization": "ExampleInc.",
|
|
||||||
"organizationalUnit": "Operations",
|
|
||||||
"owner": "bob@example.com",
|
|
||||||
"description": "test",
|
|
||||||
"selectedAuthority": "timetest2",
|
|
||||||
"csr": "----BEGIN CERTIFICATE REQUEST-----...",
|
|
||||||
"authority": {
|
|
||||||
"body": "-----BEGIN...",
|
|
||||||
"name": "timetest2",
|
|
||||||
"chain": "",
|
|
||||||
"notBefore": "2015-06-05T15:20:59",
|
|
||||||
"active": true,
|
|
||||||
"id": 50,
|
|
||||||
"notAfter": "2015-06-17T15:21:08",
|
|
||||||
"description": "dsfdsf"
|
|
||||||
},
|
|
||||||
"notifications": [
|
|
||||||
{
|
|
||||||
"description": "Default 30 day expiration notification",
|
|
||||||
"notificationOptions": [
|
|
||||||
{
|
|
||||||
"name": "interval",
|
|
||||||
"required": true,
|
|
||||||
"value": 30,
|
|
||||||
"helpMessage": "Number of days to be alert before expiration.",
|
|
||||||
"validation": "^\\d+$",
|
|
||||||
"type": "int"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"available": [
|
|
||||||
"days",
|
|
||||||
"weeks",
|
|
||||||
"months"
|
|
||||||
],
|
|
||||||
"name": "unit",
|
|
||||||
"required": true,
|
|
||||||
"value": "days",
|
|
||||||
"helpMessage": "Interval unit",
|
|
||||||
"validation": "",
|
|
||||||
"type": "select"
|
|
||||||
},
|
|
||||||
{
|
|
||||||
"name": "recipients",
|
|
||||||
"required": true,
|
|
||||||
"value": "bob@example.com",
|
|
||||||
"helpMessage": "Comma delimited list of email addresses",
|
|
||||||
"validation": "^([\\w+-.%]+@[\\w-.]+\\.[A-Za-z]{2,4},?)+$",
|
|
||||||
"type": "str"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"label": "DEFAULT_KGLISSON_30_DAY",
|
|
||||||
"pluginName": "email-notification",
|
|
||||||
"active": true,
|
|
||||||
"id": 7
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"extensions": {
|
|
||||||
"basicConstraints": {},
|
|
||||||
"keyUsage": {
|
|
||||||
"isCritical": true,
|
|
||||||
"useKeyEncipherment": true,
|
|
||||||
"useDigitalSignature": true
|
|
||||||
},
|
|
||||||
"extendedKeyUsage": {
|
|
||||||
"isCritical": true,
|
|
||||||
"useServerAuthentication": true
|
|
||||||
},
|
|
||||||
"subjectKeyIdentifier": {
|
|
||||||
"includeSKI": true
|
|
||||||
},
|
|
||||||
"subAltNames": {
|
|
||||||
"names": []
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"commonName": "test",
|
|
||||||
"validityStart": "2015-06-05T07:00:00.000Z",
|
|
||||||
"validityEnd": "2015-06-16T07:00:00.000Z",
|
|
||||||
"replacements": [
|
|
||||||
{'id': 123}
|
|
||||||
],
|
|
||||||
"name": "TestCertificate"
|
|
||||||
}
|
|
||||||
|
|
||||||
**Example response**:
|
**Example response**:
|
||||||
|
|
||||||
|
@ -214,24 +156,54 @@ class CertificatesList(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
|
"status": null,
|
||||||
|
"cn": "*.test.example.net",
|
||||||
|
"chain": "",
|
||||||
|
"authority": {
|
||||||
|
"active": true,
|
||||||
|
"owner": "secure@example.com",
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"name": "cert1",
|
"description": "verisign test authority",
|
||||||
"description": "this is cert1",
|
"name": "verisign"
|
||||||
|
},
|
||||||
|
"owner": "joe@example.com",
|
||||||
|
"serial": "82311058732025924142789179368889309156",
|
||||||
|
"id": 2288,
|
||||||
|
"issuer": "SymantecCorporation",
|
||||||
|
"notBefore": "2016-06-03T00:00:00+00:00",
|
||||||
|
"notAfter": "2018-01-12T23:59:59+00:00",
|
||||||
|
"destinations": [],
|
||||||
"bits": 2048,
|
"bits": 2048,
|
||||||
"deleted": false,
|
"body": "-----BEGIN CERTIFICATE-----...",
|
||||||
"issuer": "ExampeInc.",
|
"description": null,
|
||||||
"serial": "123450",
|
"deleted": null,
|
||||||
"chain": "-----Begin ...",
|
"notifications": [{
|
||||||
"body": "-----Begin ...",
|
"id": 1
|
||||||
"san": true,
|
}]
|
||||||
"owner": "jimbob@example.com",
|
"signingAlgorithm": "sha256",
|
||||||
"active": false,
|
"user": {
|
||||||
"notBefore": "2015-06-05T17:09:39",
|
"username": "jane",
|
||||||
"notAfter": "2015-06-10T17:09:39",
|
"active": true,
|
||||||
"cn": "example.com",
|
"email": "jane@example.com",
|
||||||
"status": "unknown"
|
"id": 2
|
||||||
|
},
|
||||||
|
"active": true,
|
||||||
|
"domains": [{
|
||||||
|
"sensitive": false,
|
||||||
|
"id": 1090,
|
||||||
|
"name": "*.test.example.net"
|
||||||
|
}],
|
||||||
|
"replaces": [],
|
||||||
|
"name": "WILDCARD.test.example.net-SymantecCorporation-20160603-20180112",
|
||||||
|
"roles": [{
|
||||||
|
"id": 464,
|
||||||
|
"description": "This is a google group based role created by Lemur",
|
||||||
|
"name": "joe@example.com"
|
||||||
|
}],
|
||||||
|
"san": null
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
:arg extensions: extensions to be used in the certificate
|
:arg extensions: extensions to be used in the certificate
|
||||||
:arg description: description for new certificate
|
:arg description: description for new certificate
|
||||||
:arg owner: owner email
|
:arg owner: owner email
|
||||||
|
@ -246,6 +218,7 @@ class CertificatesList(AuthenticatedResource):
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
:statuscode 403: unauthenticated
|
:statuscode 403: unauthenticated
|
||||||
|
|
||||||
"""
|
"""
|
||||||
role = role_service.get_by_name(data['authority'].owner)
|
role = role_service.get_by_name(data['authority'].owner)
|
||||||
|
|
||||||
|
@ -304,23 +277,51 @@ class CertificatesUpload(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"id": 1,
|
"status": null,
|
||||||
"name": "cert1",
|
"cn": "*.test.example.net",
|
||||||
"description": "this is cert1",
|
"chain": "",
|
||||||
"bits": 2048,
|
"authority": {
|
||||||
"deleted": false,
|
|
||||||
"issuer": "ExampeInc.",
|
|
||||||
"serial": "123450",
|
|
||||||
"chain": "-----Begin ...",
|
|
||||||
"body": "-----Begin ...",
|
|
||||||
"san": true,
|
|
||||||
"owner": "joe@example.com",
|
|
||||||
"active": true,
|
"active": true,
|
||||||
"notBefore": "2015-06-05T17:09:39",
|
"owner": "secure@example.com",
|
||||||
"notAfter": "2015-06-10T17:09:39",
|
"id": 1,
|
||||||
"signingAlgorithm": "sha2"
|
"description": "verisign test authority",
|
||||||
"cn": "example.com",
|
"name": "verisign"
|
||||||
"status": "unknown"
|
},
|
||||||
|
"owner": "joe@example.com",
|
||||||
|
"serial": "82311058732025924142789179368889309156",
|
||||||
|
"id": 2288,
|
||||||
|
"issuer": "SymantecCorporation",
|
||||||
|
"notBefore": "2016-06-03T00:00:00+00:00",
|
||||||
|
"notAfter": "2018-01-12T23:59:59+00:00",
|
||||||
|
"destinations": [],
|
||||||
|
"bits": 2048,
|
||||||
|
"body": "-----BEGIN CERTIFICATE-----...",
|
||||||
|
"description": null,
|
||||||
|
"deleted": null,
|
||||||
|
"notifications": [{
|
||||||
|
"id": 1
|
||||||
|
}]
|
||||||
|
"signingAlgorithm": "sha256",
|
||||||
|
"user": {
|
||||||
|
"username": "jane",
|
||||||
|
"active": true,
|
||||||
|
"email": "jane@example.com",
|
||||||
|
"id": 2
|
||||||
|
},
|
||||||
|
"active": true,
|
||||||
|
"domains": [{
|
||||||
|
"sensitive": false,
|
||||||
|
"id": 1090,
|
||||||
|
"name": "*.test.example.net"
|
||||||
|
}],
|
||||||
|
"replaces": [],
|
||||||
|
"name": "WILDCARD.test.example.net-SymantecCorporation-20160603-20180112",
|
||||||
|
"roles": [{
|
||||||
|
"id": 464,
|
||||||
|
"description": "This is a google group based role created by Lemur",
|
||||||
|
"name": "joe@example.com"
|
||||||
|
}],
|
||||||
|
"san": null
|
||||||
}
|
}
|
||||||
|
|
||||||
:arg owner: owner email for certificate
|
:arg owner: owner email for certificate
|
||||||
|
@ -331,6 +332,7 @@ class CertificatesUpload(AuthenticatedResource):
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 403: unauthenticated
|
:statuscode 403: unauthenticated
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
|
|
||||||
"""
|
"""
|
||||||
if data.get('destinations'):
|
if data.get('destinations'):
|
||||||
if data.get('private_key'):
|
if data.get('private_key'):
|
||||||
|
@ -439,28 +441,57 @@ class Certificates(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"id": 1,
|
"status": null,
|
||||||
"name": "cert1",
|
"cn": "*.test.example.net",
|
||||||
"description": "this is cert1",
|
"chain": "",
|
||||||
"bits": 2048,
|
"authority": {
|
||||||
"deleted": false,
|
|
||||||
"issuer": "ExampeInc.",
|
|
||||||
"serial": "123450",
|
|
||||||
"chain": "-----Begin ...",
|
|
||||||
"body": "-----Begin ...",
|
|
||||||
"san": true,
|
|
||||||
"owner": "bob@example.com",
|
|
||||||
"active": true,
|
"active": true,
|
||||||
"notBefore": "2015-06-05T17:09:39",
|
"owner": "secure@example.com",
|
||||||
"notAfter": "2015-06-10T17:09:39",
|
"id": 1,
|
||||||
"signingAlgorithm": "sha2",
|
"description": "verisign test authority",
|
||||||
"cn": "example.com",
|
"name": "verisign"
|
||||||
"status": "unknown"
|
},
|
||||||
|
"owner": "joe@example.com",
|
||||||
|
"serial": "82311058732025924142789179368889309156",
|
||||||
|
"id": 2288,
|
||||||
|
"issuer": "SymantecCorporation",
|
||||||
|
"notBefore": "2016-06-03T00:00:00+00:00",
|
||||||
|
"notAfter": "2018-01-12T23:59:59+00:00",
|
||||||
|
"destinations": [],
|
||||||
|
"bits": 2048,
|
||||||
|
"body": "-----BEGIN CERTIFICATE-----...",
|
||||||
|
"description": null,
|
||||||
|
"deleted": null,
|
||||||
|
"notifications": [{
|
||||||
|
"id": 1
|
||||||
|
}]
|
||||||
|
"signingAlgorithm": "sha256",
|
||||||
|
"user": {
|
||||||
|
"username": "jane",
|
||||||
|
"active": true,
|
||||||
|
"email": "jane@example.com",
|
||||||
|
"id": 2
|
||||||
|
},
|
||||||
|
"active": true,
|
||||||
|
"domains": [{
|
||||||
|
"sensitive": false,
|
||||||
|
"id": 1090,
|
||||||
|
"name": "*.test.example.net"
|
||||||
|
}],
|
||||||
|
"replaces": [],
|
||||||
|
"name": "WILDCARD.test.example.net-SymantecCorporation-20160603-20180112",
|
||||||
|
"roles": [{
|
||||||
|
"id": 464,
|
||||||
|
"description": "This is a google group based role created by Lemur",
|
||||||
|
"name": "joe@example.com"
|
||||||
|
}],
|
||||||
|
"san": null
|
||||||
}
|
}
|
||||||
|
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
:statuscode 403: unauthenticated
|
:statuscode 403: unauthenticated
|
||||||
|
|
||||||
"""
|
"""
|
||||||
return service.get(certificate_id)
|
return service.get(certificate_id)
|
||||||
|
|
||||||
|
@ -496,27 +527,57 @@ class Certificates(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
|
"status": null,
|
||||||
|
"cn": "*.test.example.net",
|
||||||
|
"chain": "",
|
||||||
|
"authority": {
|
||||||
|
"active": true,
|
||||||
|
"owner": "secure@example.com",
|
||||||
"id": 1,
|
"id": 1,
|
||||||
"name": "cert1",
|
"description": "verisign test authority",
|
||||||
"description": "this is cert1",
|
"name": "verisign"
|
||||||
|
},
|
||||||
|
"owner": "joe@example.com",
|
||||||
|
"serial": "82311058732025924142789179368889309156",
|
||||||
|
"id": 2288,
|
||||||
|
"issuer": "SymantecCorporation",
|
||||||
|
"notBefore": "2016-06-03T00:00:00+00:00",
|
||||||
|
"notAfter": "2018-01-12T23:59:59+00:00",
|
||||||
|
"destinations": [],
|
||||||
"bits": 2048,
|
"bits": 2048,
|
||||||
"deleted": false,
|
"body": "-----BEGIN CERTIFICATE-----...",
|
||||||
"issuer": "ExampeInc.",
|
"description": null,
|
||||||
"serial": "123450",
|
"deleted": null,
|
||||||
"chain": "-----Begin ...",
|
"notifications": [{
|
||||||
"body": "-----Begin ...",
|
"id": 1
|
||||||
"san": true,
|
}]
|
||||||
"owner": "jimbob@example.com",
|
"signingAlgorithm": "sha256",
|
||||||
"active": false,
|
"user": {
|
||||||
"notBefore": "2015-06-05T17:09:39",
|
"username": "jane",
|
||||||
"notAfter": "2015-06-10T17:09:39",
|
"active": true,
|
||||||
"cn": "example.com",
|
"email": "jane@example.com",
|
||||||
"status": "unknown",
|
"id": 2
|
||||||
|
},
|
||||||
|
"active": true,
|
||||||
|
"domains": [{
|
||||||
|
"sensitive": false,
|
||||||
|
"id": 1090,
|
||||||
|
"name": "*.test.example.net"
|
||||||
|
}],
|
||||||
|
"replaces": [],
|
||||||
|
"name": "WILDCARD.test.example.net-SymantecCorporation-20160603-20180112",
|
||||||
|
"roles": [{
|
||||||
|
"id": 464,
|
||||||
|
"description": "This is a google group based role created by Lemur",
|
||||||
|
"name": "joe@example.com"
|
||||||
|
}],
|
||||||
|
"san": null
|
||||||
}
|
}
|
||||||
|
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
:statuscode 403: unauthenticated
|
:statuscode 403: unauthenticated
|
||||||
|
|
||||||
"""
|
"""
|
||||||
cert = service.get(certificate_id)
|
cert = service.get(certificate_id)
|
||||||
|
|
||||||
|
@ -568,27 +629,53 @@ class NotificationCertificatesList(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"items": [
|
"items": [{
|
||||||
{
|
"status": null,
|
||||||
"id": 1,
|
"cn": "*.test.example.net",
|
||||||
"name": "cert1",
|
"chain": "",
|
||||||
"description": "this is cert1",
|
"authority": {
|
||||||
"bits": 2048,
|
|
||||||
"deleted": false,
|
|
||||||
"issuer": "ExampeInc.",
|
|
||||||
"serial": "123450",
|
|
||||||
"chain": "-----Begin ...",
|
|
||||||
"body": "-----Begin ...",
|
|
||||||
"san": true,
|
|
||||||
"owner": 'bob@example.com",
|
|
||||||
"active": true,
|
"active": true,
|
||||||
"notBefore": "2015-06-05T17:09:39",
|
"owner": "secure@example.com",
|
||||||
"notAfter": "2015-06-10T17:09:39",
|
"id": 1,
|
||||||
"signingAlgorithm": "sha2",
|
"description": "verisign test authority",
|
||||||
"cn": "example.com",
|
"name": "verisign"
|
||||||
"status": "unknown"
|
},
|
||||||
}
|
"owner": "joe@example.com",
|
||||||
]
|
"serial": "82311058732025924142789179368889309156",
|
||||||
|
"id": 2288,
|
||||||
|
"issuer": "SymantecCorporation",
|
||||||
|
"notBefore": "2016-06-03T00:00:00+00:00",
|
||||||
|
"notAfter": "2018-01-12T23:59:59+00:00",
|
||||||
|
"destinations": [],
|
||||||
|
"bits": 2048,
|
||||||
|
"body": "-----BEGIN CERTIFICATE-----...",
|
||||||
|
"description": null,
|
||||||
|
"deleted": null,
|
||||||
|
"notifications": [{
|
||||||
|
"id": 1
|
||||||
|
}]
|
||||||
|
"signingAlgorithm": "sha256",
|
||||||
|
"user": {
|
||||||
|
"username": "jane",
|
||||||
|
"active": true,
|
||||||
|
"email": "jane@example.com",
|
||||||
|
"id": 2
|
||||||
|
},
|
||||||
|
"active": true,
|
||||||
|
"domains": [{
|
||||||
|
"sensitive": false,
|
||||||
|
"id": 1090,
|
||||||
|
"name": "*.test.example.net"
|
||||||
|
}],
|
||||||
|
"replaces": [],
|
||||||
|
"name": "WILDCARD.test.example.net-SymantecCorporation-20160603-20180112",
|
||||||
|
"roles": [{
|
||||||
|
"id": 464,
|
||||||
|
"description": "This is a google group based role created by Lemur",
|
||||||
|
"name": "joe@example.com"
|
||||||
|
}],
|
||||||
|
"san": null
|
||||||
|
}],
|
||||||
"total": 1
|
"total": 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -596,10 +683,11 @@ class NotificationCertificatesList(AuthenticatedResource):
|
||||||
:query sortDir: acs or desc
|
:query sortDir: acs or desc
|
||||||
:query page: int default is 1
|
:query page: int default is 1
|
||||||
:query filter: key value pair format is k;v
|
:query filter: key value pair format is k;v
|
||||||
:query limit: limit number default is 10
|
:query count: count number default is 10
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
:statuscode 403: unauthenticated
|
:statuscode 403: unauthenticated
|
||||||
|
|
||||||
"""
|
"""
|
||||||
parser = paginated_parser.copy()
|
parser = paginated_parser.copy()
|
||||||
parser.add_argument('timeRange', type=int, dest='time_range', location='args')
|
parser.add_argument('timeRange', type=int, dest='time_range', location='args')
|
||||||
|
@ -643,29 +731,61 @@ class CertificatesReplacementsList(AuthenticatedResource):
|
||||||
Vary: Accept
|
Vary: Accept
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
[{
|
{
|
||||||
"id": 1,
|
"items": [{
|
||||||
"name": "cert1",
|
"status": null,
|
||||||
"description": "this is cert1",
|
"cn": "*.test.example.net",
|
||||||
"bits": 2048,
|
"chain": "",
|
||||||
"deleted": false,
|
"authority": {
|
||||||
"issuer": "ExampeInc.",
|
|
||||||
"serial": "123450",
|
|
||||||
"chain": "-----Begin ...",
|
|
||||||
"body": "-----Begin ...",
|
|
||||||
"san": true,
|
|
||||||
"owner": "bob@example.com",
|
|
||||||
"active": true,
|
"active": true,
|
||||||
"notBefore": "2015-06-05T17:09:39",
|
"owner": "secure@example.com",
|
||||||
"notAfter": "2015-06-10T17:09:39",
|
"id": 1,
|
||||||
"signingAlgorithm": "sha2",
|
"description": "verisign test authority",
|
||||||
"cn": "example.com",
|
"name": "verisign"
|
||||||
"status": "unknown"
|
},
|
||||||
|
"owner": "joe@example.com",
|
||||||
|
"serial": "82311058732025924142789179368889309156",
|
||||||
|
"id": 2288,
|
||||||
|
"issuer": "SymantecCorporation",
|
||||||
|
"notBefore": "2016-06-03T00:00:00+00:00",
|
||||||
|
"notAfter": "2018-01-12T23:59:59+00:00",
|
||||||
|
"destinations": [],
|
||||||
|
"bits": 2048,
|
||||||
|
"body": "-----BEGIN CERTIFICATE-----...",
|
||||||
|
"description": null,
|
||||||
|
"deleted": null,
|
||||||
|
"notifications": [{
|
||||||
|
"id": 1
|
||||||
}]
|
}]
|
||||||
|
"signingAlgorithm": "sha256",
|
||||||
|
"user": {
|
||||||
|
"username": "jane",
|
||||||
|
"active": true,
|
||||||
|
"email": "jane@example.com",
|
||||||
|
"id": 2
|
||||||
|
},
|
||||||
|
"active": true,
|
||||||
|
"domains": [{
|
||||||
|
"sensitive": false,
|
||||||
|
"id": 1090,
|
||||||
|
"name": "*.test.example.net"
|
||||||
|
}],
|
||||||
|
"replaces": [],
|
||||||
|
"name": "WILDCARD.test.example.net-SymantecCorporation-20160603-20180112",
|
||||||
|
"roles": [{
|
||||||
|
"id": 464,
|
||||||
|
"description": "This is a google group based role created by Lemur",
|
||||||
|
"name": "joe@example.com"
|
||||||
|
}],
|
||||||
|
"san": null
|
||||||
|
}],
|
||||||
|
"total": 1
|
||||||
|
}
|
||||||
|
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
:statuscode 403: unauthenticated
|
:statuscode 403: unauthenticated
|
||||||
|
|
||||||
"""
|
"""
|
||||||
return service.get(certificate_id).replaces
|
return service.get(certificate_id).replaces
|
||||||
|
|
||||||
|
@ -740,6 +860,7 @@ class CertificateExport(AuthenticatedResource):
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
:statuscode 403: unauthenticated
|
:statuscode 403: unauthenticated
|
||||||
|
|
||||||
"""
|
"""
|
||||||
cert = service.get(certificate_id)
|
cert = service.get(certificate_id)
|
||||||
|
|
||||||
|
|
|
@ -52,24 +52,32 @@ class DestinationsList(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"items": [
|
"items": [{
|
||||||
{
|
"description": "test",
|
||||||
"destinationOptions": [
|
"options": [{
|
||||||
{
|
|
||||||
"name": "accountNumber",
|
"name": "accountNumber",
|
||||||
"required": true,
|
"required": true,
|
||||||
"value": 111111111112,
|
"value": "111111111111111",
|
||||||
"helpMessage": "Must be a valid AWS account number!",
|
"helpMessage": "Must be a valid AWS account number!",
|
||||||
"validation": "/^[0-9]{12,12}$/",
|
"validation": "/^[0-9]{12,12}$/",
|
||||||
"type": "int"
|
"type": "str"
|
||||||
|
}],
|
||||||
|
"id": 4,
|
||||||
|
"plugin": {
|
||||||
|
"pluginOptions": [{
|
||||||
|
"name": "accountNumber",
|
||||||
|
"required": true,
|
||||||
|
"value": "111111111111111",
|
||||||
|
"helpMessage": "Must be a valid AWS account number!",
|
||||||
|
"validation": "/^[0-9]{12,12}$/",
|
||||||
|
"type": "str"
|
||||||
|
}],
|
||||||
|
"description": "Allow the uploading of certificates to AWS IAM",
|
||||||
|
"slug": "aws-destination",
|
||||||
|
"title": "AWS"
|
||||||
|
},
|
||||||
|
"label": "test546"
|
||||||
}
|
}
|
||||||
],
|
|
||||||
"pluginName": "aws-destination",
|
|
||||||
"id": 3,
|
|
||||||
"description": "test",
|
|
||||||
"label": "test"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"total": 1
|
"total": 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -77,7 +85,7 @@ class DestinationsList(AuthenticatedResource):
|
||||||
:query sortDir: acs or desc
|
:query sortDir: acs or desc
|
||||||
:query page: int. default is 1
|
:query page: int. default is 1
|
||||||
:query filter: key value pair format is k;v
|
:query filter: key value pair format is k;v
|
||||||
:query limit: limit number default is 10
|
:query count: count number default is 10
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
"""
|
"""
|
||||||
|
@ -102,20 +110,30 @@ class DestinationsList(AuthenticatedResource):
|
||||||
Accept: application/json, text/javascript
|
Accept: application/json, text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"destinationOptions": [
|
"description": "test33",
|
||||||
{
|
"options": [{
|
||||||
"name": "accountNumber",
|
"name": "accountNumber",
|
||||||
"required": true,
|
"required": true,
|
||||||
"value": 111111111112,
|
"value": "34324324",
|
||||||
"helpMessage": "Must be a valid AWS account number!",
|
"helpMessage": "Must be a valid AWS account number!",
|
||||||
"validation": "/^[0-9]{12,12}$/",
|
"validation": "/^[0-9]{12,12}$/",
|
||||||
"type": "int"
|
"type": "str"
|
||||||
}
|
}],
|
||||||
],
|
"id": 4,
|
||||||
"pluginName": "aws-destination",
|
"plugin": {
|
||||||
"id": 3,
|
"pluginOptions": [{
|
||||||
"description": "test",
|
"name": "accountNumber",
|
||||||
"label": "test"
|
"required": true,
|
||||||
|
"value": "34324324",
|
||||||
|
"helpMessage": "Must be a valid AWS account number!",
|
||||||
|
"validation": "/^[0-9]{12,12}$/",
|
||||||
|
"type": "str"
|
||||||
|
}],
|
||||||
|
"description": "Allow the uploading of certificates to AWS IAM",
|
||||||
|
"slug": "aws-destination",
|
||||||
|
"title": "AWS"
|
||||||
|
},
|
||||||
|
"label": "test546"
|
||||||
}
|
}
|
||||||
|
|
||||||
**Example response**:
|
**Example response**:
|
||||||
|
@ -127,20 +145,30 @@ class DestinationsList(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"destinationOptions": [
|
"description": "test33",
|
||||||
{
|
"options": [{
|
||||||
"name": "accountNumber",
|
"name": "accountNumber",
|
||||||
"required": true,
|
"required": true,
|
||||||
"value": 111111111112,
|
"value": "34324324",
|
||||||
"helpMessage": "Must be a valid AWS account number!",
|
"helpMessage": "Must be a valid AWS account number!",
|
||||||
"validation": "/^[0-9]{12,12}$/",
|
"validation": "/^[0-9]{12,12}$/",
|
||||||
"type": "int"
|
"type": "str"
|
||||||
}
|
}],
|
||||||
],
|
"id": 4,
|
||||||
"pluginName": "aws-destination",
|
"plugin": {
|
||||||
"id": 3,
|
"pluginOptions": [{
|
||||||
"description": "test",
|
"name": "accountNumber",
|
||||||
"label": "test"
|
"required": true,
|
||||||
|
"value": "111111111111111",
|
||||||
|
"helpMessage": "Must be a valid AWS account number!",
|
||||||
|
"validation": "/^[0-9]{12,12}$/",
|
||||||
|
"type": "str"
|
||||||
|
}],
|
||||||
|
"description": "Allow the uploading of certificates to AWS IAM",
|
||||||
|
"slug": "aws-destination",
|
||||||
|
"title": "AWS"
|
||||||
|
},
|
||||||
|
"label": "test546"
|
||||||
}
|
}
|
||||||
|
|
||||||
:arg label: human readable account label
|
:arg label: human readable account label
|
||||||
|
@ -180,20 +208,30 @@ class Destinations(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"destinationOptions": [
|
"description": "test",
|
||||||
{
|
"options": [{
|
||||||
"name": "accountNumber",
|
"name": "accountNumber",
|
||||||
"required": true,
|
"required": true,
|
||||||
"value": 111111111112,
|
"value": "111111111111111",
|
||||||
"helpMessage": "Must be a valid AWS account number!",
|
"helpMessage": "Must be a valid AWS account number!",
|
||||||
"validation": "/^[0-9]{12,12}$/",
|
"validation": "/^[0-9]{12,12}$/",
|
||||||
"type": "int"
|
"type": "str"
|
||||||
}
|
}],
|
||||||
],
|
"id": 4,
|
||||||
"pluginName": "aws-destination",
|
"plugin": {
|
||||||
"id": 3,
|
"pluginOptions": [{
|
||||||
"description": "test",
|
"name": "accountNumber",
|
||||||
"label": "test"
|
"required": true,
|
||||||
|
"value": "111111111111111",
|
||||||
|
"helpMessage": "Must be a valid AWS account number!",
|
||||||
|
"validation": "/^[0-9]{12,12}$/",
|
||||||
|
"type": "str"
|
||||||
|
}],
|
||||||
|
"description": "Allow the uploading of certificates to AWS IAM",
|
||||||
|
"slug": "aws-destination",
|
||||||
|
"title": "AWS"
|
||||||
|
},
|
||||||
|
"label": "test546"
|
||||||
}
|
}
|
||||||
|
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
|
@ -217,23 +255,35 @@ class Destinations(AuthenticatedResource):
|
||||||
Host: example.com
|
Host: example.com
|
||||||
Accept: application/json, text/javascript
|
Accept: application/json, text/javascript
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
"destinationOptions": [
|
"description": "test33",
|
||||||
{
|
"options": [{
|
||||||
"name": "accountNumber",
|
"name": "accountNumber",
|
||||||
"required": true,
|
"required": true,
|
||||||
"value": 111111111112,
|
"value": "34324324",
|
||||||
"helpMessage": "Must be a valid AWS account number!",
|
"helpMessage": "Must be a valid AWS account number!",
|
||||||
"validation": "/^[0-9]{12,12}$/",
|
"validation": "/^[0-9]{12,12}$/",
|
||||||
"type": "int"
|
"type": "str"
|
||||||
}
|
}],
|
||||||
],
|
"id": 4,
|
||||||
"pluginName": "aws-destination",
|
"plugin": {
|
||||||
"id": 3,
|
"pluginOptions": [{
|
||||||
"description": "test",
|
"name": "accountNumber",
|
||||||
"label": "test"
|
"required": true,
|
||||||
|
"value": "34324324",
|
||||||
|
"helpMessage": "Must be a valid AWS account number!",
|
||||||
|
"validation": "/^[0-9]{12,12}$/",
|
||||||
|
"type": "str"
|
||||||
|
}],
|
||||||
|
"description": "Allow the uploading of certificates to AWS IAM",
|
||||||
|
"slug": "aws-destination",
|
||||||
|
"title": "AWS"
|
||||||
|
},
|
||||||
|
"label": "test546"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
**Example response**:
|
**Example response**:
|
||||||
|
|
||||||
.. sourcecode:: http
|
.. sourcecode:: http
|
||||||
|
@ -243,20 +293,30 @@ class Destinations(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"destinationOptions": [
|
"description": "test",
|
||||||
{
|
"options": [{
|
||||||
"name": "accountNumber",
|
"name": "accountNumber",
|
||||||
"required": true,
|
"required": true,
|
||||||
"value": 111111111112,
|
"value": "111111111111111",
|
||||||
"helpMessage": "Must be a valid AWS account number!",
|
"helpMessage": "Must be a valid AWS account number!",
|
||||||
"validation": "/^[0-9]{12,12}$/",
|
"validation": "/^[0-9]{12,12}$/",
|
||||||
"type": "int"
|
"type": "str"
|
||||||
}
|
}],
|
||||||
],
|
"id": 4,
|
||||||
"pluginName": "aws-destination",
|
"plugin": {
|
||||||
"id": 3,
|
"pluginOptions": [{
|
||||||
"description": "test",
|
"name": "accountNumber",
|
||||||
"label": "test"
|
"required": true,
|
||||||
|
"value": "111111111111111",
|
||||||
|
"helpMessage": "Must be a valid AWS account number!",
|
||||||
|
"validation": "/^[0-9]{12,12}$/",
|
||||||
|
"type": "str"
|
||||||
|
}],
|
||||||
|
"description": "Allow the uploading of certificates to AWS IAM",
|
||||||
|
"slug": "aws-destination",
|
||||||
|
"title": "AWS"
|
||||||
|
},
|
||||||
|
"label": "test546"
|
||||||
}
|
}
|
||||||
|
|
||||||
:arg accountNumber: aws account number
|
:arg accountNumber: aws account number
|
||||||
|
@ -302,24 +362,32 @@ class CertificateDestinations(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"items": [
|
"items": [{
|
||||||
{
|
"description": "test",
|
||||||
"destinationOptions": [
|
"options": [{
|
||||||
{
|
|
||||||
"name": "accountNumber",
|
"name": "accountNumber",
|
||||||
"required": true,
|
"required": true,
|
||||||
"value": 111111111112,
|
"value": "111111111111111",
|
||||||
"helpMessage": "Must be a valid AWS account number!",
|
"helpMessage": "Must be a valid AWS account number!",
|
||||||
"validation": "/^[0-9]{12,12}$/",
|
"validation": "/^[0-9]{12,12}$/",
|
||||||
"type": "int"
|
"type": "str"
|
||||||
|
}],
|
||||||
|
"id": 4,
|
||||||
|
"plugin": {
|
||||||
|
"pluginOptions": [{
|
||||||
|
"name": "accountNumber",
|
||||||
|
"required": true,
|
||||||
|
"value": "111111111111111",
|
||||||
|
"helpMessage": "Must be a valid AWS account number!",
|
||||||
|
"validation": "/^[0-9]{12,12}$/",
|
||||||
|
"type": "str"
|
||||||
|
}],
|
||||||
|
"description": "Allow the uploading of certificates to AWS IAM",
|
||||||
|
"slug": "aws-destination",
|
||||||
|
"title": "AWS"
|
||||||
|
},
|
||||||
|
"label": "test546"
|
||||||
}
|
}
|
||||||
],
|
|
||||||
"pluginName": "aws-destination",
|
|
||||||
"id": 3,
|
|
||||||
"description": "test",
|
|
||||||
"label": "test"
|
|
||||||
}
|
|
||||||
],
|
|
||||||
"total": 1
|
"total": 1
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -327,7 +395,7 @@ class CertificateDestinations(AuthenticatedResource):
|
||||||
:query sortDir: acs or desc
|
:query sortDir: acs or desc
|
||||||
:query page: int default is 1
|
:query page: int default is 1
|
||||||
:query filter: key value pair format is k;v
|
:query filter: key value pair format is k;v
|
||||||
:query limit: limit number default is 10
|
:query count: count number default is 10
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -71,7 +71,7 @@ class DomainsList(AuthenticatedResource):
|
||||||
:query sortDir: acs or desc
|
:query sortDir: acs or desc
|
||||||
:query page: int default is 1
|
:query page: int default is 1
|
||||||
:query filter: key value pair format is k;v
|
:query filter: key value pair format is k;v
|
||||||
:query limit: limit number. default is 10
|
:query count: count number. default is 10
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
:statuscode 403: unauthenticated
|
:statuscode 403: unauthenticated
|
||||||
|
@ -118,7 +118,7 @@ class DomainsList(AuthenticatedResource):
|
||||||
:query sortDir: acs or desc
|
:query sortDir: acs or desc
|
||||||
:query page: int default is 1
|
:query page: int default is 1
|
||||||
:query filter: key value pair format is k;v
|
:query filter: key value pair format is k;v
|
||||||
:query limit: limit number default is 10
|
:query count: count number default is 10
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
:statuscode 403: unauthenticated
|
:statuscode 403: unauthenticated
|
||||||
|
@ -258,7 +258,7 @@ class CertificateDomains(AuthenticatedResource):
|
||||||
:query sortDir: acs or desc
|
:query sortDir: acs or desc
|
||||||
:query page: int default is 1
|
:query page: int default is 1
|
||||||
:query filter: key value pair format is k;v
|
:query filter: key value pair format is k;v
|
||||||
:query limit: limit number default is 10
|
:query count: count number default is 10
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
:statuscode 403: unauthenticated
|
:statuscode 403: unauthenticated
|
||||||
|
|
|
@ -54,7 +54,7 @@ class NotificationsList(AuthenticatedResource):
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"description": "An example",
|
"description": "An example",
|
||||||
"notificationOptions": [
|
"options": [
|
||||||
{
|
{
|
||||||
"name": "interval",
|
"name": "interval",
|
||||||
"required": true,
|
"required": true,
|
||||||
|
@ -98,7 +98,7 @@ class NotificationsList(AuthenticatedResource):
|
||||||
:query sortDir: acs or desc
|
:query sortDir: acs or desc
|
||||||
:query page: int default is 1
|
:query page: int default is 1
|
||||||
:query filter: key value pair format is k;v
|
:query filter: key value pair format is k;v
|
||||||
:query limit: limit number default is 10
|
:query count: count number default is 10
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
"""
|
"""
|
||||||
|
@ -124,7 +124,7 @@ class NotificationsList(AuthenticatedResource):
|
||||||
|
|
||||||
{
|
{
|
||||||
"description": "a test",
|
"description": "a test",
|
||||||
"notificationOptions": [
|
"options": [
|
||||||
{
|
{
|
||||||
"name": "interval",
|
"name": "interval",
|
||||||
"required": true,
|
"required": true,
|
||||||
|
@ -171,7 +171,7 @@ class NotificationsList(AuthenticatedResource):
|
||||||
|
|
||||||
{
|
{
|
||||||
"description": "a test",
|
"description": "a test",
|
||||||
"notificationOptions": [
|
"options": [
|
||||||
{
|
{
|
||||||
"name": "interval",
|
"name": "interval",
|
||||||
"required": true,
|
"required": true,
|
||||||
|
@ -253,7 +253,7 @@ class Notifications(AuthenticatedResource):
|
||||||
|
|
||||||
{
|
{
|
||||||
"description": "a test",
|
"description": "a test",
|
||||||
"notificationOptions": [
|
"options": [
|
||||||
{
|
{
|
||||||
"name": "interval",
|
"name": "interval",
|
||||||
"required": true,
|
"required": true,
|
||||||
|
@ -378,7 +378,7 @@ class CertificateNotifications(AuthenticatedResource):
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"description": "An example",
|
"description": "An example",
|
||||||
"notificationOptions": [
|
"options": [
|
||||||
{
|
{
|
||||||
"name": "interval",
|
"name": "interval",
|
||||||
"required": true,
|
"required": true,
|
||||||
|
@ -422,7 +422,7 @@ class CertificateNotifications(AuthenticatedResource):
|
||||||
:query sortDir: acs or desc
|
:query sortDir: acs or desc
|
||||||
:query page: int default is 1
|
:query page: int default is 1
|
||||||
:query filter: key value pair format is k;v
|
:query filter: key value pair format is k;v
|
||||||
:query limit: limit number default is 10
|
:query count: count number default is 10
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
"""
|
"""
|
||||||
from marshmallow import fields
|
from marshmallow import fields
|
||||||
from lemur.users.schemas import UserNestedOutputSchema
|
from lemur.users.schemas import UserNestedOutputSchema
|
||||||
from lemur.authorities.schemas import AuthorityOutputSchema
|
from lemur.authorities.schemas import AuthorityNestedOutputSchema
|
||||||
from lemur.common.schema import LemurInputSchema, LemurOutputSchema
|
from lemur.common.schema import LemurInputSchema, LemurOutputSchema
|
||||||
from lemur.schemas import AssociatedUserSchema, AssociatedAuthoritySchema
|
from lemur.schemas import AssociatedUserSchema, AssociatedAuthoritySchema
|
||||||
|
|
||||||
|
@ -26,7 +26,7 @@ class RoleOutputSchema(LemurOutputSchema):
|
||||||
id = fields.Integer()
|
id = fields.Integer()
|
||||||
name = fields.String()
|
name = fields.String()
|
||||||
description = fields.String()
|
description = fields.String()
|
||||||
authorities = fields.Nested(AuthorityOutputSchema, many=True)
|
authorities = fields.Nested(AuthorityNestedOutputSchema, many=True)
|
||||||
users = fields.Nested(UserNestedOutputSchema, many=True)
|
users = fields.Nested(UserNestedOutputSchema, many=True)
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -73,7 +73,7 @@ class RolesList(AuthenticatedResource):
|
||||||
:query sortDir: acs or desc
|
:query sortDir: acs or desc
|
||||||
:query page: int default is 1
|
:query page: int default is 1
|
||||||
:query filter: key value pair format is k;v
|
:query filter: key value pair format is k;v
|
||||||
:query limit: limit number default is 10
|
:query count: count number default is 10
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
:statuscode 403: unauthenticated
|
:statuscode 403: unauthenticated
|
||||||
|
@ -354,7 +354,7 @@ class UserRolesList(AuthenticatedResource):
|
||||||
:query sortDir: acs or desc
|
:query sortDir: acs or desc
|
||||||
:query page: int default is 1
|
:query page: int default is 1
|
||||||
:query filter: key value pair format is k;v
|
:query filter: key value pair format is k;v
|
||||||
:query limit: limit number default is 10
|
:query count: count number default is 10
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
"""
|
"""
|
||||||
|
@ -413,7 +413,7 @@ class AuthorityRolesList(AuthenticatedResource):
|
||||||
:query sortDir: acs or desc
|
:query sortDir: acs or desc
|
||||||
:query page: int default is 1
|
:query page: int default is 1
|
||||||
:query filter: key value pair format is k;v
|
:query filter: key value pair format is k;v
|
||||||
:query limit: limit number default is 10
|
:query count: count number default is 10
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -54,7 +54,7 @@ class SourcesList(AuthenticatedResource):
|
||||||
{
|
{
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"sourceOptions": [
|
"options": [
|
||||||
{
|
{
|
||||||
"name": "accountNumber",
|
"name": "accountNumber",
|
||||||
"required": true,
|
"required": true,
|
||||||
|
@ -78,7 +78,7 @@ class SourcesList(AuthenticatedResource):
|
||||||
:query sortDir: acs or desc
|
:query sortDir: acs or desc
|
||||||
:query page: int default is 1
|
:query page: int default is 1
|
||||||
:query filter: key value pair format is k;v
|
:query filter: key value pair format is k;v
|
||||||
:query limit: limit number default is 10
|
:query count: count number default is 10
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
"""
|
"""
|
||||||
|
@ -103,7 +103,7 @@ class SourcesList(AuthenticatedResource):
|
||||||
Accept: application/json, text/javascript
|
Accept: application/json, text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"sourceOptions": [
|
"options": [
|
||||||
{
|
{
|
||||||
"name": "accountNumber",
|
"name": "accountNumber",
|
||||||
"required": true,
|
"required": true,
|
||||||
|
@ -129,7 +129,7 @@ class SourcesList(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"sourceOptions": [
|
"options": [
|
||||||
{
|
{
|
||||||
"name": "accountNumber",
|
"name": "accountNumber",
|
||||||
"required": true,
|
"required": true,
|
||||||
|
@ -183,7 +183,7 @@ class Sources(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"sourceOptions": [
|
"options": [
|
||||||
{
|
{
|
||||||
"name": "accountNumber",
|
"name": "accountNumber",
|
||||||
"required": true,
|
"required": true,
|
||||||
|
@ -222,7 +222,7 @@ class Sources(AuthenticatedResource):
|
||||||
Accept: application/json, text/javascript
|
Accept: application/json, text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"sourceOptions": [
|
"options": [
|
||||||
{
|
{
|
||||||
"name": "accountNumber",
|
"name": "accountNumber",
|
||||||
"required": true,
|
"required": true,
|
||||||
|
@ -248,7 +248,7 @@ class Sources(AuthenticatedResource):
|
||||||
Content-Type: text/javascript
|
Content-Type: text/javascript
|
||||||
|
|
||||||
{
|
{
|
||||||
"sourceOptions": [
|
"options": [
|
||||||
{
|
{
|
||||||
"name": "accountNumber",
|
"name": "accountNumber",
|
||||||
"required": true,
|
"required": true,
|
||||||
|
@ -310,7 +310,7 @@ class CertificateSources(AuthenticatedResource):
|
||||||
{
|
{
|
||||||
"items": [
|
"items": [
|
||||||
{
|
{
|
||||||
"sourceOptions": [
|
"options": [
|
||||||
{
|
{
|
||||||
"name": "accountNumber",
|
"name": "accountNumber",
|
||||||
"required": true,
|
"required": true,
|
||||||
|
@ -334,7 +334,7 @@ class CertificateSources(AuthenticatedResource):
|
||||||
:query sortDir: acs or desc
|
:query sortDir: acs or desc
|
||||||
:query page: int default is 1
|
:query page: int default is 1
|
||||||
:query filter: key value pair format is k;v
|
:query filter: key value pair format is k;v
|
||||||
:query limit: limit number default is 10
|
:query count: count number default is 10
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
"""
|
"""
|
||||||
|
|
|
@ -78,7 +78,7 @@ class UsersList(AuthenticatedResource):
|
||||||
:query sortDir: acs or desc
|
:query sortDir: acs or desc
|
||||||
:query page: int default is 1
|
:query page: int default is 1
|
||||||
:query filter: key value pair format is k;v
|
:query filter: key value pair format is k;v
|
||||||
:query limit: limit number default is 10
|
:query count: count number default is 10
|
||||||
:reqheader Authorization: OAuth token to authenticate
|
:reqheader Authorization: OAuth token to authenticate
|
||||||
:statuscode 200: no error
|
:statuscode 200: no error
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in New Issue