Merge remote-tracking branch 'upstream/master'

This commit is contained in:
Curtis Castrapel 2018-08-22 13:18:03 -07:00
commit cdc385ea16
45 changed files with 246 additions and 207 deletions

View File

@ -1,29 +1,29 @@
{
"node": true,
"browser": true,
"esnext": true,
"bitwise": true,
"browser": true,
"camelcase": false,
"curly": true,
"eqeqeq": true,
"esnext": true,
"globals": {
"_": false,
"angular": false,
"d3": false,
"moment": false,
"self": false,
"toaster": false
},
"immed": true,
"indent": 2,
"latedef": false,
"newcap": false,
"noarg": true,
"node": true,
"quotmark": "single",
"regexp": true,
"undef": true,
"unused": true,
"smarttabs": true,
"strict": true,
"trailing": true,
"smarttabs": true,
"globals": {
"angular": false,
"moment": false,
"toaster": false,
"d3": false,
"self": false,
"_": false
}
"undef": true,
"unused": true
}

View File

@ -4,6 +4,12 @@
- id: trailing-whitespace
- id: flake8
- id: check-merge-conflict
- id: pretty-format-json
- id: check-ast
- id: check-case-conflict
- id: check-yaml
- id: autopep8-wrapper
- repo: git://github.com/pre-commit/mirrors-jshint
sha: v2.9.5
hooks:

View File

@ -1,50 +1,39 @@
{
"name": "lemur",
"repository": {
"type": "git",
"url": "git://github.com/netflix/lemur.git"
},
"private": true,
"dependencies": {
"jquery": "~2.2.0",
"angular-wizard": "~0.4.0",
"angular": "1.4.9",
"json3": "~3.3",
"es5-shim": "~4.5.0",
"bootstrap": "~3.3.6",
"angular-bootstrap": "~1.1.1",
"angular-animate": "~1.4.9",
"restangular": "~1.5.1",
"ng-table": "~0.8.3",
"moment": "~2.11.1",
"angular-bootstrap": "~1.1.1",
"angular-chart.js": "~0.8.8",
"angular-clipboard": "~1.3.0",
"angular-file-saver": "~1.0.1",
"angular-loading-bar": "~0.8.0",
"angular-moment": "~0.10.3",
"moment-range": "~2.1.0",
"angular-clipboard": "~1.3.0",
"angularjs-toaster": "~1.0.0",
"angular-chart.js": "~0.8.8",
"ngletteravatar": "~4.0.0",
"bootswatch": "~3.3.6",
"fontawesome": "~4.5.0",
"satellizer": "~0.13.4",
"angular-ui-router": "~0.2.15",
"font-awesome": "~4.5.0",
"lodash": "~4.0.1",
"underscore": "~1.8.3",
"angular-sanitize": "~1.5.0",
"angular-smart-table": "2.1.8",
"angular-strap": ">= 2.2.2",
"angular-underscore": "^0.5.0",
"angular-translate": "^2.9.0",
"angular-ui-switch": "~0.1.0",
"angular-sanitize": "~1.5.0",
"angular-file-saver": "~1.0.1",
"angular-ui-router": "~0.2.15",
"angular-ui-select": "~0.17.1",
"d3": "^3.5.17"
},
"resolutions": {
"moment": ">=2.8.0 <2.11.0",
"lodash": ">=1.3.0 <2.5.0",
"angular": "1.4.9"
"angular-ui-switch": "~0.1.0",
"angular-underscore": "^0.5.0",
"angular-wizard": "~0.4.0",
"angularjs-toaster": "~1.0.0",
"bootstrap": "~3.3.6",
"bootswatch": "~3.3.6",
"d3": "^3.5.17",
"es5-shim": "~4.5.0",
"font-awesome": "~4.5.0",
"fontawesome": "~4.5.0",
"jquery": "~2.2.0",
"json3": "~3.3",
"lodash": "~4.0.1",
"moment": "~2.11.1",
"moment-range": "~2.1.0",
"ng-table": "~0.8.3",
"ngletteravatar": "~4.0.0",
"restangular": "~1.5.1",
"satellizer": "~0.13.4",
"underscore": "~1.8.3"
},
"ignore": [
"**/.*",
@ -52,5 +41,16 @@
"bower_components",
"test",
"tests"
]
],
"name": "lemur",
"private": true,
"repository": {
"type": "git",
"url": "git://github.com/netflix/lemur.git"
},
"resolutions": {
"angular": "1.4.9",
"lodash": ">=1.3.0 <2.5.0",
"moment": ">=2.8.0 <2.11.0"
}
}

