17 changed files with 92 additions and 46 deletions
+5
View File
@@ -20,3 +20,8 @@ revsuit
*.njsproj *.njsproj
*.sln *.sln
*.sw? *.sw?
## node
package.json
package-lock.json
node_modules/
+25
View File
@@ -0,0 +1,25 @@
# Changelog
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
### [0.1.4-beta-fix-1](https://github.com/Li4n0/revsuit/compare/v0.1.4-beta...v0.1.4-beta-fix-1) (2021-05-28)
### Bug Fixes
* **frontend:** fix the problem of autoRefresh failure ([#24](https://github.com/Li4n0/revsuit/issues/24)) ([b945069](https://github.com/Li4n0/revsuit/commit/b945069117fec6eb5de88557da5d4c2c996cfd90))
* **http:** fix the problem that ip_header setting does not take effect ([#23](https://github.com/Li4n0/revsuit/issues/23)) ([74f512d](https://github.com/Li4n0/revsuit/commit/74f512d2140fb97128acf56be803d1bd3b888fa3))
### [0.1.4-beta](https://github.com/Li4n0/revsuit/compare/v0.1.3-beta-fix1...v0.1.4-beta) (2021-05-27)
### Features
* **dns:** support custom dns service
port ([7fb4c97](https://github.com/Li4n0/revsuit/commit/7fb4c97279e57d120a4e4aef5dda5c8f3c024835))
* **frontend:** auto refresh data when switching back to the revsuit
console ([9b31406](https://github.com/Li4n0/revsuit/commit/9b314062a39ddc7acf7a7eab3570b24b9bb9d122))
### Bug Fixes
* **http:** fix the problem that ip_header configuration does not take
effect ([b76c39e](https://github.com/Li4n0/revsuit/commit/b76c39e2fc1ada189feb783fdec76daffa11d1c7))
+1 -1
View File
@@ -1 +1 @@
.custom-icons-list[data-v-05a908c2] .anticon{margin-right:6px}body[data-v-07ed630b],html[data-v-07ed630b]{height:100%;margin:0}.fade-transform-enter-active[data-v-07ed630b],.fade-transform-leave-active[data-v-07ed630b]{transition:all .3s;opacity:0}.fade-transform-enter[data-v-07ed630b],.fade-transform-leave[data-v-07ed630b]{opacity:0}.fade-transform-enter-to[data-v-07ed630b]{opacity:0}.ant-menu-item>span>a[data-v-07ed630b]{color:hsla(0,0%,100%,.65)}.ant-menu-item-selected>span>a[data-v-07ed630b]{color:#fff}#nav[data-v-07ed630b]{height:100%}#nav .trigger[data-v-07ed630b]{font-size:18px;line-height:64px;padding:0 24px;cursor:pointer;transition:color .3s}#nav .trigger[data-v-07ed630b]:hover{color:#1890ff}#nav .logo[data-v-07ed630b]{height:32px;background:#0a1d2d;margin:16px;text-align:center;font-size:1.2rem;color:#fff;padding-bottom:5px;border-bottom:2px solid #b6befa}.copyright[data-v-07ed630b]{color:#888;text-align:right;margin-right:1rem} .custom-icons-list[data-v-05a908c2] .anticon{margin-right:6px}body[data-v-57bd8120],html[data-v-57bd8120]{height:100%;margin:0}.fade-transform-enter-active[data-v-57bd8120],.fade-transform-leave-active[data-v-57bd8120]{transition:all .3s;opacity:0}.fade-transform-enter[data-v-57bd8120],.fade-transform-leave[data-v-57bd8120]{opacity:0}.fade-transform-enter-to[data-v-57bd8120]{opacity:0}.ant-menu-item>span>a[data-v-57bd8120]{color:hsla(0,0%,100%,.65)}.ant-menu-item-selected>span>a[data-v-57bd8120]{color:#fff}#app[data-v-57bd8120]{height:100%}#app .trigger[data-v-57bd8120]{font-size:18px;line-height:64px;padding:0 24px;cursor:pointer;transition:color .3s}#app .trigger[data-v-57bd8120]:hover{color:#1890ff}#app .logo[data-v-57bd8120]{height:32px;background:#0a1d2d;margin:16px;text-align:center;font-size:1.2rem;color:#fff;padding-bottom:5px;border-bottom:2px solid #b6befa}.copyright[data-v-57bd8120]{color:#888;text-align:right;margin-right:1rem}
+1 -1
View File
File diff suppressed because one or more lines are too long
+1 -1
View File
File diff suppressed because one or more lines are too long
+27 -14
View File
@@ -5,13 +5,15 @@
"requires": true, "requires": true,
"packages": { "packages": {
"": { "": {
"name": "revsuit-frontend",
"version": "0.1.0", "version": "0.1.0",
"dependencies": { "dependencies": {
"ant-design-vue": "^1.2.4", "ant-design-vue": "^1.2.4",
"axios": "^0.21.1", "axios": "^0.21.1",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-router": "^3.2.0" "vue-router": "^3.2.0",
"vue-visibility-change": "^1.2.1"
}, },
"devDependencies": { "devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0", "@vue/cli-plugin-babel": "~4.5.0",
@@ -4808,7 +4810,8 @@
"node_modules/de-indent": { "node_modules/de-indent": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz", "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz",
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=" "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
"dev": true
}, },
"node_modules/debug": { "node_modules/debug": {
"version": "4.3.1", "version": "4.3.1",
@@ -6896,6 +6899,7 @@
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz", "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz",
"integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=", "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=",
"dev": true,
"bin": { "bin": {
"he": "bin/he" "he": "bin/he"
} }
@@ -13517,6 +13521,7 @@
"version": "2.6.12", "version": "2.6.12",
"resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.12.tgz", "resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.12.tgz",
"integrity": "sha1-lH7XGWdEyKUoXr4SM/6WBDf8xX4=", "integrity": "sha1-lH7XGWdEyKUoXr4SM/6WBDf8xX4=",
"dev": true,
"dependencies": { "dependencies": {
"de-indent": "^1.0.2", "de-indent": "^1.0.2",
"he": "^1.1.0" "he": "^1.1.0"
@@ -13528,6 +13533,11 @@
"integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=", "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=",
"dev": true "dev": true
}, },
"node_modules/vue-visibility-change": {
"version": "1.2.1",
"resolved": "https://registry.npm.taobao.org/vue-visibility-change/download/vue-visibility-change-1.2.1.tgz",
"integrity": "sha1-0YAIv08d4slHr+VEHuBEuenGAUE="
},
"node_modules/warning": { "node_modules/warning": {
"version": "4.0.3", "version": "4.0.3",
"resolved": "https://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz", "resolved": "https://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz",
@@ -16426,8 +16436,7 @@
"version": "4.5.11", "version": "4.5.11",
"resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-vuex/download/@vue/cli-plugin-vuex-4.5.11.tgz?cache=0&sync_timestamp=1615453605559&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-plugin-vuex%2Fdownload%2F%40vue%2Fcli-plugin-vuex-4.5.11.tgz", "resolved": "https://registry.npm.taobao.org/@vue/cli-plugin-vuex/download/@vue/cli-plugin-vuex-4.5.11.tgz?cache=0&sync_timestamp=1615453605559&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fcli-plugin-vuex%2Fdownload%2F%40vue%2Fcli-plugin-vuex-4.5.11.tgz",
"integrity": "sha1-9vYZvPtmyGzEU0DXMVKERjXlSL0=", "integrity": "sha1-9vYZvPtmyGzEU0DXMVKERjXlSL0=",
"dev": true, "dev": true
"requires": {}
}, },
"@vue/cli-service": { "@vue/cli-service": {
"version": "4.5.11", "version": "4.5.11",
@@ -16581,8 +16590,7 @@
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npm.taobao.org/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.2.tgz", "resolved": "https://registry.npm.taobao.org/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.2.tgz",
"integrity": "sha1-zrkktOyzucQ4ccekKaAvhCPmIas=", "integrity": "sha1-zrkktOyzucQ4ccekKaAvhCPmIas=",
"dev": true, "dev": true
"requires": {}
}, },
"@vue/web-component-wrapper": { "@vue/web-component-wrapper": {
"version": "1.3.0", "version": "1.3.0",
@@ -16797,8 +16805,7 @@
"version": "5.3.1", "version": "5.3.1",
"resolved": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.3.1.tgz", "resolved": "https://registry.npm.taobao.org/acorn-jsx/download/acorn-jsx-5.3.1.tgz",
"integrity": "sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns=", "integrity": "sha1-/IZh4Rt6wVOcR9v+oucrOvNNJns=",
"dev": true, "dev": true
"requires": {}
}, },
"acorn-walk": { "acorn-walk": {
"version": "7.2.0", "version": "7.2.0",
@@ -16846,15 +16853,13 @@
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz?cache=0&sync_timestamp=1615411237786&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-errors%2Fdownload%2Fajv-errors-1.0.1.tgz", "resolved": "https://registry.npm.taobao.org/ajv-errors/download/ajv-errors-1.0.1.tgz?cache=0&sync_timestamp=1615411237786&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-errors%2Fdownload%2Fajv-errors-1.0.1.tgz",
"integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=", "integrity": "sha1-81mGrOuRr63sQQL72FAUlQzvpk0=",
"dev": true, "dev": true
"requires": {}
}, },
"ajv-keywords": { "ajv-keywords": {
"version": "3.5.2", "version": "3.5.2",
"resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1615647295573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz", "resolved": "https://registry.npm.taobao.org/ajv-keywords/download/ajv-keywords-3.5.2.tgz?cache=0&sync_timestamp=1615647295573&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fajv-keywords%2Fdownload%2Fajv-keywords-3.5.2.tgz",
"integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=", "integrity": "sha1-MfKdpatuANHC0yms97WSlhTVAU0=",
"dev": true, "dev": true
"requires": {}
}, },
"alphanum-sort": { "alphanum-sort": {
"version": "1.0.2", "version": "1.0.2",
@@ -18894,7 +18899,8 @@
"de-indent": { "de-indent": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz", "resolved": "https://registry.npm.taobao.org/de-indent/download/de-indent-1.0.2.tgz",
"integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=" "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=",
"dev": true
}, },
"debug": { "debug": {
"version": "4.3.1", "version": "4.3.1",
@@ -20627,7 +20633,8 @@
"he": { "he": {
"version": "1.2.0", "version": "1.2.0",
"resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz", "resolved": "https://registry.npm.taobao.org/he/download/he-1.2.0.tgz",
"integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=" "integrity": "sha1-hK5l+n6vsWX922FWauFLrwVmTw8=",
"dev": true
}, },
"hex-color-regex": { "hex-color-regex": {
"version": "1.1.0", "version": "1.1.0",
@@ -26181,6 +26188,7 @@
"version": "2.6.12", "version": "2.6.12",
"resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.12.tgz", "resolved": "https://registry.npm.taobao.org/vue-template-compiler/download/vue-template-compiler-2.6.12.tgz",
"integrity": "sha1-lH7XGWdEyKUoXr4SM/6WBDf8xX4=", "integrity": "sha1-lH7XGWdEyKUoXr4SM/6WBDf8xX4=",
"dev": true,
"requires": { "requires": {
"de-indent": "^1.0.2", "de-indent": "^1.0.2",
"he": "^1.1.0" "he": "^1.1.0"
@@ -26192,6 +26200,11 @@
"integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=", "integrity": "sha1-HuO8mhbsv1EYvjNLsV+cRvgvWCU=",
"dev": true "dev": true
}, },
"vue-visibility-change": {
"version": "1.2.1",
"resolved": "https://registry.npm.taobao.org/vue-visibility-change/download/vue-visibility-change-1.2.1.tgz",
"integrity": "sha1-0YAIv08d4slHr+VEHuBEuenGAUE="
},
"warning": { "warning": {
"version": "4.0.3", "version": "4.0.3",
"resolved": "https://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz", "resolved": "https://registry.npm.taobao.org/warning/download/warning-4.0.3.tgz",
+2 -1
View File
@@ -12,7 +12,8 @@
"axios": "^0.21.1", "axios": "^0.21.1",
"core-js": "^3.6.5", "core-js": "^3.6.5",
"vue": "^2.6.11", "vue": "^2.6.11",
"vue-router": "^3.2.0" "vue-router": "^3.2.0",
"vue-visibility-change": "^1.2.1"
}, },
"devDependencies": { "devDependencies": {
"@vue/cli-plugin-babel": "~4.5.0", "@vue/cli-plugin-babel": "~4.5.0",
+8 -9
View File
@@ -1,5 +1,5 @@
<template> <template>
<a-layout id="nav"> <a-layout id="app" v-visibility-change="()=>{this.$refs.content.fetch?this.$refs.content.fetch():null}">
<a-layout-sider v-model="collapsed" :trigger="null" collapsible> <a-layout-sider v-model="collapsed" :trigger="null" collapsible>
<div class="logo"><b>R</b><span v-if="!collapsed"><b>ev</b>Suit</span></div> <div class="logo"><b>R</b><span v-if="!collapsed"><b>ev</b>Suit</span></div>
<a-menu theme="dark" mode="inline" :selectedKeys="[this.$route.path]" :openKeys.sync="openKeys"> <a-menu theme="dark" mode="inline" :selectedKeys="[this.$route.path]" :openKeys.sync="openKeys">
@@ -151,9 +151,6 @@ export default {
if (localStorage.getItem("autoRefresh") === null) { if (localStorage.getItem("autoRefresh") === null) {
this.autoRefresh = true; this.autoRefresh = true;
} }
if (this.autoRefresh && this.isLogMode) {
this.timing()
}
this.GetVersion() this.GetVersion()
}, },
created() { created() {
@@ -177,8 +174,10 @@ export default {
localStorage.setItem('autoRefresh', val) localStorage.setItem('autoRefresh', val)
}, },
isLogMode(val) { isLogMode(val) {
if (!val) { if (!val && this.timer) {
clearInterval(this.timer) clearInterval(this.timer)
} else if (this.autoRefresh && !this.timer) {
this.timing()
} }
}, },
refreshInterval(val) { refreshInterval(val) {
@@ -247,11 +246,11 @@ html, body {
color: white; color: white;
} }
#nav { #app {
height: 100%; height: 100%;
} }
#nav .trigger { #app .trigger {
font-size: 18px; font-size: 18px;
line-height: 64px; line-height: 64px;
padding: 0 24px; padding: 0 24px;
@@ -259,11 +258,11 @@ html, body {
transition: color 0.3s; transition: color 0.3s;
} }
#nav .trigger:hover { #app .trigger:hover {
color: #1890ff; color: #1890ff;
} }
#nav .logo { #app .logo {
height: 32px; height: 32px;
background: #0a1d2d; background: #0a1d2d;
margin: 16px; margin: 16px;
+4
View File
@@ -4,10 +4,14 @@ import App from './App';
import router from "@/router"; import router from "@/router";
import 'ant-design-vue/dist/antd.css'; import 'ant-design-vue/dist/antd.css';
import '@/utils/index' import '@/utils/index'
import visibility from 'vue-visibility-change';
Vue.config.productionTip = false; Vue.config.productionTip = false;
Vue.use(Antd); Vue.use(Antd);
Vue.use(visibility);
export const store = Vue.observable({ export const store = Vue.observable({
authed: true, authed: true,
pageSize: localStorage.getItem("pageSize") ? parseInt(localStorage.getItem("pageSize")) : 10 pageSize: localStorage.getItem("pageSize") ? parseInt(localStorage.getItem("pageSize")) : 10
+2 -1
View File
@@ -1,4 +1,4 @@
version: 1.0 version: 1.1
addr: :10000 addr: :10000
token: token:
domain: domain:
@@ -10,6 +10,7 @@ http:
ip_header: ip_header:
dns: dns:
enable: true enable: true
addr: :53
rmi: rmi:
enable: true enable: true
addr: :1099 addr: :1099
+1
View File
@@ -2,4 +2,5 @@ package dns
type Config struct { type Config struct {
Enable bool Enable bool
Addr string
} }
+1 -1
View File
@@ -252,7 +252,7 @@ func (s *Server) Run() {
} }
}() }()
err := server.Run(":53") err := server.Run(s.Addr)
defer server.Close() defer server.Close()
if err != nil { if err != nil {
+1 -1
View File
@@ -1,5 +1,5 @@
package rhttp package rhttp
type Config struct { type Config struct {
IpHeader string IpHeader string `yaml:"ip_header"`
} }
+2 -5
View File
@@ -166,10 +166,7 @@ func (s *Server) Receive(c *gin.Context) {
continue continue
} }
var ( ip := strings.Split(c.Request.RemoteAddr, ":")[0]
ip = strings.Split(c.Request.RemoteAddr, ":")[0]
area = qqwry.Area(ip)
)
if ip1 := c.Request.Header.Get(s.IpHeader); s.IpHeader != "" && ip1 != "" { if ip1 := c.Request.Header.Get(s.IpHeader); s.IpHeader != "" && ip1 != "" {
ip = ip1 ip = ip1
@@ -177,7 +174,7 @@ func (s *Server) Receive(c *gin.Context) {
} }
// create new record // create new record
r, err := NewRecord(_rule, flag, c.Request.Method, u, ip, area, string(raw)) r, err := NewRecord(_rule, flag, c.Request.Method, u, ip, qqwry.Area(ip), string(raw))
if err != nil { if err != nil {
log.Warn("HTTP record[rule_id:%d] created failed :%s", _rule.ID, err) log.Warn("HTTP record[rule_id:%d] created failed :%s", _rule.ID, err)
code, err := strconv.Atoi(compileTpl(c, _rule.ResponseStatusCode, vars)) code, err := strconv.Atoi(compileTpl(c, _rule.ResponseStatusCode, vars))
+1 -1
View File
@@ -24,7 +24,7 @@ type Config struct {
Database string Database string
LogLevel string `yaml:"log_level"` LogLevel string `yaml:"log_level"`
Notice noticeConfig Notice noticeConfig
rhttp.Config HTTP rhttp.Config
DNS dns.Config DNS dns.Config
MySQL mysql.Config MySQL mysql.Config
RMI rmi.Config RMI rmi.Config
+3 -3
View File
@@ -17,7 +17,7 @@ import (
log "unknwon.dev/clog/v2" log "unknwon.dev/clog/v2"
) )
const VERSION = "0.1.3-beta" const VERSION = "0.1.4-beta"
type Revsuit struct { type Revsuit struct {
config *Config config *Config
@@ -204,8 +204,8 @@ func New(c *Config) *Revsuit {
if c.Token != "" { if c.Token != "" {
s.http.SetToken(c.Token) s.http.SetToken(c.Token)
} }
if c.IpHeader != "" { if c.HTTP.IpHeader != "" {
s.http.SetIpHeader(c.IpHeader) s.http.SetIpHeader(c.HTTP.IpHeader)
} }
if c.Domain != "" { if c.Domain != "" {
s.dns.SetServerDomain(c.Domain) s.dns.SetServerDomain(c.Domain)
+3 -3
View File
@@ -156,7 +156,7 @@ func (revsuit *Revsuit) getPlatformConfig(c *gin.Context) {
res["ExternalIP"] = revsuit.config.ExternalIP res["ExternalIP"] = revsuit.config.ExternalIP
res["Database"] = revsuit.config.Database res["Database"] = revsuit.config.Database
res["LogLevel"] = revsuit.config.LogLevel res["LogLevel"] = revsuit.config.LogLevel
res["IpHeader"] = revsuit.config.IpHeader res["IpHeader"] = revsuit.config.HTTP.IpHeader
c.JSON(200, res) c.JSON(200, res)
} }
@@ -194,8 +194,8 @@ func (revsuit *Revsuit) updatePlatformConfig(c *gin.Context) {
log.Info("Update platform config [database] to %s", form["Database"]) log.Info("Update platform config [database] to %s", form["Database"])
} }
if form["IpHeader"] != revsuit.config.IpHeader { if form["IpHeader"] != revsuit.config.HTTP.IpHeader {
revsuit.config.IpHeader = form["IpHeader"] revsuit.config.HTTP.IpHeader = form["IpHeader"]
revsuit.http.SetIpHeader(form["IpHeader"]) revsuit.http.SetIpHeader(form["IpHeader"])
log.Info("Update http config [ip_header] to %s", form["IpHeader"]) log.Info("Update http config [ip_header] to %s", form["IpHeader"])
} }