Migration to bootstrap v4 changes
|
@ -1,4 +1,6 @@
|
||||||
{
|
{
|
||||||
"server_config": "standard",
|
"server_config": "password",
|
||||||
"deployment": "develop"
|
"deployment": "develop",
|
||||||
|
"user": "vakaris",
|
||||||
|
"password_hash": "9ece086e9bac491fac5c1d1046ca11d737b92a2b2ebd93f005d7b710110c0a678288166e7fbe796883a4f2e9b3ca9f484f521d0ce464345cc1aec96779149c14"
|
||||||
}
|
}
|
|
@ -1352,6 +1352,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.36.tgz",
|
"resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.36.tgz",
|
||||||
"integrity": "sha512-7TUK/k2/QGpEAv/BCwSHlYu3NXZhQ9ZwBYpzr9tjlPIL2C5BeGhH3DmVavRx3ZNyELX5TLC91JTz/cen6AAtIQ=="
|
"integrity": "sha512-7TUK/k2/QGpEAv/BCwSHlYu3NXZhQ9ZwBYpzr9tjlPIL2C5BeGhH3DmVavRx3ZNyELX5TLC91JTz/cen6AAtIQ=="
|
||||||
},
|
},
|
||||||
|
"@types/json-schema": {
|
||||||
|
"version": "7.0.5",
|
||||||
|
"resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.5.tgz",
|
||||||
|
"integrity": "sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ=="
|
||||||
|
},
|
||||||
"@types/minimatch": {
|
"@types/minimatch": {
|
||||||
"version": "3.0.3",
|
"version": "3.0.3",
|
||||||
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
|
"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.3.tgz",
|
||||||
|
@ -7578,11 +7583,26 @@
|
||||||
"resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz",
|
"resolved": "https://registry.npmjs.org/lodash.flow/-/lodash.flow-3.5.0.tgz",
|
||||||
"integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o="
|
"integrity": "sha1-h79AKSuM+D5OjOGjrkIJ4gBxZ1o="
|
||||||
},
|
},
|
||||||
|
"lodash.get": {
|
||||||
|
"version": "4.4.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz",
|
||||||
|
"integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk="
|
||||||
|
},
|
||||||
|
"lodash.pick": {
|
||||||
|
"version": "4.4.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz",
|
||||||
|
"integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM="
|
||||||
|
},
|
||||||
"lodash.restparam": {
|
"lodash.restparam": {
|
||||||
"version": "3.6.1",
|
"version": "3.6.1",
|
||||||
"resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
|
"resolved": "https://registry.npmjs.org/lodash.restparam/-/lodash.restparam-3.6.1.tgz",
|
||||||
"integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU="
|
"integrity": "sha1-k2pOMJ7zMKdkXtQUWYbIWuWyCAU="
|
||||||
},
|
},
|
||||||
|
"lodash.topath": {
|
||||||
|
"version": "4.5.2",
|
||||||
|
"resolved": "https://registry.npmjs.org/lodash.topath/-/lodash.topath-4.5.2.tgz",
|
||||||
|
"integrity": "sha1-NhY1Hzu6YZlKCTGYlmC9AyVP0Ak="
|
||||||
|
},
|
||||||
"lodash.union": {
|
"lodash.union": {
|
||||||
"version": "4.6.0",
|
"version": "4.6.0",
|
||||||
"resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
|
"resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz",
|
||||||
|
@ -10561,6 +10581,25 @@
|
||||||
"shortid": "2.2.15"
|
"shortid": "2.2.15"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"react-jsonschema-form-bs4": {
|
||||||
|
"version": "1.7.1",
|
||||||
|
"resolved": "https://registry.npmjs.org/react-jsonschema-form-bs4/-/react-jsonschema-form-bs4-1.7.1.tgz",
|
||||||
|
"integrity": "sha512-0SYhkHi9AByWsnE7lVokesFEpcb52QCCeHrhgvFO7lJ9IX6CBTr0ewjj7uERWY5OdWoCLA+tPcqO6RhA0R9TWQ==",
|
||||||
|
"requires": {
|
||||||
|
"@babel/runtime-corejs2": "7.9.6",
|
||||||
|
"@types/json-schema": "7.0.5",
|
||||||
|
"@types/react": "16.9.35",
|
||||||
|
"ajv": "6.12.2",
|
||||||
|
"core-js": "2.6.11",
|
||||||
|
"lodash.get": "4.4.2",
|
||||||
|
"lodash.pick": "4.4.0",
|
||||||
|
"lodash.topath": "4.5.2",
|
||||||
|
"prop-types": "15.7.2",
|
||||||
|
"react-is": "16.13.1",
|
||||||
|
"react-lifecycles-compat": "3.0.4",
|
||||||
|
"shortid": "2.2.15"
|
||||||
|
}
|
||||||
|
},
|
||||||
"react-lifecycles-compat": {
|
"react-lifecycles-compat": {
|
||||||
"version": "3.0.4",
|
"version": "3.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz",
|
||||||
|
|
|
@ -93,6 +93,7 @@
|
||||||
"react-hot-loader": "^4.12.20",
|
"react-hot-loader": "^4.12.20",
|
||||||
"react-json-tree": "^0.11.2",
|
"react-json-tree": "^0.11.2",
|
||||||
"react-jsonschema-form": "^1.8.0",
|
"react-jsonschema-form": "^1.8.0",
|
||||||
|
"react-jsonschema-form-bs4": "^1.7.1",
|
||||||
"react-particles-js": "^3.2.1",
|
"react-particles-js": "^3.2.1",
|
||||||
"react-redux": "^5.1.2",
|
"react-redux": "^5.1.2",
|
||||||
"react-router-dom": "^4.3.1",
|
"react-router-dom": "^4.3.1",
|
||||||
|
|
|
@ -127,53 +127,51 @@ class AppComponent extends AuthComponent {
|
||||||
return (
|
return (
|
||||||
<Router>
|
<Router>
|
||||||
<Container fluid>
|
<Container fluid>
|
||||||
<Row>
|
<Switch>
|
||||||
<Switch>
|
<Route path='/login' render={() => (<LoginPageComponent onStatusChange={this.updateStatus}/>)}/>
|
||||||
<Route path='/login' render={() => (<LoginPageComponent onStatusChange={this.updateStatus}/>)}/>
|
<Route path='/register' render={() => (<RegisterPageComponent onStatusChange={this.updateStatus}/>)}/>
|
||||||
<Route path='/register' render={() => (<RegisterPageComponent onStatusChange={this.updateStatus}/>)}/>
|
{this.renderRoute('/',
|
||||||
{this.renderRoute('/',
|
<StandardLayoutComponent component={RunServerPage}
|
||||||
<StandardLayoutComponent component={RunServerPage}
|
completedSteps={this.state.completedSteps}
|
||||||
completedSteps={this.state.completedSteps}
|
onStatusChange={this.updateStatus}
|
||||||
onStatusChange={this.updateStatus}
|
/>,
|
||||||
/>,
|
true)}
|
||||||
true)}
|
{this.renderRoute('/configure',
|
||||||
{this.renderRoute('/configure',
|
<StandardLayoutComponent component={ConfigurePage}
|
||||||
<StandardLayoutComponent component={ConfigurePage}
|
onStatusChange={this.updateStatus}
|
||||||
onStatusChange={this.updateStatus}
|
completedSteps={this.state.completedSteps}/>)}
|
||||||
completedSteps={this.state.completedSteps}/>)}
|
{this.renderRoute('/run-monkey',
|
||||||
{this.renderRoute('/run-monkey',
|
<StandardLayoutComponent component={RunMonkeyPage}
|
||||||
<StandardLayoutComponent component={RunMonkeyPage}
|
onStatusChange={this.updateStatus}
|
||||||
onStatusChange={this.updateStatus}
|
completedSteps={this.state.completedSteps}/>)}
|
||||||
completedSteps={this.state.completedSteps}/>)}
|
{this.renderRoute('/infection/map',
|
||||||
{this.renderRoute('/infection/map',
|
<StandardLayoutComponent component={MapPage}
|
||||||
<StandardLayoutComponent component={MapPage}
|
onStatusChange={this.updateStatus}
|
||||||
onStatusChange={this.updateStatus}
|
completedSteps={this.state.completedSteps}/>)}
|
||||||
completedSteps={this.state.completedSteps}/>)}
|
{this.renderRoute('/infection/telemetry',
|
||||||
{this.renderRoute('/infection/telemetry',
|
<StandardLayoutComponent component={TelemetryPage}
|
||||||
<StandardLayoutComponent component={TelemetryPage}
|
onStatusChange={this.updateStatus}
|
||||||
onStatusChange={this.updateStatus}
|
completedSteps={this.state.completedSteps}/>)}
|
||||||
completedSteps={this.state.completedSteps}/>)}
|
{this.renderRoute('/start-over',
|
||||||
{this.renderRoute('/start-over',
|
<StandardLayoutComponent component={StartOverPage}
|
||||||
<StandardLayoutComponent component={StartOverPage}
|
onStatusChange={this.updateStatus}
|
||||||
onStatusChange={this.updateStatus}
|
completedSteps={this.state.completedSteps}/>)}
|
||||||
completedSteps={this.state.completedSteps}/>)}
|
{this.redirectTo('/report', '/report/security')}
|
||||||
{this.redirectTo('/report', '/report/security')}
|
{this.renderRoute('/report/security',
|
||||||
{this.renderRoute('/report/security',
|
<StandardLayoutComponent component={ReportPage}
|
||||||
<StandardLayoutComponent component={ReportPage}
|
completedSteps={this.state.completedSteps}/>)}
|
||||||
completedSteps={this.state.completedSteps}/>)}
|
{this.renderRoute('/report/attack',
|
||||||
{this.renderRoute('/report/attack',
|
<StandardLayoutComponent component={ReportPage}
|
||||||
<StandardLayoutComponent component={ReportPage}
|
completedSteps={this.state.completedSteps}/>)}
|
||||||
completedSteps={this.state.completedSteps}/>)}
|
{this.renderRoute('/report/zeroTrust',
|
||||||
{this.renderRoute('/report/zeroTrust',
|
<StandardLayoutComponent component={ReportPage}
|
||||||
<StandardLayoutComponent component={ReportPage}
|
completedSteps={this.state.completedSteps}/>)}
|
||||||
completedSteps={this.state.completedSteps}/>)}
|
{this.renderRoute('/license',
|
||||||
{this.renderRoute('/license',
|
<StandardLayoutComponent component={LicensePage}
|
||||||
<StandardLayoutComponent component={LicensePage}
|
onStatusChange={this.updateStatus}
|
||||||
onStatusChange={this.updateStatus}
|
completedSteps={this.state.completedSteps}/>)}
|
||||||
completedSteps={this.state.completedSteps}/>)}
|
<Route component={NotFoundPage}/>
|
||||||
<Route component={NotFoundPage}/>
|
</Switch>
|
||||||
</Switch>
|
|
||||||
</Row>
|
|
||||||
</Container>
|
</Container>
|
||||||
</Router>
|
</Router>
|
||||||
);
|
);
|
||||||
|
|
|
@ -14,7 +14,7 @@ class SideNavComponent extends React.Component {
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<Col sm={3} md={2} className='sidebar'>
|
<>
|
||||||
<div className='header'>
|
<div className='header'>
|
||||||
<img alt="logo" src={logoImage} style={{width: '5vw', margin: '15px'}}/>
|
<img alt="logo" src={logoImage} style={{width: '5vw', margin: '15px'}}/>
|
||||||
<img src={infectionMonkeyImage} style={{width: '15vw'}} alt='Infection Monkey'/>
|
<img src={infectionMonkeyImage} style={{width: '15vw'}} alt='Infection Monkey'/>
|
||||||
|
@ -26,7 +26,7 @@ class SideNavComponent extends React.Component {
|
||||||
<span className='number'>1.</span>
|
<span className='number'>1.</span>
|
||||||
Run Monkey Island Server
|
Run Monkey Island Server
|
||||||
{this.props.completedSteps.run_server ?
|
{this.props.completedSteps.run_server ?
|
||||||
<FontAwesomeIcon icon={faCheck} className='pull-right checkmark text-success'/>
|
<FontAwesomeIcon icon={faCheck} className='pull-right checkmark'/>
|
||||||
: ''}
|
: ''}
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
|
@ -35,7 +35,7 @@ class SideNavComponent extends React.Component {
|
||||||
<span className='number'>2.</span>
|
<span className='number'>2.</span>
|
||||||
Run Monkey
|
Run Monkey
|
||||||
{this.props.completedSteps.run_monkey ?
|
{this.props.completedSteps.run_monkey ?
|
||||||
<FontAwesomeIcon icon={faCheck} className='pull-right checkmark text-success'/>
|
<FontAwesomeIcon icon={faCheck} className='pull-right checkmark'/>
|
||||||
: ''}
|
: ''}
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
|
@ -44,7 +44,7 @@ class SideNavComponent extends React.Component {
|
||||||
<span className='number'>3.</span>
|
<span className='number'>3.</span>
|
||||||
Infection Map
|
Infection Map
|
||||||
{this.props.completedSteps.infection_done ?
|
{this.props.completedSteps.infection_done ?
|
||||||
<FontAwesomeIcon icon={faCheck} className='pull-right checkmark text-success'/>
|
<FontAwesomeIcon icon={faCheck} className='pull-right checkmark'/>
|
||||||
: ''}
|
: ''}
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
|
@ -58,7 +58,7 @@ class SideNavComponent extends React.Component {
|
||||||
<span className='number'>4.</span>
|
<span className='number'>4.</span>
|
||||||
Security Reports
|
Security Reports
|
||||||
{this.props.completedSteps.report_done ?
|
{this.props.completedSteps.report_done ?
|
||||||
<FontAwesomeIcon icon={faCheck} className='pull-right checkmark text-success'/>
|
<FontAwesomeIcon icon={faCheck} className='pull-right checkmark'/>
|
||||||
: ''}
|
: ''}
|
||||||
</NavLink>
|
</NavLink>
|
||||||
</li>
|
</li>
|
||||||
|
@ -87,7 +87,7 @@ class SideNavComponent extends React.Component {
|
||||||
<NavLink to='/license'>License</NavLink>
|
<NavLink to='/license'>License</NavLink>
|
||||||
</div>
|
</div>
|
||||||
<VersionComponent/>
|
<VersionComponent/>
|
||||||
</Col>)
|
</>)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ReactTable from 'react-table';
|
import ReactTable from 'react-table';
|
||||||
import marked from 'marked';
|
import marked from 'marked';
|
||||||
import '../../../styles/report/AttackReport.scss';
|
|
||||||
|
|
||||||
|
|
||||||
class MitigationsComponent extends React.Component {
|
class MitigationsComponent extends React.Component {
|
||||||
|
|
|
@ -1,13 +1,15 @@
|
||||||
import React from 'react'
|
import React from 'react'
|
||||||
import {Route} from 'react-router-dom'
|
import {Route} from 'react-router-dom'
|
||||||
import SideNavComponent from '../SideNavComponent'
|
import SideNavComponent from '../SideNavComponent'
|
||||||
import {Col} from 'react-bootstrap';
|
import {Col, Row} from 'react-bootstrap';
|
||||||
|
|
||||||
export const StandardLayoutComponent = ({component: Component, ...rest}) => (
|
export const StandardLayoutComponent = ({component: Component, ...rest}) => (
|
||||||
<Route {...rest} render={() => (
|
<Route {...rest} render={() => (
|
||||||
<Col sm={9} md={10} smOffset={3} mdOffset={2} className='main'>
|
<Row>
|
||||||
<SideNavComponent completedSteps={rest['completedSteps']}/>
|
<Col sm={3} md={3} lg={3} xl={2} className='sidebar'>
|
||||||
|
<SideNavComponent completedSteps={rest['completedSteps']}/>
|
||||||
|
</Col>
|
||||||
<Component {...rest} />
|
<Component {...rest} />
|
||||||
</Col>
|
</Row>
|
||||||
)}/>
|
)}/>
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,6 +1,7 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome'
|
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome'
|
||||||
import { faHandPointLeft } from '@fortawesome/free-solid-svg-icons/faHandPointLeft'
|
import {faHandPointLeft} from '@fortawesome/free-solid-svg-icons/faHandPointLeft'
|
||||||
|
import {faQuestionCircle} from '@fortawesome/free-solid-svg-icons/faQuestionCircle'
|
||||||
import Toggle from 'react-toggle';
|
import Toggle from 'react-toggle';
|
||||||
import {OverlayTrigger, Tooltip} from 'react-bootstrap';
|
import {OverlayTrigger, Tooltip} from 'react-bootstrap';
|
||||||
import download from 'downloadjs'
|
import download from 'downloadjs'
|
||||||
|
@ -10,8 +11,10 @@ class PreviewPaneComponent extends AuthComponent {
|
||||||
|
|
||||||
generateToolTip(text) {
|
generateToolTip(text) {
|
||||||
return (
|
return (
|
||||||
<OverlayTrigger placement="top" overlay={<Tooltip id="tooltip">{text}</Tooltip>}>
|
<OverlayTrigger placement="top"
|
||||||
<a><i className="glyphicon glyphicon-info-sign"/></a>
|
overlay={<Tooltip id="tooltip">{text}</Tooltip>}
|
||||||
|
delay={{ show: 250, hide: 400 }}>
|
||||||
|
<a><FontAwesomeIcon icon={faQuestionCircle} style={{'marginRight': '0.5em'}}/></a>
|
||||||
</OverlayTrigger>
|
</OverlayTrigger>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,15 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import Form from 'react-jsonschema-form';
|
import Form from 'react-jsonschema-form-bs4';
|
||||||
import {Col, Modal, Nav, NavItem} from 'react-bootstrap';
|
import {Col, Modal, Nav, Button} from 'react-bootstrap';
|
||||||
import FileSaver from 'file-saver';
|
import FileSaver from 'file-saver';
|
||||||
import AuthComponent from '../AuthComponent';
|
import AuthComponent from '../AuthComponent';
|
||||||
import {FilePond} from 'react-filepond';
|
import {FilePond} from 'react-filepond';
|
||||||
import 'filepond/dist/filepond.min.css';
|
import 'filepond/dist/filepond.min.css';
|
||||||
import ConfigMatrixComponent from '../attack/ConfigMatrixComponent';
|
import ConfigMatrixComponent from '../attack/ConfigMatrixComponent';
|
||||||
|
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
|
||||||
|
import {faInfoCircle} from "@fortawesome/free-solid-svg-icons/faInfoCircle";
|
||||||
|
import {faCheck} from "@fortawesome/free-solid-svg-icons/faCheck";
|
||||||
|
import {faExclamationCircle} from "@fortawesome/free-solid-svg-icons/faExclamationCircle";
|
||||||
|
|
||||||
const ATTACK_URL = '/api/attack';
|
const ATTACK_URL = '/api/attack';
|
||||||
const CONFIG_URL = '/api/configuration/island';
|
const CONFIG_URL = '/api/configuration/island';
|
||||||
|
@ -169,8 +173,8 @@ class ConfigurePageComponent extends AuthComponent {
|
||||||
this.setInitialConfig(res.configuration);
|
this.setInitialConfig(res.configuration);
|
||||||
this.props.onStatusChange();
|
this.props.onStatusChange();
|
||||||
}).catch(error => {
|
}).catch(error => {
|
||||||
console.log('Bad configuration: ' + error.toString());
|
console.log('Bad configuration: ' + error.toString());
|
||||||
this.setState({lastAction: 'invalid_configuration'});
|
this.setState({lastAction: 'invalid_configuration'});
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -225,14 +229,15 @@ class ConfigurePageComponent extends AuthComponent {
|
||||||
You have unsubmitted changes. Submit them before proceeding.
|
You have unsubmitted changes. Submit them before proceeding.
|
||||||
</p>
|
</p>
|
||||||
<div className="text-center">
|
<div className="text-center">
|
||||||
<button type="button"
|
<Button type="button"
|
||||||
className="btn btn-success btn-lg"
|
className="btn btn-success"
|
||||||
|
size='lg'
|
||||||
style={{margin: '5px'}}
|
style={{margin: '5px'}}
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
this.setState({showAttackAlert: false})
|
this.setState({showAttackAlert: false})
|
||||||
}}>
|
}}>
|
||||||
Cancel
|
Cancel
|
||||||
</button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</Modal.Body>
|
</Modal.Body>
|
||||||
</Modal>)
|
</Modal>)
|
||||||
|
@ -452,7 +457,8 @@ class ConfigurePageComponent extends AuthComponent {
|
||||||
uiSchema={this.uiSchemas[this.state.selectedSection]}
|
uiSchema={this.uiSchemas[this.state.selectedSection]}
|
||||||
formData={this.state.configuration[this.state.selectedSection]}
|
formData={this.state.configuration[this.state.selectedSection]}
|
||||||
onChange={this.onChange}
|
onChange={this.onChange}
|
||||||
noValidate={true}>
|
noValidate={true}
|
||||||
|
className={'config-form'}>
|
||||||
<button type="submit" className={'hidden'}>Submit</button>
|
<button type="submit" className={'hidden'}>Submit</button>
|
||||||
</Form>
|
</Form>
|
||||||
</div>)
|
</div>)
|
||||||
|
@ -461,7 +467,7 @@ class ConfigurePageComponent extends AuthComponent {
|
||||||
renderBasicNetworkWarning = () => {
|
renderBasicNetworkWarning = () => {
|
||||||
if (this.state.selectedSection === 'basic_network') {
|
if (this.state.selectedSection === 'basic_network') {
|
||||||
return (<div className="alert alert-info">
|
return (<div className="alert alert-info">
|
||||||
<i className="glyphicon glyphicon-info-sign" style={{'marginRight': '5px'}}/>
|
<FontAwesomeIcon icon={faInfoCircle} style={{'marginRight': '5px'}}/>
|
||||||
The Monkey scans its subnet if "Local network scan" is ticked. Additionally the monkey scans machines
|
The Monkey scans its subnet if "Local network scan" is ticked. Additionally the monkey scans machines
|
||||||
according to its range class.
|
according to its range class.
|
||||||
</div>)
|
</div>)
|
||||||
|
@ -471,10 +477,15 @@ class ConfigurePageComponent extends AuthComponent {
|
||||||
};
|
};
|
||||||
|
|
||||||
renderNav = () => {
|
renderNav = () => {
|
||||||
return (<Nav bsStyle="tabs" justified
|
return (<Nav variant="tabs"
|
||||||
|
fill
|
||||||
activeKey={this.state.selectedSection} onSelect={this.setSelectedSection}
|
activeKey={this.state.selectedSection} onSelect={this.setSelectedSection}
|
||||||
style={{'marginBottom': '2em'}}>
|
style={{'marginBottom': '2em'}}
|
||||||
{this.state.sections.map(section => <NavItem key={section.key} eventKey={section.key}>{section.title}</NavItem>)}
|
className={'config-nav'}>
|
||||||
|
{this.state.sections.map(section =>
|
||||||
|
<Nav.Item>
|
||||||
|
<Nav.Link eventKey={section.key}>{section.title}</Nav.Link>
|
||||||
|
</Nav.Item>)}
|
||||||
</Nav>)
|
</Nav>)
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -491,7 +502,9 @@ class ConfigurePageComponent extends AuthComponent {
|
||||||
content = this.renderConfigContent(displayedSchema)
|
content = this.renderConfigContent(displayedSchema)
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<Col xs={12} lg={10}>
|
<Col sm={{offset: 3, span: 9}} md={{offset: 3, span: 9}}
|
||||||
|
lg={{offset: 3, span: 8}} xl={{offset: 2, span: 8}}
|
||||||
|
className={'main'}>
|
||||||
{this.renderAttackAlertModal()}
|
{this.renderAttackAlertModal()}
|
||||||
<h1 className="page-title">Monkey Configuration</h1>
|
<h1 className="page-title">Monkey Configuration</h1>
|
||||||
{this.renderNav()}
|
{this.renderNav()}
|
||||||
|
@ -509,7 +522,8 @@ class ConfigurePageComponent extends AuthComponent {
|
||||||
className="btn btn-info btn-lg" style={{margin: '5px'}}>
|
className="btn btn-info btn-lg" style={{margin: '5px'}}>
|
||||||
Import Config
|
Import Config
|
||||||
</button>
|
</button>
|
||||||
<input id="uploadInputInternal" type="file" accept=".conf" onChange={this.importConfig} style={{display: 'none'}}/>
|
<input id="uploadInputInternal" type="file" accept=".conf" onChange={this.importConfig}
|
||||||
|
style={{display: 'none'}}/>
|
||||||
<button type="button" onClick={this.exportConfig} className="btn btn-info btn-lg" style={{margin: '5px'}}>
|
<button type="button" onClick={this.exportConfig} className="btn btn-info btn-lg" style={{margin: '5px'}}>
|
||||||
Export config
|
Export config
|
||||||
</button>
|
</button>
|
||||||
|
@ -517,31 +531,31 @@ class ConfigurePageComponent extends AuthComponent {
|
||||||
<div>
|
<div>
|
||||||
{this.state.lastAction === 'reset' ?
|
{this.state.lastAction === 'reset' ?
|
||||||
<div className="alert alert-success">
|
<div className="alert alert-success">
|
||||||
<i className="glyphicon glyphicon-ok-sign" style={{'marginRight': '5px'}}/>
|
<FontAwesomeIcon icon={faCheck} style={{'marginRight': '5px'}}/>
|
||||||
Configuration reset successfully.
|
Configuration reset successfully.
|
||||||
</div>
|
</div>
|
||||||
: ''}
|
: ''}
|
||||||
{this.state.lastAction === 'saved' ?
|
{this.state.lastAction === 'saved' ?
|
||||||
<div className="alert alert-success">
|
<div className="alert alert-success">
|
||||||
<i className="glyphicon glyphicon-ok-sign" style={{'marginRight': '5px'}}/>
|
<FontAwesomeIcon icon={faCheck} style={{'marginRight': '5px'}}/>
|
||||||
Configuration saved successfully.
|
Configuration saved successfully.
|
||||||
</div>
|
</div>
|
||||||
: ''}
|
: ''}
|
||||||
{this.state.lastAction === 'import_failure' ?
|
{this.state.lastAction === 'import_failure' ?
|
||||||
<div className="alert alert-danger">
|
<div className="alert alert-danger">
|
||||||
<i className="glyphicon glyphicon-exclamation-sign" style={{'marginRight': '5px'}}/>
|
<FontAwesomeIcon icon={faExclamationCircle} style={{'marginRight': '5px'}}/>
|
||||||
Failed importing configuration. Invalid config file.
|
Failed importing configuration. Invalid config file.
|
||||||
</div>
|
</div>
|
||||||
: ''}
|
: ''}
|
||||||
{this.state.lastAction === 'invalid_configuration' ?
|
{this.state.lastAction === 'invalid_configuration' ?
|
||||||
<div className="alert alert-danger">
|
<div className="alert alert-danger">
|
||||||
<i className="glyphicon glyphicon-exclamation-sign" style={{'marginRight': '5px'}}/>
|
<FontAwesomeIcon icon={faExclamationCircle} style={{'marginRight': '5px'}}/>
|
||||||
An invalid configuration file was imported or submitted.
|
An invalid configuration file was imported or submitted.
|
||||||
</div>
|
</div>
|
||||||
: ''}
|
: ''}
|
||||||
{this.state.lastAction === 'import_success' ?
|
{this.state.lastAction === 'import_success' ?
|
||||||
<div className="alert alert-success">
|
<div className="alert alert-success">
|
||||||
<i className="glyphicon glyphicon-ok-sign" style={{'marginRight': '5px'}}/>
|
<FontAwesomeIcon icon={faCheck} style={{'marginRight': '5px'}}/>
|
||||||
Configuration imported successfully.
|
Configuration imported successfully.
|
||||||
</div>
|
</div>
|
||||||
: ''}
|
: ''}
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {Col} from 'react-bootstrap';
|
import {Col} from 'react-bootstrap';
|
||||||
import rainge from 'rainge'
|
import rainge from 'rainge';
|
||||||
|
import {FontAwesomeIcon} from "@fortawesome/react-fontawesome";
|
||||||
|
import {faCopyright} from "@fortawesome/free-regular-svg-icons";
|
||||||
|
|
||||||
class LicensePageComponent extends React.Component {
|
class LicensePageComponent extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
@ -15,11 +17,13 @@ class LicensePageComponent extends React.Component {
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<Col xs={12} lg={8}>
|
<Col sm={{offset: 3, span: 9}} md={{offset: 3, span: 9}}
|
||||||
|
lg={{offset: 3, span: 9}} xl={{offset: 2, span: 7}}
|
||||||
|
className={'main'}>
|
||||||
<h1 className="page-title">License</h1>
|
<h1 className="page-title">License</h1>
|
||||||
<div style={{'fontSize': '1.2em'}}>
|
<div style={{'fontSize': '1.2em'}}>
|
||||||
<p>
|
<p>
|
||||||
Copyright <i className="glyphicon glyphicon-copyright-mark"/> {rainge(2015)} Guardicore Ltd.
|
Copyright <FontAwesomeIcon icon={faCopyright}/> {rainge(2015)} Guardicore Ltd.
|
||||||
<br/>
|
<br/>
|
||||||
Licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html" rel="noopener noreferrer" target="_blank">GPLv3</a>.
|
Licensed under <a href="https://www.gnu.org/licenses/gpl-3.0.html" rel="noopener noreferrer" target="_blank">GPLv3</a>.
|
||||||
</p>
|
</p>
|
||||||
|
|
|
@ -55,9 +55,11 @@ class LoginPageComponent extends React.Component {
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<Col xs={12} lg={8}>
|
<Col sm={{offset: 3, span: 9}} md={{offset: 3, span: 9}}
|
||||||
|
lg={{offset: 3, span: 9}} xl={{offset: 2, span: 7}}
|
||||||
|
className={'main'}>
|
||||||
<h1 className="page-title">Login</h1>
|
<h1 className="page-title">Login</h1>
|
||||||
<div className="col-sm-6 col-sm-offset-3" style={{'fontSize': '1.2em'}}>
|
<div style={{'fontSize': '1.2em'}}>
|
||||||
<div className="panel panel-default">
|
<div className="panel panel-default">
|
||||||
<div className="panel-heading text-center">
|
<div className="panel-heading text-center">
|
||||||
<b>Login</b>
|
<b>Login</b>
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
import '../../styles/report/ReportPage.scss';
|
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {Route} from 'react-router-dom';
|
import {Route} from 'react-router-dom';
|
||||||
import {Col, Nav, NavItem} from 'react-bootstrap';
|
import {Col, Nav} from 'react-bootstrap';
|
||||||
import AuthComponent from '../AuthComponent';
|
import AuthComponent from '../AuthComponent';
|
||||||
import MustRunMonkeyWarning from '../report-components/common/MustRunMonkeyWarning';
|
import MustRunMonkeyWarning from '../report-components/common/MustRunMonkeyWarning';
|
||||||
import AttackReport from '../report-components/AttackReport'
|
import AttackReport from '../report-components/AttackReport'
|
||||||
|
@ -30,10 +28,10 @@ class ReportPageComponent extends AuthComponent {
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
static selectReport(reports){
|
static selectReport(reports) {
|
||||||
let url = window.location.href;
|
let url = window.location.href;
|
||||||
for (let report_name in reports){
|
for (let report_name in reports) {
|
||||||
if (reports.hasOwnProperty(report_name) && url.endsWith(reports[report_name])){
|
if (reports.hasOwnProperty(report_name) && url.endsWith(reports[report_name])) {
|
||||||
return reports[report_name];
|
return reports[report_name];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -109,24 +107,32 @@ class ReportPageComponent extends AuthComponent {
|
||||||
renderNav = () => {
|
renderNav = () => {
|
||||||
return (
|
return (
|
||||||
<Route render={({history}) => (
|
<Route render={({history}) => (
|
||||||
<Nav bsStyle='tabs' justified
|
<Nav variant='tabs'
|
||||||
activeKey={this.state.selectedSection}
|
fill
|
||||||
onSelect={(key) => {this.setSelectedSection(key); history.push(key)}}
|
activeKey={this.state.selectedSection}
|
||||||
className={'report-nav'}>
|
onSelect={(key) => {
|
||||||
{this.state.sections.map(section => this.renderNavButton(section))}
|
this.setSelectedSection(key);
|
||||||
</Nav>)}/>)
|
history.push(key)
|
||||||
|
}}
|
||||||
|
className={'report-nav'}>
|
||||||
|
{this.state.sections.map(section => this.renderNavButton(section))}
|
||||||
|
</Nav>)}/>)
|
||||||
};
|
};
|
||||||
|
|
||||||
renderNavButton = (section) => {
|
renderNavButton = (section) => {
|
||||||
return (
|
return (
|
||||||
<NavItem key={section.key}
|
<Nav.Item>
|
||||||
eventKey={section.key}
|
<Nav.Link key={section.key}
|
||||||
onSelect={() => {}}>
|
eventKey={section.key}
|
||||||
|
onSelect={() => {
|
||||||
|
}}>
|
||||||
{section.title}
|
{section.title}
|
||||||
</NavItem>)};
|
</Nav.Link>
|
||||||
|
</Nav.Item>)
|
||||||
|
};
|
||||||
|
|
||||||
getReportContent() {
|
getReportContent() {
|
||||||
switch(this.state.selectedSection){
|
switch (this.state.selectedSection) {
|
||||||
case 'security':
|
case 'security':
|
||||||
return (<SecurityReport report={this.state.securityReport}/>);
|
return (<SecurityReport report={this.state.securityReport}/>);
|
||||||
case 'attack':
|
case 'attack':
|
||||||
|
@ -145,7 +151,9 @@ class ReportPageComponent extends AuthComponent {
|
||||||
content = <MustRunMonkeyWarning/>;
|
content = <MustRunMonkeyWarning/>;
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<Col xs={12} lg={12}>
|
<Col sm={{offset: 3, span: 9}} md={{offset: 3, span: 9}}
|
||||||
|
lg={{offset: 3, span: 9}} xl={{offset: 2, span: 10}}
|
||||||
|
className={'report-wrapper'}>
|
||||||
<h1 className='page-title no-print'>4. Security Reports</h1>
|
<h1 className='page-title no-print'>4. Security Reports</h1>
|
||||||
{this.renderNav()}
|
{this.renderNav()}
|
||||||
<MonkeysStillAliveWarning allMonkeysAreDead={this.state.allMonkeysAreDead}/>
|
<MonkeysStillAliveWarning allMonkeysAreDead={this.state.allMonkeysAreDead}/>
|
||||||
|
|
|
@ -1,19 +1,21 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {css} from '@emotion/core';
|
import {css} from '@emotion/core';
|
||||||
import {Button, Col, Well, Nav, NavItem, Collapse} from 'react-bootstrap';
|
import {Button, Col, Card, Nav, Collapse} from 'react-bootstrap';
|
||||||
import CopyToClipboard from 'react-copy-to-clipboard';
|
import CopyToClipboard from 'react-copy-to-clipboard';
|
||||||
import GridLoader from 'react-spinners/GridLoader';
|
import GridLoader from 'react-spinners/GridLoader';
|
||||||
|
|
||||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
|
||||||
import { faClipboard } from '@fortawesome/free-solid-svg-icons/faClipboard';
|
import {faClipboard} from '@fortawesome/free-solid-svg-icons/faClipboard';
|
||||||
import { faCheck } from '@fortawesome/free-solid-svg-icons/faCheck';
|
import {faCheck} from '@fortawesome/free-solid-svg-icons/faCheck';
|
||||||
import { faSync } from '@fortawesome/free-solid-svg-icons/faSync';
|
import {faSync} from '@fortawesome/free-solid-svg-icons/faSync';
|
||||||
|
|
||||||
import {Link} from 'react-router-dom';
|
import {Link} from 'react-router-dom';
|
||||||
import AuthComponent from '../AuthComponent';
|
import AuthComponent from '../AuthComponent';
|
||||||
import AwsRunTable from '../run-monkey/AwsRunTable';
|
import AwsRunTable from '../run-monkey/AwsRunTable';
|
||||||
|
|
||||||
import '../../styles/MonkeyRunPage.scss';
|
import '../../styles/MonkeyRunPage.scss';
|
||||||
|
import {faInfoCircle} from "@fortawesome/free-solid-svg-icons/faInfoCircle";
|
||||||
|
import {faExclamationTriangle} from "@fortawesome/free-solid-svg-icons/faExclamationTriangle";
|
||||||
|
|
||||||
const loading_css_override = css`
|
const loading_css_override = css`
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -149,7 +151,7 @@ class RunMonkeyPageComponent extends AuthComponent {
|
||||||
cmdText = RunMonkeyPageComponent.generateWindowsCmd(this.state.selectedIp, is32Bit);
|
cmdText = RunMonkeyPageComponent.generateWindowsCmd(this.state.selectedIp, is32Bit);
|
||||||
}
|
}
|
||||||
return (
|
return (
|
||||||
<Well key={'cmdDiv' + this.state.selectedIp} className="well-sm" style={{'margin': '0.5em'}}>
|
<Card key={'cmdDiv' + this.state.selectedIp} style={{'margin': '0.5em'}}>
|
||||||
<div style={{'overflow': 'auto', 'padding': '0.5em'}}>
|
<div style={{'overflow': 'auto', 'padding': '0.5em'}}>
|
||||||
<CopyToClipboard text={cmdText} className="pull-right btn-sm">
|
<CopyToClipboard text={cmdText} className="pull-right btn-sm">
|
||||||
<Button style={{margin: '-0.5em'}} title="Copy to Clipboard">
|
<Button style={{margin: '-0.5em'}} title="Copy to Clipboard">
|
||||||
|
@ -158,7 +160,7 @@ class RunMonkeyPageComponent extends AuthComponent {
|
||||||
</CopyToClipboard>
|
</CopyToClipboard>
|
||||||
<code>{cmdText}</code>
|
<code>{cmdText}</code>
|
||||||
</div>
|
</div>
|
||||||
</Well>
|
</Card>
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -253,7 +255,7 @@ class RunMonkeyPageComponent extends AuthComponent {
|
||||||
<div style={{'marginBottom': '2em'}}>
|
<div style={{'marginBottom': '2em'}}>
|
||||||
<div style={{'marginTop': '1em', 'marginBottom': '1em'}}>
|
<div style={{'marginTop': '1em', 'marginBottom': '1em'}}>
|
||||||
<p className="alert alert-info">
|
<p className="alert alert-info">
|
||||||
<i className="glyphicon glyphicon-info-sign" style={{'marginRight': '5px'}}/>
|
<FontAwesomeIcon icon={faInfoCircle} style={{'marginRight': '5px'}}/>
|
||||||
Not sure what this is? Not seeing your AWS EC2 instances? <a
|
Not sure what this is? Not seeing your AWS EC2 instances? <a
|
||||||
href="https://github.com/guardicore/monkey/wiki/Monkey-Island:-Running-the-monkey-on-AWS-EC2-instances"
|
href="https://github.com/guardicore/monkey/wiki/Monkey-Island:-Running-the-monkey-on-AWS-EC2-instances"
|
||||||
rel="noopener noreferrer" target="_blank">Read the documentation</a>!
|
rel="noopener noreferrer" target="_blank">Read the documentation</a>!
|
||||||
|
@ -261,9 +263,9 @@ class RunMonkeyPageComponent extends AuthComponent {
|
||||||
</div>
|
</div>
|
||||||
{
|
{
|
||||||
this.state.ips.length > 1 ?
|
this.state.ips.length > 1 ?
|
||||||
<Nav bsStyle="pills" justified activeKey={this.state.selectedIp} onSelect={this.setSelectedIp}
|
<Nav variant="pills" activeKey={this.state.selectedIp} onSelect={this.setSelectedIp}
|
||||||
style={{'marginBottom': '2em'}}>
|
style={{'marginBottom': '2em'}}>
|
||||||
{this.state.ips.map(ip => <NavItem key={ip} eventKey={ip}>{ip}</NavItem>)}
|
{this.state.ips.map(ip => <Nav.Item><Nav.Link eventKey={ip}>{ip}</Nav.Link></Nav.Item>)}
|
||||||
</Nav>
|
</Nav>
|
||||||
: <div style={{'marginBottom': '2em'}}/>
|
: <div style={{'marginBottom': '2em'}}/>
|
||||||
}
|
}
|
||||||
|
@ -273,13 +275,14 @@ class RunMonkeyPageComponent extends AuthComponent {
|
||||||
ref={r => (this.awsTable = r)}
|
ref={r => (this.awsTable = r)}
|
||||||
/>
|
/>
|
||||||
<div style={{'marginTop': '1em'}}>
|
<div style={{'marginTop': '1em'}}>
|
||||||
<button
|
<Button
|
||||||
onClick={this.runOnAws}
|
onClick={this.runOnAws}
|
||||||
className={'btn btn-default btn-md center-block'}
|
className={'btn btn-default btn-md center-block'}
|
||||||
disabled={this.state.awsClicked}>
|
disabled={this.state.awsClicked}>
|
||||||
Run on selected machines
|
Run on selected machines
|
||||||
{this.state.awsClicked ? <FontAwesomeIcon icon={faSync} className="text-success" style={{'marginLeft': '5px'}}/> : null}
|
{this.state.awsClicked ?
|
||||||
</button>
|
<FontAwesomeIcon icon={faSync} className="text-success" style={{'marginLeft': '5px'}}/> : null}
|
||||||
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
)
|
)
|
||||||
|
@ -287,20 +290,23 @@ class RunMonkeyPageComponent extends AuthComponent {
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<Col xs={12} lg={8}>
|
<Col sm={{offset: 3, span: 9}} md={{offset: 3, span: 9}}
|
||||||
|
lg={{offset: 3, span: 9}} xl={{offset: 2, span: 7}}
|
||||||
|
className={'main'}>
|
||||||
<h1 className="page-title">2. Run the Monkey</h1>
|
<h1 className="page-title">2. Run the Monkey</h1>
|
||||||
<p style={{'marginBottom': '2em', 'fontSize': '1.2em'}}>
|
<p style={{'marginBottom': '2em', 'fontSize': '1.2em'}}>
|
||||||
Go ahead and run the monkey!
|
Go ahead and run the monkey!
|
||||||
<i> (Or <Link to="/configure">configure the monkey</Link> to fine tune its behavior)</i>
|
<i> (Or <Link to="/configure">configure the monkey</Link> to fine tune its behavior)</i>
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p className={'text-center'}>
|
||||||
<button onClick={this.runLocalMonkey}
|
<Button onClick={this.runLocalMonkey}
|
||||||
className="btn btn-default btn-lg center-block"
|
variant={'outline-monkey'}
|
||||||
|
size='lg'
|
||||||
disabled={this.state.runningOnIslandState !== 'not_running'}
|
disabled={this.state.runningOnIslandState !== 'not_running'}
|
||||||
>
|
>
|
||||||
Run on Monkey Island Server
|
Run on Monkey Island Server
|
||||||
{RunMonkeyPageComponent.renderIconByState(this.state.runningOnIslandState)}
|
{RunMonkeyPageComponent.renderIconByState(this.state.runningOnIslandState)}
|
||||||
</button>
|
</Button>
|
||||||
{
|
{
|
||||||
// TODO: implement button functionality
|
// TODO: implement button functionality
|
||||||
/*
|
/*
|
||||||
|
@ -317,11 +323,14 @@ class RunMonkeyPageComponent extends AuthComponent {
|
||||||
<p className="text-center">
|
<p className="text-center">
|
||||||
OR
|
OR
|
||||||
</p>
|
</p>
|
||||||
<p style={this.state.showManual || !this.state.isOnAws ? {'marginBottom': '2em'} : {}}>
|
<p className={'text-center'}
|
||||||
<button onClick={this.toggleManual}
|
style={this.state.showManual || !this.state.isOnAws ? {'marginBottom': '2em'} : {}}>
|
||||||
className={'btn btn-default btn-lg center-block' + (this.state.showManual ? ' active' : '')}>
|
<Button onClick={this.toggleManual}
|
||||||
|
variant={'outline-monkey'}
|
||||||
|
size='lg'
|
||||||
|
className={(this.state.showManual ? 'active' : '')}>
|
||||||
Run on a machine of your choice
|
Run on a machine of your choice
|
||||||
</button>
|
</Button>
|
||||||
</p>
|
</p>
|
||||||
<Collapse in={this.state.showManual}>
|
<Collapse in={this.state.showManual}>
|
||||||
<div style={{'marginBottom': '2em'}}>
|
<div style={{'marginBottom': '2em'}}>
|
||||||
|
@ -329,17 +338,34 @@ class RunMonkeyPageComponent extends AuthComponent {
|
||||||
Choose the operating system where you want to run the monkey
|
Choose the operating system where you want to run the monkey
|
||||||
{this.state.ips.length > 1 ? ', and the interface to communicate with.' : '.'}
|
{this.state.ips.length > 1 ? ', and the interface to communicate with.' : '.'}
|
||||||
</p>
|
</p>
|
||||||
<Nav bsStyle='pills' id={'bootstrap-override'} className={'runOnOsButtons'}
|
<Nav variant='pills' id={'bootstrap-override'} className={'run-on-os-buttons'}
|
||||||
justified activeKey={this.state.selectedOs} onSelect={this.setSelectedOs}>
|
activeKey={this.state.selectedOs} onSelect={this.setSelectedOs}>
|
||||||
<NavItem key='windows-32' eventKey='windows-32'>Windows (32 bit)</NavItem>
|
<Nav.Item>
|
||||||
<NavItem key='windows-64' eventKey='windows-64'>Windows (64 bit)</NavItem>
|
<Nav.Link eventKey={'windows-32'}>
|
||||||
<NavItem key='linux-32' eventKey='linux-32'>Linux (32 bit)</NavItem>
|
Windows (32 bit)
|
||||||
<NavItem key='linux-64' eventKey='linux-64'>Linux (64 bit)</NavItem>
|
</Nav.Link>
|
||||||
|
</Nav.Item>
|
||||||
|
<Nav.Item>
|
||||||
|
<Nav.Link eventKey='windows-64'>
|
||||||
|
Windows (64 bit)
|
||||||
|
</Nav.Link>
|
||||||
|
</Nav.Item>
|
||||||
|
<Nav.Item>
|
||||||
|
<Nav.Link eventKey='linux-32' variant={'monkey-alt'}>
|
||||||
|
Linux (32 bit)
|
||||||
|
</Nav.Link>
|
||||||
|
</Nav.Item>
|
||||||
|
<Nav.Item>
|
||||||
|
<Nav.Link eventKey='linux-64'>
|
||||||
|
Linux (64 bit)
|
||||||
|
</Nav.Link>
|
||||||
|
</Nav.Item>
|
||||||
</Nav>
|
</Nav>
|
||||||
{this.state.ips.length > 1 ?
|
{this.state.ips.length > 1 ?
|
||||||
<Nav bsStyle="pills" justified activeKey={this.state.selectedIp} onSelect={this.setSelectedIp}
|
<Nav variant="pills" activeKey={this.state.selectedIp} onSelect={this.setSelectedIp}
|
||||||
style={{'marginBottom': '2em'}}>
|
className={'run-on-os-buttons'}>
|
||||||
{this.state.ips.map(ip => <NavItem key={ip} eventKey={ip}>{ip}</NavItem>)}
|
{this.state.ips.map(ip => <Nav.Item>
|
||||||
|
<Nav.Link eventKey={ip}>{ip}</Nav.Link></Nav.Item>)}
|
||||||
</Nav>
|
</Nav>
|
||||||
: <div style={{'marginBottom': '2em'}}/>
|
: <div style={{'marginBottom': '2em'}}/>
|
||||||
}
|
}
|
||||||
|
@ -351,7 +377,7 @@ class RunMonkeyPageComponent extends AuthComponent {
|
||||||
</Collapse>
|
</Collapse>
|
||||||
{
|
{
|
||||||
this.state.isLoadingAws ?
|
this.state.isLoadingAws ?
|
||||||
<p style={{'marginBottom': '2em', 'align': 'center'}}>
|
<div style={{'marginBottom': '2em', 'align': 'center'}}>
|
||||||
<div className='sweet-loading'>
|
<div className='sweet-loading'>
|
||||||
<GridLoader
|
<GridLoader
|
||||||
css={loading_css_override}
|
css={loading_css_override}
|
||||||
|
@ -361,7 +387,7 @@ class RunMonkeyPageComponent extends AuthComponent {
|
||||||
loading={this.state.loading}
|
loading={this.state.loading}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</p>
|
</div>
|
||||||
: null
|
: null
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
|
@ -374,11 +400,13 @@ class RunMonkeyPageComponent extends AuthComponent {
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
this.state.isOnAws ?
|
this.state.isOnAws ?
|
||||||
<p style={{'marginBottom': '2em'}}>
|
<p style={{'marginBottom': '2em'}} className={'text-center'}>
|
||||||
<button onClick={this.toggleAws}
|
<Button onClick={this.toggleAws}
|
||||||
className={'btn btn-default btn-lg center-block' + (this.state.showAws ? ' active' : '')}>
|
className={(this.state.showAws ? ' active' : '')}
|
||||||
|
size='lg'
|
||||||
|
variant={'outline-monkey'}>
|
||||||
Run on AWS machine of your choice
|
Run on AWS machine of your choice
|
||||||
</button>
|
</Button>
|
||||||
</p>
|
</p>
|
||||||
:
|
:
|
||||||
null
|
null
|
||||||
|
@ -387,8 +415,8 @@ class RunMonkeyPageComponent extends AuthComponent {
|
||||||
{
|
{
|
||||||
this.state.isErrorWhileCollectingAwsMachines ?
|
this.state.isErrorWhileCollectingAwsMachines ?
|
||||||
<div style={{'marginTop': '1em'}}>
|
<div style={{'marginTop': '1em'}}>
|
||||||
<p class="alert alert-danger">
|
<p className="alert alert-danger">
|
||||||
<i className="glyphicon glyphicon-warning-sign" style={{'marginRight': '5px'}}/>
|
<FontAwesomeIcon icon={faExclamationTriangle} style={{'marginRight': '5px'}}/>
|
||||||
Error while collecting AWS machine data. Error
|
Error while collecting AWS machine data. Error
|
||||||
message: <code>{this.state.awsMachineCollectionErrorMsg}</code><br/>
|
message: <code>{this.state.awsMachineCollectionErrorMsg}</code><br/>
|
||||||
Are you sure you've set the correct role on your Island AWS machine?<br/>
|
Are you sure you've set the correct role on your Island AWS machine?<br/>
|
||||||
|
|
|
@ -9,7 +9,9 @@ class RunServerPageComponent extends React.Component {
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<Col xs={12} lg={8}>
|
<Col sm={{offset: 3, span: 9}} md={{offset: 3, span: 9}}
|
||||||
|
lg={{offset: 3, span: 9}} xl={{offset: 2, span: 7}}
|
||||||
|
className={'main'}>
|
||||||
<h1 className="page-title">1. Monkey Island Server</h1>
|
<h1 className="page-title">1. Monkey Island Server</h1>
|
||||||
<div style={{'fontSize': '1.2em'}}>
|
<div style={{'fontSize': '1.2em'}}>
|
||||||
<p style={{'marginTop': '30px'}}>Congrats! You have successfully set up the Monkey Island
|
<p style={{'marginTop': '30px'}}>Congrats! You have successfully set up the Monkey Island
|
||||||
|
|
|
@ -1,9 +1,12 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {Col} from 'react-bootstrap';
|
import {Col, Button} from 'react-bootstrap';
|
||||||
import {Link} from 'react-router-dom';
|
import {Link} from 'react-router-dom';
|
||||||
import AuthComponent from '../AuthComponent';
|
import AuthComponent from '../AuthComponent';
|
||||||
import StartOverModal from '../ui-components/StartOverModal';
|
import StartOverModal from '../ui-components/StartOverModal';
|
||||||
import '../../styles/StartOverPage.scss';
|
import '../../styles/StartOverPage.scss';
|
||||||
|
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
|
||||||
|
import {faInfoCircle} from "@fortawesome/free-solid-svg-icons/faInfoCircle";
|
||||||
|
import {faCheck} from "@fortawesome/free-solid-svg-icons/faCheck";
|
||||||
|
|
||||||
class StartOverPageComponent extends AuthComponent {
|
class StartOverPageComponent extends AuthComponent {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
@ -32,7 +35,9 @@ class StartOverPageComponent extends AuthComponent {
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<Col xs={12} lg={8}>
|
<Col sm={{offset: 3, span: 9}} md={{offset: 3, span: 9}}
|
||||||
|
lg={{offset: 3, span: 9}} xl={{offset: 2, span: 7}}
|
||||||
|
className={'main'}>
|
||||||
<StartOverModal cleaned = {this.state.cleaned}
|
<StartOverModal cleaned = {this.state.cleaned}
|
||||||
showCleanDialog = {this.state.showCleanDialog}
|
showCleanDialog = {this.state.showCleanDialog}
|
||||||
allMonkeysAreDead = {this.state.allMonkeysAreDead}
|
allMonkeysAreDead = {this.state.allMonkeysAreDead}
|
||||||
|
@ -44,25 +49,25 @@ class StartOverPageComponent extends AuthComponent {
|
||||||
If you are finished and want to start over with a fresh configuration, erase the logs and clear the map
|
If you are finished and want to start over with a fresh configuration, erase the logs and clear the map
|
||||||
you can go ahead and
|
you can go ahead and
|
||||||
</p>
|
</p>
|
||||||
<p style={{margin: '20px'}}>
|
<p style={{margin: '20px'}} className={'text-center'}>
|
||||||
<button className="btn btn-danger btn-lg center-block"
|
<Button className="btn btn-danger btn-lg center-block"
|
||||||
onClick={() => {
|
onClick={() => {
|
||||||
this.setState({showCleanDialog: true});
|
this.setState({showCleanDialog: true});
|
||||||
this.updateMonkeysRunning();
|
this.updateMonkeysRunning();
|
||||||
}
|
}
|
||||||
}>
|
}>
|
||||||
Reset the Environment
|
Reset the Environment
|
||||||
</button>
|
</Button>
|
||||||
</p>
|
</p>
|
||||||
<div className="alert alert-info">
|
<div className="alert alert-info">
|
||||||
<i className="glyphicon glyphicon-info-sign" style={{'marginRight': '5px'}}/>
|
<FontAwesomeIcon icon={faInfoCircle} style={{'marginRight': '5px'}}/>
|
||||||
You don't have to reset the environment to keep running monkeys.
|
You don't have to reset the environment to keep running monkeys.
|
||||||
You can continue and <Link to="/run-monkey">Run More Monkeys</Link> as you wish,
|
You can continue and <Link to="/run-monkey">Run More Monkeys</Link> as you wish,
|
||||||
and see the results on the <Link to="/infection/map">Infection Map</Link> without deleting anything.
|
and see the results on the <Link to="/infection/map">Infection Map</Link> without deleting anything.
|
||||||
</div>
|
</div>
|
||||||
{this.state.cleaned ?
|
{this.state.cleaned ?
|
||||||
<div className="alert alert-success">
|
<div className="alert alert-success">
|
||||||
<i className="glyphicon glyphicon-ok-sign" style={{'marginRight': '5px'}}/>
|
<FontAwesomeIcon icon={faCheck} style={{'marginRight': '5px'}}/>
|
||||||
Environment was reset successfully
|
Environment was reset successfully
|
||||||
</div>
|
</div>
|
||||||
: ''}
|
: ''}
|
||||||
|
|
|
@ -1,9 +1,13 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {Button, Col} from 'react-bootstrap';
|
import {Button, Col} from 'react-bootstrap';
|
||||||
import JSONTree from 'react-json-tree'
|
import JSONTree from 'react-json-tree';
|
||||||
import {DataTable} from 'react-data-components';
|
import {DataTable} from 'react-data-components';
|
||||||
import AuthComponent from '../AuthComponent';
|
import AuthComponent from '../AuthComponent';
|
||||||
import download from 'downloadjs'
|
import download from 'downloadjs';
|
||||||
|
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
|
||||||
|
|
||||||
|
import '../../styles/TelemetryPage.scss';
|
||||||
|
import {faDownload} from "@fortawesome/free-solid-svg-icons/faDownload";
|
||||||
|
|
||||||
const renderJson = (val) => <JSONTree data={val} level={1} theme="eighties" invertTheme={true}/>;
|
const renderJson = (val) => <JSONTree data={val} level={1} theme="eighties" invertTheme={true}/>;
|
||||||
const renderTime = (val) => val.split('.')[0];
|
const renderTime = (val) => val.split('.')[0];
|
||||||
|
@ -41,9 +45,10 @@ class TelemetryPageComponent extends AuthComponent {
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
return (
|
return (
|
||||||
<div>
|
<Col sm={{offset: 3, span: 9}} md={{offset: 3, span: 9}}
|
||||||
|
lg={{offset: 3, span: 9}} xl={{offset: 2, span: 7}}
|
||||||
|
className={'main'}>
|
||||||
<div>
|
<div>
|
||||||
<Col xs={12} lg={8}>
|
|
||||||
<h1 className="page-title">Log</h1>
|
<h1 className="page-title">Log</h1>
|
||||||
<div className="data-table-container">
|
<div className="data-table-container">
|
||||||
<DataTable
|
<DataTable
|
||||||
|
@ -55,21 +60,18 @@ class TelemetryPageComponent extends AuthComponent {
|
||||||
pageLengthOptions={[20, 50, 100]}
|
pageLengthOptions={[20, 50, 100]}
|
||||||
/>
|
/>
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
|
||||||
</div>
|
</div>
|
||||||
<div>
|
<div>
|
||||||
<Col xs={12} lg={8}>
|
|
||||||
<h1 className="page-title"> Monkey Island Logs </h1>
|
<h1 className="page-title"> Monkey Island Logs </h1>
|
||||||
<div className="text-center" style={{marginBottom: '20px'}}>
|
<div className="text-center" style={{marginBottom: '20px'}}>
|
||||||
<p style={{'marginBottom': '2em', 'fontSize': '1.2em'}}> Download Monkey Island internal log file </p>
|
<p style={{'marginBottom': '2em', 'fontSize': '1.2em'}}> Download Monkey Island internal log file </p>
|
||||||
<Button bsSize="large" onClick={() => {
|
<Button bsSize="large" onClick={() => {
|
||||||
this.downloadIslandLog();
|
this.downloadIslandLog();
|
||||||
}}>
|
}}>
|
||||||
<i className="glyphicon glyphicon-download"/> Download </Button>
|
<FontAwesomeIcon icon={faDownload}/> Download </Button>
|
||||||
</div>
|
</div>
|
||||||
</Col>
|
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</Col>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {Col, Button} from 'react-bootstrap';
|
import {Col, Button} from 'react-bootstrap';
|
||||||
import '../../styles/Collapse.scss';
|
import '../../styles/Collapse.scss';
|
||||||
import '../../styles/report/AttackReport.scss';
|
|
||||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||||
import {faCircle} from '@fortawesome/free-solid-svg-icons/faCircle';
|
import {faCircle} from '@fortawesome/free-solid-svg-icons/faCircle';
|
||||||
import {faRadiation} from '@fortawesome/free-solid-svg-icons/faRadiation';
|
import {faRadiation} from '@fortawesome/free-solid-svg-icons/faRadiation';
|
||||||
|
@ -101,9 +100,9 @@ class AttackReport extends React.Component {
|
||||||
<div>
|
<div>
|
||||||
<p>
|
<p>
|
||||||
This report shows information about
|
This report shows information about
|
||||||
<Button bsStyle={'link'}
|
<Button variant={'link'}
|
||||||
href={'https://attack.mitre.org/'}
|
href={'https://attack.mitre.org/'}
|
||||||
bsSize={'lg'}
|
size={'lg'}
|
||||||
className={'attack-link'}
|
className={'attack-link'}
|
||||||
target={'_blank'}>
|
target={'_blank'}>
|
||||||
Mitre ATT&CK™
|
Mitre ATT&CK™
|
||||||
|
|
|
@ -18,6 +18,8 @@ import PrintReportButton from './common/PrintReportButton';
|
||||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||||
import { faMinus } from '@fortawesome/free-solid-svg-icons/faMinus';
|
import { faMinus } from '@fortawesome/free-solid-svg-icons/faMinus';
|
||||||
import guardicoreLogoImage from '../../images/guardicore-logo.png'
|
import guardicoreLogoImage from '../../images/guardicore-logo.png'
|
||||||
|
import {faExclamationTriangle} from '@fortawesome/free-solid-svg-icons';
|
||||||
|
import '../../styles/App.css';
|
||||||
|
|
||||||
|
|
||||||
class ReportPageComponent extends AuthComponent {
|
class ReportPageComponent extends AuthComponent {
|
||||||
|
@ -146,7 +148,7 @@ class ReportPageComponent extends AuthComponent {
|
||||||
''
|
''
|
||||||
:
|
:
|
||||||
<p className="alert alert-info">
|
<p className="alert alert-info">
|
||||||
<i className="glyphicon glyphicon-info-sign" style={{'marginRight': '5px'}}/>
|
<FontAwesomeIcon icon={faExclamationTriangle} style={{'marginRight': '5px'}}/>
|
||||||
To improve the monkey's detection rates, try adding users and passwords and enable the "Local
|
To improve the monkey's detection rates, try adding users and passwords and enable the "Local
|
||||||
network
|
network
|
||||||
scan" config value under <b>Basic - Network</b>.
|
scan" config value under <b>Basic - Network</b>.
|
||||||
|
@ -154,8 +156,8 @@ class ReportPageComponent extends AuthComponent {
|
||||||
}
|
}
|
||||||
<p>
|
<p>
|
||||||
The first monkey run was started on <span
|
The first monkey run was started on <span
|
||||||
className="label label-info">{this.state.report.overview.monkey_start_time}</span>. After <span
|
className="badge badge-info">{this.state.report.overview.monkey_start_time}</span>. After <span
|
||||||
className="label label-info">{this.state.report.overview.monkey_duration}</span>, all monkeys finished
|
className="badge badge-info">{this.state.report.overview.monkey_duration}</span>, all monkeys finished
|
||||||
propagation attempts.
|
propagation attempts.
|
||||||
</p>
|
</p>
|
||||||
<p>
|
<p>
|
||||||
|
@ -242,7 +244,7 @@ class ReportPageComponent extends AuthComponent {
|
||||||
}).length > 0 ?
|
}).length > 0 ?
|
||||||
<div>
|
<div>
|
||||||
During this simulated attack the Monkey uncovered <span
|
During this simulated attack the Monkey uncovered <span
|
||||||
className="label label-warning">
|
className="badge badge-warning">
|
||||||
{this.state.report.overview.issues.filter(function (x) {
|
{this.state.report.overview.issues.filter(function (x) {
|
||||||
return x === true;
|
return x === true;
|
||||||
}).length} threats</span>:
|
}).length} threats</span>:
|
||||||
|
@ -296,7 +298,7 @@ class ReportPageComponent extends AuthComponent {
|
||||||
:
|
:
|
||||||
<div>
|
<div>
|
||||||
During this simulated attack the Monkey uncovered <span
|
During this simulated attack the Monkey uncovered <span
|
||||||
className="label label-success">0 threats</span>.
|
className="badge badge-success">0 threats</span>.
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
</div>
|
</div>
|
||||||
|
@ -380,9 +382,9 @@ class ReportPageComponent extends AuthComponent {
|
||||||
<div>
|
<div>
|
||||||
<p>
|
<p>
|
||||||
The Monkey discovered <span
|
The Monkey discovered <span
|
||||||
className="label label-warning">{this.state.report.glance.scanned.length}</span> machines and
|
className="badge badge-warning">{this.state.report.glance.scanned.length}</span> machines and
|
||||||
successfully breached <span
|
successfully breached <span
|
||||||
className="label label-danger">{this.state.report.glance.exploited.length}</span> of them.
|
className="badge badge-danger">{this.state.report.glance.exploited.length}</span> of them.
|
||||||
</p>
|
</p>
|
||||||
<div className="text-center" style={{margin: '10px'}}>
|
<div className="text-center" style={{margin: '10px'}}>
|
||||||
<Line style={{width: '300px', marginRight: '5px'}} percent={exploitPercentage} strokeWidth="4"
|
<Line style={{width: '300px', marginRight: '5px'}} percent={exploitPercentage} strokeWidth="4"
|
||||||
|
@ -469,7 +471,7 @@ class ReportPageComponent extends AuthComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
generateInfoBadges(data_array) {
|
generateInfoBadges(data_array) {
|
||||||
return data_array.map(badge_data => <span className="label label-info" style={{margin: '2px'}}>{badge_data}</span>);
|
return data_array.map(badge_data => <span className="badge badge-info" style={{margin: '2px'}}>{badge_data}</span>);
|
||||||
}
|
}
|
||||||
|
|
||||||
generateCrossSegmentIssue(crossSegmentIssue) {
|
generateCrossSegmentIssue(crossSegmentIssue) {
|
||||||
|
@ -494,21 +496,21 @@ class ReportPageComponent extends AuthComponent {
|
||||||
}
|
}
|
||||||
|
|
||||||
generateShellshockPathListBadges(paths) {
|
generateShellshockPathListBadges(paths) {
|
||||||
return paths.map(path => <span className="label label-warning" style={{margin: '2px'}}>{path}</span>);
|
return paths.map(path => <span className="badge badge-warning" style={{margin: '2px'}}>{path}</span>);
|
||||||
}
|
}
|
||||||
|
|
||||||
generateSmbPasswordIssue(issue) {
|
generateSmbPasswordIssue(issue) {
|
||||||
return (
|
return (
|
||||||
<li>
|
<li>
|
||||||
Change <span className="label label-success">{issue.username}</span>'s password to a complex one-use password
|
Change <span className="badge badge-success">{issue.username}</span>'s password to a complex one-use password
|
||||||
that is not shared with other computers on the network.
|
that is not shared with other computers on the network.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
The machine <span className="label label-primary">{issue.machine}</span> (<span
|
The machine <span className="badge badge-primary">{issue.machine}</span> (<span
|
||||||
className="label label-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
className="badge badge-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
||||||
className="label label-danger">SMB</span> attack.
|
className="badge badge-danger">SMB</span> attack.
|
||||||
<br/>
|
<br/>
|
||||||
The Monkey authenticated over the SMB protocol with user <span
|
The Monkey authenticated over the SMB protocol with user <span
|
||||||
className="label label-success">{issue.username}</span> and its password.
|
className="badge badge-success">{issue.username}</span> and its password.
|
||||||
</CollapsibleWellComponent>
|
</CollapsibleWellComponent>
|
||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
|
@ -517,15 +519,15 @@ class ReportPageComponent extends AuthComponent {
|
||||||
generateSmbPthIssue(issue) {
|
generateSmbPthIssue(issue) {
|
||||||
return (
|
return (
|
||||||
<li>
|
<li>
|
||||||
Change <span className="label label-success">{issue.username}</span>'s password to a complex one-use password
|
Change <span className="badge badge-success">{issue.username}</span>'s password to a complex one-use password
|
||||||
that is not shared with other computers on the network.
|
that is not shared with other computers on the network.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
The machine <span className="label label-primary">{issue.machine}</span> (<span
|
The machine <span className="badge badge-primary">{issue.machine}</span> (<span
|
||||||
className="label label-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
className="badge badge-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
||||||
className="label label-danger">SMB</span> attack.
|
className="badge badge-danger">SMB</span> attack.
|
||||||
<br/>
|
<br/>
|
||||||
The Monkey used a pass-the-hash attack over SMB protocol with user <span
|
The Monkey used a pass-the-hash attack over SMB protocol with user <span
|
||||||
className="label label-success">{issue.username}</span>.
|
className="badge badge-success">{issue.username}</span>.
|
||||||
</CollapsibleWellComponent>
|
</CollapsibleWellComponent>
|
||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
|
@ -534,15 +536,15 @@ class ReportPageComponent extends AuthComponent {
|
||||||
generateWmiPasswordIssue(issue) {
|
generateWmiPasswordIssue(issue) {
|
||||||
return (
|
return (
|
||||||
<li>
|
<li>
|
||||||
Change <span className="label label-success">{issue.username}</span>'s password to a complex one-use password
|
Change <span className="badge badge-success">{issue.username}</span>'s password to a complex one-use password
|
||||||
that is not shared with other computers on the network.
|
that is not shared with other computers on the network.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
The machine <span className="label label-primary">{issue.machine}</span> (<span
|
The machine <span className="badge badge-primary">{issue.machine}</span> (<span
|
||||||
className="label label-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
className="badge badge-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
||||||
className="label label-danger">WMI</span> attack.
|
className="badge badge-danger">WMI</span> attack.
|
||||||
<br/>
|
<br/>
|
||||||
The Monkey authenticated over the WMI protocol with user <span
|
The Monkey authenticated over the WMI protocol with user <span
|
||||||
className="label label-success">{issue.username}</span> and its password.
|
className="badge badge-success">{issue.username}</span> and its password.
|
||||||
</CollapsibleWellComponent>
|
</CollapsibleWellComponent>
|
||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
|
@ -551,15 +553,15 @@ class ReportPageComponent extends AuthComponent {
|
||||||
generateWmiPthIssue(issue) {
|
generateWmiPthIssue(issue) {
|
||||||
return (
|
return (
|
||||||
<li>
|
<li>
|
||||||
Change <span className="label label-success">{issue.username}</span>'s password to a complex one-use password
|
Change <span className="badge badge-success">{issue.username}</span>'s password to a complex one-use password
|
||||||
that is not shared with other computers on the network.
|
that is not shared with other computers on the network.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
The machine <span className="label label-primary">{issue.machine}</span> (<span
|
The machine <span className="badge badge-primary">{issue.machine}</span> (<span
|
||||||
className="label label-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
className="badge badge-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
||||||
className="label label-danger">WMI</span> attack.
|
className="badge badge-danger">WMI</span> attack.
|
||||||
<br/>
|
<br/>
|
||||||
The Monkey used a pass-the-hash attack over WMI protocol with user <span
|
The Monkey used a pass-the-hash attack over WMI protocol with user <span
|
||||||
className="label label-success">{issue.username}</span>.
|
className="badge badge-success">{issue.username}</span>.
|
||||||
</CollapsibleWellComponent>
|
</CollapsibleWellComponent>
|
||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
|
@ -568,15 +570,15 @@ class ReportPageComponent extends AuthComponent {
|
||||||
generateSshIssue(issue) {
|
generateSshIssue(issue) {
|
||||||
return (
|
return (
|
||||||
<li>
|
<li>
|
||||||
Change <span className="label label-success">{issue.username}</span>'s password to a complex one-use password
|
Change <span className="badge badge-success">{issue.username}</span>'s password to a complex one-use password
|
||||||
that is not shared with other computers on the network.
|
that is not shared with other computers on the network.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
The machine <span className="label label-primary">{issue.machine}</span> (<span
|
The machine <span className="badge badge-primary">{issue.machine}</span> (<span
|
||||||
className="label label-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
className="badge badge-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
||||||
className="label label-danger">SSH</span> attack.
|
className="badge badge-danger">SSH</span> attack.
|
||||||
<br/>
|
<br/>
|
||||||
The Monkey authenticated over the SSH protocol with user <span
|
The Monkey authenticated over the SSH protocol with user <span
|
||||||
className="label label-success">{issue.username}</span> and its password.
|
className="badge badge-success">{issue.username}</span> and its password.
|
||||||
</CollapsibleWellComponent>
|
</CollapsibleWellComponent>
|
||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
|
@ -585,14 +587,14 @@ class ReportPageComponent extends AuthComponent {
|
||||||
generateSshKeysIssue(issue) {
|
generateSshKeysIssue(issue) {
|
||||||
return (
|
return (
|
||||||
<li>
|
<li>
|
||||||
Protect <span className="label label-success">{issue.ssh_key}</span> private key with a pass phrase.
|
Protect <span className="badge badge-success">{issue.ssh_key}</span> private key with a pass phrase.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
The machine <span className="label label-primary">{issue.machine}</span> (<span
|
The machine <span className="badge badge-primary">{issue.machine}</span> (<span
|
||||||
className="label label-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
className="badge badge-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
||||||
className="label label-danger">SSH</span> attack.
|
className="badge badge-danger">SSH</span> attack.
|
||||||
<br/>
|
<br/>
|
||||||
The Monkey authenticated over the SSH protocol with private key <span
|
The Monkey authenticated over the SSH protocol with private key <span
|
||||||
className="label label-success">{issue.ssh_key}</span>.
|
className="badge badge-success">{issue.ssh_key}</span>.
|
||||||
</CollapsibleWellComponent>
|
</CollapsibleWellComponent>
|
||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
|
@ -602,17 +604,17 @@ class ReportPageComponent extends AuthComponent {
|
||||||
generateSambaCryIssue(issue) {
|
generateSambaCryIssue(issue) {
|
||||||
return (
|
return (
|
||||||
<li>
|
<li>
|
||||||
Change <span className="label label-success">{issue.username}</span>'s password to a complex one-use password
|
Change <span className="badge badge-success">{issue.username}</span>'s password to a complex one-use password
|
||||||
that is not shared with other computers on the network.
|
that is not shared with other computers on the network.
|
||||||
<br/>
|
<br/>
|
||||||
Update your Samba server to 4.4.14 and up, 4.5.10 and up, or 4.6.4 and up.
|
Update your Samba server to 4.4.14 and up, 4.5.10 and up, or 4.6.4 and up.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
The machine <span className="label label-primary">{issue.machine}</span> (<span
|
The machine <span className="badge badge-primary">{issue.machine}</span> (<span
|
||||||
className="label label-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
className="badge badge-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
||||||
className="label label-danger">SambaCry</span> attack.
|
className="badge badge-danger">SambaCry</span> attack.
|
||||||
<br/>
|
<br/>
|
||||||
The Monkey authenticated over the SMB protocol with user <span
|
The Monkey authenticated over the SMB protocol with user <span
|
||||||
className="label label-success">{issue.username}</span> and its password, and used the SambaCry
|
className="badge badge-success">{issue.username}</span> and its password, and used the SambaCry
|
||||||
vulnerability.
|
vulnerability.
|
||||||
</CollapsibleWellComponent>
|
</CollapsibleWellComponent>
|
||||||
</li>
|
</li>
|
||||||
|
@ -624,9 +626,9 @@ class ReportPageComponent extends AuthComponent {
|
||||||
<li>
|
<li>
|
||||||
Update your VSFTPD server to the latest version vsftpd-3.0.3.
|
Update your VSFTPD server to the latest version vsftpd-3.0.3.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
The machine <span className="label label-primary">{issue.machine}</span> (<span
|
The machine <span className="badge badge-primary">{issue.machine}</span> (<span
|
||||||
className="label label-info" style={{margin: '2px'}}>{issue.ip_address}</span>) has a backdoor running at port <span
|
className="badge badge-info" style={{margin: '2px'}}>{issue.ip_address}</span>) has a backdoor running at port <span
|
||||||
className="label label-danger">6200</span>.
|
className="badge badge-danger">6200</span>.
|
||||||
<br/>
|
<br/>
|
||||||
The attack was made possible because the VSFTPD server was not patched against CVE-2011-2523.
|
The attack was made possible because the VSFTPD server was not patched against CVE-2011-2523.
|
||||||
<br/><br/>In July 2011, it was discovered that vsftpd version 2.3.4 downloadable from the master site had been
|
<br/><br/>In July 2011, it was discovered that vsftpd version 2.3.4 downloadable from the master site had been
|
||||||
|
@ -649,9 +651,9 @@ class ReportPageComponent extends AuthComponent {
|
||||||
<li>
|
<li>
|
||||||
Update your Elastic Search server to version 1.4.3 and up.
|
Update your Elastic Search server to version 1.4.3 and up.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
The machine <span className="label label-primary">{issue.machine}</span> (<span
|
The machine <span className="badge badge-primary">{issue.machine}</span> (<span
|
||||||
className="label label-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to an <span
|
className="badge badge-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to an <span
|
||||||
className="label label-danger">Elastic Groovy</span> attack.
|
className="badge badge-danger">Elastic Groovy</span> attack.
|
||||||
<br/>
|
<br/>
|
||||||
The attack was made possible because the Elastic Search server was not patched against CVE-2015-1427.
|
The attack was made possible because the Elastic Search server was not patched against CVE-2015-1427.
|
||||||
</CollapsibleWellComponent>
|
</CollapsibleWellComponent>
|
||||||
|
@ -664,12 +666,12 @@ class ReportPageComponent extends AuthComponent {
|
||||||
<li>
|
<li>
|
||||||
Update your Bash to a ShellShock-patched version.
|
Update your Bash to a ShellShock-patched version.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
The machine <span className="label label-primary">{issue.machine}</span> (<span
|
The machine <span className="badge badge-primary">{issue.machine}</span> (<span
|
||||||
className="label label-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
className="badge badge-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
||||||
className="label label-danger">ShellShock</span> attack.
|
className="badge badge-danger">ShellShock</span> attack.
|
||||||
<br/>
|
<br/>
|
||||||
The attack was made possible because the HTTP server running on TCP port <span
|
The attack was made possible because the HTTP server running on TCP port <span
|
||||||
className="label label-info">{issue.port}</span> was vulnerable to a shell injection attack on the
|
className="badge badge-info">{issue.port}</span> was vulnerable to a shell injection attack on the
|
||||||
paths: {this.generateShellshockPathListBadges(issue.paths)}.
|
paths: {this.generateShellshockPathListBadges(issue.paths)}.
|
||||||
</CollapsibleWellComponent>
|
</CollapsibleWellComponent>
|
||||||
</li>
|
</li>
|
||||||
|
@ -682,8 +684,8 @@ class ReportPageComponent extends AuthComponent {
|
||||||
Delete VM Access plugin configuration files.
|
Delete VM Access plugin configuration files.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
Credentials could be stolen from <span
|
Credentials could be stolen from <span
|
||||||
className="label label-primary">{issue.machine}</span> for the following users <span
|
className="badge badge-primary">{issue.machine}</span> for the following users <span
|
||||||
className="label label-primary">{issue.users}</span>. Read more about the security issue and remediation <a
|
className="badge badge-primary">{issue.users}</span>. Read more about the security issue and remediation <a
|
||||||
href="https://www.guardicore.com/2018/03/recovering-plaintext-passwords-azure/"
|
href="https://www.guardicore.com/2018/03/recovering-plaintext-passwords-azure/"
|
||||||
>here</a>.
|
>here</a>.
|
||||||
</CollapsibleWellComponent>
|
</CollapsibleWellComponent>
|
||||||
|
@ -696,9 +698,9 @@ class ReportPageComponent extends AuthComponent {
|
||||||
<li>
|
<li>
|
||||||
Install the latest Windows updates or upgrade to a newer operating system.
|
Install the latest Windows updates or upgrade to a newer operating system.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
The machine <span className="label label-primary">{issue.machine}</span> (<span
|
The machine <span className="badge badge-primary">{issue.machine}</span> (<span
|
||||||
className="label label-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
className="badge badge-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
||||||
className="label label-danger">Conficker</span> attack.
|
className="badge badge-danger">Conficker</span> attack.
|
||||||
<br/>
|
<br/>
|
||||||
The attack was made possible because the target machine used an outdated and unpatched operating system
|
The attack was made possible because the target machine used an outdated and unpatched operating system
|
||||||
vulnerable to Conficker.
|
vulnerable to Conficker.
|
||||||
|
@ -713,7 +715,7 @@ class ReportPageComponent extends AuthComponent {
|
||||||
Segment your network and make sure there is no communication between machines from different segments.
|
Segment your network and make sure there is no communication between machines from different segments.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
The network can probably be segmented. A monkey instance on <span
|
The network can probably be segmented. A monkey instance on <span
|
||||||
className="label label-primary">{issue.machine}</span> in the
|
className="badge badge-primary">{issue.machine}</span> in the
|
||||||
networks {this.generateInfoBadges(issue.networks)}
|
networks {this.generateInfoBadges(issue.networks)}
|
||||||
could directly access the Monkey Island server in the
|
could directly access the Monkey Island server in the
|
||||||
networks {this.generateInfoBadges(issue.server_networks)}.
|
networks {this.generateInfoBadges(issue.server_networks)}.
|
||||||
|
@ -753,7 +755,7 @@ class ReportPageComponent extends AuthComponent {
|
||||||
admin sharing.
|
admin sharing.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
Here is a list of machines which the account <span
|
Here is a list of machines which the account <span
|
||||||
className="label label-primary">{issue.username}</span> is defined as an administrator:
|
className="badge badge-primary">{issue.username}</span> is defined as an administrator:
|
||||||
{this.generateInfoBadges(issue.shared_machines)}
|
{this.generateInfoBadges(issue.shared_machines)}
|
||||||
</CollapsibleWellComponent>
|
</CollapsibleWellComponent>
|
||||||
</li>
|
</li>
|
||||||
|
@ -780,8 +782,8 @@ class ReportPageComponent extends AuthComponent {
|
||||||
Use micro-segmentation policies to disable communication other than the required.
|
Use micro-segmentation policies to disable communication other than the required.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
Machines are not locked down at port level. Network tunnel was set up from <span
|
Machines are not locked down at port level. Network tunnel was set up from <span
|
||||||
className="label label-primary">{issue.machine}</span> to <span
|
className="badge badge-primary">{issue.machine}</span> to <span
|
||||||
className="label label-primary">{issue.dest}</span>.
|
className="badge badge-primary">{issue.dest}</span>.
|
||||||
</CollapsibleWellComponent>
|
</CollapsibleWellComponent>
|
||||||
</li>
|
</li>
|
||||||
);
|
);
|
||||||
|
@ -792,9 +794,9 @@ class ReportPageComponent extends AuthComponent {
|
||||||
<li>
|
<li>
|
||||||
Upgrade Struts2 to version 2.3.32 or 2.5.10.1 or any later versions.
|
Upgrade Struts2 to version 2.3.32 or 2.5.10.1 or any later versions.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
Struts2 server at <span className="label label-primary">{issue.machine}</span> (<span
|
Struts2 server at <span className="badge badge-primary">{issue.machine}</span> (<span
|
||||||
className="label label-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to <span
|
className="badge badge-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to <span
|
||||||
className="label label-danger">remote code execution</span> attack.
|
className="badge badge-danger">remote code execution</span> attack.
|
||||||
<br/>
|
<br/>
|
||||||
The attack was made possible because the server is using an old version of Jakarta based file upload
|
The attack was made possible because the server is using an old version of Jakarta based file upload
|
||||||
Multipart parser. For possible work-arounds and more info read <a
|
Multipart parser. For possible work-arounds and more info read <a
|
||||||
|
@ -810,9 +812,9 @@ class ReportPageComponent extends AuthComponent {
|
||||||
<li>
|
<li>
|
||||||
Update Oracle WebLogic server to the latest supported version.
|
Update Oracle WebLogic server to the latest supported version.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
Oracle WebLogic server at <span className="label label-primary">{issue.machine}</span> (<span
|
Oracle WebLogic server at <span className="badge badge-primary">{issue.machine}</span> (<span
|
||||||
className="label label-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to one of <span
|
className="badge badge-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to one of <span
|
||||||
className="label label-danger">remote code execution</span> attacks.
|
className="badge badge-danger">remote code execution</span> attacks.
|
||||||
<br/>
|
<br/>
|
||||||
The attack was made possible due to one of the following vulnerabilities:
|
The attack was made possible due to one of the following vulnerabilities:
|
||||||
<a href={'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-10271'}> CVE-2017-10271</a> or
|
<a href={'https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-10271'}> CVE-2017-10271</a> or
|
||||||
|
@ -829,9 +831,9 @@ class ReportPageComponent extends AuthComponent {
|
||||||
href="http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SecureMode.html">
|
href="http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SecureMode.html">
|
||||||
add Kerberos authentication</a>).
|
add Kerberos authentication</a>).
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
The Hadoop server at <span className="label label-primary">{issue.machine}</span> (<span
|
The Hadoop server at <span className="badge badge-primary">{issue.machine}</span> (<span
|
||||||
className="label label-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to <span
|
className="badge badge-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to <span
|
||||||
className="label label-danger">remote code execution</span> attack.
|
className="badge badge-danger">remote code execution</span> attack.
|
||||||
<br/>
|
<br/>
|
||||||
The attack was made possible due to default Hadoop/Yarn configuration being insecure.
|
The attack was made possible due to default Hadoop/Yarn configuration being insecure.
|
||||||
</CollapsibleWellComponent>
|
</CollapsibleWellComponent>
|
||||||
|
@ -844,9 +846,9 @@ class ReportPageComponent extends AuthComponent {
|
||||||
<li>
|
<li>
|
||||||
Disable the xp_cmdshell option.
|
Disable the xp_cmdshell option.
|
||||||
<CollapsibleWellComponent>
|
<CollapsibleWellComponent>
|
||||||
The machine <span className="label label-primary">{issue.machine}</span> (<span
|
The machine <span className="badge badge-primary">{issue.machine}</span> (<span
|
||||||
className="label label-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
className="badge badge-info" style={{margin: '2px'}}>{issue.ip_address}</span>) is vulnerable to a <span
|
||||||
className="label label-danger">MSSQL exploit attack</span>.
|
className="badge badge-danger">MSSQL exploit attack</span>.
|
||||||
<br/>
|
<br/>
|
||||||
The attack was made possible because the target machine used an outdated MSSQL server configuration allowing
|
The attack was made possible because the target machine used an outdated MSSQL server configuration allowing
|
||||||
the usage of the xp_cmdshell command. To learn more about how to disable this feature, read <a
|
the usage of the xp_cmdshell command. To learn more about how to disable this feature, read <a
|
||||||
|
|
|
@ -109,8 +109,8 @@ class TechniqueDropdowns extends React.Component{
|
||||||
<div className='attack-technique-list-component'>
|
<div className='attack-technique-list-component'>
|
||||||
<h3>
|
<h3>
|
||||||
List of all techniques
|
List of all techniques
|
||||||
<Button bsStyle='link'
|
<Button variant='link'
|
||||||
bsSize='large'
|
size='lg'
|
||||||
onClick={() => this.toggleTechList()}
|
onClick={() => this.toggleTechList()}
|
||||||
className={classNames({'toggle-btn': true,
|
className={classNames({'toggle-btn': true,
|
||||||
'toggled-off' : this.state.techniquesHidden,
|
'toggled-off' : this.state.techniquesHidden,
|
||||||
|
|
|
@ -1,5 +1,7 @@
|
||||||
import React, {Component} from 'react';
|
import React, {Component} from 'react';
|
||||||
import * as PropTypes from 'prop-types';
|
import * as PropTypes from 'prop-types';
|
||||||
|
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
|
||||||
|
import {faExclamationTriangle} from "@fortawesome/free-solid-svg-icons/faExclamationTriangle";
|
||||||
|
|
||||||
export default class MonkeysStillAliveWarning extends Component {
|
export default class MonkeysStillAliveWarning extends Component {
|
||||||
render() {
|
render() {
|
||||||
|
@ -9,7 +11,7 @@ export default class MonkeysStillAliveWarning extends Component {
|
||||||
''
|
''
|
||||||
:
|
:
|
||||||
(<p className="alert alert-warning">
|
(<p className="alert alert-warning">
|
||||||
<i className="glyphicon glyphicon-warning-sign" style={{'marginRight': '5px'}}/>
|
<FontAwesomeIcon icon={faExclamationTriangle} style={{'marginRight': '5px'}}/>
|
||||||
Some monkeys are still running. To get the best report it's best to wait for all of them to finish
|
Some monkeys are still running. To get the best report it's best to wait for all of them to finish
|
||||||
running.
|
running.
|
||||||
</p>)
|
</p>)
|
||||||
|
|
|
@ -1,10 +1,12 @@
|
||||||
import React, {Component} from 'react';
|
import React, {Component} from 'react';
|
||||||
import {NavLink} from 'react-router-dom';
|
import {NavLink} from 'react-router-dom';
|
||||||
|
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
|
||||||
|
import {faExclamationTriangle} from "@fortawesome/free-solid-svg-icons/faExclamationTriangle";
|
||||||
|
|
||||||
export default class MustRunMonkeyWarning extends Component {
|
export default class MustRunMonkeyWarning extends Component {
|
||||||
render() {
|
render() {
|
||||||
return <p className="alert alert-warning">
|
return <p className="alert alert-warning">
|
||||||
<i className="glyphicon glyphicon-warning-sign" style={{'marginRight': '5px'}}/>
|
<FontAwesomeIcon icon={faExclamationTriangle} style={{'marginRight': '5px'}}/>
|
||||||
<b>You have to <NavLink to="/run-monkey">run a monkey</NavLink> before generating a report!</b>
|
<b>You have to <NavLink to="/run-monkey">run a monkey</NavLink> before generating a report!</b>
|
||||||
</p>
|
</p>
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
import React, {Component} from 'react';
|
import React, {Component} from 'react';
|
||||||
import {Button} from 'react-bootstrap';
|
import {Button} from 'react-bootstrap';
|
||||||
import * as PropTypes from 'prop-types';
|
import * as PropTypes from 'prop-types';
|
||||||
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||||
|
import { faPrint } from '@fortawesome/free-solid-svg-icons/faPrint';
|
||||||
|
|
||||||
export default class PrintReportButton extends Component {
|
export default class PrintReportButton extends Component {
|
||||||
render() {
|
render() {
|
||||||
return <div className="text-center no-print">
|
return <div className="text-center no-print">
|
||||||
<Button bsSize="large" onClick={this.props.onClick}><i className="glyphicon glyphicon-print"/> Print
|
<Button size="md" variant={"outline-standard"} onClick={this.props.onClick}>
|
||||||
|
<FontAwesomeIcon icon={faPrint}/> Print
|
||||||
Report</Button>
|
Report</Button>
|
||||||
</div>
|
</div>
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,17 +1,20 @@
|
||||||
import React, {Component, Fragment} from 'react';
|
import React, {Component, Fragment} from 'react';
|
||||||
import * as PropTypes from 'prop-types';
|
import * as PropTypes from 'prop-types';
|
||||||
|
|
||||||
|
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
||||||
|
import {faCheck, faExclamationTriangle} from '@fortawesome/free-solid-svg-icons';
|
||||||
|
|
||||||
export default class SecurityIssuesGlance extends Component {
|
export default class SecurityIssuesGlance extends Component {
|
||||||
render() {
|
render() {
|
||||||
return <Fragment>
|
return <Fragment>
|
||||||
{
|
{
|
||||||
this.props.issuesFound ?
|
this.props.issuesFound ?
|
||||||
(<p className="alert alert-danger">
|
(<p className="alert alert-danger">
|
||||||
<i className="glyphicon glyphicon-exclamation-sign" style={{'marginRight': '5px'}}/>
|
<FontAwesomeIcon icon={faExclamationTriangle} style={{'marginRight': '5px'}}/>
|
||||||
Critical security issues were detected!
|
Critical security issues were detected!
|
||||||
</p>) :
|
</p>) :
|
||||||
(<p className="alert alert-success">
|
(<p className="alert alert-success">
|
||||||
<i className="glyphicon glyphicon-ok-sign" style={{'marginRight': '5px'}}/>
|
<FontAwesomeIcon icon={faCheck} style={{'marginRight': '5px'}}/>
|
||||||
No critical security issues were detected.
|
No critical security issues were detected.
|
||||||
</p>)
|
</p>)
|
||||||
}
|
}
|
||||||
|
|
|
@ -38,7 +38,7 @@ class BreachedServersComponent extends React.Component {
|
||||||
<>
|
<>
|
||||||
<p>
|
<p>
|
||||||
The Monkey successfully breached <span
|
The Monkey successfully breached <span
|
||||||
className="label label-danger">{this.props.data.length}</span> {Pluralize('machine', this.props.data.length)}:
|
className="badge badge-danger">{this.props.data.length}</span> {Pluralize('machine', this.props.data.length)}:
|
||||||
</p>
|
</p>
|
||||||
<div className="data-table-container">
|
<div className="data-table-container">
|
||||||
<ReactTable
|
<ReactTable
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {Button, Collapse, Well} from 'react-bootstrap';
|
import {Button, Collapse, Card} from 'react-bootstrap';
|
||||||
|
|
||||||
class CollapsibleWellComponent extends React.Component {
|
class CollapsibleWellComponent extends React.Component {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
|
@ -12,18 +12,19 @@ class CollapsibleWellComponent extends React.Component {
|
||||||
render() {
|
render() {
|
||||||
let well =
|
let well =
|
||||||
(
|
(
|
||||||
<Well style={{margin: '10px'}}>
|
<Card body>
|
||||||
{this.props.children}
|
{this.props.children}
|
||||||
</Well>
|
</Card>
|
||||||
);
|
);
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div>
|
<div>
|
||||||
<div className="no-print">
|
<div className="no-print">
|
||||||
<Button onClick={() => this.setState({open: !this.state.open})} bsStyle="link">
|
<Button onClick={() => this.setState({open: !this.state.open})}
|
||||||
|
variant="link">
|
||||||
Read More...
|
Read More...
|
||||||
</Button>
|
</Button>
|
||||||
<Collapse in={this.state.open}>
|
<Collapse in={this.state.open} style={{margin: '10px'}}>
|
||||||
<div>
|
<div>
|
||||||
{well}
|
{well}
|
||||||
</div>
|
</div>
|
||||||
|
|
|
@ -68,8 +68,8 @@ class PostBreachComponent extends React.Component {
|
||||||
<>
|
<>
|
||||||
<p>
|
<p>
|
||||||
The Monkey performed <span
|
The Monkey performed <span
|
||||||
className="label label-danger">{pbaCount}</span> post-breach {Pluralize('action', pbaCount)} on <span
|
className="badge badge-danger">{pbaCount}</span> post-breach {Pluralize('action', pbaCount)} on <span
|
||||||
className="label label-warning">{pbaMachines.length}</span> {Pluralize('machine', pbaMachines.length)}:
|
className="badge badge-warning">{pbaMachines.length}</span> {Pluralize('machine', pbaMachines.length)}:
|
||||||
</p>
|
</p>
|
||||||
<div className="data-table-container">
|
<div className="data-table-container">
|
||||||
<ReactTable
|
<ReactTable
|
||||||
|
|
|
@ -45,10 +45,10 @@ class ScannedServersComponent extends React.Component {
|
||||||
<>
|
<>
|
||||||
<p>
|
<p>
|
||||||
The Monkey discovered
|
The Monkey discovered
|
||||||
<span className="label label-danger">{scannedServicesAmount}</span>
|
<span className="badge badge-danger">{scannedServicesAmount}</span>
|
||||||
open {Pluralize('service', scannedServicesAmount)}
|
open {Pluralize('service', scannedServicesAmount)}
|
||||||
on
|
on
|
||||||
<span className="label label-warning">{scannedMachinesCount}</span>
|
<span className="badge badge-warning">{scannedMachinesCount}</span>
|
||||||
{Pluralize('machine', scannedMachinesCount)}:
|
{Pluralize('machine', scannedMachinesCount)}:
|
||||||
</p>
|
</p>
|
||||||
<div className="data-table-container">
|
<div className="data-table-container">
|
||||||
|
|
|
@ -32,7 +32,7 @@ export default class EventsButton extends Component {
|
||||||
hideCallback={this.hide}
|
hideCallback={this.hide}
|
||||||
exportFilename={this.props.exportFilename}/>
|
exportFilename={this.props.exportFilename}/>
|
||||||
<div className="text-center" style={{'display': 'grid'}}>
|
<div className="text-center" style={{'display': 'grid'}}>
|
||||||
<Button className="btn btn-primary btn-lg" onClick={this.show}>
|
<Button variant={'monkey-alt'} size={'lg'} onClick={this.show}>
|
||||||
<FontAwesomeIcon icon={faList}/> Events {this.createEventsAmountBadge()}
|
<FontAwesomeIcon icon={faList}/> Events {this.createEventsAmountBadge()}
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
@ -41,7 +41,7 @@ export default class EventsButton extends Component {
|
||||||
|
|
||||||
createEventsAmountBadge() {
|
createEventsAmountBadge() {
|
||||||
const eventsAmountBadgeContent = this.props.event_count > 9 ? '9+' : this.props.event_count;
|
const eventsAmountBadgeContent = this.props.event_count > 9 ? '9+' : this.props.event_count;
|
||||||
return <Badge>{eventsAmountBadgeContent}</Badge>;
|
return <Badge variant={'alt-light'}>{eventsAmountBadgeContent}</Badge>;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -27,10 +27,10 @@ export default class EventsModal extends AuthComponent {
|
||||||
<hr/>
|
<hr/>
|
||||||
<p>
|
<p>
|
||||||
There {Pluralize('is', this.props.event_count)} {<div
|
There {Pluralize('is', this.props.event_count)} {<div
|
||||||
className={'label label-primary'}>{this.props.event_count}</div>}
|
className={'badge badge-primary'}>{this.props.event_count}</div>}
|
||||||
{Pluralize('event', this.props.event_count)} associated
|
{Pluralize('event', this.props.event_count)} associated
|
||||||
with this finding.
|
with this finding.
|
||||||
{<div className={'label label-primary'}>
|
{<div className={'badge badge-primary'}>
|
||||||
{this.props.latest_events.length + this.props.oldest_events.length}
|
{this.props.latest_events.length + this.props.oldest_events.length}
|
||||||
</div>} {Pluralize('is', this.props.event_count)} displayed below.
|
</div>} {Pluralize('is', this.props.event_count)} displayed below.
|
||||||
All events can be exported to json.
|
All events can be exported to json.
|
||||||
|
|
|
@ -5,7 +5,7 @@ import * as PropTypes from 'prop-types';
|
||||||
import PillarLabel from './PillarLabel';
|
import PillarLabel from './PillarLabel';
|
||||||
import EventsButton from './EventsButton';
|
import EventsButton from './EventsButton';
|
||||||
|
|
||||||
const EVENTS_COLUMN_MAX_WIDTH = 160;
|
const EVENTS_COLUMN_MAX_WIDTH = 170;
|
||||||
const PILLARS_COLUMN_MAX_WIDTH = 200;
|
const PILLARS_COLUMN_MAX_WIDTH = 200;
|
||||||
const columns = [
|
const columns = [
|
||||||
{
|
{
|
||||||
|
|
|
@ -23,7 +23,7 @@ const pillarToIcon = {
|
||||||
|
|
||||||
export default class PillarLabel extends Component {
|
export default class PillarLabel extends Component {
|
||||||
render() {
|
render() {
|
||||||
const className = 'label ' + statusToLabelType[this.props.status];
|
const className = 'badge ' + statusToLabelType[this.props.status];
|
||||||
return <div className={className} style={{margin: '2px', display: 'inline-block'}}>
|
return <div className={className} style={{margin: '2px', display: 'inline-block'}}>
|
||||||
<FontAwesomeIcon icon={pillarToIcon[this.props.pillar]}/> {this.props.pillar}</div>
|
<FontAwesomeIcon icon={pillarToIcon[this.props.pillar]}/> {this.props.pillar}</div>
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,29 +2,43 @@ import React, {Component} from 'react';
|
||||||
import StatusLabel from './StatusLabel';
|
import StatusLabel from './StatusLabel';
|
||||||
import {ZeroTrustStatuses} from './ZeroTrustPillars';
|
import {ZeroTrustStatuses} from './ZeroTrustPillars';
|
||||||
import {NavLink} from 'react-router-dom';
|
import {NavLink} from 'react-router-dom';
|
||||||
import {Panel} from 'react-bootstrap';
|
import {Card, Collapse} from 'react-bootstrap';
|
||||||
|
|
||||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
|
||||||
import { faChevronDown } from '@fortawesome/free-solid-svg-icons/faChevronDown';
|
import {faChevronDown} from '@fortawesome/free-solid-svg-icons/faChevronDown';
|
||||||
|
|
||||||
|
|
||||||
class ZeroTrustReportLegend extends Component {
|
class ZeroTrustReportLegend extends Component {
|
||||||
|
|
||||||
|
constructor(props, context) {
|
||||||
|
super(props, context);
|
||||||
|
|
||||||
|
this.state = {
|
||||||
|
open: false,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
const legendContent = this.getLegendContent();
|
const legendContent = this.getLegendContent();
|
||||||
|
const {open} = this.state;
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<Panel>
|
<Card>
|
||||||
<Panel.Heading>
|
<Card.Header onClick={() => this.setState({open: !open})}
|
||||||
<Panel.Title toggle>
|
aria-controls='collapse-content'
|
||||||
<h3><FontAwesomeIcon icon={faChevronDown} /> Legend</h3>
|
aria-expanded={open}
|
||||||
</Panel.Title>
|
className={'collapse-control'}>
|
||||||
</Panel.Heading>
|
<h3><FontAwesomeIcon icon={faChevronDown}/> Legend</h3>
|
||||||
<Panel.Collapse>
|
</Card.Header>
|
||||||
<Panel.Body>
|
|
||||||
{legendContent}
|
<Collapse in={this.state.open}>
|
||||||
</Panel.Body>
|
<Card.Body>
|
||||||
</Panel.Collapse>
|
<div id='collapse-content'>
|
||||||
</Panel>
|
{legendContent}
|
||||||
|
</div>
|
||||||
|
</Card.Body>
|
||||||
|
</Collapse>
|
||||||
|
</Card>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,7 +49,8 @@ class ZeroTrustReportLegend extends Component {
|
||||||
<div style={{display: 'inline-block'}}>
|
<div style={{display: 'inline-block'}}>
|
||||||
<StatusLabel showText={true} status={ZeroTrustStatuses.failed}/>
|
<StatusLabel showText={true} status={ZeroTrustStatuses.failed}/>
|
||||||
</div>
|
</div>
|
||||||
{'\t'}At least one of the tests related to this component failed. This means that the Infection Monkey detected an
|
{'\t'}At least one of the tests related to this component failed. This means that the Infection Monkey
|
||||||
|
detected an
|
||||||
unmet Zero Trust requirement.
|
unmet Zero Trust requirement.
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
|
@ -55,7 +70,7 @@ class ZeroTrustReportLegend extends Component {
|
||||||
<StatusLabel showText={true} status={ZeroTrustStatuses.unexecuted}/>
|
<StatusLabel showText={true} status={ZeroTrustStatuses.unexecuted}/>
|
||||||
</div>
|
</div>
|
||||||
{'\t'}This status means the test wasn't executed.To activate more tests, refer to the Monkey <NavLink
|
{'\t'}This status means the test wasn't executed.To activate more tests, refer to the Monkey <NavLink
|
||||||
to="/configuration"><u>configuration</u></NavLink> page.
|
to="/configure"><u>configuration</u></NavLink> page.
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>;
|
</div>;
|
||||||
|
|
|
@ -3,32 +3,46 @@ import PillarLabel from './PillarLabel';
|
||||||
import PrinciplesStatusTable from './PrinciplesStatusTable';
|
import PrinciplesStatusTable from './PrinciplesStatusTable';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import * as PropTypes from 'prop-types';
|
import * as PropTypes from 'prop-types';
|
||||||
import {Panel} from 'react-bootstrap';
|
import {Card, Collapse} from 'react-bootstrap';
|
||||||
|
|
||||||
import { FontAwesomeIcon } from '@fortawesome/react-fontawesome';
|
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
|
||||||
import { faChevronDown } from '@fortawesome/free-solid-svg-icons';
|
import {faChevronDown} from '@fortawesome/free-solid-svg-icons';
|
||||||
|
import '../../../styles/report/ZeroTrustReport.scss';
|
||||||
|
|
||||||
export default class SinglePillarPrinciplesStatus extends AuthComponent {
|
export default class SinglePillarPrinciplesStatus extends AuthComponent {
|
||||||
|
|
||||||
|
constructor(props, context) {
|
||||||
|
super(props, context);
|
||||||
|
|
||||||
|
this.state = {
|
||||||
|
open: false,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
render() {
|
render() {
|
||||||
|
const {open} = this.state;
|
||||||
if (this.props.principlesStatus.length === 0) {
|
if (this.props.principlesStatus.length === 0) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
return (
|
return (
|
||||||
<Panel>
|
<Card className={'principles-status-card'}>
|
||||||
<Panel.Heading>
|
<Card.Header onClick={() => this.setState({open: !open})}
|
||||||
<Panel.Title toggle>
|
aria-controls='collapse-content'
|
||||||
<h3 style={{textAlign: 'center', marginTop: '1px', marginBottom: '1px'}}>
|
aria-expanded={open}
|
||||||
<FontAwesomeIcon icon={faChevronDown}/> <PillarLabel pillar={this.props.pillar}
|
className={'collapse-control'}>
|
||||||
status={this.props.pillarsToStatuses[this.props.pillar]}/>
|
<h3 style={{textAlign: 'center', marginTop: '1px', marginBottom: '1px'}}>
|
||||||
</h3>
|
<FontAwesomeIcon icon={faChevronDown}/> <PillarLabel pillar={this.props.pillar}
|
||||||
</Panel.Title>
|
status={this.props.pillarsToStatuses[this.props.pillar]}/>
|
||||||
</Panel.Heading>
|
</h3>
|
||||||
<Panel.Collapse>
|
</Card.Header>
|
||||||
<Panel.Body>
|
<Collapse in={this.state.open}>
|
||||||
<PrinciplesStatusTable principlesStatus={this.props.principlesStatus}/>
|
<Card.Body>
|
||||||
</Panel.Body>
|
<div id={'collapse-content'}>
|
||||||
</Panel.Collapse>
|
<PrinciplesStatusTable principlesStatus={this.props.principlesStatus}/>
|
||||||
</Panel>
|
</div>
|
||||||
|
</Card.Body>
|
||||||
|
</Collapse>
|
||||||
|
</Card>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,10 +15,10 @@ const statusToIcon = {
|
||||||
};
|
};
|
||||||
|
|
||||||
export const statusToLabelType = {
|
export const statusToLabelType = {
|
||||||
'Passed': 'label-success',
|
'Passed': 'badge-success',
|
||||||
'Verify': 'label-warning',
|
'Verify': 'badge-warning',
|
||||||
'Failed': 'label-danger',
|
'Failed': 'badge-danger',
|
||||||
'Unexecuted': 'label-default'
|
'Unexecuted': 'badge-default'
|
||||||
};
|
};
|
||||||
|
|
||||||
export default class StatusLabel extends Component {
|
export default class StatusLabel extends Component {
|
||||||
|
@ -29,7 +29,7 @@ export default class StatusLabel extends Component {
|
||||||
}
|
}
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<div className={'label ' + statusToLabelType[this.props.status]} style={{display: 'flow-root'}}>
|
<div className={'badge ' + statusToLabelType[this.props.status]} style={{display: 'flow-root'}}>
|
||||||
<FontAwesomeIcon icon={statusToIcon[this.props.status]} size={this.props.size}/>{text}
|
<FontAwesomeIcon icon={statusToIcon[this.props.status]} size={this.props.size}/>{text}
|
||||||
</div>
|
</div>
|
||||||
);
|
);
|
||||||
|
|
|
@ -12,21 +12,19 @@ class ArcNode extends React.Component {
|
||||||
|
|
||||||
return (
|
return (
|
||||||
<g transform={'rotate(180)'} id={data.node.pillar} key={prefix + 'arcGroup' + index}>
|
<g transform={'rotate(180)'} id={data.node.pillar} key={prefix + 'arcGroup' + index}>
|
||||||
<OverlayTrigger ref={'overlay'} key={prefix + 'arcOverlayTrigger' + index} trigger={null}
|
<OverlayTrigger key={prefix + 'arcOverlayTrigger' + index}
|
||||||
|
trigger={['hover', 'focus']}
|
||||||
placement={data.popover}
|
placement={data.popover}
|
||||||
overlay={<Popover id={prefix + 'ArcPopover' + index} style={{backgroundColor: data.hex}}
|
overlay={<Popover id={prefix + 'ArcPopover' + index} style={{backgroundColor: data.hex}}>
|
||||||
title={data.node.pillar}>{data.tooltip}</Popover>} rootClose>
|
<Popover.Title>{data.node.pillar}</Popover.Title>
|
||||||
|
<Popover.Content>{data.tooltip}</Popover.Content>
|
||||||
|
</Popover>} rootClose>
|
||||||
<path
|
<path
|
||||||
|
|
||||||
id={prefix + 'Node_' + index}
|
id={prefix + 'Node_' + index}
|
||||||
className={'arcNode'}
|
className={'arcNode'}
|
||||||
data-tooltip={data.tooltip}
|
data-tooltip={data.tooltip}
|
||||||
d={arc()}
|
d={arc()}
|
||||||
fill={data.hex}
|
fill={data.hex}
|
||||||
onClick={this.handleClick.bind(this)}
|
|
||||||
onMouseEnter={this.handleOver.bind(this)}
|
|
||||||
onMouseLeave={this.handleOut.bind(this)}
|
|
||||||
|
|
||||||
/>
|
/>
|
||||||
</OverlayTrigger>
|
</OverlayTrigger>
|
||||||
<text x={0} dy={data.fontStyle.size * 1.2} fontSize={data.fontStyle.size} fill={'white'} textAnchor='middle'
|
<text x={0} dy={data.fontStyle.size * 1.2} fontSize={data.fontStyle.size} fill={'white'} textAnchor='middle'
|
||||||
|
@ -39,23 +37,6 @@ class ArcNode extends React.Component {
|
||||||
</g>
|
</g>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
handleClick() {
|
|
||||||
this.props.disableHover(this.refs.overlay);
|
|
||||||
}
|
|
||||||
|
|
||||||
handleOver() {
|
|
||||||
if (this.props.hover) {
|
|
||||||
this.refs.overlay.show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
handleOut() {
|
|
||||||
if (this.props.hover) {
|
|
||||||
this.refs.overlay.hide();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ArcNode.propTypes = {
|
ArcNode.propTypes = {
|
||||||
|
|
|
@ -10,10 +10,14 @@ class CircularNode extends React.Component {
|
||||||
let translate = 'translate(' + data.cx + ',' + data.cy + ')';
|
let translate = 'translate(' + data.cx + ',' + data.cy + ')';
|
||||||
return (
|
return (
|
||||||
<g transform={translate} id={data.node.pillar} key={prefix + 'circularGroup' + index}>
|
<g transform={translate} id={data.node.pillar} key={prefix + 'circularGroup' + index}>
|
||||||
<OverlayTrigger ref={'overlay'} key={prefix + 'CircularOverlay' + index} trigger={null} placement={data.popover}
|
<OverlayTrigger key={prefix + 'CircularOverlay' + index}
|
||||||
|
trigger={['hover', 'focus']}
|
||||||
|
placement={data.popover}
|
||||||
overlay={<Popover id={prefix + 'CircularClickPopover' + index}
|
overlay={<Popover id={prefix + 'CircularClickPopover' + index}
|
||||||
style={{backgroundColor: data.hex}}
|
style={{backgroundColor: data.hex}}>
|
||||||
title={data.node.pillar}>{data.tooltip}</Popover>} rootClose>
|
<Popover.Title>{data.node.pillar}</Popover.Title>
|
||||||
|
<Popover.Content>{data.tooltip}</Popover.Content>
|
||||||
|
</Popover>} rootClose>
|
||||||
<circle
|
<circle
|
||||||
id={prefix + 'Node_' + index}
|
id={prefix + 'Node_' + index}
|
||||||
className={'circularNode'}
|
className={'circularNode'}
|
||||||
|
@ -21,10 +25,6 @@ class CircularNode extends React.Component {
|
||||||
r={data.r}
|
r={data.r}
|
||||||
opacity={0.8}
|
opacity={0.8}
|
||||||
fill={data.hex}
|
fill={data.hex}
|
||||||
onClick={this.handleClick.bind(this)}
|
|
||||||
onMouseEnter={this.handleOver.bind(this)}
|
|
||||||
onMouseLeave={this.handleOut.bind(this)}
|
|
||||||
|
|
||||||
/>
|
/>
|
||||||
</OverlayTrigger>
|
</OverlayTrigger>
|
||||||
<foreignObject style={{fontSize: data.fontStyle.size, pointerEvents: 'none'}}
|
<foreignObject style={{fontSize: data.fontStyle.size, pointerEvents: 'none'}}
|
||||||
|
@ -36,24 +36,6 @@ class CircularNode extends React.Component {
|
||||||
</g>
|
</g>
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
handleClick() {
|
|
||||||
this.props.disableHover(this.refs.overlay);
|
|
||||||
}
|
|
||||||
|
|
||||||
handleOver() {
|
|
||||||
if (this.props.hover) {
|
|
||||||
this.refs.overlay.show();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
handleOut() {
|
|
||||||
if (this.props.hover) {
|
|
||||||
this.refs.overlay.hide();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
CircularNode.propTypes = {
|
CircularNode.propTypes = {
|
||||||
|
|
|
@ -1,6 +1,8 @@
|
||||||
import {Modal} from 'react-bootstrap';
|
import {Modal} from 'react-bootstrap';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import {GridLoader} from 'react-spinners';
|
import {GridLoader} from 'react-spinners';
|
||||||
|
import {FontAwesomeIcon} from '@fortawesome/react-fontawesome';
|
||||||
|
import {faExclamationTriangle} from "@fortawesome/free-solid-svg-icons/faExclamationTriangle";
|
||||||
|
|
||||||
|
|
||||||
class StartOverModal extends React.PureComponent {
|
class StartOverModal extends React.PureComponent {
|
||||||
|
@ -35,7 +37,7 @@ class StartOverModal extends React.PureComponent {
|
||||||
{
|
{
|
||||||
!this.state.allMonkeysAreDead ?
|
!this.state.allMonkeysAreDead ?
|
||||||
<div className='alert alert-warning'>
|
<div className='alert alert-warning'>
|
||||||
<i className='glyphicon glyphicon-warning-sign' style={{'marginRight': '5px'}}/>
|
<FontAwesomeIcon icon={faExclamationTriangle} style={{'marginRight': '5px'}}/>
|
||||||
Some monkeys are still running. It's advised to kill all monkeys before resetting.
|
Some monkeys are still running. It's advised to kill all monkeys before resetting.
|
||||||
</div>
|
</div>
|
||||||
:
|
:
|
||||||
|
|
|
@ -3,7 +3,8 @@ import 'core-js/fn/object/assign';
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
import ReactDOM from 'react-dom';
|
import ReactDOM from 'react-dom';
|
||||||
import App from './components/Main';
|
import App from './components/Main';
|
||||||
import Bootstrap from 'bootstrap/dist/css/bootstrap.css'; // eslint-disable-line no-unused-vars
|
import './styles/Main.scss';
|
||||||
|
import './styles/external/fontawesome/css/all.css';
|
||||||
|
|
||||||
// Render the main component into the dom
|
// Render the main component into the dom
|
||||||
ReactDOM.render(<App/>, document.getElementById('app'));
|
ReactDOM.render(<App/>, document.getElementById('app'));
|
||||||
|
|
|
@ -11,6 +11,12 @@ body {
|
||||||
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
font-family: 'Open Sans', 'Helvetica Neue', Helvetica, Arial, sans-serif;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.center-block {
|
||||||
|
display: block;
|
||||||
|
margin-right: auto;
|
||||||
|
margin-left: auto;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Sidebar
|
* Sidebar
|
||||||
*/
|
*/
|
||||||
|
@ -122,7 +128,7 @@ body {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
.main {
|
.main {
|
||||||
padding: 2em 1em;
|
padding: 0.7em 1.5em 1.5em 1.5em !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.page-title {
|
.page-title {
|
||||||
|
@ -204,10 +210,6 @@ body {
|
||||||
margin-left: 1em;
|
margin-left: 1em;
|
||||||
}
|
}
|
||||||
|
|
||||||
.run-monkey-snippets .well {
|
|
||||||
margin-bottom: 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Map Preview Pane
|
* Map Preview Pane
|
||||||
*/
|
*/
|
||||||
|
@ -405,55 +407,6 @@ body {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* Report page */
|
|
||||||
|
|
||||||
.report-page {
|
|
||||||
font-size: 1.2em;
|
|
||||||
border: 1px solid #fff;
|
|
||||||
padding: 2em;
|
|
||||||
-webkit-box-shadow: 1px 1px 7px -1px #ccc;
|
|
||||||
box-shadow: 1px 1px 7px -1px #ccc;
|
|
||||||
}
|
|
||||||
|
|
||||||
.report-page h1 {
|
|
||||||
margin-top: 30px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.report-page h3 {
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.report-page h4 {
|
|
||||||
margin-top: 20px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.report-page ul {
|
|
||||||
list-style: disc;
|
|
||||||
padding-left: 40px;
|
|
||||||
}
|
|
||||||
|
|
||||||
.report-page li {
|
|
||||||
overflow: visible;
|
|
||||||
}
|
|
||||||
|
|
||||||
.report-page li a {
|
|
||||||
display: inline;
|
|
||||||
padding: 0em;
|
|
||||||
}
|
|
||||||
|
|
||||||
.modal-dialog {
|
|
||||||
top: 30%;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pba-danger {
|
|
||||||
background-color: #ffc7af;
|
|
||||||
}
|
|
||||||
|
|
||||||
.pba-success {
|
|
||||||
background-color: #afd2a2;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Print report styling */
|
/* Print report styling */
|
||||||
|
|
||||||
@media print {
|
@media print {
|
||||||
|
@ -473,12 +426,12 @@ body {
|
||||||
width: 100px;
|
width: 100px;
|
||||||
}
|
}
|
||||||
|
|
||||||
.label {
|
.badge {
|
||||||
padding: 2px 6px;
|
padding: 2px 6px;
|
||||||
border: 1px solid #000;
|
border: 1px solid #000;
|
||||||
color: #fff !important;
|
color: #fff !important;
|
||||||
display: inline !important;
|
display: inline !important;
|
||||||
font-size: 75% !important;
|
font-size: 80% !important;
|
||||||
font-weight: bold !important;
|
font-weight: bold !important;
|
||||||
line-height: 1 !important;
|
line-height: 1 !important;
|
||||||
text-align: center !important;
|
text-align: center !important;
|
||||||
|
@ -512,27 +465,27 @@ body {
|
||||||
border-color: #bce8f1 !important;
|
border-color: #bce8f1 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.label-default {
|
.badge-default {
|
||||||
background-color: #777 !important;
|
background-color: #777 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.label-primary {
|
.badge-primary {
|
||||||
background-color: #337ab7 !important;
|
background-color: #337ab7 !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.label-success {
|
.badge-success {
|
||||||
background-color: #5cb85c !important;
|
background-color: #5cb85c !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.label-info {
|
.badge-info {
|
||||||
background-color: #5bc0de !important;
|
background-color: #5bc0de !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.label-warning {
|
.badge-warning {
|
||||||
background-color: #f0ad4e !important;
|
background-color: #f0ad4e !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.label-danger {
|
.badge-danger {
|
||||||
background-color: #d9534f !important;
|
background-color: #d9534f !important;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
// colors
|
// colors
|
||||||
$light-grey: #EAF4F4;
|
$light-gray: #EAF4F4;
|
||||||
$medium-grey: #7B9EA8;
|
$medium-gray: #7B9EA8;
|
||||||
$dark-green: #007d02;
|
$dark-green: #007d02;
|
||||||
$green: #44CF6C;
|
$green: #44CF6C;
|
||||||
$black: #000000;
|
$black: #000000;
|
||||||
|
@ -38,8 +38,8 @@ $black: #000000;
|
||||||
|
|
||||||
&.blocked {
|
&.blocked {
|
||||||
background-color: $dark-green;
|
background-color: $dark-green;
|
||||||
color: $light-grey;
|
color: $light-gray;
|
||||||
fill: $light-grey;
|
fill: $light-gray;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -100,6 +100,7 @@ $black: #000000;
|
||||||
}
|
}
|
||||||
|
|
||||||
.attack-matrix .ui-checkbox-btn label {
|
.attack-matrix .ui-checkbox-btn label {
|
||||||
|
font-weight: 700;
|
||||||
padding-top: 0;
|
padding-top: 0;
|
||||||
position: relative;
|
position: relative;
|
||||||
float: left;
|
float: left;
|
||||||
|
|
|
@ -0,0 +1,27 @@
|
||||||
|
.config-nav > li > a{
|
||||||
|
height: 50px !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.config-nav .nav-item > a{
|
||||||
|
color: $black;
|
||||||
|
padding: 15px 10px 15px 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.config-nav .nav-item > a.active{
|
||||||
|
font-weight: bold;
|
||||||
|
color: $black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.config-nav .nav-item > a:hover:not(.active), .config-nav .nav-item > a:focus:not(.active){
|
||||||
|
text-decoration: none;
|
||||||
|
background-color: $light-gray;
|
||||||
|
}
|
||||||
|
|
||||||
|
.config-form legend {
|
||||||
|
border-bottom: 1px solid $light-gray;
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.config-form .form-group {
|
||||||
|
margin-left: 2em;
|
||||||
|
}
|
|
@ -0,0 +1,60 @@
|
||||||
|
@import './variables';
|
||||||
|
|
||||||
|
@import '../../node_modules/bootstrap/scss/bootstrap';
|
||||||
|
|
||||||
|
// Imports that require variables
|
||||||
|
@import './report/ReportPage';
|
||||||
|
@import './report/AttackReport.scss';
|
||||||
|
@import './PreviewPane.scss';
|
||||||
|
@import './ConfigurationPage';
|
||||||
|
|
||||||
|
|
||||||
|
// Define custom elements after bootstrap import
|
||||||
|
.btn-outline-monkey, button {
|
||||||
|
@include button-outline-variant($monkey-yellow, $monkey-black, $monkey-yellow, $monkey-yellow);
|
||||||
|
color: $monkey-black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-outline-standard, button {
|
||||||
|
@include button-outline-variant($light-gray, $monkey-black, $light-gray, $light-gray);
|
||||||
|
color: $monkey-black;
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge-info {
|
||||||
|
background-color: $monkey-alt;
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge-primary {
|
||||||
|
color: $monkey-white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge-default {
|
||||||
|
background-color: $gray-600;
|
||||||
|
color: $white;
|
||||||
|
}
|
||||||
|
|
||||||
|
.badge-alt-light {
|
||||||
|
color: $monkey-alt;
|
||||||
|
background-color: $monkey-white;
|
||||||
|
border-radius: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.btn-link:active, .btn-link:hover, .btn-link:focus {
|
||||||
|
color: $monkey-alt !important;
|
||||||
|
background-color: transparent !important;
|
||||||
|
border-color: transparent !important;
|
||||||
|
box-shadow: None;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.card-header.collapse-control:hover {
|
||||||
|
text-decoration: underline;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.collapse.card-body ul, div.collapsing.card-body ul {
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.hidden{
|
||||||
|
display: None;
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
.map-window {
|
||||||
|
position: relative;
|
||||||
|
}
|
|
@ -1,5 +1,7 @@
|
||||||
$blue: #337ab7;
|
div.run-on-os-buttons {
|
||||||
|
margin-bottom: 20px;
|
||||||
#bootstrap-override.runOnOsButtons > li.active > a{
|
}
|
||||||
background-color: $blue !important;
|
|
||||||
|
div.run-on-os-buttons > .nav-item{
|
||||||
|
margin: 0 10px 0 10px;
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,3 @@
|
||||||
|
.preview-pane a>svg{
|
||||||
|
color: $monkey-yellow !important;
|
||||||
|
}
|
|
@ -0,0 +1,3 @@
|
||||||
|
.data-table-container>.container>div.row{
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
$monkey-alt: #28a745;
|
||||||
|
$monkey-yellow: #ffc107;
|
||||||
|
$monkey-black: #000;
|
||||||
|
$monkey-white: #ffffff;
|
||||||
|
$light-gray: #ececec;
|
||||||
|
|
||||||
|
// Define colours before bootstrap import so it generates elements with those colours
|
||||||
|
$theme-colors: (
|
||||||
|
"monkey-alt": $monkey-alt,
|
||||||
|
"alt-light": $monkey-alt,
|
||||||
|
"primary": $monkey-yellow
|
||||||
|
);
|
||||||
|
|
||||||
|
$nav-pills-link-active-bg: $monkey-alt;
|
||||||
|
$nav-pills-link-active-color: $monkey-white;
|
||||||
|
$link-color: $monkey-alt;
|
|
@ -0,0 +1,34 @@
|
||||||
|
Font Awesome Free License
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
Font Awesome Free is free, open source, and GPL friendly. You can use it for
|
||||||
|
commercial projects, open source projects, or really almost whatever you want.
|
||||||
|
Full Font Awesome Free license: https://fontawesome.com/license/free.
|
||||||
|
|
||||||
|
# Icons: CC BY 4.0 License (https://creativecommons.org/licenses/by/4.0/)
|
||||||
|
In the Font Awesome Free download, the CC BY 4.0 license applies to all icons
|
||||||
|
packaged as SVG and JS file types.
|
||||||
|
|
||||||
|
# Fonts: SIL OFL 1.1 License (https://scripts.sil.org/OFL)
|
||||||
|
In the Font Awesome Free download, the SIL OFL license applies to all icons
|
||||||
|
packaged as web and desktop font files.
|
||||||
|
|
||||||
|
# Code: MIT License (https://opensource.org/licenses/MIT)
|
||||||
|
In the Font Awesome Free download, the MIT license applies to all non-font and
|
||||||
|
non-icon files.
|
||||||
|
|
||||||
|
# Attribution
|
||||||
|
Attribution is required by MIT, SIL OFL, and CC BY licenses. Downloaded Font
|
||||||
|
Awesome Free files already contain embedded comments with sufficient
|
||||||
|
attribution, so you shouldn't need to do anything additional when using these
|
||||||
|
files normally.
|
||||||
|
|
||||||
|
We've kept attribution comments terse, so we ask that you do not actively work
|
||||||
|
to remove them from files, especially code. They're a great way for folks to
|
||||||
|
learn about Font Awesome.
|
||||||
|
|
||||||
|
# Brand Icons
|
||||||
|
All brand icons are trademarks of their respective owners. The use of these
|
||||||
|
trademarks does not indicate endorsement of the trademark holder by Font
|
||||||
|
Awesome, nor vice versa. **Please do not use brand logos for any purpose except
|
||||||
|
to represent the company, product, or service to which they refer.**
|
|
@ -0,0 +1,15 @@
|
||||||
|
/*!
|
||||||
|
* Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
*/
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Font Awesome 5 Brands';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: block;
|
||||||
|
src: url("../webfonts/fa-brands-400.eot");
|
||||||
|
src: url("../webfonts/fa-brands-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.woff") format("woff"), url("../webfonts/fa-brands-400.ttf") format("truetype"), url("../webfonts/fa-brands-400.svg#fontawesome") format("svg"); }
|
||||||
|
|
||||||
|
.fab {
|
||||||
|
font-family: 'Font Awesome 5 Brands';
|
||||||
|
font-weight: 400; }
|
5
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/css/brands.min.css
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
/*!
|
||||||
|
* Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
*/
|
||||||
|
@font-face{font-family:"Font Awesome 5 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.eot);src:url(../webfonts/fa-brands-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.woff) format("woff"),url(../webfonts/fa-brands-400.ttf) format("truetype"),url(../webfonts/fa-brands-400.svg#fontawesome) format("svg")}.fab{font-family:"Font Awesome 5 Brands";font-weight:400}
|
4552
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/css/fontawesome.css
vendored
Normal file
5
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/css/fontawesome.min.css
vendored
Normal file
|
@ -0,0 +1,15 @@
|
||||||
|
/*!
|
||||||
|
* Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
*/
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Font Awesome 5 Free';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 400;
|
||||||
|
font-display: block;
|
||||||
|
src: url("../webfonts/fa-regular-400.eot");
|
||||||
|
src: url("../webfonts/fa-regular-400.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.woff") format("woff"), url("../webfonts/fa-regular-400.ttf") format("truetype"), url("../webfonts/fa-regular-400.svg#fontawesome") format("svg"); }
|
||||||
|
|
||||||
|
.far {
|
||||||
|
font-family: 'Font Awesome 5 Free';
|
||||||
|
font-weight: 400; }
|
5
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/css/regular.min.css
vendored
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
/*!
|
||||||
|
* Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
*/
|
||||||
|
@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.eot);src:url(../webfonts/fa-regular-400.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.woff) format("woff"),url(../webfonts/fa-regular-400.ttf) format("truetype"),url(../webfonts/fa-regular-400.svg#fontawesome) format("svg")}.far{font-family:"Font Awesome 5 Free";font-weight:400}
|
|
@ -0,0 +1,16 @@
|
||||||
|
/*!
|
||||||
|
* Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
*/
|
||||||
|
@font-face {
|
||||||
|
font-family: 'Font Awesome 5 Free';
|
||||||
|
font-style: normal;
|
||||||
|
font-weight: 900;
|
||||||
|
font-display: block;
|
||||||
|
src: url("../webfonts/fa-solid-900.eot");
|
||||||
|
src: url("../webfonts/fa-solid-900.eot?#iefix") format("embedded-opentype"), url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.woff") format("woff"), url("../webfonts/fa-solid-900.ttf") format("truetype"), url("../webfonts/fa-solid-900.svg#fontawesome") format("svg"); }
|
||||||
|
|
||||||
|
.fa,
|
||||||
|
.fas {
|
||||||
|
font-family: 'Font Awesome 5 Free';
|
||||||
|
font-weight: 900; }
|
|
@ -0,0 +1,5 @@
|
||||||
|
/*!
|
||||||
|
* Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
*/
|
||||||
|
@font-face{font-family:"Font Awesome 5 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.eot);src:url(../webfonts/fa-solid-900.eot?#iefix) format("embedded-opentype"),url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.woff) format("woff"),url(../webfonts/fa-solid-900.ttf) format("truetype"),url(../webfonts/fa-solid-900.svg#fontawesome) format("svg")}.fa,.fas{font-family:"Font Awesome 5 Free";font-weight:900}
|
371
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/css/svg-with-js.css
vendored
Normal file
|
@ -0,0 +1,371 @@
|
||||||
|
/*!
|
||||||
|
* Font Awesome Free 5.13.1 by @fontawesome - https://fontawesome.com
|
||||||
|
* License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
|
||||||
|
*/
|
||||||
|
svg:not(:root).svg-inline--fa {
|
||||||
|
overflow: visible; }
|
||||||
|
|
||||||
|
.svg-inline--fa {
|
||||||
|
display: inline-block;
|
||||||
|
font-size: inherit;
|
||||||
|
height: 1em;
|
||||||
|
overflow: visible;
|
||||||
|
vertical-align: -.125em; }
|
||||||
|
.svg-inline--fa.fa-lg {
|
||||||
|
vertical-align: -.225em; }
|
||||||
|
.svg-inline--fa.fa-w-1 {
|
||||||
|
width: 0.0625em; }
|
||||||
|
.svg-inline--fa.fa-w-2 {
|
||||||
|
width: 0.125em; }
|
||||||
|
.svg-inline--fa.fa-w-3 {
|
||||||
|
width: 0.1875em; }
|
||||||
|
.svg-inline--fa.fa-w-4 {
|
||||||
|
width: 0.25em; }
|
||||||
|
.svg-inline--fa.fa-w-5 {
|
||||||
|
width: 0.3125em; }
|
||||||
|
.svg-inline--fa.fa-w-6 {
|
||||||
|
width: 0.375em; }
|
||||||
|
.svg-inline--fa.fa-w-7 {
|
||||||
|
width: 0.4375em; }
|
||||||
|
.svg-inline--fa.fa-w-8 {
|
||||||
|
width: 0.5em; }
|
||||||
|
.svg-inline--fa.fa-w-9 {
|
||||||
|
width: 0.5625em; }
|
||||||
|
.svg-inline--fa.fa-w-10 {
|
||||||
|
width: 0.625em; }
|
||||||
|
.svg-inline--fa.fa-w-11 {
|
||||||
|
width: 0.6875em; }
|
||||||
|
.svg-inline--fa.fa-w-12 {
|
||||||
|
width: 0.75em; }
|
||||||
|
.svg-inline--fa.fa-w-13 {
|
||||||
|
width: 0.8125em; }
|
||||||
|
.svg-inline--fa.fa-w-14 {
|
||||||
|
width: 0.875em; }
|
||||||
|
.svg-inline--fa.fa-w-15 {
|
||||||
|
width: 0.9375em; }
|
||||||
|
.svg-inline--fa.fa-w-16 {
|
||||||
|
width: 1em; }
|
||||||
|
.svg-inline--fa.fa-w-17 {
|
||||||
|
width: 1.0625em; }
|
||||||
|
.svg-inline--fa.fa-w-18 {
|
||||||
|
width: 1.125em; }
|
||||||
|
.svg-inline--fa.fa-w-19 {
|
||||||
|
width: 1.1875em; }
|
||||||
|
.svg-inline--fa.fa-w-20 {
|
||||||
|
width: 1.25em; }
|
||||||
|
.svg-inline--fa.fa-pull-left {
|
||||||
|
margin-right: .3em;
|
||||||
|
width: auto; }
|
||||||
|
.svg-inline--fa.fa-pull-right {
|
||||||
|
margin-left: .3em;
|
||||||
|
width: auto; }
|
||||||
|
.svg-inline--fa.fa-border {
|
||||||
|
height: 1.5em; }
|
||||||
|
.svg-inline--fa.fa-li {
|
||||||
|
width: 2em; }
|
||||||
|
.svg-inline--fa.fa-fw {
|
||||||
|
width: 1.25em; }
|
||||||
|
|
||||||
|
.fa-layers svg.svg-inline--fa {
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
margin: auto;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0; }
|
||||||
|
|
||||||
|
.fa-layers {
|
||||||
|
display: inline-block;
|
||||||
|
height: 1em;
|
||||||
|
position: relative;
|
||||||
|
text-align: center;
|
||||||
|
vertical-align: -.125em;
|
||||||
|
width: 1em; }
|
||||||
|
.fa-layers svg.svg-inline--fa {
|
||||||
|
-webkit-transform-origin: center center;
|
||||||
|
transform-origin: center center; }
|
||||||
|
|
||||||
|
.fa-layers-text, .fa-layers-counter {
|
||||||
|
display: inline-block;
|
||||||
|
position: absolute;
|
||||||
|
text-align: center; }
|
||||||
|
|
||||||
|
.fa-layers-text {
|
||||||
|
left: 50%;
|
||||||
|
top: 50%;
|
||||||
|
-webkit-transform: translate(-50%, -50%);
|
||||||
|
transform: translate(-50%, -50%);
|
||||||
|
-webkit-transform-origin: center center;
|
||||||
|
transform-origin: center center; }
|
||||||
|
|
||||||
|
.fa-layers-counter {
|
||||||
|
background-color: #ff253a;
|
||||||
|
border-radius: 1em;
|
||||||
|
-webkit-box-sizing: border-box;
|
||||||
|
box-sizing: border-box;
|
||||||
|
color: #fff;
|
||||||
|
height: 1.5em;
|
||||||
|
line-height: 1;
|
||||||
|
max-width: 5em;
|
||||||
|
min-width: 1.5em;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: .25em;
|
||||||
|
right: 0;
|
||||||
|
text-overflow: ellipsis;
|
||||||
|
top: 0;
|
||||||
|
-webkit-transform: scale(0.25);
|
||||||
|
transform: scale(0.25);
|
||||||
|
-webkit-transform-origin: top right;
|
||||||
|
transform-origin: top right; }
|
||||||
|
|
||||||
|
.fa-layers-bottom-right {
|
||||||
|
bottom: 0;
|
||||||
|
right: 0;
|
||||||
|
top: auto;
|
||||||
|
-webkit-transform: scale(0.25);
|
||||||
|
transform: scale(0.25);
|
||||||
|
-webkit-transform-origin: bottom right;
|
||||||
|
transform-origin: bottom right; }
|
||||||
|
|
||||||
|
.fa-layers-bottom-left {
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
right: auto;
|
||||||
|
top: auto;
|
||||||
|
-webkit-transform: scale(0.25);
|
||||||
|
transform: scale(0.25);
|
||||||
|
-webkit-transform-origin: bottom left;
|
||||||
|
transform-origin: bottom left; }
|
||||||
|
|
||||||
|
.fa-layers-top-right {
|
||||||
|
right: 0;
|
||||||
|
top: 0;
|
||||||
|
-webkit-transform: scale(0.25);
|
||||||
|
transform: scale(0.25);
|
||||||
|
-webkit-transform-origin: top right;
|
||||||
|
transform-origin: top right; }
|
||||||
|
|
||||||
|
.fa-layers-top-left {
|
||||||
|
left: 0;
|
||||||
|
right: auto;
|
||||||
|
top: 0;
|
||||||
|
-webkit-transform: scale(0.25);
|
||||||
|
transform: scale(0.25);
|
||||||
|
-webkit-transform-origin: top left;
|
||||||
|
transform-origin: top left; }
|
||||||
|
|
||||||
|
.fa-lg {
|
||||||
|
font-size: 1.33333em;
|
||||||
|
line-height: 0.75em;
|
||||||
|
vertical-align: -.0667em; }
|
||||||
|
|
||||||
|
.fa-xs {
|
||||||
|
font-size: .75em; }
|
||||||
|
|
||||||
|
.fa-sm {
|
||||||
|
font-size: .875em; }
|
||||||
|
|
||||||
|
.fa-1x {
|
||||||
|
font-size: 1em; }
|
||||||
|
|
||||||
|
.fa-2x {
|
||||||
|
font-size: 2em; }
|
||||||
|
|
||||||
|
.fa-3x {
|
||||||
|
font-size: 3em; }
|
||||||
|
|
||||||
|
.fa-4x {
|
||||||
|
font-size: 4em; }
|
||||||
|
|
||||||
|
.fa-5x {
|
||||||
|
font-size: 5em; }
|
||||||
|
|
||||||
|
.fa-6x {
|
||||||
|
font-size: 6em; }
|
||||||
|
|
||||||
|
.fa-7x {
|
||||||
|
font-size: 7em; }
|
||||||
|
|
||||||
|
.fa-8x {
|
||||||
|
font-size: 8em; }
|
||||||
|
|
||||||
|
.fa-9x {
|
||||||
|
font-size: 9em; }
|
||||||
|
|
||||||
|
.fa-10x {
|
||||||
|
font-size: 10em; }
|
||||||
|
|
||||||
|
.fa-fw {
|
||||||
|
text-align: center;
|
||||||
|
width: 1.25em; }
|
||||||
|
|
||||||
|
.fa-ul {
|
||||||
|
list-style-type: none;
|
||||||
|
margin-left: 2.5em;
|
||||||
|
padding-left: 0; }
|
||||||
|
.fa-ul > li {
|
||||||
|
position: relative; }
|
||||||
|
|
||||||
|
.fa-li {
|
||||||
|
left: -2em;
|
||||||
|
position: absolute;
|
||||||
|
text-align: center;
|
||||||
|
width: 2em;
|
||||||
|
line-height: inherit; }
|
||||||
|
|
||||||
|
.fa-border {
|
||||||
|
border: solid 0.08em #eee;
|
||||||
|
border-radius: .1em;
|
||||||
|
padding: .2em .25em .15em; }
|
||||||
|
|
||||||
|
.fa-pull-left {
|
||||||
|
float: left; }
|
||||||
|
|
||||||
|
.fa-pull-right {
|
||||||
|
float: right; }
|
||||||
|
|
||||||
|
.fa.fa-pull-left,
|
||||||
|
.fas.fa-pull-left,
|
||||||
|
.far.fa-pull-left,
|
||||||
|
.fal.fa-pull-left,
|
||||||
|
.fab.fa-pull-left {
|
||||||
|
margin-right: .3em; }
|
||||||
|
|
||||||
|
.fa.fa-pull-right,
|
||||||
|
.fas.fa-pull-right,
|
||||||
|
.far.fa-pull-right,
|
||||||
|
.fal.fa-pull-right,
|
||||||
|
.fab.fa-pull-right {
|
||||||
|
margin-left: .3em; }
|
||||||
|
|
||||||
|
.fa-spin {
|
||||||
|
-webkit-animation: fa-spin 2s infinite linear;
|
||||||
|
animation: fa-spin 2s infinite linear; }
|
||||||
|
|
||||||
|
.fa-pulse {
|
||||||
|
-webkit-animation: fa-spin 1s infinite steps(8);
|
||||||
|
animation: fa-spin 1s infinite steps(8); }
|
||||||
|
|
||||||
|
@-webkit-keyframes fa-spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg); }
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg); } }
|
||||||
|
|
||||||
|
@keyframes fa-spin {
|
||||||
|
0% {
|
||||||
|
-webkit-transform: rotate(0deg);
|
||||||
|
transform: rotate(0deg); }
|
||||||
|
100% {
|
||||||
|
-webkit-transform: rotate(360deg);
|
||||||
|
transform: rotate(360deg); } }
|
||||||
|
|
||||||
|
.fa-rotate-90 {
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=1)";
|
||||||
|
-webkit-transform: rotate(90deg);
|
||||||
|
transform: rotate(90deg); }
|
||||||
|
|
||||||
|
.fa-rotate-180 {
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2)";
|
||||||
|
-webkit-transform: rotate(180deg);
|
||||||
|
transform: rotate(180deg); }
|
||||||
|
|
||||||
|
.fa-rotate-270 {
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=3)";
|
||||||
|
-webkit-transform: rotate(270deg);
|
||||||
|
transform: rotate(270deg); }
|
||||||
|
|
||||||
|
.fa-flip-horizontal {
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=0, mirror=1)";
|
||||||
|
-webkit-transform: scale(-1, 1);
|
||||||
|
transform: scale(-1, 1); }
|
||||||
|
|
||||||
|
.fa-flip-vertical {
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
|
||||||
|
-webkit-transform: scale(1, -1);
|
||||||
|
transform: scale(1, -1); }
|
||||||
|
|
||||||
|
.fa-flip-both, .fa-flip-horizontal.fa-flip-vertical {
|
||||||
|
-ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=2, mirror=1)";
|
||||||
|
-webkit-transform: scale(-1, -1);
|
||||||
|
transform: scale(-1, -1); }
|
||||||
|
|
||||||
|
:root .fa-rotate-90,
|
||||||
|
:root .fa-rotate-180,
|
||||||
|
:root .fa-rotate-270,
|
||||||
|
:root .fa-flip-horizontal,
|
||||||
|
:root .fa-flip-vertical,
|
||||||
|
:root .fa-flip-both {
|
||||||
|
-webkit-filter: none;
|
||||||
|
filter: none; }
|
||||||
|
|
||||||
|
.fa-stack {
|
||||||
|
display: inline-block;
|
||||||
|
height: 2em;
|
||||||
|
position: relative;
|
||||||
|
width: 2.5em; }
|
||||||
|
|
||||||
|
.fa-stack-1x,
|
||||||
|
.fa-stack-2x {
|
||||||
|
bottom: 0;
|
||||||
|
left: 0;
|
||||||
|
margin: auto;
|
||||||
|
position: absolute;
|
||||||
|
right: 0;
|
||||||
|
top: 0; }
|
||||||
|
|
||||||
|
.svg-inline--fa.fa-stack-1x {
|
||||||
|
height: 1em;
|
||||||
|
width: 1.25em; }
|
||||||
|
|
||||||
|
.svg-inline--fa.fa-stack-2x {
|
||||||
|
height: 2em;
|
||||||
|
width: 2.5em; }
|
||||||
|
|
||||||
|
.fa-inverse {
|
||||||
|
color: #fff; }
|
||||||
|
|
||||||
|
.sr-only {
|
||||||
|
border: 0;
|
||||||
|
clip: rect(0, 0, 0, 0);
|
||||||
|
height: 1px;
|
||||||
|
margin: -1px;
|
||||||
|
overflow: hidden;
|
||||||
|
padding: 0;
|
||||||
|
position: absolute;
|
||||||
|
width: 1px; }
|
||||||
|
|
||||||
|
.sr-only-focusable:active, .sr-only-focusable:focus {
|
||||||
|
clip: auto;
|
||||||
|
height: auto;
|
||||||
|
margin: 0;
|
||||||
|
overflow: visible;
|
||||||
|
position: static;
|
||||||
|
width: auto; }
|
||||||
|
|
||||||
|
.svg-inline--fa .fa-primary {
|
||||||
|
fill: var(--fa-primary-color, currentColor);
|
||||||
|
opacity: 1;
|
||||||
|
opacity: var(--fa-primary-opacity, 1); }
|
||||||
|
|
||||||
|
.svg-inline--fa .fa-secondary {
|
||||||
|
fill: var(--fa-secondary-color, currentColor);
|
||||||
|
opacity: 0.4;
|
||||||
|
opacity: var(--fa-secondary-opacity, 0.4); }
|
||||||
|
|
||||||
|
.svg-inline--fa.fa-swap-opacity .fa-primary {
|
||||||
|
opacity: 0.4;
|
||||||
|
opacity: var(--fa-secondary-opacity, 0.4); }
|
||||||
|
|
||||||
|
.svg-inline--fa.fa-swap-opacity .fa-secondary {
|
||||||
|
opacity: 1;
|
||||||
|
opacity: var(--fa-primary-opacity, 1); }
|
||||||
|
|
||||||
|
.svg-inline--fa mask .fa-primary,
|
||||||
|
.svg-inline--fa mask .fa-secondary {
|
||||||
|
fill: black; }
|
||||||
|
|
||||||
|
.fad.fa-inverse {
|
||||||
|
color: #fff; }
|
5
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/css/svg-with-js.min.css
vendored
Normal file
2172
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/css/v4-shims.css
vendored
Normal file
5
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/css/v4-shims.min.css
vendored
Normal file
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/500px.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M103.3 344.3c-6.5-14.2-6.9-18.3 7.4-23.1 25.6-8 8 9.2 43.2 49.2h.3v-93.9c1.2-50.2 44-92.2 97.7-92.2 53.9 0 97.7 43.5 97.7 96.8 0 63.4-60.8 113.2-128.5 93.3-10.5-4.2-2.1-31.7 8.5-28.6 53 0 89.4-10.1 89.4-64.4 0-61-77.1-89.6-116.9-44.6-23.5 26.4-17.6 42.1-17.6 157.6 50.7 31 118.3 22 160.4-20.1 24.8-24.8 38.5-58 38.5-93 0-35.2-13.8-68.2-38.8-93.3-24.8-24.8-57.8-38.5-93.3-38.5s-68.8 13.8-93.5 38.5c-.3.3-16 16.5-21.2 23.9l-.5.6c-3.3 4.7-6.3 9.1-20.1 6.1-6.9-1.7-14.3-5.8-14.3-11.8V20c0-5 3.9-10.5 10.5-10.5h241.3c8.3 0 8.3 11.6 8.3 15.1 0 3.9 0 15.1-8.3 15.1H130.3v132.9h.3c104.2-109.8 282.8-36 282.8 108.9 0 178.1-244.8 220.3-310.1 62.8zm63.3-260.8c-.5 4.2 4.6 24.5 14.6 20.6C306 56.6 384 144.5 390.6 144.5c4.8 0 22.8-15.3 14.3-22.8-93.2-89-234.5-57-238.3-38.2zM393 414.7C283 524.6 94 475.5 61 310.5c0-12.2-30.4-7.4-28.9 3.3 24 173.4 246 256.9 381.6 121.3 6.9-7.8-12.6-28.4-20.7-20.4zM213.6 306.6c0 4 4.3 7.3 5.5 8.5 3 3 6.1 4.4 8.5 4.4 3.8 0 2.6.2 22.3-19.5 19.6 19.3 19.1 19.5 22.3 19.5 5.4 0 18.5-10.4 10.7-18.2L265.6 284l18.2-18.2c6.3-6.8-10.1-21.8-16.2-15.7L249.7 268c-18.6-18.8-18.4-19.5-21.5-19.5-5 0-18 11.7-12.4 17.3L234 284c-18.1 17.9-20.4 19.2-20.4 22.6z"/></svg>
|
After Width: | Height: | Size: 1.2 KiB |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/accessible-icon.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M423.9 255.8L411 413.1c-3.3 40.7-63.9 35.1-60.6-4.9l10-122.5-41.1 2.3c10.1 20.7 15.8 43.9 15.8 68.5 0 41.2-16.1 78.7-42.3 106.5l-39.3-39.3c57.9-63.7 13.1-167.2-74-167.2-25.9 0-49.5 9.9-67.2 26L73 243.2c22-20.7 50.1-35.1 81.4-40.2l75.3-85.7-42.6-24.8-51.6 46c-30 26.8-70.6-18.5-40.5-45.4l68-60.7c9.8-8.8 24.1-10.2 35.5-3.6 0 0 139.3 80.9 139.5 81.1 16.2 10.1 20.7 36 6.1 52.6L285.7 229l106.1-5.9c18.5-1.1 33.6 14.4 32.1 32.7zm-64.9-154c28.1 0 50.9-22.8 50.9-50.9C409.9 22.8 387.1 0 359 0c-28.1 0-50.9 22.8-50.9 50.9 0 28.1 22.8 50.9 50.9 50.9zM179.6 456.5c-80.6 0-127.4-90.6-82.7-156.1l-39.7-39.7C36.4 287 24 320.3 24 356.4c0 130.7 150.7 201.4 251.4 122.5l-39.7-39.7c-16 10.9-35.3 17.3-56.1 17.3z"/></svg>
|
After Width: | Height: | Size: 775 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/accusoft.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M322.1 252v-1l-51.2-65.8s-12 1.6-25 15.1c-9 9.3-242.1 239.1-243.4 240.9-7 10 1.6 6.8 15.7 1.7.8 0 114.5-36.6 114.5-36.6.5-.6-.1-.1.6-.6-.4-5.1-.8-26.2-1-27.7-.6-5.2 2.2-6.9 7-8.9l92.6-33.8c.6-.8 88.5-81.7 90.2-83.3zm160.1 120.1c13.3 16.1 20.7 13.3 30.8 9.3 3.2-1.2 115.4-47.6 117.8-48.9 8-4.3-1.7-16.7-7.2-23.4-2.1-2.5-205.1-245.6-207.2-248.3-9.7-12.2-14.3-12.9-38.4-12.8-10.2 0-106.8.5-116.5.6-19.2.1-32.9-.3-19.2 16.9C250 75 476.5 365.2 482.2 372.1zm152.7 1.6c-2.3-.3-24.6-4.7-38-7.2 0 0-115 50.4-117.5 51.6-16 7.3-26.9-3.2-36.7-14.6l-57.1-74c-5.4-.9-60.4-9.6-65.3-9.3-3.1.2-9.6.8-14.4 2.9-4.9 2.1-145.2 52.8-150.2 54.7-5.1 2-11.4 3.6-11.1 7.6.2 2.5 2 2.6 4.6 3.5 2.7.8 300.9 67.6 308 69.1 15.6 3.3 38.5 10.5 53.6 1.7 2.1-1.2 123.8-76.4 125.8-77.8 5.4-4 4.3-6.8-1.7-8.2z"/></svg>
|
After Width: | Height: | Size: 852 B |
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path d="M357.45 468.2c-1.2-7.7-1.3-7.6-9.6-7.6-99.8.2-111.8-2.4-112.7-2.6-12.3-1.7-20.6-10.5-21-23.1-.1-1.6-.2-71.6-1-129.1-.1-4.7 1.6-6.4 5.9-7.5 12.5-3 24.9-6.1 37.3-9.7 4.3-1.3 6.8-.2 8.4 3.5 4.5 10.3 8.8 20.6 13.2 30.9 1.6 3.7.1 4.4-3.4 4.4-10-.2-20-.1-30.4-.1v27h116c-1.4-9.5-2.7-18.1-4-27.5-7 0-13.8.4-20.4-.1-22.6-1.6-18.3-4.4-84-158.6-8.8-20.1-27.9-62.1-36.5-89.2-4.4-14 5.5-25.4 18.9-26.6 18.6-1.7 37.5-1.6 56.2-2 20.6-.4 41.2-.4 61.8-.5 3.1 0 4-1.4 4.3-4.3 1.2-9.8 2.7-19.5 4-29.2.8-5.3 1.6-10.7 2.4-16.1L23.75 0c-3.6 0-5.3 1.1-4.6 5.3 2.2 13.2-.8.8 6.4 45.3 63.4 0 71.8.9 101.8.5 12.3-.2 37 3.5 37.7 22.1.4 11.4-1.1 11.3-32.6 87.4-53.8 129.8-50.7 120.3-67.3 161-1.7 4.1-3.6 5.2-7.6 5.2-8.5-.2-17-.3-25.4.1-1.9.1-5.2 1.8-5.5 3.2-1.5 8.1-2.2 16.3-3.2 24.9h114.3v-27.6c-6.9 0-33.5.4-35.3-2.9 5.3-12.3 10.4-24.4 15.7-36.7 16.3 4 31.9 7.8 47.6 11.7 3.4.9 4.6 3 4.6 6.8-.1 42.9.1 85.9.2 128.8 0 10.2-5.5 19.1-14.9 23.1-6.5 2.7-3.3 3.4-121.4 2.4-5.3 0-7.1 2-7.6 6.8-1.5 12.9-2.9 25.9-5 38.8-.8 5 1.3 5.7 5.3 5.7 183.2.6-30.7 0 337.1 0-2.5-15-4.4-29.4-6.6-43.7zm-174.9-205.7c-13.3-4.2-26.6-8.2-39.9-12.5a44.53 44.53 0 0 1-5.8-2.9c17.2-44.3 34.2-88.1 51.3-132.1 7.5 2.4 7.9-.8 9.4 0 9.3 22.5 18.1 60.1 27 82.8 6.6 16.7 13 33.5 19.7 50.9a35.78 35.78 0 0 1-3.9 2.1c-13.1 3.9-26.4 7.5-39.4 11.7a27.66 27.66 0 0 1-18.4 0z"/></svg>
|
After Width: | Height: | Size: 1.4 KiB |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/adn.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 496 512"><path d="M248 167.5l64.9 98.8H183.1l64.9-98.8zM496 256c0 136.9-111.1 248-248 248S0 392.9 0 256 111.1 8 248 8s248 111.1 248 248zm-99.8 82.7L248 115.5 99.8 338.7h30.4l33.6-51.7h168.6l33.6 51.7h30.2z"/></svg>
|
After Width: | Height: | Size: 267 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/adobe.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M315.5 64h170.9v384L315.5 64zm-119 0H25.6v384L196.5 64zM256 206.1L363.5 448h-73l-30.7-76.8h-78.7L256 206.1z"/></svg>
|
After Width: | Height: | Size: 187 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/adversal.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M482.1 32H28.7C5.8 32 0 37.9 0 60.9v390.2C0 474.4 5.8 480 28.7 480h453.4c24.4 0 29.9-5.2 29.9-29.7V62.2c0-24.6-5.4-30.2-29.9-30.2zM178.4 220.3c-27.5-20.2-72.1-8.7-84.2 23.4-4.3 11.1-9.3 9.5-17.5 8.3-9.7-1.5-17.2-3.2-22.5-5.5-28.8-11.4 8.6-55.3 24.9-64.3 41.1-21.4 83.4-22.2 125.3-4.8 40.9 16.8 34.5 59.2 34.5 128.5 2.7 25.8-4.3 58.3 9.3 88.8 1.9 4.4.4 7.9-2.7 10.7-8.4 6.7-39.3 2.2-46.6-7.4-1.9-2.2-1.8-3.6-3.9-6.2-3.6-3.9-7.3-2.2-11.9 1-57.4 36.4-140.3 21.4-147-43.3-3.1-29.3 12.4-57.1 39.6-71 38.2-19.5 112.2-11.8 114-30.9 1.1-10.2-1.9-20.1-11.3-27.3zm286.7 222c0 15.1-11.1 9.9-17.8 9.9H52.4c-7.4 0-18.2 4.8-17.8-10.7.4-13.9 10.5-9.1 17.1-9.1 132.3-.4 264.5-.4 396.8 0 6.8 0 16.6-4.4 16.6 9.9zm3.8-340.5v291c0 5.7-.7 13.9-8.1 13.9-12.4-.4-27.5 7.1-36.1-5.6-5.8-8.7-7.8-4-12.4-1.2-53.4 29.7-128.1 7.1-144.4-85.2-6.1-33.4-.7-67.1 15.7-100 11.8-23.9 56.9-76.1 136.1-30.5v-71c0-26.2-.1-26.2 26-26.2 3.1 0 6.6.4 9.7 0 10.1-.8 13.6 4.4 13.6 14.3-.1.2-.1.3-.1.5zm-51.5 232.3c-19.5 47.6-72.9 43.3-90 5.2-15.1-33.3-15.5-68.2.4-101.5 16.3-34.1 59.7-35.7 81.5-4.8 20.6 28.8 14.9 84.6 8.1 101.1zm-294.8 35.3c-7.5-1.3-33-3.3-33.7-27.8-.4-13.9 7.8-23 19.8-25.8 24.4-5.9 49.3-9.9 73.7-14.7 8.9-2 7.4 4.4 7.8 9.5 1.4 33-26.1 59.2-67.6 58.8z"/></svg>
|
After Width: | Height: | Size: 1.3 KiB |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/affiliatetheme.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M159.7 237.4C108.4 308.3 43.1 348.2 14 326.6-15.2 304.9 2.8 230 54.2 159.1c51.3-70.9 116.6-110.8 145.7-89.2 29.1 21.6 11.1 96.6-40.2 167.5zm351.2-57.3C437.1 303.5 319 367.8 246.4 323.7c-25-15.2-41.3-41.2-49-73.8-33.6 64.8-92.8 113.8-164.1 133.2 49.8 59.3 124.1 96.9 207 96.9 150 0 271.6-123.1 271.6-274.9.1-8.5-.3-16.8-1-25z"/></svg>
|
After Width: | Height: | Size: 404 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/airbnb.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M224 373.12c-25.24-31.67-40.08-59.43-45-83.18-22.55-88 112.61-88 90.06 0-5.45 24.25-20.29 52-45 83.18zm138.15 73.23c-42.06 18.31-83.67-10.88-119.3-50.47 103.9-130.07 46.11-200-18.85-200-54.92 0-85.16 46.51-73.28 100.5 6.93 29.19 25.23 62.39 54.43 99.5-32.53 36.05-60.55 52.69-85.15 54.92-50 7.43-89.11-41.06-71.3-91.09 15.1-39.16 111.72-231.18 115.87-241.56 15.75-30.07 25.56-57.4 59.38-57.4 32.34 0 43.4 25.94 60.37 59.87 36 70.62 89.35 177.48 114.84 239.09 13.17 33.07-1.37 71.29-37.01 86.64zm47-136.12C280.27 35.93 273.13 32 224 32c-45.52 0-64.87 31.67-84.66 72.79C33.18 317.1 22.89 347.19 22 349.81-3.22 419.14 48.74 480 111.63 480c21.71 0 60.61-6.06 112.37-62.4 58.68 63.78 101.26 62.4 112.37 62.4 62.89.05 114.85-60.86 89.61-130.19.02-3.89-16.82-38.9-16.82-39.58z"/></svg>
|
After Width: | Height: | Size: 849 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/algolia.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M229.3 182.6c-49.3 0-89.2 39.9-89.2 89.2 0 49.3 39.9 89.2 89.2 89.2s89.2-39.9 89.2-89.2c0-49.3-40-89.2-89.2-89.2zm62.7 56.6l-58.9 30.6c-1.8.9-3.8-.4-3.8-2.3V201c0-1.5 1.3-2.7 2.7-2.6 26.2 1 48.9 15.7 61.1 37.1.7 1.3.2 3-1.1 3.7zM389.1 32H58.9C26.4 32 0 58.4 0 90.9V421c0 32.6 26.4 59 58.9 59H389c32.6 0 58.9-26.4 58.9-58.9V90.9C448 58.4 421.6 32 389.1 32zm-202.6 84.7c0-10.8 8.7-19.5 19.5-19.5h45.3c10.8 0 19.5 8.7 19.5 19.5v15.4c0 1.8-1.7 3-3.3 2.5-12.3-3.4-25.1-5.1-38.1-5.1-13.5 0-26.7 1.8-39.4 5.5-1.7.5-3.4-.8-3.4-2.5v-15.8zm-84.4 37l9.2-9.2c7.6-7.6 19.9-7.6 27.5 0l7.7 7.7c1.1 1.1 1 3-.3 4-6.2 4.5-12.1 9.4-17.6 14.9-5.4 5.4-10.4 11.3-14.8 17.4-1 1.3-2.9 1.5-4 .3l-7.7-7.7c-7.6-7.5-7.6-19.8 0-27.4zm127.2 244.8c-70 0-126.6-56.7-126.6-126.6s56.7-126.6 126.6-126.6c70 0 126.6 56.6 126.6 126.6 0 69.8-56.7 126.6-126.6 126.6z"/></svg>
|
After Width: | Height: | Size: 907 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/alipay.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M377.74 32H70.26C31.41 32 0 63.41 0 102.26v307.48C0 448.59 31.41 480 70.26 480h307.48c38.52 0 69.76-31.08 70.26-69.6-45.96-25.62-110.59-60.34-171.6-88.44-32.07 43.97-84.14 81-148.62 81-70.59 0-93.73-45.3-97.04-76.37-3.97-39.01 14.88-81.5 99.52-81.5 35.38 0 79.35 10.25 127.13 24.96 16.53-30.09 26.45-60.34 26.45-60.34h-178.2v-16.7h92.08v-31.24H88.28v-19.01h109.44V92.34h50.92v50.42h109.44v19.01H248.63v31.24h88.77s-15.21 46.62-38.35 90.92c48.93 16.7 100.01 36.04 148.62 52.74V102.26C447.83 63.57 416.43 32 377.74 32zM47.28 322.95c.99 20.17 10.25 53.73 69.93 53.73 52.07 0 92.58-39.68 117.87-72.9-44.63-18.68-84.48-31.41-109.44-31.41-67.45 0-79.35 33.06-78.36 50.58z"/></svg>
|
After Width: | Height: | Size: 745 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/amazon-pay.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M14 325.3c2.3-4.2 5.2-4.9 9.7-2.5 10.4 5.6 20.6 11.4 31.2 16.7a595.88 595.88 0 0 0 127.4 46.3 616.61 616.61 0 0 0 63.2 11.8 603.33 603.33 0 0 0 95 5.2c17.4-.4 34.8-1.8 52.1-3.8a603.66 603.66 0 0 0 163.3-42.8c2.9-1.2 5.9-2 9.1-1.2 6.7 1.8 9 9 4.1 13.9a70 70 0 0 1-9.6 7.4c-30.7 21.1-64.2 36.4-99.6 47.9a473.31 473.31 0 0 1-75.1 17.6 431 431 0 0 1-53.2 4.8 21.3 21.3 0 0 0-2.5.3H308a21.3 21.3 0 0 0-2.5-.3c-3.6-.2-7.2-.3-10.7-.4a426.3 426.3 0 0 1-50.4-5.3A448.4 448.4 0 0 1 164 420a443.33 443.33 0 0 1-145.6-87c-1.8-1.6-3-3.8-4.4-5.7zM172 65.1l-4.3.6a80.92 80.92 0 0 0-38 15.1c-2.4 1.7-4.6 3.5-7.1 5.4a4.29 4.29 0 0 1-.4-1.4c-.4-2.7-.8-5.5-1.3-8.2-.7-4.6-3-6.6-7.6-6.6h-11.5c-6.9 0-8.2 1.3-8.2 8.2v209.3c0 1 0 2 .1 3 .2 3 2 4.9 4.9 5 7 .1 14.1.1 21.1 0 2.9 0 4.7-2 5-5 .1-1 .1-2 .1-3v-72.4c1.1.9 1.7 1.4 2.2 1.9 17.9 14.9 38.5 19.8 61 15.4 20.4-4 34.6-16.5 43.8-34.9 7-13.9 9.9-28.7 10.3-44.1.5-17.1-1.2-33.9-8.1-49.8-8.5-19.6-22.6-32.5-43.9-36.9-3.2-.7-6.5-1-9.8-1.5-2.8-.1-5.5-.1-8.3-.1zM124.6 107a3.48 3.48 0 0 1 1.7-3.3c13.7-9.5 28.8-14.5 45.6-13.2 14.9 1.1 27.1 8.4 33.5 25.9 3.9 10.7 4.9 21.8 4.9 33 0 10.4-.8 20.6-4 30.6-6.8 21.3-22.4 29.4-42.6 28.5-14-.6-26.2-6-37.4-13.9a3.57 3.57 0 0 1-1.7-3.3c.1-14.1 0-28.1 0-42.2s.1-28 0-42.1zm205.7-41.9c-1 .1-2 .3-2.9.4a148 148 0 0 0-28.9 4.1c-6.1 1.6-12 3.8-17.9 5.8-3.6 1.2-5.4 3.8-5.3 7.7.1 3.3-.1 6.6 0 9.9.1 4.8 2.1 6.1 6.8 4.9 7.8-2 15.6-4.2 23.5-5.7 12.3-2.3 24.7-3.3 37.2-1.4 6.5 1 12.6 2.9 16.8 8.4 3.7 4.8 5.1 10.5 5.3 16.4.3 8.3.2 16.6.3 24.9a7.84 7.84 0 0 1-.2 1.4c-.5-.1-.9 0-1.3-.1a180.56 180.56 0 0 0-32-4.9c-11.3-.6-22.5.1-33.3 3.9-12.9 4.5-23.3 12.3-29.4 24.9-4.7 9.8-5.4 20.2-3.9 30.7 2 14 9 24.8 21.4 31.7 11.9 6.6 24.8 7.4 37.9 5.4 15.1-2.3 28.5-8.7 40.3-18.4a7.36 7.36 0 0 1 1.6-1.1c.6 3.8 1.1 7.4 1.8 11 .6 3.1 2.5 5.1 5.4 5.2 5.4.1 10.9.1 16.3 0a4.84 4.84 0 0 0 4.8-4.7 26.2 26.2 0 0 0 .1-2.8v-106a80 80 0 0 0-.9-12.9c-1.9-12.9-7.4-23.5-19-30.4-6.7-4-14.1-6-21.8-7.1-3.6-.5-7.2-.8-10.8-1.3-3.9.1-7.9.1-11.9.1zm35 127.7a3.33 3.33 0 0 1-1.5 3c-11.2 8.1-23.5 13.5-37.4 14.9-5.7.6-11.4.4-16.8-1.8a20.08 20.08 0 0 1-12.4-13.3 32.9 32.9 0 0 1-.1-19.4c2.5-8.3 8.4-13 16.4-15.6a61.33 61.33 0 0 1 24.8-2.2c8.4.7 16.6 2.3 25 3.4 1.6.2 2.1 1 2.1 2.6-.1 4.8 0 9.5 0 14.3s-.2 9.4-.1 14.1zm259.9 129.4c-1-5-4.8-6.9-9.1-8.3a88.42 88.42 0 0 0-21-3.9 147.32 147.32 0 0 0-39.2 1.9c-14.3 2.7-27.9 7.3-40 15.6a13.75 13.75 0 0 0-3.7 3.5 5.11 5.11 0 0 0-.5 4c.4 1.5 2.1 1.9 3.6 1.8a16.2 16.2 0 0 0 2.2-.1c7.8-.8 15.5-1.7 23.3-2.5 11.4-1.1 22.9-1.8 34.3-.9a71.64 71.64 0 0 1 14.4 2.7c5.1 1.4 7.4 5.2 7.6 10.4.4 8-1.4 15.7-3.5 23.3-4.1 15.4-10 30.3-15.8 45.1a17.6 17.6 0 0 0-1 3c-.5 2.9 1.2 4.8 4.1 4.1a10.56 10.56 0 0 0 4.8-2.5 145.91 145.91 0 0 0 12.7-13.4c12.8-16.4 20.3-35.3 24.7-55.6.8-3.6 1.4-7.3 2.1-10.9v-17.3zM493.1 199q-19.35-53.55-38.7-107.2c-2-5.7-4.2-11.3-6.3-16.9-1.1-2.9-3.2-4.8-6.4-4.8-7.6-.1-15.2-.2-22.9-.1-2.5 0-3.7 2-3.2 4.5a43.1 43.1 0 0 0 1.9 6.1q29.4 72.75 59.1 145.5c1.7 4.1 2.1 7.6.2 11.8-3.3 7.3-5.9 15-9.3 22.3-3 6.5-8 11.4-15.2 13.3a42.13 42.13 0 0 1-15.4 1.1c-2.5-.2-5-.8-7.5-1-3.4-.2-5.1 1.3-5.2 4.8q-.15 5 0 9.9c.1 5.5 2 8 7.4 8.9a108.18 108.18 0 0 0 16.9 2c17.1.4 30.7-6.5 39.5-21.4a131.63 131.63 0 0 0 9.2-18.4q35.55-89.7 70.6-179.6a26.62 26.62 0 0 0 1.6-5.5c.4-2.8-.9-4.4-3.7-4.4-6.6-.1-13.3 0-19.9 0a7.54 7.54 0 0 0-7.7 5.2c-.5 1.4-1.1 2.7-1.6 4.1l-34.8 100c-2.5 7.2-5.1 14.5-7.7 22.2-.4-1.1-.6-1.7-.9-2.4z"/></svg>
|
After Width: | Height: | Size: 3.4 KiB |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/amazon.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M257.2 162.7c-48.7 1.8-169.5 15.5-169.5 117.5 0 109.5 138.3 114 183.5 43.2 6.5 10.2 35.4 37.5 45.3 46.8l56.8-56S341 288.9 341 261.4V114.3C341 89 316.5 32 228.7 32 140.7 32 94 87 94 136.3l73.5 6.8c16.3-49.5 54.2-49.5 54.2-49.5 40.7-.1 35.5 29.8 35.5 69.1zm0 86.8c0 80-84.2 68-84.2 17.2 0-47.2 50.5-56.7 84.2-57.8v40.6zm136 163.5c-7.7 10-70 67-174.5 67S34.2 408.5 9.7 379c-6.8-7.7 1-11.3 5.5-8.3C88.5 415.2 203 488.5 387.7 401c7.5-3.7 13.3 2 5.5 12zm39.8 2.2c-6.5 15.8-16 26.8-21.2 31-5.5 4.5-9.5 2.7-6.5-3.8s19.3-46.5 12.7-55c-6.5-8.3-37-4.3-48-3.2-10.8 1-13 2-14-.3-2.3-5.7 21.7-15.5 37.5-17.5 15.7-1.8 41-.8 46 5.7 3.7 5.1 0 27.1-6.5 43.1z"/></svg>
|
After Width: | Height: | Size: 720 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/amilia.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M240.1 32c-61.9 0-131.5 16.9-184.2 55.4-5.1 3.1-9.1 9.2-7.2 19.4 1.1 5.1 5.1 27.4 10.2 39.6 4.1 10.2 14.2 10.2 20.3 6.1 32.5-22.3 96.5-47.7 152.3-47.7 57.9 0 58.9 28.4 58.9 73.1v38.5C203 227.7 78.2 251 46.7 264.2 11.2 280.5 16.3 357.7 16.3 376s15.2 104 124.9 104c47.8 0 113.7-20.7 153.3-42.1v25.4c0 3 2.1 8.2 6.1 9.1 3.1 1 50.7 2 59.9 2s62.5.3 66.5-.7c4.1-1 5.1-6.1 5.1-9.1V168c-.1-80.3-57.9-136-192-136zm50.2 348c-21.4 13.2-48.7 24.4-79.1 24.4-52.8 0-58.9-33.5-59-44.7 0-12.2-3-42.7 18.3-52.9 24.3-13.2 75.1-29.4 119.8-33.5z"/></svg>
|
After Width: | Height: | Size: 605 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/android.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M420.55,301.93a24,24,0,1,1,24-24,24,24,0,0,1-24,24m-265.1,0a24,24,0,1,1,24-24,24,24,0,0,1-24,24m273.7-144.48,47.94-83a10,10,0,1,0-17.27-10h0l-48.54,84.07a301.25,301.25,0,0,0-246.56,0L116.18,64.45a10,10,0,1,0-17.27,10h0l47.94,83C64.53,202.22,8.24,285.55,0,384H576c-8.24-98.45-64.54-181.78-146.85-226.55"/></svg>
|
After Width: | Height: | Size: 381 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/angellist.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M347.1 215.4c11.7-32.6 45.4-126.9 45.4-157.1 0-26.6-15.7-48.9-43.7-48.9-44.6 0-84.6 131.7-97.1 163.1C242 144 196.6 0 156.6 0c-31.1 0-45.7 22.9-45.7 51.7 0 35.3 34.2 126.8 46.6 162-6.3-2.3-13.1-4.3-20-4.3-23.4 0-48.3 29.1-48.3 52.6 0 8.9 4.9 21.4 8 29.7-36.9 10-51.1 34.6-51.1 71.7C46 435.6 114.4 512 210.6 512c118 0 191.4-88.6 191.4-202.9 0-43.1-6.9-82-54.9-93.7zM311.7 108c4-12.3 21.1-64.3 37.1-64.3 8.6 0 10.9 8.9 10.9 16 0 19.1-38.6 124.6-47.1 148l-34-6 33.1-93.7zM142.3 48.3c0-11.9 14.5-45.7 46.3 47.1l34.6 100.3c-15.6-1.3-27.7-3-35.4 1.4-10.9-28.8-45.5-119.7-45.5-148.8zM140 244c29.3 0 67.1 94.6 67.1 107.4 0 5.1-4.9 11.4-10.6 11.4-20.9 0-76.9-76.9-76.9-97.7.1-7.7 12.7-21.1 20.4-21.1zm184.3 186.3c-29.1 32-66.3 48.6-109.7 48.6-59.4 0-106.3-32.6-128.9-88.3-17.1-43.4 3.8-68.3 20.6-68.3 11.4 0 54.3 60.3 54.3 73.1 0 4.9-7.7 8.3-11.7 8.3-16.1 0-22.4-15.5-51.1-51.4-29.7 29.7 20.5 86.9 58.3 86.9 26.1 0 43.1-24.2 38-42 3.7 0 8.3.3 11.7-.6 1.1 27.1 9.1 59.4 41.7 61.7 0-.9 2-7.1 2-7.4 0-17.4-10.6-32.6-10.6-50.3 0-28.3 21.7-55.7 43.7-71.7 8-6 17.7-9.7 27.1-13.1 9.7-3.7 20-8 27.4-15.4-1.1-11.2-5.7-21.1-16.9-21.1-27.7 0-120.6 4-120.6-39.7 0-6.7.1-13.1 17.4-13.1 32.3 0 114.3 8 138.3 29.1 18.1 16.1 24.3 113.2-31 174.7zm-98.6-126c9.7 3.1 19.7 4 29.7 6-7.4 5.4-14 12-20.3 19.1-2.8-8.5-6.2-16.8-9.4-25.1z"/></svg>
|
After Width: | Height: | Size: 1.3 KiB |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/angrycreative.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M640 238.2l-3.2 28.2-34.5 2.3-2 18.1 34.5-2.3-3.2 28.2-34.4 2.2-2.3 20.1 34.4-2.2-3 26.1-64.7 4.1 12.7-113.2L527 365.2l-31.9 2-23.8-117.8 30.3-2 13.6 79.4 31.7-82.4 93.1-6.2zM426.8 371.5l28.3-1.8L468 249.6l-28.4 1.9-12.8 120zM162 388.1l-19.4-36-3.5 37.4-28.2 1.7 2.7-29.1c-11 18-32 34.3-56.9 35.8C23.9 399.9-3 377 .3 339.7c2.6-29.3 26.7-62.8 67.5-65.4 37.7-2.4 47.6 23.2 51.3 28.8l2.8-30.8 38.9-2.5c20.1-1.3 38.7 3.7 42.5 23.7l2.6-26.6 64.8-4.2-2.7 27.9-36.4 2.4-1.7 17.9 36.4-2.3-2.7 27.9-36.4 2.3-1.9 19.9 36.3-2.3-2.1 20.8 55-117.2 23.8-1.6L370.4 369l8.9-85.6-22.3 1.4 2.9-27.9 75-4.9-3 28-24.3 1.6-9.7 91.9-58 3.7-4.3-15.6-39.4 2.5-8 16.3-126.2 7.7zm-44.3-70.2l-26.4 1.7C84.6 307.2 76.9 303 65 303.8c-19 1.2-33.3 17.5-34.6 33.3-1.4 16 7.3 32.5 28.7 31.2 12.8-.8 21.3-8.6 28.9-18.9l27-1.7 2.7-29.8zm56.1-7.7c1.2-12.9-7.6-13.6-26.1-12.4l-2.7 28.5c14.2-.9 27.5-2.1 28.8-16.1zm21.1 70.8l5.8-60c-5 13.5-14.7 21.1-27.9 26.6l22.1 33.4zm135.4-45l-7.9-37.8-15.8 39.3 23.7-1.5zm-170.1-74.6l-4.3-17.5-39.6 2.6-8.1 18.2-31.9 2.1 57-121.9 23.9-1.6 30.7 102 9.9-104.7 27-1.8 37.8 63.6 6.5-66.6 28.5-1.9-4 41.2c7.4-13.5 22.9-44.7 63.6-47.5 40.5-2.8 52.4 29.3 53.4 30.3l3.3-32 39.3-2.7c12.7-.9 27.8.3 36.3 9.7l-4.4-11.9 32.2-2.2 12.9 43.2 23-45.7 31-2.2-43.6 78.4-4.8 44.3-28.4 1.9 4.8-44.3-15.8-43c1 22.3-9.2 40.1-32 49.6l25.2 38.8-36.4 2.4-19.2-36.8-4 38.3-28.4 1.9 3.3-31.5c-6.7 9.3-19.7 35.4-59.6 38-26.2 1.7-45.6-10.3-55.4-39.2l-4 40.3-25 1.6-37.6-63.3-6.3 66.2-56.8 3.7zm276.6-82.1c10.2-.7 17.5-2.1 21.6-4.3 4.5-2.4 7-6.4 7.6-12.1.6-5.3-.6-8.8-3.4-10.4-3.6-2.1-10.6-2.8-22.9-2l-2.9 28.8zM327.7 214c5.6 5.9 12.7 8.5 21.3 7.9 4.7-.3 9.1-1.8 13.3-4.1 5.5-3 10.6-8 15.1-14.3l-34.2 2.3 2.4-23.9 63.1-4.3 1.2-12-31.2 2.1c-4.1-3.7-7.8-6.6-11.1-8.1-4-1.7-8.1-2.8-12.2-2.5-8 .5-15.3 3.6-22 9.2-7.7 6.4-12 14.5-12.9 24.4-1.1 9.6 1.4 17.3 7.2 23.3zm-201.3 8.2l23.8-1.6-8.3-37.6-15.5 39.2z"/></svg>
|
After Width: | Height: | Size: 1.9 KiB |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/angular.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M185.7 268.1h76.2l-38.1-91.6-38.1 91.6zM223.8 32L16 106.4l31.8 275.7 176 97.9 176-97.9 31.8-275.7zM354 373.8h-48.6l-26.2-65.4H168.6l-26.2 65.4H93.7L223.8 81.5z"/></svg>
|
After Width: | Height: | Size: 239 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/app-store-ios.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48zM127 384.5c-5.5 9.6-17.8 12.8-27.3 7.3-9.6-5.5-12.8-17.8-7.3-27.3l14.3-24.7c16.1-4.9 29.3-1.1 39.6 11.4L127 384.5zm138.9-53.9H84c-11 0-20-9-20-20s9-20 20-20h51l65.4-113.2-20.5-35.4c-5.5-9.6-2.2-21.8 7.3-27.3 9.6-5.5 21.8-2.2 27.3 7.3l8.9 15.4 8.9-15.4c5.5-9.6 17.8-12.8 27.3-7.3 9.6 5.5 12.8 17.8 7.3 27.3l-85.8 148.6h62.1c20.2 0 31.5 23.7 22.7 40zm98.1 0h-29l19.6 33.9c5.5 9.6 2.2 21.8-7.3 27.3-9.6 5.5-21.8 2.2-27.3-7.3-32.9-56.9-57.5-99.7-74-128.1-16.7-29-4.8-58 7.1-67.8 13.1 22.7 32.7 56.7 58.9 102h52c11 0 20 9 20 20 0 11.1-9 20-20 20z"/></svg>
|
After Width: | Height: | Size: 726 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/app-store.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M255.9 120.9l9.1-15.7c5.6-9.8 18.1-13.1 27.9-7.5 9.8 5.6 13.1 18.1 7.5 27.9l-87.5 151.5h63.3c20.5 0 32 24.1 23.1 40.8H113.8c-11.3 0-20.4-9.1-20.4-20.4 0-11.3 9.1-20.4 20.4-20.4h52l66.6-115.4-20.8-36.1c-5.6-9.8-2.3-22.2 7.5-27.9 9.8-5.6 22.2-2.3 27.9 7.5l8.9 15.7zm-78.7 218l-19.6 34c-5.6 9.8-18.1 13.1-27.9 7.5-9.8-5.6-13.1-18.1-7.5-27.9l14.6-25.2c16.4-5.1 29.8-1.2 40.4 11.6zm168.9-61.7h53.1c11.3 0 20.4 9.1 20.4 20.4 0 11.3-9.1 20.4-20.4 20.4h-29.5l19.9 34.5c5.6 9.8 2.3 22.2-7.5 27.9-9.8 5.6-22.2 2.3-27.9-7.5-33.5-58.1-58.7-101.6-75.4-130.6-17.1-29.5-4.9-59.1 7.2-69.1 13.4 23 33.4 57.7 60.1 104zM256 8C119 8 8 119 8 256s111 248 248 248 248-111 248-248S393 8 256 8zm216 248c0 118.7-96.1 216-216 216-118.7 0-216-96.1-216-216 0-118.7 96.1-216 216-216 118.7 0 216 96.1 216 216z"/></svg>
|
After Width: | Height: | Size: 858 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/apper.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M42.1 239.1c22.2 0 29 2.8 33.5 14.6h.8v-22.9c0-11.3-4.8-15.4-17.9-15.4-11.3 0-14.4 2.5-15.1 12.8H4.8c.3-13.9 1.5-19.1 5.8-24.4C17.9 195 29.5 192 56.7 192c33 0 47.1 5 53.9 18.9 2 4.3 4 15.6 4 23.7v76.3H76.3l1.3-19.1h-1c-5.3 15.6-13.6 20.4-35.5 20.4-30.3 0-41.1-10.1-41.1-37.3 0-25.2 12.3-35.8 42.1-35.8zm17.1 48.1c13.1 0 16.9-3 16.9-13.4 0-9.1-4.3-11.6-19.6-11.6-13.1 0-17.9 3-17.9 12.1-.1 10.4 3.7 12.9 20.6 12.9zm77.8-94.9h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.2 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3H137v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm57.9-60.7h38.3l-1.5 20.6h.8c9.1-17.1 15.9-20.9 37.5-20.9 14.4 0 24.7 3 31.5 9.1 9.8 8.6 12.8 20.4 12.8 48.1 0 30-3 43.1-12.1 52.9-6.8 7.3-16.4 10.1-33.3 10.1-20.4 0-29.2-5.5-33.8-21.2h-.8v70.3h-39.5v-169zm80.9 60.7c0-27.5-3.3-32.5-20.7-32.5-16.9 0-20.7 5-20.7 28.7 0 28 3.5 33.5 21.2 33.5 16.4 0 20.2-5.6 20.2-29.7zm53.8-3.8c0-25.4 3.3-37.8 12.3-45.8 8.8-8.1 22.2-11.3 45.1-11.3 42.8 0 55.7 12.8 55.7 55.7v11.1h-75.3c-.3 2-.3 4-.3 4.8 0 16.9 4.5 21.9 20.1 21.9 13.9 0 17.9-3 17.9-13.9h37.5v2.3c0 9.8-2.5 18.9-6.8 24.7-7.3 9.8-19.6 13.6-44.3 13.6-27.5 0-41.6-3.3-50.6-12.3-8.5-8.5-11.3-21.3-11.3-50.8zm76.4-11.6c-.3-1.8-.3-3.3-.3-3.8 0-12.3-3.3-14.6-19.6-14.6-14.4 0-17.1 3-18.1 15.1l-.3 3.3h38.3zm55.6-45.3h38.3l-1.8 19.9h.7c6.8-14.9 14.4-20.2 29.7-20.2 10.8 0 19.1 3.3 23.4 9.3 5.3 7.3 6.8 14.4 6.8 34 0 1.5 0 5 .2 9.3h-35c.3-1.8.3-3.3.3-4 0-15.4-2-19.4-10.3-19.4-6.3 0-10.8 3.3-13.1 9.3-1 3-1 4.3-1 12.3v68h-38.3V192.3z"/></svg>
|
After Width: | Height: | Size: 1.7 KiB |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/apple-pay.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M116.9 158.5c-7.5 8.9-19.5 15.9-31.5 14.9-1.5-12 4.4-24.8 11.3-32.6 7.5-9.1 20.6-15.6 31.3-16.1 1.2 12.4-3.7 24.7-11.1 33.8m10.9 17.2c-17.4-1-32.3 9.9-40.5 9.9-8.4 0-21-9.4-34.8-9.1-17.9.3-34.5 10.4-43.6 26.5-18.8 32.3-4.9 80 13.3 106.3 8.9 13 19.5 27.3 33.5 26.8 13.3-.5 18.5-8.6 34.5-8.6 16.1 0 20.8 8.6 34.8 8.4 14.5-.3 23.6-13 32.5-26 10.1-14.8 14.3-29.1 14.5-29.9-.3-.3-28-10.9-28.3-42.9-.3-26.8 21.9-39.5 22.9-40.3-12.5-18.6-32-20.6-38.8-21.1m100.4-36.2v194.9h30.3v-66.6h41.9c38.3 0 65.1-26.3 65.1-64.3s-26.4-64-64.1-64h-73.2zm30.3 25.5h34.9c26.3 0 41.3 14 41.3 38.6s-15 38.8-41.4 38.8h-34.8V165zm162.2 170.9c19 0 36.6-9.6 44.6-24.9h.6v23.4h28v-97c0-28.1-22.5-46.3-57.1-46.3-32.1 0-55.9 18.4-56.8 43.6h27.3c2.3-12 13.4-19.9 28.6-19.9 18.5 0 28.9 8.6 28.9 24.5v10.8l-37.8 2.3c-35.1 2.1-54.1 16.5-54.1 41.5.1 25.2 19.7 42 47.8 42zm8.2-23.1c-16.1 0-26.4-7.8-26.4-19.6 0-12.3 9.9-19.4 28.8-20.5l33.6-2.1v11c0 18.2-15.5 31.2-36 31.2zm102.5 74.6c29.5 0 43.4-11.3 55.5-45.4L640 193h-30.8l-35.6 115.1h-.6L537.4 193h-31.6L557 334.9l-2.8 8.6c-4.6 14.6-12.1 20.3-25.5 20.3-2.4 0-7-.3-8.9-.5v23.4c1.8.4 9.3.7 11.6.7z"/></svg>
|
After Width: | Height: | Size: 1.2 KiB |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/apple.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"><path d="M318.7 268.7c-.2-36.7 16.4-64.4 50-84.8-18.8-26.9-47.2-41.7-84.7-44.6-35.5-2.8-74.3 20.7-88.5 20.7-15 0-49.4-19.7-76.4-19.7C63.3 141.2 4 184.8 4 273.5q0 39.3 14.4 81.2c12.8 36.7 59 126.7 107.2 125.2 25.2-.6 43-17.9 75.8-17.9 31.8 0 48.3 17.9 76.4 17.9 48.6-.7 90.4-82.5 102.6-119.3-65.2-30.7-61.7-90-61.7-91.9zm-56.6-164.2c27.3-32.4 24.8-61.9 24-72.5-24.1 1.4-52 16.4-67.9 34.9-17.5 19.8-27.8 44.3-25.6 71.9 26.1 2 49.9-11.4 69.5-34.3z"/></svg>
|
After Width: | Height: | Size: 515 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/artstation.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M2 377.4l43 74.3A51.35 51.35 0 0 0 90.9 480h285.4l-59.2-102.6zM501.8 350L335.6 59.3A51.38 51.38 0 0 0 290.2 32h-88.4l257.3 447.6 40.7-70.5c1.9-3.2 21-29.7 2-59.1zM275 304.5l-115.5-200L44 304.5z"/></svg>
|
After Width: | Height: | Size: 273 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/asymmetrik.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M517.5 309.2c38.8-40 58.1-80 58.5-116.1.8-65.5-59.4-118.2-169.4-135C277.9 38.4 118.1 73.6 0 140.5 52 114 110.6 92.3 170.7 82.3c74.5-20.5 153-25.4 221.3-14.8C544.5 91.3 588.8 195 490.8 299.2c-10.2 10.8-22 21.1-35 30.6L304.9 103.4 114.7 388.9c-65.6-29.4-76.5-90.2-19.1-151.2 20.8-22.2 48.3-41.9 79.5-58.1 20-12.2 39.7-22.6 62-30.7-65.1 20.3-122.7 52.9-161.6 92.9-27.7 28.6-41.4 57.1-41.7 82.9-.5 35.1 23.4 65.1 68.4 83l-34.5 51.7h101.6l22-34.4c22.2 1 45.3 0 68.6-2.7l-22.8 37.1h135.5L340 406.3c18.6-5.3 36.9-11.5 54.5-18.7l45.9 71.8H542L468.6 349c18.5-12.1 35-25.5 48.9-39.8zm-187.6 80.5l-25-40.6-32.7 53.3c-23.4 3.5-46.7 5.1-69.2 4.4l101.9-159.3 78.7 123c-17.2 7.4-35.3 13.9-53.7 19.2z"/></svg>
|
After Width: | Height: | Size: 764 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/atlassian.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M152.2 236.4c-7.7-8.2-19.7-7.7-24.8 2.8L1.6 490.2c-5 10 2.4 21.7 13.4 21.7h175c5.8.1 11-3.2 13.4-8.4 37.9-77.8 15.1-196.3-51.2-267.1zM244.4 8.1c-122.3 193.4-8.5 348.6 65 495.5 2.5 5.1 7.7 8.4 13.4 8.4H497c11.2 0 18.4-11.8 13.4-21.7 0 0-234.5-470.6-240.4-482.3-5.3-10.6-18.8-10.8-25.6.1z"/></svg>
|
After Width: | Height: | Size: 366 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/audible.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M640 199.9v54l-320 200L0 254v-54l320 200 320-200.1zm-194.5 72l47.1-29.4c-37.2-55.8-100.7-92.6-172.7-92.6-72 0-135.5 36.7-172.6 92.4h.3c2.5-2.3 5.1-4.5 7.7-6.7 89.7-74.4 219.4-58.1 290.2 36.3zm-220.1 18.8c16.9-11.9 36.5-18.7 57.4-18.7 34.4 0 65.2 18.4 86.4 47.6l45.4-28.4c-20.9-29.9-55.6-49.5-94.8-49.5-38.9 0-73.4 19.4-94.4 49zM103.6 161.1c131.8-104.3 318.2-76.4 417.5 62.1l.7 1 48.8-30.4C517.1 112.1 424.8 58.1 319.9 58.1c-103.5 0-196.6 53.5-250.5 135.6 9.9-10.5 22.7-23.5 34.2-32.6zm467 32.7z"/></svg>
|
After Width: | Height: | Size: 574 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/autoprefixer.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M318.4 16l-161 480h77.5l25.4-81.4h119.5L405 496h77.5L318.4 16zm-40.3 341.9l41.2-130.4h1.5l40.9 130.4h-83.6zM640 405l-10-31.4L462.1 358l19.4 56.5L640 405zm-462.1-47L10 373.7 0 405l158.5 9.4 19.4-56.4z"/></svg>
|
After Width: | Height: | Size: 279 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/avianex.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M453.1 32h-312c-38.9 0-76.2 31.2-83.3 69.7L1.2 410.3C-5.9 448.8 19.9 480 58.9 480h312c38.9 0 76.2-31.2 83.3-69.7l56.7-308.5c7-38.6-18.8-69.8-57.8-69.8zm-58.2 347.3l-32 13.5-115.4-110c-14.7 10-29.2 19.5-41.7 27.1l22.1 64.2-17.9 12.7-40.6-61-52.4-48.1 15.7-15.4 58 31.1c9.3-10.5 20.8-22.6 32.8-34.9L203 228.9l-68.8-99.8 18.8-28.9 8.9-4.8L265 207.8l4.9 4.5c19.4-18.8 33.8-32.4 33.8-32.4 7.7-6.5 21.5-2.9 30.7 7.9 9 10.5 10.6 24.7 2.7 31.3-1.8 1.3-15.5 11.4-35.3 25.6l4.5 7.3 94.9 119.4-6.3 7.9z"/></svg>
|
After Width: | Height: | Size: 571 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/aviato.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M107.2 283.5l-19-41.8H36.1l-19 41.8H0l62.2-131.4 62.2 131.4h-17.2zm-45-98.1l-19.6 42.5h39.2l-19.6-42.5zm112.7 102.4l-62.2-131.4h17.1l45.1 96 45.1-96h17l-62.1 131.4zm80.6-4.3V156.4H271v127.1h-15.5zm209.1-115.6v115.6h-17.3V167.9h-41.2v-11.5h99.6v11.5h-41.1zM640 218.8c0 9.2-1.7 17.8-5.1 25.8-3.4 8-8.2 15.1-14.2 21.1-6 6-13.1 10.8-21.1 14.2-8 3.4-16.6 5.1-25.8 5.1s-17.8-1.7-25.8-5.1c-8-3.4-15.1-8.2-21.1-14.2-6-6-10.8-13-14.2-21.1-3.4-8-5.1-16.6-5.1-25.8s1.7-17.8 5.1-25.8c3.4-8 8.2-15.1 14.2-21.1 6-6 13-8.4 21.1-11.9 8-3.4 16.6-5.1 25.8-5.1s17.8 1.7 25.8 5.1c8 3.4 15.1 5.8 21.1 11.9 6 6 10.7 13.1 14.2 21.1 3.4 8 5.1 16.6 5.1 25.8zm-15.5 0c0-7.3-1.3-14-3.9-20.3-2.6-6.3-6.2-11.7-10.8-16.3-4.6-4.6-10-8.2-16.2-10.9-6.2-2.7-12.8-4-19.8-4s-13.6 1.3-19.8 4c-6.2 2.7-11.6 6.3-16.2 10.9-4.6 4.6-8.2 10-10.8 16.3-2.6 6.3-3.9 13.1-3.9 20.3 0 7.3 1.3 14 3.9 20.3 2.6 6.3 6.2 11.7 10.8 16.3 4.6 4.6 10 8.2 16.2 10.9 6.2 2.7 12.8 4 19.8 4s13.6-1.3 19.8-4c6.2-2.7 11.6-6.3 16.2-10.9 4.6-4.6 8.2-10 10.8-16.3 2.6-6.3 3.9-13.1 3.9-20.3zm-94.8 96.7v-6.3l88.9-10-242.9 13.4c.6-2.2 1.1-4.6 1.4-7.2.3-2 .5-4.2.6-6.5l64.8-8.1-64.9 1.9c0-.4-.1-.7-.1-1.1-2.8-17.2-25.5-23.7-25.5-23.7l-1.1-26.3h23.8l19 41.8h17.1L348.6 152l-62.2 131.4h17.1l19-41.8h23.6L345 268s-22.7 6.5-25.5 23.7c-.1.3-.1.7-.1 1.1l-64.9-1.9 64.8 8.1c.1 2.3.3 4.4.6 6.5.3 2.6.8 5 1.4 7.2L78.4 299.2l88.9 10v6.3c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4 0-6.2-4.6-11.3-10.5-12.2v-5.8l80.3 9v5.4c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-4.9l28.4 3.2v23.7h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9V323l38.3 4.3c8.1 11.4 19 13.6 19 13.6l-.1 6.7-5.1.2-.1 12.1h4.1l.1-5h5.2l.1 5h4.1l-.1-12.1-5.1-.2-.1-6.7s10.9-2.1 19-13.6l38.3-4.3v23.2h-5.9V360h5.9v-6.6h5v6.6h5.9v-13.8h-5.9v-23.7l28.4-3.2v4.9c-5.7 1.1-9.9 6.2-9.9 12.1 0 6.8 5.6 10.2 12.4 10.2 6.8 0 12.4-3.4 12.4-10.2 0-6-4.3-11-9.9-12.1v-5.4l80.3-9v5.8c-5.9.9-10.5 6-10.5 12.2 0 6.8 5.6 12.4 12.4 12.4 6.8 0 12.4-5.6 12.4-12.4-.2-6.3-4.7-11.4-10.7-12.3zm-200.8-87.6l19.6-42.5 19.6 42.5h-17.9l-1.7-40.3-1.7 40.3h-17.9z"/></svg>
|
After Width: | Height: | Size: 2.1 KiB |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/aws.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 640 512"><path d="M180.41 203.01c-.72 22.65 10.6 32.68 10.88 39.05a8.164 8.164 0 0 1-4.1 6.27l-12.8 8.96a10.66 10.66 0 0 1-5.63 1.92c-.43-.02-8.19 1.83-20.48-25.61a78.608 78.608 0 0 1-62.61 29.45c-16.28.89-60.4-9.24-58.13-56.21-1.59-38.28 34.06-62.06 70.93-60.05 7.1.02 21.6.37 46.99 6.27v-15.62c2.69-26.46-14.7-46.99-44.81-43.91-2.4.01-19.4-.5-45.84 10.11-7.36 3.38-8.3 2.82-10.75 2.82-7.41 0-4.36-21.48-2.94-24.2 5.21-6.4 35.86-18.35 65.94-18.18a76.857 76.857 0 0 1 55.69 17.28 70.285 70.285 0 0 1 17.67 52.36l-.01 69.29zM93.99 235.4c32.43-.47 46.16-19.97 49.29-30.47 2.46-10.05 2.05-16.41 2.05-27.4-9.67-2.32-23.59-4.85-39.56-4.87-15.15-1.14-42.82 5.63-41.74 32.26-1.24 16.79 11.12 31.4 29.96 30.48zm170.92 23.05c-7.86.72-11.52-4.86-12.68-10.37l-49.8-164.65c-.97-2.78-1.61-5.65-1.92-8.58a4.61 4.61 0 0 1 3.86-5.25c.24-.04-2.13 0 22.25 0 8.78-.88 11.64 6.03 12.55 10.37l35.72 140.83 33.16-140.83c.53-3.22 2.94-11.07 12.8-10.24h17.16c2.17-.18 11.11-.5 12.68 10.37l33.42 142.63L420.98 80.1c.48-2.18 2.72-11.37 12.68-10.37h19.72c.85-.13 6.15-.81 5.25 8.58-.43 1.85 3.41-10.66-52.75 169.9-1.15 5.51-4.82 11.09-12.68 10.37h-18.69c-10.94 1.15-12.51-9.66-12.68-10.75L328.67 110.7l-32.78 136.99c-.16 1.09-1.73 11.9-12.68 10.75h-18.3zm273.48 5.63c-5.88.01-33.92-.3-57.36-12.29a12.802 12.802 0 0 1-7.81-11.91v-10.75c0-8.45 6.2-6.9 8.83-5.89 10.04 4.06 16.48 7.14 28.81 9.6 36.65 7.53 52.77-2.3 56.72-4.48 13.15-7.81 14.19-25.68 5.25-34.95-10.48-8.79-15.48-9.12-53.13-21-4.64-1.29-43.7-13.61-43.79-52.36-.61-28.24 25.05-56.18 69.52-55.95 12.67-.01 46.43 4.13 55.57 15.62 1.35 2.09 2.02 4.55 1.92 7.04v10.11c0 4.44-1.62 6.66-4.87 6.66-7.71-.86-21.39-11.17-49.16-10.75-6.89-.36-39.89.91-38.41 24.97-.43 18.96 26.61 26.07 29.7 26.89 36.46 10.97 48.65 12.79 63.12 29.58 17.14 22.25 7.9 48.3 4.35 55.44-19.08 37.49-68.42 34.44-69.26 34.42zm40.2 104.86c-70.03 51.72-171.69 79.25-258.49 79.25A469.127 469.127 0 0 1 2.83 327.46c-6.53-5.89-.77-13.96 7.17-9.47a637.37 637.37 0 0 0 316.88 84.12 630.22 630.22 0 0 0 241.59-49.55c11.78-5 21.77 7.8 10.12 16.38zm29.19-33.29c-8.96-11.52-59.28-5.38-81.81-2.69-6.79.77-7.94-5.12-1.79-9.47 40.07-28.17 105.88-20.1 113.44-10.63 7.55 9.47-2.05 75.41-39.56 106.91-5.76 4.87-11.27 2.3-8.71-4.1 8.44-21.25 27.39-68.49 18.43-80.02z"/></svg>
|
After Width: | Height: | Size: 2.3 KiB |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/bandcamp.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M256,8C119,8,8,119,8,256S119,504,256,504,504,393,504,256,393,8,256,8Zm48.2,326.1h-181L207.9,178h181Z"/></svg>
|
After Width: | Height: | Size: 180 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/battle-net.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M448.61 225.62c26.87.18 35.57-7.43 38.92-12.37 12.47-16.32-7.06-47.6-52.85-71.33 17.76-33.58 30.11-63.68 36.34-85.3 3.38-11.83 1.09-19 .45-20.25-1.72 10.52-15.85 48.46-48.2 100.05-25-11.22-56.52-20.1-93.77-23.8-8.94-16.94-34.88-63.86-60.48-88.93C252.18 7.14 238.7 1.07 228.18.22h-.05c-13.83-1.55-22.67 5.85-27.4 11-17.2 18.53-24.33 48.87-25 84.07-7.24-12.35-17.17-24.63-28.5-25.93h-.18c-20.66-3.48-38.39 29.22-36 81.29-38.36 1.38-71 5.75-93 11.23-9.9 2.45-16.22 7.27-17.76 9.72 1-.38 22.4-9.22 111.56-9.22 5.22 53 29.75 101.82 26 93.19-9.73 15.4-38.24 62.36-47.31 97.7-5.87 22.88-4.37 37.61.15 47.14 5.57 12.75 16.41 16.72 23.2 18.26 25 5.71 55.38-3.63 86.7-21.14-7.53 12.84-13.9 28.51-9.06 39.34 7.31 19.65 44.49 18.66 88.44-9.45 20.18 32.18 40.07 57.94 55.7 74.12a39.79 39.79 0 0 0 8.75 7.09c5.14 3.21 8.58 3.37 8.58 3.37-8.24-6.75-34-38-62.54-91.78 22.22-16 45.65-38.87 67.47-69.27 122.82 4.6 143.29-24.76 148-31.64 14.67-19.88 3.43-57.44-57.32-93.69zm-77.85 106.22c23.81-37.71 30.34-67.77 29.45-92.33 27.86 17.57 47.18 37.58 49.06 58.83 1.14 12.93-8.1 29.12-78.51 33.5zM216.9 387.69c9.76-6.23 19.53-13.12 29.2-20.49 6.68 13.33 13.6 26.1 20.6 38.19-40.6 21.86-68.84 12.76-49.8-17.7zm215-171.35c-10.29-5.34-21.16-10.34-32.38-15.05a722.459 722.459 0 0 0 22.74-36.9c39.06 24.1 45.9 53.18 9.64 51.95zM279.18 398c-5.51-11.35-11-23.5-16.5-36.44 43.25 1.27 62.42-18.73 63.28-20.41 0 .07-25 15.64-62.53 12.25a718.78 718.78 0 0 0 85.06-84q13.06-15.31 24.93-31.11c-.36-.29-1.54-3-16.51-12-51.7 60.27-102.34 98-132.75 115.92-20.59-11.18-40.84-31.78-55.71-61.49-20-39.92-30-82.39-31.57-116.07 12.3.91 25.27 2.17 38.85 3.88-22.29 36.8-14.39 63-13.47 64.23 0-.07-.95-29.17 20.14-59.57a695.23 695.23 0 0 0 44.67 152.84c.93-.38 1.84.88 18.67-8.25-26.33-74.47-33.76-138.17-34-173.43 20-12.42 48.18-19.8 81.63-17.81 44.57 2.67 86.36 15.25 116.32 30.71q-10.69 15.66-23.33 32.47C365.63 152 339.1 145.84 337.5 146c.11 0 25.9 14.07 41.52 47.22a717.63 717.63 0 0 0-115.34-31.71 646.608 646.608 0 0 0-39.39-6.05c-.07.45-1.81 1.85-2.16 20.33C300 190.28 358.78 215.68 389.36 233c.74 23.55-6.95 51.61-25.41 79.57-24.6 37.31-56.39 67.23-84.77 85.43zm27.4-287c-44.56-1.66-73.58 7.43-94.69 20.67 2-52.3 21.31-76.38 38.21-75.28C267 52.15 305 108.55 306.58 111zm-130.65 3.1c.48 12.11 1.59 24.62 3.21 37.28-14.55-.85-28.74-1.25-42.4-1.26-.08 3.24-.12-51 24.67-49.59h.09c5.76 1.09 10.63 6.88 14.43 13.57zm-28.06 162c20.76 39.7 43.3 60.57 65.25 72.31-46.79 24.76-77.53 20-84.92 4.51-.2-.21-11.13-15.3 19.67-76.81zm210.06 74.8"/></svg>
|
After Width: | Height: | Size: 2.5 KiB |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/behance-square.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M186.5 293c0 19.3-14 25.4-31.2 25.4h-45.1v-52.9h46c18.6.1 30.3 7.8 30.3 27.5zm-7.7-82.3c0-17.7-13.7-21.9-28.9-21.9h-39.6v44.8H153c15.1 0 25.8-6.6 25.8-22.9zm132.3 23.2c-18.3 0-30.5 11.4-31.7 29.7h62.2c-1.7-18.5-11.3-29.7-30.5-29.7zM448 80v352c0 26.5-21.5 48-48 48H48c-26.5 0-48-21.5-48-48V80c0-26.5 21.5-48 48-48h352c26.5 0 48 21.5 48 48zM271.7 185h77.8v-18.9h-77.8V185zm-43 110.3c0-24.1-11.4-44.9-35-51.6 17.2-8.2 26.2-17.7 26.2-37 0-38.2-28.5-47.5-61.4-47.5H68v192h93.1c34.9-.2 67.6-16.9 67.6-55.9zM380 280.5c0-41.1-24.1-75.4-67.6-75.4-42.4 0-71.1 31.8-71.1 73.6 0 43.3 27.3 73 71.1 73 33.2 0 54.7-14.9 65.1-46.8h-33.7c-3.7 11.9-18.6 18.1-30.2 18.1-22.4 0-34.1-13.1-34.1-35.3h100.2c.1-2.3.3-4.8.3-7.2z"/></svg>
|
After Width: | Height: | Size: 783 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/behance.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512"><path d="M232 237.2c31.8-15.2 48.4-38.2 48.4-74 0-70.6-52.6-87.8-113.3-87.8H0v354.4h171.8c64.4 0 124.9-30.9 124.9-102.9 0-44.5-21.1-77.4-64.7-89.7zM77.9 135.9H151c28.1 0 53.4 7.9 53.4 40.5 0 30.1-19.7 42.2-47.5 42.2h-79v-82.7zm83.3 233.7H77.9V272h84.9c34.3 0 56 14.3 56 50.6 0 35.8-25.9 47-57.6 47zm358.5-240.7H376V94h143.7v34.9zM576 305.2c0-75.9-44.4-139.2-124.9-139.2-78.2 0-131.3 58.8-131.3 135.8 0 79.9 50.3 134.7 131.3 134.7 61.3 0 101-27.6 120.1-86.3H509c-6.7 21.9-34.3 33.5-55.7 33.5-41.3 0-63-24.2-63-65.3h185.1c.3-4.2.6-8.7.6-13.2zM390.4 274c2.3-33.7 24.7-54.8 58.5-54.8 35.4 0 53.2 20.8 56.2 54.8H390.4z"/></svg>
|
After Width: | Height: | Size: 684 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/bimobject.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><path d="M416 32H32C14.4 32 0 46.4 0 64v384c0 17.6 14.4 32 32 32h384c17.6 0 32-14.4 32-32V64c0-17.6-14.4-32-32-32zm-64 257.4c0 49.4-11.4 82.6-103.8 82.6h-16.9c-44.1 0-62.4-14.9-70.4-38.8h-.9V368H96V136h64v74.7h1.1c4.6-30.5 39.7-38.8 69.7-38.8h17.3c92.4 0 103.8 33.1 103.8 82.5v35zm-64-28.9v22.9c0 21.7-3.4 33.8-38.4 33.8h-45.3c-28.9 0-44.1-6.5-44.1-35.7v-19c0-29.3 15.2-35.7 44.1-35.7h45.3c35-.2 38.4 12 38.4 33.7z"/></svg>
|
After Width: | Height: | Size: 485 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/bitbucket.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M22.2 32A16 16 0 0 0 6 47.8a26.35 26.35 0 0 0 .2 2.8l67.9 412.1a21.77 21.77 0 0 0 21.3 18.2h325.7a16 16 0 0 0 16-13.4L505 50.7a16 16 0 0 0-13.2-18.3 24.58 24.58 0 0 0-2.8-.2L22.2 32zm285.9 297.8h-104l-28.1-147h157.3l-25.2 147z"/></svg>
|
After Width: | Height: | Size: 306 B |
1
monkey/monkey_island/cc/ui/src/styles/external/fontawesome/svgs/brands/bitcoin.svg
vendored
Normal file
|
@ -0,0 +1 @@
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512"><path d="M504 256c0 136.967-111.033 248-248 248S8 392.967 8 256 119.033 8 256 8s248 111.033 248 248zm-141.651-35.33c4.937-32.999-20.191-50.739-54.55-62.573l11.146-44.702-27.213-6.781-10.851 43.524c-7.154-1.783-14.502-3.464-21.803-5.13l10.929-43.81-27.198-6.781-11.153 44.686c-5.922-1.349-11.735-2.682-17.377-4.084l.031-.14-37.53-9.37-7.239 29.062s20.191 4.627 19.765 4.913c11.022 2.751 13.014 10.044 12.68 15.825l-12.696 50.925c.76.194 1.744.473 2.829.907-.907-.225-1.876-.473-2.876-.713l-17.796 71.338c-1.349 3.348-4.767 8.37-12.471 6.464.271.395-19.78-4.937-19.78-4.937l-13.51 31.147 35.414 8.827c6.588 1.651 13.045 3.379 19.4 5.006l-11.262 45.213 27.182 6.781 11.153-44.733a1038.209 1038.209 0 0 0 21.687 5.627l-11.115 44.523 27.213 6.781 11.262-45.128c46.404 8.781 81.299 5.239 95.986-36.727 11.836-33.79-.589-53.281-25.004-65.991 17.78-4.098 31.174-15.792 34.747-39.949zm-62.177 87.179c-8.41 33.79-65.308 15.523-83.755 10.943l14.944-59.899c18.446 4.603 77.6 13.717 68.811 48.956zm8.417-87.667c-7.673 30.736-55.031 15.12-70.393 11.292l13.548-54.327c15.363 3.828 64.836 10.973 56.845 43.035z"/></svg>
|
After Width: | Height: | Size: 1.1 KiB |