View File

@ -203,14 +203,14 @@ htmlhelp_basename = 'lemurdoc'
# -- Options for LaTeX output ---------------------------------------------
latex_elements = {
# The paper size ('letterpaper' or 'a4paper').
#'papersize': 'letterpaper',
# The paper size ('letterpaper' or 'a4paper').
# 'papersize': 'letterpaper',
# The font size ('10pt', '11pt' or '12pt').
#'pointsize': '10pt',
# The font size ('10pt', '11pt' or '12pt').
# 'pointsize': '10pt',
# Additional stuff for the LaTeX preamble.
#'preamble': '',
# Additional stuff for the LaTeX preamble.
# 'preamble': '',
}
# Grouping the document tree into LaTeX files. List of tuples

View File

@ -240,8 +240,8 @@ gulp.task('addUrlContextPath',['addUrlContextPath:revreplace'], function(){
.pipe(gulpif(urlContextPathExists, replace('angular/', argv.urlContextPath + '/angular/')))
.pipe(gulp.dest(function(file){
return file.base;
}))
})
}));
});
});
gulp.task('addUrlContextPath:revision', function(){
@ -249,16 +249,16 @@ gulp.task('addUrlContextPath:revision', function(){
.pipe(rev())
.pipe(gulp.dest('lemur/static/dist'))
.pipe(rev.manifest())
.pipe(gulp.dest('lemur/static/dist'))
})
.pipe(gulp.dest('lemur/static/dist'));
});
gulp.task('addUrlContextPath:revreplace', ['addUrlContextPath:revision'], function(){
var manifest = gulp.src("lemur/static/dist/rev-manifest.json");
var manifest = gulp.src('lemur/static/dist/rev-manifest.json');
var urlContextPathExists = argv.urlContextPath ? true : false;
return gulp.src( "lemur/static/dist/index.html")
return gulp.src('lemur/static/dist/index.html')
.pipe(gulpif(urlContextPathExists, revReplace({prefix: argv.urlContextPath + '/', manifest: manifest}, revReplace({manifest: manifest}))))
.pipe(gulp.dest('lemur/static/dist'));
})
});
gulp.task('build', ['build:ngviews', 'build:inject', 'build:images', 'build:fonts', 'build:html', 'build:extras']);

View File

