├── .DS_Store ├── .gitignore ├── LICENSE ├── README.md ├── docker_lib ├── .DS_Store ├── __init__.py ├── docker_add.py ├── docker_del.py └── docker_get.py ├── github_images ├── .DS_Store ├── web_range平台使用.gif ├── web_range打开环境图片.jpg ├── web_range添加环境图片.jpg ├── web_range添加用户.jpg ├── web_range状态图片.jpg ├── web_range环境图片.jpg └── web_range首页图片.jpg ├── log ├── .DS_Store ├── app_info.log └── logger.py ├── nginx.conf ├── requirements.txt ├── run.py ├── static ├── .DS_Store ├── buss │ ├── .DS_Store │ ├── css │ │ ├── detail.css │ │ ├── main.css │ │ ├── plugin.css │ │ ├── search.css │ │ └── task.css │ └── js │ │ ├── .DS_Store │ │ ├── common.js │ │ ├── config.js │ │ └── plugin.js ├── css │ ├── .DS_Store │ ├── bootstrap.min.css │ ├── components.css │ ├── core.css │ ├── docker.css │ ├── dropify.min.css │ ├── elements.css │ ├── icons.css │ ├── menu.css │ ├── pages.css │ ├── responsive.css │ ├── style_line.css │ └── typicons.css ├── fonts │ ├── Material-Design-Iconic-Font.ttf │ ├── Material-Design-Iconic-Font.woff │ ├── Material-Design-Iconic-Font.woff2 │ ├── dropify.ttf │ ├── dropify.woff │ ├── fontawesome-webfont.ttf │ ├── fontawesome-webfont.woff │ ├── fontawesome-webfont.woff2 │ ├── themify.ttf │ └── themify.woff ├── google │ ├── -L14Jk06m6pUHB-5mXQQnYX0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── 0eC6fl06luXEYWpBSJvXCIX0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── 77FXFjRbGzN4aCrSFhlh3oX0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── 97uahxiqZRoncBaCEI3aW4X0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── Fl4y0QdOxyyTHEGMXX8kcYX0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── Hgo13k-tfSpn0qi1SFdUfZBw1xU1rKptJj_0jans920.woff2 │ ├── I3S1wsgSg9YCurV6PUkTOYX0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── JaMH4jmmzP070-OYo03anaCWcynf_cDxXwCLxiixG1c.woff2 │ ├── Karla.css │ ├── Ks_cVxiCiwUWVsFWFA3Bjn-_kf6ByYO6CLYdB4HQE-Y.woff2 │ ├── NJ4vxlgWwWbEsv18dAhqnn-_kf6ByYO6CLYdB4HQE-Y.woff2 │ ├── NYDWBdD4gIq26G5XYbHsFIX0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── Pru33qjShpZSmG3z6VYwnYX0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── PwZc-YbIL414wB9rB1IAPYX0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── Rancho.css │ ├── Roboto.css │ ├── RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2 │ ├── S1bXQ0LrY7AzefpgNae9sYDGDUGfDkXyfkzVDelzfFk.woff2 │ ├── UX6i4JxQDm3fVTc1CPuwqoX0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── ZLqKeelYbATG60EpZBSDy4X0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── _VYFx-s824kXq_Ul2BHqYH-_kf6ByYO6CLYdB4HQE-Y.woff2 │ ├── d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2 │ ├── isZ-wbCXNKAbnjo6_TwHToX0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── jSN2CGVDbcVyCnfJfjSdfIX0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── mbmhprMH69Zi6eEPBYVFhYX0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── mx9Uck6uB63VIKFYnEMXrYX0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── oHi30kwQWvpCWqAhzHcCSIX0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2 │ ├── oOeFwZNlrTefzLYmlVV1UIX0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── r3NqIkFHFaF3esZDc3WT5BkAz4rYn47Zy2rvigWQf6w.woff2 │ ├── rGvHdJnr2l75qb0YND9NyIX0hVgzZQUfRDuZrPvH3D8.woff2 │ ├── sTdaA6j0Psb920Vjv-mrzH-_kf6ByYO6CLYdB4HQE-Y.woff2 │ ├── suoMYBGv5sGCUIrF9mVTfXYhjbSpvc47ee6xR_80Hnw.woff2 │ ├── tnj4SB6DNbdaQnsM8CFqBX-_kf6ByYO6CLYdB4HQE-Y.woff2 │ ├── uYECMKoHcO9x1wdmbyHIm3-_kf6ByYO6CLYdB4HQE-Y.woff2 │ └── yJONObwbYmkcfKME0p1HqevvDin1pK8aKteLpeZ5c0A.woff2 ├── images │ ├── .DS_Store │ ├── big │ │ ├── .DS_Store │ │ ├── bg1.jpg │ │ └── bg2.jpg │ ├── down.png │ ├── favicon.jpg │ ├── multiple-arrow.png │ └── up.png ├── js │ ├── .DS_Store │ ├── Chart.js │ ├── ajaxfileupload.js │ ├── bootstrap.min.js │ ├── detect.js │ ├── dropify.min.js │ ├── fastclick.js │ ├── jquery.app.js │ ├── jquery.blockUI.js │ ├── jquery.core.js │ ├── jquery.counterup.min.js │ ├── jquery.min.js │ ├── jquery.nicescroll.js │ ├── jquery.scrollTo.min.js │ ├── jquery.slimscroll.js │ ├── modernizr.min.js │ ├── module.min.js │ ├── npm.js │ ├── pace.min.js │ ├── uploader.min.js │ ├── waves.js │ └── wow.min.js ├── less │ ├── components.less │ ├── core.less │ ├── elements.less │ ├── icons.less │ ├── icons │ │ ├── css │ │ │ └── material-design-iconic-font.css │ │ ├── font-awesome │ │ │ ├── HELP-US-OUT.txt │ │ │ ├── css │ │ │ │ ├── font-awesome.css │ │ │ │ ├── font-awesome.min.css │ │ │ │ ├── mixins.css │ │ │ │ └── variables.css │ │ │ ├── fonts │ │ │ │ ├── FontAwesome.otf │ │ │ │ ├── fontawesome-webfont.eot │ │ │ │ ├── fontawesome-webfont.svg │ │ │ │ ├── fontawesome-webfont.ttf │ │ │ │ ├── fontawesome-webfont.woff │ │ │ │ └── fontawesome-webfont.woff2 │ │ │ ├── less │ │ │ │ ├── animated.less │ │ │ │ ├── bordered-pulled.less │ │ │ │ ├── core.less │ │ │ │ ├── fixed-width.less │ │ │ │ ├── font-awesome.less │ │ │ │ ├── icons.less │ │ │ │ ├── larger.less │ │ │ │ ├── list.less │ │ │ │ ├── mixins.less │ │ │ │ ├── path.less │ │ │ │ ├── rotated-flipped.less │ │ │ │ ├── stacked.less │ │ │ │ └── variables.less │ │ │ └── scss │ │ │ │ ├── _animated.scss │ │ │ │ ├── _bordered-pulled.scss │ │ │ │ ├── _core.scss │ │ │ │ ├── _fixed-width.scss │ │ │ │ ├── _icons.scss │ │ │ │ ├── _larger.scss │ │ │ │ ├── _list.scss │ │ │ │ ├── _mixins.scss │ │ │ │ ├── _path.scss │ │ │ │ ├── _rotated-flipped.scss │ │ │ │ ├── _stacked.scss │ │ │ │ ├── _variables.scss │ │ │ │ └── font-awesome.scss │ │ ├── material-design-iconic-font │ │ │ ├── css │ │ │ │ ├── material-design-iconic-font.css │ │ │ │ └── material-design-iconic-font.min.css │ │ │ ├── fonts │ │ │ │ ├── Material-Design-Iconic-Font.eot │ │ │ │ ├── Material-Design-Iconic-Font.svg │ │ │ │ ├── Material-Design-Iconic-Font.ttf │ │ │ │ ├── Material-Design-Iconic-Font.woff │ │ │ │ └── Material-Design-Iconic-Font.woff2 │ │ │ └── material-design-iconic-font.less │ │ └── themify-icons │ │ │ ├── fonts │ │ │ ├── themify.eot │ │ │ ├── themify.svg │ │ │ ├── themify.ttf │ │ │ └── themify.woff │ │ │ ├── ie7 │ │ │ ├── ie7.css │ │ │ └── ie7.js │ │ │ ├── themify-icons.css │ │ │ └── themify-icons.less │ ├── menu.less │ ├── pages.less │ ├── responsive.less │ └── variables.less └── plugin │ ├── bootstrap-datepicker │ └── dist │ │ ├── css │ │ ├── bootstrap-datepicker.css │ │ ├── bootstrap-datepicker.min.css │ │ ├── bootstrap-datepicker.standalone.css │ │ ├── bootstrap-datepicker.standalone.min.css │ │ ├── bootstrap-datepicker3.css │ │ ├── bootstrap-datepicker3.min.css │ │ ├── bootstrap-datepicker3.standalone.css │ │ └── bootstrap-datepicker3.standalone.min.css │ │ ├── js │ │ ├── bootstrap-datepicker.js │ │ └── bootstrap-datepicker.min.js │ │ └── locales │ │ ├── bootstrap-datepicker.ar.min.js │ │ ├── bootstrap-datepicker.az.min.js │ │ ├── bootstrap-datepicker.bg.min.js │ │ ├── bootstrap-datepicker.bs.min.js │ │ ├── bootstrap-datepicker.ca.min.js │ │ ├── bootstrap-datepicker.cs.min.js │ │ ├── bootstrap-datepicker.cy.min.js │ │ ├── bootstrap-datepicker.da.min.js │ │ ├── bootstrap-datepicker.de.min.js │ │ ├── bootstrap-datepicker.el.min.js │ │ ├── bootstrap-datepicker.en-GB.min.js │ │ ├── bootstrap-datepicker.es.min.js │ │ ├── bootstrap-datepicker.et.min.js │ │ ├── bootstrap-datepicker.eu.min.js │ │ ├── bootstrap-datepicker.fa.min.js │ │ ├── bootstrap-datepicker.fi.min.js │ │ ├── bootstrap-datepicker.fo.min.js │ │ ├── bootstrap-datepicker.fr-CH.min.js │ │ ├── bootstrap-datepicker.fr.min.js │ │ ├── bootstrap-datepicker.gl.min.js │ │ ├── bootstrap-datepicker.he.min.js │ │ ├── bootstrap-datepicker.hr.min.js │ │ ├── bootstrap-datepicker.hu.min.js │ │ ├── bootstrap-datepicker.hy.min.js │ │ ├── bootstrap-datepicker.id.min.js │ │ ├── bootstrap-datepicker.is.min.js │ │ ├── bootstrap-datepicker.it-CH.min.js │ │ ├── bootstrap-datepicker.it.min.js │ │ ├── bootstrap-datepicker.ja.min.js │ │ ├── bootstrap-datepicker.ka.min.js │ │ ├── bootstrap-datepicker.kh.min.js │ │ ├── bootstrap-datepicker.kk.min.js │ │ ├── bootstrap-datepicker.kr.min.js │ │ ├── bootstrap-datepicker.lt.min.js │ │ ├── bootstrap-datepicker.lv.min.js │ │ ├── bootstrap-datepicker.me.min.js │ │ ├── bootstrap-datepicker.mk.min.js │ │ ├── bootstrap-datepicker.ms.min.js │ │ ├── bootstrap-datepicker.nb.min.js │ │ ├── bootstrap-datepicker.nl-BE.min.js │ │ ├── bootstrap-datepicker.nl.min.js │ │ ├── bootstrap-datepicker.no.min.js │ │ ├── bootstrap-datepicker.pl.min.js │ │ ├── bootstrap-datepicker.pt-BR.min.js │ │ ├── bootstrap-datepicker.pt.min.js │ │ ├── bootstrap-datepicker.ro.min.js │ │ ├── bootstrap-datepicker.rs-latin.min.js │ │ ├── bootstrap-datepicker.rs.min.js │ │ ├── bootstrap-datepicker.ru.min.js │ │ ├── bootstrap-datepicker.sk.min.js │ │ ├── bootstrap-datepicker.sl.min.js │ │ ├── bootstrap-datepicker.sq.min.js │ │ ├── bootstrap-datepicker.sr-latin.min.js │ │ ├── bootstrap-datepicker.sr.min.js │ │ ├── bootstrap-datepicker.sv.min.js │ │ ├── bootstrap-datepicker.sw.min.js │ │ ├── bootstrap-datepicker.th.min.js │ │ ├── bootstrap-datepicker.tr.min.js │ │ ├── bootstrap-datepicker.uk.min.js │ │ ├── bootstrap-datepicker.vi.min.js │ │ ├── bootstrap-datepicker.zh-CN.min.js │ │ └── bootstrap-datepicker.zh-TW.min.js │ ├── jquery-knob │ ├── excanvas.js │ └── jquery.knob.js │ ├── jquery.poshytip.min.js │ ├── jquery.waypoints.min.js │ ├── morris │ ├── morris.css │ ├── morris.js │ └── morris.min.js │ ├── multiselect │ ├── css │ │ └── multi-select.css │ ├── img │ │ └── switch.png │ └── js │ │ └── jquery.multi-select.js │ ├── raphael │ └── raphael-min.js │ ├── sweetalert │ ├── sweetalert.css │ └── sweetalert.min.js │ ├── switchery │ ├── switchery.min.css │ └── switchery.min.js │ ├── tip-darkgray │ ├── tip-darkgray.css │ ├── tip-darkgray.png │ └── tip-darkgray_arrows.png │ └── tip-twitter │ ├── tip-twitter.css │ └── tip-twitter_arrows.gif ├── supervisor.conf ├── system_info ├── .DS_Store ├── __init__.py └── get_sysinfo.py ├── templates ├── .DS_Store ├── 404.html ├── 500.html ├── change_pass.html ├── docker.html ├── images.html ├── layout.html ├── login.html ├── logout.html ├── search.html ├── setting.html └── status.html ├── test.db └── test.json /.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/.DS_Store -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | 6 | # C extensions 7 | *.so 8 | 9 | # Distribution / packaging 10 | .Python 11 | env/ 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | *.egg-info/ 25 | .installed.cfg 26 | *.egg 27 | 28 | # PyInstaller 29 | # Usually these files are written by a python script from a template 30 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 31 | *.manifest 32 | *.spec 33 | 34 | # Installer logs 35 | pip-log.txt 36 | pip-delete-this-directory.txt 37 | 38 | # Unit test / coverage reports 39 | htmlcov/ 40 | .tox/ 41 | .coverage 42 | .coverage.* 43 | .cache 44 | nosetests.xml 45 | coverage.xml 46 | *.cover 47 | .hypothesis/ 48 | 49 | # Translations 50 | *.mo 51 | *.pot 52 | 53 | # Django stuff: 54 | *.log 55 | local_settings.py 56 | 57 | # Flask stuff: 58 | instance/ 59 | .webassets-cache 60 | 61 | # Scrapy stuff: 62 | .scrapy 63 | 64 | # Sphinx documentation 65 | docs/_build/ 66 | 67 | # PyBuilder 68 | target/ 69 | 70 | # Jupyter Notebook 71 | .ipynb_checkpoints 72 | 73 | # pyenv 74 | .python-version 75 | 76 | # celery beat schedule file 77 | celerybeat-schedule 78 | 79 | # SageMath parsed files 80 | *.sage.py 81 | 82 | # dotenv 83 | .env 84 | 85 | # virtualenv 86 | .venv 87 | venv/ 88 | ENV/ 89 | 90 | # Spyder project settings 91 | .spyderproject 92 | .spyproject 93 | 94 | # Rope project settings 95 | .ropeproject 96 | 97 | # mkdocs documentation 98 | /site 99 | 100 | # mypy 101 | .mypy_cache/ 102 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Web Range平台(Web漏洞、Ctf场景靶场) 2 | * 一个Web靶场平台,可以导入各种Docker漏洞场景和Ctf场景。可以用来部署在私人、公有网络中,以供练习使用。 3 | * 突然发现,写说明书才是最难的!!! 4 | 5 | 6 | # 鸣谢 7 | * 先感谢伟大的开源社区,让这个小网站可以顺利完成。 8 | 9 | * 使用web框架[tornado](http://www.tornadoweb.org/en/stable/)(感谢),web页面使用[xunfeng](https://github.com/ysrc/xunfeng)前端界面(感谢ysrc,已征得同意使用),后端使用[docker](https://github.com/docker/docker-py)模块作为核心(感谢),感谢[docker](https://docker.com)虚拟化平台,感谢所有在项目中用到的优秀模块,感谢在网络中分享优秀代码的大佬。 10 | 11 | # 系统环境 12 | 13 | > python版本:3.6 14 | > 15 | > tornado版本:5.0 16 | > 17 | > 操作系统版本:ubuntu16.04+ 18 | > 19 | > Docker版本:18.03.0-ce-mac60 (23751)(2017年之后的版本) 20 | > 21 | > 数据库:sqlite3 22 | > 23 | >默认账户密码:admin/123456 24 | 25 | 26 | # 环境配置 27 | 28 | 1、安装ubuntu系统16.04 29 | 30 | 2、clone项目 31 | 32 | ```sh 33 | git clone https://github.com/cleverbao/WebRange.git 34 | ``` 35 | 36 | 3、安装python3.6 37 | 38 | ``` sh 39 | sudo apt install python3 python3-dev python3-pip -y 40 | ``` 41 | 42 | 4、安装依赖库 43 | 44 | ``` sh 45 | cd web_range 46 | pip install -r requirements.txt 47 | ``` 48 | 49 | 5、安装最新版本的docker 50 | 51 | ``` sh 52 | #! 安装步骤只适合Ubuntu16.04版本 53 | #! 如果是其他版本参考https://docs.docker.com/engine/installation/linux/docker-ce/ubuntu/ 54 | sudo apt-get remove docker docker-engine docker.io 55 | sudo apt-get update 56 | sudo apt-get install \ 57 | apt-transport-https \ 58 | ca-certificates \ 59 | curl \ 60 | software-properties-common 61 | curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - 62 | sudo apt-key fingerprint 0EBFCD88 63 | sudo add-apt-repository \ 64 | "deb [arch=amd64] https://download.docker.com/linux/ubuntu \ 65 | $(lsb_release -cs) \ 66 | stable" 67 | sudo apt-get update 68 | sudo apt-get install docker-ce 69 | #! 如果使用非root用户运行docker,需要运行一下命令: 70 | sudo groupadd docker 71 | sudo gpasswd -a ${USER} docker 72 | sudo service docker restart 73 | ``` 74 | 75 | 6、安装sqlit3 76 | 77 | ``` sh 78 | sudo apt install sqlite3 -y 79 | ``` 80 | 81 | 7、运行系统 82 | 83 | ``` sh 84 | python3 run.py 85 | ``` 86 | 87 | 8、使用supervisor开启守护进程(非必须) 88 | 89 | ``` sh 90 | vim ./supervisor.conf 91 | #! 修改配置项 92 | #! 将‘directory = /root/WebRange’中’=‘后面的内容改为项目所在目录 93 | #! 将‘user = root’中‘=’后面的内容,改为用来启动程序的用户 94 | cp ./supervisor.conf /etc/supervisor/conf.d/WebRange.conf 95 | sudo service supervisord restart 96 | ``` 97 | 98 | 9、由于程序使用了websocket进行数据传输,因此如果需要使用nginx进行反向代理,可以参考使用以下配置文件 99 | 100 | ``` conf 101 | server { 102 | listen 80; 103 | listen [::]:80; 104 | 105 | server_name localhost; 106 | error_page 404 = /404.html; 107 | 108 | # root /var/www/example.com; 109 | # index index.html; 110 | location /static/{ 111 | alias /root/WebRange/static/; 112 | expires 24h; 113 | } 114 | location / { 115 | proxy_pass_header Server; 116 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 117 | proxy_http_version 1.1; 118 | proxy_set_header Upgrade $http_upgrade; 119 | proxy_set_header Connection "upgrade"; 120 | proxy_set_header Host $http_host; 121 | proxy_redirect off; 122 | proxy_set_header X-Real-IP $remote_addr; 123 | proxy_pass http://127.0.0.1:8000/; 124 | } 125 | } 126 | ``` 127 | 128 | 129 | 130 | ## 主要功能 131 | 132 | * 提供Web界面,通过登陆用户,打开实验场景进行练习。 133 | 134 | ![主页面](github_images/web_range首页图片.jpg) 135 | 136 | * 提供了接口进行添加用户,需要系统密码(可以在run.py中进行修改),/add_user?sys_pass=admin123&username=test&password=test&email=test@test.com 137 | 138 | ![添加用户](github_images/web_range添加用户.jpg) 139 | 140 | * 用户登陆后,可以搜索想要练习的场景关键字。 141 | 142 | * 用户登陆后,可以在环境界面查看所有的实验场景,可以选择场景开启开启环境(由于docker的问题,开启web服务,第一次访问会403,刷新一下就可以了)。 143 | 144 | ![查看所有环境](github_images/web_range环境图片.jpg) 145 | 146 | * 实验场景开启后,会在当前主机随机映射端口,如果容器开启了80和8080端口,程序将会自动打开对应的Web页面。如果环境需要开启多个端口,可以在状态页面看到所有开启的端口信息,如果是web服务会自动生成链接,其他的端口会显示容器端口和主机映射端口。 147 | 148 | ![打开环境](github_images/web_range打开环境图片.jpg) 149 | 150 | * 在环境页面提供了新增环境的功能,可以通过填写数据新增环境,也可以直接上传文件新增环境。 151 | 152 | * 增加环境时需要填写每一项的内容,环境分为ctf环境和漏洞复现环境,ctf环境需要加入flag(现阶段没有验证flag功能,后续版本会加入flag验证功能或ctf比赛功能)。 153 | 154 | ![添加环境](github_images/web_range添加环境图片.jpg) 155 | 156 | * 用户登陆后,可以在状态页面管理已经开启的环境。 157 | 158 | ![系统状态](github_images/web_range状态图片.jpg) 159 | 160 | 161 | * 在设置页面可以修改当前用户密码。 162 | 163 | > 通过超级密码可以添加用户,添加场景,没有超级密码任何账户都没有权限操作。 164 | > 165 | 166 | 167 | 168 | 169 | 170 | 171 | # 操作视频 172 | 173 | 174 | 175 | ![使用方法](github_images/web_range平台使用.gif) 176 | 177 | 178 | 179 | # 附加说明 180 | 181 | > 本项目禁止作用于商业用途。 182 | -------------------------------------------------------------------------------- /docker_lib/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/docker_lib/.DS_Store -------------------------------------------------------------------------------- /docker_lib/__init__.py: -------------------------------------------------------------------------------- 1 | #! coding=utf-8 2 | # 初始化docker模块,直接提供三个控制借口,可以直接操作docker镜像和容器。 3 | import docker 4 | 5 | from log.logger import logger 6 | from docker_lib.docker_add import Dokcers_Add 7 | from docker_lib.docker_del import Dokcers_Del 8 | from docker_lib.docker_get import Dokcers_Get 9 | 10 | try: 11 | client = docker.from_env() 12 | client.images.list() 13 | logger.info('连接到Docker进程。') 14 | except Exception as e : 15 | logger.warning('连接本地Docker进程失败,可能是Docker进程未开启!') 16 | exit() 17 | 18 | Dockers_Start = Dokcers_Add(client) 19 | Dockers_Stop = Dokcers_Del(client) 20 | Dockers_Info = Dokcers_Get(client) 21 | 22 | -------------------------------------------------------------------------------- /docker_lib/docker_add.py: -------------------------------------------------------------------------------- 1 | #!coding=utf-8 2 | # 接受指令,开启一个docker容器,并返回一个容器id。 3 | # 接受指令,新建一个docker镜像,并返回一个镜像id。 4 | 5 | from docker import errors as docker_errors 6 | from . import logger 7 | 8 | 9 | class Dokcers_Add(): 10 | 11 | def __init__(self, client): 12 | super(Dokcers_Add, self).__init__() 13 | self.client = client 14 | 15 | # 使用docker pull获取一个docekr镜像 16 | def Add_Images(self, Images_Name, Images_Tag = 'latest'): 17 | ''' 18 | :param Images_Name: pull的镜像名字 19 | :param Images_Tag: 镜像的标签,默认是latest 20 | :return: docker镜像对象。 21 | ''' 22 | 23 | try: 24 | Images = self.client.images.pull(Images_Name, Images_Tag) 25 | logger.info('创建一个镜像,镜像ID为:%s' % Images.id) 26 | except docker_errors.APIError as e: 27 | logger.warning('Pull一个容器失败,因为Docker服务出错!') 28 | return False 29 | return Images 30 | 31 | 32 | 33 | # 开启一个容器 34 | def Start_Containers(self, Images_Id, Ports, Mem_Limit = '', Command = '', Volumes_Path = {}): 35 | ''' 36 | 37 | :param Images_Id: 使用的镜像ID 38 | :param Mem_Limit: 设置分配的内存大小,默认为30M。 39 | :param Ports: 开启容器转发的端口,是一个字典类型的参数,容器端口对应主机端口,eg:{'2222/tcp': 3333,'1111/tcp': ('127.0.0.1', 1111)},{'1111/tcp': [1234, 4567]} 40 | :param Command: 启动容器时运行的命令,默认为空,一般我们不需要修改这个参数。 41 | :param Volumes_Path: 启动容器时挂载的目录,默认为空。类型是一个字典。eg:{'/home/user1/': {'bind': '/mnt/vol2', 'mode': 'rw'}, 42 | '/var/www': {'bind': '/mnt/vol1', 'mode': 'ro'}} ,bind The path to mount the volume inside the container 43 | mode Either rw to mount the volume read/write, or ro to mount it read-only. 44 | :return: 返回一个容器ID 45 | ''' 46 | 47 | try: 48 | Containers = self.client.containers.run(Images_Id, \ 49 | detach = True, \ 50 | mem_swappiness = 0, \ 51 | auto_remove = True, \ 52 | ports = Ports, \ 53 | command = Command, \ 54 | volumes = Volumes_Path 55 | ) 56 | logger.info('创建一个容器,容器ID为:%s' % Containers.id) 57 | 58 | except docker_errors.ContainerError as e: 59 | logger.warning('创建一个容器失败,因为容器以非零退出代码退出并且分离!') 60 | return False 61 | except docker_errors.ImageNotFound as e: 62 | logger.warning('创建一个容器失败,因为指定的容器不存在!') 63 | return False 64 | except docker_errors.APIError as e: 65 | logger.warning('创建一个容器失败,因为Docker服务出错!') 66 | return False 67 | 68 | return Containers.id 69 | 70 | 71 | 72 | 73 | 74 | 75 | -------------------------------------------------------------------------------- /docker_lib/docker_del.py: -------------------------------------------------------------------------------- 1 | #!coding=utf-8 2 | # 接受指令,删除一个docker容器,并返回true或false。 3 | # 接受指令,删除一个docker镜像,并返回true或false。 4 | 5 | from docker import errors as docker_errors 6 | from . import logger 7 | 8 | class Dokcers_Del(): 9 | 10 | def __init__(self, client): 11 | super(Dokcers_Del, self).__init__() 12 | self.client = client 13 | 14 | # 删除一个镜像 15 | def Remove_Images(self, Images_Id): 16 | ''' 17 | 18 | :param Images_Id: 一个镜像的ID 19 | :return: true或者false 20 | ''' 21 | 22 | try: 23 | self.client.images.remove(image = Images_Id) 24 | logger.info('删除了一个镜像,镜像ID是:%s' % Images_Id) 25 | 26 | except docker_errors.APIError as e: 27 | logger.warning('删除镜像失败,因为Docker服务出错!') 28 | return False 29 | 30 | return True 31 | 32 | 33 | # 停止一个容器 34 | def Stop_Containers(self, Con): 35 | ''' 36 | 37 | :param Con: 一个docker容器的对象,需要先使用docker_get.Get_Images_Message()获取一个容器对象。 38 | :return: true或false 39 | ''' 40 | try: 41 | Con.remove(v = True, force = True) 42 | logger.info('停止了一个容器,容器ID是:%s' % Con.id) 43 | except docker_errors.APIError as e: 44 | logger.warning('停止容器失败,因为Docker服务出错!') 45 | return False 46 | 47 | return True 48 | -------------------------------------------------------------------------------- /docker_lib/docker_get.py: -------------------------------------------------------------------------------- 1 | #!coding=utf-8 2 | # 接受指令,获取一个docker容器信息,并返回。 3 | # 接受指令,获取一个docker镜像信息,并返回。 4 | 5 | from docker import errors as docker_errors 6 | from . import logger 7 | 8 | 9 | class Dokcers_Get(): 10 | 11 | def __init__(self, client): 12 | super(Dokcers_Get, self).__init__() 13 | self.client = client 14 | 15 | # 获取所有的镜像信息 16 | def Get_All_Images_Message(self): 17 | ''' 18 | 19 | :return: 获取所有主机中的docker镜像,返回一个镜像的对象组成的列表。 20 | ''' 21 | 22 | try: 23 | Images_List = self.client.images.list() 24 | logger.info('获取到所有的镜像信息。') 25 | 26 | except docker_errors.APIError as e: 27 | logger.warning('获取镜像信息失败,因为Docker服务出错!') 28 | return False 29 | return Images_List 30 | 31 | # 获取一个镜像的信息 32 | def Get_Images_Message(self, Images_Name): 33 | ''' 34 | 35 | :param Images_Name: 一个doker镜像名字 36 | :return: 获取到的docker镜像对象。 37 | ''' 38 | try: 39 | Images = self.client.images.get(Images_Name) 40 | logger.info('获取到一个镜像信息,镜像ID是:%s' % Images.id) 41 | except docker_errors.ImageNotFound as e: 42 | logger.warning('获取镜像信息失败,因为不能够找到这个镜像!') 43 | return False 44 | except docker_errors.APIError as e: 45 | logger.warning('获取镜像信息失败,因为Docker服务出错!') 46 | return False 47 | return Images 48 | 49 | 50 | 51 | # 获取一个容器的信息 52 | def Get_Containers_Message(self, Containers_Id): 53 | ''' 54 | 55 | :param Containers_Id: docker容器的ID 56 | :return: 一个docker容器的对象。 57 | ''' 58 | 59 | try: 60 | Con = self.client.containers.get(Containers_Id) 61 | logger.info('获取到一个容器对象。') 62 | except docker_errors.NotFound as e: 63 | logger.warning('获取容器对象失败,因为不能够找到这个容器!') 64 | return False 65 | except docker_errors.APIError as e: 66 | logger.warning('获取容器对象失败,因为Docker服务出错!') 67 | return False 68 | return Con 69 | 70 | 71 | # 获取所有的容器信息 72 | def Get_All_User_Containers(self): 73 | ''' 74 | 75 | :return: 返回所有的docker容器对象。组成一个list。 76 | ''' 77 | 78 | try: 79 | Con_List = self.client.containers.list(all = True) 80 | logger.info('获取到所有容器对象。') 81 | except docker_errors.APIError as e : 82 | logger.warning('获取所有的容器对象失败,因为Docker服务出错!') 83 | return False 84 | return Con_List 85 | 86 | # 获取所有以某个镜像建立的容器 87 | def Get_All_Images_Containers(self, Images_Id): 88 | ''' 89 | 90 | :param Images_Id: docker镜像的ID 91 | :return: 所有以某个docker镜像建立的容器对象,组成一个list。 92 | ''' 93 | 94 | try: 95 | Con_List = self.client.containers.list(filters = {'ancestor' : Images_Id}) 96 | logger.info('获取到所有ID为%s的镜像的容器对象。' % Images_Id) 97 | except docker_errors.APIError as e: 98 | logger.warning('获取所有ID为%s的镜像的容器对象。失败,因为Docker服务出错!' % Containers_Name) 99 | return False 100 | return Con_List 101 | 102 | -------------------------------------------------------------------------------- /github_images/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/github_images/.DS_Store -------------------------------------------------------------------------------- /github_images/web_range平台使用.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/github_images/web_range平台使用.gif -------------------------------------------------------------------------------- /github_images/web_range打开环境图片.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/github_images/web_range打开环境图片.jpg -------------------------------------------------------------------------------- /github_images/web_range添加环境图片.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/github_images/web_range添加环境图片.jpg -------------------------------------------------------------------------------- /github_images/web_range添加用户.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/github_images/web_range添加用户.jpg -------------------------------------------------------------------------------- /github_images/web_range状态图片.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/github_images/web_range状态图片.jpg -------------------------------------------------------------------------------- /github_images/web_range环境图片.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/github_images/web_range环境图片.jpg -------------------------------------------------------------------------------- /github_images/web_range首页图片.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/github_images/web_range首页图片.jpg -------------------------------------------------------------------------------- /log/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/log/.DS_Store -------------------------------------------------------------------------------- /log/app_info.log: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/log/app_info.log -------------------------------------------------------------------------------- /log/logger.py: -------------------------------------------------------------------------------- 1 | #! coding=utf-8 2 | import logging 3 | 4 | logger = logging.getLogger() # 不加名称设置root logger 5 | logger.setLevel(logging.INFO) 6 | 7 | formatter = logging.Formatter('%(asctime)s - %(filename)s[line:%(lineno)d] - %(levelname)s: %(message)s', 8 | datefmt = '%Y-%m-%d %H:%M:%S' 9 | ) 10 | 11 | # 使用FileHandler输出到文件 12 | File_log = logging.FileHandler('./log/app_info.log', 'r+') 13 | File_log.setLevel(logging.INFO) 14 | File_log.setFormatter(formatter) 15 | 16 | # 使用StreamHandler输出到屏幕 17 | Terminal_log = logging.StreamHandler() 18 | Terminal_log.setLevel(logging.INFO) 19 | Terminal_log.setFormatter(formatter) 20 | 21 | # 添加两个Handler 22 | logger.addHandler(Terminal_log) 23 | logger.addHandler(File_log) 24 | -------------------------------------------------------------------------------- /nginx.conf: -------------------------------------------------------------------------------- 1 | server { 2 | listen 80; 3 | listen [::]:80; 4 | 5 | server_name localhost; 6 | error_page 404 = /404.html; 7 | 8 | # root /var/www/example.com; 9 | # index index.html; 10 | location /static/{ 11 | alias /root/web_range/static/; 12 | expires 24h; 13 | } 14 | location / { 15 | proxy_pass_header Server; 16 | proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 17 | proxy_http_version 1.1; 18 | proxy_set_header Upgrade $http_upgrade; 19 | proxy_set_header Connection "upgrade"; 20 | proxy_set_header Host $http_host; 21 | proxy_redirect off; 22 | proxy_set_header X-Real-IP $remote_addr; 23 | proxy_pass http://127.0.0.1:8000/; 24 | } 25 | } -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | docker 2 | tornado 3 | psutil 4 | supervisor 5 | virtualenv -------------------------------------------------------------------------------- /static/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/.DS_Store -------------------------------------------------------------------------------- /static/buss/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/buss/.DS_Store -------------------------------------------------------------------------------- /static/buss/css/detail.css: -------------------------------------------------------------------------------- 1 | .portlet-body p { 2 | word-wrap: break-word; 3 | } 4 | 5 | .label-type { 6 | background-color: rgba(48, 208, 149, 0.6); 7 | } 8 | 9 | .label-server { 10 | background-color: rgba(141, 83, 185, 0.6); 11 | } 12 | 13 | .label-time { 14 | background-color: rgba(57, 208, 232, 0.6); 15 | } 16 | 17 | .btn-tag { 18 | background-color: rgba(34, 133, 204, 0.6) !important; 19 | } 20 | 21 | .tag-danger { 22 | background-color: rgba(183, 21, 21, 0.6); 23 | } 24 | 25 | .tag-high { 26 | background-color: rgba(230, 108, 61, 0.6); 27 | } 28 | 29 | .tag-middle { 30 | background-color: rgba(220, 175, 49, 0.6); 31 | } 32 | 33 | .tag-low { 34 | background-color: rgba(147, 48, 179, 0.6); 35 | } 36 | 37 | .tag-tip { 38 | background-color: rgba(57, 154, 64, 0.6); 39 | } 40 | 41 | .dropdown-menu { 42 | background-color: rgb(47, 62, 71) !important; 43 | } 44 | 45 | .tag { 46 | float: left; 47 | margin-right: 5px; 48 | margin-bottom: 5px; 49 | margin-left: 5px; 50 | } 51 | 52 | .taglink { 53 | color: white; 54 | } 55 | 56 | .portlet-body{ 57 | line-height: 2; 58 | padding-top: 0; 59 | background-color:rgb(68, 87, 99) !important; 60 | min-height: 84px !important; 61 | color:white 62 | } 63 | -------------------------------------------------------------------------------- /static/buss/css/main.css: -------------------------------------------------------------------------------- 1 | .text-muted { 2 | word-wrap: break-word; 3 | } 4 | 5 | .text-name { 6 | color: rgba(255, 255, 255, 0.9); 7 | } 8 | 9 | .text-time { 10 | color: rgba(57, 208, 177, 0.9); 11 | } 12 | 13 | .btn-tag { 14 | background-color: rgba(34, 133, 204, 0.6) !important; 15 | } 16 | 17 | select { 18 | color: #797979 !important; 19 | } 20 | 21 | .modal-body hr { 22 | border-top: 1px solid rgba(135, 135, 135, 0.6) !important; 23 | } 24 | 25 | .modal-header { 26 | border-bottom: 1px solid rgba(135, 135, 135, 0.6) !important; 27 | } 28 | 29 | .modal-footer { 30 | border-top: 1px solid rgba(135, 135, 135, 0.6) !important; 31 | } 32 | 33 | .modal-title { 34 | color: rgba(149, 149, 150, 0.6) 35 | } 36 | 37 | select option { 38 | background-color: rgba(0, 0, 0, 0.6); 39 | } 40 | 41 | .tag-right { 42 | margin-right: 26px; 43 | } 44 | 45 | #select-all{ 46 | position: absolute; 47 | top: 51%; 48 | left: 48%; 49 | width: 20px; 50 | height: 20px; 51 | } -------------------------------------------------------------------------------- /static/buss/css/plugin.css: -------------------------------------------------------------------------------- 1 | .portlet-body p { 2 | word-wrap: break-word; 3 | } 4 | 5 | #uploadjson div div input { 6 | margin-bottom: 15px; 7 | } 8 | 9 | #uploadjson div div textarea { 10 | margin-bottom: 15px; 11 | } 12 | 13 | #uploadjson div div select { 14 | margin-bottom: 15px; 15 | } 16 | 17 | .btn-tag { 18 | background-color: rgba(34, 133, 204, 0.6) !important; 19 | color: white; 20 | } 21 | 22 | .tag-danger { 23 | background-color: rgba(183, 21, 21, 0.6); 24 | float: right; 25 | margin: 5px 10px 0 0 26 | } 27 | 28 | .tag-high { 29 | background-color: rgba(230, 108, 61, 0.6); 30 | float: right; 31 | margin: 5px 10px 0 0 32 | } 33 | 34 | .tag-middle { 35 | background-color: rgba(220, 175, 49, 0.6); 36 | float: right; 37 | margin: 5px 10px 0 0 38 | } 39 | 40 | .tag-low { 41 | background-color: rgba(147, 48, 179, 0.6); 42 | float: right; 43 | margin: 5px 10px 0 0 44 | } 45 | 46 | .tag-tip { 47 | background-color: rgba(57, 154, 64, 0.6); 48 | float: right; 49 | margin: 5px 10px 0 0 50 | } 51 | 52 | .modal-header { 53 | border-bottom: 1px solid rgba(135, 135, 135, 0.6) !important; 54 | } 55 | 56 | .modal-footer { 57 | border-top: 1px solid rgba(135, 135, 135, 0.6) !important; 58 | } 59 | 60 | .modal-title { 61 | color: rgba(149, 149, 150, 0.6) 62 | } 63 | 64 | .portlet-body p span { 65 | color: rgba(255, 255, 255, 0.9) 66 | } 67 | 68 | .portlet-body p i { 69 | color: rgba(255, 255, 255, 0.9) 70 | } 71 | 72 | .dropify-wrapper { 73 | background-color: rgba(57, 76, 87, 0.6) !important; 74 | border: 0 !important; 75 | } 76 | 77 | .dropify-preview { 78 | background-color: rgba(57, 76, 87, 0.6) !important; 79 | } 80 | 81 | select option { 82 | background-color: rgba(0, 0, 0, 0.6) !important; 83 | } 84 | 85 | select { 86 | color: #999999 !important; 87 | } 88 | 89 | .jsoninfo .form-control { 90 | margin-bottom: 15px; 91 | } 92 | 93 | .portlet .portlet-heading a{ 94 | padding:0 !important; 95 | } 96 | 97 | .portlet-title{ 98 | overflow: hidden; 99 | text-overflow:ellipsis; 100 | white-space: nowrap; 101 | float: none !important; 102 | } -------------------------------------------------------------------------------- /static/buss/css/search.css: -------------------------------------------------------------------------------- 1 | .zmdi-help-outline:before { 2 | position: absolute; 3 | top: -10px; 4 | left: 0px; 5 | } 6 | 7 | .card-box { 8 | background-color: rgba(0, 0, 0, 0.6); 9 | } 10 | 11 | .logo span { 12 | color: white !important; 13 | } 14 | 15 | .tip-twitter { 16 | max-width: 375px; 17 | } 18 | 19 | #filter { 20 | background-color: rgba(0, 0, 0, 0.6) 21 | } 22 | 23 | .btn-inverse { 24 | background-color: rgba(0, 0, 0, 0.6) !important; 25 | } 26 | 27 | .btn-inverse:hover { 28 | background-color: rgba(45, 45, 45, 0.6) !important; 29 | } 30 | 31 | .zmdi-help-outline { 32 | color: rgba(255, 255, 255, 0.6) !important; 33 | } 34 | 35 | .topbar-main { 36 | background-color: black !important; 37 | } 38 | 39 | .navbar-custom { 40 | background-color: rgba(0, 0, 0, 0.26) !important; 41 | } 42 | 43 | .submenu { 44 | border-color: rgba(0, 0, 0, 0.26) !important; 45 | background-color: rgba(0, 0, 0, 0.26) !important; 46 | } 47 | -------------------------------------------------------------------------------- /static/buss/css/task.css: -------------------------------------------------------------------------------- 1 | .portlet-body p { 2 | word-wrap: break-word; 3 | } 4 | 5 | .tag { 6 | color: #999999; 7 | } 8 | 9 | .label-type { 10 | background-color: rgba(48, 208, 149, 0.6); 11 | } 12 | 13 | .label-server { 14 | background-color: rgba(141, 83, 185, 0.6); 15 | } 16 | 17 | .label-time { 18 | background-color: rgba(57, 208, 232, 0.6); 19 | } 20 | 21 | .label-ips { 22 | background-color: rgba(100, 100, 100, 0.6); 23 | } 24 | 25 | .btn-tag { 26 | background-color: rgba(34, 133, 204, 0.6) !important; 27 | } -------------------------------------------------------------------------------- /static/buss/js/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/buss/js/.DS_Store -------------------------------------------------------------------------------- /static/buss/js/common.js: -------------------------------------------------------------------------------- 1 | 2 | function getQueryString(name) { 3 | var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); 4 | var r = window.location.search.substr(1).match(reg); 5 | if (r != null) return unescape(r[2]); 6 | return null; 7 | } 8 | 9 | function setCookie(c_name, value, expirehours) { 10 | var exdate = new Date(); 11 | exdate.setHours(exdate.getHours() + expirehours); 12 | document.cookie = c_name + "=" + escape(value) + 13 | ((expirehours == null) ? "" : ";expires=" + exdate.toGMTString()) 14 | } 15 | 16 | function getCookie(name) { 17 | var cookies = document.cookie.split(";"); 18 | for (var i = 0; i < cookies.length; i++) { 19 | var cookie = cookies[i]; 20 | var cookieStr = cookie.split("="); 21 | if (cookieStr && cookieStr[0].trim() == name) { 22 | return decodeURI(cookieStr[1]); 23 | } 24 | } 25 | } 26 | 27 | 28 | function delAllCookie() { 29 | var myDate = new Date(); 30 | myDate.setTime(-1000); 31 | var data = document.cookie; 32 | var dataArray = data.split("; "); 33 | for (var i = 0; i < dataArray.length; i++) { 34 | var varName = dataArray[i].split("="); 35 | document.cookie = varName[0] + "=''; expires=" + myDate.toGMTString(); 36 | } 37 | 38 | } 39 | 40 | /** 41 | * 更新url中的get请求 42 | * 43 | * @param {string} key http get query key 44 | * @param {string} key http get query value 45 | * @returns url?key=value&key=value 46 | */ 47 | String.prototype.url_update_query = function(key, value) { 48 | if (key) { 49 | var re = new RegExp("([?&])" + key + "=.*?(&|$)", "i"); 50 | var separator = this.indexOf('?') !== -1 ? "&" : "?"; 51 | if (this.match(re)) { 52 | return this.replace(re, '$1' + key + "=" + value + '$2'); 53 | } 54 | else { 55 | return this + separator + key + "=" + value; 56 | } 57 | } 58 | return this.toString(); 59 | } 60 | 61 | /** 62 | * 更新url中的page参数 63 | * 64 | * @param {string} page the number of page 65 | * @returns url?page=1 66 | * 67 | * @author ysrc 68 | */ 69 | String.prototype.url_add_Paginator = function(page) { 70 | if (page == undefined) { 71 | return this.toString(); 72 | } 73 | result = this.url_update_query("page", page); 74 | return result.toString(); 75 | } 76 | 77 | /** 78 | * 跳转到下一页 79 | * 80 | * @author ysrc 81 | */ 82 | function nextPage() { 83 | page = parseInt(getQueryString('page') == null ? 1 : getQueryString('page')) + 1; 84 | if (page > $('.pagination-split').children().length - 2) { 85 | alert('已到达末页'); 86 | } else { 87 | location.replace(location.href.url_add_Paginator(page)); 88 | } 89 | } 90 | 91 | function prePage() { 92 | page = parseInt(getQueryString('page') == null ? 1 : getQueryString('page')) - 1; 93 | if (page > 0) { 94 | oripage = page + 1; 95 | location.href = location.href.replace("page=" + oripage.toString(), "page=" + page.toString()); 96 | } else { 97 | alert('已到达首页'); 98 | } 99 | } 100 | function turnTo(page) { 101 | curPage = getQueryString('page'); 102 | location.replace(location.href.url_add_Paginator(page)); 103 | } 104 | 105 | -------------------------------------------------------------------------------- /static/buss/js/config.js: -------------------------------------------------------------------------------- 1 | $('.update').click(function () { 2 | name = $(this).attr('inputname'); 3 | value = $(document.getElementsByName($(this).attr('inputname'))).val(); 4 | if (name == "Masscan") { 5 | value = $("#speed").val() + "|" + value; 6 | } 7 | $.post('/updateconfig', { 8 | name: name, 9 | value: value, 10 | conftype: location.search.replace('?', '').split('&')[0].split('=')[1] 11 | }, function (data) { 12 | if (data == 'success') { 13 | swal("更新成功", '', "success"); 14 | } 15 | else { 16 | swal("更新失败", '请检查数据完整性', "error"); 17 | } 18 | }) 19 | }); 20 | 21 | $('#mastag').change(function () { 22 | var name = "Masscan_Flag"; 23 | var conftype = "nascan"; 24 | var value = $(this).is(':checked') == true ? "1" : "0"; 25 | $.post('/updateconfig', {name: name, value: value, conftype: conftype}, function (data) { 26 | if (data == "patherr") { 27 | $("#mastag").click(); 28 | swal("切换失败", '未检测到Masscan,请先安装或先配置正确的路径', "error"); 29 | } 30 | else if (data == "fail") { 31 | swal("切换失败", '请检查数据完整性', "error"); 32 | } 33 | }) 34 | }); 35 | 36 | 37 | $('#icmptag').change(function () { 38 | var name = "Port_list_Flag"; 39 | var conftype = "nascan"; 40 | var value = $(this).is(':checked') == true ? "1" : "0"; 41 | $.post('/updateconfig', {name: name, value: value, conftype: conftype}, function (data) { 42 | if (data !== 'success') { 43 | swal("更新失败", '请检查数据完整性', "error"); 44 | } 45 | }) 46 | }); 47 | 48 | $('.zmdi-help-outline').poshytip({ 49 | className: 'tip-twitter', 50 | showTimeout: 1, 51 | alignTo: 'target', 52 | alignX: 'center', 53 | alignY: 'bottom', 54 | offsetY: 5, 55 | allowTipHover: false, 56 | fade: false, 57 | slide: false 58 | }); -------------------------------------------------------------------------------- /static/buss/js/plugin.js: -------------------------------------------------------------------------------- 1 | $('.dropify').dropify({ 2 | messages: { 3 | 'default': 'Drag and drop a file here or click', 4 | 'replace': 'Drag and drop or click to replace', 5 | 'remove': 'Remove', 6 | 'error': 'Ooops, something wrong appended.' 7 | }, 8 | error: { 9 | 'fileSize': 'The file size is too big (1M max).' 10 | } 11 | }); 12 | 13 | $('#up-type').change(function () { 14 | if ($(this).val() == 'json') { 15 | $('.uploadjson').css('display', ''); 16 | $('.uploadfile').css('display', 'none'); 17 | } else if ($(this).val() == 'file') { 18 | $('.uploadjson').css('display', 'none'); 19 | $('.uploadfile').css('display', ''); 20 | } else { 21 | $('.uploadjson').css('display', 'none'); 22 | $('.uploadfile').css('display', 'none'); 23 | } 24 | }); 25 | 26 | 27 | 28 | $('#add').click(function () { 29 | name = $('#env-name').val(); 30 | info = $('#env-info').val(); 31 | author = $('#env-author').val(); 32 | risk = $('#env-risk').val(); 33 | info = $('#env-info').val(); 34 | tags = $('#env-tags').val(); 35 | hub = $('#env-hub').val(); 36 | type = $('#env-type').val(); 37 | port = $('#env-port').val(); 38 | flag = $('#env-flag').val(); 39 | path = $('#env-fileupload').val(); 40 | syspassjson = $('#env-syspass-json').val(); 41 | syspassfile = $('#env-syspass-file').val(); 42 | filename = path.substring(path.lastIndexOf('\\')).split('.')[0]; 43 | isupload = $('#env-isupload').val(); 44 | $.ajaxFileUpload({ 45 | url: "/add_images", 46 | secureuri: false, 47 | type: "POST", 48 | data: { 49 | name: name, 50 | info: info, 51 | isupload: isupload, 52 | type: type, 53 | flag: flag, 54 | author: author, 55 | risk: risk, 56 | tags: tags, 57 | hub: hub, 58 | port: port, 59 | syspassjson: syspassjson, 60 | syspassfile: syspassfile 61 | }, 62 | dataType: "json", 63 | fileElementId: "env-fileupload", 64 | success: function (e) { 65 | }, 66 | error: function (e) { 67 | if (e.responseText == 'success') { 68 | swal("新增成功,正在后台进行下载!", '', "success"); 69 | $('.confirm').click(function () { 70 | $('#close').click(); 71 | location.reload(); 72 | }); 73 | 74 | } else { 75 | swal("新增失败", "请检查数据是否完整或是否存在特殊字符!", "error") 76 | } 77 | } 78 | }); 79 | 80 | }); 81 | 82 | -------------------------------------------------------------------------------- /static/css/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/css/.DS_Store -------------------------------------------------------------------------------- /static/css/docker.css: -------------------------------------------------------------------------------- 1 | @charset "utf-8"; 2 | 3 | /*主要CSS*/ 4 | body { height: 100vh; font-family: "微软雅黑"; text-align: center; overflow: hidden; } 5 | body h1 { 6 | text-transform: uppercase; 7 | font-size: 30px; 8 | color: #576e81; 9 | margin: 30px 0px 0px 0px; 10 | } 11 | body h2 { 12 | font-weight: normal; 13 | font-size: 18px; 14 | color: #F98DB9; 15 | margin: 10px 0px 0px 0px; 16 | } 17 | body p { 18 | margin: 0 auto; 19 | } 20 | body .loader { 21 | height: 250px; 22 | position: relative; 23 | margin: auto; 24 | width: 400px; 25 | z-index:10; 26 | } 27 | body .loader_overlay { 28 | width: 150px; 29 | height: 150px; 30 | background: transparent; 31 | /* box-shadow: 0px 0px 0px 1000px rgba(255, 255, 255, 0.67), 0px 0px 19px 0px rgba(0, 0, 0, 0.16) inset;*/ 32 | border-radius: 100%; 33 | z-index: -1; 34 | position: absolute; 35 | left: 0; 36 | right: 0; 37 | top: 0; 38 | bottom: 0; 39 | margin: auto; 40 | } 41 | body .loader_cogs { 42 | z-index: -2; 43 | width: 100px; 44 | height: 100px; 45 | top: -120px !important; 46 | position: absolute; 47 | left: 0; 48 | right: 0; 49 | top: 0; 50 | bottom: 0; 51 | margin: auto; 52 | } 53 | body .loader_cogs__top { 54 | position: relative; 55 | width: 100px; 56 | height: 100px; 57 | -webkit-transform-origin: 50px 50px; 58 | transform-origin: 50px 50px; 59 | -webkit-animation: rotate 10s infinite linear; 60 | animation: rotate 10s infinite linear; 61 | } 62 | body .loader_cogs__top div:nth-of-type(1) { 63 | -webkit-transform: rotate(30deg); 64 | transform: rotate(30deg); 65 | } 66 | body .loader_cogs__top div:nth-of-type(2) { 67 | -webkit-transform: rotate(60deg); 68 | transform: rotate(60deg); 69 | } 70 | body .loader_cogs__top div:nth-of-type(3) { 71 | -webkit-transform: rotate(90deg); 72 | transform: rotate(90deg); 73 | } 74 | body .loader_cogs__top div.top_part { 75 | width: 100px; 76 | border-radius: 10px; 77 | position: absolute; 78 | height: 100px; 79 | background: #f98db9; 80 | } 81 | body .loader_cogs__top div.top_hole { 82 | width: 50px; 83 | height: 50px; 84 | border-radius: 100%; 85 | background: white; 86 | position: absolute; 87 | position: absolute; 88 | left: 0; 89 | right: 0; 90 | top: 0; 91 | bottom: 0; 92 | margin: auto; 93 | } 94 | body .loader_cogs__left { 95 | position: relative; 96 | width: 80px; 97 | -webkit-transform: rotate(16deg); 98 | transform: rotate(16deg); 99 | top: 28px; 100 | -webkit-transform-origin: 40px 40px; 101 | transform-origin: 40px 40px; 102 | -webkit-animation: rotate_left 10s .1s infinite reverse linear; 103 | animation: rotate_left 10s .1s infinite reverse linear; 104 | left: -24px; 105 | height: 80px; 106 | } 107 | body .loader_cogs__left div:nth-of-type(1) { 108 | -webkit-transform: rotate(30deg); 109 | transform: rotate(30deg); 110 | } 111 | body .loader_cogs__left div:nth-of-type(2) { 112 | -webkit-transform: rotate(60deg); 113 | transform: rotate(60deg); 114 | } 115 | body .loader_cogs__left div:nth-of-type(3) { 116 | -webkit-transform: rotate(90deg); 117 | transform: rotate(90deg); 118 | } 119 | body .loader_cogs__left div.left_part { 120 | width: 80px; 121 | border-radius: 6px; 122 | position: absolute; 123 | height: 80px; 124 | background: #97ddff; 125 | } 126 | body .loader_cogs__left div.left_hole { 127 | width: 40px; 128 | height: 40px; 129 | border-radius: 100%; 130 | background: white; 131 | position: absolute; 132 | position: absolute; 133 | left: 0; 134 | right: 0; 135 | top: 0; 136 | bottom: 0; 137 | margin: auto; 138 | } 139 | body .loader_cogs__bottom { 140 | position: relative; 141 | width: 60px; 142 | top: -65px; 143 | -webkit-transform-origin: 30px 30px; 144 | transform-origin: 30px 30px; 145 | -webkit-animation: rotate_left 10.2s .4s infinite linear; 146 | animation: rotate_left 10.2s .4s infinite linear; 147 | -webkit-transform: rotate(4deg); 148 | transform: rotate(4deg); 149 | left: 79px; 150 | height: 60px; 151 | } 152 | body .loader_cogs__bottom div:nth-of-type(1) { 153 | -webkit-transform: rotate(30deg); 154 | transform: rotate(30deg); 155 | } 156 | body .loader_cogs__bottom div:nth-of-type(2) { 157 | -webkit-transform: rotate(60deg); 158 | transform: rotate(60deg); 159 | } 160 | body .loader_cogs__bottom div:nth-of-type(3) { 161 | -webkit-transform: rotate(90deg); 162 | transform: rotate(90deg); 163 | } 164 | body .loader_cogs__bottom div.bottom_part { 165 | width: 60px; 166 | border-radius: 5px; 167 | position: absolute; 168 | height: 60px; 169 | background: #ffcd66; 170 | } 171 | body .loader_cogs__bottom div.bottom_hole { 172 | width: 30px; 173 | height: 30px; 174 | border-radius: 100%; 175 | background: white; 176 | position: absolute; 177 | position: absolute; 178 | left: 0; 179 | right: 0; 180 | top: 0; 181 | bottom: 0; 182 | margin: auto; 183 | } 184 | 185 | /* Animations */ 186 | @-webkit-keyframes rotate { 187 | from { 188 | -webkit-transform: rotate(0deg); 189 | transform: rotate(0deg); 190 | } 191 | to { 192 | -webkit-transform: rotate(360deg); 193 | transform: rotate(360deg); 194 | } 195 | } 196 | @keyframes rotate { 197 | from { 198 | -webkit-transform: rotate(0deg); 199 | transform: rotate(0deg); 200 | } 201 | to { 202 | -webkit-transform: rotate(360deg); 203 | transform: rotate(360deg); 204 | } 205 | } 206 | @-webkit-keyframes rotate_left { 207 | from { 208 | -webkit-transform: rotate(16deg); 209 | transform: rotate(16deg); 210 | } 211 | to { 212 | -webkit-transform: rotate(376deg); 213 | transform: rotate(376deg); 214 | } 215 | } 216 | @keyframes rotate_left { 217 | from { 218 | -webkit-transform: rotate(16deg); 219 | transform: rotate(16deg); 220 | } 221 | to { 222 | -webkit-transform: rotate(376deg); 223 | transform: rotate(376deg); 224 | } 225 | } 226 | @-webkit-keyframes rotate_right { 227 | from { 228 | -webkit-transform: rotate(4deg); 229 | transform: rotate(4deg); 230 | } 231 | to { 232 | -webkit-transform: rotate(364deg); 233 | transform: rotate(364deg); 234 | } 235 | } 236 | @keyframes rotate_right { 237 | from { 238 | -webkit-transform: rotate(4deg); 239 | transform: rotate(4deg); 240 | } 241 | to { 242 | -webkit-transform: rotate(364deg); 243 | transform: rotate(364deg); 244 | } 245 | } 246 | -------------------------------------------------------------------------------- /static/css/elements.css: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/css/elements.css -------------------------------------------------------------------------------- /static/css/responsive.css: -------------------------------------------------------------------------------- 1 | /* 2 | Template Name: Adminto Dashboard 3 | Author: CoderThemes 4 | Email: coderthemes@gmail.com 5 | File: Responsive 6 | */ 7 | @media only screen and (max-width: 6000px) and (min-width: 700px) { 8 | .wrapper.right-bar-enabled .right-bar { 9 | right: 0; 10 | z-index: 99; 11 | } 12 | .searchbar{ 13 | width:600px !important; 14 | } 15 | } 16 | @media (max-width: 1023px) { 17 | .button-menu-mobile { 18 | display: block !important; 19 | } 20 | 21 | } 22 | @media (min-width: 768px) and (max-width: 991px) { 23 | body { 24 | overflow-x: hidden; 25 | } 26 | } 27 | @media (max-width: 767px) { 28 | body { 29 | overflow-x: hidden; 30 | } 31 | .enlarged .left.side-menu { 32 | margin-left: -75px; 33 | } 34 | .topbar-left { 35 | width: 70px !important; 36 | } 37 | .content-page .content { 38 | margin-top: 95px; 39 | } 40 | .topbar .topbar-left { 41 | height: 75px; 42 | } 43 | .navbar-default { 44 | background-color: #ffffff; 45 | box-shadow: 0 0px 24px 0 rgba(0, 0, 0, 0.06), 0 1px 0px 0 rgba(0, 0, 0, 0.02); 46 | } 47 | .navbar-nav { 48 | margin: 0px; 49 | display: inline-block; 50 | } 51 | .navbar-nav li { 52 | display: inline-block; 53 | line-height: 1px; 54 | } 55 | .navbar-nav.navbar-right { 56 | float: right; 57 | } 58 | /*.notification-box {*/ 59 | /*display: inline;*/ 60 | /*}*/ 61 | .notification-box ul li a { 62 | line-height: 46px; 63 | } 64 | .notification-box .pulse { 65 | top: 5px; 66 | } 67 | /*.notification-box .dot {*/ 68 | /*top: -7px;*/ 69 | /*left: -3px;*/ 70 | /*}*/ 71 | #topnav .navbar-toggle { 72 | margin-right: 5px; 73 | } 74 | .navbar-nav .open .dropdown-menu { 75 | background-color: #ffffff; 76 | box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.26); 77 | left: auto; 78 | position: absolute; 79 | right: 0; 80 | } 81 | .navbar-nav .open .dropdown-menu li { 82 | display: block; 83 | } 84 | .content-page { 85 | margin-left: 0px !important; 86 | } 87 | .footer { 88 | left: 0px !important; 89 | } 90 | .mobile-sidebar { 91 | left: 0px; 92 | } 93 | .mobile-content { 94 | left: 250px; 95 | right: -250px; 96 | } 97 | .wrapper-page { 98 | width: 90%; 99 | } 100 | .dataTables_wrapper .col-xs-6 { 101 | width: 100%; 102 | text-align: left; 103 | } 104 | div#datatable-buttons_info { 105 | float: none; 106 | } 107 | } 108 | @media (max-width: 480px) { 109 | .side-menu { 110 | z-index: 10 !important; 111 | } 112 | .button-menu-mobile { 113 | display: block; 114 | } 115 | .search-bar { 116 | display: none !important; 117 | } 118 | } 119 | @media (max-width: 420px) { 120 | .hide-phone { 121 | display: none !important; 122 | } 123 | } 124 | /* Container-alt */ 125 | @media (min-width: 768px) { 126 | .container-alt { 127 | width: 750px; 128 | } 129 | .nav-tabs.nav-justified > li > a { 130 | border-bottom: 2px solid #eeeeee; 131 | } 132 | } 133 | @media (min-width: 992px) { 134 | .container-alt { 135 | width: 970px; 136 | } 137 | } 138 | @media (min-width: 1200px) { 139 | .container-alt { 140 | width: 1170px; 141 | } 142 | } 143 | @media (max-width: 419px) { 144 | .topbar-left { 145 | width: 70px !important; 146 | } 147 | .content-page { 148 | margin-left: 70px; 149 | } 150 | .forced .side-menu.left { 151 | box-shadow: 0 12px 12px rgba(0, 0, 0, 0.1); 152 | position: absolute; 153 | } 154 | .enlarged .side-menu.left { 155 | box-shadow: 0 1px 1px rgba(0, 0, 0, 0.1) !important; 156 | } 157 | .profile-info-name img { 158 | float: none; 159 | margin: 0px auto; 160 | margin-bottom: 20px; 161 | } 162 | div.hopscotch-bubble .hopscotch-bubble-container { 163 | max-width: 180px; 164 | } 165 | } 166 | -------------------------------------------------------------------------------- /static/css/style_line.css: -------------------------------------------------------------------------------- 1 | /*------------------------------------*\ 2 | $Base 3 | \*------------------------------------*/ 4 | * { 5 | -webkit-box-sizing: border-box; 6 | -moz-box-sizing: border-box; 7 | box-sizing: border-box; 8 | } 9 | body { 10 | background: #303030; 11 | } 12 | /*------------------------------------*\ 13 | $Graph 14 | \*------------------------------------*/ 15 | .graph__wrapper { 16 | width: 400px; 17 | margin: 30px auto; 18 | position: relative; 19 | } 20 | .graph__wrapper svg { 21 | position: absolute; 22 | margin: 36px 0px 0px 15px; 23 | } 24 | .coordinates { 25 | position: absolute; 26 | counter-reset: line 6; 27 | } 28 | .coordinates span { 29 | display: inline-block; 30 | border-bottom: 1px solid #3a3a3a; 31 | height: 20px; 32 | width: 400px; 33 | } 34 | .coordinates span:before { 35 | counter-increment: line -1; 36 | content: counter(line); 37 | display: inline-block; 38 | color: #4a4a4a; 39 | margin: 10px 0px 0px -15px; 40 | } 41 | .path { 42 | stroke-dasharray: 1000; 43 | stroke-dashoffset: 1000; 44 | -webkit-animation: dash 3s ease-in forwards; 45 | animation: dash 3s ease-in forwards; 46 | -webkit-animation-iteration-count: infinite; 47 | animation-iteration-count: infinite; 48 | -webkit-animation-delay: 1s; 49 | animation-delay: 1s; 50 | } 51 | @-webkit-keyframes dash { 52 | to { 53 | stroke-dashoffset: 0; 54 | } 55 | } 56 | @keyframes dash { 57 | to { 58 | stroke-dashoffset: 0; 59 | } 60 | } 61 | .description { 62 | font-family: "Roboto"; 63 | color: #b0b0b0; 64 | text-align: center; 65 | margin: 40px 0px; 66 | } 67 | -------------------------------------------------------------------------------- /static/fonts/Material-Design-Iconic-Font.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/fonts/Material-Design-Iconic-Font.ttf -------------------------------------------------------------------------------- /static/fonts/Material-Design-Iconic-Font.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/fonts/Material-Design-Iconic-Font.woff -------------------------------------------------------------------------------- /static/fonts/Material-Design-Iconic-Font.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/fonts/Material-Design-Iconic-Font.woff2 -------------------------------------------------------------------------------- /static/fonts/dropify.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/fonts/dropify.ttf -------------------------------------------------------------------------------- /static/fonts/dropify.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/fonts/dropify.woff -------------------------------------------------------------------------------- /static/fonts/fontawesome-webfont.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/fonts/fontawesome-webfont.ttf -------------------------------------------------------------------------------- /static/fonts/fontawesome-webfont.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/fonts/fontawesome-webfont.woff -------------------------------------------------------------------------------- /static/fonts/fontawesome-webfont.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/fonts/fontawesome-webfont.woff2 -------------------------------------------------------------------------------- /static/fonts/themify.ttf: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/fonts/themify.ttf -------------------------------------------------------------------------------- /static/fonts/themify.woff: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/fonts/themify.woff -------------------------------------------------------------------------------- /static/google/-L14Jk06m6pUHB-5mXQQnYX0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/-L14Jk06m6pUHB-5mXQQnYX0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/0eC6fl06luXEYWpBSJvXCIX0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/0eC6fl06luXEYWpBSJvXCIX0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/77FXFjRbGzN4aCrSFhlh3oX0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/77FXFjRbGzN4aCrSFhlh3oX0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/97uahxiqZRoncBaCEI3aW4X0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/97uahxiqZRoncBaCEI3aW4X0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/Fl4y0QdOxyyTHEGMXX8kcYX0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/Fl4y0QdOxyyTHEGMXX8kcYX0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/Hgo13k-tfSpn0qi1SFdUfZBw1xU1rKptJj_0jans920.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/Hgo13k-tfSpn0qi1SFdUfZBw1xU1rKptJj_0jans920.woff2 -------------------------------------------------------------------------------- /static/google/I3S1wsgSg9YCurV6PUkTOYX0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/I3S1wsgSg9YCurV6PUkTOYX0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/JaMH4jmmzP070-OYo03anaCWcynf_cDxXwCLxiixG1c.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/JaMH4jmmzP070-OYo03anaCWcynf_cDxXwCLxiixG1c.woff2 -------------------------------------------------------------------------------- /static/google/Karla.css: -------------------------------------------------------------------------------- 1 | /* latin-ext */ 2 | @font-face { 3 | font-family: 'Karla'; 4 | font-style: normal; 5 | font-weight: 400; 6 | src: local('Karla'), local('Karla-Regular'), url(./S1bXQ0LrY7AzefpgNae9sYDGDUGfDkXyfkzVDelzfFk.woff2) format('woff2'); 7 | unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; 8 | } 9 | /* latin */ 10 | @font-face { 11 | font-family: 'Karla'; 12 | font-style: normal; 13 | font-weight: 400; 14 | src: local('Karla'), local('Karla-Regular'), url(./JaMH4jmmzP070-OYo03anaCWcynf_cDxXwCLxiixG1c.woff2) format('woff2'); 15 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; 16 | } 17 | /* latin-ext */ 18 | @font-face { 19 | font-family: 'Karla'; 20 | font-style: normal; 21 | font-weight: 700; 22 | src: local('Karla Bold'), local('Karla-Bold'), url(./r3NqIkFHFaF3esZDc3WT5BkAz4rYn47Zy2rvigWQf6w.woff2) format('woff2'); 23 | unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; 24 | } 25 | /* latin */ 26 | @font-face { 27 | font-family: 'Karla'; 28 | font-style: normal; 29 | font-weight: 700; 30 | src: local('Karla Bold'), local('Karla-Bold'), url(./suoMYBGv5sGCUIrF9mVTfXYhjbSpvc47ee6xR_80Hnw.woff2) format('woff2'); 31 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; 32 | } 33 | -------------------------------------------------------------------------------- /static/google/Ks_cVxiCiwUWVsFWFA3Bjn-_kf6ByYO6CLYdB4HQE-Y.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/Ks_cVxiCiwUWVsFWFA3Bjn-_kf6ByYO6CLYdB4HQE-Y.woff2 -------------------------------------------------------------------------------- /static/google/NJ4vxlgWwWbEsv18dAhqnn-_kf6ByYO6CLYdB4HQE-Y.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/NJ4vxlgWwWbEsv18dAhqnn-_kf6ByYO6CLYdB4HQE-Y.woff2 -------------------------------------------------------------------------------- /static/google/NYDWBdD4gIq26G5XYbHsFIX0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/NYDWBdD4gIq26G5XYbHsFIX0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/Pru33qjShpZSmG3z6VYwnYX0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/Pru33qjShpZSmG3z6VYwnYX0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/PwZc-YbIL414wB9rB1IAPYX0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/PwZc-YbIL414wB9rB1IAPYX0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/Rancho.css: -------------------------------------------------------------------------------- 1 | /* latin */ 2 | @font-face { 3 | font-family: 'Rancho'; 4 | font-style: normal; 5 | font-weight: 400; 6 | src: local('Rancho'), url(./yJONObwbYmkcfKME0p1HqevvDin1pK8aKteLpeZ5c0A.woff2) format('woff2'); 7 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; 8 | } 9 | -------------------------------------------------------------------------------- /static/google/Roboto.css: -------------------------------------------------------------------------------- 1 | /* cyrillic-ext */ 2 | @font-face { 3 | font-family: 'Roboto'; 4 | font-style: normal; 5 | font-weight: 300; 6 | src: local('Roboto Light'), local('Roboto-Light'), url(./0eC6fl06luXEYWpBSJvXCIX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 7 | unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; 8 | } 9 | /* cyrillic */ 10 | @font-face { 11 | font-family: 'Roboto'; 12 | font-style: normal; 13 | font-weight: 300; 14 | src: local('Roboto Light'), local('Roboto-Light'), url(./Fl4y0QdOxyyTHEGMXX8kcYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 15 | unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; 16 | } 17 | /* greek-ext */ 18 | @font-face { 19 | font-family: 'Roboto'; 20 | font-style: normal; 21 | font-weight: 300; 22 | src: local('Roboto Light'), local('Roboto-Light'), url(./-L14Jk06m6pUHB-5mXQQnYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 23 | unicode-range: U+1F00-1FFF; 24 | } 25 | /* greek */ 26 | @font-face { 27 | font-family: 'Roboto'; 28 | font-style: normal; 29 | font-weight: 300; 30 | src: local('Roboto Light'), local('Roboto-Light'), url(./I3S1wsgSg9YCurV6PUkTOYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 31 | unicode-range: U+0370-03FF; 32 | } 33 | /* vietnamese */ 34 | @font-face { 35 | font-family: 'Roboto'; 36 | font-style: normal; 37 | font-weight: 300; 38 | src: local('Roboto Light'), local('Roboto-Light'), url(./NYDWBdD4gIq26G5XYbHsFIX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 39 | unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; 40 | } 41 | /* latin-ext */ 42 | @font-face { 43 | font-family: 'Roboto'; 44 | font-style: normal; 45 | font-weight: 300; 46 | src: local('Roboto Light'), local('Roboto-Light'), url(./Pru33qjShpZSmG3z6VYwnYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 47 | unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; 48 | } 49 | /* latin */ 50 | @font-face { 51 | font-family: 'Roboto'; 52 | font-style: normal; 53 | font-weight: 300; 54 | src: local('Roboto Light'), local('Roboto-Light'), url(./Hgo13k-tfSpn0qi1SFdUfZBw1xU1rKptJj_0jans920.woff2) format('woff2'); 55 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; 56 | } 57 | /* cyrillic-ext */ 58 | @font-face { 59 | font-family: 'Roboto'; 60 | font-style: normal; 61 | font-weight: 400; 62 | src: local('Roboto'), local('Roboto-Regular'), url(./sTdaA6j0Psb920Vjv-mrzH-_kf6ByYO6CLYdB4HQE-Y.woff2) format('woff2'); 63 | unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; 64 | } 65 | /* cyrillic */ 66 | @font-face { 67 | font-family: 'Roboto'; 68 | font-style: normal; 69 | font-weight: 400; 70 | src: local('Roboto'), local('Roboto-Regular'), url(./uYECMKoHcO9x1wdmbyHIm3-_kf6ByYO6CLYdB4HQE-Y.woff2) format('woff2'); 71 | unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; 72 | } 73 | /* greek-ext */ 74 | @font-face { 75 | font-family: 'Roboto'; 76 | font-style: normal; 77 | font-weight: 400; 78 | src: local('Roboto'), local('Roboto-Regular'), url(./tnj4SB6DNbdaQnsM8CFqBX-_kf6ByYO6CLYdB4HQE-Y.woff2) format('woff2'); 79 | unicode-range: U+1F00-1FFF; 80 | } 81 | /* greek */ 82 | @font-face { 83 | font-family: 'Roboto'; 84 | font-style: normal; 85 | font-weight: 400; 86 | src: local('Roboto'), local('Roboto-Regular'), url(./_VYFx-s824kXq_Ul2BHqYH-_kf6ByYO6CLYdB4HQE-Y.woff2) format('woff2'); 87 | unicode-range: U+0370-03FF; 88 | } 89 | /* vietnamese */ 90 | @font-face { 91 | font-family: 'Roboto'; 92 | font-style: normal; 93 | font-weight: 400; 94 | src: local('Roboto'), local('Roboto-Regular'), url(./NJ4vxlgWwWbEsv18dAhqnn-_kf6ByYO6CLYdB4HQE-Y.woff2) format('woff2'); 95 | unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; 96 | } 97 | /* latin-ext */ 98 | @font-face { 99 | font-family: 'Roboto'; 100 | font-style: normal; 101 | font-weight: 400; 102 | src: local('Roboto'), local('Roboto-Regular'), url(./Ks_cVxiCiwUWVsFWFA3Bjn-_kf6ByYO6CLYdB4HQE-Y.woff2) format('woff2'); 103 | unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; 104 | } 105 | /* latin */ 106 | @font-face { 107 | font-family: 'Roboto'; 108 | font-style: normal; 109 | font-weight: 400; 110 | src: local('Roboto'), local('Roboto-Regular'), url(./oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2) format('woff2'); 111 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; 112 | } 113 | /* cyrillic-ext */ 114 | @font-face { 115 | font-family: 'Roboto'; 116 | font-style: normal; 117 | font-weight: 500; 118 | src: local('Roboto Medium'), local('Roboto-Medium'), url(./ZLqKeelYbATG60EpZBSDy4X0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 119 | unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; 120 | } 121 | /* cyrillic */ 122 | @font-face { 123 | font-family: 'Roboto'; 124 | font-style: normal; 125 | font-weight: 500; 126 | src: local('Roboto Medium'), local('Roboto-Medium'), url(./oHi30kwQWvpCWqAhzHcCSIX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 127 | unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; 128 | } 129 | /* greek-ext */ 130 | @font-face { 131 | font-family: 'Roboto'; 132 | font-style: normal; 133 | font-weight: 500; 134 | src: local('Roboto Medium'), local('Roboto-Medium'), url(./rGvHdJnr2l75qb0YND9NyIX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 135 | unicode-range: U+1F00-1FFF; 136 | } 137 | /* greek */ 138 | @font-face { 139 | font-family: 'Roboto'; 140 | font-style: normal; 141 | font-weight: 500; 142 | src: local('Roboto Medium'), local('Roboto-Medium'), url(./mx9Uck6uB63VIKFYnEMXrYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 143 | unicode-range: U+0370-03FF; 144 | } 145 | /* vietnamese */ 146 | @font-face { 147 | font-family: 'Roboto'; 148 | font-style: normal; 149 | font-weight: 500; 150 | src: local('Roboto Medium'), local('Roboto-Medium'), url(./mbmhprMH69Zi6eEPBYVFhYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 151 | unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; 152 | } 153 | /* latin-ext */ 154 | @font-face { 155 | font-family: 'Roboto'; 156 | font-style: normal; 157 | font-weight: 500; 158 | src: local('Roboto Medium'), local('Roboto-Medium'), url(./oOeFwZNlrTefzLYmlVV1UIX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 159 | unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; 160 | } 161 | /* latin */ 162 | @font-face { 163 | font-family: 'Roboto'; 164 | font-style: normal; 165 | font-weight: 500; 166 | src: local('Roboto Medium'), local('Roboto-Medium'), url(./RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2) format('woff2'); 167 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; 168 | } 169 | /* cyrillic-ext */ 170 | @font-face { 171 | font-family: 'Roboto'; 172 | font-style: normal; 173 | font-weight: 700; 174 | src: local('Roboto Bold'), local('Roboto-Bold'), url(./77FXFjRbGzN4aCrSFhlh3oX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 175 | unicode-range: U+0460-052F, U+20B4, U+2DE0-2DFF, U+A640-A69F; 176 | } 177 | /* cyrillic */ 178 | @font-face { 179 | font-family: 'Roboto'; 180 | font-style: normal; 181 | font-weight: 700; 182 | src: local('Roboto Bold'), local('Roboto-Bold'), url(./isZ-wbCXNKAbnjo6_TwHToX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 183 | unicode-range: U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116; 184 | } 185 | /* greek-ext */ 186 | @font-face { 187 | font-family: 'Roboto'; 188 | font-style: normal; 189 | font-weight: 700; 190 | src: local('Roboto Bold'), local('Roboto-Bold'), url(./UX6i4JxQDm3fVTc1CPuwqoX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 191 | unicode-range: U+1F00-1FFF; 192 | } 193 | /* greek */ 194 | @font-face { 195 | font-family: 'Roboto'; 196 | font-style: normal; 197 | font-weight: 700; 198 | src: local('Roboto Bold'), local('Roboto-Bold'), url(./jSN2CGVDbcVyCnfJfjSdfIX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 199 | unicode-range: U+0370-03FF; 200 | } 201 | /* vietnamese */ 202 | @font-face { 203 | font-family: 'Roboto'; 204 | font-style: normal; 205 | font-weight: 700; 206 | src: local('Roboto Bold'), local('Roboto-Bold'), url(./PwZc-YbIL414wB9rB1IAPYX0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 207 | unicode-range: U+0102-0103, U+1EA0-1EF9, U+20AB; 208 | } 209 | /* latin-ext */ 210 | @font-face { 211 | font-family: 'Roboto'; 212 | font-style: normal; 213 | font-weight: 700; 214 | src: local('Roboto Bold'), local('Roboto-Bold'), url(./97uahxiqZRoncBaCEI3aW4X0hVgzZQUfRDuZrPvH3D8.woff2) format('woff2'); 215 | unicode-range: U+0100-024F, U+1E00-1EFF, U+20A0-20AB, U+20AD-20CF, U+2C60-2C7F, U+A720-A7FF; 216 | } 217 | /* latin */ 218 | @font-face { 219 | font-family: 'Roboto'; 220 | font-style: normal; 221 | font-weight: 700; 222 | src: local('Roboto Bold'), local('Roboto-Bold'), url(./d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2) format('woff2'); 223 | unicode-range: U+0000-00FF, U+0131, U+0152-0153, U+02C6, U+02DA, U+02DC, U+2000-206F, U+2074, U+20AC, U+2212, U+2215, U+E0FF, U+EFFD, U+F000; 224 | } 225 | -------------------------------------------------------------------------------- /static/google/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/RxZJdnzeo3R5zSexge8UUZBw1xU1rKptJj_0jans920.woff2 -------------------------------------------------------------------------------- /static/google/S1bXQ0LrY7AzefpgNae9sYDGDUGfDkXyfkzVDelzfFk.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/S1bXQ0LrY7AzefpgNae9sYDGDUGfDkXyfkzVDelzfFk.woff2 -------------------------------------------------------------------------------- /static/google/UX6i4JxQDm3fVTc1CPuwqoX0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/UX6i4JxQDm3fVTc1CPuwqoX0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/ZLqKeelYbATG60EpZBSDy4X0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/ZLqKeelYbATG60EpZBSDy4X0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/_VYFx-s824kXq_Ul2BHqYH-_kf6ByYO6CLYdB4HQE-Y.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/_VYFx-s824kXq_Ul2BHqYH-_kf6ByYO6CLYdB4HQE-Y.woff2 -------------------------------------------------------------------------------- /static/google/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/d-6IYplOFocCacKzxwXSOJBw1xU1rKptJj_0jans920.woff2 -------------------------------------------------------------------------------- /static/google/isZ-wbCXNKAbnjo6_TwHToX0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/isZ-wbCXNKAbnjo6_TwHToX0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/jSN2CGVDbcVyCnfJfjSdfIX0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/jSN2CGVDbcVyCnfJfjSdfIX0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/mbmhprMH69Zi6eEPBYVFhYX0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/mbmhprMH69Zi6eEPBYVFhYX0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/mx9Uck6uB63VIKFYnEMXrYX0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/mx9Uck6uB63VIKFYnEMXrYX0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/oHi30kwQWvpCWqAhzHcCSIX0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/oHi30kwQWvpCWqAhzHcCSIX0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/oMMgfZMQthOryQo9n22dcuvvDin1pK8aKteLpeZ5c0A.woff2 -------------------------------------------------------------------------------- /static/google/oOeFwZNlrTefzLYmlVV1UIX0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/oOeFwZNlrTefzLYmlVV1UIX0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/r3NqIkFHFaF3esZDc3WT5BkAz4rYn47Zy2rvigWQf6w.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/r3NqIkFHFaF3esZDc3WT5BkAz4rYn47Zy2rvigWQf6w.woff2 -------------------------------------------------------------------------------- /static/google/rGvHdJnr2l75qb0YND9NyIX0hVgzZQUfRDuZrPvH3D8.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/rGvHdJnr2l75qb0YND9NyIX0hVgzZQUfRDuZrPvH3D8.woff2 -------------------------------------------------------------------------------- /static/google/sTdaA6j0Psb920Vjv-mrzH-_kf6ByYO6CLYdB4HQE-Y.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/sTdaA6j0Psb920Vjv-mrzH-_kf6ByYO6CLYdB4HQE-Y.woff2 -------------------------------------------------------------------------------- /static/google/suoMYBGv5sGCUIrF9mVTfXYhjbSpvc47ee6xR_80Hnw.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/suoMYBGv5sGCUIrF9mVTfXYhjbSpvc47ee6xR_80Hnw.woff2 -------------------------------------------------------------------------------- /static/google/tnj4SB6DNbdaQnsM8CFqBX-_kf6ByYO6CLYdB4HQE-Y.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/tnj4SB6DNbdaQnsM8CFqBX-_kf6ByYO6CLYdB4HQE-Y.woff2 -------------------------------------------------------------------------------- /static/google/uYECMKoHcO9x1wdmbyHIm3-_kf6ByYO6CLYdB4HQE-Y.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/uYECMKoHcO9x1wdmbyHIm3-_kf6ByYO6CLYdB4HQE-Y.woff2 -------------------------------------------------------------------------------- /static/google/yJONObwbYmkcfKME0p1HqevvDin1pK8aKteLpeZ5c0A.woff2: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/google/yJONObwbYmkcfKME0p1HqevvDin1pK8aKteLpeZ5c0A.woff2 -------------------------------------------------------------------------------- /static/images/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/images/.DS_Store -------------------------------------------------------------------------------- /static/images/big/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/images/big/.DS_Store -------------------------------------------------------------------------------- /static/images/big/bg1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/images/big/bg1.jpg -------------------------------------------------------------------------------- /static/images/big/bg2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/images/big/bg2.jpg -------------------------------------------------------------------------------- /static/images/down.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/images/down.png -------------------------------------------------------------------------------- /static/images/favicon.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/images/favicon.jpg -------------------------------------------------------------------------------- /static/images/multiple-arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/images/multiple-arrow.png -------------------------------------------------------------------------------- /static/images/up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/images/up.png -------------------------------------------------------------------------------- /static/js/.DS_Store: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/ba0gu0/WebRange/94ef655de00ea67fd960f3e2f9710d1ca80892ff/static/js/.DS_Store -------------------------------------------------------------------------------- /static/js/ajaxfileupload.js: -------------------------------------------------------------------------------- 1 | 2 | jQuery.extend({ 3 | 4 | handleError: function( s, xhr, status, e ) { 5 | if ( s.error ) { 6 | s.error.call( s.context || s, xhr, status, e ); 7 | } 8 | 9 | // Fire the global callback 10 | if ( s.global ) { 11 | (s.context ? jQuery(s.context) : jQuery.event).trigger( "ajaxError", [xhr, s, e] ); 12 | } 13 | }, 14 | createUploadIframe: function(id, uri) 15 | { 16 | //create frame 17 | var frameId = 'jUploadFrame' + id; 18 | 19 | if(window.ActiveXObject) { 20 | var io = document.createElement('