├── .github └── ISSUE_TEMPLATE │ └── bug_report.md ├── README.md ├── asgi.py ├── backend ├── __init__.py ├── apps.py ├── backend_url.py ├── migrations │ ├── 0001_initial.py │ ├── 0002_auto_20210117_2002.py │ ├── 0003_auto_20210117_2017.py │ ├── 0004_auto_20210117_2311.py │ ├── 0005_auto_20210118_0856.py │ ├── 0006_auto_20210118_0926.py │ ├── 0007_auto_20210118_0931.py │ ├── 0008_auto_20210118_1453.py │ ├── 0009_resolver.py │ ├── 0010_auto_20210118_1620.py │ ├── 0011_auto_20210118_2002.py │ ├── 0012_auto_20210118_2044.py │ ├── 0013_auto_20210122_1747.py │ ├── 0014_auto_20210125_1839.py │ ├── 0015_containers_flag_string.py │ ├── 0016_auto_20210125_2143.py │ ├── 0017_resolver_address.py │ ├── 0018_topicname_score_type.py │ └── __init__.py ├── models │ ├── __init__.py │ ├── category.py │ ├── dockers.py │ └── users.py ├── static │ └── backend │ │ ├── css │ │ ├── layuimini.css │ │ ├── public.css │ │ └── themes │ │ │ └── default.css │ │ ├── font │ │ └── kumo.ttf │ │ ├── images │ │ ├── bg.jpg │ │ ├── captcha.jpg │ │ ├── donate_qrcode.png │ │ ├── favicon.ico │ │ ├── home.png │ │ ├── icon-login.png │ │ ├── loginbg.png │ │ └── logo.png │ │ ├── js │ │ ├── lay-config.js │ │ └── lay-module │ │ │ ├── echarts │ │ │ ├── echarts.js │ │ │ └── echartsTheme.js │ │ │ ├── iconPicker │ │ │ └── iconPickerFa.js │ │ │ ├── layarea │ │ │ └── layarea.js │ │ │ ├── layuimini │ │ │ ├── miniAdmin.js │ │ │ ├── miniMenu.js │ │ │ ├── miniTab.js │ │ │ ├── miniTheme.js │ │ │ └── miniTongji.js │ │ │ ├── step-lay │ │ │ ├── step.css │ │ │ └── step.js │ │ │ ├── tableSelect │ │ │ └── tableSelect.js │ │ │ ├── treetable-lay │ │ │ ├── treetable.css │ │ │ └── treetable.js │ │ │ └── wangEditor │ │ │ ├── fonts │ │ │ └── w-e-icon.woff │ │ │ ├── wangEditor.css │ │ │ ├── wangEditor.js │ │ │ ├── wangEditor.min.css │ │ │ ├── wangEditor.min.js │ │ │ └── wangEditor.min.js.map │ │ └── lib │ │ ├── font-awesome-4.7.0 │ │ ├── HELP-US-OUT.txt │ │ ├── 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 │ │ │ ├── screen-reader.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 │ │ │ ├── _screen-reader.scss │ │ │ ├── _stacked.scss │ │ │ ├── _variables.scss │ │ │ └── font-awesome.scss │ │ ├── jq-module │ │ ├── jquery.particleground.min.js │ │ ├── paigusu.min.js │ │ └── zyupload │ │ │ ├── zyupload-1.0.0.min.css │ │ │ └── zyupload-1.0.0.min.js │ │ ├── jquery-3.4.1 │ │ └── jquery-3.4.1.min.js │ │ └── layui-v2.5.5 │ │ ├── css │ │ ├── layui.css │ │ ├── layui.mobile.css │ │ └── modules │ │ │ ├── code.css │ │ │ ├── laydate │ │ │ └── default │ │ │ │ └── laydate.css │ │ │ └── layer │ │ │ └── default │ │ │ ├── icon-ext.png │ │ │ ├── icon.png │ │ │ ├── layer.css │ │ │ ├── loading-0.gif │ │ │ ├── loading-1.gif │ │ │ └── loading-2.gif │ │ ├── font │ │ ├── iconfont.eot │ │ ├── iconfont.svg │ │ ├── iconfont.ttf │ │ ├── iconfont.woff │ │ └── iconfont.woff2 │ │ ├── images │ │ └── face │ │ │ ├── 0.gif │ │ │ ├── 1.gif │ │ │ ├── 10.gif │ │ │ ├── 11.gif │ │ │ ├── 12.gif │ │ │ ├── 13.gif │ │ │ ├── 14.gif │ │ │ ├── 15.gif │ │ │ ├── 16.gif │ │ │ ├── 17.gif │ │ │ ├── 18.gif │ │ │ ├── 19.gif │ │ │ ├── 2.gif │ │ │ ├── 20.gif │ │ │ ├── 21.gif │ │ │ ├── 22.gif │ │ │ ├── 23.gif │ │ │ ├── 24.gif │ │ │ ├── 25.gif │ │ │ ├── 26.gif │ │ │ ├── 27.gif │ │ │ ├── 28.gif │ │ │ ├── 29.gif │ │ │ ├── 3.gif │ │ │ ├── 30.gif │ │ │ ├── 31.gif │ │ │ ├── 32.gif │ │ │ ├── 33.gif │ │ │ ├── 34.gif │ │ │ ├── 35.gif │ │ │ ├── 36.gif │ │ │ ├── 37.gif │ │ │ ├── 38.gif │ │ │ ├── 39.gif │ │ │ ├── 4.gif │ │ │ ├── 40.gif │ │ │ ├── 41.gif │ │ │ ├── 42.gif │ │ │ ├── 43.gif │ │ │ ├── 44.gif │ │ │ ├── 45.gif │ │ │ ├── 46.gif │ │ │ ├── 47.gif │ │ │ ├── 48.gif │ │ │ ├── 49.gif │ │ │ ├── 5.gif │ │ │ ├── 50.gif │ │ │ ├── 51.gif │ │ │ ├── 52.gif │ │ │ ├── 53.gif │ │ │ ├── 54.gif │ │ │ ├── 55.gif │ │ │ ├── 56.gif │ │ │ ├── 57.gif │ │ │ ├── 58.gif │ │ │ ├── 59.gif │ │ │ ├── 6.gif │ │ │ ├── 60.gif │ │ │ ├── 61.gif │ │ │ ├── 62.gif │ │ │ ├── 63.gif │ │ │ ├── 64.gif │ │ │ ├── 65.gif │ │ │ ├── 66.gif │ │ │ ├── 67.gif │ │ │ ├── 68.gif │ │ │ ├── 69.gif │ │ │ ├── 7.gif │ │ │ ├── 70.gif │ │ │ ├── 71.gif │ │ │ ├── 8.gif │ │ │ └── 9.gif │ │ ├── lay │ │ └── modules │ │ │ ├── carousel.js │ │ │ ├── code.js │ │ │ ├── colorpicker.js │ │ │ ├── element.js │ │ │ ├── flow.js │ │ │ ├── form.js │ │ │ ├── jquery.js │ │ │ ├── laydate.js │ │ │ ├── layedit.js │ │ │ ├── layer.js │ │ │ ├── laypage.js │ │ │ ├── laytpl.js │ │ │ ├── mobile.js │ │ │ ├── rate.js │ │ │ ├── slider.js │ │ │ ├── table.js │ │ │ ├── transfer.js │ │ │ ├── tree.js │ │ │ ├── upload.js │ │ │ └── util.js │ │ ├── layui.all.js │ │ └── layui.js ├── templates │ └── backend │ │ ├── index.html │ │ ├── login.html │ │ └── page │ │ ├── add.html │ │ ├── admins │ │ ├── add.html │ │ └── user.html │ │ ├── category │ │ ├── add.html │ │ ├── edit.html │ │ └── table.html │ │ ├── change.html │ │ ├── container │ │ └── table.html │ │ ├── images │ │ ├── add.html │ │ ├── edit.html │ │ └── table.html │ │ ├── menu.html │ │ ├── players │ │ ├── add.html │ │ ├── edit.html │ │ └── table.html │ │ ├── resolver │ │ └── table.html │ │ ├── score │ │ └── person.html │ │ ├── setting.html │ │ └── welcome.html └── views │ ├── __init__.py │ ├── admins.py │ ├── apis.py │ ├── category.py │ ├── container.py │ ├── images.py │ ├── index.py │ ├── login.py │ ├── players.py │ ├── resolver.py │ ├── score.py │ ├── setting.py │ ├── uploads.py │ └── welcome.py ├── data └── logs │ └── info.log ├── doc ├── COPYING ├── DEPLOY.md ├── config │ ├── daphne_supervisor.conf │ ├── nginx.conf │ └── nginx_supervisor.conf ├── example │ ├── 91255b4fc07c33c92711abec6098b8db.txt │ ├── Dockerfile │ ├── index.html │ └── robots.txt ├── img │ ├── img1.png │ ├── img2.png │ ├── img3.png │ └── stone.png └── sql.json ├── docker-compose.yml ├── front ├── __init__.py ├── apps.py ├── front_urls.py ├── migrations │ └── __init__.py ├── static │ └── front │ │ ├── bootstrap │ │ ├── bootstrap.min.css │ │ └── bootstrap.min.js │ │ ├── css │ │ ├── font.css │ │ ├── formSelects-v4.css │ │ ├── full.css │ │ ├── global.css │ │ ├── iconfont.eot │ │ ├── iconfont.svg │ │ ├── iconfont.ttf │ │ ├── iconfont.woff │ │ ├── index.css │ │ ├── layui.css │ │ ├── layui.mobile.css │ │ ├── login.css │ │ ├── main.css │ │ ├── modules │ │ │ ├── code.css │ │ │ ├── laydate │ │ │ │ └── default │ │ │ │ │ └── laydate.css │ │ │ └── layer │ │ │ │ └── default │ │ │ │ ├── icon-ext.png │ │ │ │ ├── icon.png │ │ │ │ ├── layer.css │ │ │ │ ├── loading-0.gif │ │ │ │ ├── loading-1.gif │ │ │ │ └── loading-2.gif │ │ ├── style.css │ │ ├── theme1.css │ │ ├── theme2.css │ │ ├── theme3.css │ │ ├── theme4.css │ │ ├── theme5.css │ │ └── xadmin.css │ │ ├── img │ │ ├── body_bg.png │ │ ├── bottom_bg.png │ │ ├── bottom_nav_1.png │ │ ├── bottom_nav_2.png │ │ ├── bottom_nav_3.png │ │ ├── bsjl_img1.png │ │ ├── bsjl_img2.png │ │ ├── bsjl_img3.png │ │ ├── dt_bg.png │ │ ├── dt_bg2.png │ │ ├── index-tx.png │ │ ├── index_banner.png │ │ ├── index_banner.png_bak │ │ ├── inform_bg-bottom.png │ │ ├── inform_bg-center.png │ │ ├── inform_bg-top.png │ │ ├── inform_bg.png │ │ ├── inform_bg2.png │ │ ├── inform_bg_ul-li.png │ │ ├── inform_bg_ul.png │ │ ├── inform_bigBg.png │ │ ├── inform_new.png │ │ ├── inform_titleBg.png │ │ ├── inform_tz.png │ │ ├── inform_zd.png │ │ ├── lc_bg.png │ │ ├── login_bg.png │ │ ├── login_bg_form.png │ │ ├── login_icon1.png │ │ ├── login_icon2.png │ │ ├── login_icon3.png │ │ ├── logo.png │ │ ├── logo_bg.png │ │ ├── name_bg.png │ │ ├── nav_bg.png │ │ ├── question2_fhj.png │ │ ├── question2_input.png │ │ ├── question2_tjbg.png │ │ ├── question2_wtBG.png │ │ ├── questions_bt.png │ │ ├── questions_fh.png │ │ ├── questions_tckBG.png │ │ ├── questions_tcksc.png │ │ ├── questions_title_bg.png │ │ ├── questions_tk_tabBG.png │ │ ├── questions_tk_tabBGxz.png │ │ ├── questions_xz.png │ │ ├── questions_xzbt.png │ │ ├── ranking-ulBG.png │ │ ├── ranking_list_titleBG.png │ │ ├── ranking_ulBG.png │ │ ├── registe_bg.png │ │ ├── registe_icon1.png │ │ ├── registe_icon2.png │ │ ├── registe_icon3.png │ │ ├── registe_icon4.png │ │ ├── registe_icon5.png │ │ ├── reset-finish-bg.png │ │ ├── result_nonrBG.png │ │ ├── result_pieBG.png │ │ ├── result_titleBG.png │ │ ├── result_wtBG.png │ │ ├── set-up-bg.png │ │ ├── setUp-txtBg.png │ │ ├── ssjj_bg.png │ │ ├── stfx_bg.png │ │ ├── stfx_icon1.png │ │ ├── stfx_icon2.png │ │ ├── stfx_icon3.png │ │ ├── stfx_icon4.png │ │ ├── stfx_icon5.png │ │ ├── stfx_icon6.png │ │ ├── stfx_title1.png │ │ ├── stfx_title2.png │ │ ├── theory_input1.png │ │ ├── theory_modalBody_bg.png │ │ ├── theory_nr_bg.png │ │ ├── theory_st_bg.png │ │ ├── time_bg.png │ │ ├── time_bg_xb.png │ │ ├── title_img1.png │ │ ├── title_img2.png │ │ ├── top_bg.png │ │ ├── user_bg.png │ │ ├── user_bg_djh.png │ │ ├── user_tableBg.png │ │ ├── user_titleBG.png │ │ ├── xiahua.png │ │ ├── xialadian.png │ │ └── xialatiao.png │ │ ├── js │ │ ├── css │ │ │ └── modules │ │ │ │ ├── code.css │ │ │ │ └── layer │ │ │ │ └── default │ │ │ │ ├── icon-ext.png │ │ │ │ ├── icon.png │ │ │ │ ├── layer.css │ │ │ │ ├── loading-0.gif │ │ │ │ ├── loading-1.gif │ │ │ │ └── loading-2.gif │ │ ├── echarts.min.js │ │ ├── formSelects-v4.min.js │ │ ├── jquery-1.9.1.min.js │ │ ├── jquery.min.js │ │ ├── jquery.page.js │ │ ├── jquery.validate.min.js │ │ ├── lay │ │ │ └── modules │ │ │ │ ├── carousel.js │ │ │ │ ├── code.js │ │ │ │ ├── colorpicker.js │ │ │ │ ├── element.js │ │ │ │ ├── flow.js │ │ │ │ ├── form.js │ │ │ │ ├── jquery.js │ │ │ │ ├── laydate.js │ │ │ │ ├── layedit.js │ │ │ │ ├── layer.js │ │ │ │ ├── laypage.js │ │ │ │ ├── laytpl.js │ │ │ │ ├── mobile.js │ │ │ │ ├── rate.js │ │ │ │ ├── slider.js │ │ │ │ ├── table.js │ │ │ │ ├── transfer.js │ │ │ │ ├── tree.js │ │ │ │ ├── upload.js │ │ │ │ └── util.js │ │ ├── layui.all.js │ │ ├── layui.js │ │ ├── login.js │ │ ├── moment.js │ │ ├── scrollbar.js │ │ ├── xadmin.js │ │ └── xcity.js │ │ ├── lib │ │ └── layui │ │ │ ├── css │ │ │ ├── layui.css │ │ │ ├── layui.mobile.css │ │ │ └── modules │ │ │ │ ├── code.css │ │ │ │ ├── laydate │ │ │ │ └── default │ │ │ │ │ └── laydate.css │ │ │ │ └── layer │ │ │ │ └── default │ │ │ │ ├── icon-ext.png │ │ │ │ ├── icon.png │ │ │ │ ├── layer.css │ │ │ │ ├── loading-0.gif │ │ │ │ ├── loading-1.gif │ │ │ │ └── loading-2.gif │ │ │ ├── font │ │ │ ├── iconfont.eot │ │ │ ├── iconfont.svg │ │ │ ├── iconfont.ttf │ │ │ └── iconfont.woff │ │ │ ├── images │ │ │ └── face │ │ │ │ ├── 0.gif │ │ │ │ ├── 1.gif │ │ │ │ ├── 10.gif │ │ │ │ ├── 11.gif │ │ │ │ ├── 12.gif │ │ │ │ ├── 13.gif │ │ │ │ ├── 14.gif │ │ │ │ ├── 15.gif │ │ │ │ ├── 16.gif │ │ │ │ ├── 17.gif │ │ │ │ ├── 18.gif │ │ │ │ ├── 19.gif │ │ │ │ ├── 2.gif │ │ │ │ ├── 20.gif │ │ │ │ ├── 21.gif │ │ │ │ ├── 22.gif │ │ │ │ ├── 23.gif │ │ │ │ ├── 24.gif │ │ │ │ ├── 25.gif │ │ │ │ ├── 26.gif │ │ │ │ ├── 27.gif │ │ │ │ ├── 28.gif │ │ │ │ ├── 29.gif │ │ │ │ ├── 3.gif │ │ │ │ ├── 30.gif │ │ │ │ ├── 31.gif │ │ │ │ ├── 32.gif │ │ │ │ ├── 33.gif │ │ │ │ ├── 34.gif │ │ │ │ ├── 35.gif │ │ │ │ ├── 36.gif │ │ │ │ ├── 37.gif │ │ │ │ ├── 38.gif │ │ │ │ ├── 39.gif │ │ │ │ ├── 4.gif │ │ │ │ ├── 40.gif │ │ │ │ ├── 41.gif │ │ │ │ ├── 42.gif │ │ │ │ ├── 43.gif │ │ │ │ ├── 44.gif │ │ │ │ ├── 45.gif │ │ │ │ ├── 46.gif │ │ │ │ ├── 47.gif │ │ │ │ ├── 48.gif │ │ │ │ ├── 49.gif │ │ │ │ ├── 5.gif │ │ │ │ ├── 50.gif │ │ │ │ ├── 51.gif │ │ │ │ ├── 52.gif │ │ │ │ ├── 53.gif │ │ │ │ ├── 54.gif │ │ │ │ ├── 55.gif │ │ │ │ ├── 56.gif │ │ │ │ ├── 57.gif │ │ │ │ ├── 58.gif │ │ │ │ ├── 59.gif │ │ │ │ ├── 6.gif │ │ │ │ ├── 60.gif │ │ │ │ ├── 61.gif │ │ │ │ ├── 62.gif │ │ │ │ ├── 63.gif │ │ │ │ ├── 64.gif │ │ │ │ ├── 65.gif │ │ │ │ ├── 66.gif │ │ │ │ ├── 67.gif │ │ │ │ ├── 68.gif │ │ │ │ ├── 69.gif │ │ │ │ ├── 7.gif │ │ │ │ ├── 70.gif │ │ │ │ ├── 71.gif │ │ │ │ ├── 8.gif │ │ │ │ └── 9.gif │ │ │ ├── lay │ │ │ └── modules │ │ │ │ ├── carousel.js │ │ │ │ ├── code.js │ │ │ │ ├── colorpicker.js │ │ │ │ ├── element.js │ │ │ │ ├── flow.js │ │ │ │ ├── form.js │ │ │ │ ├── jquery.js │ │ │ │ ├── laydate.js │ │ │ │ ├── layedit.js │ │ │ │ ├── layer.js │ │ │ │ ├── laypage.js │ │ │ │ ├── laytpl.js │ │ │ │ ├── mobile.js │ │ │ │ ├── rate.js │ │ │ │ ├── slider.js │ │ │ │ ├── table.js │ │ │ │ ├── tree.js │ │ │ │ ├── upload.js │ │ │ │ └── util.js │ │ │ ├── layui.all.js │ │ │ └── layui.js │ │ └── uploads │ │ └── c2e249483cd5b35aa3e3bcd3ab414cd6.zip ├── templates │ └── front │ │ ├── 404.html │ │ ├── include │ │ └── nav.html │ │ ├── index.html │ │ ├── login.html │ │ ├── players.html │ │ ├── ranking.html │ │ ├── register.html │ │ ├── stat.html │ │ ├── topic.html │ │ └── topics.html └── views │ ├── __init__.py │ ├── captcha.py │ ├── errors.py │ ├── flag.py │ ├── images.py │ ├── index.py │ ├── personal.py │ ├── rank.py │ ├── topics.py │ └── users.py ├── librarys ├── __init__.py ├── common │ ├── __init__.py │ ├── dockers.py │ ├── flags.py │ └── tools.py ├── exception.py ├── mixin │ ├── __init__.py │ └── permission.py ├── safety │ ├── __init__.py │ └── xss.py └── utils │ ├── __init__.py │ ├── calculation.py │ ├── files.py │ └── strings.py ├── manage.py ├── requirements.txt ├── settings ├── __init__.py ├── base.py ├── config.py ├── dev.py └── prod.py ├── shell ├── debian_run.sh └── redhat_run.sh ├── urls.py ├── websocket.py └── wsgi.py /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: 请使用这个中文模板提交Bug 3 | about: "请务必按照模板提交Bug\U0001F64F" 4 | title: 请填写BUG标题 5 | labels: bug 6 | assignees: thunder 7 | 8 | --- 9 | 10 | **是否使用了最新代码** 11 | 是或否(如果不是的话尝试克隆最新的代码再跑一下!) 12 | 13 | **Bug描述** 14 | 清晰而简洁的Bug描述(必写) 15 | 16 | **运行环境** 17 | - 系统:[例如Windows 10 x64](必写) 18 | 19 | **如何复现** 20 | 复现步骤(选写) 21 | 22 | 复现命令(必写) 23 | 24 | **报错文本** 25 | 复制完整的报错文本(必写) 26 | 27 | **预期结果** 28 | 清晰而简洁的预期结果描述(选写,如正常情况应该是怎么样的) 29 | 30 | **实际结果** 31 | 清晰而简洁的实际结果描述(选写,如出现什么错误) 32 | 33 | **屏幕截图** 34 | 完整golang执行流程截图(建议上传) 35 | 36 | **其他补充** 37 | 关于bug的其他一些补充说明 -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ⚔️黑石碑系统 2 | 3 | **项目正在快速迭代中,请即时更新源代码 [源地址](http://www.github.com/thunderbarca/BlackStone)** 4 | 5 | ![黑石碑](doc/img/stone.png) 6 | 7 | ## 0x01 🍉功能介绍 8 | 该平台是一个CTF比赛平台,可用于企业进行内部人员进行CTF竞赛以及培训. 9 | 10 | 目前平台还在持续开发中。如果对你有帮助,可以帮我点亮小星星,这对我非常重要。 11 | 12 | ## 0x02 🥝系统结构 13 | 14 | ### 开发框架 15 | 16 | 基础语言: **Python(3.9.1)** 17 | 18 | Web框架: **django(3.1.5)** 19 | 20 | 数据库: **Postgresql 13** 21 | 22 | 前端: **Layu-imini** 23 | 24 | ## 0x03 🍓功能介绍 25 | 26 | **前台页面** 27 | ![](doc/img/img1.png) 28 | 29 | **管理页面** 30 | ![](doc/img/img2.png) 31 | 32 | ## 0x04 🖨安装教程 33 | 34 | ### 0x001 一键部署 35 | 36 | 我把步骤都写在shell脚本里, 安装完成就是正式环境 37 | 38 | debian系用户(Debian, Ubuntu, kali)建议运行debian_run.sh,会使用国内源进行安装 39 | ```bash 40 | git clone http://www.github.com/thunderbarca/BlackStone.git 41 | cd BlackStone 42 | source shell/debian_run.sh 43 | ``` 44 | 45 | 红帽系操作系统(包括redhat, fedora, centos)请用redhat_run.sh 46 | ```bash 47 | git clone http://www.github.com/thunderbarca/BlackStone.git 48 | cd BlackStone 49 | source shell/redhat_run.sh 50 | ``` 51 | 52 | ### 0x002 正式启动系统(开发模式) 53 | ```bash 54 | source ~/.bashrc 55 | python3 manager.py runserver 0.0.0.0:8000 56 | ``` 57 | 58 | 默认的用户名和密码是luffy:shadow 59 | 60 | ## 0x05 ⏰长期更新 61 | - [ ] 各视图的协调优化以及BUG修复 62 | - [ ] 前台成绩刷新改成websocket 63 | - [ ] 动态FLAG实现 64 | - [ ] 增加团队竞赛模式 65 | - [x] 分数动态计算 66 | 67 | ## 0x06 🎛题目部署 68 | 详情请参阅[部署](doc/DEPLOY.md) 69 | 70 | ## 0x07 🏓版权协议 71 | 该项目签署了GPL-3.0授权许可,详情请参阅[COPING](doc/COPYING)。 -------------------------------------------------------------------------------- /asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for BlackStone project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | from websocket import websocket_application 14 | 15 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings.dev') 16 | 17 | django_application = get_asgi_application() 18 | 19 | 20 | async def application(scope, receive, send): 21 | if scope['type'] == 'http': 22 | await django_application(scope, receive, send) 23 | elif scope['type'] == 'websocket': 24 | await websocket_application(scope, receive, send) 25 | else: 26 | raise NotImplementedError(f"Unknown scope type {scope['type']}") 27 | -------------------------------------------------------------------------------- /backend/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/__init__.py -------------------------------------------------------------------------------- /backend/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class BackendConfig(AppConfig): 5 | name = 'backend' 6 | -------------------------------------------------------------------------------- /backend/migrations/0002_auto_20210117_2002.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-17 20:02 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('backend', '0001_initial'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='category', 15 | name='id', 16 | field=models.CharField(max_length=64, primary_key=True, serialize=False), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /backend/migrations/0003_auto_20210117_2017.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-17 20:17 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('backend', '0002_auto_20210117_2002'), 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='Containers', 15 | fields=[ 16 | ('id', models.CharField(max_length=64, primary_key=True, serialize=False)), 17 | ('create_date', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')), 18 | ('username', models.CharField(max_length=30)), 19 | ('image_id', models.CharField(max_length=512)), 20 | ('image_tag', models.CharField(max_length=216)), 21 | ('image_name', models.CharField(default='1', max_length=216)), 22 | ('inside_port', models.CharField(max_length=128)), 23 | ('outside_port', models.CharField(max_length=128)), 24 | ('contain', models.CharField(max_length=512)), 25 | ('status', models.CharField(default='1', max_length=512)), 26 | ], 27 | ), 28 | migrations.AddField( 29 | model_name='dockername', 30 | name='display', 31 | field=models.BooleanField(default=True), 32 | ), 33 | ] 34 | -------------------------------------------------------------------------------- /backend/migrations/0004_auto_20210117_2311.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-17 23:11 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('backend', '0003_auto_20210117_2017'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameModel( 14 | old_name='DockerName', 15 | new_name='TopicName', 16 | ), 17 | ] 18 | -------------------------------------------------------------------------------- /backend/migrations/0005_auto_20210118_0856.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-18 08:56 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('backend', '0004_auto_20210117_2311'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameField( 14 | model_name='topicname', 15 | old_name='image_description', 16 | new_name='topic_description', 17 | ), 18 | migrations.RenameField( 19 | model_name='topicname', 20 | old_name='image_name', 21 | new_name='topic_name', 22 | ), 23 | ] 24 | -------------------------------------------------------------------------------- /backend/migrations/0006_auto_20210118_0926.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-18 09:26 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('backend', '0005_auto_20210118_0856'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='topicname', 15 | name='inside_port', 16 | field=models.CharField(default='80', max_length=126), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /backend/migrations/0007_auto_20210118_0931.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-18 09:31 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('backend', '0006_auto_20210118_0926'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameField( 14 | model_name='topicname', 15 | old_name='images_tag', 16 | new_name='image_tag', 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /backend/migrations/0008_auto_20210118_1453.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-18 14:53 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('backend', '0007_auto_20210118_0931'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AlterField( 14 | model_name='topicname', 15 | name='image_tag', 16 | field=models.CharField(max_length=45, null=True, unique=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /backend/migrations/0009_resolver.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-18 15:10 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('backend', '0008_auto_20210118_1453'), 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='Resolver', 15 | fields=[ 16 | ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), 17 | ('address', models.CharField(blank=True, max_length=30, null=True, verbose_name='地址')), 18 | ('create_date', models.DateTimeField(auto_now_add=True, null=True, verbose_name='创建时间')), 19 | ('username', models.CharField(blank=True, max_length=30, null=True, verbose_name='用户')), 20 | ('score', models.IntegerField(default=0)), 21 | ('image_name', models.CharField(default='default', max_length=30)), 22 | ('category', models.CharField(max_length=1024)), 23 | ('type', models.CharField(default='docker', max_length=32)), 24 | ('answer', models.BooleanField(default=False)), 25 | ], 26 | ), 27 | ] 28 | -------------------------------------------------------------------------------- /backend/migrations/0010_auto_20210118_1620.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-18 16:20 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('backend', '0009_resolver'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameField( 14 | model_name='resolver', 15 | old_name='image_name', 16 | new_name='topic_name', 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /backend/migrations/0011_auto_20210118_2002.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-18 20:02 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('backend', '0010_auto_20210118_1620'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameField( 14 | model_name='containers', 15 | old_name='image_name', 16 | new_name='topic_name', 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /backend/migrations/0012_auto_20210118_2044.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-18 20:44 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('backend', '0011_auto_20210118_2002'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameField( 14 | model_name='resolver', 15 | old_name='address', 16 | new_name='image_tag', 17 | ), 18 | migrations.RenameField( 19 | model_name='topicname', 20 | old_name='images_status', 21 | new_name='image_status', 22 | ), 23 | ] 24 | -------------------------------------------------------------------------------- /backend/migrations/0013_auto_20210122_1747.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-22 17:47 2 | 3 | from django.db import migrations, models 4 | import django.db.models.deletion 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ('backend', '0012_auto_20210118_2044'), 11 | ] 12 | 13 | operations = [ 14 | migrations.AlterModelOptions( 15 | name='category', 16 | options={'ordering': ['create_date']}, 17 | ), 18 | migrations.AlterModelOptions( 19 | name='topicname', 20 | options={'ordering': ['create_date']}, 21 | ), 22 | migrations.AlterField( 23 | model_name='topicname', 24 | name='category', 25 | field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='category', to='backend.category', verbose_name='镜像分类'), 26 | ), 27 | migrations.AlterField( 28 | model_name='topicname', 29 | name='image_tag', 30 | field=models.CharField(max_length=45, null=True), 31 | ), 32 | ] 33 | -------------------------------------------------------------------------------- /backend/migrations/0014_auto_20210125_1839.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-25 18:39 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('backend', '0013_auto_20210122_1747'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='topicname', 15 | name='flag_type', 16 | field=models.CharField(default='static', max_length=32), 17 | ), 18 | migrations.AlterField( 19 | model_name='topicname', 20 | name='flag_strings', 21 | field=models.CharField(default='flag{}', max_length=125, null=True), 22 | ), 23 | ] 24 | -------------------------------------------------------------------------------- /backend/migrations/0015_containers_flag_string.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-25 19:06 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('backend', '0014_auto_20210125_1839'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='containers', 15 | name='flag_string', 16 | field=models.CharField(default='1', max_length=128, null=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /backend/migrations/0016_auto_20210125_2143.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-25 21:43 2 | 3 | from django.db import migrations 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('backend', '0015_containers_flag_string'), 10 | ] 11 | 12 | operations = [ 13 | migrations.RenameField( 14 | model_name='topicname', 15 | old_name='flag_strings', 16 | new_name='flag_string', 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /backend/migrations/0017_resolver_address.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-26 11:19 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('backend', '0016_auto_20210125_2143'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='resolver', 15 | name='address', 16 | field=models.CharField(max_length=32, null=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /backend/migrations/0018_topicname_score_type.py: -------------------------------------------------------------------------------- 1 | # Generated by Django 3.1.5 on 2021-01-26 22:00 2 | 3 | from django.db import migrations, models 4 | 5 | 6 | class Migration(migrations.Migration): 7 | 8 | dependencies = [ 9 | ('backend', '0017_resolver_address'), 10 | ] 11 | 12 | operations = [ 13 | migrations.AddField( 14 | model_name='topicname', 15 | name='score_type', 16 | field=models.BooleanField(default=True), 17 | ), 18 | ] 19 | -------------------------------------------------------------------------------- /backend/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/migrations/__init__.py -------------------------------------------------------------------------------- /backend/models/__init__.py: -------------------------------------------------------------------------------- 1 | from backend.models.users import * 2 | from backend.models.dockers import * 3 | from backend.models.category import * 4 | -------------------------------------------------------------------------------- /backend/models/category.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | 4 | class Category(models.Model): 5 | id = models.CharField(max_length=64, primary_key=True) 6 | category_name = models.CharField(max_length=30, unique=True) 7 | create_date = models.DateTimeField('创建时间', auto_now_add=True, null=True) 8 | 9 | class Meta: 10 | ordering = ['create_date'] 11 | 12 | def __str__(self): 13 | return f"<{self.category_name} Category Model>" 14 | -------------------------------------------------------------------------------- /backend/models/users.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | from django.contrib.auth.models import AbstractUser 3 | 4 | 5 | class Users(AbstractUser): 6 | id = models.CharField(max_length=64, primary_key=True) 7 | create_date = models.DateTimeField('创建时间', auto_now_add=True, null=True) 8 | nickname = models.CharField(max_length=32, blank=True, null=True, verbose_name='昵称') 9 | sex = models.CharField(max_length=8, default='男') 10 | is_superuser = models.BooleanField() 11 | remark = models.CharField(max_length=128, blank=True, null=True, verbose_name='备注') 12 | last_ip = models.CharField(max_length=64, default="", verbose_name='最后登录的IP') 13 | last_time = models.CharField(max_length=32, default="", verbose_name='最后的登录时间') 14 | 15 | class Meta: 16 | verbose_name = '用户' 17 | verbose_name_plural = verbose_name 18 | ordering = ['-create_date'] 19 | 20 | def __str__(self): 21 | return f"<{self.username}> Model" 22 | 23 | 24 | class Players(models.Model): 25 | id = models.CharField(max_length=64, primary_key=True) 26 | create_date = models.DateTimeField('创建时间', auto_now_add=True, null=True) 27 | username = models.CharField(max_length=32, blank=True, null=True, verbose_name='用户名') 28 | address = models.CharField(max_length=64, blank=True, null=True, verbose_name='地址') 29 | password = models.CharField(max_length=128, blank=True, null=True, verbose_name='密码哈希') 30 | 31 | class Meta: 32 | verbose_name = '参赛者' 33 | ordering = ['-create_date'] 34 | 35 | def __str__(self): 36 | return f"<{self.username}> Model" 37 | -------------------------------------------------------------------------------- /backend/static/backend/css/public.css: -------------------------------------------------------------------------------- 1 | body { 2 | margin: 15px 15px 15px 15px; 3 | background: #f2f2f2; 4 | } 5 | 6 | .layuimini-container { 7 | border: 1px solid #f2f2f2; 8 | border-radius: 5px; 9 | background-color: #ffffff 10 | } 11 | 12 | .layuimini-main { 13 | margin: 10px 10px 10px 10px; 14 | } 15 | 16 | /**必填红点 */ 17 | .layuimini-form > .layui-form-item > .required:after { 18 | content: '*'; 19 | color: red; 20 | position: absolute; 21 | margin-left: 4px; 22 | font-weight: bold; 23 | line-height: 1.8em; 24 | top: 6px; 25 | right: 5px; 26 | } 27 | 28 | .layuimini-form > .layui-form-item > .layui-form-label { 29 | width: 120px !important; 30 | } 31 | 32 | .layuimini-form > .layui-form-item > .layui-input-block { 33 | margin-left: 150px !important; 34 | } 35 | 36 | .layuimini-form > .layui-form-item > .layui-input-block > tip { 37 | display: inline-block; 38 | margin-top: 10px; 39 | line-height: 10px; 40 | font-size: 10px; 41 | color: #a29c9c; 42 | } 43 | 44 | /**搜索框*/ 45 | .layuimini-container .table-search-fieldset { 46 | margin: 0; 47 | border: 1px solid #e6e6e6; 48 | padding: 10px 20px 5px 20px; 49 | color: #6b6b6b; 50 | } 51 | 52 | /**自定义滚动条样式 */ 53 | ::-webkit-scrollbar { 54 | width: 6px; 55 | height: 6px 56 | } 57 | 58 | ::-webkit-scrollbar-track { 59 | background-color: transparent; 60 | -webkit-border-radius: 2em; 61 | -moz-border-radius: 2em; 62 | border-radius: 2em; 63 | } 64 | 65 | ::-webkit-scrollbar-thumb { 66 | background-color: #9c9da0; 67 | -webkit-border-radius: 2em; 68 | -moz-border-radius: 2em; 69 | border-radius: 2em 70 | } 71 | -------------------------------------------------------------------------------- /backend/static/backend/font/kumo.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/font/kumo.ttf -------------------------------------------------------------------------------- /backend/static/backend/images/bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/images/bg.jpg -------------------------------------------------------------------------------- /backend/static/backend/images/captcha.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/images/captcha.jpg -------------------------------------------------------------------------------- /backend/static/backend/images/donate_qrcode.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/images/donate_qrcode.png -------------------------------------------------------------------------------- /backend/static/backend/images/favicon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/images/favicon.ico -------------------------------------------------------------------------------- /backend/static/backend/images/home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/images/home.png -------------------------------------------------------------------------------- /backend/static/backend/images/icon-login.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/images/icon-login.png -------------------------------------------------------------------------------- /backend/static/backend/images/loginbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/images/loginbg.png -------------------------------------------------------------------------------- /backend/static/backend/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/images/logo.png -------------------------------------------------------------------------------- /backend/static/backend/js/lay-config.js: -------------------------------------------------------------------------------- 1 | /** 2 | * date:2019/08/16 3 | * author:Mr.Chung 4 | * description:此处放layui自定义扩展 5 | * version:2.0.4 6 | */ 7 | 8 | window.rootPath = (function (src) { 9 | src = document.scripts[document.scripts.length - 1].src; 10 | return src.substring(0, src.lastIndexOf("/") + 1); 11 | })(); 12 | 13 | layui.config({ 14 | base: rootPath + "lay-module/", 15 | version: true 16 | }).extend({ 17 | miniAdmin: "layuimini/miniAdmin", // layuimini后台扩展 18 | miniMenu: "layuimini/miniMenu", // layuimini菜单扩展 19 | miniTab: "layuimini/miniTab", // layuimini tab扩展 20 | miniTheme: "layuimini/miniTheme", // layuimini 主题扩展 21 | miniTongji: "layuimini/miniTongji", // layuimini 统计扩展 22 | step: 'step-lay/step', // 分步表单扩展 23 | treetable: 'treetable-lay/treetable', //table树形扩展 24 | tableSelect: 'tableSelect/tableSelect', // table选择扩展 25 | iconPickerFa: 'iconPicker/iconPickerFa', // fa图标选择扩展 26 | echarts: 'echarts/echarts', // echarts图表扩展 27 | echartsTheme: 'echarts/echartsTheme', // echarts图表主题扩展 28 | wangEditor: 'wangEditor/wangEditor', // wangEditor富文本扩展 29 | layarea: 'layarea/layarea', // 省市县区三级联动下拉选择器 30 | }); 31 | -------------------------------------------------------------------------------- /backend/static/backend/js/lay-module/layuimini/miniTongji.js: -------------------------------------------------------------------------------- 1 | /** 2 | * date:2020/03/01 3 | * author:Mr.Chung 4 | * version:2.0 5 | * description:layuimini 统计框架扩展 6 | */ 7 | layui.define(["jquery"], function (exports) { 8 | var $ = layui.$; 9 | 10 | var miniTongji = { 11 | 12 | /** 13 | * 初始化 14 | * @param options 15 | */ 16 | render: function (options) { 17 | options.specific = options.specific || false; 18 | options.domains = options.domains || []; 19 | var domain = window.location.hostname; 20 | if (options.specific === false || (options.specific === true && options.domains.indexOf(domain) >=0)) { 21 | miniTongji.listen(); 22 | } 23 | }, 24 | 25 | /** 26 | * 监听统计代码 27 | */ 28 | listen: function () { 29 | var _hmt = _hmt || []; 30 | (function () { 31 | var hm = document.createElement("script"); 32 | hm.src = "https://hm.baidu.com/hm.js?d97abf6d61c21d773f97835defbdef4e"; 33 | var s = document.getElementsByTagName("script")[0]; 34 | s.parentNode.insertBefore(hm, s); 35 | })(); 36 | } 37 | }; 38 | 39 | exports("miniTongji", miniTongji); 40 | }); -------------------------------------------------------------------------------- /backend/static/backend/js/lay-module/step-lay/step.css: -------------------------------------------------------------------------------- 1 | .lay-step { 2 | font-size: 0; 3 | width: 400px; 4 | margin: 0 auto; 5 | max-width: 100%; 6 | padding-left: 200px; 7 | } 8 | 9 | .step-item { 10 | display: inline-block; 11 | line-height: 26px; 12 | position: relative; 13 | font-size: 14px; 14 | } 15 | 16 | .step-item-tail { 17 | width: 100%; 18 | padding: 0 10px; 19 | position: absolute; 20 | left: 0; 21 | top: 13px; 22 | } 23 | 24 | .step-item-tail i { 25 | display: inline-block; 26 | width: 100%; 27 | height: 1px; 28 | vertical-align: top; 29 | background: #c2c2c2; 30 | position: relative; 31 | } 32 | 33 | .step-item-tail .step-item-tail-done { 34 | background: #009688; 35 | } 36 | 37 | .step-item-head { 38 | position: relative; 39 | display: inline-block; 40 | height: 26px; 41 | width: 26px; 42 | text-align: center; 43 | vertical-align: top; 44 | color: #009688; 45 | border: 1px solid #009688; 46 | border-radius: 50%; 47 | background: #ffffff; 48 | } 49 | 50 | .step-item-head.step-item-head-active { 51 | background: #009688; 52 | color: #ffffff; 53 | } 54 | 55 | .step-item-main { 56 | display: block; 57 | position: relative; 58 | margin-left: -50%; 59 | margin-right: 50%; 60 | padding-left: 26px; 61 | text-align: center; 62 | } 63 | 64 | .step-item-main-title { 65 | font-weight: bolder; 66 | color: #555555; 67 | } 68 | 69 | .step-item-main-desc { 70 | color: #aaaaaa; 71 | } 72 | 73 | .lay-step + [carousel-item]:before { 74 | display: none; 75 | } 76 | 77 | .lay-step + [carousel-item] > * { 78 | background-color: transparent; 79 | } -------------------------------------------------------------------------------- /backend/static/backend/js/lay-module/treetable-lay/treetable.css: -------------------------------------------------------------------------------- 1 | .treeTable-empty { 2 | width: 20px; 3 | display: inline-block; 4 | } 5 | 6 | .treeTable-icon { 7 | cursor: pointer; 8 | } 9 | 10 | .treeTable-icon .layui-icon-triangle-d:before { 11 | content: "\e623"; 12 | } 13 | 14 | .treeTable-icon.open .layui-icon-triangle-d:before { 15 | content: "\e625"; 16 | background-color: transparent; 17 | } 18 | 19 | -------------------------------------------------------------------------------- /backend/static/backend/js/lay-module/wangEditor/fonts/w-e-icon.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/js/lay-module/wangEditor/fonts/w-e-icon.woff -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/HELP-US-OUT.txt: -------------------------------------------------------------------------------- 1 | I hope you love Font Awesome. If you've found it useful, please do me a favor and check out my latest project, 2 | Fort Awesome (https://fortawesome.com). It makes it easy to put the perfect icons on your website. Choose from our awesome, 3 | comprehensive icon sets or copy and paste your own. 4 | 5 | Please. Check it out. 6 | 7 | -Dave Gandy 8 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/fonts/FontAwesome.otf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/font-awesome-4.7.0/fonts/FontAwesome.otf -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.eot -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/font-awesome-4.7.0/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/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 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/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 | .@{fa-css-prefix}-pull-left { float: left; } 11 | .@{fa-css-prefix}-pull-right { float: right; } 12 | 13 | .@{fa-css-prefix} { 14 | &.@{fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.@{fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .@{fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/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/@fa-line-height-base 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 | 12 | } 13 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/less/fixed-width.less: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .@{fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/less/font-awesome.less: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.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 | @import "screen-reader.less"; 19 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/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 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/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 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/less/mixins.less: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | .fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal @fa-font-size-base/@fa-line-height-base 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 | 12 | } 13 | 14 | .fa-icon-rotate(@degrees, @rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation})"; 16 | -webkit-transform: rotate(@degrees); 17 | -ms-transform: rotate(@degrees); 18 | transform: rotate(@degrees); 19 | } 20 | 21 | .fa-icon-flip(@horiz, @vert, @rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=@{rotation}, mirror=1)"; 23 | -webkit-transform: scale(@horiz, @vert); 24 | -ms-transform: scale(@horiz, @vert); 25 | transform: scale(@horiz, @vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | .sr-only() { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | .sr-only-focusable() { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/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 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/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 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/less/screen-reader.less: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { .sr-only(); } 5 | .sr-only-focusable { .sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/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 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/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 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/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 | .#{$fa-css-prefix}-pull-left { float: left; } 11 | .#{$fa-css-prefix}-pull-right { float: right; } 12 | 13 | .#{$fa-css-prefix} { 14 | &.#{$fa-css-prefix}-pull-left { margin-right: .3em; } 15 | &.#{$fa-css-prefix}-pull-right { margin-left: .3em; } 16 | } 17 | 18 | /* Deprecated as of 4.4.0 */ 19 | .pull-right { float: right; } 20 | .pull-left { float: left; } 21 | 22 | .#{$fa-css-prefix} { 23 | &.pull-left { margin-right: .3em; } 24 | &.pull-right { margin-left: .3em; } 25 | } 26 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/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}/#{$fa-line-height-base} 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 | 12 | } 13 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/scss/_fixed-width.scss: -------------------------------------------------------------------------------- 1 | // Fixed Width Icons 2 | // ------------------------- 3 | .#{$fa-css-prefix}-fw { 4 | width: (18em / 14); 5 | text-align: center; 6 | } 7 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/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 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/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 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/scss/_mixins.scss: -------------------------------------------------------------------------------- 1 | // Mixins 2 | // -------------------------- 3 | 4 | @mixin fa-icon() { 5 | display: inline-block; 6 | font: normal normal normal #{$fa-font-size-base}/#{$fa-line-height-base} 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 | 12 | } 13 | 14 | @mixin fa-icon-rotate($degrees, $rotation) { 15 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation})"; 16 | -webkit-transform: rotate($degrees); 17 | -ms-transform: rotate($degrees); 18 | transform: rotate($degrees); 19 | } 20 | 21 | @mixin fa-icon-flip($horiz, $vert, $rotation) { 22 | -ms-filter: "progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation}, mirror=1)"; 23 | -webkit-transform: scale($horiz, $vert); 24 | -ms-transform: scale($horiz, $vert); 25 | transform: scale($horiz, $vert); 26 | } 27 | 28 | 29 | // Only display content to screen readers. A la Bootstrap 4. 30 | // 31 | // See: http://a11yproject.com/posts/how-to-hide-content/ 32 | 33 | @mixin sr-only { 34 | position: absolute; 35 | width: 1px; 36 | height: 1px; 37 | padding: 0; 38 | margin: -1px; 39 | overflow: hidden; 40 | clip: rect(0,0,0,0); 41 | border: 0; 42 | } 43 | 44 | // Use in conjunction with .sr-only to only display content when it's focused. 45 | // 46 | // Useful for "Skip to main content" links; see http://www.w3.org/TR/2013/NOTE-WCAG20-TECHS-20130905/G1 47 | // 48 | // Credit: HTML5 Boilerplate 49 | 50 | @mixin sr-only-focusable { 51 | &:active, 52 | &:focus { 53 | position: static; 54 | width: auto; 55 | height: auto; 56 | margin: 0; 57 | overflow: visible; 58 | clip: auto; 59 | } 60 | } 61 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/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 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/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 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/scss/_screen-reader.scss: -------------------------------------------------------------------------------- 1 | // Screen Readers 2 | // ------------------------- 3 | 4 | .sr-only { @include sr-only(); } 5 | .sr-only-focusable { @include sr-only-focusable(); } 6 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/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 | -------------------------------------------------------------------------------- /backend/static/backend/lib/font-awesome-4.7.0/scss/font-awesome.scss: -------------------------------------------------------------------------------- 1 | /*! 2 | * Font Awesome 4.7.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 | @import "screen-reader"; 19 | -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.5 MIT License By https://www.layui.com */ 2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/font/iconfont.eot -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/font/iconfont.ttf -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/font/iconfont.woff -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/font/iconfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/font/iconfont.woff2 -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/0.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/1.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/10.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/11.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/12.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/13.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/14.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/15.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/16.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/17.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/18.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/19.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/2.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/20.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/21.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/22.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/23.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/24.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/25.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/26.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/27.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/28.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/28.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/29.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/3.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/30.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/31.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/31.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/32.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/33.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/33.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/34.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/34.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/35.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/36.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/36.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/37.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/37.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/38.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/38.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/39.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/39.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/4.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/40.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/41.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/42.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/43.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/43.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/44.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/44.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/45.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/46.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/46.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/47.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/47.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/48.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/48.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/49.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/49.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/5.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/50.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/51.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/51.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/52.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/53.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/53.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/54.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/54.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/55.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/56.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/56.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/57.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/57.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/58.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/58.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/59.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/59.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/6.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/60.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/60.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/61.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/61.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/62.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/62.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/63.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/63.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/64.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/64.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/65.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/65.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/66.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/66.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/67.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/67.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/68.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/68.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/69.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/69.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/7.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/70.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/70.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/71.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/71.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/8.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/images/face/9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/static/backend/lib/layui-v2.5.5/images/face/9.gif -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/lay/modules/code.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.$,l="http://www.layui.com/doc/modules/code.html";e("code",function(e){var t=[];e=e||{},e.elem=a(e.elem||".layui-code"),e.about=!("about"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr("lay-encode")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
  1. '+o.replace(/[\r\t\n]+/g,"
  2. ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend('

'+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/lay/modules/flow.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('
'+d+"
");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)}); -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/lay/modules/laytpl.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.5 MIT License By https://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var c="Laytpl Error:";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)}); -------------------------------------------------------------------------------- /backend/static/backend/lib/layui-v2.5.5/lay/modules/rate.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.jquery,i={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,a){return layui.onevent.call(this,n,e,a)}},l=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n="rate",t="layui-rate",o="layui-icon-rate",s="layui-icon-rate-solid",u="layui-icon-rate-half",r="layui-icon-rate-solid layui-icon-rate-half",c="layui-icon-rate-solid layui-icon-rate",f="layui-icon-rate layui-icon-rate-half",v=function(e){var l=this;l.index=++i.index,l.config=a.extend({},l.config,i.config,e),l.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""},v.prototype.render=function(){var e=this,i=e.config,l=i.theme?'style="color: '+i.theme+';"':"";i.elem=a(i.elem),parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value)));for(var n='"+(i.text?''+i.value+"星":"")+"";var c=i.elem,f=c.next("."+t);f[0]&&f.remove(),e.elemTemp=a(n),i.span=e.elemTemp.next("span"),i.setText&&i.setText(i.value),c.html(e.elemTemp),c.addClass("layui-inline"),i.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,i=a.config;i.value=e,a.render()},v.prototype.action=function(){var e=this,i=e.config,l=e.elemTemp,n=l.find("i").width();l.children("li").each(function(e){var t=e+1,v=a(this);v.on("click",function(e){if(i.value=t,i.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(i.value=i.value-.5)}i.text&&l.next("span").text(i.value+"星"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),v.on("mousemove",function(e){if(l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+t+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children("i").addClass(u).removeClass(s)}}),v.on("mouseleave",function(){l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+Math.floor(i.value)+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half&&parseInt(i.value)!==i.value&&l.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(u).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},i.render=function(e){var a=new v(e);return l.call(a)},e(n,i)}); -------------------------------------------------------------------------------- /backend/templates/backend/page/category/add.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | {% load static %} 5 | 6 | layui 7 | 8 | 9 | 10 | 11 | 12 | 17 | 18 | 19 |
20 |
21 | 22 |
23 | 25 | 填写标签名称, 例如: WEB, PWN。 26 |
27 |
28 | 29 | 30 |
31 |
32 | 33 |
34 |
35 |
36 | 37 | 75 | 76 | -------------------------------------------------------------------------------- /backend/views/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/backend/views/__init__.py -------------------------------------------------------------------------------- /backend/views/container.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.views.generic import View 3 | from django.http import JsonResponse 4 | from django.utils.decorators import method_decorator 5 | from django.views.decorators.clickjacking import xframe_options_exempt 6 | 7 | from librarys.mixin.permission import AdminRequiredMixin 8 | from librarys.common.dockers import ImageStop 9 | 10 | from backend.models.dockers import Containers 11 | 12 | 13 | class ContainerView(AdminRequiredMixin, View): 14 | template_name = "backend/page/container/table.html" 15 | 16 | @method_decorator(xframe_options_exempt) 17 | def get(self, request): 18 | return render(request, self.template_name) 19 | 20 | @staticmethod 21 | def post(request): 22 | uid = request.POST.get("id", "") 23 | action = request.POST.get("action", "") 24 | operate = request.POST.get("operate", "") 25 | 26 | if operate == "delete": 27 | 28 | if action == "each": 29 | Containers.objects.filter(id=uid).delete() 30 | 31 | elif action == "batch": 32 | container_id = uid.split(",") 33 | Containers.objects.filter(id__in=container_id).delete() 34 | 35 | elif action == "all": 36 | containers = Containers.objects.all() 37 | for i in containers: 38 | if i.status == "Running": 39 | # 启用分线程关闭容器 40 | obj = ImageStop(i.contain) 41 | obj.start() 42 | 43 | containers.delete() 44 | 45 | else: 46 | data = {"status": 403, "msg": "方式错误"} 47 | return JsonResponse(data, safe=False) 48 | 49 | data = {"status": 200, "msg": "容器删除成功"} 50 | return JsonResponse(data, safe=False) 51 | 52 | elif operate == "stop": 53 | nums = Containers.objects.filter(id=uid).count() 54 | if nums > 0: 55 | container = Containers.objects.get(id=uid) 56 | container.status = "Stop" 57 | container.save() 58 | 59 | # 启用分线程关闭容器 60 | obj = ImageStop(container.contain) 61 | obj.start() 62 | 63 | data = {"status": 200, "msg": "容器终止"} 64 | return JsonResponse(data, safe=False) 65 | -------------------------------------------------------------------------------- /backend/views/index.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.shortcuts import HttpResponse 3 | from django.http import JsonResponse 4 | from django.contrib.auth import logout 5 | from django.contrib.auth import authenticate 6 | from django.views.generic import View 7 | from django.utils.decorators import method_decorator 8 | from django.views.decorators.clickjacking import xframe_options_exempt 9 | 10 | from librarys.mixin.permission import AdminRequiredMixin 11 | from backend.models.users import Users 12 | 13 | 14 | class IndexView(AdminRequiredMixin, View): 15 | template_name = "backend/index.html" 16 | title = "管理" 17 | 18 | def get(self, request): 19 | return render(request, self.template_name, {'title': self.title}) 20 | 21 | 22 | class LogoutView(AdminRequiredMixin, View): 23 | 24 | @staticmethod 25 | def get(request): 26 | logout(request) 27 | data = {"status": 200} 28 | return JsonResponse(data, safe=False) 29 | 30 | 31 | class ChangeView(AdminRequiredMixin, View): 32 | template_name = "backend/page/change.html" 33 | title = "修改密码" 34 | 35 | @method_decorator(xframe_options_exempt) 36 | def get(self, request): 37 | return render(request, self.template_name, {'title': self.title}) 38 | 39 | @staticmethod 40 | def post(request): 41 | password0 = request.POST.get("old_password", "") 42 | password1 = request.POST.get("new_password", "") 43 | password2 = request.POST.get("again_password", "") 44 | 45 | if password1 != password2: 46 | data = {"status": 403, "msg": "两次密码不同"} 47 | return JsonResponse(data, safe=False) 48 | 49 | user = authenticate(username=request.user.username, password=password0) 50 | 51 | if user is not None and user.is_active: 52 | user.set_password(password1) 53 | user.save() 54 | 55 | data = {"status": 200, "msg": "密码修改成功"} 56 | return JsonResponse(data, safe=False) 57 | 58 | else: 59 | data = {"status": 403, "msg": "旧密码不匹配"} 60 | return JsonResponse(data, safe=False) 61 | 62 | 63 | class RegView(View): 64 | 65 | @staticmethod 66 | def get(request): 67 | user = Users.objects.filter(username="luffy") 68 | if user.count() != 0: 69 | return "用户已存在" 70 | 71 | Users.objects.create_user(username="luffy", password="shadow", is_superuser=True) 72 | 73 | return HttpResponse("shadow") 74 | -------------------------------------------------------------------------------- /backend/views/login.py: -------------------------------------------------------------------------------- 1 | from django.views.generic import View 2 | from django.contrib.auth import authenticate 3 | from django.contrib.auth import login 4 | from django.shortcuts import render 5 | from django.shortcuts import reverse 6 | from django.http import JsonResponse 7 | 8 | from backend.models.users import Users 9 | 10 | from librarys.utils.strings import get_now_time 11 | 12 | 13 | class LoginView(View): 14 | template_name = "backend/login.html" 15 | 16 | def get(self, request): 17 | return render(request, self.template_name) 18 | 19 | @staticmethod 20 | def post(request): 21 | username = request.POST.get("username", None) 22 | password = request.POST.get("password", None) 23 | captcha = request.POST.get("captcha", None) 24 | 25 | if request.session["valid_code"].lower() != captcha.lower(): 26 | data = {"status": 403, "msg": "验证码错误"} 27 | return JsonResponse(data, safe=False) 28 | 29 | user = authenticate(username=username, password=password) 30 | 31 | if user is not None: 32 | 33 | # login方法实现登录 34 | login(request, user) 35 | 36 | # 更新用户登录的时间和ip 37 | user = Users.objects.get(username=username) 38 | user.last_time = get_now_time() 39 | user.last_ip = request.META.get('REMOTE_ADDR', '0.0.0.0') 40 | user.save() 41 | 42 | data = {"status": 200, "url_jump": reverse("back_index")} 43 | return JsonResponse(data, safe=False) 44 | 45 | else: 46 | # 无论数据提交是否成功,都要在服务器端刷新一遍验证码 47 | # Refresh(request) 48 | 49 | # res = requests.get("http://127.0.0.1:8000/get_valid_img") 50 | data = {"status": 403, "msg": "用户名或者是密码错误"} 51 | return JsonResponse(data, safe=False) 52 | -------------------------------------------------------------------------------- /backend/views/resolver.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.views.generic import View 3 | from django.http import JsonResponse 4 | from django.utils.decorators import method_decorator 5 | from django.views.decorators.clickjacking import xframe_options_exempt 6 | 7 | from librarys.mixin.permission import AdminRequiredMixin 8 | 9 | from backend.models.dockers import Resolver 10 | 11 | 12 | class ResolverView(AdminRequiredMixin, View): 13 | template_name = "backend/page/resolver/table.html" 14 | 15 | @method_decorator(xframe_options_exempt) 16 | def get(self, request): 17 | return render(request, self.template_name) 18 | 19 | @staticmethod 20 | def post(request): 21 | # 数据只有清空操作,避免舞弊 22 | action = request.POST.get("action", "") 23 | 24 | if action == "delete": 25 | Resolver.objects.all().delete() 26 | 27 | else: 28 | data = {"status": 403, "msg": "方式错误"} 29 | return JsonResponse(data, safe=False) 30 | 31 | data = {"status": 200, "msg": "信息删除成功"} 32 | return JsonResponse(data, safe=False) 33 | -------------------------------------------------------------------------------- /backend/views/score.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.views.generic import View 3 | from django.utils.decorators import method_decorator 4 | from django.views.decorators.clickjacking import xframe_options_exempt 5 | 6 | from librarys.mixin.permission import AdminRequiredMixin 7 | 8 | 9 | class PersonScoreView(AdminRequiredMixin, View): 10 | template_name = "backend/page/score/person.html" 11 | 12 | @method_decorator(xframe_options_exempt) 13 | def get(self, request): 14 | return render(request, self.template_name) 15 | -------------------------------------------------------------------------------- /backend/views/setting.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.views.generic import View 3 | from django.utils.decorators import method_decorator 4 | from django.views.decorators.clickjacking import xframe_options_exempt 5 | 6 | from librarys.mixin.permission import AdminRequiredMixin 7 | 8 | 9 | class SettingMenu(AdminRequiredMixin, View): 10 | template_name = "backend/page/setting.html" 11 | 12 | @method_decorator(xframe_options_exempt) 13 | def get(self, request): 14 | return render(request, self.template_name) 15 | -------------------------------------------------------------------------------- /backend/views/uploads.py: -------------------------------------------------------------------------------- 1 | import time 2 | 3 | from settings.base import BASE_DIR 4 | from django.views.generic import View 5 | from django.http import JsonResponse 6 | from django.views.decorators.csrf import csrf_exempt 7 | 8 | from librarys.mixin.permission import AdminRequiredMixin 9 | from librarys.utils.strings import gen_md5 10 | from settings.config import WHITE_LIST 11 | 12 | 13 | class UploadView(AdminRequiredMixin, View): 14 | 15 | @staticmethod 16 | def post(request): 17 | upload_file = request.FILES.get("file", None) # 获取上传的文件,如果没有文件,则默认为None 18 | if not upload_file: 19 | data = { 20 | "code": 1, 21 | "msg": "文件上传错误", 22 | } 23 | 24 | return JsonResponse(data) 25 | 26 | extra_name = upload_file.name.split(".")[-1] 27 | 28 | if extra_name not in WHITE_LIST: 29 | data = { 30 | "code": 1, 31 | "msg": f"只允许上传后缀为{','.join(WHITE_LIST)}的文件", 32 | } 33 | 34 | return JsonResponse(data) 35 | 36 | filename = gen_md5(str(time.time()).encode("utf-8")) + "." + upload_file.name.split(".")[-1] 37 | store_path = BASE_DIR.joinpath("front", "static", "front", "uploads", filename) 38 | destination = open(store_path, 'wb+') # 打开特定的文件进行二进制的写操作 39 | for chunk in upload_file.chunks(): # 分块写入文件 40 | destination.write(chunk) 41 | destination.close() 42 | 43 | full_path = str(store_path).replace(str(BASE_DIR.joinpath("front")), "") 44 | data = { 45 | "code": 0, 46 | "msg": "文件上传成功", 47 | "src": full_path, 48 | } 49 | 50 | return JsonResponse(data) 51 | 52 | @csrf_exempt 53 | def dispatch(self, *args, **kwargs): 54 | return super(UploadView, self).dispatch(*args, **kwargs) 55 | -------------------------------------------------------------------------------- /backend/views/welcome.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.views.generic import View 3 | from django.utils.decorators import method_decorator 4 | from django.views.decorators.clickjacking import xframe_options_exempt 5 | 6 | from backend.models.users import Users 7 | from backend.models.users import Players 8 | from backend.models.dockers import TopicName 9 | from backend.models.category import Category 10 | 11 | from librarys.mixin.permission import AdminRequiredMixin 12 | 13 | 14 | class WelcomeView(AdminRequiredMixin, View): 15 | template_name = "backend/page/welcome.html" 16 | 17 | @method_decorator(xframe_options_exempt) 18 | def get(self, request): 19 | users_nums = Users.objects.count() 20 | players_nums = Players.objects.count() 21 | topic_nums = TopicName.objects.count() 22 | category_nums = Category.objects.count() 23 | 24 | return render(request, self.template_name, locals()) 25 | -------------------------------------------------------------------------------- /data/logs/info.log: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/data/logs/info.log -------------------------------------------------------------------------------- /doc/DEPLOY.md: -------------------------------------------------------------------------------- 1 | # 镜像部署文档 2 | 0x01 平台地址:http://127.0.0.1:8000/back/login 默认账户 luffy:shadow 3 | 4 | 0x02 要想自己部署题目,必须有docker经验,将题目封装在docker中,镜像对外开放一个或多个端口. 5 | 6 | 0x03 比赛者在启动题目时平台会自动将内网的端口映射到宿主机的随机端口上,端口范围在10000-20000之间,请务必确认该区间的端口没有被占用。 7 | 8 | 0x04 题目部署时平台会先在本地寻找镜像,如果找不到则从仓库中下载,如果仓库中也没有平台则会报错 9 | 10 | 0x05 部署时 题目部署->添加 11 | ![](img/img3.png) 12 | 这里面需要注意的只有两个地方 13 | 镜像标签就是docker的标签,比如nginx:latest 14 | 端口号则是docker镜像开放的端口,采用的形式可以是80或者是80,22。 15 | 16 | 0x06 动态flag题目部署,动态flag只支持docker镜像,只要在根目录下创建一个start.sh,写入修改flag的语句即可(请先确认容器内存在bash,比如apt install bash),示例: 17 | 18 | ```shell script 19 | #!/bin/bash

 20 | # BlackStone平台使用

 21 | # Author:

 22 | 23 | # 替换

 24 | sed -i "s/flag{538575657edccfc1c7b9a5bbcb96b66d}/$1/g" /var/www/html/flag.php 25 | # 根目录

 26 | echo $1 > /flag.txt 27 | # ELF文件

 28 | sed -i "s/flag{538575657edccfc1c7b9a5bbcb96b66d}/$1/g" /flag.c && gcc -o flag flag.c 29 | ``` 30 | -------------------------------------------------------------------------------- /doc/config/daphne_supervisor.conf: -------------------------------------------------------------------------------- 1 | [program:daphne] 2 | directory=/opt/docker/Finisher ;#项目目录 3 | user=root 4 | command=keyword -b 127.0.0.1 -p 8001 asgi:application ;#启动命令 5 | autostart=true 6 | autorestart=true 7 | stdout_logfile=/tmp/daphne.log ;#日志 8 | redirect_stderr=true -------------------------------------------------------------------------------- /doc/config/nginx_supervisor.conf: -------------------------------------------------------------------------------- 1 | [program:nginx] 2 | directory=/usr/local/nginx ;#项目目录 3 | user=root 4 | command=/usr/local/nginx/sbin/nginx ;#启动命令 5 | autostart=true 6 | autorestart=true 7 | stdout_logfile=/tmp/nginx.log ;#日志 8 | redirect_stderr=true -------------------------------------------------------------------------------- /doc/example/91255b4fc07c33c92711abec6098b8db.txt: -------------------------------------------------------------------------------- 1 | flag{3473d48903546b3ab996bce49667b040} -------------------------------------------------------------------------------- /doc/example/Dockerfile: -------------------------------------------------------------------------------- 1 | FROM nginx:latest 2 | 3 | COPY index.html /usr/share/nginx/html/ 4 | COPY robots.txt /usr/share/nginx/html/ 5 | COPY 91255b4fc07c33c92711abec6098b8db.txt /usr/share/nginx/html/ -------------------------------------------------------------------------------- /doc/example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 测试 6 | 7 | 8 | 9 |

Hello World

10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /doc/example/robots.txt: -------------------------------------------------------------------------------- 1 | # robots.txt generated at http://tool.chinaz.com/robots 2 | User-agent: * 3 | Disallow: /91255b4fc07c33c92711abec6098b8db.txt -------------------------------------------------------------------------------- /doc/img/img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/doc/img/img1.png -------------------------------------------------------------------------------- /doc/img/img2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/doc/img/img2.png -------------------------------------------------------------------------------- /doc/img/img3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/doc/img/img3.png -------------------------------------------------------------------------------- /doc/img/stone.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/doc/img/stone.png -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: "3" 2 | services: 3 | postgres: 4 | image: postgres:13-alpine 5 | restart: always 6 | environment: 7 | POSTGRES_DB: django 8 | POSTGRES_USER: postgres 9 | POSTGRES_PASSWORD: sh@dow 10 | ports: 11 | - 127.0.0.1:5432:5432 -------------------------------------------------------------------------------- /front/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/__init__.py -------------------------------------------------------------------------------- /front/apps.py: -------------------------------------------------------------------------------- 1 | from django.apps import AppConfig 2 | 3 | 4 | class FrontConfig(AppConfig): 5 | name = 'front' 6 | -------------------------------------------------------------------------------- /front/front_urls.py: -------------------------------------------------------------------------------- 1 | from front.views.index import IndexView 2 | from front.views.captcha import CaptchaView 3 | from front.views.users import RegisterView 4 | from front.views.users import LoginView 5 | from front.views.users import LogoutView 6 | from front.views.users import ShowPlayersView 7 | from front.views.topics import TopicsView 8 | from front.views.topics import TopicSingleView 9 | from front.views.images import DockerOperationView 10 | from front.views.flag import CheckFlagView 11 | from front.views.rank import RankView 12 | from front.views.personal import PersonalView 13 | 14 | from django.urls import path 15 | 16 | urlpatterns = [ 17 | path('', IndexView.as_view(), name="front_index"), 18 | path('captcha/', CaptchaView.as_view(), name="captcha"), 19 | path('reg', RegisterView.as_view(), name="front_reg"), 20 | path('login', LoginView.as_view(), name="front_login"), 21 | path('logout', LogoutView.as_view(), name="front_logout"), 22 | path('players', ShowPlayersView.as_view(), name="front_players"), 23 | path('topics', TopicsView.as_view(), name="front_topics"), 24 | path('topic/', TopicSingleView.as_view(), name="front_topic"), 25 | path('images', DockerOperationView.as_view(), name="front_operate"), 26 | path('flag', CheckFlagView.as_view(), name="front_flag"), 27 | path('score', RankView.as_view(), name="front_rank"), 28 | path('personal/', PersonalView.as_view(), name="front_personal"), 29 | ] 30 | -------------------------------------------------------------------------------- /front/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/migrations/__init__.py -------------------------------------------------------------------------------- /front/static/front/css/font.css: -------------------------------------------------------------------------------- 1 | @font-face { 2 | font-family: 'iconfont'; 3 | src: url('../fonts/iconfont.eot'); 4 | src: url('../fonts/iconfont.eot?#iefix') format('embedded-opentype'), 5 | url('../fonts/iconfont.woff') format('woff'), 6 | url('../fonts/iconfont.ttf') format('truetype'), 7 | url('../fonts/iconfont.svg#iconfont') format('svg'); 8 | } 9 | .iconfont{ 10 | font-family:"iconfont" !important; 11 | font-size:16px;font-style:normal; 12 | -webkit-font-smoothing: antialiased; 13 | -webkit-text-stroke-width: 0.2px; 14 | -moz-osx-font-smoothing: grayscale; 15 | } 16 | 17 | -------------------------------------------------------------------------------- /front/static/front/css/full.css: -------------------------------------------------------------------------------- 1 | /*! 默认风格 */ 2 | 3 | html body{margin-top:0; margin-left: 136px;} 4 | html .fly-full{margin-top: 0;} 5 | 6 | .main{width:auto; margin:15px 24px 15px 24px;} 7 | .content{margin-right: 360px;} 8 | .jie-row li .jie-title{max-width:70%;} 9 | 10 | /* 头部 */ 11 | .header{width:136px; height:100%;} 12 | .header .main{position: static; width:auto;} 13 | .logo{top:20px; left:50%; width:86px; height:74px; margin-left:-43px; background:url(../images/logo-1.png);} 14 | .nav{position:relative; left:0; top:110px; border-top:1px solid #282C35;} 15 | .nav a{display:block; height:50px; line-height:50px; padding:0; text-align:center;} 16 | .nav a:first-child{border-top:1px solid #424857;} 17 | .nav-user span{margin-top: 10px;} 18 | 19 | .icon-touxiang{font-size: 60px;} 20 | 21 | .nav-user{top: auto; bottom:20px; left:0; width:100%;} 22 | .nav-user span, 23 | .nav-user .unlogin, 24 | .out-login, 25 | .avatar, 26 | .avatar cite, 27 | .nav-user .nav{display:block; *display:block; text-align:center;} 28 | .nav-user span{top: 0;} 29 | .nav-user span a{padding:0 6px;} 30 | .nav-user .unlogin{margin-right: 0;} 31 | .out-login{margin-left:0; margin-top:20px;} 32 | .out-login a{ padding:0 5px;} 33 | .nav-user .nav{position:relative; margin-left: 0; margin-top: 15px;} 34 | 35 | .avatar img{width:60px; height:60px;} 36 | .avatar cite{margin-left: 0; margin-top:10px; } 37 | .avatar i{margin-left: 0;} 38 | 39 | .nav-message{left: auto; right: 10px;} 40 | 41 | /* 适配 */ 42 | @media screen and (max-width: 1024px) { 43 | html body{margin-left: 140px;} 44 | .main{margin: 15px 10px;} 45 | .content{margin: 0;} 46 | .edge{display:none} 47 | } 48 | 49 | @media screen and (max-width: 750px) { 50 | html body{margin-left:0;} 51 | .header{left:-140px;} 52 | .edge{display: block;} 53 | } 54 | -------------------------------------------------------------------------------- /front/static/front/css/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/css/iconfont.eot -------------------------------------------------------------------------------- /front/static/front/css/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/css/iconfont.ttf -------------------------------------------------------------------------------- /front/static/front/css/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/css/iconfont.woff -------------------------------------------------------------------------------- /front/static/front/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.4 MIT License By https://www.layui.com */ 2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} -------------------------------------------------------------------------------- /front/static/front/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /front/static/front/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /front/static/front/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /front/static/front/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /front/static/front/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /front/static/front/css/theme1.css: -------------------------------------------------------------------------------- 1 | body{ 2 | background:#F2F1F2; 3 | } 4 | .container{ 5 | background:#1A1B20; 6 | } 7 | .left-nav{ 8 | background:#1A1B20; 9 | } 10 | 11 | .left-nav a{ 12 | color:rgba(255,255,255,.7); 13 | } 14 | ..left-nav a.active{ 15 | background: #009688 !important; 16 | color: #fff; 17 | } 18 | .left-nav a:hover{ 19 | background: #009688 !important; 20 | color: #fff; 21 | } -------------------------------------------------------------------------------- /front/static/front/css/theme2.css: -------------------------------------------------------------------------------- 1 | body{ 2 | background:#EEF5F9; 3 | } 4 | .container{ 5 | background:#323640; 6 | } 7 | .left-nav{ 8 | background:#fff; 9 | } 10 | 11 | .left-nav a{ 12 | color:#686a76; 13 | } 14 | .left-nav a.active{ 15 | background: #786AED !important; 16 | color: #fff; 17 | } 18 | .left-nav a:hover{ 19 | background: #786AED !important; 20 | color: #fff; 21 | } 22 | -------------------------------------------------------------------------------- /front/static/front/css/theme3.css: -------------------------------------------------------------------------------- 1 | body{ 2 | background:#E8E8E8; 3 | } 4 | .container{ 5 | background:#F34743; 6 | } 7 | 8 | .left-nav{ 9 | background:#F4F4F4; 10 | } 11 | 12 | .left-nav a{ 13 | color:#686a76; 14 | } 15 | .left-nav a.active{ 16 | background: #FEFEFE !important; 17 | color: #F34743; 18 | } 19 | .left-nav a:hover{ 20 | background: #FEFEFE !important; 21 | color: #F34743; 22 | } -------------------------------------------------------------------------------- /front/static/front/css/theme4.css: -------------------------------------------------------------------------------- 1 | body{ 2 | background:#E4E4E4; 3 | } 4 | .container{ 5 | background:#019587; 6 | } 7 | .left-nav{ 8 | background:#263035; 9 | } 10 | 11 | .left-nav a{ 12 | color:#fff; 13 | } 14 | .left-nav a.active{ 15 | background: #212525 !important; 16 | color: #fff !important; 17 | } 18 | .left-nav a:hover{ 19 | background: #212525 !important; 20 | color: #fff !important; 21 | } -------------------------------------------------------------------------------- /front/static/front/css/theme5.css: -------------------------------------------------------------------------------- 1 | body{ 2 | background:#EEF5F9 !important; 3 | } 4 | .container{ 5 | background:linear-gradient(to left, #7b4397, #2196f3); 6 | } 7 | 8 | .left-nav{ 9 | background:#fff !important; 10 | } 11 | 12 | .left-nav a{ 13 | color:#686a76 !important; 14 | } 15 | .left-nav a.active{ 16 | background: linear-gradient(to left, #7c8ce4, #2196f3) !important; 17 | color: #fff !important; 18 | border-color: #7b4397 !important; 19 | } 20 | .left-nav a:hover{ 21 | background: linear-gradient(to left, #7c8ce4, #2196f3) !important; 22 | color: #fff !important; 23 | border-color: #7b4397 !important; 24 | } 25 | .container .logo a{ 26 | background: rgba(0,0,0,0) !important; 27 | } -------------------------------------------------------------------------------- /front/static/front/img/body_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/body_bg.png -------------------------------------------------------------------------------- /front/static/front/img/bottom_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/bottom_bg.png -------------------------------------------------------------------------------- /front/static/front/img/bottom_nav_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/bottom_nav_1.png -------------------------------------------------------------------------------- /front/static/front/img/bottom_nav_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/bottom_nav_2.png -------------------------------------------------------------------------------- /front/static/front/img/bottom_nav_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/bottom_nav_3.png -------------------------------------------------------------------------------- /front/static/front/img/bsjl_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/bsjl_img1.png -------------------------------------------------------------------------------- /front/static/front/img/bsjl_img2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/bsjl_img2.png -------------------------------------------------------------------------------- /front/static/front/img/bsjl_img3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/bsjl_img3.png -------------------------------------------------------------------------------- /front/static/front/img/dt_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/dt_bg.png -------------------------------------------------------------------------------- /front/static/front/img/dt_bg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/dt_bg2.png -------------------------------------------------------------------------------- /front/static/front/img/index-tx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/index-tx.png -------------------------------------------------------------------------------- /front/static/front/img/index_banner.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/index_banner.png -------------------------------------------------------------------------------- /front/static/front/img/index_banner.png_bak: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/index_banner.png_bak -------------------------------------------------------------------------------- /front/static/front/img/inform_bg-bottom.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_bg-bottom.png -------------------------------------------------------------------------------- /front/static/front/img/inform_bg-center.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_bg-center.png -------------------------------------------------------------------------------- /front/static/front/img/inform_bg-top.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_bg-top.png -------------------------------------------------------------------------------- /front/static/front/img/inform_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_bg.png -------------------------------------------------------------------------------- /front/static/front/img/inform_bg2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_bg2.png -------------------------------------------------------------------------------- /front/static/front/img/inform_bg_ul-li.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_bg_ul-li.png -------------------------------------------------------------------------------- /front/static/front/img/inform_bg_ul.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_bg_ul.png -------------------------------------------------------------------------------- /front/static/front/img/inform_bigBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_bigBg.png -------------------------------------------------------------------------------- /front/static/front/img/inform_new.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_new.png -------------------------------------------------------------------------------- /front/static/front/img/inform_titleBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_titleBg.png -------------------------------------------------------------------------------- /front/static/front/img/inform_tz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_tz.png -------------------------------------------------------------------------------- /front/static/front/img/inform_zd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/inform_zd.png -------------------------------------------------------------------------------- /front/static/front/img/lc_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/lc_bg.png -------------------------------------------------------------------------------- /front/static/front/img/login_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/login_bg.png -------------------------------------------------------------------------------- /front/static/front/img/login_bg_form.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/login_bg_form.png -------------------------------------------------------------------------------- /front/static/front/img/login_icon1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/login_icon1.png -------------------------------------------------------------------------------- /front/static/front/img/login_icon2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/login_icon2.png -------------------------------------------------------------------------------- /front/static/front/img/login_icon3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/login_icon3.png -------------------------------------------------------------------------------- /front/static/front/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/logo.png -------------------------------------------------------------------------------- /front/static/front/img/logo_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/logo_bg.png -------------------------------------------------------------------------------- /front/static/front/img/name_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/name_bg.png -------------------------------------------------------------------------------- /front/static/front/img/nav_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/nav_bg.png -------------------------------------------------------------------------------- /front/static/front/img/question2_fhj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/question2_fhj.png -------------------------------------------------------------------------------- /front/static/front/img/question2_input.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/question2_input.png -------------------------------------------------------------------------------- /front/static/front/img/question2_tjbg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/question2_tjbg.png -------------------------------------------------------------------------------- /front/static/front/img/question2_wtBG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/question2_wtBG.png -------------------------------------------------------------------------------- /front/static/front/img/questions_bt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_bt.png -------------------------------------------------------------------------------- /front/static/front/img/questions_fh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_fh.png -------------------------------------------------------------------------------- /front/static/front/img/questions_tckBG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_tckBG.png -------------------------------------------------------------------------------- /front/static/front/img/questions_tcksc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_tcksc.png -------------------------------------------------------------------------------- /front/static/front/img/questions_title_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_title_bg.png -------------------------------------------------------------------------------- /front/static/front/img/questions_tk_tabBG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_tk_tabBG.png -------------------------------------------------------------------------------- /front/static/front/img/questions_tk_tabBGxz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_tk_tabBGxz.png -------------------------------------------------------------------------------- /front/static/front/img/questions_xz.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_xz.png -------------------------------------------------------------------------------- /front/static/front/img/questions_xzbt.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/questions_xzbt.png -------------------------------------------------------------------------------- /front/static/front/img/ranking-ulBG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/ranking-ulBG.png -------------------------------------------------------------------------------- /front/static/front/img/ranking_list_titleBG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/ranking_list_titleBG.png -------------------------------------------------------------------------------- /front/static/front/img/ranking_ulBG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/ranking_ulBG.png -------------------------------------------------------------------------------- /front/static/front/img/registe_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/registe_bg.png -------------------------------------------------------------------------------- /front/static/front/img/registe_icon1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/registe_icon1.png -------------------------------------------------------------------------------- /front/static/front/img/registe_icon2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/registe_icon2.png -------------------------------------------------------------------------------- /front/static/front/img/registe_icon3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/registe_icon3.png -------------------------------------------------------------------------------- /front/static/front/img/registe_icon4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/registe_icon4.png -------------------------------------------------------------------------------- /front/static/front/img/registe_icon5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/registe_icon5.png -------------------------------------------------------------------------------- /front/static/front/img/reset-finish-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/reset-finish-bg.png -------------------------------------------------------------------------------- /front/static/front/img/result_nonrBG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/result_nonrBG.png -------------------------------------------------------------------------------- /front/static/front/img/result_pieBG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/result_pieBG.png -------------------------------------------------------------------------------- /front/static/front/img/result_titleBG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/result_titleBG.png -------------------------------------------------------------------------------- /front/static/front/img/result_wtBG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/result_wtBG.png -------------------------------------------------------------------------------- /front/static/front/img/set-up-bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/set-up-bg.png -------------------------------------------------------------------------------- /front/static/front/img/setUp-txtBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/setUp-txtBg.png -------------------------------------------------------------------------------- /front/static/front/img/ssjj_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/ssjj_bg.png -------------------------------------------------------------------------------- /front/static/front/img/stfx_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_bg.png -------------------------------------------------------------------------------- /front/static/front/img/stfx_icon1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_icon1.png -------------------------------------------------------------------------------- /front/static/front/img/stfx_icon2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_icon2.png -------------------------------------------------------------------------------- /front/static/front/img/stfx_icon3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_icon3.png -------------------------------------------------------------------------------- /front/static/front/img/stfx_icon4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_icon4.png -------------------------------------------------------------------------------- /front/static/front/img/stfx_icon5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_icon5.png -------------------------------------------------------------------------------- /front/static/front/img/stfx_icon6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_icon6.png -------------------------------------------------------------------------------- /front/static/front/img/stfx_title1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_title1.png -------------------------------------------------------------------------------- /front/static/front/img/stfx_title2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/stfx_title2.png -------------------------------------------------------------------------------- /front/static/front/img/theory_input1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/theory_input1.png -------------------------------------------------------------------------------- /front/static/front/img/theory_modalBody_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/theory_modalBody_bg.png -------------------------------------------------------------------------------- /front/static/front/img/theory_nr_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/theory_nr_bg.png -------------------------------------------------------------------------------- /front/static/front/img/theory_st_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/theory_st_bg.png -------------------------------------------------------------------------------- /front/static/front/img/time_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/time_bg.png -------------------------------------------------------------------------------- /front/static/front/img/time_bg_xb.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/time_bg_xb.png -------------------------------------------------------------------------------- /front/static/front/img/title_img1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/title_img1.png -------------------------------------------------------------------------------- /front/static/front/img/title_img2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/title_img2.png -------------------------------------------------------------------------------- /front/static/front/img/top_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/top_bg.png -------------------------------------------------------------------------------- /front/static/front/img/user_bg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/user_bg.png -------------------------------------------------------------------------------- /front/static/front/img/user_bg_djh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/user_bg_djh.png -------------------------------------------------------------------------------- /front/static/front/img/user_tableBg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/user_tableBg.png -------------------------------------------------------------------------------- /front/static/front/img/user_titleBG.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/user_titleBG.png -------------------------------------------------------------------------------- /front/static/front/img/xiahua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/xiahua.png -------------------------------------------------------------------------------- /front/static/front/img/xialadian.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/xialadian.png -------------------------------------------------------------------------------- /front/static/front/img/xialatiao.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/img/xialatiao.png -------------------------------------------------------------------------------- /front/static/front/js/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.4 MIT License By https://www.layui.com */ 2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} -------------------------------------------------------------------------------- /front/static/front/js/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/js/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /front/static/front/js/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/js/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /front/static/front/js/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/js/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /front/static/front/js/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/js/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /front/static/front/js/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/js/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /front/static/front/js/lay/modules/code.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.4 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.$,l="http://www.layui.com/doc/modules/code.html";e("code",function(e){var t=[];e=e||{},e.elem=a(e.elem||".layui-code"),e.about=!("about"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr("lay-encode")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
  1. '+o.replace(/[\r\t\n]+/g,"
  2. ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend('

'+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); -------------------------------------------------------------------------------- /front/static/front/js/lay/modules/flow.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.4 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)}); -------------------------------------------------------------------------------- /front/static/front/js/lay/modules/laytpl.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.4 MIT License By https://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var c="Laytpl Error:";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)}); -------------------------------------------------------------------------------- /front/static/front/js/lay/modules/rate.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.5.4 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.jquery,i={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,a){return layui.onevent.call(this,n,e,a)}},l=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n="rate",t="layui-rate",o="layui-icon-rate",s="layui-icon-rate-solid",u="layui-icon-rate-half",r="layui-icon-rate-solid layui-icon-rate-half",c="layui-icon-rate-solid layui-icon-rate",f="layui-icon-rate layui-icon-rate-half",v=function(e){var l=this;l.index=++i.index,l.config=a.extend({},l.config,i.config,e),l.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""},v.prototype.render=function(){var e=this,i=e.config,l=i.theme?'style="color: '+i.theme+';"':"";i.elem=a(i.elem),parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value)));for(var n='
    ",u=1;u<=i.length;u++){var r='
  • ";i.half&&parseInt(i.value)!==i.value&&u==Math.ceil(i.value)?n=n+'
  • ":n+=r}n+="
"+(i.text?''+i.value+"星":"")+"";var c=i.elem,f=c.next("."+t);f[0]&&f.remove(),e.elemTemp=a(n),i.span=e.elemTemp.next("span"),i.setText&&i.setText(i.value),c.html(e.elemTemp),c.addClass("layui-inline"),i.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,i=a.config;i.value=e,a.render()},v.prototype.action=function(){var e=this,i=e.config,l=e.elemTemp,n=l.find("i").width();l.children("li").each(function(e){var t=e+1,v=a(this);v.on("click",function(e){if(i.value=t,i.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(i.value=i.value-.5)}i.text&&l.next("span").text(i.value+"星"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),v.on("mousemove",function(e){if(l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+t+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children("i").addClass(u).removeClass(s)}}),v.on("mouseleave",function(){l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+Math.floor(i.value)+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half&&parseInt(i.value)!==i.value&&l.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(u).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},i.render=function(e){var a=new v(e);return l.call(a)},e(n,i)}); -------------------------------------------------------------------------------- /front/static/front/lib/layui/css/modules/code.css: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | html #layuicss-skincodecss{display:none;position:absolute;width:1989px}.layui-code-h3,.layui-code-view{position:relative;font-size:12px}.layui-code-view{display:block;margin:10px 0;padding:0;border:1px solid #e2e2e2;border-left-width:6px;background-color:#F2F2F2;color:#333;font-family:Courier New}.layui-code-h3{padding:0 10px;height:32px;line-height:32px;border-bottom:1px solid #e2e2e2}.layui-code-h3 a{position:absolute;right:10px;top:0;color:#999}.layui-code-view .layui-code-ol{position:relative;overflow:auto}.layui-code-view .layui-code-ol li{position:relative;margin-left:45px;line-height:20px;padding:0 5px;border-left:1px solid #e2e2e2;list-style-type:decimal-leading-zero;*list-style-type:decimal;background-color:#fff}.layui-code-view pre{margin:0}.layui-code-notepad{border:1px solid #0C0C0C;border-left-color:#3F3F3F;background-color:#0C0C0C;color:#C2BE9E}.layui-code-notepad .layui-code-h3{border-bottom:none}.layui-code-notepad .layui-code-ol li{background-color:#3F3F3F;border-left:none} -------------------------------------------------------------------------------- /front/static/front/lib/layui/css/modules/layer/default/icon-ext.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/css/modules/layer/default/icon-ext.png -------------------------------------------------------------------------------- /front/static/front/lib/layui/css/modules/layer/default/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/css/modules/layer/default/icon.png -------------------------------------------------------------------------------- /front/static/front/lib/layui/css/modules/layer/default/loading-0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/css/modules/layer/default/loading-0.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/css/modules/layer/default/loading-1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/css/modules/layer/default/loading-1.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/css/modules/layer/default/loading-2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/css/modules/layer/default/loading-2.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/font/iconfont.eot: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/font/iconfont.eot -------------------------------------------------------------------------------- /front/static/front/lib/layui/font/iconfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/font/iconfont.ttf -------------------------------------------------------------------------------- /front/static/front/lib/layui/font/iconfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/font/iconfont.woff -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/0.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/0.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/1.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/1.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/10.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/10.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/11.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/11.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/12.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/12.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/13.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/13.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/14.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/14.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/15.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/15.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/16.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/16.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/17.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/17.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/18.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/18.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/19.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/19.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/2.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/2.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/20.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/20.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/21.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/21.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/22.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/22.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/23.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/23.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/24.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/24.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/25.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/25.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/26.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/26.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/27.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/27.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/28.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/28.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/29.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/29.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/3.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/3.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/30.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/30.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/31.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/31.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/32.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/32.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/33.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/33.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/34.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/34.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/35.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/35.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/36.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/36.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/37.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/37.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/38.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/38.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/39.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/39.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/4.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/4.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/40.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/40.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/41.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/41.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/42.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/42.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/43.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/43.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/44.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/44.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/45.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/45.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/46.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/46.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/47.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/47.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/48.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/48.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/49.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/49.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/5.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/5.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/50.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/50.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/51.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/51.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/52.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/52.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/53.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/53.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/54.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/54.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/55.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/55.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/56.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/56.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/57.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/57.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/58.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/58.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/59.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/59.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/6.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/6.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/60.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/60.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/61.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/61.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/62.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/62.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/63.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/63.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/64.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/64.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/65.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/65.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/66.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/66.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/67.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/67.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/68.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/68.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/69.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/69.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/7.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/7.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/70.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/70.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/71.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/71.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/8.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/8.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/images/face/9.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/lib/layui/images/face/9.gif -------------------------------------------------------------------------------- /front/static/front/lib/layui/lay/modules/code.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.$,l="http://www.layui.com/doc/modules/code.html";e("code",function(e){var t=[];e=e||{},e.elem=a(e.elem||".layui-code"),e.about=!("about"in e)||e.about,e.elem.each(function(){t.push(this)}),layui.each(t.reverse(),function(t,i){var c=a(i),o=c.html();(c.attr("lay-encode")||e.encode)&&(o=o.replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")),c.html('
  1. '+o.replace(/[\r\t\n]+/g,"
  2. ")+"
"),c.find(">.layui-code-h3")[0]||c.prepend('

'+(c.attr("lay-title")||e.title||"code")+(e.about?'layui.code':"")+"

");var d=c.find(">.layui-code-ol");c.addClass("layui-box layui-code-view"),(c.attr("lay-skin")||e.skin)&&c.addClass("layui-code-"+(c.attr("lay-skin")||e.skin)),(d.find("li").length/100|0)>0&&d.css("margin-left",(d.find("li").length/100|0)+"px"),(c.attr("lay-height")||e.height)&&d.css("max-height",c.attr("lay-height")||e.height)})})}).addcss("modules/code.css","skincodecss"); -------------------------------------------------------------------------------- /front/static/front/lib/layui/lay/modules/flow.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var l=layui.$,o=function(e){},t='';o.prototype.load=function(e){var o,i,n,r,a=this,c=0;e=e||{};var f=l(e.elem);if(f[0]){var m=l(e.scrollElem||document),u=e.mb||50,s=!("isAuto"in e)||e.isAuto,v=e.end||"没有更多了",y=e.scrollElem&&e.scrollElem!==document,d="加载更多",h=l('");f.find(".layui-flow-more")[0]||f.append(h);var p=function(e,t){e=l(e),h.before(e),t=0==t||null,t?h.html(v):h.find("a").html(d),i=t,o=null,n&&n()},g=function(){o=!0,h.find("a").html(t),"function"==typeof e.done&&e.done(++c,p)};if(g(),h.find("a").on("click",function(){l(this);i||o||g()}),e.isLazyimg)var n=a.lazyimg({elem:e.elem+" img",scrollElem:e.scrollElem});return s?(m.on("scroll",function(){var e=l(this),t=e.scrollTop();r&&clearTimeout(r),i||(r=setTimeout(function(){var i=y?e.height():l(window).height(),n=y?e.prop("scrollHeight"):document.documentElement.scrollHeight;n-t-i<=u&&(o||g())},100))}),a):a}},o.prototype.lazyimg=function(e){var o,t=this,i=0;e=e||{};var n=l(e.scrollElem||document),r=e.elem||"img",a=e.scrollElem&&e.scrollElem!==document,c=function(e,l){var o=n.scrollTop(),r=o+l,c=a?function(){return e.offset().top-n.offset().top+o}():e.offset().top;if(c>=o&&c<=r&&!e.attr("src")){var m=e.attr("lay-src");layui.img(m,function(){var l=t.lazyimg.elem.eq(i);e.attr("src",m).removeAttr("lay-src"),l[0]&&f(l),i++})}},f=function(e,o){var f=a?(o||n).height():l(window).height(),m=n.scrollTop(),u=m+f;if(t.lazyimg.elem=l(r),e)c(e,f);else for(var s=0;su)break}};if(f(),!o){var m;n.on("scroll",function(){var e=l(this);m&&clearTimeout(m),m=setTimeout(function(){f(null,e)},50)}),o=!0}return f},e("flow",new o)}); -------------------------------------------------------------------------------- /front/static/front/lib/layui/lay/modules/laytpl.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | ;layui.define(function(e){"use strict";var r={open:"{{",close:"}}"},c={exp:function(e){return new RegExp(e,"g")},query:function(e,c,t){var o=["#([\\s\\S])+?","([^{#}])*?"][e||0];return n((c||"")+r.open+o+r.close+(t||""))},escape:function(e){return String(e||"").replace(/&(?!#?[a-zA-Z0-9]+;)/g,"&").replace(//g,">").replace(/'/g,"'").replace(/"/g,""")},error:function(e,r){var c="Laytpl Error:";return"object"==typeof console&&console.error(c+e+"\n"+(r||"")),c+e}},n=c.exp,t=function(e){this.tpl=e};t.pt=t.prototype,window.errors=0,t.pt.parse=function(e,t){var o=this,p=e,a=n("^"+r.open+"#",""),l=n(r.close+"$","");e=e.replace(/\s+|\r|\t|\n/g," ").replace(n(r.open+"#"),r.open+"# ").replace(n(r.close+"}"),"} "+r.close).replace(/\\/g,"\\\\").replace(n(r.open+"!(.+?)!"+r.close),function(e){return e=e.replace(n("^"+r.open+"!"),"").replace(n("!"+r.close),"").replace(n(r.open+"|"+r.close),function(e){return e.replace(/(.)/g,"\\$1")})}).replace(/(?="|')/g,"\\").replace(c.query(),function(e){return e=e.replace(a,"").replace(l,""),'";'+e.replace(/\\/g,"")+';view+="'}).replace(c.query(1),function(e){var c='"+(';return e.replace(/\s/g,"")===r.open+r.close?"":(e=e.replace(n(r.open+"|"+r.close),""),/^=/.test(e)&&(e=e.replace(/^=/,""),c='"+_escape_('),c+e.replace(/\\/g,"")+')+"')}),e='"use strict";var view = "'+e+'";return view;';try{return o.cache=e=new Function("d, _escape_",e),e(t,c.escape)}catch(u){return delete o.cache,c.error(u,p)}},t.pt.render=function(e,r){var n,t=this;return e?(n=t.cache?t.cache(e,c.escape):t.parse(t.tpl,e),r?void r(n):n):c.error("no data")};var o=function(e){return"string"!=typeof e?c.error("Template not found"):new t(e)};o.config=function(e){e=e||{};for(var c in e)r[c]=e[c]},o.v="1.2.0",e("laytpl",o)}); -------------------------------------------------------------------------------- /front/static/front/lib/layui/lay/modules/rate.js: -------------------------------------------------------------------------------- 1 | /** layui-v2.4.5 MIT License By https://www.layui.com */ 2 | ;layui.define("jquery",function(e){"use strict";var a=layui.jquery,i={config:{},index:layui.rate?layui.rate.index+1e4:0,set:function(e){var i=this;return i.config=a.extend({},i.config,e),i},on:function(e,a){return layui.onevent.call(this,n,e,a)}},l=function(){var e=this,a=e.config;return{setvalue:function(a){e.setvalue.call(e,a)},config:a}},n="rate",t="layui-rate",o="layui-icon-rate",s="layui-icon-rate-solid",u="layui-icon-rate-half",r="layui-icon-rate-solid layui-icon-rate-half",c="layui-icon-rate-solid layui-icon-rate",f="layui-icon-rate layui-icon-rate-half",v=function(e){var l=this;l.index=++i.index,l.config=a.extend({},l.config,i.config,e),l.render()};v.prototype.config={length:5,text:!1,readonly:!1,half:!1,value:0,theme:""},v.prototype.render=function(){var e=this,i=e.config,l=i.theme?'style="color: '+i.theme+';"':"";i.elem=a(i.elem),parseInt(i.value)!==i.value&&(i.half||(i.value=Math.ceil(i.value)-i.value<.5?Math.ceil(i.value):Math.floor(i.value)));for(var n='
    ",u=1;u<=i.length;u++){var r='
  • ";i.half&&parseInt(i.value)!==i.value&&u==Math.ceil(i.value)?n=n+'
  • ":n+=r}n+="
"+(i.text?''+i.value+"星":"")+"";var c=i.elem,f=c.next("."+t);f[0]&&f.remove(),e.elemTemp=a(n),i.span=e.elemTemp.next("span"),i.setText&&i.setText(i.value),c.html(e.elemTemp),c.addClass("layui-inline"),i.readonly||e.action()},v.prototype.setvalue=function(e){var a=this,i=a.config;i.value=e,a.render()},v.prototype.action=function(){var e=this,i=e.config,l=e.elemTemp,n=l.find("i").width();l.children("li").each(function(e){var t=e+1,v=a(this);v.on("click",function(e){if(i.value=t,i.half){var o=e.pageX-a(this).offset().left;o<=n/2&&(i.value=i.value-.5)}i.text&&l.next("span").text(i.value+"星"),i.choose&&i.choose(i.value),i.setText&&i.setText(i.value)}),v.on("mousemove",function(e){if(l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+t+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half){var c=e.pageX-a(this).offset().left;c<=n/2&&v.children("i").addClass(u).removeClass(s)}}),v.on("mouseleave",function(){l.find("i").each(function(){a(this).addClass(o).removeClass(r)}),l.find("i:lt("+Math.floor(i.value)+")").each(function(){a(this).addClass(s).removeClass(f)}),i.half&&parseInt(i.value)!==i.value&&l.children("li:eq("+Math.floor(i.value)+")").children("i").addClass(u).removeClass(c)})})},v.prototype.events=function(){var e=this;e.config},i.render=function(e){var a=new v(e);return l.call(a)},e(n,i)}); -------------------------------------------------------------------------------- /front/static/front/uploads/c2e249483cd5b35aa3e3bcd3ab414cd6.zip: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/static/front/uploads/c2e249483cd5b35aa3e3bcd3ab414cd6.zip -------------------------------------------------------------------------------- /front/views/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/front/views/__init__.py -------------------------------------------------------------------------------- /front/views/captcha.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | from PIL import Image 4 | from PIL import ImageDraw 5 | from PIL import ImageFont 6 | from io import BytesIO 7 | 8 | from django.http import HttpResponse 9 | from django.views.generic import View 10 | 11 | from settings.base import BASE_DIR 12 | 13 | 14 | # 获取随机颜色的函数 15 | def get_random_color(): 16 | return random.randint(0, 255), random.randint(0, 255), random.randint(0, 255) 17 | 18 | 19 | class CaptchaView(View): 20 | 21 | @staticmethod 22 | def get(request): 23 | # 生成一个图片对象 24 | img_obj = Image.new( 25 | 'RGB', 26 | (200, 45), 27 | get_random_color() 28 | ) 29 | # 在生成的图片上写字符 30 | # 生成一个图片画笔对象 31 | draw_obj = ImageDraw.Draw(img_obj) 32 | # 加载字体文件, 得到一个字体对象 33 | font_obj = ImageFont.truetype(str(BASE_DIR.joinpath("backend/static/backend/font/kumo.ttf")), 38) 34 | # 开始生成随机字符串并且写到图片上 35 | tmp_list = [] 36 | for i in range(4): 37 | u = chr(random.randint(65, 90)) # 生成大写字母 38 | l = chr(random.randint(97, 122)) # 生成小写字母 39 | n = str(random.randint(0, 9)) # 生成数字,注意要转换成字符串类型 40 | 41 | tmp = random.choice([u, l, n]) 42 | tmp_list.append(tmp) 43 | draw_obj.text((20 + 40 * i, 0), tmp, fill=get_random_color(), font=font_obj) 44 | 45 | # 保存到session 46 | request.session["valid_code"] = "".join(tmp_list) 47 | 48 | # 不需要在硬盘上保存文件,直接在内存中加载就可以 49 | io_obj = BytesIO() 50 | # 将生成的图片数据保存在io对象中 51 | img_obj.save(io_obj, "png") 52 | # 从io对象里面取上一步保存的数据 53 | data = io_obj.getvalue() 54 | return HttpResponse(data) 55 | -------------------------------------------------------------------------------- /front/views/errors.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.views.generic import View 3 | 4 | 5 | class PageNotFound(View): 6 | """ 7 | 404页面 8 | """ 9 | template_name = "front/404.html" 10 | 11 | def get(self, request, exception): 12 | return render(request, self.template_name) 13 | -------------------------------------------------------------------------------- /front/views/index.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.views.generic import View 3 | 4 | 5 | class IndexView(View): 6 | template_name = "front/index.html" 7 | 8 | def get(self, request): 9 | return render(request, self.template_name) 10 | -------------------------------------------------------------------------------- /front/views/personal.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.views.generic import View 3 | from django.db.models import Sum, Count 4 | from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 5 | 6 | from backend.models.users import Players 7 | from backend.models.dockers import Resolver 8 | 9 | from librarys.utils.strings import str2int 10 | 11 | 12 | # 用来显示个人成绩 13 | class PersonalView(View): 14 | template_name = "front/stat.html" 15 | 16 | def get(self, request, username): 17 | user_list = [] 18 | score_list = {} 19 | sort_dict = {} 20 | 21 | user = Players.objects.all() 22 | 23 | for i in user: 24 | user_list.append(i.username) 25 | 26 | result = Resolver.objects.filter(answer=True).filter(username__in=user_list).values('username').annotate( 27 | Sum('score')).annotate(Count('username')).order_by("-score__sum") 28 | 29 | for i, line in enumerate(result): 30 | sort_dict[line["username"]] = i + 1 31 | score_list[line["username"]] = line["score__sum"] 32 | 33 | try: 34 | key1 = sort_dict[username] 35 | score = score_list[username] 36 | except KeyError: 37 | key1 = 0 38 | score = 0 39 | answer_list = [] 40 | score_list = [] 41 | return render(request, self.template_name, locals()) 42 | 43 | answer_list = Resolver.objects.filter(answer=True).filter(username=username).all().order_by("create_date") 44 | 45 | # 从前端获取当前的页码数,默认为1 46 | page = request.GET.get('page', 1) 47 | 48 | # 把当前的页码数转换成整数类型 49 | currentPage = str2int(page) if str2int(page) == 0 else 1 50 | 51 | # 生成paginator对象,定义每页显示15条记录 52 | paginator = Paginator(answer_list, 15) 53 | 54 | try: 55 | score_list = paginator.page(page) # 获取当前页码的记录 56 | except PageNotAnInteger: 57 | score_list = paginator.page(1) # 如果用户输入的页码不是整数时,显示第1页的内容 58 | except EmptyPage: 59 | score_list = paginator.page(paginator.num_pages) # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容 60 | 61 | return render(request, self.template_name, locals()) 62 | -------------------------------------------------------------------------------- /front/views/rank.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.views.generic import View 3 | from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 4 | 5 | from backend.models.users import Players 6 | from backend.models.dockers import Resolver 7 | 8 | from django.db.models import Sum 9 | from django.db.models import Count 10 | from django.db.models import Max 11 | 12 | 13 | class RankView(View): 14 | template_name = "front/ranking.html" 15 | 16 | def get(self, request): 17 | user_list = [] 18 | 19 | user = Players.objects.all() 20 | 21 | for i in user: 22 | user_list.append(i.username) 23 | 24 | info = Resolver.objects.filter(username__in=user_list).values('username').annotate( 25 | Sum('score')).annotate(Count('username')).annotate(Max('address')).order_by("-score__sum") 26 | 27 | # 生成paginator对象,定义每页显示15条记录 28 | paginator = Paginator(info, 15) 29 | 30 | # 从前端获取当前的页码数,默认为1 31 | page = request.GET.get('page', 1) 32 | 33 | # 把当前的页码数转换成整数类型 34 | currentPage = int(page) 35 | 36 | try: 37 | score_list = paginator.page(page) # 获取当前页码的记录 38 | except PageNotAnInteger: 39 | score_list = paginator.page(1) # 如果用户输入的页码不是整数时,显示第1页的内容 40 | except EmptyPage: 41 | score_list = paginator.page(paginator.num_pages) # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容 42 | 43 | return render(request, self.template_name, locals()) 44 | -------------------------------------------------------------------------------- /front/views/topics.py: -------------------------------------------------------------------------------- 1 | from django.shortcuts import render 2 | from django.shortcuts import redirect 3 | from django.shortcuts import reverse 4 | from django.views.generic import View 5 | 6 | from backend.models.dockers import Resolver 7 | from backend.models.dockers import TopicName 8 | 9 | from librarys.mixin.permission import LoginRequiredMixin 10 | 11 | 12 | class TopicsView(LoginRequiredMixin, View): 13 | template_name = "front/topics.html" 14 | 15 | def get(self, request): 16 | 17 | search_dict = dict() 18 | user_resolver = [] 19 | 20 | search_dict['username'] = request.session.get("user_name", "") 21 | 22 | result = Resolver.objects.filter(**search_dict).all() 23 | 24 | for j in result: 25 | user_resolver.append(j.topic_name) 26 | 27 | docker_list = TopicName.objects.filter(pull_status="Complete").all().order_by("create_date") 28 | 29 | docker_images = [] 30 | 31 | for n in docker_list: 32 | docker_images.append(n.image_tag) 33 | 34 | category_info = [] 35 | for i in docker_list: 36 | category_info.append(i.category) 37 | 38 | category_info = sorted(set(category_info), key=category_info.index) 39 | 40 | return render(request, self.template_name, 41 | {"category": category_info, "user_resolver": user_resolver, "docker_images": docker_images}) 42 | 43 | 44 | class TopicSingleView(LoginRequiredMixin, View): 45 | template_name = "front/topic.html" 46 | 47 | def get(self, request, topic_id): 48 | topic = TopicName.objects.filter(id=topic_id) 49 | 50 | if topic.count() == 0: 51 | return redirect(reverse("front_topics")) 52 | 53 | quest = topic.first() 54 | 55 | result = Resolver.objects.filter(topic_name=quest.topic_name).order_by("create_date").all()[0:10] 56 | 57 | return render(request, self.template_name, {"info": quest, "result": result}) 58 | -------------------------------------------------------------------------------- /librarys/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/librarys/__init__.py -------------------------------------------------------------------------------- /librarys/common/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/librarys/common/__init__.py -------------------------------------------------------------------------------- /librarys/common/dockers.py: -------------------------------------------------------------------------------- 1 | import threading 2 | from settings.config import DOCKER_CLIENT 3 | from settings.config import logger 4 | 5 | from backend.models.dockers import TopicName 6 | 7 | 8 | # 使用线程实现docker镜像部署 9 | class DockerDeploy(threading.Thread): 10 | 11 | def __init__(self, name): 12 | super(DockerDeploy, self).__init__() 13 | # threading.Thread.__init__(self) 14 | self.image_name = name 15 | 16 | def run(self): 17 | 18 | if TopicName.objects.filter(image_tag=self.image_name).count() == 0: 19 | return 20 | 21 | obj = TopicName.objects.get(image_tag=self.image_name) 22 | 23 | images_local_list = [] 24 | 25 | # 获取本地已存在的镜像 26 | images_list = DOCKER_CLIENT.images.list() 27 | 28 | for i in images_list: 29 | if len(i.tags) > 0: 30 | images_local_list.append(i.tags[0]) 31 | 32 | # if self.full_address in images_local_list: 33 | if self.image_name in images_local_list: 34 | obj.pull_status = "Complete" 35 | obj.save() 36 | 37 | return 38 | 39 | try: 40 | 41 | DOCKER_CLIENT.images.pull(self.image_name) 42 | obj.pull_status = "Complete" 43 | obj.save() 44 | 45 | except Exception as e: 46 | logger.warning(str(e)) 47 | obj.pull_status = "Failed" 48 | obj.save() 49 | 50 | 51 | # 使用线程实现docker镜像删除 52 | class DockerDelete(threading.Thread): 53 | 54 | def __init__(self, name): 55 | super(DockerDelete, self).__init__() 56 | # threading.Thread.__init__(self) 57 | self.image_name = name 58 | 59 | def run(self): 60 | 61 | try: 62 | images_local_list = [] 63 | 64 | # 获取本地已存在的镜像 65 | images_list = DOCKER_CLIENT.images.list() 66 | 67 | for i in images_list: 68 | if len(i.tags) > 0: 69 | images_local_list.append(i.tags[0]) 70 | 71 | if self.image_name in images_local_list: 72 | docker = DOCKER_CLIENT.images.remove(self.image_name) 73 | return 74 | except Exception as e: 75 | logger.warning(str(e)) 76 | return 77 | 78 | 79 | # 使用线程实现docker镜像停止 80 | class ImageStop(threading.Thread): 81 | 82 | def __init__(self, name): 83 | super(ImageStop, self).__init__() 84 | self.container_id = name 85 | 86 | def run(self): 87 | 88 | try: 89 | container = DOCKER_CLIENT.containers.get(self.container_id) 90 | container.stop() 91 | 92 | return True 93 | 94 | except Exception as e: 95 | logger.warning(str(e)) 96 | return False 97 | -------------------------------------------------------------------------------- /librarys/common/flags.py: -------------------------------------------------------------------------------- 1 | import time 2 | 3 | from librarys.utils.strings import generate_random_str 4 | from librarys.utils.strings import gen_md5 5 | 6 | 7 | def generate_flag(salt: str) -> str: 8 | """ 9 | 用来生成动态flag字符串 10 | :param salt: 11 | :return: 12 | """ 13 | flag_plain = generate_random_str(12) + salt + str(time.time()) 14 | return f'flag{{{gen_md5(flag_plain.encode("utf-8"))}}}' 15 | -------------------------------------------------------------------------------- /librarys/common/tools.py: -------------------------------------------------------------------------------- 1 | import requests 2 | 3 | from urllib.parse import urlsplit 4 | 5 | from django.shortcuts import reverse 6 | from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 7 | 8 | 9 | # PaginatorResults 是前台用来将数据信息进行处理的分页函数 10 | def PaginatorResults(models, page: int, offset: int = 10) -> (list, Paginator): 11 | user_mess = models.objects.all().order_by('create_date') 12 | 13 | # 生成paginator对象,定义每页显示多少条记录 14 | paginator = Paginator(user_mess, offset) 15 | 16 | # 把当前的页码数转换成整数类型 17 | currentPage = int(page) 18 | 19 | try: 20 | user_list = paginator.page(currentPage) # 获取当前页码的记录 21 | except PageNotAnInteger: 22 | user_list = paginator.page(1) # 如果用户输入的页码不是整数时,显示第1页的内容 23 | except EmptyPage: 24 | user_list = paginator.page(paginator.num_pages) # 如果用户输入的页数不在系统的页码列表中时,显示最后一页的内容 25 | 26 | return user_list, paginator 27 | 28 | 29 | # 从request获取应用全地址 30 | def GenerateHost(request) -> str: 31 | # request.is_secure() 32 | # 如果是https则为True,反之为False 33 | http = urlsplit(request.build_absolute_uri(None)).scheme 34 | # 获得当前的HTTP或HTTPS 35 | host = request.META['HTTP_HOST'] 36 | # 获取当前域名 37 | short_url = http + '://' + host 38 | return short_url 39 | 40 | 41 | # 用来刷新验证码的函数 42 | def Refresh(request): 43 | try: 44 | captcha_address = f"{GenerateHost(request)}{reverse('captcha')}" 45 | requests.get(captcha_address) 46 | 47 | except requests.RequestException as e: 48 | print(e) 49 | -------------------------------------------------------------------------------- /librarys/exception.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | 3 | """ 4 | Copyright (c) 2006-2020 sqlmap developers (http://sqlmap.org/) 5 | See the file 'LICENSE' for copying permission 6 | """ 7 | 8 | 9 | class BlackBaseException(Exception): 10 | pass 11 | 12 | 13 | class BlackImageStartException(BlackBaseException): 14 | pass 15 | 16 | 17 | class BlackConnectException(BlackBaseException): 18 | def __init__(self, address): 19 | self.address = address 20 | 21 | def __str__(self): 22 | # print("姓名长度是" + str(self.address) + ",超过长度了") 23 | return f"<{self.address} 无法链接>" 24 | -------------------------------------------------------------------------------- /librarys/mixin/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/librarys/mixin/__init__.py -------------------------------------------------------------------------------- /librarys/mixin/permission.py: -------------------------------------------------------------------------------- 1 | from django.contrib.auth.mixins import AccessMixin 2 | 3 | 4 | class LoginRequiredMixin(AccessMixin): 5 | """Verify that the current user is authenticated.""" 6 | login_url = "/login" 7 | 8 | redirect_field_name = None 9 | 10 | def dispatch(self, request, *args, **kwargs): 11 | if not request.session.get("user_name", False) and not request.user.is_superuser: 12 | return self.handle_no_permission() 13 | return super().dispatch(request, *args, **kwargs) 14 | 15 | 16 | class AdminRequiredMixin(AccessMixin): 17 | """Verify that the current user is authenticated.""" 18 | # 禁止未登录跳转时的next参数 19 | redirect_field_name = None 20 | 21 | def dispatch(self, request, *args, **kwargs): 22 | if not request.user.is_superuser: 23 | return self.handle_no_permission() 24 | return super().dispatch(request, *args, **kwargs) 25 | -------------------------------------------------------------------------------- /librarys/safety/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/librarys/safety/__init__.py -------------------------------------------------------------------------------- /librarys/safety/xss.py: -------------------------------------------------------------------------------- 1 | import json 2 | 3 | 4 | def jsonXssFilter(data): 5 | payloads = { 6 | '\'': ''', 7 | '"': '"', 8 | '<': '<', 9 | '>': '>' 10 | } 11 | if type(data) == dict: 12 | new = {} 13 | for key, values in data.items(): 14 | new[key] = jsonXssFilter(values) 15 | elif type(data) == list: 16 | new = [] 17 | for i in data: 18 | new.append(jsonXssFilter(i)) 19 | elif type(data) == int or type(data) == float: 20 | new = data 21 | elif type(data) == str: 22 | new = data 23 | for key, value in payloads.items(): 24 | new = new.replace(key, value) 25 | elif type(data) == bytes: 26 | new = data 27 | else: 28 | print('>>> unknown type:') 29 | print(type(data)) 30 | new = data 31 | return new 32 | 33 | 34 | def xss_filter(func): 35 | def wrapper(*args, **kwargs): 36 | result = func(*args, **kwargs) 37 | result.content = result.content 38 | try: 39 | jsondata = json.loads(result.content) 40 | result.content = json.dumps(jsonXssFilter(jsondata)) 41 | except json.JSONDecodeError: 42 | result.content = jsonXssFilter(result.content) 43 | return result 44 | 45 | return wrapper 46 | -------------------------------------------------------------------------------- /librarys/utils/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/librarys/utils/__init__.py -------------------------------------------------------------------------------- /librarys/utils/calculation.py: -------------------------------------------------------------------------------- 1 | import math 2 | 3 | 4 | def DynamicValueChallenge(initial: int, solve_count: int, decay: int = 5) -> int: 5 | """ 6 | 7 | :param initial: 题目的初始值 8 | :param solve_count: 已经解答题目的用户数量 9 | :param decay: 前几名动态分 10 | :return: 11 | """ 12 | minimum = math.floor(initial / 2) 13 | 14 | if solve_count != 0: 15 | # We subtract -1 to allow the first solver to get max point value 16 | solve_count -= 1 17 | 18 | # 双星表示乘方 19 | value = (((minimum - initial) / (decay ** 2)) * (solve_count ** 2)) + initial 20 | value = math.ceil(value) 21 | 22 | if value < minimum: 23 | value = minimum 24 | 25 | return value 26 | -------------------------------------------------------------------------------- /librarys/utils/files.py: -------------------------------------------------------------------------------- 1 | import pathlib 2 | import os 3 | 4 | 5 | # 用来检查文件是否存在 6 | def file_exists_check(filename: str) -> bool: 7 | path = pathlib.Path(filename) 8 | return path.exists() 9 | 10 | 11 | # 用来删除文件 12 | def file_delete(name: str): 13 | if file_exists_check(filename=name): 14 | os.unlink(name) 15 | -------------------------------------------------------------------------------- /librarys/utils/strings.py: -------------------------------------------------------------------------------- 1 | import uuid 2 | import datetime 3 | import hashlib 4 | import time 5 | import random 6 | import string 7 | 8 | 9 | def get_uuid() -> str: 10 | """ 11 | 生成唯一id值 12 | :return: 13 | """ 14 | return str(uuid.uuid4()) 15 | 16 | 17 | # 获取当前时间的字符串表现形式 18 | def get_now_time() -> str: 19 | return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S") 20 | 21 | 22 | # 将字符转换成实数 23 | def str2int(s): 24 | try: 25 | return int(s) 26 | except ValueError: 27 | if '-' == s[0]: 28 | return 0 - str2int(s[1:]) 29 | elif s[0] in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']: 30 | num = 0 31 | for i in range(len(s)): 32 | if s[i] in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']: 33 | num = num * 10 + int(s[i]) 34 | else: 35 | return num 36 | else: 37 | return 0 38 | 39 | 40 | def gen_md5(info: bytes) -> str: 41 | """ 42 | 用来生成字符串的md5值 43 | :param info:加密的信息 44 | :return: 45 | """ 46 | m2 = hashlib.md5() 47 | m2.update(info) 48 | str_md5 = m2.hexdigest() 49 | return str_md5 50 | 51 | 52 | def generate_random_str(length=6) -> str: 53 | """ 54 | 用来生成随机字符串的函数 55 | :param length: 随机字符串函数的长度 56 | :return: 57 | """ 58 | ascii_char = string.ascii_lowercase + string.digits + string.ascii_uppercase 59 | str_list = [random.choice(ascii_char) for _ in range(length)] 60 | random_str = ''.join(str_list) 61 | return random_str 62 | -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | 6 | 7 | def main(): 8 | """Run administrative tasks.""" 9 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings.dev') 10 | try: 11 | from django.core.management import execute_from_command_line 12 | except ImportError as exc: 13 | raise ImportError( 14 | "Couldn't import Django. Are you sure it's installed and " 15 | "available on your PYTHONPATH environment variable? Did you " 16 | "forget to activate a virtual environment?" 17 | ) from exc 18 | execute_from_command_line(sys.argv) 19 | 20 | 21 | if __name__ == '__main__': 22 | main() 23 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | asgiref==3.3.1 2 | certifi==2020.12.5 3 | chardet==4.0.0 4 | Django==3.1.6 5 | docker==4.4.1 6 | Pillow==8.1.0 7 | psycopg2-binary==2.8.6 8 | pytz==2021.1 9 | requests==2.25.1 10 | six==1.15.0 11 | sqlparse==0.4.1 12 | urllib3==1.26.3 13 | websocket-client==0.57.0 14 | -------------------------------------------------------------------------------- /settings/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thunderbarca/BlackStone/5cc2980bdd2008ef49617e8cdce29534db11ff83/settings/__init__.py -------------------------------------------------------------------------------- /settings/config.py: -------------------------------------------------------------------------------- 1 | import queue 2 | import docker 3 | import logging 4 | 5 | """ 6 | 一些全局属性信息 7 | """ 8 | PORT_QUEUE = queue.Queue() 9 | 10 | for i in range(10000, 20000): 11 | PORT_QUEUE.put(i) 12 | 13 | # 初始化docker环境 14 | DOCKER_CLIENT = docker.from_env() 15 | 16 | logger = logging.getLogger('django') 17 | 18 | WHITE_LIST = ["zip", "rar", "7z"] 19 | -------------------------------------------------------------------------------- /settings/dev.py: -------------------------------------------------------------------------------- 1 | import logging 2 | from settings.base import * 3 | 4 | # SECURITY WARNING: don't run with debug turned on in production! 5 | DEBUG = True 6 | 7 | DATABASES = { 8 | 'default': { 9 | 'ENGINE': 'django.db.backends.postgresql', 10 | 'NAME': 'django', 11 | 'USER': 'postgres', 12 | 'PASSWORD': 'sh@dow', 13 | 'HOST': '127.0.0.1', 14 | 'PORT': '5432', 15 | } 16 | } 17 | 18 | # 设置日志 19 | LOGGING = { 20 | 'version': 1, 21 | 'disable_existing_loggers': False, 22 | 'formatters': { 23 | 'verbose_format': { 24 | 'format': '%(levelname)s %(asctime)s %(module)s %(lineno)d %(message)s' 25 | }, 26 | 'simple_format': { 27 | 'format': '%(levelname)s %(module)s %(lineno)d %(message)s' 28 | }, 29 | 'standard_format': { 30 | 'format': '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(pathname)s:%(lineno)d]' 31 | '[func:%(funcName)s][%(levelname)s][%(message)s]'} 32 | }, 33 | 'filters': { 34 | 'require_debug_true': { 35 | '()': 'django.utils.log.RequireDebugTrue', 36 | }, 37 | }, 38 | 'handlers': { 39 | 'console': { 40 | 'level': 'DEBUG', 41 | 'filters': ['require_debug_true'], 42 | 'class': 'logging.StreamHandler', 43 | 'formatter': 'simple_format' 44 | }, 45 | 'file': { 46 | # 实际开发建议使用WARNING 47 | 'level': 'WARNING', 48 | 'class': 'logging.handlers.RotatingFileHandler', 49 | # 日志位置,日志文件名,日志保存目录必须手动创建,注:这里的文件路径要注意BASE_DIR 50 | 'filename': str(BASE_DIR.joinpath("data/logs/info.log")), 51 | # 日志文件的最大值,这里我们设置300M 52 | 'maxBytes': 300 * 1024 * 1024, 53 | # 日志文件的数量,设置最大日志数量为10 54 | 'backupCount': 10, 55 | # 日志格式:详细格式 56 | 'formatter': 'standard_format' 57 | }, 58 | }, 59 | # 日志对象 60 | 'loggers': { 61 | 'django': { 62 | 'handlers': ['console', 'file'], 63 | 'propagate': True, # 是否让日志信息继续冒泡给其他的日志处理系统 64 | }, 65 | } 66 | } 67 | 68 | logger = logging.getLogger('django') 69 | -------------------------------------------------------------------------------- /settings/prod.py: -------------------------------------------------------------------------------- 1 | from settings.base import * 2 | 3 | # SECURITY WARNING: don't run with debug turned on in production! 4 | DEBUG = False 5 | 6 | DATABASES = { 7 | 'default': { 8 | 'ENGINE': 'django.db.backends.postgresql', 9 | 'NAME': 'django', 10 | 'USER': 'postgres', 11 | 'PASSWORD': 'sh@dow', 12 | 'HOST': '127.0.0.1', 13 | 'PORT': '5432', 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /urls.py: -------------------------------------------------------------------------------- 1 | """BlackStone URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/3.1/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.urls import path 17 | from django.urls import include 18 | 19 | from backend import backend_url 20 | from front import front_urls 21 | 22 | from front.views.errors import PageNotFound 23 | 24 | urlpatterns = [ 25 | path('', include(front_urls)), 26 | path('back/', include(backend_url)), 27 | ] 28 | 29 | handler404 = PageNotFound.as_view() 30 | -------------------------------------------------------------------------------- /websocket.py: -------------------------------------------------------------------------------- 1 | # 异步函数 2 | async def websocket_application(scope, receive, send): 3 | """ 4 | var connection = new WebSocket('ws://127.0.0.1:8000/abc') 5 | 6 | scope: 详细如下 7 | {'type': 'websocket', 8 | 'path': '/abc', 9 | 'raw_path': b'/abc', 10 | 'headers': [(b'host', b'127.0.0.1:8000'), (b'upgrade', b'WebSocket'), (b'connection', b'Upgrade'), 11 | (b'sec-websocket-version', b'13'), (b'sec-websocket-key', b'2viLa4ZBnF2953ARONVITw=='), 12 | (b'accept', b'*/*'), (b'accept-encoding', b'gzip, deflate'), (b'user-agent', b'Python/3.8 aiohttp/3.6.2')], 13 | 'query_string': b'', 14 | 'client': ['127.0.0.1', 47220], 15 | 'server': ['127.0.0.1', 8000], 16 | 'subprotocols': [], 17 | 'asgi': {'version': '3.0'}} 18 | 19 | receive: 详细如下 20 | > 21 | 22 | send: 23 | 24 | """ 25 | while True: 26 | event = await receive() 27 | 28 | if event['type'] == 'websocket.connect': 29 | await send({ 30 | 'type': 'websocket.accept' 31 | }) 32 | 33 | if event['type'] == 'websocket.disconnect': 34 | break 35 | 36 | if event['type'] == 'websocket.receive': 37 | if event['text'] == 'ping': 38 | await send({ 39 | 'type': 'websocket.send', 40 | 'text': 'pong!' 41 | }) 42 | -------------------------------------------------------------------------------- /wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for BlackStone project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings.dev') 15 | 16 | application = get_wsgi_application() 17 | --------------------------------------------------------------------------------