@ -1,10 +1,12 @@
'use strict';
// Contents of: config/karma.conf.js
module.exports = function (config) {
config.set({
basePath : '../',
// Fix for "JASMINE is not supported anymore" warning
frameworks : ["jasmine"],
frameworks : ['jasmine'],
files : [
'app/lib/angular/angular.js',

View File

@ -3,7 +3,7 @@
var gulp = require('gulp');
var browserSync = require('browser-sync');
var httpProxy = require('http-proxy');
require('http-proxy');
/* This configuration allow you to configure browser sync to proxy your backend */
/*

View File

@ -18,6 +18,7 @@ class LdapPrincipal():
"""
Provides methods for authenticating against an LDAP server.
"""
def __init__(self, args):
self._ldap_validate_conf()
# setup ldap config

View File

@ -211,6 +211,7 @@ class Login(Resource):
on your uses cases but. It is important to not that there is currently no build in method to revoke a users token \
and force re-authentication.
"""
def __init__(self):
self.reqparse = reqparse.RequestParser()
super(Login, self).__init__()
@ -302,6 +303,7 @@ class Ping(Resource):
provider uses for its callbacks.
2. Add or change the Lemur AngularJS Configuration to point to your new provider
"""
def __init__(self):
self.reqparse = reqparse.RequestParser()
super(Ping, self).__init__()

View File

@ -25,6 +25,7 @@ api = Api(mod)
class AuthoritiesList(AuthenticatedResource):
""" Defines the 'authorities' endpoint """
def __init__(self):
self.reqparse = reqparse.RequestParser()
super(AuthoritiesList, self).__init__()

View File

@ -25,6 +25,7 @@ class Hex(Field):
"""
A hex formatted string.
"""
def _serialize(self, value, attr, obj):
if value:
value = hex(int(value))[2:].upper()
@ -317,6 +318,7 @@ class SubjectAlternativeNameExtension(Field):
:param kwargs: The same keyword arguments that :class:`Field` receives.
"""
def _serialize(self, value, attr, obj):
general_names = []
name_type = None

View File

@ -19,6 +19,7 @@ api = Api(mod)
class LemurDefaults(AuthenticatedResource):
""" Defines the 'defaults' endpoint """
def __init__(self):
super(LemurDefaults)

View File

@ -24,6 +24,7 @@ api = Api(mod)
class DestinationsList(AuthenticatedResource):
""" Defines the 'destinations' endpoint """
def __init__(self):
self.reqparse = reqparse.RequestParser()
super(DestinationsList, self).__init__()
@ -335,6 +336,7 @@ class Destinations(AuthenticatedResource):
class CertificateDestinations(AuthenticatedResource):
""" Defines the 'certificate/<int:certificate_id/destinations'' endpoint """
def __init__(self):
super(CertificateDestinations, self).__init__()
@ -407,6 +409,7 @@ class CertificateDestinations(AuthenticatedResource):
class DestinationsStats(AuthenticatedResource):
""" Defines the 'certificates' stats endpoint """
def __init__(self):
self.reqparse = reqparse.RequestParser()
super(DestinationsStats, self).__init__()

View File

@ -25,6 +25,7 @@ api = Api(mod)
class DomainsList(AuthenticatedResource):
""" Defines the 'domains' endpoint """
def __init__(self):
super(DomainsList, self).__init__()
@ -212,6 +213,7 @@ class Domains(AuthenticatedResource):
class CertificateDomains(AuthenticatedResource):
""" Defines the 'domains' endpoint """
def __init__(self):
super(CertificateDomains, self).__init__()

View File

@ -22,6 +22,7 @@ api = Api(mod)
class EndpointsList(AuthenticatedResource):
""" Defines the 'endpoints' endpoint """
def __init__(self):
self.reqparse = reqparse.RequestParser()
super(EndpointsList, self).__init__()

View File

@ -23,6 +23,7 @@ api = Api(mod)
class LogsList(AuthenticatedResource):
""" Defines the 'logs' endpoint """
def __init__(self):
self.reqparse = reqparse.RequestParser()
super(LogsList, self).__init__()

View File

@ -69,8 +69,8 @@ def run_migrations_online():
finally:
connection.close()
if context.is_offline_mode():
run_migrations_offline()
else:
run_migrations_online()

View File

@ -14,6 +14,7 @@ from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
def upgrade():
### commands auto generated by Alembic - please adjust! ###
op.create_table('certificate_replacement_associations',

View File

@ -74,6 +74,7 @@ def upgrade():
print("Creating dns_providers_id foreign key on pending_certs table")
op.create_foreign_key(None, 'pending_certs', 'dns_providers', ['dns_provider_id'], ['id'], ondelete='CASCADE')
def downgrade():
print("Removing dns_providers_id foreign key on pending_certs table")
op.drop_constraint(None, 'pending_certs', type_='foreignkey')

View File

@ -14,6 +14,7 @@ from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql
def upgrade():
### commands auto generated by Alembic - please adjust! ###
op.add_column('domains', sa.Column('sensitive', sa.Boolean(), nullable=True))

View File

@ -16,6 +16,7 @@ from lemur.utils import Vault
from sqlalchemy.dialects import postgresql
from sqlalchemy_utils import ArrowType
def upgrade():
# ### commands auto generated by Alembic - please adjust! ###
op.create_table('pending_certs',

View File

@ -32,7 +32,7 @@ def upgrade():
# If we've seen a pair already, delete the duplicates
if seen.get("{}-{}".format(x.certificate_id, x.notification_id)):
print("Deleting duplicate: {}".format(x))
d = session.query(certificate_notification_associations).filter(certificate_notification_associations.c.id==x.id)
d = session.query(certificate_notification_associations).filter(certificate_notification_associations.c.id == x.id)
d.delete(synchronize_session=False)
seen["{}-{}".format(x.certificate_id, x.notification_id)] = True
db.session.commit()

View File

@ -14,6 +14,7 @@ from alembic import op
import sqlalchemy as sa
import sqlalchemy_utils
def upgrade():
op.create_table('api_keys',
sa.Column('id', sa.Integer(), nullable=False),

View File

@ -30,6 +30,7 @@ def upgrade():
db.session.commit()
db.session.flush()
def downgrade():
op.drop_column(TABLE, "id")
db.session.commit()

View File

@ -14,6 +14,7 @@ from alembic import op
import sqlalchemy as sa
import sqlalchemy_utils
def upgrade():
### commands auto generated by Alembic - please adjust! ###
op.create_table('logs',

View File

@ -23,6 +23,7 @@ api = Api(mod)
class NotificationsList(AuthenticatedResource):
""" Defines the 'notifications' endpoint """
def __init__(self):
self.reqparse = reqparse.RequestParser()
super(NotificationsList, self).__init__()
@ -348,6 +349,7 @@ class Notifications(AuthenticatedResource):
class CertificateNotifications(AuthenticatedResource):
""" Defines the 'certificate/<int:certificate_id/notifications'' endpoint """
def __init__(self):
super(CertificateNotifications, self).__init__()

View File

@ -21,6 +21,7 @@ api = Api(mod)
class PluginsList(AuthenticatedResource):
""" Defines the 'plugins' endpoint """
def __init__(self):
self.reqparse = reqparse.RequestParser()
super(PluginsList, self).__init__()
@ -80,6 +81,7 @@ class PluginsList(AuthenticatedResource):
class Plugins(AuthenticatedResource):
""" Defines the 'plugins' endpoint """
def __init__(self):
super(Plugins, self).__init__()

View File

@ -26,6 +26,7 @@ api = Api(mod)
class RolesList(AuthenticatedResource):
""" Defines the 'roles' endpoint """
def __init__(self):
self.reqparse = reqparse.RequestParser()
super(RolesList, self).__init__()
@ -309,6 +310,7 @@ class Roles(AuthenticatedResource):
class UserRolesList(AuthenticatedResource):
""" Defines the 'roles' endpoint """
def __init__(self):
self.reqparse = reqparse.RequestParser()
super(UserRolesList, self).__init__()
@ -368,6 +370,7 @@ class UserRolesList(AuthenticatedResource):
class AuthorityRolesList(AuthenticatedResource):
""" Defines the 'roles' endpoint """
def __init__(self):
self.reqparse = reqparse.RequestParser()
super(AuthorityRolesList, self).__init__()

View File

@ -24,6 +24,7 @@ api = Api(mod)
class SourcesList(AuthenticatedResource):
""" Defines the 'sources' endpoint """
def __init__(self):
self.reqparse = reqparse.RequestParser()
super(SourcesList, self).__init__()
@ -281,6 +282,7 @@ class Sources(AuthenticatedResource):
class CertificateSources(AuthenticatedResource):
""" Defines the 'certificate/<int:certificate_id/sources'' endpoint """
def __init__(self):
super(CertificateSources, self).__init__()

View File

@ -1,23 +1,10 @@
{
"node": true,
"browser": true,
"esnext": true,
"bitwise": true,
"browser": true,
"camelcase": true,
"curly": true,
"eqeqeq": true,
"immed": true,
"indent": 2,
"latedef": true,
"newcap": true,
"noarg": true,
"quotmark": "single",
"regexp": true,
"undef": true,
"unused": true,
"strict": true,
"trailing": true,
"smarttabs": true,
"esnext": true,
"globals": {
"after": false,
"afterEach": false,
@ -31,6 +18,18 @@
"it": false,
"jasmine": false,
"spyOn": false
}
},
"immed": true,
"indent": 2,
"latedef": true,
"newcap": true,
"noarg": true,
"node": true,
"quotmark": "single",
"regexp": true,
"smarttabs": true,
"strict": true,
"trailing": true,
"undef": true,
"unused": true
}

View File

@ -27,6 +27,7 @@ api = Api(mod)
class UsersList(AuthenticatedResource):
""" Defines the 'users' endpoint """
def __init__(self):
self.reqparse = reqparse.RequestParser()
super(UsersList, self).__init__()

View File

@ -1,10 +1,4 @@
{
"name": "Lemur",
"private": true,
"repository": {
"type": "git",
"url": "git://github.com/netflix/lemur.git"
},
"dependencies": {
"bower": "^1.8.2",
"browser-sync": "^2.3.1",
@ -51,16 +45,22 @@
"uglify-save-license": "^0.4.1",
"yargs": "^7.0.2"
},
"scripts": {
"postinstall": "node_modules/.bin/bower install --allow-root --config.interactive=false",
"pretest": "npm install && npm run build_static",
"build_static": "gulp build",
"prelint": "npm install",
"lint": "jshint lemur/static/app/",
"test": "gulp test"
},
"devDependencies": {
"jshint": "^2.8.0",
"karma-chrome-launcher": "^2.0.0"
},
"name": "Lemur",
"private": true,
"repository": {
"type": "git",
"url": "git://github.com/netflix/lemur.git"
},
"scripts": {
"build_static": "gulp build",
"lint": "jshint lemur/static/app/",
"postinstall": "node_modules/.bin/bower install --allow-root --config.interactive=false",
"prelint": "npm install",
"pretest": "npm install && npm run build_static",
"test": "gulp test"
}
}

View File

@ -24,7 +24,7 @@ requests-toolbelt==0.8.0 # via twine
requests==2.19.1 # via requests-toolbelt, twine
six==1.11.0 # via cfgv, pre-commit
toml==0.9.4 # via pre-commit
tqdm==4.24.0 # via twine
tqdm==4.25.0 # via twine
twine==1.11.0
urllib3==1.23 # via requests
virtualenv==16.0.0 # via pre-commit

View File

@ -79,7 +79,7 @@ s3transfer==0.1.13
six==1.11.0
snowballstemmer==1.2.1 # via sphinx
sphinx-rtd-theme==0.4.1
sphinx==1.7.6
sphinx==1.7.7
sphinxcontrib-httpdomain==1.7.0
sphinxcontrib-websupport==1.1.0 # via sphinx
sqlalchemy-utils==0.33.3

View File

@ -8,9 +8,9 @@ asn1crypto==0.24.0 # via cryptography
atomicwrites==1.1.5 # via pytest
attrs==18.1.0 # via pytest
aws-xray-sdk==0.95 # via moto
boto3==1.7.79 # via moto
boto3==1.7.82 # via moto
boto==2.49.0 # via moto
botocore==1.10.79 # via boto3, moto, s3transfer
botocore==1.10.82 # via boto3, moto, s3transfer
certifi==2018.8.13 # via requests
cffi==1.11.5 # via cryptography
chardet==3.0.4 # via requests
@ -47,7 +47,7 @@ pycryptodome==3.6.6 # via python-jose
pyflakes==2.0.0
pytest-flask==0.10.0
pytest-mock==1.10.0
pytest==3.7.1
pytest==3.7.2
python-dateutil==2.7.3 # via botocore, faker, freezegun, moto
python-jose==2.0.2 # via moto
pytz==2018.5 # via moto
@ -59,7 +59,7 @@ s3transfer==0.1.13 # via boto3
six==1.11.0 # via cryptography, docker, docker-pycreds, faker, freezegun, mock, more-itertools, moto, pytest, python-dateutil, python-jose, requests-mock, responses, websocket-client
text-unidecode==1.2 # via faker
urllib3==1.23 # via requests
websocket-client==0.49.0 # via docker
websocket-client==0.51.0 # via docker
werkzeug==0.14.1 # via flask, moto, pytest-flask
wrapt==1.10.11 # via aws-xray-sdk
xmltodict==0.11.0 # via moto

View File

@ -13,8 +13,8 @@ asn1crypto==0.24.0 # via cryptography
asyncpool==1.0
bcrypt==3.1.4 # via flask-bcrypt, paramiko
blinker==1.4 # via flask-mail, flask-principal, raven
boto3==1.7.79
botocore==1.10.79 # via boto3, s3transfer
boto3==1.7.82
botocore==1.10.82 # via boto3, s3transfer
certifi==2018.8.13
cffi==1.11.5 # via bcrypt, cryptography, pynacl
chardet==3.0.4 # via requests
@ -73,7 +73,7 @@ retrying==1.3.3
s3transfer==0.1.13 # via boto3
six==1.11.0
sqlalchemy-utils==0.33.3
sqlalchemy==1.2.10 # via alembic, flask-sqlalchemy, marshmallow-sqlalchemy, sqlalchemy-utils
sqlalchemy==1.2.11 # via alembic, flask-sqlalchemy, marshmallow-sqlalchemy, sqlalchemy-utils
tabulate==0.8.2
urllib3==1.23 # via requests
werkzeug==0.14.1 # via flask

View File

@ -59,6 +59,7 @@ class SmartInstall(install):
If the package indicator is missing, this will also force a run of
`build_static` which is required for JavaScript assets and other things.
"""
def _needs_static(self):
return not os.path.exists(os.path.join(ROOT, 'lemur/static/dist'))