ECL mode
27 | 45 | 48 | 49 |Based on CodeMirror's clike mode. For more information see HPCC Systems web site.
50 |MIME types defined: text/x-ecl
.
├── .gitattributes ├── .gitignore ├── asset ├── __init__.py ├── commands.py ├── discover │ ├── __init__.py │ ├── sys │ │ └── __init__.py │ └── web │ │ └── __init__.py ├── models.py ├── templates │ └── asset │ │ └── sys_asset.html └── views.py ├── auth ├── __init__.py ├── commands.py ├── decorators.py ├── hooks.py ├── models.py ├── templates │ └── auth │ │ ├── login.html │ │ └── user.html └── views.py ├── dashboard ├── __init__.py ├── templates │ └── dashboard │ │ └── index.html └── views.py ├── docs ├── deploy.md ├── readme.md ├── 整体架构.png ├── 设计.vsdx └── 配置图片 │ ├── 新建插件1-ssh弱口令.jpg │ ├── 新建插件2-http_header-check.jpg │ ├── 新建插件3-http_status-check.jpg │ ├── 新建插件4-http_response-check.jpg │ └── 新建配置1-__PASSWORD__.jpg ├── logs └── readme.md ├── readme.md ├── requirements.all.txt ├── requirements.txt ├── run.cmd ├── run.sh ├── schedule ├── __init__.py ├── commands.py ├── dispatcher │ ├── __init__.py │ └── manager.py ├── executor │ ├── __init__.py │ ├── base.py │ ├── manager.py │ ├── sys_asset_discover │ │ ├── __init__.py │ │ └── plugin_nmap.py │ └── sys_vul_check │ │ ├── __init__.py │ │ ├── plugin_http_request.py │ │ ├── plugin_socket_request.py │ │ └── plugin_ssh_weak_password.py ├── models.py ├── processor │ ├── __init__.py │ ├── base.py │ ├── manager.py │ └── vul.py ├── templates │ └── schedule │ │ └── executor.html └── views.py ├── shadow ├── __init__.py ├── commands.py ├── config.py ├── exceptions.py ├── models.py ├── response.py ├── static │ ├── css │ │ ├── animate.css │ │ ├── bootstrap.css │ │ ├── bootstrap.css.map │ │ ├── bootstrap.min.css │ │ ├── patterns │ │ │ ├── congruent_pentagon.png │ │ │ ├── header-profile-skin-1.png │ │ │ ├── header-profile-skin-2.png │ │ │ ├── header-profile-skin-3.png │ │ │ ├── header-profile.png │ │ │ ├── otis_redding.png │ │ │ ├── shattered.png │ │ │ └── triangular.png │ │ ├── plugins │ │ │ ├── awesome-bootstrap-checkbox │ │ │ │ ├── ._awesome-bootstrap-checkbox.css │ │ │ │ └── awesome-bootstrap-checkbox.css │ │ │ ├── blueimp │ │ │ │ ├── css │ │ │ │ │ ├── blueimp-gallery-indicator.css │ │ │ │ │ ├── blueimp-gallery-video.css │ │ │ │ │ ├── blueimp-gallery.css │ │ │ │ │ ├── blueimp-gallery.min.css │ │ │ │ │ └── demo.css │ │ │ │ └── img │ │ │ │ │ ├── error.png │ │ │ │ │ ├── error.svg │ │ │ │ │ ├── loading.gif │ │ │ │ │ ├── play-pause.png │ │ │ │ │ ├── play-pause.svg │ │ │ │ │ ├── video-play.png │ │ │ │ │ └── video-play.svg │ │ │ ├── bootstrap-rtl │ │ │ │ ├── bootstrap-rtl.css │ │ │ │ ├── bootstrap-rtl.css.map │ │ │ │ └── bootstrap-rtl.min.css │ │ │ ├── chartist │ │ │ │ └── chartist.min.css │ │ │ ├── chosen │ │ │ │ ├── chosen-sprite.png │ │ │ │ ├── chosen-sprite@2x.png │ │ │ │ └── chosen.css │ │ │ ├── clockpicker │ │ │ │ ├── ._clockpicker.css │ │ │ │ └── clockpicker.css │ │ │ ├── codemirror │ │ │ │ ├── ambiance.css │ │ │ │ └── codemirror.css │ │ │ ├── colorpicker │ │ │ │ └── bootstrap-colorpicker.min.css │ │ │ ├── cropper │ │ │ │ └── cropper.min.css │ │ │ ├── dataTables │ │ │ │ ├── dataTables.bootstrap.css │ │ │ │ ├── dataTables.responsive.css │ │ │ │ └── dataTables.tableTools.min.css │ │ │ ├── datapicker │ │ │ │ └── datepicker3.css │ │ │ ├── daterangepicker │ │ │ │ ├── ._daterangepicker-bs3.css │ │ │ │ └── daterangepicker-bs3.css │ │ │ ├── dropzone │ │ │ │ ├── basic.css │ │ │ │ └── dropzone.css │ │ │ ├── footable │ │ │ │ ├── ._fonts │ │ │ │ ├── ._footable.core.css │ │ │ │ ├── fonts │ │ │ │ │ ├── ._footable.eot │ │ │ │ │ ├── ._footable.svg │ │ │ │ │ ├── ._footable.ttf │ │ │ │ │ ├── ._footable.woff │ │ │ │ │ ├── footable.eot │ │ │ │ │ ├── footable.svg │ │ │ │ │ ├── footable.ttf │ │ │ │ │ └── footable.woff │ │ │ │ └── footable.core.css │ │ │ ├── fullcalendar │ │ │ │ ├── fullcalendar.css │ │ │ │ └── fullcalendar.print.css │ │ │ ├── iCheck │ │ │ │ ├── custom.css │ │ │ │ ├── green.png │ │ │ │ └── green@2x.png │ │ │ ├── images │ │ │ │ ├── bootstrap-colorpicker │ │ │ │ │ ├── alpha-horizontal.png │ │ │ │ │ ├── alpha.png │ │ │ │ │ ├── hue-horizontal.png │ │ │ │ │ ├── hue.png │ │ │ │ │ └── saturation.png │ │ │ │ ├── sort.png │ │ │ │ ├── sort_asc.png │ │ │ │ ├── sort_desc.png │ │ │ │ ├── sprite-skin-flat.png │ │ │ │ ├── sprite-skin-flat2.png │ │ │ │ ├── sprite-skin-nice.png │ │ │ │ ├── sprite-skin-simple.png │ │ │ │ ├── spritemap.png │ │ │ │ └── spritemap@2x.png │ │ │ ├── ionRangeSlider │ │ │ │ ├── ion.rangeSlider.css │ │ │ │ ├── ion.rangeSlider.skinFlat.css │ │ │ │ ├── ion.rangeSlider.skinNice.css │ │ │ │ └── ion.rangeSlider.skinSimple.css │ │ │ ├── jQueryUI │ │ │ │ ├── images │ │ │ │ │ ├── animated-overlay.gif │ │ │ │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ │ │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ │ │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ │ │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ │ │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ │ │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ │ │ │ ├── ui-icons_222222_256x240.png │ │ │ │ │ ├── ui-icons_2e83ff_256x240.png │ │ │ │ │ ├── ui-icons_454545_256x240.png │ │ │ │ │ ├── ui-icons_888888_256x240.png │ │ │ │ │ └── ui-icons_cd0a0a_256x240.png │ │ │ │ └── jquery-ui-1.10.4.custom.min.css │ │ │ ├── jasny │ │ │ │ └── jasny-bootstrap.min.css │ │ │ ├── jqGrid │ │ │ │ └── ui.jqgrid.css │ │ │ ├── jsTree │ │ │ │ ├── 32px.png │ │ │ │ ├── 39px.png │ │ │ │ ├── 40px.png │ │ │ │ ├── style.css │ │ │ │ ├── style.min.css │ │ │ │ └── throbber.gif │ │ │ ├── morris │ │ │ │ └── morris-0.4.3.min.css │ │ │ ├── nouslider │ │ │ │ └── jquery.nouislider.css │ │ │ ├── social-buttons │ │ │ │ └── social-buttons.css │ │ │ ├── steps │ │ │ │ └── jquery.steps.css │ │ │ ├── summernote │ │ │ │ ├── summernote-bs3.css │ │ │ │ └── summernote.css │ │ │ ├── sweetalert │ │ │ │ ├── ._sweetalert.css │ │ │ │ └── sweetalert.css │ │ │ ├── switchery │ │ │ │ └── switchery.css │ │ │ └── toastr │ │ │ │ └── toastr.min.css │ │ ├── style.css │ │ └── style.min.css │ ├── font-awesome │ │ ├── css │ │ │ ├── font-awesome.css │ │ │ └── font-awesome.min.css │ │ ├── fonts │ │ │ ├── FontAwesome.otf │ │ │ ├── fontawesome-webfont.eot │ │ │ ├── fontawesome-webfont.svg │ │ │ ├── fontawesome-webfont.ttf │ │ │ ├── fontawesome-webfont.woff │ │ │ └── fontawesome-webfont.woff2 │ │ ├── less │ │ │ ├── animated.less │ │ │ ├── bordered-pulled.less │ │ │ ├── core.less │ │ │ ├── fixed-width.less │ │ │ ├── font-awesome.less │ │ │ ├── icons.less │ │ │ ├── larger.less │ │ │ ├── list.less │ │ │ ├── mixins.less │ │ │ ├── path.less │ │ │ ├── rotated-flipped.less │ │ │ ├── stacked.less │ │ │ └── variables.less │ │ └── scss │ │ │ ├── _animated.scss │ │ │ ├── _bordered-pulled.scss │ │ │ ├── _core.scss │ │ │ ├── _fixed-width.scss │ │ │ ├── _icons.scss │ │ │ ├── _larger.scss │ │ │ ├── _list.scss │ │ │ ├── _mixins.scss │ │ │ ├── _path.scss │ │ │ ├── _rotated-flipped.scss │ │ │ ├── _stacked.scss │ │ │ ├── _variables.scss │ │ │ └── font-awesome.scss │ ├── fonts │ │ ├── glyphicons-halflings-regular.eot │ │ ├── glyphicons-halflings-regular.svg │ │ ├── glyphicons-halflings-regular.ttf │ │ ├── glyphicons-halflings-regular.woff │ │ └── glyphicons-halflings-regular.woff2 │ ├── img │ │ ├── ._headphones.jpg │ │ ├── ._meteor_logo.png │ │ ├── a1.jpg │ │ ├── a2.jpg │ │ ├── a3.jpg │ │ ├── a4.jpg │ │ ├── a5.jpg │ │ ├── a6.jpg │ │ ├── a7.jpg │ │ ├── a8.jpg │ │ ├── angular_logo.png │ │ ├── dashbard4_1.jpg │ │ ├── dashbard4_2.jpg │ │ ├── email_1.jpg │ │ ├── email_2.jpg │ │ ├── email_3.jpg │ │ ├── full_height.jpg │ │ ├── gallery │ │ │ ├── 1.jpg │ │ │ ├── 10.jpg │ │ │ ├── 10s.jpg │ │ │ ├── 11.jpg │ │ │ ├── 11s.jpg │ │ │ ├── 12.jpg │ │ │ ├── 12s.jpg │ │ │ ├── 1s.jpg │ │ │ ├── 2.jpg │ │ │ ├── 2s.jpg │ │ │ ├── 3.jpg │ │ │ ├── 3s.jpg │ │ │ ├── 4.jpg │ │ │ ├── 4s.jpg │ │ │ ├── 5.jpg │ │ │ ├── 5s.jpg │ │ │ ├── 6.jpg │ │ │ ├── 6s.jpg │ │ │ ├── 7.jpg │ │ │ ├── 7s.jpg │ │ │ ├── 8.jpg │ │ │ ├── 8s.jpg │ │ │ ├── 9.jpg │ │ │ └── 9s.jpg │ │ ├── headphones.jpg │ │ ├── html_logo.png │ │ ├── landing │ │ │ ├── avatar1.jpg │ │ │ ├── avatar2.jpg │ │ │ ├── avatar3.jpg │ │ │ ├── avatar4.jpg │ │ │ ├── avatar5.jpg │ │ │ ├── avatar6.jpg │ │ │ ├── avatar7.jpg │ │ │ ├── avatar8.jpg │ │ │ ├── avatar9.jpg │ │ │ ├── avatar_all.png │ │ │ ├── dashboard.png │ │ │ ├── header_one.jpg │ │ │ ├── header_two.jpg │ │ │ ├── iphone.jpg │ │ │ ├── laptop.png │ │ │ ├── perspective.png │ │ │ ├── shattered.png │ │ │ └── word_map.png │ │ ├── logo.png │ │ ├── meteor_logo.png │ │ ├── mvc_logo.png │ │ ├── off_canvas.jpg │ │ ├── p1.jpg │ │ ├── p2.jpg │ │ ├── p3.jpg │ │ ├── p4.jpg │ │ ├── p5.jpg │ │ ├── p6.jpg │ │ ├── p7.jpg │ │ ├── p8.jpg │ │ ├── p_big1.jpg │ │ ├── p_big2.jpg │ │ ├── p_big3.jpg │ │ ├── profile.jpg │ │ ├── profile_big.jpg │ │ ├── profile_small.jpg │ │ ├── rails_logo.png │ │ └── zender_logo.png │ ├── js │ │ ├── bootstrap.js │ │ ├── bootstrap.min.js │ │ ├── demo │ │ │ ├── chartjs-demo.js │ │ │ ├── dashboard-demo.js │ │ │ ├── flot-demo.js │ │ │ ├── flot-demo2.js │ │ │ ├── morris-demo.js │ │ │ ├── peity-demo.js │ │ │ ├── rickshaw-demo.js │ │ │ └── sparkline-demo.js │ │ ├── inspinia.js │ │ ├── jquery-2.1.1.js │ │ ├── jquery-ui-1.10.4.min.js │ │ ├── jquery-ui.custom.min.js │ │ ├── plugins │ │ │ ├── blueimp │ │ │ │ └── jquery.blueimp-gallery.min.js │ │ │ ├── chartJs │ │ │ │ └── Chart.min.js │ │ │ ├── chartist │ │ │ │ ├── ._chartist.min.js │ │ │ │ ├── ._chartist.min.js.map │ │ │ │ ├── chartist.min.js │ │ │ │ └── chartist.min.js.map │ │ │ ├── chosen │ │ │ │ └── chosen.jquery.js │ │ │ ├── clockpicker │ │ │ │ ├── ._clockpicker.js │ │ │ │ └── clockpicker.js │ │ │ ├── codemirror │ │ │ │ ├── codemirror.js │ │ │ │ └── mode │ │ │ │ │ ├── apl │ │ │ │ │ ├── apl.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── asterisk │ │ │ │ │ ├── asterisk.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── clike │ │ │ │ │ ├── clike.js │ │ │ │ │ ├── index.html │ │ │ │ │ └── scala.html │ │ │ │ │ ├── clojure │ │ │ │ │ ├── clojure.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── cobol │ │ │ │ │ ├── cobol.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── coffeescript │ │ │ │ │ ├── coffeescript.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── commonlisp │ │ │ │ │ ├── commonlisp.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── css │ │ │ │ │ ├── css.js │ │ │ │ │ ├── index.html │ │ │ │ │ ├── less.html │ │ │ │ │ ├── less_test.js │ │ │ │ │ ├── scss.html │ │ │ │ │ ├── scss_test.js │ │ │ │ │ └── test.js │ │ │ │ │ ├── cypher │ │ │ │ │ ├── cypher.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── d │ │ │ │ │ ├── d.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── diff │ │ │ │ │ ├── diff.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── django │ │ │ │ │ ├── django.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── dtd │ │ │ │ │ ├── dtd.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── dylan │ │ │ │ │ ├── dylan.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── ecl │ │ │ │ │ ├── ecl.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── eiffel │ │ │ │ │ ├── eiffel.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── erlang │ │ │ │ │ ├── erlang.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── fortran │ │ │ │ │ ├── fortran.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── gas │ │ │ │ │ ├── gas.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── gfm │ │ │ │ │ ├── gfm.js │ │ │ │ │ ├── index.html │ │ │ │ │ └── test.js │ │ │ │ │ ├── gherkin │ │ │ │ │ ├── gherkin.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── go │ │ │ │ │ ├── go.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── groovy │ │ │ │ │ ├── groovy.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── haml │ │ │ │ │ ├── haml.js │ │ │ │ │ ├── index.html │ │ │ │ │ └── test.js │ │ │ │ │ ├── haskell │ │ │ │ │ ├── haskell.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── haxe │ │ │ │ │ ├── haxe.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── htmlembedded │ │ │ │ │ ├── htmlembedded.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── htmlmixed │ │ │ │ │ ├── htmlmixed.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── http │ │ │ │ │ ├── http.js │ │ │ │ │ └── index.html │ │ │ │ │ ├── index.html │ │ │ │ │ ├── jade │ │ │ │ │ ├── index.html │ │ │ │ │ └── jade.js │ │ │ │ │ ├── javascript │ │ │ │ │ ├── index.html │ │ │ │ │ ├── javascript.js │ │ │ │ │ ├── json-ld.html │ │ │ │ │ ├── test.js │ │ │ │ │ └── typescript.html │ │ │ │ │ ├── jinja2 │ │ │ │ │ ├── index.html │ │ │ │ │ └── jinja2.js │ │ │ │ │ ├── julia │ │ │ │ │ ├── index.html │ │ │ │ │ └── julia.js │ │ │ │ │ ├── kotlin │ │ │ │ │ ├── index.html │ │ │ │ │ └── kotlin.js │ │ │ │ │ ├── livescript │ │ │ │ │ ├── index.html │ │ │ │ │ └── livescript.js │ │ │ │ │ ├── lua │ │ │ │ │ ├── index.html │ │ │ │ │ └── lua.js │ │ │ │ │ ├── markdown │ │ │ │ │ ├── index.html │ │ │ │ │ ├── markdown.js │ │ │ │ │ └── test.js │ │ │ │ │ ├── meta.js │ │ │ │ │ ├── mirc │ │ │ │ │ ├── index.html │ │ │ │ │ └── mirc.js │ │ │ │ │ ├── mllike │ │ │ │ │ ├── index.html │ │ │ │ │ └── mllike.js │ │ │ │ │ ├── modelica │ │ │ │ │ ├── index.html │ │ │ │ │ └── modelica.js │ │ │ │ │ ├── nginx │ │ │ │ │ ├── index.html │ │ │ │ │ └── nginx.js │ │ │ │ │ ├── ntriples │ │ │ │ │ ├── index.html │ │ │ │ │ └── ntriples.js │ │ │ │ │ ├── octave │ │ │ │ │ ├── index.html │ │ │ │ │ └── octave.js │ │ │ │ │ ├── pascal │ │ │ │ │ ├── index.html │ │ │ │ │ └── pascal.js │ │ │ │ │ ├── pegjs │ │ │ │ │ ├── index.html │ │ │ │ │ └── pegjs.js │ │ │ │ │ ├── perl │ │ │ │ │ ├── index.html │ │ │ │ │ └── perl.js │ │ │ │ │ ├── php │ │ │ │ │ ├── index.html │ │ │ │ │ ├── php.js │ │ │ │ │ └── test.js │ │ │ │ │ ├── pig │ │ │ │ │ ├── index.html │ │ │ │ │ └── pig.js │ │ │ │ │ ├── properties │ │ │ │ │ ├── index.html │ │ │ │ │ └── properties.js │ │ │ │ │ ├── puppet │ │ │ │ │ ├── index.html │ │ │ │ │ └── puppet.js │ │ │ │ │ ├── python │ │ │ │ │ ├── index.html │ │ │ │ │ └── python.js │ │ │ │ │ ├── q │ │ │ │ │ ├── index.html │ │ │ │ │ └── q.js │ │ │ │ │ ├── r │ │ │ │ │ ├── index.html │ │ │ │ │ └── r.js │ │ │ │ │ ├── rpm │ │ │ │ │ ├── changes │ │ │ │ │ │ └── index.html │ │ │ │ │ ├── index.html │ │ │ │ │ └── rpm.js │ │ │ │ │ ├── rst │ │ │ │ │ ├── index.html │ │ │ │ │ └── rst.js │ │ │ │ │ ├── ruby │ │ │ │ │ ├── index.html │ │ │ │ │ ├── ruby.js │ │ │ │ │ └── test.js │ │ │ │ │ ├── rust │ │ │ │ │ ├── index.html │ │ │ │ │ └── rust.js │ │ │ │ │ ├── sass │ │ │ │ │ ├── index.html │ │ │ │ │ └── sass.js │ │ │ │ │ ├── scheme │ │ │ │ │ ├── index.html │ │ │ │ │ └── scheme.js │ │ │ │ │ ├── shell │ │ │ │ │ ├── index.html │ │ │ │ │ ├── shell.js │ │ │ │ │ └── test.js │ │ │ │ │ ├── sieve │ │ │ │ │ ├── index.html │ │ │ │ │ └── sieve.js │ │ │ │ │ ├── slim │ │ │ │ │ ├── index.html │ │ │ │ │ ├── slim.js │ │ │ │ │ └── test.js │ │ │ │ │ ├── smalltalk │ │ │ │ │ ├── index.html │ │ │ │ │ └── smalltalk.js │ │ │ │ │ ├── smarty │ │ │ │ │ ├── index.html │ │ │ │ │ └── smarty.js │ │ │ │ │ ├── smartymixed │ │ │ │ │ ├── index.html │ │ │ │ │ └── smartymixed.js │ │ │ │ │ ├── solr │ │ │ │ │ ├── index.html │ │ │ │ │ └── solr.js │ │ │ │ │ ├── sparql │ │ │ │ │ ├── index.html │ │ │ │ │ └── sparql.js │ │ │ │ │ ├── sql │ │ │ │ │ ├── index.html │ │ │ │ │ └── sql.js │ │ │ │ │ ├── stex │ │ │ │ │ ├── index.html │ │ │ │ │ ├── stex.js │ │ │ │ │ └── test.js │ │ │ │ │ ├── tcl │ │ │ │ │ ├── index.html │ │ │ │ │ └── tcl.js │ │ │ │ │ ├── textile │ │ │ │ │ ├── index.html │ │ │ │ │ ├── test.js │ │ │ │ │ └── textile.js │ │ │ │ │ ├── tiddlywiki │ │ │ │ │ ├── index.html │ │ │ │ │ ├── tiddlywiki.css │ │ │ │ │ └── tiddlywiki.js │ │ │ │ │ ├── tiki │ │ │ │ │ ├── index.html │ │ │ │ │ ├── tiki.css │ │ │ │ │ └── tiki.js │ │ │ │ │ ├── toml │ │ │ │ │ ├── index.html │ │ │ │ │ └── toml.js │ │ │ │ │ ├── tornado │ │ │ │ │ ├── index.html │ │ │ │ │ └── tornado.js │ │ │ │ │ ├── turtle │ │ │ │ │ ├── index.html │ │ │ │ │ └── turtle.js │ │ │ │ │ ├── vb │ │ │ │ │ ├── index.html │ │ │ │ │ └── vb.js │ │ │ │ │ ├── vbscript │ │ │ │ │ ├── index.html │ │ │ │ │ └── vbscript.js │ │ │ │ │ ├── velocity │ │ │ │ │ ├── index.html │ │ │ │ │ └── velocity.js │ │ │ │ │ ├── verilog │ │ │ │ │ ├── index.html │ │ │ │ │ ├── test.js │ │ │ │ │ └── verilog.js │ │ │ │ │ ├── xml │ │ │ │ │ ├── index.html │ │ │ │ │ ├── test.js │ │ │ │ │ └── xml.js │ │ │ │ │ ├── xquery │ │ │ │ │ ├── index.html │ │ │ │ │ ├── test.js │ │ │ │ │ └── xquery.js │ │ │ │ │ ├── yaml │ │ │ │ │ ├── index.html │ │ │ │ │ └── yaml.js │ │ │ │ │ └── z80 │ │ │ │ │ ├── index.html │ │ │ │ │ └── z80.js │ │ │ ├── colorpicker │ │ │ │ └── bootstrap-colorpicker.min.js │ │ │ ├── cropper │ │ │ │ └── cropper.min.js │ │ │ ├── dataTables │ │ │ │ ├── dataTables.bootstrap.js │ │ │ │ ├── dataTables.responsive.js │ │ │ │ ├── dataTables.tableTools.min.js │ │ │ │ ├── jquery.dataTables.js │ │ │ │ └── swf │ │ │ │ │ ├── copy_csv_xls.swf │ │ │ │ │ └── copy_csv_xls_pdf.swf │ │ │ ├── datapicker │ │ │ │ └── bootstrap-datepicker.js │ │ │ ├── daterangepicker │ │ │ │ ├── ._daterangepicker.js │ │ │ │ └── daterangepicker.js │ │ │ ├── diff_match_patch │ │ │ │ ├── COPYING │ │ │ │ ├── README.txt │ │ │ │ └── javascript │ │ │ │ │ └── diff_match_patch.js │ │ │ ├── dropzone │ │ │ │ └── dropzone.js │ │ │ ├── easypiechart │ │ │ │ ├── easypiechart.js │ │ │ │ └── jquery.easypiechart.js │ │ │ ├── flot │ │ │ │ ├── curvedLines.js │ │ │ │ ├── excanvas.min.js │ │ │ │ ├── jquery.flot.js │ │ │ │ ├── jquery.flot.pie.js │ │ │ │ ├── jquery.flot.resize.js │ │ │ │ ├── jquery.flot.spline.js │ │ │ │ ├── jquery.flot.symbol.js │ │ │ │ ├── jquery.flot.time.js │ │ │ │ └── jquery.flot.tooltip.min.js │ │ │ ├── footable │ │ │ │ ├── ._footable.all.min.js │ │ │ │ └── footable.all.min.js │ │ │ ├── fullcalendar │ │ │ │ ├── ._moment.min.js │ │ │ │ ├── fullcalendar.min.js │ │ │ │ └── moment.min.js │ │ │ ├── gritter │ │ │ │ ├── images │ │ │ │ │ ├── gritter-light.png │ │ │ │ │ ├── gritter-long.png │ │ │ │ │ ├── gritter.png │ │ │ │ │ └── ie-spacer.gif │ │ │ │ ├── jquery.gritter.css │ │ │ │ └── jquery.gritter.min.js │ │ │ ├── iCheck │ │ │ │ └── icheck.min.js │ │ │ ├── idle-timer │ │ │ │ └── idle-timer.min.js │ │ │ ├── ionRangeSlider │ │ │ │ └── ion.rangeSlider.min.js │ │ │ ├── jasny │ │ │ │ └── jasny-bootstrap.min.js │ │ │ ├── jeditable │ │ │ │ └── jquery.jeditable.js │ │ │ ├── jqGrid │ │ │ │ ├── i18n │ │ │ │ │ ├── grid.locale-ar.js │ │ │ │ │ ├── grid.locale-bg.js │ │ │ │ │ ├── grid.locale-bg1251.js │ │ │ │ │ ├── grid.locale-cat.js │ │ │ │ │ ├── grid.locale-cn.js │ │ │ │ │ ├── grid.locale-cs.js │ │ │ │ │ ├── grid.locale-da.js │ │ │ │ │ ├── grid.locale-de.js │ │ │ │ │ ├── grid.locale-dk.js │ │ │ │ │ ├── grid.locale-el.js │ │ │ │ │ ├── grid.locale-en.js │ │ │ │ │ ├── grid.locale-es.js │ │ │ │ │ ├── grid.locale-fa.js │ │ │ │ │ ├── grid.locale-fi.js │ │ │ │ │ ├── grid.locale-fr.js │ │ │ │ │ ├── grid.locale-gl.js │ │ │ │ │ ├── grid.locale-he.js │ │ │ │ │ ├── grid.locale-hr.js │ │ │ │ │ ├── grid.locale-hr1250.js │ │ │ │ │ ├── grid.locale-hu.js │ │ │ │ │ ├── grid.locale-id.js │ │ │ │ │ ├── grid.locale-is.js │ │ │ │ │ ├── grid.locale-it.js │ │ │ │ │ ├── grid.locale-ja.js │ │ │ │ │ ├── grid.locale-kr.js │ │ │ │ │ ├── grid.locale-lt.js │ │ │ │ │ ├── grid.locale-mne.js │ │ │ │ │ ├── grid.locale-nl.js │ │ │ │ │ ├── grid.locale-no.js │ │ │ │ │ ├── grid.locale-pl.js │ │ │ │ │ ├── grid.locale-pt-br.js │ │ │ │ │ ├── grid.locale-pt.js │ │ │ │ │ ├── grid.locale-ro.js │ │ │ │ │ ├── grid.locale-ru.js │ │ │ │ │ ├── grid.locale-sk.js │ │ │ │ │ ├── grid.locale-sr-latin.js │ │ │ │ │ ├── grid.locale-sr.js │ │ │ │ │ ├── grid.locale-sv.js │ │ │ │ │ ├── grid.locale-th.js │ │ │ │ │ ├── grid.locale-tr.js │ │ │ │ │ ├── grid.locale-tw.js │ │ │ │ │ ├── grid.locale-ua.js │ │ │ │ │ └── grid.locale-vi.js │ │ │ │ └── jquery.jqGrid.min.js │ │ │ ├── jquery-ui │ │ │ │ ├── i18n │ │ │ │ │ ├── jquery-ui-i18n.min.js │ │ │ │ │ ├── jquery.ui.datepicker-af.min.js │ │ │ │ │ ├── jquery.ui.datepicker-ar-DZ.min.js │ │ │ │ │ ├── jquery.ui.datepicker-ar.min.js │ │ │ │ │ ├── jquery.ui.datepicker-az.min.js │ │ │ │ │ ├── jquery.ui.datepicker-be.min.js │ │ │ │ │ ├── jquery.ui.datepicker-bg.min.js │ │ │ │ │ ├── jquery.ui.datepicker-bs.min.js │ │ │ │ │ ├── jquery.ui.datepicker-ca.min.js │ │ │ │ │ ├── jquery.ui.datepicker-cs.min.js │ │ │ │ │ ├── jquery.ui.datepicker-cy-GB.min.js │ │ │ │ │ ├── jquery.ui.datepicker-da.min.js │ │ │ │ │ ├── jquery.ui.datepicker-de.min.js │ │ │ │ │ ├── jquery.ui.datepicker-el.min.js │ │ │ │ │ ├── jquery.ui.datepicker-en-AU.min.js │ │ │ │ │ ├── jquery.ui.datepicker-en-GB.min.js │ │ │ │ │ ├── jquery.ui.datepicker-en-NZ.min.js │ │ │ │ │ ├── jquery.ui.datepicker-eo.min.js │ │ │ │ │ ├── jquery.ui.datepicker-es.min.js │ │ │ │ │ ├── jquery.ui.datepicker-et.min.js │ │ │ │ │ ├── jquery.ui.datepicker-eu.min.js │ │ │ │ │ ├── jquery.ui.datepicker-fa.min.js │ │ │ │ │ ├── jquery.ui.datepicker-fi.min.js │ │ │ │ │ ├── jquery.ui.datepicker-fo.min.js │ │ │ │ │ ├── jquery.ui.datepicker-fr-CA.min.js │ │ │ │ │ ├── jquery.ui.datepicker-fr-CH.min.js │ │ │ │ │ ├── jquery.ui.datepicker-fr.min.js │ │ │ │ │ ├── jquery.ui.datepicker-gl.min.js │ │ │ │ │ ├── jquery.ui.datepicker-he.min.js │ │ │ │ │ ├── jquery.ui.datepicker-hi.min.js │ │ │ │ │ ├── jquery.ui.datepicker-hr.min.js │ │ │ │ │ ├── jquery.ui.datepicker-hu.min.js │ │ │ │ │ ├── jquery.ui.datepicker-hy.min.js │ │ │ │ │ ├── jquery.ui.datepicker-id.min.js │ │ │ │ │ ├── jquery.ui.datepicker-is.min.js │ │ │ │ │ ├── jquery.ui.datepicker-it.min.js │ │ │ │ │ ├── jquery.ui.datepicker-ja.min.js │ │ │ │ │ ├── jquery.ui.datepicker-ka.min.js │ │ │ │ │ ├── jquery.ui.datepicker-kk.min.js │ │ │ │ │ ├── jquery.ui.datepicker-km.min.js │ │ │ │ │ ├── jquery.ui.datepicker-ko.min.js │ │ │ │ │ ├── jquery.ui.datepicker-ky.min.js │ │ │ │ │ ├── jquery.ui.datepicker-lb.min.js │ │ │ │ │ ├── jquery.ui.datepicker-lt.min.js │ │ │ │ │ ├── jquery.ui.datepicker-lv.min.js │ │ │ │ │ ├── jquery.ui.datepicker-mk.min.js │ │ │ │ │ ├── jquery.ui.datepicker-ml.min.js │ │ │ │ │ ├── jquery.ui.datepicker-ms.min.js │ │ │ │ │ ├── jquery.ui.datepicker-nb.min.js │ │ │ │ │ ├── jquery.ui.datepicker-nl-BE.min.js │ │ │ │ │ ├── jquery.ui.datepicker-nl.min.js │ │ │ │ │ ├── jquery.ui.datepicker-nn.min.js │ │ │ │ │ ├── jquery.ui.datepicker-no.min.js │ │ │ │ │ ├── jquery.ui.datepicker-pl.min.js │ │ │ │ │ ├── jquery.ui.datepicker-pt-BR.min.js │ │ │ │ │ ├── jquery.ui.datepicker-pt.min.js │ │ │ │ │ ├── jquery.ui.datepicker-rm.min.js │ │ │ │ │ ├── jquery.ui.datepicker-ro.min.js │ │ │ │ │ ├── jquery.ui.datepicker-ru.min.js │ │ │ │ │ ├── jquery.ui.datepicker-sk.min.js │ │ │ │ │ ├── jquery.ui.datepicker-sl.min.js │ │ │ │ │ ├── jquery.ui.datepicker-sq.min.js │ │ │ │ │ ├── jquery.ui.datepicker-sr-SR.min.js │ │ │ │ │ ├── jquery.ui.datepicker-sr.min.js │ │ │ │ │ ├── jquery.ui.datepicker-sv.min.js │ │ │ │ │ ├── jquery.ui.datepicker-ta.min.js │ │ │ │ │ ├── jquery.ui.datepicker-th.min.js │ │ │ │ │ ├── jquery.ui.datepicker-tj.min.js │ │ │ │ │ ├── jquery.ui.datepicker-tr.min.js │ │ │ │ │ ├── jquery.ui.datepicker-uk.min.js │ │ │ │ │ ├── jquery.ui.datepicker-vi.min.js │ │ │ │ │ ├── jquery.ui.datepicker-zh-CN.min.js │ │ │ │ │ ├── jquery.ui.datepicker-zh-HK.min.js │ │ │ │ │ └── jquery.ui.datepicker-zh-TW.min.js │ │ │ │ ├── images │ │ │ │ │ ├── animated-overlay.gif │ │ │ │ │ ├── ui-bg_flat_0_aaaaaa_40x100.png │ │ │ │ │ ├── ui-bg_flat_75_ffffff_40x100.png │ │ │ │ │ ├── ui-bg_glass_55_fbf9ee_1x400.png │ │ │ │ │ ├── ui-bg_glass_65_ffffff_1x400.png │ │ │ │ │ ├── ui-bg_glass_75_dadada_1x400.png │ │ │ │ │ ├── ui-bg_glass_75_e6e6e6_1x400.png │ │ │ │ │ ├── ui-bg_glass_95_fef1ec_1x400.png │ │ │ │ │ ├── ui-bg_highlight-soft_75_cccccc_1x100.png │ │ │ │ │ ├── ui-icons_222222_256x240.png │ │ │ │ │ ├── ui-icons_2e83ff_256x240.png │ │ │ │ │ ├── ui-icons_454545_256x240.png │ │ │ │ │ ├── ui-icons_888888_256x240.png │ │ │ │ │ └── ui-icons_cd0a0a_256x240.png │ │ │ │ ├── jquery-ui.css │ │ │ │ ├── jquery-ui.js │ │ │ │ ├── jquery-ui.min.css │ │ │ │ └── jquery-ui.min.js │ │ │ ├── jsKnob │ │ │ │ └── jquery.knob.js │ │ │ ├── jsTree │ │ │ │ └── jstree.min.js │ │ │ ├── justified-gallery │ │ │ │ ├── README.md │ │ │ │ ├── jquery.justifiedgallery.css │ │ │ │ ├── jquery.justifiedgallery.js │ │ │ │ ├── jquery.justifiedgallery.min.css │ │ │ │ ├── jquery.justifiedgallery.min.js │ │ │ │ └── loading.gif │ │ │ ├── jvectormap │ │ │ │ ├── ._jquery-jvectormap-2.0.2.min.js │ │ │ │ ├── jquery-jvectormap-2.0.2.css │ │ │ │ ├── jquery-jvectormap-2.0.2.min.js │ │ │ │ └── jquery-jvectormap-world-mill-en.js │ │ │ ├── metisMenu │ │ │ │ └── jquery.metisMenu.js │ │ │ ├── morris │ │ │ │ ├── morris.js │ │ │ │ └── raphael-2.1.0.min.js │ │ │ ├── nestable │ │ │ │ └── jquery.nestable.js │ │ │ ├── nouslider │ │ │ │ └── jquery.nouislider.min.js │ │ │ ├── pace │ │ │ │ └── pace.min.js │ │ │ ├── peity │ │ │ │ └── jquery.peity.min.js │ │ │ ├── preetyTextDiff │ │ │ │ └── jquery.pretty-text-diff.min.js │ │ │ ├── rickshaw │ │ │ │ ├── rickshaw.min.js │ │ │ │ └── vendor │ │ │ │ │ └── d3.v3.js │ │ │ ├── slimscroll │ │ │ │ ├── jquery.slimscroll.js │ │ │ │ └── jquery.slimscroll.min.js │ │ │ ├── sparkline │ │ │ │ └── jquery.sparkline.min.js │ │ │ ├── staps │ │ │ │ └── jquery.steps.min.js │ │ │ ├── summernote │ │ │ │ └── summernote.min.js │ │ │ ├── sweetalert │ │ │ │ ├── ._sweetalert.min.js │ │ │ │ └── sweetalert.min.js │ │ │ ├── switchery │ │ │ │ └── switchery.js │ │ │ ├── tinycon │ │ │ │ └── tinycon.min.js │ │ │ ├── toastr │ │ │ │ └── toastr.min.js │ │ │ ├── validate │ │ │ │ └── jquery.validate.min.js │ │ │ ├── video │ │ │ │ └── responsible-video.js │ │ │ └── wow │ │ │ │ └── wow.min.js │ │ ├── requests.js │ │ └── validators.js │ ├── json │ │ └── datatable.zh_CN.json │ └── vendor │ │ └── echarts │ │ └── echarts.min.js ├── templates │ ├── base.html │ └── layout.html ├── validators.py └── views.py ├── utils ├── __init__.py ├── iputils.py ├── rediscli.py └── timezone.py └── vul ├── __init__.py ├── commands.py ├── models.py ├── templates └── vul │ ├── plugin_config.html │ ├── sys_vul.html │ ├── sys_vul_job.html │ └── sys_vul_plugin.html └── views.py /.gitattributes: -------------------------------------------------------------------------------- 1 | *.js linguist-language=Python 2 | *.css linguist-language=Python 3 | *.html linguist-language=Python -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | venv/* 2 | *.pyc -------------------------------------------------------------------------------- /asset/__init__.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | from flask import Blueprint 4 | 5 | 6 | bp = Blueprint('asset', __name__, url_prefix='/asset', static_folder='static', template_folder='templates') 7 | 8 | from . import views 9 | from . import models 10 | from . import commands -------------------------------------------------------------------------------- /asset/commands.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/asset/commands.py -------------------------------------------------------------------------------- /asset/discover/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/asset/discover/__init__.py -------------------------------------------------------------------------------- /asset/discover/sys/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/asset/discover/sys/__init__.py -------------------------------------------------------------------------------- /asset/discover/web/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/asset/discover/web/__init__.py -------------------------------------------------------------------------------- /asset/views.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | from flask import render_template 4 | from auth.decorators import login_required 5 | 6 | from shadow.response import json 7 | 8 | from . import bp 9 | from .models import SysAsset 10 | 11 | @bp.route('/') 12 | @bp.route('/sys_asset/') 13 | @login_required 14 | def sys_asset(): 15 | return render_template('asset/sys_asset.html', assets=SysAsset.all()) 16 | 17 | 18 | @bp.route('/sys_asset/list/') 19 | @login_required 20 | def list_sys_asset(): 21 | assets=[asset.as_dict() for asset in SysAsset.all()] 22 | return json(assets) 23 | 24 | 25 | @bp.route('/sys_asset/delete/') 26 | @login_required 27 | def delete_sys_asset(): 28 | SysAsset.delete_by_key(request.form.get('id', 0)) 29 | return json() -------------------------------------------------------------------------------- /auth/__init__.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | from flask import Blueprint 4 | 5 | bp = Blueprint('auth', __name__, url_prefix='/auth', static_folder='static', template_folder='templates') 6 | 7 | from . import views 8 | from . import models 9 | 10 | from . import hooks 11 | 12 | from . import commands -------------------------------------------------------------------------------- /auth/commands.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | import traceback 4 | 5 | import click 6 | 7 | from flask.cli import AppGroup 8 | 9 | from shadow import app 10 | 11 | 12 | from .models import User 13 | 14 | cli = AppGroup('auth') 15 | 16 | 17 | @cli.command('create-user') 18 | @click.option('--name', type=str, prompt=True, help='name') 19 | @click.option('--email', type=str, prompt=True, help='email') 20 | @click.option('--is_super', type=bool, is_flag=True, help='is super man') 21 | @click.option('--password', type=str, prompt=True, hide_input=True, confirmation_prompt=True, help="password") 22 | def create_user(name, email, is_super, password): 23 | try: 24 | user, has_error, errors = User.create(name=name, email=email, is_super=is_super, password=password) 25 | if has_error: 26 | click.echo('fail create user:') 27 | for key, error in errors.items(): 28 | click.echo(error.msg) 29 | else: 30 | click.echo("success create user") 31 | except BaseException as e: 32 | click.echo("fail create user, reason:{0}".format(e)) 33 | app.logger.exception(e) 34 | app.logger.error(traceback.format_exc()) 35 | 36 | app.cli.add_command(cli) 37 | -------------------------------------------------------------------------------- /auth/decorators.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | from functools import wraps 4 | 5 | from flask import request, g, redirect, url_for 6 | 7 | from shadow import response 8 | 9 | def login_required(func): 10 | 11 | @wraps(func) 12 | def wrapper(*args, **kwargs): 13 | if g.user is None: 14 | return response.json(response.STATUS_UNAUTHENTICATE) if request.is_xhr else redirect(url_for('auth.login', next=request.path)) 15 | 16 | rt = func(*args, **kwargs) 17 | return rt 18 | 19 | return wrapper 20 | 21 | -------------------------------------------------------------------------------- /auth/hooks.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | from flask import session, g 4 | 5 | from . import bp 6 | 7 | from .models import User 8 | 9 | 10 | @bp.before_app_request 11 | def load_user(): 12 | g.user = None 13 | if session.get('user'): 14 | g.user = User.get_by_key(session.get('user')) -------------------------------------------------------------------------------- /auth/views.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | from flask import session, request, render_template, url_for, redirect, g 4 | 5 | from shadow import response 6 | 7 | from . import bp 8 | 9 | from .decorators import login_required 10 | 11 | from .models import Role, User 12 | 13 | 14 | @bp.route('/', methods=['GET', 'POST']) 15 | @bp.route('/login/', methods=['POST']) 16 | def login(next=None): 17 | if g.user: 18 | return response.json(result={'next' : request.args.get('next') or '/'}) if request.is_xhr else redirect('/') 19 | 20 | name, password, errors = '', '', {} 21 | if request.method == 'POST': 22 | name = request.form.get('name', '') 23 | password = request.form.get('password', '') 24 | user = User.authenticate(name, password) 25 | if user: 26 | session['user'] = user.id 27 | return response.json(result={'next' : request.args.get('next') or '/'}) 28 | else: 29 | errors['user'] = '用户名或密码错误' 30 | return response.json(errors=errors) 31 | return render_template('auth/login.html', name=name, password=password, errors=errors) 32 | 33 | 34 | @bp.route('/logout/') 35 | def logout(): 36 | session.clear() 37 | return redirect(url_for('auth.login')) 38 | 39 | 40 | @bp.route('/users/') 41 | @login_required 42 | def users(): 43 | return render_template('auth/user.html', users=User.all()) 44 | -------------------------------------------------------------------------------- /dashboard/__init__.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | from flask import Blueprint 4 | 5 | bp = Blueprint('dashboard', __name__, url_prefix='/dashboard', static_folder='static', template_folder='templates') 6 | 7 | from . import views -------------------------------------------------------------------------------- /dashboard/views.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | from flask import render_template 4 | 5 | from shadow.response import json 6 | 7 | from . import bp 8 | 9 | from auth.decorators import login_required 10 | 11 | from asset.models import SysAsset, Application 12 | from vul.models import AssetSysVul 13 | from schedule.models import Executor 14 | 15 | 16 | 17 | @bp.route('/') 18 | @login_required 19 | def index(): 20 | #最新发现资产数量/总资产数量/存在漏洞的主机数量 21 | #最新发现端口数量/总端口数量 22 | #最新发现漏洞数量/总漏洞数量 23 | #端口统计 24 | #漏洞发现主机统计 25 | #主机发现漏洞统计 26 | 27 | stats = {} 28 | stats['asset'] = SysAsset.stats() 29 | stats['app'] = Application.stats() 30 | stats['vul'] = AssetSysVul.stats() 31 | stats['executor'] = Executor.stats() 32 | stats['stats_port'] = Application.stats_port() 33 | stats['stats_host_vul'] = AssetSysVul.stats_host_vul() 34 | stats['stats_vul_host'] = AssetSysVul.stats_vul_host() 35 | return render_template('dashboard/index.html', stats=stats) 36 | 37 | 38 | 39 | @bp.route('/stats/') 40 | @login_required 41 | def stats(): 42 | #最新发现资产数量/总资产数量/存在漏洞的主机数量 43 | #最新发现端口数量/总端口数量 44 | #最新发现漏洞数量/总漏洞数量 45 | #端口统计 46 | #漏洞发现主机统计 47 | #主机发现漏洞统计 48 | stats = {} 49 | stats['asset'] = SysAsset.stats() 50 | stats['app'] = Application.stats() 51 | stats['vul'] = AssetSysVul.stats() 52 | stats['executor'] = Executor.stats() 53 | stats['stats_port'] = Application.stats_port() 54 | stats['stats_host_vul'] = AssetSysVul.stats_host_vul() 55 | stats['stats_vul_host'] = AssetSysVul.stats_vul_host() 56 | return json(stats) -------------------------------------------------------------------------------- /docs/整体架构.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/docs/整体架构.png -------------------------------------------------------------------------------- /docs/设计.vsdx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/docs/设计.vsdx -------------------------------------------------------------------------------- /docs/配置图片/新建插件1-ssh弱口令.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/docs/配置图片/新建插件1-ssh弱口令.jpg -------------------------------------------------------------------------------- /docs/配置图片/新建插件2-http_header-check.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/docs/配置图片/新建插件2-http_header-check.jpg -------------------------------------------------------------------------------- /docs/配置图片/新建插件3-http_status-check.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/docs/配置图片/新建插件3-http_status-check.jpg -------------------------------------------------------------------------------- /docs/配置图片/新建插件4-http_response-check.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/docs/配置图片/新建插件4-http_response-check.jpg -------------------------------------------------------------------------------- /docs/配置图片/新建配置1-__PASSWORD__.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/docs/配置图片/新建配置1-__PASSWORD__.jpg -------------------------------------------------------------------------------- /logs/readme.md: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/logs/readme.md -------------------------------------------------------------------------------- /requirements.all.txt: -------------------------------------------------------------------------------- 1 | asn1crypto==0.24.0 2 | backcall==0.1.0 3 | bcrypt==3.1.4 4 | certifi==2018.4.16 5 | cffi==1.11.5 6 | chardet==3.0.4 7 | click==6.7 8 | colorama==0.3.9 9 | cryptography==2.2.2 10 | decorator==4.3.0 11 | Flask==1.0.2 12 | Flask-SQLAlchemy==2.3.2 13 | idna==2.6 14 | ipython==6.4.0 15 | ipython-genutils==0.2.0 16 | itsdangerous==0.24 17 | jedi==0.12.0 18 | Jinja2==2.10 19 | MarkupSafe==1.0 20 | netaddr==0.7.19 21 | paramiko==2.4.1 22 | parso==0.2.1 23 | pickleshare==0.7.4 24 | prompt-toolkit==1.0.15 25 | psycopg2==2.7.4 26 | pyasn1==0.4.3 27 | pycparser==2.18 28 | Pygments==2.2.0 29 | PyNaCl==1.2.1 30 | python-nmap==0.6.1 31 | redis==2.10.6 32 | requests==2.18.4 33 | simplegeneric==0.8.1 34 | six==1.11.0 35 | SQLAlchemy==1.2.8 36 | traitlets==4.3.2 37 | urllib3==1.22 38 | wcwidth==0.1.7 39 | Werkzeug==0.14.1 40 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Flask==1.0.2 2 | Flask-SQLAlchemy==2.3.2 3 | ipython==6.4.0 4 | netaddr==0.7.19 5 | paramiko==2.4.1 6 | psycopg2==2.7.4 7 | python-nmap==0.6.1 8 | redis==2.10.6 9 | requests==2.18.4 -------------------------------------------------------------------------------- /run.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | 3 | set FLASK_APP=shadow 4 | 5 | ::production or development 6 | set FLASK_ENV=development 7 | 8 | flask %* -------------------------------------------------------------------------------- /run.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | export FLASK_APP=shadow 4 | 5 | #production or development 6 | export FLASK_ENV=development 7 | 8 | flask $@ -------------------------------------------------------------------------------- /schedule/__init__.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | from flask import Blueprint 4 | 5 | bp = Blueprint('schedule', __name__, url_prefix='/schedule', static_folder='static', template_folder='templates') 6 | 7 | from . import views 8 | from . import models 9 | from . import commands -------------------------------------------------------------------------------- /schedule/dispatcher/__init__.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | from .manager import preprocess, dispatch, result -------------------------------------------------------------------------------- /schedule/executor/__init__.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | from .manager import heartbeat, handle -------------------------------------------------------------------------------- /schedule/executor/sys_asset_discover/__init__.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | from ..base import BaseExecutor 4 | import logging 5 | 6 | logger = logging.getLogger(__name__) 7 | 8 | class Executor(BaseExecutor): 9 | pass -------------------------------------------------------------------------------- /schedule/executor/sys_asset_discover/plugin_nmap.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | import time 3 | import logging 4 | 5 | import netaddr 6 | import nmap 7 | 8 | logger = logging.getLogger(__name__) 9 | 10 | 11 | def run(job_params, plugin_info, plugin_config, *args, **kwargs): 12 | hosts = job_params.get('ip', []) 13 | ports = job_params.get('port', '0-1024') 14 | hosts = [' '.join(netaddr.iprange_to_globs(*x)) for x in hosts] 15 | 16 | nm = nmap.PortScanner() 17 | logger.debug(nm.scan(hosts=' '.join(hosts), ports=ports, arguments='-sV -O')) 18 | for host in nm.all_hosts(): 19 | host_info = nm[host] 20 | os_info = '' 21 | try: 22 | os_info = host_info['osmatch'][0]['name'] 23 | except BaseException as e: 24 | pass 25 | 26 | apps = [] 27 | for protocol in host_info.all_protocols(): 28 | for port_num, port_info in host_info[protocol].items(): 29 | port = port_info.copy() 30 | port['protocol'] = protocol 31 | port['port'] = port_num 32 | apps.append(port) 33 | 34 | 35 | yield host, { 36 | 'ip' : host, 37 | 'name' : host_info.hostname(), 38 | 'apps' : apps, 39 | 'os' : os_info, 40 | 'mac' : host_info.get('addresses').get('mac', ''), 41 | } -------------------------------------------------------------------------------- /schedule/executor/sys_vul_check/plugin_socket_request.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | import socket 4 | import logging 5 | import traceback 6 | 7 | TYPE = 'socket_request' 8 | 9 | DEFAULT_TIMEOUT = 5 10 | DEFAULT_PORT = 80 11 | DEFAULT_TEXT = 'shadow' 12 | DEFAULT_SIZE = 1024 13 | 14 | logger = logging.getLogger(__name__) 15 | 16 | def run(job_params, plugin_info, plugin_config, *args, **kwargs): 17 | ip = job_params.get('ip', '') 18 | 19 | flag, payloads = check(ip, plugin_config) 20 | 21 | if flag: 22 | yield ip, { 23 | ident : { 24 | 'payloads' : payloads 25 | } 26 | } 27 | 28 | yield ip, None 29 | 30 | 31 | def check(ip, plugin_config): 32 | timeout = int(plugin_config.get('timeout', DEFAULT_TIMEOUT)) 33 | port = int(plugin_config.get('port', DEFAULT_PORT)) 34 | request = str(plugin_config.get('request', DEFAULT_REQUEST)).encode() 35 | size = int(plugin_config.get('size', DEFAULT_SIZE)) 36 | flag = str(plugin_config.get('flag', '')).lower() 37 | 38 | try: 39 | socket.setdefaulttimeout(timeout) 40 | client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) 41 | client.connect((ip, port)) 42 | client.send(text) 43 | response = client.recv(size) 44 | response = response.decode().lower() 45 | 46 | pos = response.find(flag) 47 | if pos != -1: 48 | length = len(text) 49 | start = pos - 20 50 | end = pos + len(value) + 20 51 | start = 0 if start < 0 else start 52 | end = length if end > length else end 53 | 54 | return True, {'response' : response[start, end]} 55 | except BaseException as e: 56 | logger.exception(e) 57 | logger.error(e) 58 | 59 | return False, None 60 | -------------------------------------------------------------------------------- /schedule/executor/sys_vul_check/plugin_ssh_weak_password.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | import logging 3 | import traceback 4 | import paramiko 5 | 6 | TYPE = 'script' 7 | IDENT = 'ssh_weak_password' 8 | NAME = 'SSH弱口令' 9 | LEVEL = 10 10 | REMARK = 'SSH弱口令' 11 | 12 | DEFAULT_PORTS = [22] 13 | DEFAULT_USERNAMES = [] 14 | DEFAULT_PASSWORDS = [] 15 | 16 | logger = logging.getLogger(__name__) 17 | 18 | def run(job_params, plugin_info, plugin_config, *args, **kwargs): 19 | ident = plugin_info.ident 20 | ip = job_params.get('ip', '') 21 | 22 | ports = plugin_config.get('ports', DEFAULT_PORTS) 23 | usernames = plugin_config.get('usernames', DEFAULT_USERNAMES) 24 | passwords = plugin_config.get('passwords', DEFAULT_PASSWORDS) 25 | 26 | flag, payloads = check(ip, ports, usernames, passwords) 27 | 28 | if flag: 29 | yield ip, { 30 | ident : { 31 | 'payloads' : payloads 32 | } 33 | } 34 | 35 | yield ip, None 36 | 37 | 38 | def check(ip, ports, usernames, passwords): 39 | ssh = paramiko.SSHClient() 40 | ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy()) 41 | 42 | try: 43 | for port in ports: 44 | for username in usernames: 45 | for password in passwords: 46 | ssh.connect(ip, port, username, password) 47 | return True, {'username' : username, 'password' : password} 48 | except BaseException as e: 49 | logger.debug(e) 50 | logger.debug(traceback.format_exc()) 51 | finally: 52 | ssh.close() 53 | 54 | return False, None -------------------------------------------------------------------------------- /schedule/processor/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/schedule/processor/__init__.py -------------------------------------------------------------------------------- /schedule/processor/base.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | import logging 4 | from functools import reduce 5 | 6 | from shadow import redis 7 | 8 | logger = logging.getLogger(__name__) 9 | 10 | class Processor(object): 11 | 12 | def preprocess(self, job): 13 | raise BaseException('override method preprocess') 14 | 15 | def result(self, sub_job, type, result): 16 | raise BaseException('override method result') 17 | 18 | def get_job_queue_keys(self, job): 19 | return {} 20 | 21 | def progress(self, job): 22 | keys = self.get_job_queue_keys(job) 23 | flags = [] 24 | rates = [] 25 | totals = [] 26 | ones = [] 27 | for name, key in keys.items(): 28 | total = redis.zcard(key) 29 | one = redis.zcount(key, 1, 1) 30 | totals.append(total) 31 | ones.append(one) 32 | flags.append(False if total == 0 else one == total) 33 | rates.append(0 if total == 0 else (one / total)) 34 | 35 | 36 | rates_nozero = list(filter(lambda x: x > 0.001 , rates)) 37 | if rates_nozero: 38 | job.doing(int(1 - rates.count(0)/len(rates)) * reduce(lambda x, y: x * y, rates_nozero) * 100) 39 | 40 | if all(flags) or (totals[0] == ones[0] and totals[1] == 0): 41 | logger.info('job finish: %s', job) 42 | job.finish() -------------------------------------------------------------------------------- /schedule/processor/manager.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | import logging 4 | import traceback 5 | 6 | from ..models import JobType 7 | from .vul import SysVulScanProcessor 8 | 9 | 10 | 11 | class Manager(object): 12 | 13 | def __init__(self, *args, **kwargs): 14 | self.processors = { 15 | JobType.SYS_VULSCAN : SysVulScanProcessor() 16 | } 17 | 18 | def get(self, type): 19 | return self.processors.get(type, None) -------------------------------------------------------------------------------- /schedule/views.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | import time 4 | 5 | from flask import request, render_template 6 | 7 | from shadow.response import json 8 | from . import bp 9 | from .models import Executor 10 | from auth.decorators import login_required 11 | 12 | @bp.route('/register/', methods=['POST']) 13 | def register(): 14 | ident = request.json.get('ident', '') 15 | hostname = request.json.get('hostname', '') 16 | pid = request.json.get('pid', '') 17 | type = request.json.get('type', '') 18 | total = request.json.get('total', 0) 19 | busy = request.json.get('busy', 0) 20 | idle = request.json.get('idle', 0) 21 | 22 | Executor.create(ident=ident, hostname=hostname, pid=pid, type=type, total=total, busy=busy, idle=idle) 23 | return json(result={'time' : time.time()}) 24 | 25 | @bp.route('/executors/') 26 | @login_required 27 | def executors(): 28 | return render_template('schedule/executor.html', executors=Executor.all(False)) 29 | 30 | @bp.route('/executors/', methods=['POST']) 31 | @login_required 32 | def delete_executor(): 33 | Executor.delete_by_key(request.form.get('id', 0)) 34 | return json() -------------------------------------------------------------------------------- /shadow/__init__.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | import logging 3 | 4 | 5 | from flask import Flask 6 | from flask_sqlalchemy import SQLAlchemy 7 | 8 | from .config import AppConfig, REDIS_KEYS, DEFAULT_CONCURRENT 9 | 10 | app = Flask(__name__) 11 | 12 | app.config.from_object(AppConfig) 13 | 14 | 15 | logging.basicConfig( 16 | level=logging.DEBUG if app.config.get('DEBUG', 0) else logging.INFO, 17 | format='%(asctime)s %(name)s %(levelname)s:%(message)s', 18 | datefmt='%Y-%m-%d %H:%M:%S' 19 | ) 20 | 21 | db = SQLAlchemy(app) 22 | 23 | from utils.rediscli import RedisCli 24 | 25 | 26 | redis = RedisCli(app) 27 | 28 | from . import views 29 | from . import commands 30 | 31 | import auth 32 | import dashboard 33 | import schedule 34 | import asset 35 | import vul 36 | 37 | app.register_blueprint(auth.bp) 38 | app.register_blueprint(dashboard.bp) 39 | app.register_blueprint(schedule.bp) 40 | app.register_blueprint(asset.bp) 41 | app.register_blueprint(vul.bp) -------------------------------------------------------------------------------- /shadow/commands.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | import click 4 | 5 | from flask.cli import AppGroup 6 | 7 | from . import app 8 | from . import db 9 | 10 | cli = AppGroup('shadow') 11 | 12 | @cli.command('init-db') 13 | def init_db(): 14 | db.create_all() 15 | click.echo('success init db') 16 | 17 | 18 | app.cli.add_command(cli) -------------------------------------------------------------------------------- /shadow/config.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | REDIS_KEYS = { 4 | 'JOB_PREPROCESS' : 'shadow:job:preprocess', 5 | 'JOB_CONTENT' : 'shadow:job:content:{id}', 6 | 'JOB_DOING' : 'shadow:job:doing', 7 | 'JOB_QUEUE' : 'shadow:job:{type}:{id}', 8 | 'JOB_EXECUTOR' : 'shadow:job:executor:{type}:{ident}', 9 | 'JOB_EXECUTOR_RUNNING' : 'shadow:job:executor:running', 10 | 'JOB_RESULT' : 'shadow:job:result', 11 | 'PLUGIN_SYS_VUL' : 'shadow:plugin:sys_vul:{ident}', 12 | 'PLUGIN_CONFIG' : 'shadow:plugin:config:{ident}', 13 | } 14 | 15 | DEFAULT_CONCURRENT = 3 16 | 17 | class AppConfig(object): 18 | SECRET_KEY = b'\x98\t\x11t\x97\x9d4.+\xe5Z\xb39\xe8/\xd2\xfc\xf3\xa1\xe2\xeb\xc4\xdbr,E\x06|\xec\xb9\x05d' 19 | 20 | #SQLALCHEMY_DATABASE_URI = 'mysql://{user}:{password}@{host}:{port}/shadow?charset=utf8'.format(user='root', password='password', host='localhost', port=3306) 21 | SQLALCHEMY_DATABASE_URI = 'postgresql://{user}:{password}@{host}:{port}/shadow'.format(user='silence', password='password', host='localhost', port=5432) 22 | SQLALCHEMY_TRACK_MODIFICATIONS = False 23 | 24 | REDIS = { 25 | 'host' : 'localhost', 26 | 'port' : 6379, 27 | 'db' : 0, 28 | 'password' : '', 29 | 'decode_responses' : True, 30 | #'password' : 'password', 31 | } -------------------------------------------------------------------------------- /shadow/exceptions.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | 4 | class ShadowException(Exception): 5 | 6 | 7 | def __init__(self, msg, code=None, *args, **kwargs): 8 | super(ShadowException, self).__init__(*args, **kwargs) 9 | self.msg = msg 10 | self.code = code 11 | 12 | 13 | -------------------------------------------------------------------------------- /shadow/models.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | import json 4 | 5 | from datetime import datetime 6 | 7 | class AsDictMixin(object): 8 | def as_dict(self): 9 | result = {} 10 | for key, value in self.__dict__.items(): 11 | if value is None or isinstance(value, (int, float, bool)): 12 | result[key] = value 13 | elif isinstance(value, datetime): 14 | result[key] = value.strftime('%Y-%m-%d %H:%M:%S') 15 | elif isinstance(value, (list, tuple, dict)): 16 | result[key] = value 17 | elif isinstance(value, str): 18 | try: 19 | result[key] = json.loads(value) 20 | except BaseException as e: 21 | result[key] = value 22 | 23 | return result 24 | 25 | def as_dict_string(self): 26 | result = {} 27 | for key, value in self.__dict__.items(): 28 | if value is None or isinstance(value, (int, float, bool, str)): 29 | result[key] = value 30 | elif isinstance(value, datetime): 31 | result[key] = value.strftime('%Y-%m-%d %H:%M:%S') 32 | elif isinstance(value, (list, tuple, dict)): 33 | result[key] = json.dumps(value) 34 | elif isinstance(value, bytes): 35 | result[key] = value.decode() 36 | 37 | return result 38 | 39 | def __str__(self): 40 | return json.dumps(self.as_dict()) 41 | -------------------------------------------------------------------------------- /shadow/response.py: -------------------------------------------------------------------------------- 1 | #encoding: utf-8 2 | 3 | from flask import jsonify 4 | 5 | STATUS_OK = 200 6 | STATUS_PARAMS_ERROR = 400 7 | STATUS_UNAUTHENTICATE = 403 8 | STATUS_SERVER_ERROR = 500 9 | 10 | def json(result=None, code=None, errors=None): 11 | result = result or {} 12 | errors = errors or {} 13 | code = code or (STATUS_PARAMS_ERROR if errors else STATUS_OK) 14 | return jsonify({'code' : code, 'result' : result, 'errors' : errors}) -------------------------------------------------------------------------------- /shadow/static/css/patterns/congruent_pentagon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/patterns/congruent_pentagon.png -------------------------------------------------------------------------------- /shadow/static/css/patterns/header-profile-skin-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/patterns/header-profile-skin-1.png -------------------------------------------------------------------------------- /shadow/static/css/patterns/header-profile-skin-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/patterns/header-profile-skin-2.png -------------------------------------------------------------------------------- /shadow/static/css/patterns/header-profile-skin-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/patterns/header-profile-skin-3.png -------------------------------------------------------------------------------- /shadow/static/css/patterns/header-profile.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/patterns/header-profile.png -------------------------------------------------------------------------------- /shadow/static/css/patterns/otis_redding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/patterns/otis_redding.png -------------------------------------------------------------------------------- /shadow/static/css/patterns/shattered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/patterns/shattered.png -------------------------------------------------------------------------------- /shadow/static/css/patterns/triangular.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/patterns/triangular.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/awesome-bootstrap-checkbox/._awesome-bootstrap-checkbox.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/awesome-bootstrap-checkbox/._awesome-bootstrap-checkbox.css -------------------------------------------------------------------------------- /shadow/static/css/plugins/blueimp/css/demo.css: -------------------------------------------------------------------------------- 1 | /* 2 | * blueimp Gallery Demo CSS 2.0.0 3 | * https://github.com/blueimp/Gallery 4 | * 5 | * Copyright 2013, Sebastian Tschan 6 | * https://blueimp.net 7 | * 8 | * Licensed under the MIT license: 9 | * http://www.opensource.org/licenses/MIT 10 | */ 11 | 12 | body { 13 | max-width: 750px; 14 | margin: 0 auto; 15 | padding: 1em; 16 | font-family: 'Lucida Grande', 'Lucida Sans Unicode', Arial, sans-serif; 17 | font-size: 1em; 18 | line-height: 1.4em; 19 | background: #222; 20 | color: #fff; 21 | -webkit-text-size-adjust: 100%; 22 | -ms-text-size-adjust: 100%; 23 | } 24 | a { 25 | color: orange; 26 | text-decoration: none; 27 | } 28 | img { 29 | border: 0; 30 | vertical-align: middle; 31 | } 32 | h1 { 33 | line-height: 1em; 34 | } 35 | h2, 36 | .links { 37 | text-align: center; 38 | } 39 | 40 | @media (min-width: 481px) { 41 | .navigation { 42 | list-style: none; 43 | padding: 0; 44 | } 45 | .navigation li { 46 | display: inline-block; 47 | } 48 | .navigation li:not(:first-child):before { 49 | content: '| '; 50 | } 51 | } 52 | -------------------------------------------------------------------------------- /shadow/static/css/plugins/blueimp/img/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/blueimp/img/error.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/blueimp/img/error.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /shadow/static/css/plugins/blueimp/img/loading.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/blueimp/img/loading.gif -------------------------------------------------------------------------------- /shadow/static/css/plugins/blueimp/img/play-pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/blueimp/img/play-pause.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/blueimp/img/play-pause.svg: -------------------------------------------------------------------------------- 1 | 2 | 7 | -------------------------------------------------------------------------------- /shadow/static/css/plugins/blueimp/img/video-play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/blueimp/img/video-play.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/blueimp/img/video-play.svg: -------------------------------------------------------------------------------- 1 | 2 | 6 | -------------------------------------------------------------------------------- /shadow/static/css/plugins/chosen/chosen-sprite.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/chosen/chosen-sprite.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/chosen/chosen-sprite@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/chosen/chosen-sprite@2x.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/clockpicker/._clockpicker.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/clockpicker/._clockpicker.css -------------------------------------------------------------------------------- /shadow/static/css/plugins/daterangepicker/._daterangepicker-bs3.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/daterangepicker/._daterangepicker-bs3.css -------------------------------------------------------------------------------- /shadow/static/css/plugins/footable/._fonts: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/footable/._fonts -------------------------------------------------------------------------------- /shadow/static/css/plugins/footable/._footable.core.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/footable/._footable.core.css -------------------------------------------------------------------------------- /shadow/static/css/plugins/footable/fonts/._footable.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/footable/fonts/._footable.eot -------------------------------------------------------------------------------- /shadow/static/css/plugins/footable/fonts/._footable.svg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/footable/fonts/._footable.svg -------------------------------------------------------------------------------- /shadow/static/css/plugins/footable/fonts/._footable.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/footable/fonts/._footable.ttf -------------------------------------------------------------------------------- /shadow/static/css/plugins/footable/fonts/._footable.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/footable/fonts/._footable.woff -------------------------------------------------------------------------------- /shadow/static/css/plugins/footable/fonts/footable.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/footable/fonts/footable.eot -------------------------------------------------------------------------------- /shadow/static/css/plugins/footable/fonts/footable.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/footable/fonts/footable.ttf -------------------------------------------------------------------------------- /shadow/static/css/plugins/footable/fonts/footable.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/footable/fonts/footable.woff -------------------------------------------------------------------------------- /shadow/static/css/plugins/iCheck/custom.css: -------------------------------------------------------------------------------- 1 | /* iCheck plugin Square skin, green 2 | ----------------------------------- */ 3 | .icheckbox_square-green, 4 | .iradio_square-green { 5 | display: inline-block; 6 | *display: inline; 7 | vertical-align: middle; 8 | margin: 0; 9 | padding: 0; 10 | width: 22px; 11 | height: 22px; 12 | background: url(green.png) no-repeat; 13 | border: none; 14 | cursor: pointer; 15 | } 16 | 17 | .icheckbox_square-green { 18 | background-position: 0 0; 19 | } 20 | .icheckbox_square-green.hover { 21 | background-position: -24px 0; 22 | } 23 | .icheckbox_square-green.checked { 24 | background-position: -48px 0; 25 | } 26 | .icheckbox_square-green.disabled { 27 | background-position: -72px 0; 28 | cursor: default; 29 | } 30 | .icheckbox_square-green.checked.disabled { 31 | background-position: -96px 0; 32 | } 33 | 34 | .iradio_square-green { 35 | background-position: -120px 0; 36 | } 37 | .iradio_square-green.hover { 38 | background-position: -144px 0; 39 | } 40 | .iradio_square-green.checked { 41 | background-position: -168px 0; 42 | } 43 | .iradio_square-green.disabled { 44 | background-position: -192px 0; 45 | cursor: default; 46 | } 47 | .iradio_square-green.checked.disabled { 48 | background-position: -216px 0; 49 | } 50 | 51 | /* HiDPI support */ 52 | @media (-o-min-device-pixel-ratio: 5/4), (-webkit-min-device-pixel-ratio: 1.25), (min-resolution: 120dpi) { 53 | .icheckbox_square-green, 54 | .iradio_square-green { 55 | background-image: url(green@2x.png); 56 | -webkit-background-size: 240px 24px; 57 | background-size: 240px 24px; 58 | } 59 | } -------------------------------------------------------------------------------- /shadow/static/css/plugins/iCheck/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/iCheck/green.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/iCheck/green@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/iCheck/green@2x.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/images/bootstrap-colorpicker/alpha-horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/images/bootstrap-colorpicker/alpha-horizontal.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/images/bootstrap-colorpicker/alpha.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/images/bootstrap-colorpicker/alpha.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/images/bootstrap-colorpicker/hue-horizontal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/images/bootstrap-colorpicker/hue-horizontal.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/images/bootstrap-colorpicker/hue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/images/bootstrap-colorpicker/hue.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/images/bootstrap-colorpicker/saturation.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/images/bootstrap-colorpicker/saturation.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/images/sort.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/images/sort.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/images/sort_asc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/images/sort_asc.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/images/sort_desc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/images/sort_desc.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/images/sprite-skin-flat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/images/sprite-skin-flat.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/images/sprite-skin-flat2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/images/sprite-skin-flat2.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/images/sprite-skin-nice.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/images/sprite-skin-nice.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/images/sprite-skin-simple.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/images/sprite-skin-simple.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/images/spritemap.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/images/spritemap.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/images/spritemap@2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/images/spritemap@2x.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jQueryUI/images/animated-overlay.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jQueryUI/images/animated-overlay.gif -------------------------------------------------------------------------------- /shadow/static/css/plugins/jQueryUI/images/ui-bg_flat_0_aaaaaa_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jQueryUI/images/ui-bg_flat_0_aaaaaa_40x100.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jQueryUI/images/ui-bg_flat_75_ffffff_40x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jQueryUI/images/ui-bg_flat_75_ffffff_40x100.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jQueryUI/images/ui-bg_glass_55_fbf9ee_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jQueryUI/images/ui-bg_glass_55_fbf9ee_1x400.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jQueryUI/images/ui-bg_glass_65_ffffff_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jQueryUI/images/ui-bg_glass_65_ffffff_1x400.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jQueryUI/images/ui-bg_glass_75_dadada_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jQueryUI/images/ui-bg_glass_75_dadada_1x400.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jQueryUI/images/ui-bg_glass_75_e6e6e6_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jQueryUI/images/ui-bg_glass_75_e6e6e6_1x400.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jQueryUI/images/ui-bg_glass_95_fef1ec_1x400.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jQueryUI/images/ui-bg_glass_95_fef1ec_1x400.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jQueryUI/images/ui-bg_highlight-soft_75_cccccc_1x100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jQueryUI/images/ui-bg_highlight-soft_75_cccccc_1x100.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jQueryUI/images/ui-icons_222222_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jQueryUI/images/ui-icons_222222_256x240.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jQueryUI/images/ui-icons_2e83ff_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jQueryUI/images/ui-icons_2e83ff_256x240.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jQueryUI/images/ui-icons_454545_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jQueryUI/images/ui-icons_454545_256x240.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jQueryUI/images/ui-icons_888888_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jQueryUI/images/ui-icons_888888_256x240.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jQueryUI/images/ui-icons_cd0a0a_256x240.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jQueryUI/images/ui-icons_cd0a0a_256x240.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jsTree/32px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jsTree/32px.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jsTree/39px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jsTree/39px.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jsTree/40px.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jsTree/40px.png -------------------------------------------------------------------------------- /shadow/static/css/plugins/jsTree/throbber.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/jsTree/throbber.gif -------------------------------------------------------------------------------- /shadow/static/css/plugins/morris/morris-0.4.3.min.css: -------------------------------------------------------------------------------- 1 | .morris-hover{position:absolute;z-index:1000;}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255, 255, 255, 0.8);border:solid 2px rgba(230, 230, 230, 0.8);font-family:sans-serif;font-size:12px;text-align:center;}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0;} 2 | .morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0;} -------------------------------------------------------------------------------- /shadow/static/css/plugins/sweetalert/._sweetalert.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/css/plugins/sweetalert/._sweetalert.css -------------------------------------------------------------------------------- /shadow/static/css/plugins/switchery/switchery.css: -------------------------------------------------------------------------------- 1 | /* 2 | * 3 | * Main stylesheet for Switchery. 4 | * http://abpetkov.github.io/switchery/ 5 | * 6 | */ 7 | 8 | .switchery { 9 | background-color: #fff; 10 | border: 1px solid #dfdfdf; 11 | border-radius: 20px; 12 | cursor: pointer; 13 | display: inline-block; 14 | height: 30px; 15 | position: relative; 16 | vertical-align: middle; 17 | width: 50px; 18 | 19 | -webkit-box-sizing: content-box; 20 | -moz-box-sizing: content-box; 21 | box-sizing: content-box; 22 | } 23 | 24 | .switchery > small { 25 | background: #fff; 26 | border-radius: 100%; 27 | box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4); 28 | height: 30px; 29 | position: absolute; 30 | top: 0; 31 | width: 30px; 32 | } -------------------------------------------------------------------------------- /shadow/static/font-awesome/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/font-awesome/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /shadow/static/font-awesome/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/font-awesome/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /shadow/static/font-awesome/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/font-awesome/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /shadow/static/font-awesome/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/font-awesome/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /shadow/static/font-awesome/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/font-awesome/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /shadow/static/font-awesome/less/animated.less: -------------------------------------------------------------------------------- 1 | // Animated Icons 2 | // -------------------------- 3 | 4 | .@{fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .@{fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/less/bordered-pulled.less: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em @fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .@{fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/less/core.less: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox 12 | 13 | } 14 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables.less"; 7 | @import "mixins.less"; 8 | @import "path.less"; 9 | @import "core.less"; 10 | @import "larger.less"; 11 | @import "fixed-width.less"; 12 | @import "list.less"; 13 | @import "bordered-pulled.less"; 14 | @import "animated.less"; 15 | @import "rotated-flipped.less"; 16 | @import "stacked.less"; 17 | @import "icons.less"; 18 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/less/larger.less: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .@{fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .@{fa-css-prefix}-2x { font-size: 2em; } 11 | .@{fa-css-prefix}-3x { font-size: 3em; } 12 | .@{fa-css-prefix}-4x { font-size: 4em; } 13 | .@{fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/less/list.less: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: @fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .@{fa-css-prefix}-li { 11 | position: absolute; 12 | left: -@fa-li-width; 13 | width: @fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.@{fa-css-prefix}-lg { 17 | left: (-@fa-li-width + (4em / 14)); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox 12 | 13 | } 14 | 15 | .fa-icon-rotate(@degrees, @rotation) { 16 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation); 17 | -webkit-transform: rotate(@degrees); 18 | -ms-transform: rotate(@degrees); 19 | transform: rotate(@degrees); 20 | } 21 | 22 | .fa-icon-flip(@horiz, @vert, @rotation) { 23 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1); 24 | -webkit-transform: scale(@horiz, @vert); 25 | -ms-transform: scale(@horiz, @vert); 26 | transform: scale(@horiz, @vert); 27 | } 28 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/less/path.less: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}'); 7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'), 8 | url('@{fa-font-path}/fontawesome-webfont.woff2?v=@{fa-version}') format('woff2'), 9 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'), 10 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'), 11 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/less/rotated-flipped.less: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); } 5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); } 6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); } 7 | 8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); } 9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .@{fa-css-prefix}-rotate-90, 15 | :root .@{fa-css-prefix}-rotate-180, 16 | :root .@{fa-css-prefix}-rotate-270, 17 | :root .@{fa-css-prefix}-flip-horizontal, 18 | :root .@{fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/less/stacked.less: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .@{fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; } 21 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/scss/_animated.scss: -------------------------------------------------------------------------------- 1 | // Spinning Icons 2 | // -------------------------- 3 | 4 | .#{$fa-css-prefix}-spin { 5 | -webkit-animation: fa-spin 2s infinite linear; 6 | animation: fa-spin 2s infinite linear; 7 | } 8 | 9 | .#{$fa-css-prefix}-pulse { 10 | -webkit-animation: fa-spin 1s infinite steps(8); 11 | animation: fa-spin 1s infinite steps(8); 12 | } 13 | 14 | @-webkit-keyframes fa-spin { 15 | 0% { 16 | -webkit-transform: rotate(0deg); 17 | transform: rotate(0deg); 18 | } 19 | 100% { 20 | -webkit-transform: rotate(359deg); 21 | transform: rotate(359deg); 22 | } 23 | } 24 | 25 | @keyframes fa-spin { 26 | 0% { 27 | -webkit-transform: rotate(0deg); 28 | transform: rotate(0deg); 29 | } 30 | 100% { 31 | -webkit-transform: rotate(359deg); 32 | transform: rotate(359deg); 33 | } 34 | } 35 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/scss/_bordered-pulled.scss: -------------------------------------------------------------------------------- 1 | // Bordered & Pulled 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-border { 5 | padding: .2em .25em .15em; 6 | border: solid .08em $fa-border-color; 7 | border-radius: .1em; 8 | } 9 | 10 | .pull-right { float: right; } 11 | .pull-left { float: left; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.pull-left { margin-right: .3em; } 15 | &.pull-right { margin-left: .3em; } 16 | } 17 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/scss/_core.scss: -------------------------------------------------------------------------------- 1 | // Base Class Definition 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix} { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox 12 | 13 | } 14 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/scss/_larger.scss: -------------------------------------------------------------------------------- 1 | // Icon Sizes 2 | // ------------------------- 3 | 4 | /* makes the font 33% larger relative to the icon container */ 5 | .#{$fa-css-prefix}-lg { 6 | font-size: (4em / 3); 7 | line-height: (3em / 4); 8 | vertical-align: -15%; 9 | } 10 | .#{$fa-css-prefix}-2x { font-size: 2em; } 11 | .#{$fa-css-prefix}-3x { font-size: 3em; } 12 | .#{$fa-css-prefix}-4x { font-size: 4em; } 13 | .#{$fa-css-prefix}-5x { font-size: 5em; } 14 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/scss/_list.scss: -------------------------------------------------------------------------------- 1 | // List Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-ul { 5 | padding-left: 0; 6 | margin-left: $fa-li-width; 7 | list-style-type: none; 8 | > li { position: relative; } 9 | } 10 | .#{$fa-css-prefix}-li { 11 | position: absolute; 12 | left: -$fa-li-width; 13 | width: $fa-li-width; 14 | top: (2em / 14); 15 | text-align: center; 16 | &.#{$fa-css-prefix}-lg { 17 | left: -$fa-li-width + (4em / 14); 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/1 FontAwesome; // shortening font declaration 7 | font-size: inherit; // can't have font-size inherit on line above, so need to override 8 | text-rendering: auto; // optimizelegibility throws things off #1094 9 | -webkit-font-smoothing: antialiased; 10 | -moz-osx-font-smoothing: grayscale; 11 | transform: translate(0, 0); // ensures no half-pixel rendering in firefox 12 | 13 | } 14 | 15 | @mixin fa-icon-rotate($degrees, $rotation) { 16 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 17 | -webkit-transform: rotate($degrees); 18 | -ms-transform: rotate($degrees); 19 | transform: rotate($degrees); 20 | } 21 | 22 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 23 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}); 24 | -webkit-transform: scale($horiz, $vert); 25 | -ms-transform: scale($horiz, $vert); 26 | transform: scale($horiz, $vert); 27 | } 28 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/scss/_path.scss: -------------------------------------------------------------------------------- 1 | /* FONT PATH 2 | * -------------------------- */ 3 | 4 | @font-face { 5 | font-family: 'FontAwesome'; 6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}'); 7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'), 8 | url('#{$fa-font-path}/fontawesome-webfont.woff2?v=#{$fa-version}') format('woff2'), 9 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'), 10 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'), 11 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg'); 12 | // src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts 13 | font-weight: normal; 14 | font-style: normal; 15 | } 16 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/scss/_rotated-flipped.scss: -------------------------------------------------------------------------------- 1 | // Rotated & Flipped Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); } 5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); } 6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); } 7 | 8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); } 9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); } 10 | 11 | // Hook for IE8-9 12 | // ------------------------- 13 | 14 | :root .#{$fa-css-prefix}-rotate-90, 15 | :root .#{$fa-css-prefix}-rotate-180, 16 | :root .#{$fa-css-prefix}-rotate-270, 17 | :root .#{$fa-css-prefix}-flip-horizontal, 18 | :root .#{$fa-css-prefix}-flip-vertical { 19 | filter: none; 20 | } 21 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/scss/_stacked.scss: -------------------------------------------------------------------------------- 1 | // Stacked Icons 2 | // ------------------------- 3 | 4 | .#{$fa-css-prefix}-stack { 5 | position: relative; 6 | display: inline-block; 7 | width: 2em; 8 | height: 2em; 9 | line-height: 2em; 10 | vertical-align: middle; 11 | } 12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x { 13 | position: absolute; 14 | left: 0; 15 | width: 100%; 16 | text-align: center; 17 | } 18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; } 19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; } 20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; } 21 | -------------------------------------------------------------------------------- /shadow/static/font-awesome/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.3.0 by @davegandy - http://fontawesome.io - @fontawesome 3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License) 4 | */ 5 | 6 | @import "variables"; 7 | @import "mixins"; 8 | @import "path"; 9 | @import "core"; 10 | @import "larger"; 11 | @import "fixed-width"; 12 | @import "list"; 13 | @import "bordered-pulled"; 14 | @import "animated"; 15 | @import "rotated-flipped"; 16 | @import "stacked"; 17 | @import "icons"; 18 | -------------------------------------------------------------------------------- /shadow/static/fonts/glyphicons-halflings-regular.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/fonts/glyphicons-halflings-regular.eot -------------------------------------------------------------------------------- /shadow/static/fonts/glyphicons-halflings-regular.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/fonts/glyphicons-halflings-regular.ttf -------------------------------------------------------------------------------- /shadow/static/fonts/glyphicons-halflings-regular.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/fonts/glyphicons-halflings-regular.woff -------------------------------------------------------------------------------- /shadow/static/fonts/glyphicons-halflings-regular.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/fonts/glyphicons-halflings-regular.woff2 -------------------------------------------------------------------------------- /shadow/static/img/._headphones.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/._headphones.jpg -------------------------------------------------------------------------------- /shadow/static/img/._meteor_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/._meteor_logo.png -------------------------------------------------------------------------------- /shadow/static/img/a1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/a1.jpg -------------------------------------------------------------------------------- /shadow/static/img/a2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/a2.jpg -------------------------------------------------------------------------------- /shadow/static/img/a3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/a3.jpg -------------------------------------------------------------------------------- /shadow/static/img/a4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/a4.jpg -------------------------------------------------------------------------------- /shadow/static/img/a5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/a5.jpg -------------------------------------------------------------------------------- /shadow/static/img/a6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/a6.jpg -------------------------------------------------------------------------------- /shadow/static/img/a7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/a7.jpg -------------------------------------------------------------------------------- /shadow/static/img/a8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/a8.jpg -------------------------------------------------------------------------------- /shadow/static/img/angular_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/angular_logo.png -------------------------------------------------------------------------------- /shadow/static/img/dashbard4_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/dashbard4_1.jpg -------------------------------------------------------------------------------- /shadow/static/img/dashbard4_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/dashbard4_2.jpg -------------------------------------------------------------------------------- /shadow/static/img/email_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/email_1.jpg -------------------------------------------------------------------------------- /shadow/static/img/email_2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/email_2.jpg -------------------------------------------------------------------------------- /shadow/static/img/email_3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/email_3.jpg -------------------------------------------------------------------------------- /shadow/static/img/full_height.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/full_height.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/1.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/10.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/10.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/10s.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/10s.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/11.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/11.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/11s.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/11s.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/12.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/12.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/12s.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/12s.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/1s.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/1s.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/2.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/2s.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/2s.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/3.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/3s.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/3s.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/4.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/4s.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/4s.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/5.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/5s.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/5s.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/6.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/6s.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/6s.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/7.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/7s.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/7s.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/8.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/8s.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/8s.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/9.jpg -------------------------------------------------------------------------------- /shadow/static/img/gallery/9s.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/gallery/9s.jpg -------------------------------------------------------------------------------- /shadow/static/img/headphones.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/headphones.jpg -------------------------------------------------------------------------------- /shadow/static/img/html_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/html_logo.png -------------------------------------------------------------------------------- /shadow/static/img/landing/avatar1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/avatar1.jpg -------------------------------------------------------------------------------- /shadow/static/img/landing/avatar2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/avatar2.jpg -------------------------------------------------------------------------------- /shadow/static/img/landing/avatar3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/avatar3.jpg -------------------------------------------------------------------------------- /shadow/static/img/landing/avatar4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/avatar4.jpg -------------------------------------------------------------------------------- /shadow/static/img/landing/avatar5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/avatar5.jpg -------------------------------------------------------------------------------- /shadow/static/img/landing/avatar6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/avatar6.jpg -------------------------------------------------------------------------------- /shadow/static/img/landing/avatar7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/avatar7.jpg -------------------------------------------------------------------------------- /shadow/static/img/landing/avatar8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/avatar8.jpg -------------------------------------------------------------------------------- /shadow/static/img/landing/avatar9.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/avatar9.jpg -------------------------------------------------------------------------------- /shadow/static/img/landing/avatar_all.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/avatar_all.png -------------------------------------------------------------------------------- /shadow/static/img/landing/dashboard.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/dashboard.png -------------------------------------------------------------------------------- /shadow/static/img/landing/header_one.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/header_one.jpg -------------------------------------------------------------------------------- /shadow/static/img/landing/header_two.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/header_two.jpg -------------------------------------------------------------------------------- /shadow/static/img/landing/iphone.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/iphone.jpg -------------------------------------------------------------------------------- /shadow/static/img/landing/laptop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/laptop.png -------------------------------------------------------------------------------- /shadow/static/img/landing/perspective.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/perspective.png -------------------------------------------------------------------------------- /shadow/static/img/landing/shattered.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/shattered.png -------------------------------------------------------------------------------- /shadow/static/img/landing/word_map.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/landing/word_map.png -------------------------------------------------------------------------------- /shadow/static/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/logo.png -------------------------------------------------------------------------------- /shadow/static/img/meteor_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/meteor_logo.png -------------------------------------------------------------------------------- /shadow/static/img/mvc_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/mvc_logo.png -------------------------------------------------------------------------------- /shadow/static/img/off_canvas.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/off_canvas.jpg -------------------------------------------------------------------------------- /shadow/static/img/p1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/p1.jpg -------------------------------------------------------------------------------- /shadow/static/img/p2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/p2.jpg -------------------------------------------------------------------------------- /shadow/static/img/p3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/p3.jpg -------------------------------------------------------------------------------- /shadow/static/img/p4.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/p4.jpg -------------------------------------------------------------------------------- /shadow/static/img/p5.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/p5.jpg -------------------------------------------------------------------------------- /shadow/static/img/p6.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/p6.jpg -------------------------------------------------------------------------------- /shadow/static/img/p7.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/p7.jpg -------------------------------------------------------------------------------- /shadow/static/img/p8.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/p8.jpg -------------------------------------------------------------------------------- /shadow/static/img/p_big1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/p_big1.jpg -------------------------------------------------------------------------------- /shadow/static/img/p_big2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/p_big2.jpg -------------------------------------------------------------------------------- /shadow/static/img/p_big3.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/p_big3.jpg -------------------------------------------------------------------------------- /shadow/static/img/profile.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/profile.jpg -------------------------------------------------------------------------------- /shadow/static/img/profile_big.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/profile_big.jpg -------------------------------------------------------------------------------- /shadow/static/img/profile_small.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/profile_small.jpg -------------------------------------------------------------------------------- /shadow/static/img/rails_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/rails_logo.png -------------------------------------------------------------------------------- /shadow/static/img/zender_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/img/zender_logo.png -------------------------------------------------------------------------------- /shadow/static/js/demo/peity-demo.js: -------------------------------------------------------------------------------- 1 | $(function() { 2 | $("span.pie").peity("pie", { 3 | fill: ['#1ab394', '#d7d7d7', '#ffffff'] 4 | }) 5 | 6 | $(".line").peity("line",{ 7 | fill: '#1ab394', 8 | stroke:'#169c81', 9 | }) 10 | 11 | $(".bar").peity("bar", { 12 | fill: ["#1ab394", "#d7d7d7"] 13 | }) 14 | 15 | $(".bar_dashboard").peity("bar", { 16 | fill: ["#1ab394", "#d7d7d7"], 17 | width:100 18 | }) 19 | 20 | var updatingChart = $(".updating-chart").peity("line", { fill: '#1ab394',stroke:'#169c81', width: 64 }) 21 | 22 | setInterval(function() { 23 | var random = Math.round(Math.random() * 10) 24 | var values = updatingChart.text().split(",") 25 | values.shift() 26 | values.push(random) 27 | 28 | updatingChart 29 | .text(values.join(",")) 30 | .change() 31 | }, 1000); 32 | 33 | }); 34 | -------------------------------------------------------------------------------- /shadow/static/js/plugins/chartist/._chartist.min.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/js/plugins/chartist/._chartist.min.js -------------------------------------------------------------------------------- /shadow/static/js/plugins/chartist/._chartist.min.js.map: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/js/plugins/chartist/._chartist.min.js.map -------------------------------------------------------------------------------- /shadow/static/js/plugins/clockpicker/._clockpicker.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/imsilence/shadow-vulscan/1c2d098bf728bd1c1e38ba27af4050852b1516ba/shadow/static/js/plugins/clockpicker/._clockpicker.js -------------------------------------------------------------------------------- /shadow/static/js/plugins/codemirror/mode/diff/diff.js: -------------------------------------------------------------------------------- 1 | // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 | // Distributed under an MIT license: http://codemirror.net/LICENSE 3 | 4 | (function(mod) { 5 | if (typeof exports == "object" && typeof module == "object") // CommonJS 6 | mod(require("../../lib/codemirror")); 7 | else if (typeof define == "function" && define.amd) // AMD 8 | define(["../../lib/codemirror"], mod); 9 | else // Plain browser env 10 | mod(CodeMirror); 11 | })(function(CodeMirror) { 12 | "use strict"; 13 | 14 | CodeMirror.defineMode("diff", function() { 15 | 16 | var TOKEN_NAMES = { 17 | '+': 'positive', 18 | '-': 'negative', 19 | '@': 'meta' 20 | }; 21 | 22 | return { 23 | token: function(stream) { 24 | var tw_pos = stream.string.search(/[\t ]+?$/); 25 | 26 | if (!stream.sol() || tw_pos === 0) { 27 | stream.skipToEnd(); 28 | return ("error " + ( 29 | TOKEN_NAMES[stream.string.charAt(0)] || '')).replace(/ $/, ''); 30 | } 31 | 32 | var token_name = TOKEN_NAMES[stream.peek()] || stream.skipToEnd(); 33 | 34 | if (tw_pos === -1) { 35 | stream.skipToEnd(); 36 | } else { 37 | stream.pos = tw_pos; 38 | } 39 | 40 | return token_name; 41 | } 42 | }; 43 | }); 44 | 45 | CodeMirror.defineMIME("text/x-diff", "diff"); 46 | 47 | }); 48 | -------------------------------------------------------------------------------- /shadow/static/js/plugins/codemirror/mode/ecl/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
Based on CodeMirror's clike mode. For more information see HPCC Systems web site.
50 |MIME types defined: text/x-ecl
.
MIME types defined: text/x-feature
.
MIME types defined: message/http
.
This is a specialization of the JavaScript mode.
61 |MIME types defined: text/n-triples
.
MIME types defined: text/x-pascal
.
MIME types defined: text/x-perl
.
49 | Simple mode that handles Pig Latin language. 50 |
51 | 52 |MIME type defined: text/x-pig
53 | (PIG code)
54 |