Rework login page to be AJAX/Vue.js based
This commit is contained in:
parent
175c335542
commit
d68d5141c8
@ -32,6 +32,7 @@ const FlitterUnits = {
|
||||
* available to the middleware-routing-controller stack.
|
||||
*/
|
||||
'Upload' : require('flitter-upload/UploadUnit'),
|
||||
'Less' : require('flitter-less/LessUnit'),
|
||||
'LDAPServer' : require('./app/unit/LDAPServerUnit'),
|
||||
'LDAPMiddleware': require('./app/unit/LDAPMiddlewareUnit'),
|
||||
'LDAPController': require('./app/unit/LDAPControllerUnit'),
|
||||
|
125
app/assets/app/auth/login/Form.component.js
Normal file
125
app/assets/app/auth/login/Form.component.js
Normal file
@ -0,0 +1,125 @@
|
||||
import { Component } from '../../../lib/vues6/vues6.js'
|
||||
import { auth_api } from '../../service/AuthApi.service.js'
|
||||
import { location_service } from '../../service/Location.service.js'
|
||||
|
||||
const template = `
|
||||
<div class="coreid-login-form col-lg-6 col-md-8 col-sm-10 col-xs-12 offset-lg-3 offset-md-2 offset-sm-1 offset-xs-0 text-left">
|
||||
<div class="coreid-login-form-inner">
|
||||
<div class="coreid-login-form-header font-weight-light">{{ app_name }}</div>
|
||||
<div class="coreid-login-form-message">{{ login_message }}</div>
|
||||
<form class="coreid-form" v-on:submit.prevent="do_nothing">
|
||||
<div class="form-group">
|
||||
<input
|
||||
type="text"
|
||||
id="coreid-login-form-username"
|
||||
name="username"
|
||||
class="form-control"
|
||||
placeholder="Username"
|
||||
v-model="username"
|
||||
autofocus
|
||||
@keyup="on_key_up"
|
||||
:disabled="loading || step_two"
|
||||
>
|
||||
</div>
|
||||
<div class="form-group" v-if="step_two">
|
||||
<input
|
||||
type="password"
|
||||
id="coreid-login-form-password"
|
||||
name="password"
|
||||
class="form-control"
|
||||
placeholder="Password"
|
||||
v-model="password"
|
||||
:disabled="loading"
|
||||
@keyup="on_key_up"
|
||||
ref="password_input"
|
||||
>
|
||||
</div>
|
||||
<div v-if="error_message" class="error-message">{{ error_message }}</div>
|
||||
<div v-if="other_message" class="other-message">{{ other_message }}</div>
|
||||
<div class="buttons text-right">
|
||||
<button type="button" class="btn btn-primary" :disabled="loading" v-if="step_two" v-on:click="back_click">Back</button>
|
||||
<button type="button" class="btn btn-primary" :disabled="loading || btn_disabled" v-on:click="step_click">{{ button_text }}</button>
|
||||
</div>
|
||||
</form>
|
||||
</div>
|
||||
<div class="coreid-loading-spinner" v-if="loading"><div class="inner"></div></div>
|
||||
</div>
|
||||
`
|
||||
|
||||
export default class AuthLoginForm extends Component {
|
||||
static get selector() { return 'coreid-login-form' }
|
||||
static get props() { return ['app_name', 'login_message'] }
|
||||
static get template() { return template }
|
||||
|
||||
username = ''
|
||||
password = ''
|
||||
button_text = 'Next'
|
||||
step_two = false
|
||||
btn_disabled = true
|
||||
loading = false
|
||||
error_message = ''
|
||||
other_message = ''
|
||||
|
||||
watch_username(new_username, old_username) {
|
||||
this.btn_disabled = !new_username
|
||||
}
|
||||
|
||||
back_click() {
|
||||
this.step_two = false
|
||||
this.button_text = 'Next'
|
||||
}
|
||||
|
||||
async on_key_up(event) {
|
||||
if ( event.keyCode === 13 ) {
|
||||
// Enter was pressed
|
||||
event.preventDefault()
|
||||
event.stopPropagation()
|
||||
if ( !this.step_two && this.username ) return this.step_click(event)
|
||||
else if ( this.step_two && this.username && this.password ) return this.step_click(event)
|
||||
}
|
||||
}
|
||||
|
||||
async step_click(event) {
|
||||
if ( !this.step_two ) {
|
||||
this.loading = true
|
||||
try {
|
||||
const is_valid = await auth_api.validate_username(this.username)
|
||||
if ( !is_valid ) {
|
||||
this.error_message = 'That username is invalid. Please try again.'
|
||||
} else {
|
||||
this.step_two = true
|
||||
this.button_text = 'Continue'
|
||||
this.error_message = ''
|
||||
this.$nextTick(() => {
|
||||
this.$refs.password_input.focus()
|
||||
})
|
||||
}
|
||||
} catch (e) {
|
||||
this.error_message = 'Sorry, an unknown error has occurred and we are unable to continue at this time.'
|
||||
}
|
||||
this.loading = false
|
||||
} else {
|
||||
this.loading = true
|
||||
this.error_message = ''
|
||||
|
||||
const result = await auth_api.attempt({
|
||||
username: this.username,
|
||||
password: this.password,
|
||||
create_session: true, // TODO support this being passed in
|
||||
})
|
||||
|
||||
if ( !result.success ) {
|
||||
this.error_message = result.message || 'Sorry, an unknown error has occurred and we are unable to continue at this time.'
|
||||
this.loading = false
|
||||
return
|
||||
}
|
||||
|
||||
// TODO handle 2FA
|
||||
|
||||
this.other_message = 'Success! Let\'s get you on your way...'
|
||||
await location_service.redirect(result.next, 1500)
|
||||
}
|
||||
}
|
||||
|
||||
do_nothing() {}
|
||||
}
|
7
app/assets/app/components.js
Normal file
7
app/assets/app/components.js
Normal file
@ -0,0 +1,7 @@
|
||||
import AuthLoginForm from "./auth/login/Form.component.js"
|
||||
|
||||
const components = {
|
||||
AuthLoginForm
|
||||
}
|
||||
|
||||
export { components }
|
23
app/assets/app/service/AuthApi.service.js
Normal file
23
app/assets/app/service/AuthApi.service.js
Normal file
@ -0,0 +1,23 @@
|
||||
class AuthAPI {
|
||||
async validate_username(username) {
|
||||
const result = await axios.post('/api/v1/auth/validate/username', { username })
|
||||
return result && result.data && result.data.data && result.data.data.is_valid
|
||||
}
|
||||
|
||||
async attempt({ username, password, create_session }) {
|
||||
try {
|
||||
const result = await axios.post('/api/v1/auth/attempt', {
|
||||
username, password, create_session
|
||||
})
|
||||
|
||||
if ( result && result.data && result.data.data && result.data.data ) {
|
||||
return result.data.data
|
||||
}
|
||||
} catch (e) {}
|
||||
|
||||
return { success: false }
|
||||
}
|
||||
}
|
||||
|
||||
const auth_api = new AuthAPI()
|
||||
export { auth_api }
|
13
app/assets/app/service/Location.service.js
Normal file
13
app/assets/app/service/Location.service.js
Normal file
@ -0,0 +1,13 @@
|
||||
class LocationService {
|
||||
async redirect(to, delay = 0) {
|
||||
return new Promise(res => {
|
||||
setTimeout(() => {
|
||||
window.location = to
|
||||
res()
|
||||
}, delay)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
const location_service = new LocationService()
|
||||
export { location_service }
|
182
app/assets/less/form.less
Normal file
182
app/assets/less/form.less
Normal file
@ -0,0 +1,182 @@
|
||||
@keyframes loading-bar {
|
||||
0% {
|
||||
left: 0;
|
||||
width: 0;
|
||||
}
|
||||
|
||||
5% {
|
||||
left: 0;
|
||||
width: 12.5%;
|
||||
}
|
||||
|
||||
10% {
|
||||
left: 0;
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
15% {
|
||||
left: 0;
|
||||
width: 37.5%;
|
||||
}
|
||||
|
||||
20% {
|
||||
left: 0;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
25% {
|
||||
left: 0;
|
||||
width: 62.5%;
|
||||
}
|
||||
|
||||
30% {
|
||||
left: 0;
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
35% {
|
||||
left: 0;
|
||||
width: 87.5%;
|
||||
}
|
||||
|
||||
40% {
|
||||
left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
50% {
|
||||
left: 0;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
55% {
|
||||
left: 12.5%;
|
||||
width: 87.5%;
|
||||
}
|
||||
|
||||
60% {
|
||||
left: 25%;
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
65% {
|
||||
left: 37.5%;
|
||||
width: 62.5%;
|
||||
}
|
||||
|
||||
70% {
|
||||
left: 50%;
|
||||
width: 50%;
|
||||
}
|
||||
|
||||
75% {
|
||||
left: 62.5%;
|
||||
width: 37.5%;
|
||||
}
|
||||
|
||||
80% {
|
||||
left: 75%;
|
||||
width: 25%;
|
||||
}
|
||||
|
||||
85% {
|
||||
left: 87.5%;
|
||||
width: 12.5%;
|
||||
}
|
||||
|
||||
90% {
|
||||
left: 100%;
|
||||
width: 0;
|
||||
}
|
||||
|
||||
100% {
|
||||
left: 0;
|
||||
width: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.coreid-form input {
|
||||
border-radius: 0;
|
||||
border: none;
|
||||
border-bottom: 2px solid #aaa;
|
||||
font-size: 1.2em;
|
||||
background: none;
|
||||
box-shadow: none;
|
||||
|
||||
&:focus {
|
||||
box-shadow: none;
|
||||
border-bottom: 2px solid #666;
|
||||
}
|
||||
}
|
||||
|
||||
.coreid-login-form {
|
||||
border: 2px solid #ddd;
|
||||
border-radius: 7px;
|
||||
|
||||
.coreid-login-form-inner {
|
||||
padding: 30px;
|
||||
padding-top: 170px;
|
||||
padding-bottom: 160px;
|
||||
}
|
||||
|
||||
.coreid-login-form-header {
|
||||
font-size: 2.5em;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
||||
.coreid-login-form-message {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
.buttons {
|
||||
margin-top: 40px;
|
||||
margin-bottom: 0;
|
||||
|
||||
.btn {
|
||||
background: #666;
|
||||
border-color: #444;
|
||||
|
||||
&:hover {
|
||||
background: #777;
|
||||
}
|
||||
|
||||
&:focus {
|
||||
background: #888;
|
||||
box-shadow: #333;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.coreid-loading-spinner {
|
||||
overflow: hidden;
|
||||
background-color: #ddd;
|
||||
height: 7px;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
width: calc(100% + 30px);
|
||||
margin-left: -15px;
|
||||
border-radius: 0 0 5px 5px;
|
||||
|
||||
.inner {
|
||||
height: 7px;
|
||||
width: 50px;
|
||||
background-color: #bbb;
|
||||
position: absolute;
|
||||
left: 0;
|
||||
border-radius: 0 0 5px 5px;
|
||||
animation-name: loading-bar;
|
||||
animation-duration: 1.5s;
|
||||
animation-fill-mode: both;
|
||||
animation-iteration-count: infinite;
|
||||
}
|
||||
}
|
||||
|
||||
.error-message {
|
||||
color: darkred;
|
||||
font-size: 0.8em;
|
||||
}
|
||||
|
||||
.other-message {
|
||||
font-size: 0.8em;
|
||||
}
|
||||
}
|
12
app/assets/less/public.less
Normal file
12
app/assets/less/public.less
Normal file
@ -0,0 +1,12 @@
|
||||
.masthead {
|
||||
height: 100vh;
|
||||
min-height: 500px;
|
||||
background-size: cover;
|
||||
background-position: center;
|
||||
background-repeat: no-repeat;
|
||||
}
|
||||
|
||||
.app-container {
|
||||
background: #eee;
|
||||
color: #666;
|
||||
}
|
9
app/assets/less/welcome.less
Normal file
9
app/assets/less/welcome.less
Normal file
@ -0,0 +1,9 @@
|
||||
#about {
|
||||
background: #666;
|
||||
color: #eee;
|
||||
|
||||
a {
|
||||
color: white;
|
||||
text-decoration: underline;
|
||||
}
|
||||
}
|
3
app/assets/lib/axios/axios.min.js
vendored
Normal file
3
app/assets/lib/axios/axios.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
7
app/assets/lib/bootstrap/bootstrap-4.4.1.min.css
vendored
Normal file
7
app/assets/lib/bootstrap/bootstrap-4.4.1.min.css
vendored
Normal file
File diff suppressed because one or more lines are too long
7
app/assets/lib/bootstrap/bootstrap-4.4.1.min.js
vendored
Normal file
7
app/assets/lib/bootstrap/bootstrap-4.4.1.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
2
app/assets/lib/jquery/jquery-3.4.1.slim.min.js
vendored
Normal file
2
app/assets/lib/jquery/jquery-3.4.1.slim.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
5
app/assets/lib/popper/popper-1.16.0.min.js
vendored
Normal file
5
app/assets/lib/popper/popper-1.16.0.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
11965
app/assets/lib/vue/vue-2.6.11.js
Normal file
11965
app/assets/lib/vue/vue-2.6.11.js
Normal file
File diff suppressed because it is too large
Load Diff
45
app/assets/lib/vues6/vues6.js
Normal file
45
app/assets/lib/vues6/vues6.js
Normal file
@ -0,0 +1,45 @@
|
||||
export default class VuES6Loader {
|
||||
constructor(component_list) {
|
||||
this.components = component_list
|
||||
}
|
||||
|
||||
load() {
|
||||
for ( const ComponentClass of Object.values(this.components) ) {
|
||||
const method_properties = Object.getOwnPropertyNames(ComponentClass.prototype)
|
||||
|
||||
const watch = {}
|
||||
method_properties.filter(x => x.startsWith('watch_')).some(method_name => {
|
||||
const field_name = method_name.substr(6)
|
||||
const handler = function(...args) {
|
||||
return ComponentClass.prototype[method_name].bind(this)(...args)
|
||||
}
|
||||
watch[field_name] = handler
|
||||
})
|
||||
|
||||
const methods = {}
|
||||
method_properties.filter(x => !x.startsWith('watch_')).some(method_name => {
|
||||
const handler = function(...args) {
|
||||
return ComponentClass.prototype[method_name].bind(this)(...args)
|
||||
}
|
||||
methods[method_name] = handler
|
||||
})
|
||||
|
||||
Vue.component(ComponentClass.selector, {
|
||||
props: ComponentClass.props,
|
||||
data: () => {
|
||||
return new ComponentClass()
|
||||
},
|
||||
watch,
|
||||
methods,
|
||||
template: ComponentClass.template,
|
||||
})
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
export class Component {
|
||||
static get selector() { return '' }
|
||||
static get template() { return '' }
|
||||
static get props() { return [] }
|
||||
}
|
||||
|
@ -7,6 +7,9 @@ const Controller = require('libflitter/controller/Controller')
|
||||
* are used as handlers for routes specified in the route files.
|
||||
*/
|
||||
class Home extends Controller {
|
||||
static get services() {
|
||||
return [...super.services, 'Vue']
|
||||
}
|
||||
|
||||
/*
|
||||
* Serve the main welcome page.
|
||||
@ -18,7 +21,16 @@ class Home extends Controller {
|
||||
* The page() method is added by Flitter and passes some
|
||||
* helpful contextual data to the view as well.
|
||||
*/
|
||||
return res.page('welcome', {user: req.user})
|
||||
return res.page('welcome', {
|
||||
user: req.user,
|
||||
...this.Vue.data(),
|
||||
})
|
||||
}
|
||||
|
||||
async tmpl(req, res) {
|
||||
return res.page('tmpl', this.Vue.data({
|
||||
login_message: 'Please sign-in to continue.'
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
|
67
app/controllers/api/v1/Auth.controller.js
Normal file
67
app/controllers/api/v1/Auth.controller.js
Normal file
@ -0,0 +1,67 @@
|
||||
const { Controller } = require('libflitter')
|
||||
|
||||
class AuthController extends Controller {
|
||||
static get services() {
|
||||
return [...super.services, 'models', 'auth']
|
||||
}
|
||||
|
||||
async validate_username(req, res, next) {
|
||||
let is_valid = true
|
||||
|
||||
if ( !req.body.username ) is_valid = false
|
||||
|
||||
if ( is_valid ) {
|
||||
const User = this.models.get('auth:User')
|
||||
const user = await User.findOne({uid: req.body.username})
|
||||
if ( !user || !user.can_login ) is_valid = false
|
||||
}
|
||||
|
||||
return res.api({ is_valid })
|
||||
}
|
||||
|
||||
// TODO XSRF Token
|
||||
/*
|
||||
* Request Params:
|
||||
* - username
|
||||
* - password
|
||||
* - [create_session = false]
|
||||
*/
|
||||
async attempt(req, res, next) {
|
||||
const flitter = this.auth.get_provider('flitter')
|
||||
|
||||
const errors = await flitter.validate_login(req.body)
|
||||
if ( errors && errors.length > 0 )
|
||||
return res.status(400)
|
||||
.message(`Unable to complete authentication: one or more errors occurred`)
|
||||
.api({ errors })
|
||||
|
||||
const login_args = await flitter.get_login_args(req.body)
|
||||
const user = await flitter.login.apply(flitter, login_args)
|
||||
|
||||
if ( !user )
|
||||
return res.status(200)
|
||||
.message(`Invalid username or password.`)
|
||||
.api({
|
||||
message: `Invalid username or password.`,
|
||||
success: false,
|
||||
})
|
||||
|
||||
if ( req.body.create_session )
|
||||
await flitter.session(req, user)
|
||||
|
||||
let destination = this.configs.get('auth.default_login_route')
|
||||
if ( req?.session?.auth?.flow ) {
|
||||
destination = req.session.auth.flow
|
||||
req.session.auth.flow = false
|
||||
}
|
||||
|
||||
return res.api({
|
||||
success: true,
|
||||
session_created: !!req.body.create_session,
|
||||
next: destination,
|
||||
})
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
module.exports = exports = AuthController
|
@ -6,7 +6,17 @@ const FormController = require('flitter-auth/controllers/Forms')
|
||||
* controller, however you can override them here as you need.
|
||||
*/
|
||||
class Forms extends FormController {
|
||||
static get services() {
|
||||
return [...super.services, 'Vue']
|
||||
}
|
||||
|
||||
async login_provider_get(req, res, next) {
|
||||
return res.page('auth:login', {
|
||||
...this.Vue.data({
|
||||
login_message: 'Please sign-in to continue.'
|
||||
}),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = exports = Forms
|
||||
|
@ -32,6 +32,11 @@ class User extends AuthUser {
|
||||
return this.find({ldap_visible: true})
|
||||
}
|
||||
|
||||
// TODO just in case we need this later
|
||||
get can_login() {
|
||||
return true
|
||||
}
|
||||
|
||||
// Prefer soft delete because of the active scope
|
||||
async delete() {
|
||||
this.active = false
|
||||
|
18
app/routing/routers/api/v1/auth.routes.js
Normal file
18
app/routing/routers/api/v1/auth.routes.js
Normal file
@ -0,0 +1,18 @@
|
||||
const auth_routes = {
|
||||
prefix: '/api/v1/auth',
|
||||
|
||||
middleware: [
|
||||
|
||||
],
|
||||
|
||||
get: {
|
||||
|
||||
},
|
||||
|
||||
post: {
|
||||
'/validate/username': ['controller::api:v1:Auth.validate_username'],
|
||||
'/attempt': [ 'controller::api:v1:Auth.attempt' ],
|
||||
},
|
||||
}
|
||||
|
||||
module.exports = exports = auth_routes
|
@ -44,7 +44,9 @@ const index = {
|
||||
|
||||
// Placeholder for auth dashboard. You'd replace this with
|
||||
// your own route protected by 'middleware::auth:UserOnly'
|
||||
'/dash': [ 'controller::Home.welcome' ],
|
||||
'/dash': [ 'middleware::auth:UserOnly', 'controller::Home.welcome' ],
|
||||
|
||||
'/tmpl': [ 'controller::Home.tmpl' ],
|
||||
},
|
||||
|
||||
/*
|
||||
|
19
app/services/Vue.service.js
Normal file
19
app/services/Vue.service.js
Normal file
@ -0,0 +1,19 @@
|
||||
const { Service } = require('flitter-di')
|
||||
|
||||
class VueService extends Service {
|
||||
static get services() {
|
||||
return [...super.services, 'configs']
|
||||
}
|
||||
|
||||
data(merge = {}) {
|
||||
return {
|
||||
vue_state: {
|
||||
app_name: this.configs.get('app.name'),
|
||||
app_url: this.configs.get('app.url'),
|
||||
...merge
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = exports = VueService
|
@ -1,5 +1,6 @@
|
||||
const Unit = require('libflitter/Unit')
|
||||
const LDAP = require('ldapjs')
|
||||
const Validator = require('email-validator')
|
||||
|
||||
class LDAPServerUnit extends Unit {
|
||||
static get name() {
|
||||
@ -45,8 +46,7 @@ class LDAPServerUnit extends Unit {
|
||||
* @returns {boolean}
|
||||
*/
|
||||
validate_email(email) {
|
||||
const re = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
||||
return re.test(String(email).toLowerCase())
|
||||
return Validator.validate(email)
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -1,17 +1,7 @@
|
||||
extends ./form
|
||||
extends ../theme/public/base
|
||||
|
||||
block form
|
||||
.form-label-group
|
||||
input#inputUsername.form-control(type='text' name='username' value=(form_data ? form_data.username : '') required placeholder='Username' autofocus)
|
||||
label(for='inputUsername') Username
|
||||
.form-label-group
|
||||
input#inputPassword.form-control(type='password' name='password' required placeholder='Password')
|
||||
label(for='inputPassword') Password
|
||||
button.btn.btn-lg.btn-primary.btn-block.btn-login.text-uppercase.font-weight-bold.mb-2.form-submit-button(type='submit') Login
|
||||
|
||||
if registration_enabled
|
||||
.text-center
|
||||
span.small Need an account?
|
||||
a(href='./register') Register here.
|
||||
.text-center
|
||||
span.small(style="color: #999999;") Provider: #{provider_name}
|
||||
block append style
|
||||
link(rel='stylesheet' href='/style-asset/form.css')
|
||||
|
||||
block vue
|
||||
coreid-login-form(v-bind:app_name="app_name" v-bind:login_message="login_message")
|
||||
|
23
app/views/theme/base.pug
Normal file
23
app/views/theme/base.pug
Normal file
@ -0,0 +1,23 @@
|
||||
doctype html
|
||||
html(lang='en')
|
||||
head
|
||||
title #{title || (_app && _app.name) || 'CoreID'}
|
||||
|
||||
block meta
|
||||
meta(charset='utf-8')
|
||||
meta(name='viewport' content='width=device-width, initial-scale=1, shrink-to-fit=no')
|
||||
meta(name='description' content=(description || 'CoreID is a self-hosted, next-generation identity server.'))
|
||||
meta(name='author' content='Garrett Mills (garrett@glmdev.tech)')
|
||||
|
||||
block style
|
||||
link(rel='stylesheet' href='/assets/lib/bootstrap/bootstrap-4.4.1.min.css')
|
||||
body
|
||||
.app-container
|
||||
block app
|
||||
block script
|
||||
script(src='/assets/lib/axios/axios.min.js')
|
||||
script(src='/assets/lib/jquery/jquery-3.4.1.slim.min.js')
|
||||
script(src='/assets/lib/popper/popper-1.16.0.min.js')
|
||||
script(src='/assets/lib/bootstrap/bootstrap-4.4.1.min.js')
|
||||
script(src='/assets/lib/vue/vue-2.6.11.js')
|
||||
script(src='/assets/lib/vues6/vues6.js')
|
27
app/views/theme/public/base.pug
Normal file
27
app/views/theme/public/base.pug
Normal file
@ -0,0 +1,27 @@
|
||||
extends ../base
|
||||
|
||||
block append style
|
||||
link(rel='stylesheet' href='/style-asset/public.css')
|
||||
|
||||
block append script
|
||||
script(type='module').
|
||||
import { components } from '/assets/app/components.js'
|
||||
import VuES6Loader from '/assets/lib/vues6/vues6.js'
|
||||
|
||||
const loader = new VuES6Loader(components)
|
||||
loader.load()
|
||||
|
||||
const app = new Vue({
|
||||
el: '#vue-app-base',
|
||||
data: !{JSON.stringify(vue_state) || '\{\}'}
|
||||
})
|
||||
|
||||
block app
|
||||
block content
|
||||
header.masthead
|
||||
.container.h-100
|
||||
.row.h-100.align-items-center
|
||||
.col-12.text-center
|
||||
block masthead
|
||||
#vue-app-base
|
||||
block vue
|
7
app/views/tmpl.pug
Normal file
7
app/views/tmpl.pug
Normal file
@ -0,0 +1,7 @@
|
||||
extends ./theme/public/base
|
||||
|
||||
block append style
|
||||
link(rel='stylesheet' href='/style-asset/form.css')
|
||||
|
||||
block vue
|
||||
coreid-login-form(v-bind:app_name="app_name" v-bind:login_message="login_message")
|
@ -1,46 +1,19 @@
|
||||
html
|
||||
head
|
||||
title Flitter
|
||||
style(type="text/css").
|
||||
@import url('https://fonts.googleapis.com/css?family=Rajdhani');
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
overflow-y: hidden;
|
||||
background-color: #c7dbdf;
|
||||
}
|
||||
extends ./theme/public/base
|
||||
|
||||
.flitter-container {
|
||||
height: 60%;
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
}
|
||||
block append style
|
||||
link(rel='stylesheet' href='/style-asset/welcome.css')
|
||||
|
||||
.flitter-image {
|
||||
height: 150px;
|
||||
}
|
||||
block masthead
|
||||
h1.font-weight-light #{_app && _app.name || 'Starship CoreID'}
|
||||
p.lead Centralized, self-hosted, modern identity services.
|
||||
|
||||
.flitter-name {
|
||||
font-family: "Rajdhani";
|
||||
font-size: 50pt;
|
||||
margin-left: 35px;
|
||||
color: #00323d;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
.flitter-text {
|
||||
font-family: "Rajdhani";
|
||||
font-size: 24pt;
|
||||
color: #00323d;
|
||||
}
|
||||
body
|
||||
.flitter-container
|
||||
img.flitter-image(src="/assets/flitter.png")
|
||||
a.flitter-name(href="https://flitter.garrettmills.dev/" target="_blank") powered by flitter
|
||||
if user
|
||||
.flitter-container
|
||||
p.flitter-text Welcome, #{user.uid}! <a href="/auth/logout">Log out.</a>
|
||||
else
|
||||
.flitter-container
|
||||
p.flitter-text New to Flitter? <a href="https://flitter.garrettmills.dev/" target="_blank">Start here.</a>
|
||||
block append content
|
||||
section.py-5#about
|
||||
.container
|
||||
h2.font-weight-light What is #{_app && _app.name || 'Starship CoreID'}?
|
||||
p
|
||||
| #{_app && _app.name || 'CoreID'} is a self-hosted, open-source identity server designed for
|
||||
| people who self-host various applications. With its built-in OAuth2, LDAP, and SAML servers
|
||||
| and self-service password & admin panel, #{_app && _app.name || 'CoreID'} gives you the ability
|
||||
| to easily integrate a single-sign-on solution into your self-hosting infrastructure without
|
||||
| jumping through hoops to make it work. You can learn more <a href="#">here.</a>
|
||||
|
@ -16,11 +16,13 @@
|
||||
"author": "Garrett Mills <garrett@glmdev.tech> (https://garrettmills.dev/)",
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"email-validator": "^2.0.4",
|
||||
"flitter-auth": "^0.18.2",
|
||||
"flitter-cli": "^0.16.0",
|
||||
"flitter-di": "^0.5.0",
|
||||
"flitter-flap": "^0.5.2",
|
||||
"flitter-forms": "^0.8.1",
|
||||
"flitter-less": "^0.5.3",
|
||||
"flitter-orm": "^0.2.4",
|
||||
"flitter-upload": "^0.8.0",
|
||||
"ldapjs": "^1.0.2",
|
||||
|
357
yarn.lock
357
yarn.lock
@ -289,6 +289,16 @@ aggregate-error@^3.0.0:
|
||||
clean-stack "^2.0.0"
|
||||
indent-string "^4.0.0"
|
||||
|
||||
ajv@^6.5.5:
|
||||
version "6.12.2"
|
||||
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd"
|
||||
integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ==
|
||||
dependencies:
|
||||
fast-deep-equal "^3.1.1"
|
||||
fast-json-stable-stringify "^2.0.0"
|
||||
json-schema-traverse "^0.4.1"
|
||||
uri-js "^4.2.2"
|
||||
|
||||
align-text@^0.1.1, align-text@^0.1.3:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/align-text/-/align-text-0.1.4.tgz#0cd90a561093f35d0a99256c22b7069433fad117"
|
||||
@ -443,12 +453,19 @@ asn1@0.2.3:
|
||||
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.3.tgz#dac8787713c9966849fc8180777ebe9c1ddf3b86"
|
||||
integrity sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=
|
||||
|
||||
asn1@~0.2.3:
|
||||
version "0.2.4"
|
||||
resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136"
|
||||
integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==
|
||||
dependencies:
|
||||
safer-buffer "~2.1.0"
|
||||
|
||||
assert-plus@0.1.5, assert-plus@0.1.x:
|
||||
version "0.1.5"
|
||||
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-0.1.5.tgz#ee74009413002d84cec7219c6ac811812e723160"
|
||||
integrity sha1-7nQAlBMALYTOxyGcasgRgS5yMWA=
|
||||
|
||||
assert-plus@^1.0.0:
|
||||
assert-plus@1.0.0, assert-plus@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525"
|
||||
integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=
|
||||
@ -478,6 +495,21 @@ ast-types@0.9.6:
|
||||
resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.9.6.tgz#102c9e9e9005d3e7e3829bf0c4fa24ee862ee9b9"
|
||||
integrity sha1-ECyenpAF0+fjgpvwxPok7oYu6bk=
|
||||
|
||||
asynckit@^0.4.0:
|
||||
version "0.4.0"
|
||||
resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
|
||||
integrity sha1-x57Zf380y48robyXkLzDZkdLS3k=
|
||||
|
||||
aws-sign2@~0.7.0:
|
||||
version "0.7.0"
|
||||
resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8"
|
||||
integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=
|
||||
|
||||
aws4@^1.8.0:
|
||||
version "1.9.1"
|
||||
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e"
|
||||
integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug==
|
||||
|
||||
axios@^0.19.0:
|
||||
version "0.19.0"
|
||||
resolved "https://registry.yarnpkg.com/axios/-/axios-0.19.0.tgz#8e09bff3d9122e133f7b8101c8fbdd00ed3d2ab8"
|
||||
@ -669,6 +701,13 @@ basic-auth@~0.0.1:
|
||||
resolved "https://registry.yarnpkg.com/basic-auth/-/basic-auth-0.0.1.tgz#31ddb65843f6c35c6fea7beb46a987cb8ce18924"
|
||||
integrity sha1-Md22WEP2w1xv6nvrRqmHy4zhiSQ=
|
||||
|
||||
bcrypt-pbkdf@^1.0.0:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e"
|
||||
integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=
|
||||
dependencies:
|
||||
tweetnacl "^0.14.3"
|
||||
|
||||
bcrypt@^3.0.4:
|
||||
version "3.0.6"
|
||||
resolved "https://registry.yarnpkg.com/bcrypt/-/bcrypt-3.0.6.tgz#f607846df62d27e60d5e795612c4f67d70206eb2"
|
||||
@ -812,6 +851,11 @@ camelcase@^5.0.0, camelcase@^5.3.1:
|
||||
resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
|
||||
integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
|
||||
|
||||
caseless@~0.12.0:
|
||||
version "0.12.0"
|
||||
resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc"
|
||||
integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=
|
||||
|
||||
center-align@^0.1.1:
|
||||
version "0.1.3"
|
||||
resolved "https://registry.yarnpkg.com/center-align/-/center-align-0.1.3.tgz#aa0d32629b6ee972200411cbd4461c907bc2b7ad"
|
||||
@ -923,6 +967,11 @@ cliui@^6.0.0:
|
||||
strip-ansi "^6.0.0"
|
||||
wrap-ansi "^6.2.0"
|
||||
|
||||
clone@^2.1.2:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f"
|
||||
integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=
|
||||
|
||||
code-point-at@^1.0.0:
|
||||
version "1.1.0"
|
||||
resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77"
|
||||
@ -957,6 +1006,13 @@ colors@^1.1.0, colors@^1.3.3:
|
||||
resolved "https://registry.yarnpkg.com/colors/-/colors-1.3.3.tgz#39e005d546afe01e01f9c4ca8fa50f686a01205d"
|
||||
integrity sha512-mmGt/1pZqYRjMxB1axhTo16/snVZ5krrKkcmMeVKxzECMMXoCgnvTPp10QgHfcbQZw8Dq2jMNG6je4JlWU0gWg==
|
||||
|
||||
combined-stream@^1.0.6, combined-stream@~1.0.6:
|
||||
version "1.0.8"
|
||||
resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
|
||||
integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
|
||||
dependencies:
|
||||
delayed-stream "~1.0.0"
|
||||
|
||||
command-line-args@^5.0.2:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/command-line-args/-/command-line-args-5.1.1.tgz#88e793e5bb3ceb30754a86863f0401ac92fd369a"
|
||||
@ -1105,7 +1161,7 @@ dashdash@1.7.3:
|
||||
dependencies:
|
||||
assert-plus "0.1.x"
|
||||
|
||||
dashdash@^1.14.0:
|
||||
dashdash@^1.12.0, dashdash@^1.14.0:
|
||||
version "1.14.1"
|
||||
resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0"
|
||||
integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=
|
||||
@ -1204,6 +1260,11 @@ del@^4.1.0:
|
||||
pify "^4.0.1"
|
||||
rimraf "^2.6.3"
|
||||
|
||||
delayed-stream@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
|
||||
integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk=
|
||||
|
||||
delegates@^1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a"
|
||||
@ -1292,6 +1353,14 @@ dtrace-provider@~0.8:
|
||||
dependencies:
|
||||
nan "^2.14.0"
|
||||
|
||||
ecc-jsbn@~0.1.1:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9"
|
||||
integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=
|
||||
dependencies:
|
||||
jsbn "~0.1.0"
|
||||
safer-buffer "^2.1.0"
|
||||
|
||||
editorconfig@^0.15.3:
|
||||
version "0.15.3"
|
||||
resolved "https://registry.yarnpkg.com/editorconfig/-/editorconfig-0.15.3.tgz#bef84c4e75fb8dcb0ce5cee8efd51c15999befc5"
|
||||
@ -1307,6 +1376,11 @@ ee-first@1.1.1:
|
||||
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
|
||||
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=
|
||||
|
||||
email-validator@^2.0.4:
|
||||
version "2.0.4"
|
||||
resolved "https://registry.yarnpkg.com/email-validator/-/email-validator-2.0.4.tgz#b8dfaa5d0dae28f1b03c95881d904d4e40bfe7ed"
|
||||
integrity sha512-gYCwo7kh5S3IDyZPLZf6hSS0MnZT8QmJFqYvbqlDZSbwdZlY6QZWxJ4i/6UhITOJ4XzyI647Bm2MXKCLqnJ4nQ==
|
||||
|
||||
emoji-regex@^7.0.1:
|
||||
version "7.0.3"
|
||||
resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156"
|
||||
@ -1322,6 +1396,13 @@ encodeurl@~1.0.2:
|
||||
resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59"
|
||||
integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=
|
||||
|
||||
errno@^0.1.1:
|
||||
version "0.1.7"
|
||||
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.7.tgz#4684d71779ad39af177e3f007996f7c67c852618"
|
||||
integrity sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==
|
||||
dependencies:
|
||||
prr "~1.0.1"
|
||||
|
||||
error@^7.0.0:
|
||||
version "7.2.0"
|
||||
resolved "https://registry.yarnpkg.com/error/-/error-7.2.0.tgz#80c989885635b41df9309d145834a4f125ae2245"
|
||||
@ -1436,6 +1517,13 @@ express-graphql@^0.9.0:
|
||||
http-errors "^1.7.3"
|
||||
raw-body "^2.4.1"
|
||||
|
||||
express-less@^0.1.0:
|
||||
version "0.1.0"
|
||||
resolved "https://registry.yarnpkg.com/express-less/-/express-less-0.1.0.tgz#4b8d58cb9f9957e855e0a676515aa19652e4d247"
|
||||
integrity sha1-S41Yy5+ZV+hV4KZ2UVqhllLk0kc=
|
||||
dependencies:
|
||||
less ">=2.0.0"
|
||||
|
||||
express-session@^1.15.6:
|
||||
version "1.16.1"
|
||||
resolved "https://registry.yarnpkg.com/express-session/-/express-session-1.16.1.tgz#251ff9776c59382301de6c8c33411af357ed439c"
|
||||
@ -1486,6 +1574,11 @@ express@^4.16.4:
|
||||
utils-merge "1.0.1"
|
||||
vary "~1.1.2"
|
||||
|
||||
extend@~3.0.2:
|
||||
version "3.0.2"
|
||||
resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa"
|
||||
integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==
|
||||
|
||||
extsprintf@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.0.0.tgz#4d58b815ace5bebfc4ebf03cf98b0a7604a99b86"
|
||||
@ -1496,11 +1589,26 @@ extsprintf@1.2.0:
|
||||
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.2.0.tgz#5ad946c22f5b32ba7f8cd7426711c6e8a3fc2529"
|
||||
integrity sha1-WtlGwi9bMrp/jNdCZxHG6KP8JSk=
|
||||
|
||||
extsprintf@1.3.0:
|
||||
version "1.3.0"
|
||||
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05"
|
||||
integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=
|
||||
|
||||
extsprintf@^1.2.0:
|
||||
version "1.4.0"
|
||||
resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f"
|
||||
integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8=
|
||||
|
||||
fast-deep-equal@^3.1.1:
|
||||
version "3.1.1"
|
||||
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4"
|
||||
integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA==
|
||||
|
||||
fast-json-stable-stringify@^2.0.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
|
||||
integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==
|
||||
|
||||
fill-range@^7.0.1:
|
||||
version "7.0.1"
|
||||
resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
|
||||
@ -1629,6 +1737,13 @@ flitter-forms@^0.8.1:
|
||||
recursive-readdir "^2.2.2"
|
||||
validator "^10.11.0"
|
||||
|
||||
flitter-less@^0.5.3:
|
||||
version "0.5.3"
|
||||
resolved "https://registry.yarnpkg.com/flitter-less/-/flitter-less-0.5.3.tgz#afff463fee489325f3e1d8f1bf1e837ffb45150e"
|
||||
integrity sha512-WmDBPynPaHVbuJ6ZOhv6sc2tdwaQp8rKnxLkw0un1D5ez50qJbNwG/UHTQmtSqUl/K7dlSVycnI0LCMqLT6FQA==
|
||||
dependencies:
|
||||
express-less "^0.1.0"
|
||||
|
||||
flitter-orm@^0.2.4:
|
||||
version "0.2.4"
|
||||
resolved "https://registry.yarnpkg.com/flitter-orm/-/flitter-orm-0.2.4.tgz#539f7631fd286955b01ce6034a0bb68142540f5d"
|
||||
@ -1665,6 +1780,20 @@ foreground-child@^2.0.0:
|
||||
cross-spawn "^7.0.0"
|
||||
signal-exit "^3.0.2"
|
||||
|
||||
forever-agent@~0.6.1:
|
||||
version "0.6.1"
|
||||
resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91"
|
||||
integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=
|
||||
|
||||
form-data@~2.3.2:
|
||||
version "2.3.3"
|
||||
resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6"
|
||||
integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==
|
||||
dependencies:
|
||||
asynckit "^0.4.0"
|
||||
combined-stream "^1.0.6"
|
||||
mime-types "^2.1.12"
|
||||
|
||||
forwarded@~0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84"
|
||||
@ -1752,6 +1881,13 @@ get-stdin@^4.0.1:
|
||||
resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe"
|
||||
integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=
|
||||
|
||||
getpass@^0.1.1:
|
||||
version "0.1.7"
|
||||
resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa"
|
||||
integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=
|
||||
dependencies:
|
||||
assert-plus "^1.0.0"
|
||||
|
||||
glob-parent@~5.1.0:
|
||||
version "5.1.1"
|
||||
resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229"
|
||||
@ -1848,6 +1984,19 @@ growl@1.10.5:
|
||||
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
|
||||
integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
|
||||
|
||||
har-schema@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92"
|
||||
integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=
|
||||
|
||||
har-validator@~5.1.3:
|
||||
version "5.1.3"
|
||||
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080"
|
||||
integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==
|
||||
dependencies:
|
||||
ajv "^6.5.5"
|
||||
har-schema "^2.0.0"
|
||||
|
||||
has-ansi@^2.0.0:
|
||||
version "2.0.0"
|
||||
resolved "https://registry.yarnpkg.com/has-ansi/-/has-ansi-2.0.0.tgz#34f5049ce1ecdf2b0649af3ef24e45ed35416d91"
|
||||
@ -1929,6 +2078,15 @@ http-errors@1.7.3, http-errors@^1.7.3:
|
||||
statuses ">= 1.5.0 < 2"
|
||||
toidentifier "1.0.0"
|
||||
|
||||
http-signature@~1.2.0:
|
||||
version "1.2.0"
|
||||
resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1"
|
||||
integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=
|
||||
dependencies:
|
||||
assert-plus "^1.0.0"
|
||||
jsprim "^1.2.2"
|
||||
sshpk "^1.7.0"
|
||||
|
||||
http-status@^1.4.2:
|
||||
version "1.4.2"
|
||||
resolved "https://registry.yarnpkg.com/http-status/-/http-status-1.4.2.tgz#75406e829dca9bfdf92972c579b47cd6a58ab6c8"
|
||||
@ -1955,6 +2113,11 @@ ignore-walk@^3.0.1:
|
||||
dependencies:
|
||||
minimatch "^3.0.4"
|
||||
|
||||
image-size@~0.5.0:
|
||||
version "0.5.5"
|
||||
resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.5.5.tgz#09dfd4ab9d20e29eb1c3e80b8990378df9e3cb9c"
|
||||
integrity sha1-Cd/Uq50g4p6xw+gLiZA3jfnjy5w=
|
||||
|
||||
imurmurhash@^0.1.4:
|
||||
version "0.1.4"
|
||||
resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea"
|
||||
@ -2139,7 +2302,7 @@ is-symbol@^1.0.2:
|
||||
dependencies:
|
||||
has-symbols "^1.0.1"
|
||||
|
||||
is-typedarray@^1.0.0:
|
||||
is-typedarray@^1.0.0, is-typedarray@~1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a"
|
||||
integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=
|
||||
@ -2164,6 +2327,11 @@ isexe@^2.0.0:
|
||||
resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
|
||||
integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=
|
||||
|
||||
isstream@~0.1.2:
|
||||
version "0.1.2"
|
||||
resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a"
|
||||
integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=
|
||||
|
||||
istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.0.0-alpha.1:
|
||||
version "3.0.0"
|
||||
resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.0.0.tgz#f5944a37c70b550b02a78a5c3b2055b280cec8ec"
|
||||
@ -2267,6 +2435,11 @@ js-yaml@3.13.1, js-yaml@^3.13.1:
|
||||
argparse "^1.0.7"
|
||||
esprima "^4.0.0"
|
||||
|
||||
jsbn@~0.1.0:
|
||||
version "0.1.1"
|
||||
resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513"
|
||||
integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM=
|
||||
|
||||
jsesc@^2.5.1:
|
||||
version "2.5.2"
|
||||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4"
|
||||
@ -2277,7 +2450,17 @@ jsesc@~0.5.0:
|
||||
resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d"
|
||||
integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=
|
||||
|
||||
json-stringify-safe@^5.0.1:
|
||||
json-schema-traverse@^0.4.1:
|
||||
version "0.4.1"
|
||||
resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660"
|
||||
integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==
|
||||
|
||||
json-schema@0.2.3:
|
||||
version "0.2.3"
|
||||
resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13"
|
||||
integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=
|
||||
|
||||
json-stringify-safe@^5.0.1, json-stringify-safe@~5.0.1:
|
||||
version "5.0.1"
|
||||
resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb"
|
||||
integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=
|
||||
@ -2301,6 +2484,16 @@ jsonfile@^2.1.0:
|
||||
optionalDependencies:
|
||||
graceful-fs "^4.1.6"
|
||||
|
||||
jsprim@^1.2.2:
|
||||
version "1.4.1"
|
||||
resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2"
|
||||
integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=
|
||||
dependencies:
|
||||
assert-plus "1.0.0"
|
||||
extsprintf "1.3.0"
|
||||
json-schema "0.2.3"
|
||||
verror "1.10.0"
|
||||
|
||||
jstransformer@1.0.0:
|
||||
version "1.0.0"
|
||||
resolved "https://registry.yarnpkg.com/jstransformer/-/jstransformer-1.0.0.tgz#ed8bf0921e2f3f1ed4d5c1a44f68709ed24722c3"
|
||||
@ -2388,6 +2581,23 @@ ldapjs@^1.0.2:
|
||||
optionalDependencies:
|
||||
dtrace-provider "~0.8"
|
||||
|
||||
less@>=2.0.0:
|
||||
version "3.11.1"
|
||||
resolved "https://registry.yarnpkg.com/less/-/less-3.11.1.tgz#c6bf08e39e02404fe6b307a3dfffafdc55bd36e2"
|
||||
integrity sha512-tlWX341RECuTOvoDIvtFqXsKj072hm3+9ymRBe76/mD6O5ZZecnlAOVDlWAleF2+aohFrxNidXhv2773f6kY7g==
|
||||
dependencies:
|
||||
clone "^2.1.2"
|
||||
tslib "^1.10.0"
|
||||
optionalDependencies:
|
||||
errno "^0.1.1"
|
||||
graceful-fs "^4.1.2"
|
||||
image-size "~0.5.0"
|
||||
mime "^1.4.1"
|
||||
mkdirp "^0.5.0"
|
||||
promise "^7.1.1"
|
||||
request "^2.83.0"
|
||||
source-map "~0.6.0"
|
||||
|
||||
leven@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/leven/-/leven-1.0.2.tgz#9144b6eebca5f1d0680169f1a6770dcea60b75c3"
|
||||
@ -2546,11 +2756,23 @@ mime-db@1.40.0:
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.40.0.tgz#a65057e998db090f732a68f6c276d387d4126c32"
|
||||
integrity sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==
|
||||
|
||||
mime-db@1.43.0:
|
||||
version "1.43.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58"
|
||||
integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ==
|
||||
|
||||
mime-db@~1.38.0:
|
||||
version "1.38.0"
|
||||
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.38.0.tgz#1a2aab16da9eb167b49c6e4df2d9c68d63d8e2ad"
|
||||
integrity sha512-bqVioMFFzc2awcdJZIzR3HjZFX20QhilVS7hytkKrv7xFAn8bM1gzc/FOX2awLISvWe0PV8ptFKcon+wZ5qYkg==
|
||||
|
||||
mime-types@^2.1.12, mime-types@~2.1.19:
|
||||
version "2.1.26"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06"
|
||||
integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ==
|
||||
dependencies:
|
||||
mime-db "1.43.0"
|
||||
|
||||
mime-types@~2.1.18:
|
||||
version "2.1.22"
|
||||
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.22.tgz#fe6b355a190926ab7698c9a0556a11199b2199bd"
|
||||
@ -2570,6 +2792,11 @@ mime@1.4.1:
|
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6"
|
||||
integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==
|
||||
|
||||
mime@^1.4.1:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
|
||||
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
|
||||
|
||||
"minimatch@2 || 3", minimatch@3.0.4, minimatch@^3.0.4:
|
||||
version "3.0.4"
|
||||
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
||||
@ -2919,6 +3146,11 @@ nyc@^15.0.1:
|
||||
test-exclude "^6.0.0"
|
||||
yargs "^15.0.2"
|
||||
|
||||
oauth-sign@~0.9.0:
|
||||
version "0.9.0"
|
||||
resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455"
|
||||
integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==
|
||||
|
||||
object-assign@^4.0.1, object-assign@^4.1.0:
|
||||
version "4.1.1"
|
||||
resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863"
|
||||
@ -3130,6 +3362,11 @@ pathval@^1.1.0:
|
||||
resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.0.tgz#b942e6d4bde653005ef6b71361def8727d0645e0"
|
||||
integrity sha1-uULm1L3mUwBe9rcTYd74cn0GReA=
|
||||
|
||||
performance-now@^2.1.0:
|
||||
version "2.1.0"
|
||||
resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b"
|
||||
integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=
|
||||
|
||||
picomatch@^2.0.4:
|
||||
version "2.2.2"
|
||||
resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad"
|
||||
@ -3186,7 +3423,7 @@ process-on-spawn@^1.0.0:
|
||||
dependencies:
|
||||
fromentries "^1.2.0"
|
||||
|
||||
promise@^7.0.1:
|
||||
promise@^7.0.1, promise@^7.1.1:
|
||||
version "7.3.1"
|
||||
resolved "https://registry.yarnpkg.com/promise/-/promise-7.3.1.tgz#064b72602b18f90f29192b8b1bc418ffd1ebd3bf"
|
||||
integrity sha512-nolQXZ/4L+bP/UGlkfaIujX9BKxGwmQ9OT4mOt5yvy8iK1h3wqTEJCijzGANTCCl9nWjY41juyAn2K3Q1hLLTg==
|
||||
@ -3206,11 +3443,21 @@ proxy-addr@~2.0.4:
|
||||
forwarded "~0.1.2"
|
||||
ipaddr.js "1.8.0"
|
||||
|
||||
prr@~1.0.1:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/prr/-/prr-1.0.1.tgz#d3fc114ba06995a45ec6893f484ceb1d78f5f476"
|
||||
integrity sha1-0/wRS6BplaRexok/SEzrHXj19HY=
|
||||
|
||||
pseudomap@^1.0.2:
|
||||
version "1.0.2"
|
||||
resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
|
||||
integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM=
|
||||
|
||||
psl@^1.1.28:
|
||||
version "1.8.0"
|
||||
resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24"
|
||||
integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==
|
||||
|
||||
pug-attrs@^2.0.3:
|
||||
version "2.0.3"
|
||||
resolved "https://registry.yarnpkg.com/pug-attrs/-/pug-attrs-2.0.3.tgz#a3095f970e64151f7bdad957eef55fb5d7905d15"
|
||||
@ -3316,12 +3563,17 @@ pug@^2.0.3:
|
||||
pug-runtime "^2.0.4"
|
||||
pug-strip-comments "^1.0.3"
|
||||
|
||||
punycode@^2.1.0, punycode@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec"
|
||||
integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==
|
||||
|
||||
q@^1.1.2:
|
||||
version "1.5.1"
|
||||
resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7"
|
||||
integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=
|
||||
|
||||
qs@6.5.2:
|
||||
qs@6.5.2, qs@~6.5.2:
|
||||
version "6.5.2"
|
||||
resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36"
|
||||
integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==
|
||||
@ -3523,6 +3775,32 @@ repeating@^1.1.0, repeating@^1.1.2:
|
||||
dependencies:
|
||||
is-finite "^1.0.0"
|
||||
|
||||
request@^2.83.0:
|
||||
version "2.88.2"
|
||||
resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3"
|
||||
integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==
|
||||
dependencies:
|
||||
aws-sign2 "~0.7.0"
|
||||
aws4 "^1.8.0"
|
||||
caseless "~0.12.0"
|
||||
combined-stream "~1.0.6"
|
||||
extend "~3.0.2"
|
||||
forever-agent "~0.6.1"
|
||||
form-data "~2.3.2"
|
||||
har-validator "~5.1.3"
|
||||
http-signature "~1.2.0"
|
||||
is-typedarray "~1.0.0"
|
||||
isstream "~0.1.2"
|
||||
json-stringify-safe "~5.0.1"
|
||||
mime-types "~2.1.19"
|
||||
oauth-sign "~0.9.0"
|
||||
performance-now "^2.1.0"
|
||||
qs "~6.5.2"
|
||||
safe-buffer "^5.1.2"
|
||||
tough-cookie "~2.5.0"
|
||||
tunnel-agent "^0.6.0"
|
||||
uuid "^3.3.2"
|
||||
|
||||
require-directory@^2.1.1:
|
||||
version "2.1.1"
|
||||
resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
|
||||
@ -3598,7 +3876,7 @@ safe-buffer@5.1.2, safe-buffer@^5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1:
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d"
|
||||
integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==
|
||||
|
||||
safe-buffer@^5.1.1:
|
||||
safe-buffer@^5.0.1, safe-buffer@^5.1.1:
|
||||
version "5.2.0"
|
||||
resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519"
|
||||
integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==
|
||||
@ -3613,7 +3891,7 @@ safe-json-stringify@~1:
|
||||
resolved "https://registry.yarnpkg.com/safe-json-stringify/-/safe-json-stringify-1.2.0.tgz#356e44bc98f1f93ce45df14bcd7c01cda86e0afd"
|
||||
integrity sha512-gH8eh2nZudPQO6TytOvbxnuhYBOvDBBLW52tz5q6X58lJcd/tkmqFR+5Z9adS8aJtURSXWThWy/xJtJwixErvg==
|
||||
|
||||
"safer-buffer@>= 2.1.2 < 3":
|
||||
"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0:
|
||||
version "2.1.2"
|
||||
resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
|
||||
integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
|
||||
@ -3807,6 +4085,21 @@ ssha@^1.0.1:
|
||||
resolved "https://registry.yarnpkg.com/ssha/-/ssha-1.0.1.tgz#deacf9feb9780ccdd97506952b0bf996f12a20b3"
|
||||
integrity sha1-3qz5/rl4DM3ZdQaVKwv5lvEqILM=
|
||||
|
||||
sshpk@^1.7.0:
|
||||
version "1.16.1"
|
||||
resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877"
|
||||
integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==
|
||||
dependencies:
|
||||
asn1 "~0.2.3"
|
||||
assert-plus "^1.0.0"
|
||||
bcrypt-pbkdf "^1.0.0"
|
||||
dashdash "^1.12.0"
|
||||
ecc-jsbn "~0.1.1"
|
||||
getpass "^0.1.1"
|
||||
jsbn "~0.1.0"
|
||||
safer-buffer "^2.0.2"
|
||||
tweetnacl "~0.14.0"
|
||||
|
||||
stable@~0.1.3:
|
||||
version "0.1.8"
|
||||
resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf"
|
||||
@ -4058,6 +4351,14 @@ touch@^3.1.0:
|
||||
dependencies:
|
||||
nopt "~1.0.10"
|
||||
|
||||
tough-cookie@~2.5.0:
|
||||
version "2.5.0"
|
||||
resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2"
|
||||
integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==
|
||||
dependencies:
|
||||
psl "^1.1.28"
|
||||
punycode "^2.1.1"
|
||||
|
||||
trim-right@^1.0.0:
|
||||
version "1.0.1"
|
||||
resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003"
|
||||
@ -4073,6 +4374,23 @@ tryor@~0.1.2:
|
||||
resolved "https://registry.yarnpkg.com/tryor/-/tryor-0.1.2.tgz#8145e4ca7caff40acde3ccf946e8b8bb75b4172b"
|
||||
integrity sha1-gUXkynyv9ArN48z5Rui4u3W0Fys=
|
||||
|
||||
tslib@^1.10.0:
|
||||
version "1.11.1"
|
||||
resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35"
|
||||
integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA==
|
||||
|
||||
tunnel-agent@^0.6.0:
|
||||
version "0.6.0"
|
||||
resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
|
||||
integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=
|
||||
dependencies:
|
||||
safe-buffer "^5.0.1"
|
||||
|
||||
tweetnacl@^0.14.3, tweetnacl@~0.14.0:
|
||||
version "0.14.5"
|
||||
resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64"
|
||||
integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=
|
||||
|
||||
type-detect@4.0.8, type-detect@^4.0.0, type-detect@^4.0.5, type-detect@^4.0.8:
|
||||
version "4.0.8"
|
||||
resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c"
|
||||
@ -4135,6 +4453,13 @@ unpipe@1.0.0, unpipe@~1.0.0:
|
||||
resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"
|
||||
integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=
|
||||
|
||||
uri-js@^4.2.2:
|
||||
version "4.2.2"
|
||||
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0"
|
||||
integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==
|
||||
dependencies:
|
||||
punycode "^2.1.0"
|
||||
|
||||
user-home@^1.1.1:
|
||||
version "1.1.1"
|
||||
resolved "https://registry.yarnpkg.com/user-home/-/user-home-1.1.1.tgz#2b5be23a32b63a7c9deb8d0f28d485724a3df190"
|
||||
@ -4196,14 +4521,7 @@ verror@1.1.0:
|
||||
dependencies:
|
||||
extsprintf "1.0.0"
|
||||
|
||||
verror@1.6.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/verror/-/verror-1.6.0.tgz#7d13b27b1facc2e2da90405eb5ea6e5bdd252ea5"
|
||||
integrity sha1-fROyex+swuLakEBetepuW90lLqU=
|
||||
dependencies:
|
||||
extsprintf "1.2.0"
|
||||
|
||||
verror@^1.8.1:
|
||||
verror@1.10.0, verror@^1.8.1:
|
||||
version "1.10.0"
|
||||
resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400"
|
||||
integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=
|
||||
@ -4212,6 +4530,13 @@ verror@^1.8.1:
|
||||
core-util-is "1.0.2"
|
||||
extsprintf "^1.2.0"
|
||||
|
||||
verror@1.6.0:
|
||||
version "1.6.0"
|
||||
resolved "https://registry.yarnpkg.com/verror/-/verror-1.6.0.tgz#7d13b27b1facc2e2da90405eb5ea6e5bdd252ea5"
|
||||
integrity sha1-fROyex+swuLakEBetepuW90lLqU=
|
||||
dependencies:
|
||||
extsprintf "1.2.0"
|
||||
|
||||
void-elements@^2.0.1:
|
||||
version "2.0.1"
|
||||
resolved "https://registry.yarnpkg.com/void-elements/-/void-elements-2.0.1.tgz#c066afb582bb1cb4128d60ea92392e94d5e9dbec"
|
||||
|
Loading…
Reference in New Issue
Block a user